From 05c67d7882d218a885e2256ed354e149f11e8e7e Mon Sep 17 00:00:00 2001 From: Atul R Date: Mon, 26 Aug 2019 17:23:51 +0200 Subject: [PATCH 001/891] adds checkbox check prop --- docs/api/QCheckBox.md | 10 ++++++++++ src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp | 17 +++++++++++++++++ src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h | 4 +++- src/demo.ts | 1 + src/lib/QtWidgets/QCheckBox/index.ts | 8 ++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/docs/api/QCheckBox.md b/docs/api/QCheckBox.md index ddc4e64314..2d5de98f73 100644 --- a/docs/api/QCheckBox.md +++ b/docs/api/QCheckBox.md @@ -40,3 +40,13 @@ Additionally it also has the following instance methods: Sets the given text to the checkbox. - `text` string + +#### `checkbox.isChecked()` + +returns whether the checkbox is checked or not. It calls the native method [QAbstractButton: isChecked](https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop). + +#### `checkbox.setChecked(check)` + +This property holds whether the button is checked. It calls the native method [QAbstractButton: setChecked](https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop). + +- `check` boolean diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp index 4b8d89c9d5..de0a94b443 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp @@ -11,6 +11,8 @@ Napi::Object QCheckBoxWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QCheckBox"; Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("setText", &QCheckBoxWrap::setText), + InstanceMethod("setChecked", &QCheckBoxWrap::setChecked), + InstanceMethod("isChecked", &QCheckBoxWrap::isChecked), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QCheckBoxWrap) }); constructor = Napi::Persistent(func); @@ -54,3 +56,18 @@ Napi::Value QCheckBoxWrap::setText(const Napi::CallbackInfo& info) { return env.Null(); } +Napi::Value QCheckBoxWrap::isChecked(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + bool isChecked = this->instance->isChecked(); + return Napi::Value::From(env, isChecked); +} + +Napi::Value QCheckBoxWrap::setChecked(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Boolean check = info[0].As(); + this->instance->setChecked(check.Value()); + return env.Null(); +} + diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h index 983a04d10c..69bfe27512 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -17,7 +17,9 @@ class QCheckBoxWrap : public Napi::ObjectWrap{ static Napi::FunctionReference constructor; //wrapped methods Napi::Value setText(const Napi::CallbackInfo& info); - + Napi::Value isChecked(const Napi::CallbackInfo& info); + Napi::Value setChecked(const Napi::CallbackInfo& info); + QWIDGET_WRAPPED_METHODS_DECLARATION }; diff --git a/src/demo.ts b/src/demo.ts index d050a29e7b..02dc8c7912 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -25,6 +25,7 @@ label.setInlineStyle("font-size: 20px;"); const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); checkbox.setObjectName("check"); +checkbox.setChecked(true); const lineEdit = new QLineEdit(); lineEdit.setPlaceholderText("Enter your thoughts here"); diff --git a/src/lib/QtWidgets/QCheckBox/index.ts b/src/lib/QtWidgets/QCheckBox/index.ts index c9d945b50d..8bde291674 100644 --- a/src/lib/QtWidgets/QCheckBox/index.ts +++ b/src/lib/QtWidgets/QCheckBox/index.ts @@ -20,9 +20,17 @@ export class QCheckBox extends NodeWidget { this.parent = parent; // bind member functions this.setText.bind(this); + this.isChecked.bind(this); + this.setChecked.bind(this); } setText(text: string) { this.native.setText(text); } + isChecked(): boolean { + return this.native.isChecked(); + } + setChecked(check: boolean) { + return this.native.setChecked(check); + } } From fa6fbaf96a22ceccd7b26895fefc37eac296c5ca Mon Sep 17 00:00:00 2001 From: Atul R Date: Mon, 26 Aug 2019 17:31:47 +0200 Subject: [PATCH 002/891] bump version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2a335a9e2f..23bd12de64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.4", + "version": "0.1.6", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 58e945aa71..32e83f204a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.5", + "version": "0.1.6", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", From 20181467f3b4968cf45048cf8890650fbe47e23a Mon Sep 17 00:00:00 2001 From: James Hibbard <1940994+jameshibbard@users.noreply.github.com> Date: Mon, 26 Aug 2019 23:38:55 +0200 Subject: [PATCH 003/891] Improves instructions for setting up Linux --- docs/tutorial/development-environment.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tutorial/development-environment.md b/docs/tutorial/development-environment.md index 0c6f5aa84f..fae0f36800 100644 --- a/docs/tutorial/development-environment.md +++ b/docs/tutorial/development-environment.md @@ -63,14 +63,14 @@ for JavaScript development. ## Setting up Linux -> NodeGui currently supports Ubuntu 17.10 and Debian 10 and up. Although other linux distributions can also be easily supported. NodeGui currently only supports 64bit OS. NodeGui can technically support lower versions of linux that what is mentioned here provided gcc >= v7 and libc version >= GLIBC_2.25 +> NodeGui currently supports Ubuntu 17.10 and Debian 10 and up. Although other Linux distributions can also be easily supported. NodeGui currently only supports 64bit OS. NodeGui can technically support lower versions of Linux than mentioned here provided gcc >= v7 and libc version >= GLIBC_2.25 **Requirements:** - Python 2.x , Make, GCC v7 - Currently supported Node.Js versions are 12.x and up. - Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209 -- It is advisable to do: `On Ubuntu: $ sudo apt-get install pkg-config build-essentials` +- On Ubuntu and Ubuntu-based distros it is advisable to run `sudo apt-get update`, followed by `sudo apt-get install pkg-config build-essential` We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm From 28b0b6c90d9c67fea638c371d417e3d24e7fff5e Mon Sep 17 00:00:00 2001 From: James Hibbard <1940994+jameshibbard@users.noreply.github.com> Date: Tue, 27 Aug 2019 00:21:59 +0200 Subject: [PATCH 004/891] Adds readOnly prop to QPlainTextEdit --- docs/api/QPlainTextEdit.md | 4 ++++ .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp | 12 +++++++++++- .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h | 1 + src/lib/QtWidgets/QPlainTextEdit/index.ts | 4 ++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index 23a060fb82..0a820a80d8 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -42,6 +42,10 @@ Sets the given text to the plainTextEdit. Returns the text of the text edit as plain text. +#### [`plainTextEdit.setReadOnly(isReadOnly)`](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop) + +Sets the plainTextEdit to be read only. + #### [`plainTextEdit.clear()`](https://doc.qt.io/qt-5/qplaintextedit.html#clear) Deletes all the text in the text edit. diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index 296cef0688..83f04e4f66 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -13,6 +13,7 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("setPlainText",&QPlainTextEditWrap::setPlainText), InstanceMethod("toPlainText",&QPlainTextEditWrap::toPlainText), + InstanceMethod("setReadOnly", &QPlainTextEditWrap::setReadOnly), InstanceMethod("clear", &QPlainTextEditWrap::clear), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) @@ -55,6 +56,15 @@ Napi::Value QPlainTextEditWrap::setPlainText(const Napi::CallbackInfo& info){ return env.Null(); } +Napi::Value QPlainTextEditWrap::setReadOnly(const Napi::CallbackInfo &info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Boolean isReadOnly = info[0].As(); + this->instance->setReadOnly(isReadOnly.Value()); + return env.Null(); +} + Napi::Value QPlainTextEditWrap::toPlainText(const Napi::CallbackInfo &info){ Napi::Env env = info.Env(); Napi::HandleScope scope(env); @@ -66,4 +76,4 @@ Napi::Value QPlainTextEditWrap::clear(const Napi::CallbackInfo &info){ Napi::HandleScope scope(env); this->instance->clear(); return env.Null(); -} \ No newline at end of file +} diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index 6f4e96e191..36d9a02bc9 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -20,6 +20,7 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION Napi::Value setPlainText(const Napi::CallbackInfo& info); Napi::Value toPlainText(const Napi::CallbackInfo &info); + Napi::Value setReadOnly(const Napi::CallbackInfo &info); Napi::Value clear(const Napi::CallbackInfo &info); }; diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 3afd88a6ec..c89d4d43ad 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -24,6 +24,7 @@ export class QPlainTextEdit extends QAbstractScrollArea { // bind member functions this.setPlainText.bind(this); this.toPlainText.bind(this); + this.setReadOnly.bind(this); this.clear.bind(this); } setPlainText(text: string | number) { @@ -32,6 +33,9 @@ export class QPlainTextEdit extends QAbstractScrollArea { toPlainText() { return this.native.toPlainText(); } + setReadOnly(isReadOnly: boolean) { + this.native.setReadOnly(isReadOnly); + } clear() { this.native.clear(); } From 0ab2d88fb38647069bb28b5b525c56647fede9ab Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2019 05:46:22 +0000 Subject: [PATCH 005/891] docs: update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index de6ac06f7f..8b95de151f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # NodeGUI -[![All Contributors](https://img.shields.io/badge/all_contributors-8-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 @@ -94,16 +94,17 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d - - - + + + +
Kakul Gupta
Kakul Gupta

💻
Rahul Gaba
Rahul Gaba

💻
Paweł Borecki
Paweł Borecki

💻
Lucas Ramage
Lucas Ramage

📖
Denis Sikuler
Denis Sikuler

📖
Nahuel José
Nahuel José

💬
Kakul Gupta
Kakul Gupta

💻
Rahul Gaba
Rahul Gaba

💻
Paweł Borecki
Paweł Borecki

💻
Marcus S. Abildskov
Marcus S. Abildskov

⚠️
Átila Camurça Alves
Átila Camurça Alves

📖
James Hibbard
James Hibbard

💻
From a611c9bba9636d8167773c7185fbd48e2689a040 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Tue, 27 Aug 2019 05:46:23 +0000 Subject: [PATCH 006/891] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 6b8dec6f52..0fba73f12d 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -76,6 +76,15 @@ "contributions": [ "doc" ] + }, + { + "login": "jameshibbard", + "name": "James Hibbard", + "avatar_url": "https://avatars2.githubusercontent.com/u/1940994?v=4", + "profile": "http://hibbard.eu", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From e623ae10b2f566e5f92bf1ee1e05e22f9095c163 Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 30 Aug 2019 18:58:32 +0200 Subject: [PATCH 007/891] Update README.md --- docs/development/README.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/development/README.md b/docs/development/README.md index 9a74fd96af..1f800a76ca 100644 --- a/docs/development/README.md +++ b/docs/development/README.md @@ -20,3 +20,29 @@ Please make sure you have read the [User's guides](/) before reading this guide. - [Common Errors](development/common_errors.md) - [Wrapping a Widget: Detailed](development/wrapping_widgets.md) - [Getting Support](tutorial/support.md) + + +# Where to start or How can you help? + + You can follow the contributors guide above to get a gist. + + It is fairly straightforward to get started. I would start with a project of my own and start adding missing functionalities. + + Or simply put I would recommend you start by adding an unexported method to an existing widget. + + **For example:** + + You could add the corresponding Qt method to QProgressbar + https://doc.qt.io/qt-5/qprogressbar.html#textVisible-prop to get a grip on it. + + This PR can be used as a guide + + https://github.com/nodegui/nodegui/issues/36 + + https://github.com/nodegui/nodegui/pull/39 + + You can also take a look at few bugs or the issue board here to know what you can pick up if you are out of ideas. + + https://github.com/nodegui/nodegui/projects/ + + https://github.com/nodegui/react-nodegui/projects/ From 9df9421baf0081975bdb7d70d6ba6111667bb5b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Fri, 30 Aug 2019 21:48:01 +0200 Subject: [PATCH 008/891] Support for QDial and QAbstractSlider with docs --- config/application.gypi | 1 + config/moc.gypi | 23 +- config/moc.json | 1 + docs/api/QAbstractScrollArea.md | 4 +- docs/api/QAbstractSlider.md | 67 ++++ docs/api/QDial.md | 67 ++++ docs/react/README.md | 8 + .../QAbstractSlider/qabstractslider_macro.h | 91 +++++ src/cpp/QtWidgets/QDial/ndial.h | 42 +++ src/cpp/QtWidgets/QDial/qdial_wrap.cpp | 96 +++++ src/cpp/QtWidgets/QDial/qdial_wrap.h | 29 ++ src/cpp/autogen/ndial_moc.cpp | 336 ++++++++++++++++++ src/cpp/main.cpp | 2 + src/demo.ts | 23 ++ src/index.ts | 1 + src/lib/QtWidgets/QAbstractSlider/index.ts | 30 ++ src/lib/QtWidgets/QDial/index.ts | 53 +++ 17 files changed, 861 insertions(+), 13 deletions(-) create mode 100644 docs/api/QAbstractSlider.md create mode 100644 docs/api/QDial.md create mode 100644 src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h create mode 100644 src/cpp/QtWidgets/QDial/ndial.h create mode 100644 src/cpp/QtWidgets/QDial/qdial_wrap.cpp create mode 100644 src/cpp/QtWidgets/QDial/qdial_wrap.h create mode 100644 src/cpp/autogen/ndial_moc.cpp create mode 100644 src/lib/QtWidgets/QAbstractSlider/index.ts create mode 100644 src/lib/QtWidgets/QDial/index.ts diff --git a/config/application.gypi b/config/application.gypi index 9490b2d8d2..60e08454df 100644 --- a/config/application.gypi +++ b/config/application.gypi @@ -17,6 +17,7 @@ '../src/cpp/core/FlexLayout/flexlayout_wrap.cpp', "../src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp", "../src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp", + "../src/cpp/QtWidgets/QDial/qdial_wrap.cpp", "../src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp", "../src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp", "../src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp", diff --git a/config/moc.gypi b/config/moc.gypi index 874f4ab352..5ce3cc25a2 100644 --- a/config/moc.gypi +++ b/config/moc.gypi @@ -2,16 +2,17 @@ # RUN: npm run automoc after updating moc.json { "sources": [ - "../src/cpp/autogen/nwidget_moc.cpp", - "../src/cpp/autogen/nlabel_moc.cpp", - "../src/cpp/autogen/ncheckbox_moc.cpp", - "../src/cpp/autogen/nlineedit_moc.cpp", - "../src/cpp/autogen/nmainwindow_moc.cpp", - "../src/cpp/autogen/nprogressbar_moc.cpp", - "../src/cpp/autogen/npushbutton_moc.cpp", - "../src/cpp/autogen/nspinbox_moc.cpp", - "../src/cpp/autogen/nradiobutton_moc.cpp", - "../src/cpp/autogen/nplaintextedit_moc.cpp", - "../src/cpp/autogen/nscrollarea_moc.cpp" + "..\\src\\cpp\\autogen\\nwidget_moc.cpp", + "..\\src\\cpp\\autogen\\nlabel_moc.cpp", + "..\\src\\cpp\\autogen\\ncheckbox_moc.cpp", + "..\\src\\cpp\\autogen\\ndial_moc.cpp", + "..\\src\\cpp\\autogen\\nlineedit_moc.cpp", + "..\\src\\cpp\\autogen\\nmainwindow_moc.cpp", + "..\\src\\cpp\\autogen\\nprogressbar_moc.cpp", + "..\\src\\cpp\\autogen\\npushbutton_moc.cpp", + "..\\src\\cpp\\autogen\\nspinbox_moc.cpp", + "..\\src\\cpp\\autogen\\nradiobutton_moc.cpp", + "..\\src\\cpp\\autogen\\nplaintextedit_moc.cpp", + "..\\src\\cpp\\autogen\\nscrollarea_moc.cpp" ] } \ No newline at end of file diff --git a/config/moc.json b/config/moc.json index 1751185643..db5d1a0fb9 100644 --- a/config/moc.json +++ b/config/moc.json @@ -4,6 +4,7 @@ "src/cpp/QtWidgets/QWidget/nwidget.h", "src/cpp/QtWidgets/QLabel/nlabel.h", "src/cpp/QtWidgets/QCheckBox/ncheckbox.h", + "src/cpp/QtWidgets/QDial/ndial.h", "src/cpp/QtWidgets/QLineEdit/nlineedit.h", "src/cpp/QtWidgets/QMainWindow/nmainwindow.h", "src/cpp/QtWidgets/QProgressBar/nprogressbar.h", diff --git a/docs/api/QAbstractScrollArea.md b/docs/api/QAbstractScrollArea.md index 3e3a669270..3ad273b3d7 100644 --- a/docs/api/QAbstractScrollArea.md +++ b/docs/api/QAbstractScrollArea.md @@ -2,9 +2,9 @@ > Abstract class to add functionalities common to all scrollarea based widgets. -**This class implements all methods, properties of Qt's [QAbstractScrollArea class](https://doc.qt.io/qt-5/qabstractscrollarea.html) so that it can be inherited by all scoll based widgets** +**This class implements all methods, properties of Qt's [QAbstractScrollArea class](https://doc.qt.io/qt-5/qabstractscrollarea.html) so that it can be inherited by all scroll based widgets** -`QAbstractScrollArea` is an abstract class and hence no instances of the same should be created. It exists so that we can add similar functionalities to all scrollable widget's easily. If you wish to create a scollarea use [QScrollArea](api/QScrollArea.md) instead. +`QAbstractScrollArea` is an abstract class and hence no instances of the same should be created. It exists so that we can add similar functionalities to all scrollable widget's easily. If you wish to create a scrollarea use [QScrollArea](api/QScrollArea.md) instead. **QAbstractScrollArea is the base class for all widgets. It inherits from another abstract class [NodeWidget](api/NodeWidget.md)** diff --git a/docs/api/QAbstractSlider.md b/docs/api/QAbstractSlider.md new file mode 100644 index 0000000000..d51524fb0a --- /dev/null +++ b/docs/api/QAbstractSlider.md @@ -0,0 +1,67 @@ +## Class: QAbstractSlider + +> Abstract class to add functionalities common to all slider based widgets. + +**This class implements all methods, properties of Qt's [QAbstractSlider class](https://doc.qt.io/qt-5/qabstractslider.html) so that it can be inherited by all slider based widgets** + +`QAbstractSlider` is an abstract class and hence no instances of the same should be created. It exists so that we can add similar functionalities to all slider widget's easily. If you wish to create a slider use [QDial](api/QDial.md) instead. + +**QAbstractSlider is the base class for all widgets. It inherits from another abstract class [NodeWidget](api/NodeWidget.md)** + +QAbstractSlider will list all methods and properties that are common to all slider widgets in the NodeGui world. + +### Static Methods + +QAbstractSlider can access all the static methods defined in [NodeWidget](api/NodeWidget.md) + +### Instance Properties + +QAbstractSlider can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) + +### Instance Methods + +QAbstractSlider can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) + +Additionally it also has the following instance methods: + +#### `widget.setSingleStep(step)` + +Sets the step value for user arrow key slider interaction. It calls the native method [QAbstractSlider: setSingleStep](https://doc.qt.io/qt-5/qabstractslider.html#singleStep-prop). + +- `step` number - Specified single step value. + +#### `widget.setMaximum(maximum)` + +Sets the maximum value for slider. It calls the native method [QAbstractSlider: setMaximum](https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop). + +- `maximum` number - Specified maximum slider value. + +#### `widget.setMinimum(minimum)` + +Sets the minimum value for slider. It calls the native method [QAbstractSlider: setMinimum](https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop). + +- `minimum` number - Specified minimum slider value. + +#### `widget.setValue(value)` + +Sets the current value for slider. It calls the native method [QAbstractSlider: setValue](https://doc.qt.io/qt-5/qabstractslider.html#value-prop). + +- `value` number - Specified current slider value. + +#### `widget.setOrientation(orientation)` + +Sets the current orientation for slider. It calls the native method [QAbstractSlider: setOrientation](https://doc.qt.io/qt-5/qabstractslider.html#orientation-prop). + +- `orientation` Orientation - Specifies visual orientation of the slider. [Orientation is an enum from Qt](api/QtEnums.md) + +#### `slider.maximum()` + +Returns the maximum value (Number) of the slider. It calls the native method [QAbstractSlider: maximum](https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop). + +#### `slider.minimum()` + +Returns the minimum value (Number) of the slider. It calls the native method [QAbstractSlider: minimum](https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop). + +#### `slider.value()` + +Returns the current value (Number) of the slider. It calls the native method [QAbstractSlider: value](https://doc.qt.io/qt-5/qabstractslider.html#value-prop). \ No newline at end of file diff --git a/docs/api/QDial.md b/docs/api/QDial.md new file mode 100644 index 0000000000..0b9059c8c9 --- /dev/null +++ b/docs/api/QDial.md @@ -0,0 +1,67 @@ +## Class: QDial + +> Create and control spin box widgets. + +**This class is a JS wrapper around Qt's [QDial class](https://doc.qt.io/qt-5/qdial.html)** + +A `QDial` provides ability to add and manipulate native spin box widgets. + +**QDial inherits from [QAbstractSlider](api/QAbstractSlider.md)** + +### Example + +```javascript +const { QDial } = require("@nodegui/nodegui"); + +const dial = new QDial(); +``` + +### `new QDial(parent?)` + +- `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. + +### Static Methods + +QDial can access all the static methods defined in [NodeWidget](api/NodeWidget.md) + +### Instance Properties + +QDial can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) + +### Instance Methods + +QDial can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: + +#### `dial.setNotchesVisible(visible)` + +Sets the visibility of notches drawn around the dial. It calls the native method [QDial: setNotchesVisible](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). + +- `visible` boolean - Set the value as current notch visibility. + +#### `dial.setWrapping(on)` + +Sets the ability to wrap arrow around the dial instead of limiting it to upper part of the dial. It calls the native method [QDial: setWrapping](https://doc.qt.io/qt-5/qdial.html#wrapping-prop). + +- `on` boolean - Set the value as current wrapping setting. + +#### `dial.setNotchTarget(target)` + +Sets the number of pixels between dial notches. It calls the native method [QDial: setNotchTarget](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). + +- `target` number - Specifies number of pixels between notches. + +#### `dial.notchTarget()` + +Returns the current number of pixels between dial notches. It calls the native method [QDial: notchTarget](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). + +#### `dial.notchesVisible()` + +Returns the visibility status (Boolean) of dial notches. It calls the native method [QDial: notchesVisible](https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop). + +#### `dial.notchesVisible()` + +Returns the visibility status (Boolean) of dial notches. It calls the native method [QDial: notchesVisible](https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop). + +#### `dial.wrapping()` + +Returns the current wrapping (Boolean) state of the dial. It calls the native method [QDial: wrapping](https://doc.qt.io/qt-5/qdial.html#wrapping-prop). \ No newline at end of file diff --git a/docs/react/README.md b/docs/react/README.md index f53b4a88db..0af42a33d8 100644 --- a/docs/react/README.md +++ b/docs/react/README.md @@ -31,8 +31,15 @@ ### Modules from NodeGui: +- [QApplication (Application)](api/QApplication.md) - [QMainWindow (Window)](api/QMainWindow.md) - [QWidget (View)](api/QWidget.md) +- [QSpinBox ()](api/QSpinBox.md) +- [QAbstractScrollArea ()](api/QAbstractScrollArea.md) +- [QAbstractSlider ()](api/QAbstractSlider.md) +- [QDial ()](api/QDial.md) +- [QScrollArea ()](api/QScrollArea.md) +- [QPlainTextEdit (TextEdit)](api/QPlainTextEdit.md) - [QLabel (Text/Image)](api/QLabel.md) - [QPushButton (Button)](api/QPushButton.md) - [QRadioButton (RadioButton)](api/QRadioButton.md) @@ -41,6 +48,7 @@ - [QProgressBar (ProgressBar)](api/QProgressBar.md) - [FlexLayout](api/FlexLayout.md) - [QPixmap](api/QPixmap.md) +- [QIcon](api/QIcon.md) - [Qt Enums](api/QtEnums.md) ### Internal Modules diff --git a/src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h b/src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h new file mode 100644 index 0000000000..f12ca9489e --- /dev/null +++ b/src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h @@ -0,0 +1,91 @@ + +#pragma once +#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" +#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "deps/spdlog/spdlog.h" +/* + + This macro adds common QAbstractSlider exported methods + The exported methods are taken into this macro to avoid writing them in each and every widget we export. + */ + +#ifndef QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION +#define QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION \ +QWIDGET_WRAPPED_METHODS_DECLARATION \ +Napi::Value setSingleStep(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number step = info[0].As(); \ + this->instance->setSingleStep(step.Int32Value()); \ + return env.Null(); \ +} \ +\ +Napi::Value setMaximum(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number maximum = info[0].As(); \ + this->instance->setMaximum(maximum.Int32Value()); \ + return env.Null(); \ +} \ +\ +Napi::Value setMinimum(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number minimum = info[0].As(); \ + this->instance->setMinimum(minimum.Int32Value()); \ + return env.Null(); \ +} \ +\ +Napi::Value setValue(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number value = info[0].As(); \ + this->instance->setValue(value.Int32Value()); \ + return env.Null(); \ +} \ +\ +Napi::Value setOrientation(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number orientation = info[0].As(); \ + this->instance->setOrientation(static_cast(orientation.Int32Value())); \ + return env.Null(); \ +} \ +\ +Napi::Value maximum(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + int maximum = this->instance->maximum(); \ + return Napi::Number::New(env, maximum); \ +} \ +\ +Napi::Value minimum(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + int minimum = this->instance->minimum(); \ + return Napi::Number::New(env, minimum); \ +} \ +\ +Napi::Value value(const Napi::CallbackInfo& info) { \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + int value = this->instance->value(); \ + return Napi::Number::New(env, value); \ +} \ +\ + +#endif //QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION + +#ifndef QABSTRACTSLIDER_WRAPPED_METHODS_EXPORT_DEFINE +#define QABSTRACTSLIDER_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ + QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(WidgetWrapName) \ + InstanceMethod("setSingleStep", &WidgetWrapName::setSingleStep), \ + InstanceMethod("setMaximum", &WidgetWrapName::setMaximum), \ + InstanceMethod("setMinimum", &WidgetWrapName::setMinimum), \ + InstanceMethod("setValue", &WidgetWrapName::setValue), \ + InstanceMethod("setOrientation", &WidgetWrapName::setOrientation), \ + InstanceMethod("maximum", &WidgetWrapName::maximum), \ + InstanceMethod("minimum", &WidgetWrapName::minimum), \ + InstanceMethod("value", &WidgetWrapName::value), \ + +#endif // QABSTRACTSLIDER_WRAPPED_METHODS_EXPORT_DEFINE diff --git a/src/cpp/QtWidgets/QDial/ndial.h b/src/cpp/QtWidgets/QDial/ndial.h new file mode 100644 index 0000000000..3e9029b265 --- /dev/null +++ b/src/cpp/QtWidgets/QDial/ndial.h @@ -0,0 +1,42 @@ +#pragma once + +#include +#include "src/cpp/core/NodeWidget/nodewidget.h" + +class NDial: public QDial, public NodeWidget +{ + NODEWIDGET_IMPLEMENTATIONS(QDial) +public: + using QDial::QDial; //inherit all constructors of QDial + + void connectWidgetSignalsToEventEmitter() { + // Qt Connects: Implement all signal connects here + QObject::connect(this, &QDial::valueChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "valueChanged") }); + }); + QObject::connect(this, &QDial::rangeChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "rangeChanged") }); + }); + QObject::connect(this, &QDial::sliderMoved, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "sliderMoved") }); + }); + QObject::connect(this, &QDial::sliderPressed, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "sliderPressed") }); + }); + QObject::connect(this, &QDial::sliderReleased, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "sliderReleased") }); + }); + } +}; + + diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp new file mode 100644 index 0000000000..98cdc1bd4f --- /dev/null +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp @@ -0,0 +1,96 @@ + +#include "qDial_wrap.h" +#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" +#include "src/cpp/Extras/Utils/nutils.h" +#include + + +Napi::FunctionReference QDialWrap::constructor; + +Napi::Object QDialWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QDial"; + Napi::Function func = DefineClass(env, CLASSNAME, { + InstanceMethod("setNotchesVisible", &QDialWrap::setNotchesVisible), + InstanceMethod("setWrapping", &QDialWrap::setWrapping), + InstanceMethod("setNotchTarget", &QDialWrap::setNotchTarget), + InstanceMethod("notchTarget", &QDialWrap::notchTarget), + InstanceMethod("notchesVisible", &QDialWrap::notchesVisible), + InstanceMethod("wrapping", &QDialWrap::wrapping), + QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QDialWrap) + QABSTRACTSLIDER_WRAPPED_METHODS_EXPORT_DEFINE(QDialWrap) + }); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NDial* QDialWrap::getInternalInstance() { + return this->instance; +} + +QDialWrap::QDialWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + if(info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NDial(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + }else if (info.Length() == 0){ + this->instance = new NDial(); + }else { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } + // Adds measure function on yoga node so that widget size is calculated based on its own size. + YGNodeSetMeasureFunc(this->instance->getFlexNode(), &extrautils::measureQtWidget); +} + +QDialWrap::~QDialWrap() { + delete this->instance; +} + +Napi::Value QDialWrap::setNotchesVisible(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Boolean visible = info[0].As(); + this->instance->setNotchesVisible(visible.Value()); + return env.Null(); +} + +Napi::Value QDialWrap::setWrapping(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Boolean on = info[0].As(); + this->instance->setWrapping(on.Value()); + return env.Null(); +} + +Napi::Value QDialWrap::setNotchTarget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number target = info[0].As(); + this->instance->setNotchTarget(target.FloatValue()); + return env.Null(); +} + +Napi::Value QDialWrap::notchTarget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + float target = this->instance->notchTarget(); + return Napi::Value::From(env, target); +} + +Napi::Value QDialWrap::notchesVisible(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + bool notchesVisible = this->instance->notchesVisible(); + return Napi::Value::From(env, notchesVisible); +} + +Napi::Value QDialWrap::wrapping(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + bool wrapping = this->instance->wrapping(); + return Napi::Value::From(env, wrapping); +} diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.h b/src/cpp/QtWidgets/QDial/qdial_wrap.h new file mode 100644 index 0000000000..d890729763 --- /dev/null +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include "nDial.h" +#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h" + +class QDialWrap : public Napi::ObjectWrap{ + private: + NDial* instance; + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QDialWrap(const Napi::CallbackInfo& info); + ~QDialWrap(); + NDial* getInternalInstance(); + //class constructor + static Napi::FunctionReference constructor; + //wrapped methods + Napi::Value setNotchesVisible(const Napi::CallbackInfo& info); + Napi::Value setWrapping(const Napi::CallbackInfo& info); + Napi::Value setNotchTarget(const Napi::CallbackInfo& info); + Napi::Value notchTarget(const Napi::CallbackInfo& info); + Napi::Value notchesVisible(const Napi::CallbackInfo& info); + Napi::Value wrapping(const Napi::CallbackInfo& info); + + QABSTRACTSLIDER_WRAPPED_METHODS_DECLARATION +}; + + diff --git a/src/cpp/autogen/ndial_moc.cpp b/src/cpp/autogen/ndial_moc.cpp new file mode 100644 index 0000000000..d0996541f0 --- /dev/null +++ b/src/cpp/autogen/ndial_moc.cpp @@ -0,0 +1,336 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'ndial.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "../QtWidgets/QDial/ndial.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'ndial.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.13.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_NDial_t { + QByteArrayData data[47]; + char stringdata0[542]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_NDial_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_NDial_t qt_meta_stringdata_NDial = { + { +QT_MOC_LITERAL(0, 0, 5), // "NDial" +QT_MOC_LITERAL(1, 6, 8), // "yDisplay" +QT_MOC_LITERAL(2, 15, 11), // "yAlignItems" +QT_MOC_LITERAL(3, 27, 13), // "yAlignContent" +QT_MOC_LITERAL(4, 41, 10), // "yAlignSelf" +QT_MOC_LITERAL(5, 52, 15), // "yJustifyContent" +QT_MOC_LITERAL(6, 68, 10), // "yDirection" +QT_MOC_LITERAL(7, 79, 14), // "yFlexDirection" +QT_MOC_LITERAL(8, 94, 9), // "yOverflow" +QT_MOC_LITERAL(9, 104, 9), // "yPosition" +QT_MOC_LITERAL(10, 114, 9), // "yFlexWrap" +QT_MOC_LITERAL(11, 124, 5), // "yFlex" +QT_MOC_LITERAL(12, 130, 9), // "yFlexGrow" +QT_MOC_LITERAL(13, 140, 11), // "yFlexShrink" +QT_MOC_LITERAL(14, 152, 12), // "yAspectRatio" +QT_MOC_LITERAL(15, 165, 4), // "yTop" +QT_MOC_LITERAL(16, 170, 6), // "yRight" +QT_MOC_LITERAL(17, 177, 7), // "yBottom" +QT_MOC_LITERAL(18, 185, 5), // "yLeft" +QT_MOC_LITERAL(19, 191, 10), // "yFlexBasis" +QT_MOC_LITERAL(20, 202, 9), // "yMinWidth" +QT_MOC_LITERAL(21, 212, 10), // "yMinHeight" +QT_MOC_LITERAL(22, 223, 6), // "yWidth" +QT_MOC_LITERAL(23, 230, 7), // "yHeight" +QT_MOC_LITERAL(24, 238, 9), // "yMaxWidth" +QT_MOC_LITERAL(25, 248, 10), // "yMaxHeight" +QT_MOC_LITERAL(26, 259, 11), // "yPaddingTop" +QT_MOC_LITERAL(27, 271, 13), // "yPaddingRight" +QT_MOC_LITERAL(28, 285, 14), // "yPaddingBottom" +QT_MOC_LITERAL(29, 300, 12), // "yPaddingLeft" +QT_MOC_LITERAL(30, 313, 18), // "yPaddingHorizontal" +QT_MOC_LITERAL(31, 332, 16), // "yPaddingVertical" +QT_MOC_LITERAL(32, 349, 8), // "yPadding" +QT_MOC_LITERAL(33, 358, 10), // "yMarginTop" +QT_MOC_LITERAL(34, 369, 12), // "yMarginRight" +QT_MOC_LITERAL(35, 382, 13), // "yMarginBottom" +QT_MOC_LITERAL(36, 396, 11), // "yMarginLeft" +QT_MOC_LITERAL(37, 408, 17), // "yMarginHorizontal" +QT_MOC_LITERAL(38, 426, 15), // "yMarginVertical" +QT_MOC_LITERAL(39, 442, 7), // "yMargin" +QT_MOC_LITERAL(40, 450, 10), // "yBorderTop" +QT_MOC_LITERAL(41, 461, 12), // "yBorderRight" +QT_MOC_LITERAL(42, 474, 13), // "yBorderBottom" +QT_MOC_LITERAL(43, 488, 11), // "yBorderLeft" +QT_MOC_LITERAL(44, 500, 17), // "yBorderHorizontal" +QT_MOC_LITERAL(45, 518, 15), // "yBorderVertical" +QT_MOC_LITERAL(46, 534, 7) // "yBorder" + + }, + "NDial\0yDisplay\0yAlignItems\0yAlignContent\0" + "yAlignSelf\0yJustifyContent\0yDirection\0" + "yFlexDirection\0yOverflow\0yPosition\0" + "yFlexWrap\0yFlex\0yFlexGrow\0yFlexShrink\0" + "yAspectRatio\0yTop\0yRight\0yBottom\0yLeft\0" + "yFlexBasis\0yMinWidth\0yMinHeight\0yWidth\0" + "yHeight\0yMaxWidth\0yMaxHeight\0yPaddingTop\0" + "yPaddingRight\0yPaddingBottom\0yPaddingLeft\0" + "yPaddingHorizontal\0yPaddingVertical\0" + "yPadding\0yMarginTop\0yMarginRight\0" + "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" + "yMarginVertical\0yMargin\0yBorderTop\0" + "yBorderRight\0yBorderBottom\0yBorderLeft\0" + "yBorderHorizontal\0yBorderVertical\0" + "yBorder" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_NDial[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 46, 14, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // properties: name, type, flags + 1, QMetaType::QString, 0x00095103, + 2, QMetaType::QString, 0x00095103, + 3, QMetaType::QString, 0x00095103, + 4, QMetaType::QString, 0x00095103, + 5, QMetaType::QString, 0x00095103, + 6, QMetaType::QString, 0x00095103, + 7, QMetaType::QString, 0x00095103, + 8, QMetaType::QString, 0x00095103, + 9, QMetaType::QString, 0x00095103, + 10, QMetaType::QString, 0x00095103, + 11, QMetaType::Float, 0x00095103, + 12, QMetaType::Float, 0x00095103, + 13, QMetaType::Float, 0x00095103, + 14, QMetaType::Float, 0x00095103, + 15, QMetaType::QString, 0x00095003, + 16, QMetaType::QString, 0x00095003, + 17, QMetaType::QString, 0x00095003, + 18, QMetaType::QString, 0x00095003, + 19, QMetaType::QString, 0x00095103, + 20, QMetaType::QString, 0x00095103, + 21, QMetaType::QString, 0x00095103, + 22, QMetaType::QString, 0x00095103, + 23, QMetaType::QString, 0x00095103, + 24, QMetaType::QString, 0x00095103, + 25, QMetaType::QString, 0x00095103, + 26, QMetaType::QString, 0x00095103, + 27, QMetaType::QString, 0x00095103, + 28, QMetaType::QString, 0x00095103, + 29, QMetaType::QString, 0x00095103, + 30, QMetaType::QString, 0x00095103, + 31, QMetaType::QString, 0x00095103, + 32, QMetaType::QString, 0x00095103, + 33, QMetaType::QString, 0x00095103, + 34, QMetaType::QString, 0x00095103, + 35, QMetaType::QString, 0x00095103, + 36, QMetaType::QString, 0x00095103, + 37, QMetaType::QString, 0x00095103, + 38, QMetaType::QString, 0x00095103, + 39, QMetaType::QString, 0x00095003, + 40, QMetaType::Float, 0x00095103, + 41, QMetaType::Float, 0x00095103, + 42, QMetaType::Float, 0x00095103, + 43, QMetaType::Float, 0x00095103, + 44, QMetaType::Float, 0x00095103, + 45, QMetaType::Float, 0x00095103, + 46, QMetaType::Float, 0x00095103, + + 0 // eod +}; + +void NDial::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + +#ifndef QT_NO_PROPERTIES + if (_c == QMetaObject::ReadProperty) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; + case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; + case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; + case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; + case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; + case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; + case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; + case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; + case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; + case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; + case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; + case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; + case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; + case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; + case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; + case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; + case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; + case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; + case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; + case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; + case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; + case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; + case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; + case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; + case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; + case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; + case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; + case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; + case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; + case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; + case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; + case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; + case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; + case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; + case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; + case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; + case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; + case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; + case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; + case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; + case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; + case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; + case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; + case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; + case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; + case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; + default: break; + } + } else if (_c == QMetaObject::WriteProperty) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + void *_v = _a[0]; + switch (_id) { + case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; + case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; + case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; + case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; + case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; + case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; + case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; + case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; + case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; + case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; + case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; + case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; + case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; + case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; + case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; + case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; + case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; + case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; + case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; + case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; + case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; + case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; + case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; + case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; + case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; + case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; + case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; + case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; + case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; + case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; + case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; + case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; + case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; + case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; + case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; + case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; + case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; + case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; + case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; + case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; + case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; + case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; + case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; + case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; + case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; + case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; + default: break; + } + } else if (_c == QMetaObject::ResetProperty) { + } +#endif // QT_NO_PROPERTIES + Q_UNUSED(_o); + Q_UNUSED(_id); + Q_UNUSED(_c); + Q_UNUSED(_a); +} + +QT_INIT_METAOBJECT const QMetaObject NDial::staticMetaObject = { { + &QDial::staticMetaObject, + qt_meta_stringdata_NDial.data, + qt_meta_data_NDial, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *NDial::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *NDial::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_NDial.stringdata0)) + return static_cast(this); + if (!strcmp(_clname, "NodeWidget")) + return static_cast< NodeWidget*>(this); + return QDial::qt_metacast(_clname); +} + +int NDial::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDial::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + +#ifndef QT_NO_PROPERTIES + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyDesignable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyScriptable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyStored) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyEditable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyUser) { + _id -= 46; + } +#endif // QT_NO_PROPERTIES + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 92b1db6129..e83db76ac0 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -4,6 +4,7 @@ #include "src/cpp/QtGui/QIcon/qicon_wrap.h" #include "src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h" #include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" +#include "src/cpp/QtWidgets/Qdial/qdial_wrap.h" #include "src/cpp/QtWidgets/QLabel/qlabel_wrap.h" #include "src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h" #include "src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h" @@ -39,6 +40,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QLineEditWrap::init(env, exports); QKeyEventWrap::init(env, exports); QPlainTextEditWrap::init(env, exports); + QDialWrap::init(env, exports); QLabelWrap::init(env, exports); QScrollAreaWrap::init(env, exports); return exports; diff --git a/src/demo.ts b/src/demo.ts index 02dc8c7912..a0c5f8f2a2 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -9,10 +9,13 @@ import { FlexLayout, QWidget, QIcon, + QDial, + QDialEvents, QPlainTextEdit } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; +import { Orientation } from "./lib/QtEnums"; const path = require("path"); @@ -27,6 +30,25 @@ checkbox.setText("Check me out?"); checkbox.setObjectName("check"); checkbox.setChecked(true); +const dial = new QDial(); +checkbox.setObjectName("dial"); +dial.setWrapping(true); +dial.setNotchesVisible(true); +dial.setSingleStep(10); +dial.setSingleStep(5); +dial.setMinimum(55); +dial.setMaximum(95); +setInterval(() => { + dial.setValue(Math.floor(Math.random() * 100)); + console.log(dial.minimum(), dial.maximum(), dial.value()); +}, 500); +dial.addEventListener(QDialEvents.sliderReleased, () => { + console.log('RELEASED!'); +}); +dial.addEventListener(QDialEvents.sliderPressed, () => { + console.log('PRESSED!'); +}); + const lineEdit = new QLineEdit(); lineEdit.setPlaceholderText("Enter your thoughts here"); lineEdit.setObjectName("editable"); @@ -75,6 +97,7 @@ if (rootView.layout) { rootView.layout.addWidget(progressbar); rootView.layout.addWidget(textEdit); rootView.layout.addWidget(scrollArea); + rootView.layout.addWidget(dial); } win.setCentralWidget(rootView); diff --git a/src/index.ts b/src/index.ts index 8cef147fd0..07a3927085 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,6 +10,7 @@ export { NodeLayout } from "./lib/QtWidgets/QLayout"; // Widgets: export { QCheckBox, QCheckBoxEvents } from "./lib/QtWidgets/QCheckBox"; export { QLabel, QLabelEvents } from "./lib/QtWidgets/QLabel"; +export { QDial, QDialEvents } from "./lib/QtWidgets/Qdial"; export { QLineEdit, QLineEditEvents } from "./lib/QtWidgets/QLineEdit"; export { QMainWindow, QMainWindowEvents } from "./lib/QtWidgets/QMainWindow"; export { QProgressBar, QProgressBarEvents } from "./lib/QtWidgets/QProgressBar"; diff --git a/src/lib/QtWidgets/QAbstractSlider/index.ts b/src/lib/QtWidgets/QAbstractSlider/index.ts new file mode 100644 index 0000000000..ac587dbe91 --- /dev/null +++ b/src/lib/QtWidgets/QAbstractSlider/index.ts @@ -0,0 +1,30 @@ +import { NodeWidget, QWidget } from "../QWidget"; +import { Orientation } from "../../QtEnums"; + +export abstract class QAbstractSlider extends NodeWidget { + setSingleStep = (step: number) => { + this.native.setSingleStep(step); + }; + setMaximum(maximum: number) { + this.native.setMaximum(maximum); + } + setMinimum(minimum: number) { + this.native.setMinimum(minimum); + } + setValue(value: number) { + this.native.setValue(value); + } + setOrientation(orientation: Orientation) { + this.native.setOrientation(orientation); + } + + maximum(): number { + return this.native.maximum(); + } + minimum(): number { + return this.native.minimum(); + } + value(): number { + return this.native.value(); + } +} diff --git a/src/lib/QtWidgets/QDial/index.ts b/src/lib/QtWidgets/QDial/index.ts new file mode 100644 index 0000000000..a66f7c6080 --- /dev/null +++ b/src/lib/QtWidgets/QDial/index.ts @@ -0,0 +1,53 @@ +import addon from "../../core/addon"; +import { NodeWidget } from "../QWidget"; +import { BaseWidgetEvents } from "../../core/EventWidget"; +import { NativeElement } from "../../core/Component"; +import { QAbstractSlider } from "../QAbstractSlider"; + +export const QDialEvents = Object.freeze({ + ...BaseWidgetEvents, + valueChanged: "valueChanged", + rangeChanged: "rangeChanged", + sliderMoved: "sliderMoved", + sliderPressed: "sliderPressed", + sliderReleased: "sliderReleased" +}); +export class QDial extends QAbstractSlider { + native: NativeElement; + constructor(parent?: NodeWidget) { + let native; + if (parent) { + native = new addon.QDial(parent.native); + } else { + native = new addon.QDial(); + } + super(native); + this.native = native; + this.parent = parent; + // bind member functions + this.setNotchesVisible.bind(this); + this.setWrapping.bind(this); + this.setNotchTarget.bind(this); + this.notchTarget.bind(this); + this.notchesVisible.bind(this); + this.wrapping.bind(this); + } + setNotchesVisible(visible: boolean) { + this.native.setNotchesVisible(visible); + } + setWrapping(on: boolean) { + this.native.setWrapping(on); + } + setNotchTarget(target: number) { + this.native.setNotchTarget(target); + } + notchTarget(): number { + return this.native.notchTarget(); + } + notchesVisible(): boolean { + return this.native.notchesVisible(); + } + wrapping(): boolean { + return this.native.wrapping(); + } +} From 6cbb433aaae38ebdbbba56f18de7e7b772de379d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Fri, 30 Aug 2019 21:53:31 +0200 Subject: [PATCH 009/891] Minor fixes for copied code and demo content --- config/moc.gypi | 24 ++++++++++++------------ docs/README.md | 2 ++ docs/api/QDial.md | 4 ++-- src/cpp/QtWidgets/QDial/qdial_wrap.cpp | 2 +- src/demo.ts | 18 ------------------ 5 files changed, 17 insertions(+), 33 deletions(-) diff --git a/config/moc.gypi b/config/moc.gypi index 5ce3cc25a2..aabfe38d76 100644 --- a/config/moc.gypi +++ b/config/moc.gypi @@ -2,17 +2,17 @@ # RUN: npm run automoc after updating moc.json { "sources": [ - "..\\src\\cpp\\autogen\\nwidget_moc.cpp", - "..\\src\\cpp\\autogen\\nlabel_moc.cpp", - "..\\src\\cpp\\autogen\\ncheckbox_moc.cpp", - "..\\src\\cpp\\autogen\\ndial_moc.cpp", - "..\\src\\cpp\\autogen\\nlineedit_moc.cpp", - "..\\src\\cpp\\autogen\\nmainwindow_moc.cpp", - "..\\src\\cpp\\autogen\\nprogressbar_moc.cpp", - "..\\src\\cpp\\autogen\\npushbutton_moc.cpp", - "..\\src\\cpp\\autogen\\nspinbox_moc.cpp", - "..\\src\\cpp\\autogen\\nradiobutton_moc.cpp", - "..\\src\\cpp\\autogen\\nplaintextedit_moc.cpp", - "..\\src\\cpp\\autogen\\nscrollarea_moc.cpp" + "../src/cpp/autogen/nwidget_moc.cpp", + "../src/cpp/autogen/nlabel_moc.cpp", + "../src/cpp/autogen/ncheckbox_moc.cpp", + "../src/cpp/autogen/ndial_moc.cpp", + "../src/cpp/autogen/nlineedit_moc.cpp", + "../src/cpp/autogen/nmainwindow_moc.cpp", + "../src/cpp/autogen/nprogressbar_moc.cpp", + "../src/cpp/autogen/npushbutton_moc.cpp", + "../src/cpp/autogen/nspinbox_moc.cpp", + "../src/cpp/autogen/nradiobutton_moc.cpp", + "../src/cpp/autogen/nplaintextedit_moc.cpp", + "../src/cpp/autogen/nscrollarea_moc.cpp" ] } \ No newline at end of file diff --git a/docs/README.md b/docs/README.md index 4426365c50..770c7d2ece 100644 --- a/docs/README.md +++ b/docs/README.md @@ -45,6 +45,8 @@ - [QWidget (View)](api/QWidget.md) - [QSpinBox ()](api/QSpinBox.md) - [QAbstractScrollArea ()](api/QAbstractScrollArea.md) +- [QAbstractSlider ()](api/QAbstractSlider.md) +- [QDial ()](api/QDial.md) - [QScrollArea ()](api/QScrollArea.md) - [QPlainTextEdit (TextEdit)](api/QPlainTextEdit.md) - [QLabel (Text/Image)](api/QLabel.md) diff --git a/docs/api/QDial.md b/docs/api/QDial.md index 0b9059c8c9..cbc2698f40 100644 --- a/docs/api/QDial.md +++ b/docs/api/QDial.md @@ -1,10 +1,10 @@ ## Class: QDial -> Create and control spin box widgets. +> Create and control dial slider widgets. **This class is a JS wrapper around Qt's [QDial class](https://doc.qt.io/qt-5/qdial.html)** -A `QDial` provides ability to add and manipulate native spin box widgets. +A `QDial` provides ability to add and manipulate native dial slider widgets. **QDial inherits from [QAbstractSlider](api/QAbstractSlider.md)** diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp index 98cdc1bd4f..a2653ea059 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp @@ -1,5 +1,5 @@ -#include "qDial_wrap.h" +#include "qdial_wrap.h" #include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" #include "src/cpp/Extras/Utils/nutils.h" #include diff --git a/src/demo.ts b/src/demo.ts index a0c5f8f2a2..e6dcd9a8fe 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,12 +10,10 @@ import { QWidget, QIcon, QDial, - QDialEvents, QPlainTextEdit } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; -import { Orientation } from "./lib/QtEnums"; const path = require("path"); @@ -32,22 +30,6 @@ checkbox.setChecked(true); const dial = new QDial(); checkbox.setObjectName("dial"); -dial.setWrapping(true); -dial.setNotchesVisible(true); -dial.setSingleStep(10); -dial.setSingleStep(5); -dial.setMinimum(55); -dial.setMaximum(95); -setInterval(() => { - dial.setValue(Math.floor(Math.random() * 100)); - console.log(dial.minimum(), dial.maximum(), dial.value()); -}, 500); -dial.addEventListener(QDialEvents.sliderReleased, () => { - console.log('RELEASED!'); -}); -dial.addEventListener(QDialEvents.sliderPressed, () => { - console.log('PRESSED!'); -}); const lineEdit = new QLineEdit(); lineEdit.setPlaceholderText("Enter your thoughts here"); From e85ebedb57cdfe1ed19e0b9722e48dd4a64438a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Fri, 30 Aug 2019 23:47:19 +0200 Subject: [PATCH 010/891] Update qdial_wrap.cpp --- src/cpp/QtWidgets/QDial/qdial_wrap.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp index a2653ea059..8b6144f4a7 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp @@ -17,7 +17,6 @@ Napi::Object QDialWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("notchTarget", &QDialWrap::notchTarget), InstanceMethod("notchesVisible", &QDialWrap::notchesVisible), InstanceMethod("wrapping", &QDialWrap::wrapping), - QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QDialWrap) QABSTRACTSLIDER_WRAPPED_METHODS_EXPORT_DEFINE(QDialWrap) }); constructor = Napi::Persistent(func); From c4556ee04a822f1755e56059b8727bb3665f7398 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 31 Aug 2019 12:57:35 +0200 Subject: [PATCH 011/891] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 8b95de151f..e7d85c762e 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,10 @@ https://github.com/nodegui/examples ## Docs for contributing + ``` + It is easier than you think, try it + ``` + Looking to contribute? If you wish to implement a new widget/add more features and need help understanding the codebase, you can start here: [Contributing developer docs](https://github.com/nodegui/nodegui/tree/master/docs/development). ## Building From c68554c26d5628aa8576a098da02992565cbddee Mon Sep 17 00:00:00 2001 From: Atul Date: Sat, 31 Aug 2019 16:32:17 +0200 Subject: [PATCH 012/891] fix naming issues --- src/cpp/QtWidgets/QDial/qdial_wrap.h | 2 +- src/cpp/main.cpp | 2 +- src/demo.ts | 2 ++ src/index.ts | 2 +- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.h b/src/cpp/QtWidgets/QDial/qdial_wrap.h index d890729763..26f361dc1f 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.h +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.h @@ -1,7 +1,7 @@ #pragma once #include -#include "nDial.h" +#include "ndial.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h" diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index e83db76ac0..d25f3e18fa 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -4,7 +4,7 @@ #include "src/cpp/QtGui/QIcon/qicon_wrap.h" #include "src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h" #include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" -#include "src/cpp/QtWidgets/Qdial/qdial_wrap.h" +#include "src/cpp/QtWidgets/QDial/qdial_wrap.h" #include "src/cpp/QtWidgets/QLabel/qlabel_wrap.h" #include "src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h" #include "src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h" diff --git a/src/demo.ts b/src/demo.ts index e6dcd9a8fe..ee41f3e5e6 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -92,6 +92,8 @@ win.setStyleSheet(` } `); +win.setWindowTitle("hello"); + win.resize(400, 400); win.show(); diff --git a/src/index.ts b/src/index.ts index 07a3927085..6a483ecfbb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,7 @@ export { NodeLayout } from "./lib/QtWidgets/QLayout"; // Widgets: export { QCheckBox, QCheckBoxEvents } from "./lib/QtWidgets/QCheckBox"; export { QLabel, QLabelEvents } from "./lib/QtWidgets/QLabel"; -export { QDial, QDialEvents } from "./lib/QtWidgets/Qdial"; +export { QDial, QDialEvents } from "./lib/QtWidgets/QDial"; export { QLineEdit, QLineEditEvents } from "./lib/QtWidgets/QLineEdit"; export { QMainWindow, QMainWindowEvents } from "./lib/QtWidgets/QMainWindow"; export { QProgressBar, QProgressBarEvents } from "./lib/QtWidgets/QProgressBar"; From fdc8d271d8677a48aedd17a270d5921a8222b65d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Sat, 31 Aug 2019 18:42:17 +0200 Subject: [PATCH 013/891] Added missing QWidget set methods and QCursor support --- config/application.gypi | 1 + docs/api/NodeWidget.md | 18 ++++++ extras/assets/nodegui.png | Bin 0 -> 40701 bytes src/cpp/QtGui/QCursor/qcursor_wrap.cpp | 68 ++++++++++++++++++++++ src/cpp/QtGui/QCursor/qcursor_wrap.h | 21 +++++++ src/cpp/QtWidgets/QWidget/qwidget_macro.h | 26 +++++++++ src/cpp/main.cpp | 2 + src/demo.ts | 10 +++- src/index.ts | 1 + src/lib/QtGui/QCursor/index.ts | 22 +++++++ src/lib/QtWidgets/QWidget/index.ts | 12 ++++ 11 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 extras/assets/nodegui.png create mode 100644 src/cpp/QtGui/QCursor/qcursor_wrap.cpp create mode 100644 src/cpp/QtGui/QCursor/qcursor_wrap.h create mode 100644 src/lib/QtGui/QCursor/index.ts diff --git a/config/application.gypi b/config/application.gypi index 60e08454df..b3a835dabe 100644 --- a/config/application.gypi +++ b/config/application.gypi @@ -14,6 +14,7 @@ "../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp", "../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp", "../src/cpp/QtGui/QIcon/qicon_wrap.cpp", + "../src/cpp/QtGui/QCursor/qcursor_wrap.cpp", '../src/cpp/core/FlexLayout/flexlayout_wrap.cpp', "../src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp", "../src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp", diff --git a/docs/api/NodeWidget.md b/docs/api/NodeWidget.md index fc61f7d023..e29571bb7a 100644 --- a/docs/api/NodeWidget.md +++ b/docs/api/NodeWidget.md @@ -82,6 +82,24 @@ Sets the property that holds the widget's style sheet. It calls the native metho - `styleSheet` string - String which holds the widget's style sheet. Make sure you create this string using `StyleSheet.create()` +#### `widget.setCursor(cursor)` + +Sets the window mouse cursor. It calls the native method [QWidget: setCursor](https://doc.qt.io/qt-5/qwidget.html#cursor-prop). + +- `cursor` CursorShape - Specifies current cursor for the window [CursorShape is an enum from Qt](api/QtEnums.md) + +#### `widget.setWindowIcon(icon)` + +Sets the window icon. It calls the native method [QWidget: setWindowIcon](https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop). + +- `icon` QIcon - Specifies icon for the window. + +#### `widget.setWindowState(state)` + +Sets the window state. It calls the native method [QWidget: setWindowState](https://doc.qt.io/qt-5/qwidget.html#setWindowState). + +- `state` WindowState - Specifies current state for the window [WindowState is an enum from Qt](api/QtEnums.md) + #### `widget.setWindowTitle(title)` Sets the window title property. It calls the native method [QWidget: setWindowTitle](https://doc.qt.io/qt-5/qwidget.html#windowTitle-prop). diff --git a/extras/assets/nodegui.png b/extras/assets/nodegui.png new file mode 100644 index 0000000000000000000000000000000000000000..16c3c028253c637c016d18ad0f82170e39e03b25 GIT binary patch literal 40701 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 +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info.Length() == 1) + { + Napi::Number cursor = info[0].As(); + this->instance = new QCursor(static_cast(cursor.Int32Value())); + } + else if (info.Length() == 0) + { + this->instance = new QCursor(); + } + else + { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } +} + +QCursorWrap::~QCursorWrap() +{ + delete this->instance; +} + +QCursor *QCursorWrap::getInternalInstance() +{ + return this->instance; +} + +Napi::Value QCursorWrap::pos(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + QPoint pos = this->instance->pos(); + Napi::Object posObj = Napi::Object::New(env); + posObj.Set("x", pos.x()); + posObj.Set("y", pos.y()); + return posObj; +} + +Napi::Value QCursorWrap::setPos(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number x = info[0].As(); + Napi::Number y = info[1].As(); + this->instance->setPos(x.Int32Value(), y.Int32Value()); + return env.Null(); +} \ No newline at end of file diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.h b/src/cpp/QtGui/QCursor/qcursor_wrap.h new file mode 100644 index 0000000000..aca55ebdc4 --- /dev/null +++ b/src/cpp/QtGui/QCursor/qcursor_wrap.h @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include "src/cpp/core/Component/component_macro.h" + +class QCursorWrap : public Napi::ObjectWrap +{ +private: + QCursor *instance; + +public: + static Napi::FunctionReference constructor; + static Napi::Object init(Napi::Env env, Napi::Object exports); + QCursorWrap(const Napi::CallbackInfo &info); + ~QCursorWrap(); + QCursor *getInternalInstance(); + // Wrapped methods + Napi::Value pos(const Napi::CallbackInfo& info); + Napi::Value setPos(const Napi::CallbackInfo& info); +}; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/QtWidgets/QWidget/qwidget_macro.h index 4beddf507b..f0a8a3729a 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_macro.h @@ -4,6 +4,7 @@ #include "src/cpp/core/YogaWidget/yogawidget_macro.h" #include "src/cpp/core/Events/eventwidget_macro.h" #include "src/cpp/core/Component/component_macro.h" +#include "src/cpp/QtGui/QIcon/qicon_wrap.h" #include /* @@ -57,6 +58,28 @@ Napi::Value setStyleSheet(const Napi::CallbackInfo& info){ \ this->instance->setStyleSheet(style.c_str()); \ return env.Null(); \ } \ +Napi::Value setCursor(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number cursor = info[0].As(); \ + this->instance->setCursor(static_cast(cursor.Int32Value())); \ + return env.Null(); \ +} \ +Napi::Value setWindowIcon(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Object iconObject = info[0].As(); \ + QIconWrap *iconWrap = Napi::ObjectWrap::Unwrap(iconObject); \ + this->instance->setWindowIcon(*iconWrap->getInternalInstance()); \ + return env.Null(); \ +} \ +Napi::Value setWindowState(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + Napi::Number state = info[0].As(); \ + this->instance->setWindowState(static_cast(state.Int32Value())); \ + return env.Null(); \ +} \ Napi::Value setWindowTitle(const Napi::CallbackInfo& info){ \ Napi::Env env = info.Env(); \ Napi::HandleScope scope(env); \ @@ -227,6 +250,9 @@ Napi::Value setWindowFlag(const Napi::CallbackInfo& info){ \ InstanceMethod("close",&WidgetWrapName::close), \ InstanceMethod("setLayout",&WidgetWrapName::setLayout), \ InstanceMethod("setStyleSheet",&WidgetWrapName::setStyleSheet), \ + InstanceMethod("setCursor",&WidgetWrapName::setCursor), \ + InstanceMethod("setWindowIcon",&WidgetWrapName::setWindowIcon), \ + InstanceMethod("setWindowState",&WidgetWrapName::setWindowState), \ InstanceMethod("setWindowTitle",&WidgetWrapName::setWindowTitle), \ InstanceMethod("styleSheet",&WidgetWrapName::styleSheet), \ InstanceMethod("hide",&WidgetWrapName::hide), \ diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index d25f3e18fa..3ff51c7e58 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -2,6 +2,7 @@ #include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" #include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" #include "src/cpp/QtGui/QIcon/qicon_wrap.h" +#include "src/cpp/QtGui/QCursor/qcursor_wrap.h" #include "src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h" #include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" #include "src/cpp/QtWidgets/QDial/qdial_wrap.h" @@ -29,6 +30,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); QIconWrap::init(env, exports); + QCursorWrap::init(env, exports); QGridLayoutWrap::init(env, exports); FlexLayoutWrap::init(env, exports); QMainWindowWrap::init(env, exports); diff --git a/src/demo.ts b/src/demo.ts index ee41f3e5e6..4352000d02 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -14,6 +14,7 @@ import { } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; +import { CursorShape, WindowState } from "./lib/QtEnums" const path = require("path"); @@ -22,6 +23,7 @@ const win = new QMainWindow(); const label = new QLabel(); label.setText("Hello world 🧙"); label.setInlineStyle("font-size: 20px;"); +label.setCursor(CursorShape.ForbiddenCursor); const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); @@ -40,6 +42,10 @@ button.setText("Push Push Push!"); button.setObjectName("btn"); button.setFlat(true); +const nodeguiLogo = new QIcon( + path.resolve(__dirname, "../extras/assets/nodegui.png") +); + const icon = new QIcon( path.resolve(__dirname, "../extras/assets/start_icon.png") ); @@ -92,9 +98,11 @@ win.setStyleSheet(` } `); -win.setWindowTitle("hello"); +win.setWindowIcon(nodeguiLogo); +win.setWindowTitle("NodeGUI Demo"); win.resize(400, 400); win.show(); +win.setWindowState(WindowState.WindowActive); (global as any).win = win; // To prevent win from being garbage collected. diff --git a/src/index.ts b/src/index.ts index 6a483ecfbb..37e86a29f9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,6 +4,7 @@ export { QApplication } from "./lib/QtGui/QApplication"; export { QWidget, QWidgetEvents } from "./lib/QtWidgets/QWidget"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; +export { QCursor } from "./lib/QtGui/QCursor"; // Abstract: export { NodeWidget } from "./lib/QtWidgets/QWidget"; export { NodeLayout } from "./lib/QtWidgets/QLayout"; diff --git a/src/lib/QtGui/QCursor/index.ts b/src/lib/QtGui/QCursor/index.ts new file mode 100644 index 0000000000..352e3d62ee --- /dev/null +++ b/src/lib/QtGui/QCursor/index.ts @@ -0,0 +1,22 @@ +import addon from "../../core/addon"; +import { Component, NativeElement } from "../../core/Component"; +import { QPixmap } from "../QPixmap"; + +type arg = NativeElement | number | QPixmap; +export class QCursor extends Component { + native: NativeElement; + constructor(arg?: arg) { + super(); + if (arg) { + this.native = new addon.QCursor(arg); + } else { + this.native = new addon.QCursor(); + } + } + pos = (): { x: number; y: number } => { + return this.native.pos(); + } + setPos = (x: number, y: number) => { + return this.native.setPos(x, y); + } +} diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 497fba1b48..2f184d5ef6 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -4,6 +4,9 @@ import { EventWidget, BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { FlexLayout } from "../../core/FlexLayout"; import { WidgetAttribute, WindowType } from "../../QtEnums"; +import { QIcon } from "../../QtGui/QIcon"; +import { QCursor } from "../../QtGui/QCursor"; +import { CursorShape, WindowState } from "../../QtEnums"; import { applyStyleSheet, StyleSheet, @@ -37,6 +40,15 @@ export abstract class NodeWidget extends EventWidget { const preparedSheet = await StyleSheet.create(styleSheet); await applyStyleSheet(this, preparedSheet); }; + setCursor(cursor: CursorShape | QCursor) { + this.native.setCursor(cursor); + } + setWindowIcon(icon: QIcon) { + this.native.setWindowIcon(icon.native); + } + setWindowState = async (state: WindowState) => { + return this.native.setWindowState(state); + }; setWindowTitle = async (title: string) => { return this.native.setWindowTitle(title); }; From cf40acf2ff66ac2bac47c88458ece39db9fda364 Mon Sep 17 00:00:00 2001 From: Atul Date: Sat, 31 Aug 2019 18:44:11 +0200 Subject: [PATCH 014/891] Bumped latest qode version --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23bd12de64..2defe683ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,9 +5,9 @@ "requires": true, "dependencies": { "@nodegui/qode": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.3.tgz", - "integrity": "sha512-CQrtA/48sKKb1EJXyjkkjEEtBet98aG3UeACEKnMlYLsfIrHRXg73CU/raIsybkNeeBDqgbw4AqziaroE33IZw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.4.tgz", + "integrity": "sha512-CEEAI1mJ+4eH6G2OlNtn75vUxTBw/06IcEkXlwkDMI/mU5iE52WHToybYba77gOeoxrGx3uIwkfWRV2LRVyp/Q==", "requires": { "env-paths": "^2.2.0", "extract-zip": "^1.6.7", @@ -36,9 +36,9 @@ "dev": true }, "@types/node": { - "version": "12.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.1.tgz", - "integrity": "sha512-aK9jxMypeSrhiYofWWBf/T7O+KwaiAHzM4sveCdWPn71lzUSMimRnKzhXDKfKwV1kWoBo2P1aGgaIYGLf9/ljw==", + "version": "12.7.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.3.tgz", + "integrity": "sha512-3SiLAIBkDWDg6vFo0+5YJyHPWU9uwu40Qe+v+0MH8wRKYBimHvvAOyk3EzMrD/TrIlLYfXrqDqrg913PynrMJQ==", "dev": true }, "@zeit/schemas": { @@ -730,9 +730,9 @@ } }, "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "har-schema": { "version": "2.0.0", @@ -934,9 +934,9 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.5.0.tgz", + "integrity": "sha512-9FwMVYhn6ERvMR8XFdOavRz4QK/VJV8elU1x50vYexf9lslDcWe/f4HBRxCPd185ekRSjU6CfYyJCECa/CQy7Q==", "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -1281,9 +1281,9 @@ } }, "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "requires": { "glob": "^7.1.3" } @@ -1542,9 +1542,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", - "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.2.tgz", + "integrity": "sha512-lmQ4L+J6mnu3xweP8+rOrUwzmN+MRAj7TgtJtDaXE5PMyX2kCrklhg3rvOsOIfNeAWMQWO2F1GPc1kMD2vLAfw==", "dev": true }, "universalify": { @@ -1584,9 +1584,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" }, "vary": { "version": "1.1.2", diff --git a/package.json b/package.json index 32e83f204a..7e2b488adf 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "docs": "serve docs" }, "dependencies": { - "@nodegui/qode": "^1.0.3", + "@nodegui/qode": "^1.0.4", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", "node-gyp": "^4.0.0", From 5447b6cf9311e1535098a76423a2384f9348c325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Sat, 31 Aug 2019 18:48:59 +0200 Subject: [PATCH 015/891] Added missing QCursor docs --- docs/api/QCursor.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/api/QCursor.md diff --git a/docs/api/QCursor.md b/docs/api/QCursor.md new file mode 100644 index 0000000000..c862ea7250 --- /dev/null +++ b/docs/api/QCursor.md @@ -0,0 +1,17 @@ +## Class: QCursor + +> The QCursor class provides scalable icons in different modes and states. + +**This class is a JS wrapper around Qt's [QCursor class](https://doc.qt.io/qt-5/qcursor.html)** + +### Example + +```javascript +const { QCursor } = require("@nodegui/nodegui"); + +const cursor = new QCursor(); +``` + +### `new QCursor(cursor)` + +- `cursor` CursorShape (_optional_). Defines shape for the cursor. [CursorShape is an enum from Qt](api/QtEnums.md) From 614e0ce8ce24635fe2b4e594093f83c27e1c5ab6 Mon Sep 17 00:00:00 2001 From: Atul Date: Sat, 31 Aug 2019 19:08:52 +0200 Subject: [PATCH 016/891] bump version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2defe683ed..728fd4be09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.6", + "version": "0.1.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 7e2b488adf..b9696d8902 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.6", + "version": "0.1.7", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", From 803833808d1122f67fe34b77d118b16705947542 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 31 Aug 2019 23:06:52 +0200 Subject: [PATCH 017/891] re-order methods to match that of react proptypes. Also add comments to show which ones have been exported already. --- src/lib/QtWidgets/QWidget/index.ts | 120 ++++++++++++++++++----------- 1 file changed, 75 insertions(+), 45 deletions(-) diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 2f184d5ef6..7349cea408 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -19,103 +19,133 @@ export abstract class NodeWidget extends EventWidget { layout?: NodeLayout; type: string = "widget"; show = () => { + // react:✓ this.native.show(); }; - resize = (width: number, height: number) => { - this.native.resize(width, height); + hide = () => { + // react:✓ + this.native.hide(); }; close = () => { + // react:⛔️ return this.native.close(); }; - setLayout = (parentLayout: NodeLayout) => { - const flexLayout = parentLayout as FlexLayout; - if (flexLayout.setFlexNode) { - //if flex layout set the flexnode - flexLayout.setFlexNode(this.getFlexNode()); - } - this.native.setLayout(parentLayout.native); - this.layout = parentLayout; - }; setStyleSheet = async (styleSheet: string) => { + // react:✓ const preparedSheet = await StyleSheet.create(styleSheet); await applyStyleSheet(this, preparedSheet); }; - setCursor(cursor: CursorShape | QCursor) { - this.native.setCursor(cursor); - } - setWindowIcon(icon: QIcon) { - this.native.setWindowIcon(icon.native); - } - setWindowState = async (state: WindowState) => { - return this.native.setWindowState(state); - }; - setWindowTitle = async (title: string) => { - return this.native.setWindowTitle(title); + styleSheet = (): string => { + // react:✓ + return this.native.styleSheet(); }; setInlineStyle = async (style: string) => { + // react:✓ const preparedSheet = await prepareInlineStyleSheet(this, style); await applyStyleSheet(this, preparedSheet); }; - styleSheet = (): string => { - return this.native.styleSheet(); - }; - hide = () => { - this.native.hide(); - }; - move = (x: number, y: number) => { - this.native.move(x, y); + setGeometry = (x: number, y: number, w: number, h: number) => { + // react:✓, //TODO:getter + this.native.setGeometry(x, y, w, h); }; setObjectName = (objectName: string) => { + // react:✓ this.native.setObjectName(objectName); }; objectName = (): string => { + // react:✓ return this.native.objectName(); }; setMouseTracking = (isMouseTracked: boolean) => { + // react:✓, //TODO:getter this.native.setMouseTracking(isMouseTracked); }; setEnabled = (enabled: boolean) => { + // react:✓, //TODO:getter this.native.setEnabled(enabled); }; - setFixedSize = (width: number, height: number) => { - this.native.setFixedSize(width, height); + setWindowOpacity = (opacity: Number) => { + // react:✓, //TODO:getter + this.native.setWindowOpacity(opacity); }; - setGeometry = (x: number, y: number, w: number, h: number) => { - this.native.setGeometry(x, y, w, h); + setWindowTitle = async (title: string) => { + // react:✓, //TODO:getter + return this.native.setWindowTitle(title); }; - setMaximumSize = (maxw: number, maxh: number) => { - this.native.setMaximumSize(maxw, maxh); + setWindowState = async (state: WindowState) => { + // react:✓, //TODO:getter + return this.native.setWindowState(state); }; + setCursor(cursor: CursorShape | QCursor) { + // react:✓, //TODO:getter + this.native.setCursor(cursor); + } + setWindowIcon(icon: QIcon) { + // react:✓, //TODO:getter + this.native.setWindowIcon(icon.native); + } setMinimumSize = (minw: number, minh: number) => { + // react:✓ this.native.setMinimumSize(minw, minh); }; + setMaximumSize = (maxw: number, maxh: number) => { + // react:✓ + this.native.setMaximumSize(maxw, maxh); + }; + setFixedSize = (width: number, height: number) => { + // react:✓ + this.native.setFixedSize(width, height); + }; + resize = (width: number, height: number) => { + // react:✓ + this.native.resize(width, height); + }; + size = (): { width: number; height: number } => { + // react:✓ + return this.native.size(); + }; + move = (x: number, y: number) => { + // react:✓ + this.native.move(x, y); + }; + pos = (): { x: number; y: number } => { + // react:✓ + return this.native.pos(); + }; repaint = () => { + // react:⛔️ this.native.repaint(); }; update = () => { + // react:⛔️ this.native.update(); }; updateGeometry = () => { + // react:⛔️ this.native.updateGeometry(); }; - pos = (): { x: number; y: number } => { - return this.native.pos(); - }; - size = (): { width: number; height: number } => { - return this.native.size(); - }; setAttribute = (attribute: WidgetAttribute, switchOn: boolean) => { + // react:⛔️ return this.native.setAttribute(attribute, switchOn); }; testAttribute = (attribute: WidgetAttribute): boolean => { + // react:⛔️ return this.native.testAttribute(attribute); }; - setWindowOpacity = (opacity: Number) => { - this.native.setWindowOpacity(opacity); - }; setWindowFlag = (windowType: WindowType, switchOn: boolean) => { + // react:⛔️ return this.native.setWindowFlag(windowType, switchOn); }; + setLayout = (parentLayout: NodeLayout) => { + // react:✓ + const flexLayout = parentLayout as FlexLayout; + if (flexLayout.setFlexNode) { + //if flex layout set the flexnode + flexLayout.setFlexNode(this.getFlexNode()); + } + this.native.setLayout(parentLayout.native); + this.layout = parentLayout; + }; } type arg = NodeWidget | NativeElement; From 09f4d17dfaf3a66a63931616cbfe3892f714c300 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 31 Aug 2019 23:45:42 +0200 Subject: [PATCH 018/891] Marked all exiting widgets --- src/lib/QtWidgets/QCheckBox/index.ts | 12 +++++++----- src/lib/QtWidgets/QLabel/index.ts | 3 +++ src/lib/QtWidgets/QLineEdit/index.ts | 5 +++++ src/lib/QtWidgets/QPlainTextEdit/index.ts | 4 ++++ src/lib/QtWidgets/QProgressBar/index.ts | 11 ++++++++--- src/lib/QtWidgets/QRadioButton/index.ts | 1 + 6 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/lib/QtWidgets/QCheckBox/index.ts b/src/lib/QtWidgets/QCheckBox/index.ts index 8bde291674..7d739c06da 100644 --- a/src/lib/QtWidgets/QCheckBox/index.ts +++ b/src/lib/QtWidgets/QCheckBox/index.ts @@ -20,17 +20,19 @@ export class QCheckBox extends NodeWidget { this.parent = parent; // bind member functions this.setText.bind(this); - this.isChecked.bind(this); this.setChecked.bind(this); + this.isChecked.bind(this); } - setText(text: string) { + // react:✓ //TODO:getter this.native.setText(text); } - isChecked(): boolean { - return this.native.isChecked(); - } setChecked(check: boolean) { + // react:✓ return this.native.setChecked(check); } + isChecked(): boolean { + // react:✓ + return this.native.isChecked(); + } } diff --git a/src/lib/QtWidgets/QLabel/index.ts b/src/lib/QtWidgets/QLabel/index.ts index d67ecd642c..14a518dedf 100644 --- a/src/lib/QtWidgets/QLabel/index.ts +++ b/src/lib/QtWidgets/QLabel/index.ts @@ -26,13 +26,16 @@ export class QLabel extends NodeWidget { this.setText.bind(this); } setWordWrap(on: boolean) { + // react:✓ TODO://getter this.native.setWordWrap(on); } setText(text: string | number) { + // react:✓ TODO://getter this.text = text; this.native.setText(`${text}`); } setPixmap(pixMap: QPixmap) { + // react:✓ TODO://getter this.native.setPixmap(pixMap.native); this.pixmap = pixMap; } diff --git a/src/lib/QtWidgets/QLineEdit/index.ts b/src/lib/QtWidgets/QLineEdit/index.ts index f664423653..52e67fa1b4 100644 --- a/src/lib/QtWidgets/QLineEdit/index.ts +++ b/src/lib/QtWidgets/QLineEdit/index.ts @@ -34,19 +34,24 @@ export class QLineEdit extends NodeWidget { this.clear.bind(this); } setText(text: string) { + // react:✓ text && this.native.setText(text); } text(): string { + // react:✓ return this.native.text(); } setPlaceholderText(text: string) { + // react:✓ TODO://getter this.placeholderText = text; this.native.setPlaceholderText(text); } setReadOnly(isReadOnly: boolean) { + // react:✓ TODO://getter this.native.setReadOnly(isReadOnly); } clear() { + // react:✓ this.native.clear(); } } diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index c89d4d43ad..b87994b017 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -28,15 +28,19 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.clear.bind(this); } setPlainText(text: string | number) { + // react:✓ this.native.setPlainText(`${text}`); } toPlainText() { + // react:✓ return this.native.toPlainText(); } setReadOnly(isReadOnly: boolean) { + // react:✓ this.native.setReadOnly(isReadOnly); } clear() { + // react:✓ this.native.clear(); } } diff --git a/src/lib/QtWidgets/QProgressBar/index.ts b/src/lib/QtWidgets/QProgressBar/index.ts index 4aec8eb3db..1cc5081de1 100644 --- a/src/lib/QtWidgets/QProgressBar/index.ts +++ b/src/lib/QtWidgets/QProgressBar/index.ts @@ -27,18 +27,23 @@ export class QProgressBar extends NodeWidget { this.value.bind(this); } setValue(value: number) { + // react:✓ this.native.setValue(value); } + value(): number { + // react:✓ + return this.native.value(); + } setMinimum(min: number) { + // react:✓ TODO://getter this.native.setMinimum(min); } setMaximum(max: number) { + // react:✓ TODO://getter this.native.setMaximum(max); } setOrientation(orientation: Orientation) { + // react:✓ TODO://getter this.native.setOrientation(orientation); } - value(): number { - return this.native.value(); - } } diff --git a/src/lib/QtWidgets/QRadioButton/index.ts b/src/lib/QtWidgets/QRadioButton/index.ts index f735c05787..af1410657c 100644 --- a/src/lib/QtWidgets/QRadioButton/index.ts +++ b/src/lib/QtWidgets/QRadioButton/index.ts @@ -22,6 +22,7 @@ export class QRadioButton extends NodeWidget { this.setText.bind(this); } setText(text: string | number) { + // react:✓ TODO://getter this.native.setText(`${text}`); } } From 7c086fb9c7fc06e60a3b85a97c8f68475229e321 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 1 Sep 2019 00:20:19 +0200 Subject: [PATCH 019/891] Re orders and marks things which have been implemented in react aswell --- src/index.ts | 14 ++++++--- src/lib/QtWidgets/QAbstractSlider/index.ts | 21 ++++++------- src/lib/QtWidgets/QDial/index.ts | 22 ++++++++----- src/lib/QtWidgets/QSpinBox/index.ts | 36 +++++++++++++--------- 4 files changed, 55 insertions(+), 38 deletions(-) diff --git a/src/index.ts b/src/index.ts index 37e86a29f9..2b5734886a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,14 +1,20 @@ -// enums +// Enums: export * from "./lib/QtEnums"; +// Gui: export { QApplication } from "./lib/QtGui/QApplication"; -export { QWidget, QWidgetEvents } from "./lib/QtWidgets/QWidget"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; +// Events: Maybe a separate module ? +export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; +export { NativeEvent } from "./lib/core/EventWidget"; // Abstract: export { NodeWidget } from "./lib/QtWidgets/QWidget"; export { NodeLayout } from "./lib/QtWidgets/QLayout"; +export { QAbstractScrollArea } from "./lib/QtWidgets/QAbstractScrollArea"; +export { QAbstractSlider } from "./lib/QtWidgets/QAbstractSlider"; // Widgets: +export { QWidget, QWidgetEvents } from "./lib/QtWidgets/QWidget"; export { QCheckBox, QCheckBoxEvents } from "./lib/QtWidgets/QCheckBox"; export { QLabel, QLabelEvents } from "./lib/QtWidgets/QLabel"; export { QDial, QDialEvents } from "./lib/QtWidgets/QDial"; @@ -26,7 +32,5 @@ export { QScrollArea, QScrollAreaEvents } from "./lib/QtWidgets/QScrollArea"; // Layouts: export { QGridLayout } from "./lib/QtWidgets/QGridLayout"; export { FlexLayout } from "./lib/core/FlexLayout"; -// Events : Maybe a separate module ? -export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; -export { NativeEvent } from "./lib/core/EventWidget"; +// Others: export { StyleSheet } from "./lib/core/Style/StyleSheet"; diff --git a/src/lib/QtWidgets/QAbstractSlider/index.ts b/src/lib/QtWidgets/QAbstractSlider/index.ts index ac587dbe91..4b768f115a 100644 --- a/src/lib/QtWidgets/QAbstractSlider/index.ts +++ b/src/lib/QtWidgets/QAbstractSlider/index.ts @@ -1,4 +1,4 @@ -import { NodeWidget, QWidget } from "../QWidget"; +import { NodeWidget } from "../QWidget"; import { Orientation } from "../../QtEnums"; export abstract class QAbstractSlider extends NodeWidget { @@ -8,23 +8,22 @@ export abstract class QAbstractSlider extends NodeWidget { setMaximum(maximum: number) { this.native.setMaximum(maximum); } - setMinimum(minimum: number) { - this.native.setMinimum(minimum); - } - setValue(value: number) { - this.native.setValue(value); - } - setOrientation(orientation: Orientation) { - this.native.setOrientation(orientation); - } - maximum(): number { return this.native.maximum(); } + setMinimum(minimum: number) { + this.native.setMinimum(minimum); + } minimum(): number { return this.native.minimum(); } + setValue(value: number) { + this.native.setValue(value); + } value(): number { return this.native.value(); } + setOrientation(orientation: Orientation) { + this.native.setOrientation(orientation); + } } diff --git a/src/lib/QtWidgets/QDial/index.ts b/src/lib/QtWidgets/QDial/index.ts index a66f7c6080..dac398cfe7 100644 --- a/src/lib/QtWidgets/QDial/index.ts +++ b/src/lib/QtWidgets/QDial/index.ts @@ -26,28 +26,34 @@ export class QDial extends QAbstractSlider { this.parent = parent; // bind member functions this.setNotchesVisible.bind(this); + this.notchesVisible.bind(this); this.setWrapping.bind(this); + this.wrapping.bind(this); this.setNotchTarget.bind(this); this.notchTarget.bind(this); - this.notchesVisible.bind(this); - this.wrapping.bind(this); } setNotchesVisible(visible: boolean) { + // react:✓ this.native.setNotchesVisible(visible); } + notchesVisible(): boolean { + // react:✓ + return this.native.notchesVisible(); + } setWrapping(on: boolean) { + // react:✓ this.native.setWrapping(on); } + wrapping(): boolean { + // react:✓ + return this.native.wrapping(); + } setNotchTarget(target: number) { + // react:✓ this.native.setNotchTarget(target); } notchTarget(): number { + // react:✓ return this.native.notchTarget(); } - notchesVisible(): boolean { - return this.native.notchesVisible(); - } - wrapping(): boolean { - return this.native.wrapping(); - } } diff --git a/src/lib/QtWidgets/QSpinBox/index.ts b/src/lib/QtWidgets/QSpinBox/index.ts index e4fafe7112..76f9a04e20 100644 --- a/src/lib/QtWidgets/QSpinBox/index.ts +++ b/src/lib/QtWidgets/QSpinBox/index.ts @@ -23,41 +23,49 @@ export class QSpinBox extends NodeWidget { this.native = native; // bind member functions this.setPrefix.bind(this); - this.setSingleStep.bind(this); this.setSuffix.bind(this); - this.setRange.bind(this); - this.setValue.bind(this); this.cleanText.bind(this); + this.setSingleStep.bind(this); + this.setRange.bind(this); this.maximum.bind(this); this.minimum.bind(this); + this.setValue.bind(this); this.value.bind(this); } - setPrefix(prefix: string) { - this.native.setPrefix(`${prefix}`); + // react:✓ + this.native.setPrefix(prefix); + } + setSuffix(suffix: string) { + // react:✓ + this.native.setSuffix(suffix); + } + cleanText(): string { + // react:✓ + return this.native.cleanText(); } setSingleStep(val: number) { + // react:✓ this.native.setSingleStep(val); } - setSuffix(suffix: string) { - this.native.setSuffix(`${suffix}`); - } setRange(minimum: number, maximum: number) { + // react:✓ this.native.setRange(minimum, maximum); } - setValue(val: number) { - this.native.setValue(val); - } - cleanText(): string { - return this.native.cleanText(); - } maximum(): number { + // react:✓ return this.native.maximum(); } minimum(): number { + // react:✓ return this.native.minimum(); } + setValue(val: number) { + // react:✓ + this.native.setValue(val); + } value(): number { + // react:✓ return this.native.value(); } } From 2c370ec3d9925ea8ad4f732e956d41cc8e4286d8 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 1 Sep 2019 01:36:39 +0200 Subject: [PATCH 020/891] Update README.md --- docs/README.md | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 770c7d2ece..25e6be324f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -25,12 +25,7 @@ - [Testing and Debugging](tutorial/debugging-app.md) - [Debugging Qode/NodeGui Process](tutorial/debugging-qode-process.md) - [Debugging a NodeGui app with Visual Studio Code](tutorial/debugging-app-vscode.md) -- [Distribution](tutorial/application-distribution.md) - - [Supported Platforms](tutorial/support.md#supported-platforms) - - [Code Signing](tutorial/code-signing.md) - - [Mac App Store](tutorial/mac-app-store-submission-guide.md) - - [Windows Store](tutorial/windows-store-guide.md) - - [Snapcraft](tutorial/snapcraft.md) +- [Distribution](http://github.com/nodegui/packer) - [Getting Support](tutorial/support.md) ## API References From 27fd91a3510034e3eb7ebfbf6aab21d7af53e901 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 1 Sep 2019 10:48:49 +0200 Subject: [PATCH 021/891] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index e7d85c762e..a5ab523f73 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ # NodeGUI +[![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) [![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 From 22496e77a8808740475296602fd16150dbede1ac Mon Sep 17 00:00:00 2001 From: Atul R Date: Mon, 2 Sep 2019 23:33:56 +0200 Subject: [PATCH 022/891] prevents double removal of a widget --- src/lib/core/FlexLayout/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/lib/core/FlexLayout/index.ts b/src/lib/core/FlexLayout/index.ts index eca29844a9..0824749e15 100644 --- a/src/lib/core/FlexLayout/index.ts +++ b/src/lib/core/FlexLayout/index.ts @@ -32,9 +32,12 @@ export class FlexLayout extends NodeLayout { }; removeWidget = (childWidget: NodeWidget, childFlexNode?: FlexNode) => { + if (!this.children.has(childWidget)) { + return; + } const childYogaNode = childFlexNode || childWidget.getFlexNode(); - this.native.removeWidget(childWidget.native, childYogaNode); this.children.delete(childWidget); + this.native.removeWidget(childWidget.native, childYogaNode); }; setFlexNode = (flexNode: FlexNode) => { From 9467e46962c73fabace629b6757587112fd6d624 Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 3 Sep 2019 22:44:16 +0200 Subject: [PATCH 023/891] convert all references of using raw pointers to unique ptrs for better memory management --- src/cpp/QtGui/QApplication/qapplication_wrap.cpp | 8 ++++---- src/cpp/QtGui/QApplication/qapplication_wrap.h | 4 +++- src/cpp/QtGui/QCursor/qcursor_wrap.cpp | 8 ++++---- src/cpp/QtGui/QCursor/qcursor_wrap.h | 4 ++-- src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp | 6 +++--- src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h | 4 +++- src/cpp/QtGui/QIcon/qicon_wrap.cpp | 8 ++++---- src/cpp/QtGui/QIcon/qicon_wrap.h | 3 ++- src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp | 10 +++++----- src/cpp/QtGui/QPixmap/qpixmap_wrap.h | 4 +++- src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp | 13 ++++++------- src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h | 4 +++- src/cpp/QtWidgets/QDial/qdial_wrap.cpp | 13 ++++++------- src/cpp/QtWidgets/QDial/qdial_wrap.h | 4 +++- .../QtWidgets/QGridLayout/qgridlayout_wrap.cpp | 12 ++++++------ src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h | 4 +++- src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp | 12 ++++++------ src/cpp/QtWidgets/QLabel/qlabel_wrap.h | 5 +++-- src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp | 4 ++-- src/cpp/QtWidgets/QLayout/qlayout_wrap.h | 4 +++- src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp | 13 ++++++------- src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h | 5 +++-- .../QtWidgets/QMainWindow/qmainwindow_wrap.cpp | 15 +++++++-------- src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h | 5 ++--- .../QPlainTextEdit/qplaintextedit_wrap.cpp | 12 ++++++------ .../QPlainTextEdit/qplaintextedit_wrap.h | 3 ++- .../QtWidgets/QProgressBar/qprogressbar_wrap.cpp | 13 ++++++------- .../QtWidgets/QProgressBar/qprogressbar_wrap.h | 3 ++- .../QtWidgets/QPushButton/qpushbutton_wrap.cpp | 12 ++++++------ src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h | 3 ++- .../QtWidgets/QRadioButton/qradiobutton_wrap.cpp | 12 ++++++------ .../QtWidgets/QRadioButton/qradiobutton_wrap.h | 3 ++- .../QtWidgets/QScrollArea/qscrollarea_wrap.cpp | 12 ++++++------ src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h | 4 ++-- src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp | 8 ++++---- src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h | 3 ++- src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp | 12 ++++++------ src/cpp/QtWidgets/QWidget/qwidget_wrap.h | 4 ++-- src/cpp/core/FlexLayout/flexlayout_wrap.cpp | 8 ++++---- src/cpp/core/FlexLayout/flexlayout_wrap.h | 5 +++-- 40 files changed, 153 insertions(+), 136 deletions(-) diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp index 3c2fb6b4a7..c4ad0d0564 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp @@ -28,9 +28,9 @@ QApplicationWrap::QApplicationWrap(const Napi::CallbackInfo& info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); if(info.Length() == 1) { - this->instance = info[0].As>().Data(); + this->instance = std::unique_ptr(info[0].As>().Data()); } else if (info.Length() == 0){ - this->instance = new QApplication(this->argc, this->argv); + this->instance = std::make_unique(this->argc, this->argv); } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -38,12 +38,12 @@ QApplicationWrap::QApplicationWrap(const Napi::CallbackInfo& info) QApplicationWrap::~QApplicationWrap() { - delete this->instance; + this->instance.reset(); } QApplication* QApplicationWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } Napi::Value QApplicationWrap::processEvents(const Napi::CallbackInfo& info) diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.h b/src/cpp/QtGui/QApplication/qapplication_wrap.h index 19e5224fe0..faa77043d0 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.h @@ -1,12 +1,14 @@ #pragma once #include +#include +#include #include class QApplicationWrap : public Napi::ObjectWrap { private: - QApplication* instance; + std::unique_ptr instance; static int argc; static char** argv; diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.cpp b/src/cpp/QtGui/QCursor/qcursor_wrap.cpp index 6d2fa27208..ddbf05a1e1 100644 --- a/src/cpp/QtGui/QCursor/qcursor_wrap.cpp +++ b/src/cpp/QtGui/QCursor/qcursor_wrap.cpp @@ -26,11 +26,11 @@ QCursorWrap::QCursorWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrap(); - this->instance = new QCursor(static_cast(cursor.Int32Value())); + this->instance = std::make_unique(static_cast(cursor.Int32Value())); } else if (info.Length() == 0) { - this->instance = new QCursor(); + this->instance = std::make_unique(); } else { @@ -40,12 +40,12 @@ QCursorWrap::QCursorWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrapinstance; + this->instance.reset(); } QCursor *QCursorWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } Napi::Value QCursorWrap::pos(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.h b/src/cpp/QtGui/QCursor/qcursor_wrap.h index aca55ebdc4..e723107faf 100644 --- a/src/cpp/QtGui/QCursor/qcursor_wrap.h +++ b/src/cpp/QtGui/QCursor/qcursor_wrap.h @@ -1,14 +1,14 @@ #pragma once #include +#include #include #include "src/cpp/core/Component/component_macro.h" class QCursorWrap : public Napi::ObjectWrap { private: - QCursor *instance; - + std::unique_ptr instance; public: static Napi::FunctionReference constructor; static Napi::Object init(Napi::Env env, Napi::Object exports); diff --git a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp index f6d572406b..92c0d2bb32 100644 --- a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp +++ b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp @@ -19,15 +19,15 @@ Napi::Object QKeyEventWrap::init(Napi::Env env, Napi::Object exports) { } QKeyEvent* QKeyEventWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QKeyEventWrap::QKeyEventWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::External eventObject = info[0].As>(); - this->instance = eventObject.Data(); + Napi::External eventObject = info[0].As>(); + this->instance = std::unique_ptr(eventObject.Data()); } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } diff --git a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h index a680dbcc41..8b750df042 100644 --- a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h +++ b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h @@ -1,11 +1,13 @@ #pragma once #include +#include +#include #include class QKeyEventWrap : public Napi::ObjectWrap{ private: - QKeyEvent* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/QtGui/QIcon/qicon_wrap.cpp index 860e6005b7..218a744de7 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/QtGui/QIcon/qicon_wrap.cpp @@ -24,11 +24,11 @@ QIconWrap::QIconWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrap(); QString imageUrl = QString::fromUtf8(url.Utf8Value().c_str()); - this->instance = new QIcon(imageUrl); + this->instance = std::make_unique(imageUrl); } else if (info.Length() == 0) { - this->instance = new QIcon(); + this->instance = std::make_unique(); } else { @@ -38,10 +38,10 @@ QIconWrap::QIconWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrapinstance; + this->instance.reset(); } QIcon *QIconWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.h b/src/cpp/QtGui/QIcon/qicon_wrap.h index 655baded1b..a4e9dd9539 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.h +++ b/src/cpp/QtGui/QIcon/qicon_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include #include #include "src/cpp/core/Component/component_macro.h" class QIconWrap : public Napi::ObjectWrap { private: - QIcon *instance; + std::unique_ptr instance; public: static Napi::FunctionReference constructor; diff --git a/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp b/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp index 0a51f5090b..08a72a5646 100644 --- a/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp +++ b/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp @@ -24,14 +24,14 @@ QPixmapWrap::QPixmapWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrapinstance = info[0].As>().Data(); + this->instance = std::unique_ptr(info[0].As>().Data()); } else { Napi::String url = info[0].As(); QString imageUrl = QString::fromUtf8(url.Utf8Value().c_str()); - this->instance = new QPixmap(imageUrl); + this->instance = std::make_unique(imageUrl); } }else if (info.Length() == 0){ - this->instance = new QPixmap(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -39,12 +39,12 @@ QPixmapWrap::QPixmapWrap(const Napi::CallbackInfo& info) : Napi::ObjectWrapinstance; + this->instance.reset(); } QPixmap* QPixmapWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } Napi::Value QPixmapWrap::load(const Napi::CallbackInfo& info) diff --git a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h b/src/cpp/QtGui/QPixmap/qpixmap_wrap.h index c8ff9efeb5..0d4141eeb3 100644 --- a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h +++ b/src/cpp/QtGui/QPixmap/qpixmap_wrap.h @@ -1,12 +1,14 @@ #pragma once #include +#include +#include #include #include "src/cpp/core/Component/component_macro.h" class QPixmapWrap : public Napi::ObjectWrap { private: - QPixmap* instance; + std::unique_ptr instance; public: static Napi::FunctionReference constructor; static Napi::Object init(Napi::Env env, Napi::Object exports); diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp index de0a94b443..7095375218 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp @@ -3,7 +3,6 @@ #include "src/cpp/Extras/Utils/nutils.h" #include - Napi::FunctionReference QCheckBoxWrap::constructor; Napi::Object QCheckBoxWrap::init(Napi::Env env, Napi::Object exports) { @@ -21,7 +20,7 @@ Napi::Object QCheckBoxWrap::init(Napi::Env env, Napi::Object exports) { } NCheckBox* QCheckBoxWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QCheckBoxWrap::QCheckBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -29,11 +28,11 @@ QCheckBoxWrap::QCheckBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NCheckBox(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NCheckBox(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -42,7 +41,7 @@ QCheckBoxWrap::QCheckBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } Napi::Value QCheckBoxWrap::setText(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h index 69bfe27512..6239a8bb63 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -1,13 +1,15 @@ #pragma once #include +#include +#include #include "ncheckbox.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QCheckBoxWrap : public Napi::ObjectWrap{ private: - NCheckBox* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QCheckBoxWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp index 8b6144f4a7..c38031472a 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.cpp @@ -4,7 +4,6 @@ #include "src/cpp/Extras/Utils/nutils.h" #include - Napi::FunctionReference QDialWrap::constructor; Napi::Object QDialWrap::init(Napi::Env env, Napi::Object exports) { @@ -25,7 +24,7 @@ Napi::Object QDialWrap::init(Napi::Env env, Napi::Object exports) { } NDial* QDialWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QDialWrap::QDialWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -33,11 +32,11 @@ QDialWrap::QDialWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NDial(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NDial(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -46,7 +45,7 @@ QDialWrap::QDialWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } Napi::Value QDialWrap::setNotchesVisible(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.h b/src/cpp/QtWidgets/QDial/qdial_wrap.h index 26f361dc1f..5f75be29b6 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.h +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.h @@ -1,13 +1,15 @@ #pragma once #include +#include +#include #include "ndial.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h" class QDialWrap : public Napi::ObjectWrap{ private: - NDial* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QDialWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp index b50184c68a..38310e123e 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp +++ b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp @@ -17,7 +17,7 @@ Napi::Object QGridLayoutWrap::init(Napi::Env env, Napi::Object exports) { } QGridLayout* QGridLayoutWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QGridLayoutWrap::QGridLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -25,18 +25,18 @@ QGridLayoutWrap::QGridLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWr Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new QGridLayout(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new QGridLayout(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } } QGridLayoutWrap::~QGridLayoutWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QGridLayoutWrap::addWidget(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h index e78b15a30a..3a77ac86f3 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -1,12 +1,14 @@ #pragma once #include +#include +#include #include #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" class QGridLayoutWrap : public Napi::ObjectWrap{ private: - QGridLayout* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp b/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp index 2b9ae22c48..38420b558f 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp +++ b/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp @@ -22,7 +22,7 @@ Napi::Object QLabelWrap::init(Napi::Env env, Napi::Object exports) { } NLabel* QLabelWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QLabelWrap::QLabelWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -30,11 +30,11 @@ QLabelWrap::QLabelWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NLabel(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NLabel(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -43,7 +43,7 @@ QLabelWrap::QLabelWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } Napi::Value QLabelWrap::setWordWrap(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h index 036231311d..f05486ffa0 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h +++ b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include +#include #include "nlabel.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" - class QLabelWrap : public Napi::ObjectWrap{ private: - NLabel* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QLabelWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp b/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp index 860eff5bb8..8e11f9766e 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp +++ b/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp @@ -11,7 +11,7 @@ void QLayoutWrap::init(Napi::Env env) { } QLayout* QLayoutWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QLayoutWrap::QLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -20,5 +20,5 @@ QLayoutWrap::QLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } diff --git a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h b/src/cpp/QtWidgets/QLayout/qlayout_wrap.h index 91e08ca37a..fed9e33558 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h +++ b/src/cpp/QtWidgets/QLayout/qlayout_wrap.h @@ -1,6 +1,8 @@ #pragma once #include +#include +#include #include #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" @@ -8,7 +10,7 @@ //ABSTRACT CLASS class QLayoutWrap : public Napi::ObjectWrap{ private: - QLayout* instance; + std::unique_ptr instance; public: static void init(Napi::Env env); QLayoutWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp index b4b4a523d2..127a7dd518 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp +++ b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp @@ -4,7 +4,6 @@ #include "src/cpp/Extras/Utils/nutils.h" #include - Napi::FunctionReference QLineEditWrap::constructor; Napi::Object QLineEditWrap::init(Napi::Env env, Napi::Object exports) { @@ -24,7 +23,7 @@ Napi::Object QLineEditWrap::init(Napi::Env env, Napi::Object exports) { } NLineEdit* QLineEditWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QLineEditWrap::QLineEditWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -32,11 +31,11 @@ QLineEditWrap::QLineEditWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NLineEdit(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NLineEdit(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -45,7 +44,7 @@ QLineEditWrap::QLineEditWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h index 3d3d761d52..e14df88f96 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h +++ b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include +#include #include "nlineedit.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" - class QLineEditWrap : public Napi::ObjectWrap{ private: - NLineEdit* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QLineEditWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp index 4909a020a3..84fffdb392 100644 --- a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp +++ b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp @@ -17,29 +17,28 @@ Napi::Object QMainWindowWrap::init(Napi::Env env, Napi::Object exports) { } NMainWindow* QMainWindowWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QMainWindowWrap::QMainWindowWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { Napi::Env env = info.Env(); Napi::HandleScope scope(env); - // SuppressDestruct(); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NMainWindow(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NMainWindow(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } this->instance->setAttribute(Qt::WA_DeleteOnClose); - this->instance->installEventFilter(this->instance); + this->instance->installEventFilter(this->getInternalInstance()); } QMainWindowWrap::~QMainWindowWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QMainWindowWrap::setCentralWidget(const Napi::CallbackInfo& info){ diff --git a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h index 19d4abb283..b53706a7fc 100644 --- a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h +++ b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h @@ -1,14 +1,13 @@ #pragma once #include +#include #include "nmainwindow.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" - class QMainWindowWrap : public Napi::ObjectWrap{ private: - NMainWindow* instance; - + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QMainWindowWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index 83f04e4f66..797dc031a3 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -24,7 +24,7 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { } NPlainTextEdit* QPlainTextEditWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QPlainTextEditWrap::QPlainTextEditWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -32,11 +32,11 @@ QPlainTextEditWrap::QPlainTextEditWrap(const Napi::CallbackInfo& info): Napi::Ob Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NPlainTextEdit(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NPlainTextEdit(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -45,7 +45,7 @@ QPlainTextEditWrap::QPlainTextEditWrap(const Napi::CallbackInfo& info): Napi::Ob } QPlainTextEditWrap::~QPlainTextEditWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QPlainTextEditWrap::setPlainText(const Napi::CallbackInfo& info){ diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index 36d9a02bc9..b9ff9c6ce7 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include #include "nplaintextedit.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" class QPlainTextEditWrap : public Napi::ObjectWrap{ private: - NPlainTextEdit* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QPlainTextEditWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp index 17eff7afe5..274473fb3a 100644 --- a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp +++ b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp @@ -4,7 +4,6 @@ #include "src/cpp/Extras/Utils/nutils.h" #include - Napi::FunctionReference QProgressBarWrap::constructor; Napi::Object QProgressBarWrap::init(Napi::Env env, Napi::Object exports) { @@ -24,7 +23,7 @@ Napi::Object QProgressBarWrap::init(Napi::Env env, Napi::Object exports) { } NProgressBar* QProgressBarWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QProgressBarWrap::QProgressBarWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -32,11 +31,11 @@ QProgressBarWrap::QProgressBarWrap(const Napi::CallbackInfo& info): Napi::Object Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NProgressBar(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NProgressBar(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -45,7 +44,7 @@ QProgressBarWrap::QProgressBarWrap(const Napi::CallbackInfo& info): Napi::Object } QProgressBarWrap::~QProgressBarWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QProgressBarWrap::setValue(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h index 460be760c8..41ca2a78fe 100644 --- a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h +++ b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h @@ -1,12 +1,13 @@ #pragma once #include +#include #include "nprogressbar.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QProgressBarWrap : public Napi::ObjectWrap{ private: - NProgressBar* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QProgressBarWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp index a7f85cf0bf..e45afb778e 100644 --- a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp +++ b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp @@ -20,7 +20,7 @@ Napi::Object QPushButtonWrap::init(Napi::Env env, Napi::Object exports) { } NPushButton* QPushButtonWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -28,11 +28,11 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWr Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NPushButton(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget } else if (info.Length() == 0){ - this->instance = new NPushButton(); + this->instance = std::make_unique(); } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -41,7 +41,7 @@ QPushButtonWrap::QPushButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWr } QPushButtonWrap::~QPushButtonWrap() { - delete this->instance; + this->instance.reset(); } diff --git a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h index 638ec0005f..4ef0b427b0 100644 --- a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h +++ b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "npushbutton.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" @@ -8,7 +9,7 @@ class QPushButtonWrap : public Napi::ObjectWrap { private: - NPushButton* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QPushButtonWrap(const Napi::CallbackInfo &info); diff --git a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp index d0deab6d16..8a63ddf94d 100644 --- a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp +++ b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp @@ -20,7 +20,7 @@ Napi::Object QRadioButtonWrap::init(Napi::Env env, Napi::Object exports) { } NRadioButton* QRadioButtonWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QRadioButtonWrap::QRadioButtonWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -28,11 +28,11 @@ QRadioButtonWrap::QRadioButtonWrap(const Napi::CallbackInfo& info): Napi::Object Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NRadioButton(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NRadioButton(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -41,7 +41,7 @@ QRadioButtonWrap::QRadioButtonWrap(const Napi::CallbackInfo& info): Napi::Object } QRadioButtonWrap::~QRadioButtonWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QRadioButtonWrap::setText(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h index cde2535943..88fb018b21 100644 --- a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h +++ b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include #include "nradiobutton.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QRadioButtonWrap : public Napi::ObjectWrap{ private: - NRadioButton* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QRadioButtonWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp index 83bb488417..5e7d330cad 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp @@ -17,7 +17,7 @@ Napi::Object QScrollAreaWrap::init(Napi::Env env, Napi::Object exports) { } NScrollArea* QScrollAreaWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QScrollAreaWrap::QScrollAreaWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -25,18 +25,18 @@ QScrollAreaWrap::QScrollAreaWrap(const Napi::CallbackInfo& info): Napi::ObjectWr Napi::HandleScope scope(env); if(info.Length() == 1) { - Napi::Object parentObject = info[0].As(); - QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NScrollArea(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget }else if (info.Length() == 0){ - this->instance = new NScrollArea(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } } QScrollAreaWrap::~QScrollAreaWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value QScrollAreaWrap::setWidget(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h index fb927965e0..a263962dc3 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -1,13 +1,13 @@ #pragma once #include +#include #include "nscrollarea.h" #include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" - class QScrollAreaWrap : public Napi::ObjectWrap{ private: - NScrollArea* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QScrollAreaWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp index fa318e20f5..61b08a46e8 100644 --- a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp +++ b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp @@ -27,7 +27,7 @@ Napi::Object QSpinBoxWrap::init(Napi::Env env, Napi::Object exports) { } NSpinBox* QSpinBoxWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QSpinBoxWrap::QSpinBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -37,9 +37,9 @@ QSpinBoxWrap::QSpinBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(); QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NSpinBox(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget } else if (info.Length() == 0){ - this->instance = new NSpinBox(); + this->instance = std::make_unique(); } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } @@ -48,7 +48,7 @@ QSpinBoxWrap::QSpinBoxWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance; + this->instance.reset(); } Napi::Value QSpinBoxWrap::setPrefix(const Napi::CallbackInfo& info) { diff --git a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h index ea9b10d906..baba8a483b 100644 --- a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h +++ b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include "nspinbox.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" @@ -8,7 +9,7 @@ class QSpinBoxWrap : public Napi::ObjectWrap { private: - NSpinBox* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QSpinBoxWrap(const Napi::CallbackInfo &info); diff --git a/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp b/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp index 022b337412..8e6254c367 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp +++ b/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp @@ -16,7 +16,7 @@ Napi::Object QWidgetWrap::init(Napi::Env env, Napi::Object exports) { } NWidget* QWidgetWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } QWidgetWrap::QWidgetWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -24,20 +24,20 @@ QWidgetWrap::QWidgetWrap(const Napi::CallbackInfo& info): Napi::ObjectWrapinstance = info[0].As>().Data(); + this->instance = std::unique_ptr(info[0].As>().Data()); } else { Napi::Object parentObject = info[0].As(); QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new NWidget(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget } } else if (info.Length() == 0){ - this->instance = new NWidget(); - }else { + this->instance = std::make_unique(); + } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } } QWidgetWrap::~QWidgetWrap() { - delete this->instance; + this->instance.reset(); } diff --git a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h b/src/cpp/QtWidgets/QWidget/qwidget_wrap.h index 196e855aae..e9ee9c3bde 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_wrap.h @@ -1,13 +1,13 @@ #pragma once #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" - #include +#include #include "nwidget.h" class QWidgetWrap : public Napi::ObjectWrap{ private: - NWidget* instance; + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); QWidgetWrap(const Napi::CallbackInfo& info); diff --git a/src/cpp/core/FlexLayout/flexlayout_wrap.cpp b/src/cpp/core/FlexLayout/flexlayout_wrap.cpp index 5c2919c6b7..6124f819a2 100644 --- a/src/cpp/core/FlexLayout/flexlayout_wrap.cpp +++ b/src/cpp/core/FlexLayout/flexlayout_wrap.cpp @@ -20,7 +20,7 @@ Napi::Object FlexLayoutWrap::init(Napi::Env env, Napi::Object exports) { } FlexLayout* FlexLayoutWrap::getInternalInstance() { - return this->instance; + return this->instance.get(); } FlexLayoutWrap::FlexLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { @@ -30,16 +30,16 @@ FlexLayoutWrap::FlexLayoutWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap if(info.Length() == 1) { Napi::Object parentObject = info[0].As(); QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); - this->instance = new FlexLayout(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + this->instance = std::make_unique(parentWidgetWrap->getInternalInstance()); }else if (info.Length() == 0){ - this->instance = new FlexLayout(); + this->instance = std::make_unique(); }else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } } FlexLayoutWrap::~FlexLayoutWrap() { - delete this->instance; + this->instance.reset(); } Napi::Value FlexLayoutWrap::addWidget(const Napi::CallbackInfo& info) { diff --git a/src/cpp/core/FlexLayout/flexlayout_wrap.h b/src/cpp/core/FlexLayout/flexlayout_wrap.h index 1faf9b7f5e..2e8310b637 100644 --- a/src/cpp/core/FlexLayout/flexlayout_wrap.h +++ b/src/cpp/core/FlexLayout/flexlayout_wrap.h @@ -1,13 +1,14 @@ #pragma once #include +#include +#include #include "flexlayout.h" #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" class FlexLayoutWrap : public Napi::ObjectWrap{ private: - FlexLayout* instance; - + std::unique_ptr instance; public: static Napi::Object init(Napi::Env env, Napi::Object exports); FlexLayoutWrap(const Napi::CallbackInfo& info); From 40f3deff4d3563850d44f388439ddcc2361cd4d0 Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 3 Sep 2019 22:45:51 +0200 Subject: [PATCH 024/891] removes extra --- src/cpp/QtGui/QApplication/qapplication_wrap.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.h b/src/cpp/QtGui/QApplication/qapplication_wrap.h index faa77043d0..114172fca0 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include From 625eb229c980341eb0dc7ca5efa487204f98086a Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 3 Sep 2019 22:47:06 +0200 Subject: [PATCH 025/891] removed extra import --- src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h index 8b750df042..35c3e59745 100644 --- a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h +++ b/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include class QKeyEventWrap : public Napi::ObjectWrap{ From 8ea076d5009ec970bc201caff8d585b446c174e6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 3 Sep 2019 22:51:41 +0200 Subject: [PATCH 026/891] more duplicates removed --- src/cpp/QtGui/QPixmap/qpixmap_wrap.h | 1 - src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h | 1 - src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h | 1 - src/cpp/QtWidgets/QLabel/qlabel_wrap.h | 1 - src/cpp/QtWidgets/QLayout/qlayout_wrap.h | 1 - src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h | 1 - src/cpp/core/FlexLayout/flexlayout_wrap.h | 1 - 7 files changed, 7 deletions(-) diff --git a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h b/src/cpp/QtGui/QPixmap/qpixmap_wrap.h index 0d4141eeb3..b8c90ca628 100644 --- a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h +++ b/src/cpp/QtGui/QPixmap/qpixmap_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include #include "src/cpp/core/Component/component_macro.h" diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h index 6239a8bb63..8f49f85bac 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include "ncheckbox.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h index 3a77ac86f3..48ed458349 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h index f05486ffa0..c8bcde7ee8 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h +++ b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include "nlabel.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" diff --git a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h b/src/cpp/QtWidgets/QLayout/qlayout_wrap.h index fed9e33558..56638e5f2d 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h +++ b/src/cpp/QtWidgets/QLayout/qlayout_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h index e14df88f96..4d8ea42593 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h +++ b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include "nlineedit.h" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" diff --git a/src/cpp/core/FlexLayout/flexlayout_wrap.h b/src/cpp/core/FlexLayout/flexlayout_wrap.h index 2e8310b637..28fac3104a 100644 --- a/src/cpp/core/FlexLayout/flexlayout_wrap.h +++ b/src/cpp/core/FlexLayout/flexlayout_wrap.h @@ -2,7 +2,6 @@ #include #include -#include #include "flexlayout.h" #include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" From 8703207b56eeaf5795fe976cbca625156490bf88 Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 3 Sep 2019 23:39:47 +0200 Subject: [PATCH 027/891] Adds gridlayout removeWidget --- src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp | 10 ++++++++++ src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h | 1 + src/lib/QtWidgets/QGridLayout/index.ts | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp index 38310e123e..ff43921bf9 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp +++ b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp @@ -9,6 +9,7 @@ Napi::Object QGridLayoutWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QGridLayout"; Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("addWidget", &QGridLayoutWrap::addWidget), + InstanceMethod("removeWidget", &QGridLayoutWrap::removeWidget), QLAYOUT_WRAPPED_METHODS_EXPORT_DEFINE(QGridLayoutWrap) }); constructor = Napi::Persistent(func); @@ -50,3 +51,12 @@ Napi::Value QGridLayoutWrap::addWidget(const Napi::CallbackInfo& info) { return env.Null(); } +Napi::Value QGridLayoutWrap::removeWidget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Object qwidgetObject = info[0].As(); + QWidgetWrap* widget = Napi::ObjectWrap::Unwrap(qwidgetObject); + this->instance->removeWidget(widget->getInternalInstance()); + return env.Null(); +} diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h index 48ed458349..2f0b23d5e4 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -18,6 +18,7 @@ class QGridLayoutWrap : public Napi::ObjectWrap{ static Napi::FunctionReference constructor; //wrapped methods Napi::Value addWidget(const Napi::CallbackInfo& info); + Napi::Value removeWidget(const Napi::CallbackInfo& info); QLAYOUT_WRAPPED_METHODS_DECLARATION }; diff --git a/src/lib/QtWidgets/QGridLayout/index.ts b/src/lib/QtWidgets/QGridLayout/index.ts index 1a4a4158ec..0a91c0a564 100644 --- a/src/lib/QtWidgets/QGridLayout/index.ts +++ b/src/lib/QtWidgets/QGridLayout/index.ts @@ -18,4 +18,8 @@ export class QGridLayout extends NodeLayout { this.native.addWidget(widget.native); this.children.add(widget); }; + removeWidget = (widget: NodeWidget) => { + this.native.removeWidget(widget.native); + this.children.delete(widget); + }; } From 9363eb04b758063050f06b8492b70cebfa0a0531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Borecki?= Date: Thu, 5 Sep 2019 07:09:37 +0200 Subject: [PATCH 028/891] Added initial support for QTabWidget --- config/application.gypi | 1 + config/moc.gypi | 1 + config/moc.json | 1 + src/cpp/QtWidgets/QTabWidget/ntabwidget.h | 39 ++ .../QtWidgets/QTabWidget/qtabwidget_wrap.cpp | 105 ++++++ .../QtWidgets/QTabWidget/qtabwidget_wrap.h | 27 ++ src/cpp/autogen/ntabwidget_moc.cpp | 337 ++++++++++++++++++ src/cpp/main.cpp | 2 + src/demo.ts | 37 +- src/index.ts | 1 + src/lib/QtEnums/TabPosition/index.ts | 6 + src/lib/QtEnums/index.ts | 1 + src/lib/QtWidgets/QTabWidget/index.ts | 56 +++ 13 files changed, 607 insertions(+), 7 deletions(-) create mode 100644 src/cpp/QtWidgets/QTabWidget/ntabwidget.h create mode 100644 src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp create mode 100644 src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h create mode 100644 src/cpp/autogen/ntabwidget_moc.cpp create mode 100644 src/lib/QtEnums/TabPosition/index.ts create mode 100644 src/lib/QtWidgets/QTabWidget/index.ts diff --git a/config/application.gypi b/config/application.gypi index b3a835dabe..7742ca49a0 100644 --- a/config/application.gypi +++ b/config/application.gypi @@ -27,6 +27,7 @@ "../src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp", "../src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp", "../src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp", + "../src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp", "../src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp", "../src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp", "../src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" diff --git a/config/moc.gypi b/config/moc.gypi index aabfe38d76..06304172f7 100644 --- a/config/moc.gypi +++ b/config/moc.gypi @@ -12,6 +12,7 @@ "../src/cpp/autogen/npushbutton_moc.cpp", "../src/cpp/autogen/nspinbox_moc.cpp", "../src/cpp/autogen/nradiobutton_moc.cpp", + "../src/cpp/autogen/ntabwidget_moc.cpp", "../src/cpp/autogen/nplaintextedit_moc.cpp", "../src/cpp/autogen/nscrollarea_moc.cpp" ] diff --git a/config/moc.json b/config/moc.json index db5d1a0fb9..cd21b2acdd 100644 --- a/config/moc.json +++ b/config/moc.json @@ -11,6 +11,7 @@ "src/cpp/QtWidgets/QPushButton/npushbutton.h", "src/cpp/QtWidgets/QSpinBox/nspinbox.h", "src/cpp/QtWidgets/QRadioButton/nradiobutton.h", + "src/cpp/QtWidgets/QTabWidget/ntabwidget.h", "src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h", "src/cpp/QtWidgets/QScrollArea/nscrollarea.h" ] diff --git a/src/cpp/QtWidgets/QTabWidget/ntabwidget.h b/src/cpp/QtWidgets/QTabWidget/ntabwidget.h new file mode 100644 index 0000000000..221eed0882 --- /dev/null +++ b/src/cpp/QtWidgets/QTabWidget/ntabwidget.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "napi.h" + +class NTabWidget: public QTabWidget, public NodeWidget +{ + NODEWIDGET_IMPLEMENTATIONS(QTabWidget) +public: + using QTabWidget::QTabWidget; //inherit all constructors of QTabWidget + + void connectWidgetSignalsToEventEmitter() { + // Qt Connects: Implement all signal connects here + QObject::connect(this, &QTabWidget::currentChanged, [=](int index) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "currentChanged"), Napi::Value::From(env, index) }); + }); + QObject::connect(this, &QTabWidget::tabBarClicked, [=](int index) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "tabBarClicked"), Napi::Value::From(env, index) }); + }); + QObject::connect(this, &QTabWidget::tabBarDoubleClicked, [=](int index) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "tabBarDoubleClicked"), Napi::Value::From(env, index) }); + }); + + QObject::connect(this, &QTabWidget::tabCloseRequested, [=](int index) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "tabCloseRequested"), Napi::Value::From(env, index) }); + }); + } +}; + + diff --git a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp new file mode 100644 index 0000000000..c7ac8f6a09 --- /dev/null +++ b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp @@ -0,0 +1,105 @@ +#include "qtabwidget_wrap.h" +#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" +#include "src/cpp/QtGui/QIcon/qicon_wrap.h" +#include "src/cpp/Extras/Utils/nutils.h" +#include + +Napi::FunctionReference QTabWidgetWrap::constructor; + +Napi::Object QTabWidgetWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QTabWidget"; + Napi::Function func = DefineClass(env, CLASSNAME, { + InstanceMethod("addTab", &QTabWidgetWrap::addTab), + InstanceMethod("setTabPosition", &QTabWidgetWrap::setTabPosition), + InstanceMethod("setCurrentIndex", &QTabWidgetWrap::setCurrentIndex), + InstanceMethod("currentIndex", &QTabWidgetWrap::currentIndex), + InstanceMethod("removeTab", &QTabWidgetWrap::removeTab), + InstanceMethod("setTabsClosable", &QTabWidgetWrap::setTabsClosable), + QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QTabWidgetWrap) + }); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NTabWidget* QTabWidgetWrap::getInternalInstance() { + return this->instance; +} + +QTabWidgetWrap::QTabWidgetWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + if(info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NTabWidget(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + } else if (info.Length() == 0){ + this->instance = new NTabWidget(); + } else { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } + // Adds measure function on yoga node so that widget size is calculated based on its text also. + YGNodeSetMeasureFunc(this->instance->getFlexNode(), &extrautils::measureQtWidget); +} + +QTabWidgetWrap::~QTabWidgetWrap() { + delete this->instance; +} + +Napi::Value QTabWidgetWrap::addTab(const Napi::CallbackInfo &info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Object pageObject = info[0].As(); + Napi::Object iconObject = info[1].As(); + Napi::String napiLabel = info[2].As(); + std::string label = napiLabel.Utf8Value(); + + QWidgetWrap* pageObjectWrap = Napi::ObjectWrap::Unwrap(pageObject); + QIconWrap *iconWrap = Napi::ObjectWrap::Unwrap(iconObject); + + this->instance->addTab(pageObjectWrap->getInternalInstance(), *iconWrap->getInternalInstance(), label.c_str()); + return env.Null(); +} + +Napi::Value QTabWidgetWrap::setTabPosition(const Napi::CallbackInfo& info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int tabPosition = info[0].As().Int32Value(); + this->instance->setTabPosition(static_cast(tabPosition)); + return env.Null(); +} + +Napi::Value QTabWidgetWrap::setCurrentIndex(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number index = info[0].As(); + this->instance->setCurrentIndex(index.Int32Value()); + return env.Null(); +} + +Napi::Value QTabWidgetWrap::currentIndex(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int value = this->instance->currentIndex(); + return Napi::Number::New(env, value); +} + +Napi::Value QTabWidgetWrap::removeTab(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number index = info[0].As(); + this->instance->removeTab(index.Int32Value()); + return env.Null(); +} + +Napi::Value QTabWidgetWrap::setTabsClosable(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Boolean closable = info[0].As(); + this->instance->setTabsClosable(closable.Value()); + return env.Null(); +} \ No newline at end of file diff --git a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h new file mode 100644 index 0000000000..c12540498c --- /dev/null +++ b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include "ntabwidget.h" +#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "src/cpp/Extras/Utils/nutils.h" + +class QTabWidgetWrap : public Napi::ObjectWrap { + private: + NTabWidget* instance; + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QTabWidgetWrap(const Napi::CallbackInfo &info); + ~QTabWidgetWrap(); + NTabWidget *getInternalInstance(); + //class constructor + static Napi::FunctionReference constructor; + //wrapped methods + Napi::Value addTab(const Napi::CallbackInfo &info); + Napi::Value setTabPosition(const Napi::CallbackInfo &info); + Napi::Value setCurrentIndex (const Napi::CallbackInfo &info); + Napi::Value currentIndex (const Napi::CallbackInfo &info); + Napi::Value removeTab (const Napi::CallbackInfo &info); + Napi::Value setTabsClosable (const Napi::CallbackInfo &info); + + QWIDGET_WRAPPED_METHODS_DECLARATION +}; diff --git a/src/cpp/autogen/ntabwidget_moc.cpp b/src/cpp/autogen/ntabwidget_moc.cpp new file mode 100644 index 0000000000..abe50a6028 --- /dev/null +++ b/src/cpp/autogen/ntabwidget_moc.cpp @@ -0,0 +1,337 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'ntabwidget.h' +** +** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include +#include "../QtWidgets/QTabWidget/ntabwidget.h" +#include +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'ntabwidget.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 67 +#error "This file was generated using the moc from 5.13.0. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +QT_BEGIN_MOC_NAMESPACE +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +struct qt_meta_stringdata_NTabWidget_t { + QByteArrayData data[47]; + char stringdata0[547]; +}; +#define QT_MOC_LITERAL(idx, ofs, len) \ + Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ + qptrdiff(offsetof(qt_meta_stringdata_NTabWidget_t, stringdata0) + ofs \ + - idx * sizeof(QByteArrayData)) \ + ) +static const qt_meta_stringdata_NTabWidget_t qt_meta_stringdata_NTabWidget = { + { +QT_MOC_LITERAL(0, 0, 10), // "NTabWidget" +QT_MOC_LITERAL(1, 11, 8), // "yDisplay" +QT_MOC_LITERAL(2, 20, 11), // "yAlignItems" +QT_MOC_LITERAL(3, 32, 13), // "yAlignContent" +QT_MOC_LITERAL(4, 46, 10), // "yAlignSelf" +QT_MOC_LITERAL(5, 57, 15), // "yJustifyContent" +QT_MOC_LITERAL(6, 73, 10), // "yDirection" +QT_MOC_LITERAL(7, 84, 14), // "yFlexDirection" +QT_MOC_LITERAL(8, 99, 9), // "yOverflow" +QT_MOC_LITERAL(9, 109, 9), // "yPosition" +QT_MOC_LITERAL(10, 119, 9), // "yFlexWrap" +QT_MOC_LITERAL(11, 129, 5), // "yFlex" +QT_MOC_LITERAL(12, 135, 9), // "yFlexGrow" +QT_MOC_LITERAL(13, 145, 11), // "yFlexShrink" +QT_MOC_LITERAL(14, 157, 12), // "yAspectRatio" +QT_MOC_LITERAL(15, 170, 4), // "yTop" +QT_MOC_LITERAL(16, 175, 6), // "yRight" +QT_MOC_LITERAL(17, 182, 7), // "yBottom" +QT_MOC_LITERAL(18, 190, 5), // "yLeft" +QT_MOC_LITERAL(19, 196, 10), // "yFlexBasis" +QT_MOC_LITERAL(20, 207, 9), // "yMinWidth" +QT_MOC_LITERAL(21, 217, 10), // "yMinHeight" +QT_MOC_LITERAL(22, 228, 6), // "yWidth" +QT_MOC_LITERAL(23, 235, 7), // "yHeight" +QT_MOC_LITERAL(24, 243, 9), // "yMaxWidth" +QT_MOC_LITERAL(25, 253, 10), // "yMaxHeight" +QT_MOC_LITERAL(26, 264, 11), // "yPaddingTop" +QT_MOC_LITERAL(27, 276, 13), // "yPaddingRight" +QT_MOC_LITERAL(28, 290, 14), // "yPaddingBottom" +QT_MOC_LITERAL(29, 305, 12), // "yPaddingLeft" +QT_MOC_LITERAL(30, 318, 18), // "yPaddingHorizontal" +QT_MOC_LITERAL(31, 337, 16), // "yPaddingVertical" +QT_MOC_LITERAL(32, 354, 8), // "yPadding" +QT_MOC_LITERAL(33, 363, 10), // "yMarginTop" +QT_MOC_LITERAL(34, 374, 12), // "yMarginRight" +QT_MOC_LITERAL(35, 387, 13), // "yMarginBottom" +QT_MOC_LITERAL(36, 401, 11), // "yMarginLeft" +QT_MOC_LITERAL(37, 413, 17), // "yMarginHorizontal" +QT_MOC_LITERAL(38, 431, 15), // "yMarginVertical" +QT_MOC_LITERAL(39, 447, 7), // "yMargin" +QT_MOC_LITERAL(40, 455, 10), // "yBorderTop" +QT_MOC_LITERAL(41, 466, 12), // "yBorderRight" +QT_MOC_LITERAL(42, 479, 13), // "yBorderBottom" +QT_MOC_LITERAL(43, 493, 11), // "yBorderLeft" +QT_MOC_LITERAL(44, 505, 17), // "yBorderHorizontal" +QT_MOC_LITERAL(45, 523, 15), // "yBorderVertical" +QT_MOC_LITERAL(46, 539, 7) // "yBorder" + + }, + "NTabWidget\0yDisplay\0yAlignItems\0" + "yAlignContent\0yAlignSelf\0yJustifyContent\0" + "yDirection\0yFlexDirection\0yOverflow\0" + "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" + "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" + "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" + "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" + "yMaxHeight\0yPaddingTop\0yPaddingRight\0" + "yPaddingBottom\0yPaddingLeft\0" + "yPaddingHorizontal\0yPaddingVertical\0" + "yPadding\0yMarginTop\0yMarginRight\0" + "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" + "yMarginVertical\0yMargin\0yBorderTop\0" + "yBorderRight\0yBorderBottom\0yBorderLeft\0" + "yBorderHorizontal\0yBorderVertical\0" + "yBorder" +}; +#undef QT_MOC_LITERAL + +static const uint qt_meta_data_NTabWidget[] = { + + // content: + 8, // revision + 0, // classname + 0, 0, // classinfo + 0, 0, // methods + 46, 14, // properties + 0, 0, // enums/sets + 0, 0, // constructors + 0, // flags + 0, // signalCount + + // properties: name, type, flags + 1, QMetaType::QString, 0x00095103, + 2, QMetaType::QString, 0x00095103, + 3, QMetaType::QString, 0x00095103, + 4, QMetaType::QString, 0x00095103, + 5, QMetaType::QString, 0x00095103, + 6, QMetaType::QString, 0x00095103, + 7, QMetaType::QString, 0x00095103, + 8, QMetaType::QString, 0x00095103, + 9, QMetaType::QString, 0x00095103, + 10, QMetaType::QString, 0x00095103, + 11, QMetaType::Float, 0x00095103, + 12, QMetaType::Float, 0x00095103, + 13, QMetaType::Float, 0x00095103, + 14, QMetaType::Float, 0x00095103, + 15, QMetaType::QString, 0x00095003, + 16, QMetaType::QString, 0x00095003, + 17, QMetaType::QString, 0x00095003, + 18, QMetaType::QString, 0x00095003, + 19, QMetaType::QString, 0x00095103, + 20, QMetaType::QString, 0x00095103, + 21, QMetaType::QString, 0x00095103, + 22, QMetaType::QString, 0x00095103, + 23, QMetaType::QString, 0x00095103, + 24, QMetaType::QString, 0x00095103, + 25, QMetaType::QString, 0x00095103, + 26, QMetaType::QString, 0x00095103, + 27, QMetaType::QString, 0x00095103, + 28, QMetaType::QString, 0x00095103, + 29, QMetaType::QString, 0x00095103, + 30, QMetaType::QString, 0x00095103, + 31, QMetaType::QString, 0x00095103, + 32, QMetaType::QString, 0x00095103, + 33, QMetaType::QString, 0x00095103, + 34, QMetaType::QString, 0x00095103, + 35, QMetaType::QString, 0x00095103, + 36, QMetaType::QString, 0x00095103, + 37, QMetaType::QString, 0x00095103, + 38, QMetaType::QString, 0x00095103, + 39, QMetaType::QString, 0x00095003, + 40, QMetaType::Float, 0x00095103, + 41, QMetaType::Float, 0x00095103, + 42, QMetaType::Float, 0x00095103, + 43, QMetaType::Float, 0x00095103, + 44, QMetaType::Float, 0x00095103, + 45, QMetaType::Float, 0x00095103, + 46, QMetaType::Float, 0x00095103, + + 0 // eod +}; + +void NTabWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + +#ifndef QT_NO_PROPERTIES + if (_c == QMetaObject::ReadProperty) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; + case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; + case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; + case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; + case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; + case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; + case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; + case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; + case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; + case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; + case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; + case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; + case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; + case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; + case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; + case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; + case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; + case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; + case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; + case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; + case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; + case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; + case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; + case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; + case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; + case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; + case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; + case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; + case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; + case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; + case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; + case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; + case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; + case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; + case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; + case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; + case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; + case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; + case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; + case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; + case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; + case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; + case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; + case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; + case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; + case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; + default: break; + } + } else if (_c == QMetaObject::WriteProperty) { + auto *_t = static_cast(_o); + Q_UNUSED(_t) + void *_v = _a[0]; + switch (_id) { + case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; + case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; + case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; + case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; + case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; + case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; + case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; + case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; + case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; + case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; + case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; + case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; + case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; + case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; + case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; + case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; + case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; + case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; + case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; + case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; + case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; + case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; + case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; + case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; + case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; + case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; + case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; + case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; + case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; + case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; + case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; + case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; + case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; + case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; + case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; + case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; + case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; + case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; + case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; + case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; + case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; + case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; + case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; + case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; + case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; + case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; + default: break; + } + } else if (_c == QMetaObject::ResetProperty) { + } +#endif // QT_NO_PROPERTIES + Q_UNUSED(_o); + Q_UNUSED(_id); + Q_UNUSED(_c); + Q_UNUSED(_a); +} + +QT_INIT_METAOBJECT const QMetaObject NTabWidget::staticMetaObject = { { + &QTabWidget::staticMetaObject, + qt_meta_stringdata_NTabWidget.data, + qt_meta_data_NTabWidget, + qt_static_metacall, + nullptr, + nullptr +} }; + + +const QMetaObject *NTabWidget::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *NTabWidget::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_meta_stringdata_NTabWidget.stringdata0)) + return static_cast(this); + if (!strcmp(_clname, "NodeWidget")) + return static_cast< NodeWidget*>(this); + return QTabWidget::qt_metacast(_clname); +} + +int NTabWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QTabWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + +#ifndef QT_NO_PROPERTIES + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyDesignable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyScriptable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyStored) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyEditable) { + _id -= 46; + } else if (_c == QMetaObject::QueryPropertyUser) { + _id -= 46; + } +#endif // QT_NO_PROPERTIES + return _id; +} +QT_WARNING_POP +QT_END_MOC_NAMESPACE diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 3ff51c7e58..e892eeca32 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -13,6 +13,7 @@ #include "src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h" #include "src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h" #include "src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h" +#include "src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h" #include "src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h" #include "src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h" #include "src/cpp/core/FlexLayout/flexlayout_wrap.h" @@ -39,6 +40,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QCheckBoxWrap::init(env, exports); QProgressBarWrap::init(env, exports); QRadioButtonWrap::init(env, exports); + QTabWidgetWrap::init(env, exports); QLineEditWrap::init(env, exports); QKeyEventWrap::init(env, exports); QPlainTextEditWrap::init(env, exports); diff --git a/src/demo.ts b/src/demo.ts index 4352000d02..0aa725caac 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,20 +10,28 @@ import { QWidget, QIcon, QDial, - QPlainTextEdit + QPlainTextEdit, + QTabWidget, + QGridLayout } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; import { CursorShape, WindowState } from "./lib/QtEnums" +import { QTabWidgetEvents } from "./lib/QtWidgets/QTabWidget"; const path = require("path"); const win = new QMainWindow(); -const label = new QLabel(); -label.setText("Hello world 🧙"); -label.setInlineStyle("font-size: 20px;"); -label.setCursor(CursorShape.ForbiddenCursor); +const label1 = new QLabel(); +label1.setText("Hello world 1 🧙"); +label1.setInlineStyle("font-size: 20px;"); +label1.setCursor(CursorShape.ForbiddenCursor); + +const label2 = new QLabel(); +label2.setText("Hello world 2 💻"); +label2.setInlineStyle("font-size: 20px;"); +label2.setCursor(CursorShape.ForbiddenCursor); const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); @@ -51,6 +59,21 @@ const icon = new QIcon( ); button.setIcon(icon); +const tabs = new QTabWidget(); +tabs.setTabsClosable(true); +const tab1 = new QWidget(); +const tab2 = new QWidget(); +tab1.setLayout(new QGridLayout()); +tab2.setLayout(new QGridLayout()); + +if(tab1.layout && tab2.layout) { + tab1.layout.addWidget(label1); + tab2.layout.addWidget(label2); +} + +tabs.addTab(tab1, icon, "Tab 1"); +tabs.addTab(tab2, icon, "Tab 2"); + const progressbar = new QProgressBar(); progressbar.setValue(6); progressbar.setMinimum(1); @@ -77,7 +100,7 @@ imageLabel.setPixmap(pixmap); scrollArea.setWidget(imageLabel); if (rootView.layout) { - rootView.layout.addWidget(label); + rootView.layout.addWidget(tabs); rootView.layout.addWidget(checkbox); rootView.layout.addWidget(radioButton); rootView.layout.addWidget(lineEdit); @@ -101,7 +124,7 @@ win.setStyleSheet(` win.setWindowIcon(nodeguiLogo); win.setWindowTitle("NodeGUI Demo"); -win.resize(400, 400); +win.resize(400, 500); win.show(); win.setWindowState(WindowState.WindowActive); diff --git a/src/index.ts b/src/index.ts index 2b5734886a..9e90c35d72 100644 --- a/src/index.ts +++ b/src/index.ts @@ -24,6 +24,7 @@ export { QProgressBar, QProgressBarEvents } from "./lib/QtWidgets/QProgressBar"; export { QPushButton, QPushButtonEvents } from "./lib/QtWidgets/QPushButton"; export { QSpinBox, QSpinBoxEvents } from "./lib/QtWidgets/QSpinBox"; export { QRadioButton, QRadioButtonEvents } from "./lib/QtWidgets/QRadioButton"; +export { QTabWidget, QTabWidgetEvents } from "./lib/QtWidgets/QTabWidget"; export { QPlainTextEdit, QPlainTextEditEvents diff --git a/src/lib/QtEnums/TabPosition/index.ts b/src/lib/QtEnums/TabPosition/index.ts new file mode 100644 index 0000000000..79f6d0ae35 --- /dev/null +++ b/src/lib/QtEnums/TabPosition/index.ts @@ -0,0 +1,6 @@ +export enum TabPosition { + North = 0, + South = 1, + West = 2, + East = 3 +} \ No newline at end of file diff --git a/src/lib/QtEnums/index.ts b/src/lib/QtEnums/index.ts index 8a45421aac..88c7320835 100644 --- a/src/lib/QtEnums/index.ts +++ b/src/lib/QtEnums/index.ts @@ -61,6 +61,7 @@ export { SizeHint } from "./SizeHint"; export { SizeMode } from "./SizeMode"; export { SortOrder } from "./SortOrder"; export { TabFocusBehavior } from "./TabFocusBehavior"; +export { TabPosition } from "./TabPosition"; export { TextElideMode } from "./TextElideMode"; export { TextFlag } from "./TextFlag"; export { TextFormat } from "./TextFormat"; diff --git a/src/lib/QtWidgets/QTabWidget/index.ts b/src/lib/QtWidgets/QTabWidget/index.ts new file mode 100644 index 0000000000..cb80aeba7d --- /dev/null +++ b/src/lib/QtWidgets/QTabWidget/index.ts @@ -0,0 +1,56 @@ +import addon from "../../core/addon"; +import { NodeWidget } from "../QWidget"; +import { BaseWidgetEvents } from "../../core/EventWidget"; +import { NativeElement } from "../../core/Component"; +import { QIcon } from "../../QtGui/QIcon"; +import { TabPosition } from "../../QtEnums"; + +export const QTabWidgetEvents = Object.freeze({ + ...BaseWidgetEvents, + currentChanged: "currentChanged", + tabBarClicked: "tabBarClicked", + tabBarDoubleClicked: "tabBarDoubleClicked", + tabCloseRequested: "tabCloseRequested" +}); + +export class QTabWidget extends NodeWidget { + native: NativeElement; + constructor(parent?: NodeWidget) { + let native; + if (parent) { + native = new addon.QTabWidget(parent.native); + } else { + native = new addon.QTabWidget(); + } + super(native); + this.parent = parent; + this.native = native; + // bind member functions + this.addTab.bind(this); + } + + addTab(page: NodeWidget, icon: QIcon, label: string) { + this.children.add(page); + this.native.addTab(page.native, icon.native, label); + } + + setTabPosition(tabPosition: TabPosition) { + this.native.setTabPosition(tabPosition); + } + + setCurrentIndex(index: Number) { + this.native.setCurrentIndex(index); + } + + currentIndex(): number { + return this.native.currentIndex(); + } + + removeTab(index: Number) { + this.native.removeTab(index); + } + + setTabsClosable(closeable: Boolean) { + this.native.setTabsClosable(closeable); + } +} From 6926bf940ae06d37c830c0c15420d4e17f16a071 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 10:44:19 +0200 Subject: [PATCH 029/891] Adds plain text edit methods and signals --- .../QtWidgets/QPlainTextEdit/nplaintextedit.h | 35 +++++++++++++++++++ .../QPlainTextEdit/qplaintextedit_wrap.cpp | 34 ++++++++++++++++++ .../QPlainTextEdit/qplaintextedit_wrap.h | 4 +++ src/demo.ts | 6 ++-- src/index.ts | 4 ++- src/lib/QtGui/QTextOption/index.ts | 3 ++ src/lib/QtGui/QTextOption/textOptionEnums.ts | 7 ++++ src/lib/QtWidgets/QPlainTextEdit/index.ts | 32 +++++++++++++++-- 8 files changed, 120 insertions(+), 5 deletions(-) create mode 100644 src/lib/QtGui/QTextOption/index.ts create mode 100644 src/lib/QtGui/QTextOption/textOptionEnums.ts diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h index b1da3ec049..2b5d5d9116 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h @@ -17,5 +17,40 @@ class NPlainTextEdit : public QPlainTextEdit, public NodeWidget Napi::HandleScope scope(env); this->emitOnNode.Call({Napi::String::New(env, "textChanged")}); }); + QObject::connect(this, &QPlainTextEdit::blockCountChanged, [=](int newBlockCount) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "blockCountChanged"), Napi::Value::From(env, newBlockCount)}); + }); + QObject::connect(this, &QPlainTextEdit::copyAvailable, [=](bool yes) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "copyAvailable"), Napi::Value::From(env, yes)}); + }); + QObject::connect(this, &QPlainTextEdit::cursorPositionChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "cursorPositionChanged")}); + }); + QObject::connect(this, &QPlainTextEdit::modificationChanged, [=](bool charged) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "modificationChanged"), Napi::Value::From(env, charged)}); + }); + QObject::connect(this, &QPlainTextEdit::redoAvailable, [=](bool available) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "redoAvailable"), Napi::Value::From(env, available)}); + }); + QObject::connect(this, &QPlainTextEdit::selectionChanged, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "selectionChanged")}); + }); + QObject::connect(this, &QPlainTextEdit::undoAvailable, [=](bool available) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({Napi::String::New(env, "undoAvailable"), Napi::Value::From(env, available)}); + }); } }; diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index 797dc031a3..c8b7f6af83 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -15,6 +15,10 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { InstanceMethod("toPlainText",&QPlainTextEditWrap::toPlainText), InstanceMethod("setReadOnly", &QPlainTextEditWrap::setReadOnly), InstanceMethod("clear", &QPlainTextEditWrap::clear), + InstanceMethod("setWordWrapMode", &QPlainTextEditWrap::setWordWrapMode), + InstanceMethod("wordWrapMode", &QPlainTextEditWrap::wordWrapMode), + InstanceMethod("setLineWrapMode", &QPlainTextEditWrap::setLineWrapMode), + InstanceMethod("lineWrapMode", &QPlainTextEditWrap::lineWrapMode), QWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) QABSTRACTSCROLLAREA_WRAPPED_METHODS_EXPORT_DEFINE(QPlainTextEditWrap) }); @@ -77,3 +81,33 @@ Napi::Value QPlainTextEditWrap::clear(const Napi::CallbackInfo &info){ this->instance->clear(); return env.Null(); } + +Napi::Value QPlainTextEditWrap::setWordWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + this->instance->setWordWrapMode(static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QPlainTextEditWrap::wordWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int value = static_cast(this->instance->wordWrapMode()); + return Napi::Number::From(env, value); +} + +Napi::Value QPlainTextEditWrap::setLineWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + this->instance->setLineWrapMode(static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QPlainTextEditWrap::lineWrapMode(const Napi::CallbackInfo &info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + int value = static_cast(this->instance->lineWrapMode()); + return Napi::Number::From(env, value); +} \ No newline at end of file diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index b9ff9c6ce7..0081d327f3 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -23,5 +23,9 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ Napi::Value toPlainText(const Napi::CallbackInfo &info); Napi::Value setReadOnly(const Napi::CallbackInfo &info); Napi::Value clear(const Napi::CallbackInfo &info); + Napi::Value setWordWrapMode(const Napi::CallbackInfo &info); + Napi::Value wordWrapMode(const Napi::CallbackInfo &info); + Napi::Value setLineWrapMode(const Napi::CallbackInfo &info); + Napi::Value lineWrapMode(const Napi::CallbackInfo &info); }; diff --git a/src/demo.ts b/src/demo.ts index 4352000d02..5dae4c81b7 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,11 +10,12 @@ import { QWidget, QIcon, QDial, - QPlainTextEdit + QPlainTextEdit, + QTextOptionEnums } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; -import { CursorShape, WindowState } from "./lib/QtEnums" +import { CursorShape, WindowState } from "./lib/QtEnums"; const path = require("path"); @@ -65,6 +66,7 @@ rootView.setLayout(new FlexLayout()); const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); +textEdit.setWordWrapMode(QTextOptionEnums.WrapMode.NoWrap); const scrollArea = new QScrollArea(); scrollArea.setInlineStyle("flex: 1; width:'100%';"); diff --git a/src/index.ts b/src/index.ts index 2b5734886a..5c88e1df69 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,6 +5,7 @@ export { QApplication } from "./lib/QtGui/QApplication"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; +export { QTextOptionEnums } from "./lib/QtGui/QTextOption"; // Events: Maybe a separate module ? export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; export { NativeEvent } from "./lib/core/EventWidget"; @@ -26,7 +27,8 @@ export { QSpinBox, QSpinBoxEvents } from "./lib/QtWidgets/QSpinBox"; export { QRadioButton, QRadioButtonEvents } from "./lib/QtWidgets/QRadioButton"; export { QPlainTextEdit, - QPlainTextEditEvents + QPlainTextEditEvents, + LineWrapMode } from "./lib/QtWidgets/QPlainTextEdit"; export { QScrollArea, QScrollAreaEvents } from "./lib/QtWidgets/QScrollArea"; // Layouts: diff --git a/src/lib/QtGui/QTextOption/index.ts b/src/lib/QtGui/QTextOption/index.ts new file mode 100644 index 0000000000..ad0a97e032 --- /dev/null +++ b/src/lib/QtGui/QTextOption/index.ts @@ -0,0 +1,3 @@ +import * as Enums from "./textOptionEnums"; + +export const QTextOptionEnums = Enums; diff --git a/src/lib/QtGui/QTextOption/textOptionEnums.ts b/src/lib/QtGui/QTextOption/textOptionEnums.ts new file mode 100644 index 0000000000..077d3102ba --- /dev/null +++ b/src/lib/QtGui/QTextOption/textOptionEnums.ts @@ -0,0 +1,7 @@ +export enum WrapMode { + NoWrap, + WordWrap, + ManualWrap, + WrapAnywhere, + WrapAtWordBoundaryOrAnywhere +} diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index b87994b017..0858fe9ccc 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -3,12 +3,24 @@ import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { QAbstractScrollArea } from "../QAbstractScrollArea"; +import { WrapMode } from "../../QtGui/QTextOption/textOptionEnums"; export const QPlainTextEditEvents = Object.freeze({ ...BaseWidgetEvents, - textChanged: "textChanged" + textChanged: "textChanged", + blockCountChanged: "blockCountChanged", + copyAvailable: "copyAvailable", + cursorPositionChanged: "cursorPositionChanged", + modificationChanged: "modificationChanged", + redoAvailable: "redoAvailable", + selectionChanged: "selectionChanged", + undoAvailable: "undoAvailable" }); +export enum LineWrapMode { + NoWrap, + WidgetWidth +} export class QPlainTextEdit extends QAbstractScrollArea { native: NativeElement; constructor(parent?: NodeWidget) { @@ -26,12 +38,16 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.toPlainText.bind(this); this.setReadOnly.bind(this); this.clear.bind(this); + this.setWordWrapMode.bind(this); + this.wordWrapMode.bind(this); + this.setLineWrapMode.bind(this); + this.lineWrapMode.bind(this); } setPlainText(text: string | number) { // react:✓ this.native.setPlainText(`${text}`); } - toPlainText() { + toPlainText(): string { // react:✓ return this.native.toPlainText(); } @@ -43,4 +59,16 @@ export class QPlainTextEdit extends QAbstractScrollArea { // react:✓ this.native.clear(); } + setWordWrapMode(mode: WrapMode) { + this.native.setWordWrapMode(mode); + } + wordWrapMode(): WrapMode { + return this.native.wordWrapMode(); + } + setLineWrapMode(mode: LineWrapMode) { + this.native.setLineWrapMode(mode); + } + lineWrapMode(): LineWrapMode { + return this.native.lineWrapMode(); + } } From 179c48a28d6fc6bd0a677a70663a0b80c4e3cdc6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 10:52:47 +0200 Subject: [PATCH 030/891] Adds docs --- docs/api/QPlainTextEdit.md | 36 ++++++++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index 0a820a80d8..3185bb8bda 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -32,20 +32,40 @@ QPlainTextEdit can access all the instance properties defined in [NodeWidget](ap QPlainTextEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). -#### [`plainTextEdit.setPlainText(text)`](https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText) +#### `plainTextEdit.setPlainText(text)` -Sets the given text to the plainTextEdit. +Sets the given text to the plainTextEdit. It calls the native method [QPlainTextEdit: setPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText). - `text` string -#### [`plainTextEdit.toPlainText()`](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText) +#### `plainTextEdit.toPlainText()` -Returns the text of the text edit as plain text. +Returns the text of the text edit as plain text. [QPlainTextEdit: toPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText). -#### [`plainTextEdit.setReadOnly(isReadOnly)`](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop) +#### `plainTextEdit.setReadOnly(isReadOnly)` -Sets the plainTextEdit to be read only. +Sets the plainTextEdit to be read only. [QPlainTextEdit: isReadOnly](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop). -#### [`plainTextEdit.clear()`](https://doc.qt.io/qt-5/qplaintextedit.html#clear) +#### `plainTextEdit.clear()` -Deletes all the text in the text edit. +Deletes all the text in the text edit.[QPlainTextEdit: clear](https://doc.qt.io/qt-5/qplaintextedit.html#clear). + +#### `plainTextEdit.setWordWrapMode(mode)` + +This property holds the mode QPlainTextEdit will use when wrapping text by words.[QPlainTextEdit: setWordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). + +- mode: WrapMode + +#### `plainTextEdit.wordWrapMode()` + +returns word wrap mode. [QPlainTextEdit: wordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). + +#### `plainTextEdit.setLineWrapMode(mode)` + +This property holds the line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop). + +- mode: LineWrapMode + +#### `plainTextEdit.lineWrapMode()` + +returns line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop). From 0ff2c8d2a9cee0d9ab076f27039694291a2c1755 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 19:36:31 +0200 Subject: [PATCH 031/891] Adds qclipboard --- config/application.gypi | 1 + .../QtGui/QApplication/qapplication_wrap.cpp | 21 +++++-- .../QtGui/QApplication/qapplication_wrap.h | 5 +- src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp | 63 +++++++++++++++++++ src/cpp/QtGui/QClipboard/qclipboard_wrap.h | 20 ++++++ src/cpp/main.cpp | 2 + src/index.ts | 1 + src/lib/QtGui/QApplication/index.ts | 4 ++ src/lib/QtGui/QClipboard/index.ts | 28 +++++++++ 9 files changed, 138 insertions(+), 7 deletions(-) create mode 100644 src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp create mode 100644 src/cpp/QtGui/QClipboard/qclipboard_wrap.h create mode 100644 src/lib/QtGui/QClipboard/index.ts diff --git a/config/application.gypi b/config/application.gypi index b3a835dabe..69cb3c80bc 100644 --- a/config/application.gypi +++ b/config/application.gypi @@ -11,6 +11,7 @@ "../src/cpp/core/YogaWidget/yogawidget.cpp", # wrapped cpps. Move non wrapped ones to shared gypi "../src/cpp/QtGui/QApplication/qapplication_wrap.cpp", + "../src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp", "../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp", "../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp", "../src/cpp/QtGui/QIcon/qicon_wrap.cpp", diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp index c4ad0d0564..144226fd2d 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp @@ -1,6 +1,7 @@ #include "qapplication_wrap.h" #include "src/cpp/core/Component/component_macro.h" #include "src/cpp/Extras/Utils/nutils.h" +#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h" Napi::FunctionReference QApplicationWrap::constructor; int QApplicationWrap::argc = 0; @@ -28,22 +29,24 @@ QApplicationWrap::QApplicationWrap(const Napi::CallbackInfo& info) Napi::Env env = info.Env(); Napi::HandleScope scope(env); if(info.Length() == 1) { - this->instance = std::unique_ptr(info[0].As>().Data()); + this->instance = info[0].As>().Data(); } else if (info.Length() == 0){ - this->instance = std::make_unique(this->argc, this->argv); + this->instance = new QApplication(this->argc, this->argv); + this->_wasManuallyCreated = true; } else { Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); } } - QApplicationWrap::~QApplicationWrap() { - this->instance.reset(); + if(this->_wasManuallyCreated){ + delete this->instance; + } } QApplication* QApplicationWrap::getInternalInstance() { - return this->instance.get(); + return this->instance; } Napi::Value QApplicationWrap::processEvents(const Napi::CallbackInfo& info) @@ -87,3 +90,11 @@ Napi::Value StaticQApplicationWrapMethods::instance(const Napi::CallbackInfo& in Napi::Object instance = QApplicationWrap::constructor.New({ Napi::External::New(env, app) }); return instance; } + +Napi::Value StaticQApplicationWrapMethods::clipboard(const Napi::CallbackInfo& info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + QClipboard* clipboard = QApplication::clipboard(); + return QClipboardWrap::constructor.New({ Napi::External::New(env, clipboard) }); +} diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.h b/src/cpp/QtGui/QApplication/qapplication_wrap.h index 114172fca0..a5850f007c 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.h +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.h @@ -1,15 +1,15 @@ #pragma once #include -#include #include class QApplicationWrap : public Napi::ObjectWrap { private: - std::unique_ptr instance; + QApplication* instance; static int argc; static char** argv; + bool _wasManuallyCreated = false; public: static Napi::FunctionReference constructor; @@ -26,4 +26,5 @@ class QApplicationWrap : public Napi::ObjectWrap { namespace StaticQApplicationWrapMethods { Napi::Value instance(const Napi::CallbackInfo& info); + Napi::Value clipboard(const Napi::CallbackInfo& info); } \ No newline at end of file diff --git a/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp b/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp new file mode 100644 index 0000000000..48d56e993f --- /dev/null +++ b/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp @@ -0,0 +1,63 @@ +#include "qclipboard_wrap.h" +#include "src/cpp/Extras/Utils/nutils.h" +#include "deps/spdlog/spdlog.h" + +Napi::FunctionReference QClipboardWrap::constructor; + +Napi::Object QClipboardWrap::init(Napi::Env env, Napi::Object exports) +{ + Napi::HandleScope scope(env); + char CLASSNAME[] = "QClipboard"; + Napi::Function func = DefineClass(env, CLASSNAME, { + InstanceMethod("clear", &QClipboardWrap::clear), + InstanceMethod("setText", &QClipboardWrap::setText), + InstanceMethod("text", &QClipboardWrap::text), + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE + }); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +QClipboardWrap::QClipboardWrap(const Napi::CallbackInfo &info) : Napi::ObjectWrap(info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + if (info[0].IsExternal()) { + this->instance = info[0].As>().Data(); + } + else { + Napi::TypeError::New(env, "Incorrect initialization of QClipboardWrap").ThrowAsJavaScriptException(); + } +} + +QClipboard *QClipboardWrap::getInternalInstance() +{ + return this->instance; +} + +Napi::Value QClipboardWrap::clear(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + this->instance->clear(static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QClipboardWrap::setText(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::String text = info[0].As(); + Napi::Number mode = info[1].As(); + QString clipboardText = text.Utf8Value().c_str(); + this->instance->setText(clipboardText, static_cast(mode.Int32Value())); + return env.Null(); +} + +Napi::Value QClipboardWrap::text(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::Number mode = info[0].As(); + QString text = this->instance->text(static_cast(mode.Int32Value())); + return Napi::Value::From(env, text.toStdString()); +} \ No newline at end of file diff --git a/src/cpp/QtGui/QClipboard/qclipboard_wrap.h b/src/cpp/QtGui/QClipboard/qclipboard_wrap.h new file mode 100644 index 0000000000..386a0e98d7 --- /dev/null +++ b/src/cpp/QtGui/QClipboard/qclipboard_wrap.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include +#include "src/cpp/core/Component/component_macro.h" + +class QClipboardWrap : public Napi::ObjectWrap +{ +private: + QClipboard* instance; +public: + static Napi::FunctionReference constructor; + static Napi::Object init(Napi::Env env, Napi::Object exports); + QClipboardWrap(const Napi::CallbackInfo &info); + QClipboard *getInternalInstance(); + // Wrapped methods + Napi::Value clear(const Napi::CallbackInfo& info); + Napi::Value setText(const Napi::CallbackInfo& info); + Napi::Value text(const Napi::CallbackInfo& info); +}; diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 3ff51c7e58..815ca704b4 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -1,4 +1,5 @@ #include "src/cpp/QtGui/QApplication/qapplication_wrap.h" +#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h" #include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" #include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" #include "src/cpp/QtGui/QIcon/qicon_wrap.h" @@ -27,6 +28,7 @@ void InitPrivateHelpers(Napi::Env env){ Napi::Object Main(Napi::Env env, Napi::Object exports) { InitPrivateHelpers(env); QApplicationWrap::init(env, exports); + QClipboardWrap::init(env, exports); QWidgetWrap::init(env, exports); QPixmapWrap::init(env, exports); QIconWrap::init(env, exports); diff --git a/src/index.ts b/src/index.ts index 5c88e1df69..dd09a5ec85 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,6 +6,7 @@ export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; export { QTextOptionEnums } from "./lib/QtGui/QTextOption"; +export { QClipboard, QClipboardMode } from "./lib/QtGui/QClipboard"; // Events: Maybe a separate module ? export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; export { NativeEvent } from "./lib/core/EventWidget"; diff --git a/src/lib/QtGui/QApplication/index.ts b/src/lib/QtGui/QApplication/index.ts index 67ed6a616f..cca01ed5c9 100644 --- a/src/lib/QtGui/QApplication/index.ts +++ b/src/lib/QtGui/QApplication/index.ts @@ -1,6 +1,7 @@ import addon from "../../core/addon"; import { Component, NativeElement } from "../../core/Component"; import { checkIfNativeElement } from "../../utils"; +import { QClipboard } from "../QClipboard"; type arg = NativeElement; export class QApplication extends Component { @@ -13,6 +14,9 @@ export class QApplication extends Component { this.native = new addon.QApplication(); } } + static clipboard = (): QClipboard => { + return new QClipboard(addon.QApplication.clipboard()); + }; processEvents = () => { this.native.processEvents(); }; diff --git a/src/lib/QtGui/QClipboard/index.ts b/src/lib/QtGui/QClipboard/index.ts new file mode 100644 index 0000000000..7e048d9cb8 --- /dev/null +++ b/src/lib/QtGui/QClipboard/index.ts @@ -0,0 +1,28 @@ +import { Component, NativeElement } from "../../core/Component"; +import { checkIfNativeElement } from "../../utils"; + +export class QClipboard extends Component { + native: NativeElement; + constructor(native: NativeElement) { + super(); + if (checkIfNativeElement(native)) { + this.native = native; + } else { + throw new Error( + "QClipboard cannot be initialised this way. Use QApplication::clipboard()" + ); + } + } + clear = (mode: QClipboardMode) => { + this.native.clear(mode); + }; + setText = (text: string, mode: QClipboardMode) => { + this.native.setText(text, mode); + }; +} + +export enum QClipboardMode { + Clipboard, + Selection, + FindBuffer +} From 97f4fdca28af0b481c8d8eee8722a76d8aa55ca2 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 19:54:55 +0200 Subject: [PATCH 032/891] Adds QClipboard docs --- docs/README.md | 2 ++ docs/api/QApplication.md | 6 +++- docs/api/QClipboard.md | 52 +++++++++++++++++++++++++++++++ src/lib/QtGui/QClipboard/index.ts | 3 ++ 4 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 docs/api/QClipboard.md diff --git a/docs/README.md b/docs/README.md index 25e6be324f..6649221257 100644 --- a/docs/README.md +++ b/docs/README.md @@ -53,6 +53,8 @@ - [FlexLayout](api/FlexLayout.md) - [QPixmap](api/QPixmap.md) - [QIcon](api/QIcon.md) +- [QCursor](api/QCursor.md) +- [QClipboard](api/QClipboard.md) - [Qt Enums](api/QtEnums.md) ### Internal Modules diff --git a/docs/api/QApplication.md b/docs/api/QApplication.md index 907325bf12..52cb531407 100644 --- a/docs/api/QApplication.md +++ b/docs/api/QApplication.md @@ -21,10 +21,14 @@ qApp.quit(); QApplication can access all the static methods defined in [Component](api/Component.md). Additionally it also has the following static methods. -#### `qApp.instance()` +#### `QApplication.instance()` Returns the already initialised QApplication instance. It calls the native method [QApplication: instance](https://doc.qt.io/qt-5/qcoreapplication.html#instance). +#### `QApplication.clipboard()` + +Returns the object for interacting with the clipboard. It calls the native method [QApplication: clipboard](https://doc.qt.io/qt-5/qguiapplication.html#clipboard). See QClipboard. + ### Instance Properties QApplication can access all the instance properties defined in [Component](api/Component.md) diff --git a/docs/api/QClipboard.md b/docs/api/QClipboard.md new file mode 100644 index 0000000000..439604b0ad --- /dev/null +++ b/docs/api/QClipboard.md @@ -0,0 +1,52 @@ +## Class: QClipboard + +> The QClipboard class provides access to the window system clipboard. + +**This class is a JS wrapper around Qt's [QClipboard class](https://doc.qt.io/qt-5/QClipboard.html)** + +**QClipboard inherits from [Component](api/Component.md)** + +### Example + +```javascript +const { + QClipboard, + QClipboardMode, + QApplication +} = require("@nodegui/nodegui"); + +const clipboard = QApplication.clipboard(); +const text = clipboard.text(QClipboardMode.Clipboard); +``` + +### Static Methods + +QClipboard can access all the static methods defined in [Component](api/Component.md) + +### Instance Properties + +QClipboard can access all the instance properties defined in [Component](api/Component.md) + +### Instance Methods + +QClipboard can access all the instance methods defined in [Component](api/Component.md). Additionally it has: + +### `clipboard.clear(mode)` + +Clear the clipboard contents. It calls the native method [QClipboard: clear](https://doc.qt.io/qt-5/qclipboard.html#clear). + +- `mode` - This enum type is used to control which part of the system clipboard is used. See https://doc.qt.io/qt-5/qclipboard.html#Mode-enum + +### `clipboard.setText(text, mode)` + +Copies text into the clipboard as plain text. It calls the native method [QClipboard: setText](https://doc.qt.io/qt-5/qclipboard.html#setText). + +- `text` - The text you want to copy to clipboard. + +- `mode` - This enum type is used to control which part of the system clipboard is used. See https://doc.qt.io/qt-5/qclipboard.html#Mode-enum + +### `clipboard.text(mode)` + +Returns the clipboard text as plain text, or an empty string if the clipboard does not contain any text. It calls the native method [QClipboard: text](https://doc.qt.io/qt-5/qclipboard.html#text). + +- `mode` - This enum type is used to control which part of the system clipboard is used. See https://doc.qt.io/qt-5/qclipboard.html#Mode-enum diff --git a/src/lib/QtGui/QClipboard/index.ts b/src/lib/QtGui/QClipboard/index.ts index 7e048d9cb8..622cedcb31 100644 --- a/src/lib/QtGui/QClipboard/index.ts +++ b/src/lib/QtGui/QClipboard/index.ts @@ -19,6 +19,9 @@ export class QClipboard extends Component { setText = (text: string, mode: QClipboardMode) => { this.native.setText(text, mode); }; + text = (mode: QClipboardMode) => { + return this.native.text(mode); + }; } export enum QClipboardMode { From 6120679bf1d9915a808d5a5092b28ce92613fdd5 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 20:02:42 +0200 Subject: [PATCH 033/891] Fixes weird way of exporting textoptions --- docs/api/QPlainTextEdit.md | 2 +- src/demo.ts | 6 +++--- src/index.ts | 2 +- src/lib/QtGui/QTextOption/index.ts | 10 +++++++--- src/lib/QtGui/QTextOption/textOptionEnums.ts | 7 ------- src/lib/QtWidgets/QPlainTextEdit/index.ts | 6 +++--- 6 files changed, 15 insertions(+), 18 deletions(-) delete mode 100644 src/lib/QtGui/QTextOption/textOptionEnums.ts diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index 3185bb8bda..ad38ae4884 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -54,7 +54,7 @@ Deletes all the text in the text edit.[QPlainTextEdit: clear](https://doc.qt.io/ This property holds the mode QPlainTextEdit will use when wrapping text by words.[QPlainTextEdit: setWordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). -- mode: WrapMode +- mode: QTextOptionWrapMode #### `plainTextEdit.wordWrapMode()` diff --git a/src/demo.ts b/src/demo.ts index 5dae4c81b7..8d72d81b81 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,12 +10,12 @@ import { QWidget, QIcon, QDial, - QPlainTextEdit, - QTextOptionEnums + QPlainTextEdit } from "./index"; import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; import { QPixmap } from "./lib/QtGui/QPixmap"; import { CursorShape, WindowState } from "./lib/QtEnums"; +import { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; const path = require("path"); @@ -66,7 +66,7 @@ rootView.setLayout(new FlexLayout()); const textEdit = new QPlainTextEdit(); textEdit.setPlainText("Hello"); -textEdit.setWordWrapMode(QTextOptionEnums.WrapMode.NoWrap); +textEdit.setWordWrapMode(QTextOptionWrapMode.NoWrap); const scrollArea = new QScrollArea(); scrollArea.setInlineStyle("flex: 1; width:'100%';"); diff --git a/src/index.ts b/src/index.ts index dd09a5ec85..2dba519f14 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,7 @@ export { QApplication } from "./lib/QtGui/QApplication"; export { QPixmap } from "./lib/QtGui/QPixmap"; export { QIcon } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; -export { QTextOptionEnums } from "./lib/QtGui/QTextOption"; +export { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; export { QClipboard, QClipboardMode } from "./lib/QtGui/QClipboard"; // Events: Maybe a separate module ? export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; diff --git a/src/lib/QtGui/QTextOption/index.ts b/src/lib/QtGui/QTextOption/index.ts index ad0a97e032..184df95fd9 100644 --- a/src/lib/QtGui/QTextOption/index.ts +++ b/src/lib/QtGui/QTextOption/index.ts @@ -1,3 +1,7 @@ -import * as Enums from "./textOptionEnums"; - -export const QTextOptionEnums = Enums; +export enum QTextOptionWrapMode { + NoWrap, + WordWrap, + ManualWrap, + WrapAnywhere, + WrapAtWordBoundaryOrAnywhere +} diff --git a/src/lib/QtGui/QTextOption/textOptionEnums.ts b/src/lib/QtGui/QTextOption/textOptionEnums.ts deleted file mode 100644 index 077d3102ba..0000000000 --- a/src/lib/QtGui/QTextOption/textOptionEnums.ts +++ /dev/null @@ -1,7 +0,0 @@ -export enum WrapMode { - NoWrap, - WordWrap, - ManualWrap, - WrapAnywhere, - WrapAtWordBoundaryOrAnywhere -} diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 0858fe9ccc..a7d8c288c3 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -3,7 +3,7 @@ import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { QAbstractScrollArea } from "../QAbstractScrollArea"; -import { WrapMode } from "../../QtGui/QTextOption/textOptionEnums"; +import { QTextOptionWrapMode } from "../../QtGui/QTextOption"; export const QPlainTextEditEvents = Object.freeze({ ...BaseWidgetEvents, @@ -59,10 +59,10 @@ export class QPlainTextEdit extends QAbstractScrollArea { // react:✓ this.native.clear(); } - setWordWrapMode(mode: WrapMode) { + setWordWrapMode(mode: QTextOptionWrapMode) { this.native.setWordWrapMode(mode); } - wordWrapMode(): WrapMode { + wordWrapMode(): QTextOptionWrapMode { return this.native.wordWrapMode(); } setLineWrapMode(mode: LineWrapMode) { From 34fc9c56214efc5c5cf1baae48341a007c60bf24 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 20:26:02 +0200 Subject: [PATCH 034/891] Adds clipboard demo --- .../QtGui/QApplication/qapplication_wrap.cpp | 1 + src/demo.ts | 18 +++++++++++++----- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp index 144226fd2d..7ea729e835 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/QtGui/QApplication/qapplication_wrap.cpp @@ -16,6 +16,7 @@ Napi::Object QApplicationWrap::init(Napi::Env env, Napi::Object exports) InstanceMethod("exec", &QApplicationWrap::exec), InstanceMethod("quit", &QApplicationWrap::quit), StaticMethod("instance", &StaticQApplicationWrapMethods::instance), + StaticMethod("clipboard", &StaticQApplicationWrapMethods::clipboard), COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE }); constructor = Napi::Persistent(func); diff --git a/src/demo.ts b/src/demo.ts index 8d72d81b81..161527dbca 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -10,12 +10,15 @@ import { QWidget, QIcon, QDial, - QPlainTextEdit + QPlainTextEdit, + QScrollArea, + QPixmap, + CursorShape, + WindowState, + QTextOptionWrapMode, + QApplication, + QClipboardMode } from "./index"; -import { QScrollArea } from "./lib/QtWidgets/QScrollArea"; -import { QPixmap } from "./lib/QtGui/QPixmap"; -import { CursorShape, WindowState } from "./lib/QtEnums"; -import { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; const path = require("path"); @@ -42,6 +45,11 @@ const button = new QPushButton(); button.setText("Push Push Push!"); button.setObjectName("btn"); button.setFlat(true); +button.addEventListener("clicked", () => { + const clipboard = QApplication.clipboard(); + console.log("clipboard: ", clipboard.text(QClipboardMode.Clipboard)); + clipboard.setText("yooooo", QClipboardMode.Clipboard); +}); const nodeguiLogo = new QIcon( path.resolve(__dirname, "../extras/assets/nodegui.png") From 3b72f4d94986a954044ffc38141c6ceef6891d84 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 20:28:28 +0200 Subject: [PATCH 035/891] adds return type --- src/lib/QtGui/QClipboard/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/QtGui/QClipboard/index.ts b/src/lib/QtGui/QClipboard/index.ts index 622cedcb31..e2a871325a 100644 --- a/src/lib/QtGui/QClipboard/index.ts +++ b/src/lib/QtGui/QClipboard/index.ts @@ -19,7 +19,7 @@ export class QClipboard extends Component { setText = (text: string, mode: QClipboardMode) => { this.native.setText(text, mode); }; - text = (mode: QClipboardMode) => { + text = (mode: QClipboardMode): string => { return this.native.text(mode); }; } From 2153e14745f80b55aaec4ebb3e5eac58d1fba36e Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 21:08:56 +0200 Subject: [PATCH 036/891] Update README.md --- README.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a5ab523f73..45bed8d5cf 100644 --- a/README.md +++ b/README.md @@ -70,15 +70,21 @@ Looking to contribute? If you wish to implement a new widget/add more features a `npm run build [--qt_home_dir=/path/to/qt]` +## Funding + +NodeGUI is an open source project. If you like this project, please consider support my work with Ko-fi. + +[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E510AV9) + +
or
+ +Issues on NodeGui can be funded by anyone and the money will be distributed to respective contributors. +[![issuehunt](https://github.com/BoostIO/issuehunt-materials/raw/master/v1/issuehunt-button-v1.svg?sanitize=true)](https://issuehunt.io/r/nodegui/nodegui) + ### LICENSE MIT -## Note - -> Since we do not in any way modify the code of Qt and only link to it dynamically, I believe we are in compliance with the LGPL license requirements of QT. And hence this library can be licensed under its own License (for which we have chosen MIT License). -> The links to QT source code and appropriate license notices are attached. We try our best to abide by the software licenses and any non compliance is not by will. If there is some discrepancy please let us know in the issues and we will try and fix it up. -> If you follow the recommended build steps and do not statically link QT libraries on your own you are safe to use this library for commerical purposes (provided you abide by MIT License). ## Maintainers ✨ @@ -91,6 +97,7 @@ People maintaining this project. + ## Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): From 92eddb5bf0d656be451e5fdef8591f179d1e3ff5 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 21:13:05 +0200 Subject: [PATCH 037/891] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 45bed8d5cf..0ef105e072 100644 --- a/README.md +++ b/README.md @@ -76,9 +76,10 @@ NodeGUI is an open source project. If you like this project, please consider sup [![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E510AV9) -
or
+
or
Issues on NodeGui can be funded by anyone and the money will be distributed to respective contributors. + [![issuehunt](https://github.com/BoostIO/issuehunt-materials/raw/master/v1/issuehunt-button-v1.svg?sanitize=true)](https://issuehunt.io/r/nodegui/nodegui) ### LICENSE From b90876f778b31deb37d135f41ba33b633215acbf Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 21:25:49 +0200 Subject: [PATCH 038/891] Update README.md --- README.md | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0ef105e072..2e915e3c14 100644 --- a/README.md +++ b/README.md @@ -72,15 +72,12 @@ Looking to contribute? If you wish to implement a new widget/add more features a ## Funding -NodeGUI is an open source project. If you like this project, please consider support my work with Ko-fi. +NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work with Ko-fi. Alternatively, Issues on NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors. -[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/E1E510AV9) - -
or
- -Issues on NodeGui can be funded by anyone and the money will be distributed to respective contributors. - -[![issuehunt](https://github.com/BoostIO/issuehunt-materials/raw/master/v1/issuehunt-button-v1.svg?sanitize=true)](https://issuehunt.io/r/nodegui/nodegui) +

+ ko-fi     + issuehunt +

### LICENSE From 5fb64dece8d9a7644b3c0a59f83d3bb4d374316a Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 21:31:35 +0200 Subject: [PATCH 039/891] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2e915e3c14..60e77a050c 100644 --- a/README.md +++ b/README.md @@ -75,7 +75,7 @@ Looking to contribute? If you wish to implement a new widget/add more features a NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work with Ko-fi. Alternatively, Issues on NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors.

- ko-fi     +Buy Me a Coffee at ko-fi.com     issuehunt

From 5b7a06a19e50855b4976bcc7693e48ae620453a6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 5 Sep 2019 21:32:57 +0200 Subject: [PATCH 040/891] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 60e77a050c..803b81ef72 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ Looking to contribute? If you wish to implement a new widget/add more features a NodeGUI is an open source project and requires your support. If you like this project, please consider supporting my work with Ko-fi. Alternatively, Issues on NodeGui can be funded by anyone via Issuehunt and the amount will be distributed to respective contributors. -

+

Buy Me a Coffee at ko-fi.com     issuehunt

From 1ecd37622e2c4e65fc99946cc5dcfdd4c617d82f Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 6 Sep 2019 00:35:46 +0200 Subject: [PATCH 041/891] now automoc runs with qode qt env --- scripts/automoc.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/scripts/automoc.js b/scripts/automoc.js index 432c5b483d..1805095afb 100644 --- a/scripts/automoc.js +++ b/scripts/automoc.js @@ -1,6 +1,7 @@ const path = require("path"); const fs = require("fs"); const childProcess = require("child_process"); +const { qtHome } = require("@nodegui/qode"); const ROOT_DIR = path.resolve(__dirname, "../"); const MOC_AUTOGEN_DIR = path.resolve(ROOT_DIR, "src/cpp/autogen"); @@ -50,13 +51,22 @@ const main = () => { eachHeaderPath, includeFilePath ); - console.log(command); - childProcess.exec(command, {}, error => { - if (error) { - console.error(`exec error: ${error}`); - return; + const mocPath = path.resolve(process.env.QT_INSTALL_DIR || qtHome, "bin"); + childProcess.exec( + command, + { + env: { + ...process.env, + PATH: `${mocPath}${path.delimiter}${process.env.PATH}` + } + }, + error => { + if (error) { + console.error(`exec error: ${error}`); + return; + } } - }); + ); return outfilePath; }); generateMocGypiFile(outFiles); From bf1aecfa8b7eb80c7c68f7cf5b436e8b690215b7 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 7 Sep 2019 08:12:41 +0200 Subject: [PATCH 042/891] fixes all flex layout issues --- src/cpp/QtWidgets/QMainWindow/nmainwindow.h | 19 --------------- src/cpp/QtWidgets/QWidget/nwidget.h | 16 ++++++------- src/cpp/core/FlexLayout/flexlayout.cpp | 26 ++++++++++++++++----- src/cpp/core/FlexLayout/flexlayout.h | 1 + src/demo.ts | 7 +++++- 5 files changed, 35 insertions(+), 34 deletions(-) diff --git a/src/cpp/QtWidgets/QMainWindow/nmainwindow.h b/src/cpp/QtWidgets/QMainWindow/nmainwindow.h index dbcb5b9477..0d62b5500b 100644 --- a/src/cpp/QtWidgets/QMainWindow/nmainwindow.h +++ b/src/cpp/QtWidgets/QMainWindow/nmainwindow.h @@ -9,25 +9,6 @@ class NMainWindow: public QMainWindow, public NodeWidget NODEWIDGET_IMPLEMENTATIONS(QMainWindow) public: using QMainWindow::QMainWindow; //inherit all constructors of QMainWindow -private: - void calculateLayout(){ - YGDirection direction = YGNodeStyleGetDirection(this->getFlexNode()); - YGNodeCalculateLayout(this->getFlexNode(),width(),height(),direction); - } - bool eventFilter(QObject *object, QEvent *event) { // This will be installed on mainwidgetwrap - switch(event->type()) { - case QEvent::LayoutRequest: - case QEvent::ChildRemoved: { - calculateLayout(); break; - } - default: ; // do nothing - } - return QMainWindow::eventFilter(object, event); - } - void resizeEvent(QResizeEvent * event){ - calculateLayout(); - QMainWindow::resizeEvent(event); - } }; diff --git a/src/cpp/QtWidgets/QWidget/nwidget.h b/src/cpp/QtWidgets/QWidget/nwidget.h index e1d29cf7be..a538868af8 100644 --- a/src/cpp/QtWidgets/QWidget/nwidget.h +++ b/src/cpp/QtWidgets/QWidget/nwidget.h @@ -11,14 +11,14 @@ class NWidget: public QWidget, public NodeWidget public: using QWidget::QWidget; // https://doc.qt.io/qt-5/stylesheet-reference.html - void paintEvent(QPaintEvent *e) - { - QStyleOption opt; - opt.init(this); - QPainter p(this); - style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); - QWidget::paintEvent(e); - } + // void paintEvent(QPaintEvent *e) + // { + // QStyleOption opt; + // opt.init(this); + // QPainter p(this); + // style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + // QWidget::paintEvent(e); + // } }; diff --git a/src/cpp/core/FlexLayout/flexlayout.cpp b/src/cpp/core/FlexLayout/flexlayout.cpp index ad87c0dedb..e2fd8363e4 100644 --- a/src/cpp/core/FlexLayout/flexlayout.cpp +++ b/src/cpp/core/FlexLayout/flexlayout.cpp @@ -4,7 +4,7 @@ #include "spdlog/spdlog.h" #include "src/cpp/core/YogaWidget/yogawidget.h" -FlexLayout::NodeContext *FlexLayout::getNodeContext(YGNodeRef node) +FlexLayout::NodeContext* FlexLayout::getNodeContext(YGNodeRef node) { if(!node){ return nullptr; @@ -16,7 +16,6 @@ FlexLayout::NodeContext *FlexLayout::getNodeContext(YGNodeRef node) FlexLayout::FlexLayout(QWidget *parentWidget, YGNodeRef parentNode): QLayout(parentWidget) { - // spdlog::set_level(spdlog::level::off); this->node = parentNode; } @@ -58,7 +57,6 @@ QLayoutItem *FlexLayout::itemAt(int index) const YGNodeRef childNode = YGNodeGetChild(this->node, static_cast(index)); NodeContext *ctx = getNodeContext(childNode); if(!ctx){ - // spdlog::info("flexlayout: itemAt null context {}",index); return nullptr; } return ctx->item; @@ -91,14 +89,13 @@ void FlexLayout::addWidget(QWidget* childWidget, YGNodeRef childNode) spdlog::warn("Flex layout's parent yoga node not set yet. Set it using setFlexNode. Child widget will not be added to Flex Layout"); return; } - // spdlog::info("flexlayout: addWidget Object: {}",childWidget->metaObject()->className()); - uint count = YGNodeGetChildCount(this->node); YGNodeInsertChild(this->node,childNode, count); QLayoutItem* layoutItem = new QWidgetItem(childWidget); NodeContext* childContext = new NodeContext(layoutItem); YGNodeSetContext(childNode, static_cast(childContext)); QLayout::addWidget(childWidget); + this->invalidate(); } void FlexLayout::removeWidget(QWidget* childWidget, YGNodeRef childNode) @@ -114,6 +111,7 @@ void FlexLayout::removeWidget(QWidget* childWidget, YGNodeRef childNode) } YGNodeRemoveChild(this->node, childNode); QLayout::removeWidget(childWidget); + this->invalidate(); } void FlexLayout::insertChildBefore(QWidget* childWidget, YGNodeRef beforeChildNode, YGNodeRef childNode) @@ -135,14 +133,30 @@ void FlexLayout::insertChildBefore(QWidget* childWidget, YGNodeRef beforeChildNo NodeContext* childContext = new NodeContext(layoutItem); YGNodeSetContext(childNode, static_cast(childContext)); QLayout::addWidget(childWidget); + this->invalidate(); } + +YGNodeRef FlexLayout::getRootNode(YGNodeRef node){ + YGNodeRef parent = node->getOwner(); + if(!parent){ + return node; + }else { + return getRootNode(parent); + } +} + + void FlexLayout::setGeometry(const QRect &rect) { if(!this->node){ return; } - + YGNodeRef rootNode = getRootNode(this->node); + QWidget* parentWidget = this->parentWidget(); + QWidget* window = parentWidget->window(); + YGDirection direction = YGNodeStyleGetDirection(rootNode); + YGNodeCalculateLayout(rootNode,window->width(),window->height(),direction); uint count = YGNodeGetChildCount(this->node); for (uint i = 0; i < count; ++i) { diff --git a/src/cpp/core/FlexLayout/flexlayout.h b/src/cpp/core/FlexLayout/flexlayout.h index ab35ef8962..bdcaf46aee 100644 --- a/src/cpp/core/FlexLayout/flexlayout.h +++ b/src/cpp/core/FlexLayout/flexlayout.h @@ -24,6 +24,7 @@ class FlexLayout: public QLayout { private: YGNodeRef node; + YGNodeRef getRootNode(YGNodeRef node); public: struct NodeContext { diff --git a/src/demo.ts b/src/demo.ts index 161527dbca..13e88495f1 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -49,6 +49,11 @@ button.addEventListener("clicked", () => { const clipboard = QApplication.clipboard(); console.log("clipboard: ", clipboard.text(QClipboardMode.Clipboard)); clipboard.setText("yooooo", QClipboardMode.Clipboard); + if (rootView.layout) { + (rootView.layout as FlexLayout).removeWidget(dial); + rootView.layout.invalidate(); + // rootView.update(); + } }); const nodeguiLogo = new QIcon( @@ -111,7 +116,7 @@ win.setStyleSheet(` win.setWindowIcon(nodeguiLogo); win.setWindowTitle("NodeGUI Demo"); -win.resize(400, 400); +win.resize(400, 700); win.show(); win.setWindowState(WindowState.WindowActive); From 41d8ddbe23b33f66dde3e17c290d616f5d1cc44c Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 7 Sep 2019 10:49:19 +0200 Subject: [PATCH 043/891] Update issue templates --- .github/ISSUE_TEMPLATE/bug_report.md | 32 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 ++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..8d38c22551 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,32 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. Mac, Linux, Win] + - NodeGUI version + - OS Version + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..bbcbbe7d61 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. From e5a5425f0b216971715432a2a7d31bde227a98bf Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 7 Sep 2019 11:28:44 +0200 Subject: [PATCH 044/891] brings back nwidget --- src/cpp/QtWidgets/QWidget/nwidget.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/cpp/QtWidgets/QWidget/nwidget.h b/src/cpp/QtWidgets/QWidget/nwidget.h index a538868af8..e1d29cf7be 100644 --- a/src/cpp/QtWidgets/QWidget/nwidget.h +++ b/src/cpp/QtWidgets/QWidget/nwidget.h @@ -11,14 +11,14 @@ class NWidget: public QWidget, public NodeWidget public: using QWidget::QWidget; // https://doc.qt.io/qt-5/stylesheet-reference.html - // void paintEvent(QPaintEvent *e) - // { - // QStyleOption opt; - // opt.init(this); - // QPainter p(this); - // style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); - // QWidget::paintEvent(e); - // } + void paintEvent(QPaintEvent *e) + { + QStyleOption opt; + opt.init(this); + QPainter p(this); + style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); + QWidget::paintEvent(e); + } }; From 317bca6c2ec1c98fa019855f4f340aecfe5d5021 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 7 Sep 2019 19:12:17 +0200 Subject: [PATCH 045/891] cleanup --- src/demo.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/demo.ts b/src/demo.ts index 13e88495f1..aa79bd563c 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -51,8 +51,6 @@ button.addEventListener("clicked", () => { clipboard.setText("yooooo", QClipboardMode.Clipboard); if (rootView.layout) { (rootView.layout as FlexLayout).removeWidget(dial); - rootView.layout.invalidate(); - // rootView.update(); } }); From 620a85e417e35db12d95f2abd4eb9dcaa28ed58a Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 7 Sep 2019 21:59:52 +0200 Subject: [PATCH 046/891] Bumps version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 728fd4be09..b5cbdde3c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.7", + "version": "0.1.8", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b9696d8902..d6987f3d64 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.7", + "version": "0.1.8", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", From 4bfb00d66409c1f678707feca5e5dd79ad6851bf Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 8 Sep 2019 08:19:28 +0200 Subject: [PATCH 047/891] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 803b81ef72..3138f748f4 100644 --- a/README.md +++ b/README.md @@ -79,7 +79,11 @@ NodeGUI is an open source project and requires your support. If you like this pr issuehunt

-### LICENSE +## THANKS + +- [Logo](https://github.com/nodegui/nodegui/blob/master/extras/legal/logo/thanks.md) Thanks to Vishwas Shetty from the Noun Project. + +## LICENSE MIT From ad969736ec9b3a00a54159394d5fec02975e12d3 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 8 Sep 2019 08:20:26 +0200 Subject: [PATCH 048/891] Update thanks.md --- extras/legal/logo/thanks.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/legal/logo/thanks.md b/extras/legal/logo/thanks.md index dd7ccacf7c..16b9c9a736 100644 --- a/extras/legal/logo/thanks.md +++ b/extras/legal/logo/thanks.md @@ -1,6 +1,6 @@ # Logo -logo +logo Special thanks to the Noun Project for the logo. From 23ca647bcf20bdd4305ea8db45ac70534fb0b87b Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 8 Sep 2019 08:22:54 +0200 Subject: [PATCH 049/891] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3138f748f4..72f6d34a06 100644 --- a/README.md +++ b/README.md @@ -79,11 +79,11 @@ NodeGUI is an open source project and requires your support. If you like this pr issuehunt

-## THANKS +## Special Thanks -- [Logo](https://github.com/nodegui/nodegui/blob/master/extras/legal/logo/thanks.md) Thanks to Vishwas Shetty from the Noun Project. +- [Logo: Thanks to Vishwas Shetty from the Noun Project.](https://github.com/nodegui/nodegui/blob/master/extras/legal/logo/thanks.md) -## LICENSE +## License MIT From 8924a26c86a485645e6e496acf02072a8af28ab8 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 8 Sep 2019 22:28:54 +0200 Subject: [PATCH 050/891] upgrade node-gyp to v5.0.3 --- package-lock.json | 40 ++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 15 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5cbdde3c9..fc14e1d8a5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -975,21 +975,28 @@ "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==" }, "node-gyp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-4.0.0.tgz", - "integrity": "sha512-2XiryJ8sICNo6ej8d0idXDEMKfVfFK7kekGCtJAuelGsYHQxhj13KTf95swTCN2dZ/4lTfZ84Fu31jqJEEgjWA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz", + "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==", "requires": { + "env-paths": "^1.0.0", "glob": "^7.0.3", "graceful-fs": "^4.1.2", "mkdirp": "^0.5.0", "nopt": "2 || 3", "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", "request": "^2.87.0", "rimraf": "2", "semver": "~5.3.0", "tar": "^4.4.8", "which": "1" + }, + "dependencies": { + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" + } } }, "nopt": { @@ -1054,25 +1061,6 @@ "wrappy": "1" } }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -1163,9 +1151,9 @@ "dev": true }, "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.1.tgz", + "integrity": "sha512-2KLd5fKOdAfShtY2d/8XDWVRnmp3zp40Qt6ge2zBPFARLXOGUf2fHD5eg+TV/5oxBtQKVhjUaKFsAaE4HnwfSA==" }, "pump": { "version": "3.0.0", diff --git a/package.json b/package.json index d6987f3d64..4830d142d4 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "@nodegui/qode": "^1.0.4", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", - "node-gyp": "^4.0.0", + "node-gyp": "^5.0.3", "postcss-nodegui-autoprefixer": "0.0.7" }, "devDependencies": { From 07a2da0278267cb81882f4c8e02a60cb9f39f648 Mon Sep 17 00:00:00 2001 From: soonoo Date: Mon, 9 Sep 2019 18:44:01 +0900 Subject: [PATCH 051/891] add setPlaceholderText for QPlainTextEdit --- .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp | 11 ++++++++++- .../QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h | 1 + src/lib/QtWidgets/QPlainTextEdit/index.ts | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index c8b7f6af83..93645f6b5a 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -12,6 +12,7 @@ Napi::Object QPlainTextEditWrap::init(Napi::Env env, Napi::Object exports) { char CLASSNAME[] = "QPlainTextEdit"; Napi::Function func = DefineClass(env, CLASSNAME, { InstanceMethod("setPlainText",&QPlainTextEditWrap::setPlainText), + InstanceMethod("setPlaceholderText",&QPlainTextEditWrap::setPlaceholderText), InstanceMethod("toPlainText",&QPlainTextEditWrap::toPlainText), InstanceMethod("setReadOnly", &QPlainTextEditWrap::setReadOnly), InstanceMethod("clear", &QPlainTextEditWrap::clear), @@ -60,6 +61,14 @@ Napi::Value QPlainTextEditWrap::setPlainText(const Napi::CallbackInfo& info){ return env.Null(); } +Napi::Value QPlainTextEditWrap::setPlaceholderText(const Napi::CallbackInfo& info){ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + Napi::String text = info[0].As(); + this->instance->setPlaceholderText(text.Utf8Value().c_str()); + return env.Null(); +} + Napi::Value QPlainTextEditWrap::setReadOnly(const Napi::CallbackInfo &info) { Napi::Env env = info.Env(); @@ -110,4 +119,4 @@ Napi::Value QPlainTextEditWrap::lineWrapMode(const Napi::CallbackInfo &info){ Napi::HandleScope scope(env); int value = static_cast(this->instance->lineWrapMode()); return Napi::Number::From(env, value); -} \ No newline at end of file +} diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index 0081d327f3..a451c83183 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -20,6 +20,7 @@ class QPlainTextEditWrap : public Napi::ObjectWrap{ QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION Napi::Value setPlainText(const Napi::CallbackInfo& info); + Napi::Value setPlaceholderText(const Napi::CallbackInfo& info); Napi::Value toPlainText(const Napi::CallbackInfo &info); Napi::Value setReadOnly(const Napi::CallbackInfo &info); Napi::Value clear(const Napi::CallbackInfo &info); diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index a7d8c288c3..007cdc515f 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -23,6 +23,7 @@ export enum LineWrapMode { } export class QPlainTextEdit extends QAbstractScrollArea { native: NativeElement; + placeholderText?: string; constructor(parent?: NodeWidget) { let native; if (parent) { @@ -35,6 +36,7 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.parent = parent; // bind member functions this.setPlainText.bind(this); + this.setPlaceholderText.bind(this); this.toPlainText.bind(this); this.setReadOnly.bind(this); this.clear.bind(this); @@ -47,6 +49,10 @@ export class QPlainTextEdit extends QAbstractScrollArea { // react:✓ this.native.setPlainText(`${text}`); } + setPlaceholderText(text: string) { + this.placeholderText = text; + this.native.setPlaceholderText(text); + } toPlainText(): string { // react:✓ return this.native.toPlainText(); From 90fe3ad33c3e11e32ae351d1bfec964b065a8673 Mon Sep 17 00:00:00 2001 From: soonoo Date: Mon, 9 Sep 2019 18:46:29 +0900 Subject: [PATCH 052/891] add docs for QPlainTextEdit's setPlaceholderText method --- docs/api/QPlainTextEdit.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/api/QPlainTextEdit.md b/docs/api/QPlainTextEdit.md index ad38ae4884..688bc894aa 100644 --- a/docs/api/QPlainTextEdit.md +++ b/docs/api/QPlainTextEdit.md @@ -28,6 +28,10 @@ QPlainTextEdit can access all the static methods defined in [NodeWidget](api/Nod QPlainTextEdit can access all the instance properties defined in [NodeWidget](api/NodeWidget.md). +#### `plainTextEdit.placeholderText` + +The placeholder text set on the plainTextEdit. + ### Instance Methods QPlainTextEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). @@ -38,6 +42,12 @@ Sets the given text to the plainTextEdit. It calls the native method [QPlainText - `text` string +#### `plainTextEdit.setPlaceholderText(text)` + +Sets the given text to the plainTextEdit's placeholder. + +- `text` string + #### `plainTextEdit.toPlainText()` Returns the text of the text edit as plain text. [QPlainTextEdit: toPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText). From 0ffddcba161c8f9b0de381547b4d1316cf069757 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2019 16:20:53 +0000 Subject: [PATCH 053/891] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 72f6d34a06..a189210cf2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NodeGUI [![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) -[![All Contributors](https://img.shields.io/badge/all_contributors-9-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 @@ -119,6 +119,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Átila Camurça Alves
Átila Camurça Alves

📖 James Hibbard
James Hibbard

💻 + Soonwoo Hong
Soonwoo Hong

💻 From ad8343e0519572f2bb6f342605b3ad1043fb6a7c Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Mon, 9 Sep 2019 16:20:54 +0000 Subject: [PATCH 054/891] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 0fba73f12d..560c8737bf 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -85,6 +85,15 @@ "contributions": [ "code" ] + }, + { + "login": "soonoo", + "name": "Soonwoo Hong", + "avatar_url": "https://avatars2.githubusercontent.com/u/5436405?v=4", + "profile": "https://github.com/soonoo", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From 4499bf05a7a8be460321e87fade3b6b2dd27436a Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 10 Sep 2019 00:06:08 +0200 Subject: [PATCH 055/891] Adds take widget for scrollarea and adds geometry getter for widgets --- src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp | 8 ++++++++ src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h | 1 + src/cpp/QtWidgets/QWidget/qwidget_macro.h | 12 ++++++++++++ src/lib/QtWidgets/QScrollArea/index.ts | 13 ++++++++++++- src/lib/QtWidgets/QWidget/index.ts | 11 ++++++++++- 5 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp index 5e7d330cad..2f6e5f9107 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp @@ -46,4 +46,12 @@ Napi::Value QScrollAreaWrap::setWidget(const Napi::CallbackInfo& info) { QWidgetWrap* contentWidgetWrap = Napi::ObjectWrap::Unwrap(contentWidget); this->instance->setWidget(contentWidgetWrap->getInternalInstance()); return env.Null(); +} + +Napi::Value QScrollAreaWrap::takeWidget(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + this->instance->takeWidget(); + // We will not return the value here since we are doing it in js side anyway + return env.Null(); } \ No newline at end of file diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h index a263962dc3..26df980f92 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -17,6 +17,7 @@ class QScrollAreaWrap : public Napi::ObjectWrap{ static Napi::FunctionReference constructor; //wrapped methods Napi::Value setWidget(const Napi::CallbackInfo &info); + Napi::Value takeWidget(const Napi::CallbackInfo &info); QABSTRACTSCROLLAREA_WRAPPED_METHODS_DECLARATION }; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/QtWidgets/QWidget/qwidget_macro.h index f0a8a3729a..7e3ae6d7bb 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_macro.h @@ -154,6 +154,17 @@ Napi::Value setGeometry(const Napi::CallbackInfo& info){ \ this->instance->setGeometry(x, y, width, height); \ return env.Null(); \ } \ +Napi::Value geometry(const Napi::CallbackInfo& info){ \ + Napi::Env env = info.Env(); \ + Napi::HandleScope scope(env); \ + QRect geometry = this->instance->geometry(); \ + Napi::Object geometryObj = Napi::Object::New(env); \ + geometryObj.Set("width", geometry.width()); \ + geometryObj.Set("height", geometry.height()); \ + geometryObj.Set("x", geometry.x()); \ + geometryObj.Set("y", geometry.y()); \ + return geometryObj; \ +} \ Napi::Value setMaximumSize(const Napi::CallbackInfo& info){ \ Napi::Env env = info.Env(); \ Napi::HandleScope scope(env); \ @@ -263,6 +274,7 @@ Napi::Value setWindowFlag(const Napi::CallbackInfo& info){ \ InstanceMethod("setEnabled",&WidgetWrapName::setEnabled), \ InstanceMethod("setFixedSize",&WidgetWrapName::setFixedSize), \ InstanceMethod("setGeometry",&WidgetWrapName::setGeometry), \ + InstanceMethod("geometry",&WidgetWrapName::geometry), \ InstanceMethod("setMaximumSize",&WidgetWrapName::setMaximumSize), \ InstanceMethod("setMinimumSize",&WidgetWrapName::setMinimumSize), \ InstanceMethod("repaint",&WidgetWrapName::repaint), \ diff --git a/src/lib/QtWidgets/QScrollArea/index.ts b/src/lib/QtWidgets/QScrollArea/index.ts index 1324f1cafd..8ad3090cca 100644 --- a/src/lib/QtWidgets/QScrollArea/index.ts +++ b/src/lib/QtWidgets/QScrollArea/index.ts @@ -9,7 +9,7 @@ export const QScrollAreaEvents = Object.freeze({ }); export class QScrollArea extends QAbstractScrollArea { native: NativeElement; - contentWidget?: NodeWidget; + contentWidget?: NodeWidget | null; constructor(parent?: NodeWidget) { let native; if (parent) { @@ -21,9 +21,20 @@ export class QScrollArea extends QAbstractScrollArea { this.native = native; this.parent = parent; // bind member functions + this.setWidget.bind(this); + this.takeWidget.bind(this); } setWidget(widget: NodeWidget) { this.contentWidget = widget; this.native.setWidget(widget.native); } + takeWidget(): NodeWidget | null { + const contentWidget = this.contentWidget; + this.contentWidget = null; + if (contentWidget) { + this.native.takeWidget(); + return contentWidget; + } + return null; + } } diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 7349cea408..f4a75c2f94 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -45,9 +45,12 @@ export abstract class NodeWidget extends EventWidget { await applyStyleSheet(this, preparedSheet); }; setGeometry = (x: number, y: number, w: number, h: number) => { - // react:✓, //TODO:getter + // react:✓ this.native.setGeometry(x, y, w, h); }; + geometry = (): Rect => { + return this.native.geometry(); + }; setObjectName = (objectName: string) => { // react:✓ this.native.setObjectName(objectName); @@ -148,6 +151,12 @@ export abstract class NodeWidget extends EventWidget { }; } +type Rect = { + x: number; + y: number; + width: number; + height: number; +}; type arg = NodeWidget | NativeElement; export class QWidget extends NodeWidget { From 4cc0ab1eef37f0c5cc4cad47e6bdb36caa5f819d Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 11 Sep 2019 22:30:10 +0200 Subject: [PATCH 056/891] Adds bootstrap example --- src/demo.ts | 1 + src/index.ts | 2 ++ src/lib/core/Style/StyleSheet.ts | 6 ++---- src/lib/core/bootstrap.ts | 26 ++++++++++++++++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 src/lib/core/bootstrap.ts diff --git a/src/demo.ts b/src/demo.ts index aa79bd563c..6d548407af 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -52,6 +52,7 @@ button.addEventListener("clicked", () => { if (rootView.layout) { (rootView.layout as FlexLayout).removeWidget(dial); } + label.setInlineStyle("color:blue;"); }); const nodeguiLogo = new QIcon( diff --git a/src/index.ts b/src/index.ts index 2dba519f14..7acd8a56f5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,3 +1,5 @@ +// bootstrap +import "./lib/core/bootstrap"; // Enums: export * from "./lib/QtEnums"; // Gui: diff --git a/src/lib/core/Style/StyleSheet.ts b/src/lib/core/Style/StyleSheet.ts index 17ee601680..af070849eb 100644 --- a/src/lib/core/Style/StyleSheet.ts +++ b/src/lib/core/Style/StyleSheet.ts @@ -19,7 +19,7 @@ export const prepareInlineStyleSheet = async ( rawStyle: string ) => { const inlineStyle = await StyleSheet.create(rawStyle); - // Make sure to not calculate ObjectName is the same pass of event loop as other props (incase of react) since the order will matter in that case + // Make sure to not calculate ObjectName in the same pass of event loop as other props (incase of react) since the order will matter in that case // So doing it in multiple passes of event loop allows objectName to be set before using it. The above await solves it. let cssId = widget.objectName(); if (!cssId) { @@ -38,7 +38,5 @@ export const applyStyleSheet = async ( styleSheet: string ) => { widget.native.setStyleSheet(styleSheet); - setTimeout(() => { - widget.layout ? widget.layout.update() : widget.update(); - }, 20); + widget.layout ? widget.layout.update() : widget.update(); }; diff --git a/src/lib/core/bootstrap.ts b/src/lib/core/bootstrap.ts new file mode 100644 index 0000000000..6ce6a9637c --- /dev/null +++ b/src/lib/core/bootstrap.ts @@ -0,0 +1,26 @@ +/* + From: https://github.com/yue/yode/blob/master/src/bootstrap.js + setImmediate and process.nextTick makes use of uv_check and uv_prepare to + run the callbacks, however since we only run uv loop on requests, the + callbacks wouldn't be called until something else activated the uv loop, + which would delay the callbacks for arbitrary long time. So we should + initiatively activate the uv loop once setImmediate and process.nextTick is + called. + This is required inorder to make the timers work nicely due to merger of event loops +*/ +function wrapWithActivateUvLoop(func: any) { + return function() { + (process as any).activateUvLoop(); + //@ts-ignore + return func.apply(this, arguments); + }; +} + +const main = () => { + process.nextTick = wrapWithActivateUvLoop(process.nextTick); + global.setImmediate = wrapWithActivateUvLoop(global.setImmediate); + global.setTimeout = wrapWithActivateUvLoop(global.setTimeout); + global.setInterval = wrapWithActivateUvLoop(global.setInterval); +}; + +main(); From bc84346bf56f0bb8a7ca0548e5679e56d8febcf2 Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 11 Sep 2019 22:38:59 +0200 Subject: [PATCH 057/891] bumps nodegui and qode version --- package-lock.json | 8 ++++---- package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc14e1d8a5..16d2aa1c8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,13 +1,13 @@ { "name": "@nodegui/nodegui", - "version": "0.1.8", + "version": "0.1.9", "lockfileVersion": 1, "requires": true, "dependencies": { "@nodegui/qode": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.4.tgz", - "integrity": "sha512-CEEAI1mJ+4eH6G2OlNtn75vUxTBw/06IcEkXlwkDMI/mU5iE52WHToybYba77gOeoxrGx3uIwkfWRV2LRVyp/Q==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@nodegui/qode/-/qode-1.0.5.tgz", + "integrity": "sha512-JKb4JcC03VCdodmiL35VfznsCKHpiKOYbtgf9+KTHhH5p7IXvr+0k/LIq112T6Rpxd5zXa1pbsnfa2F8ReyWEg==", "requires": { "env-paths": "^2.2.0", "extract-zip": "^1.6.7", diff --git a/package.json b/package.json index 4830d142d4..2a9dc432fd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.8", + "version": "0.1.9", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -26,7 +26,7 @@ "docs": "serve docs" }, "dependencies": { - "@nodegui/qode": "^1.0.4", + "@nodegui/qode": "^1.0.5", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", "node-gyp": "^5.0.3", From e372f750bd9a33b378d99a9ebadc4b2d4f19b71d Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 11 Sep 2019 23:05:54 +0200 Subject: [PATCH 058/891] updated annotations --- src/lib/QtWidgets/QMainWindow/index.ts | 1 + src/lib/QtWidgets/QPlainTextEdit/index.ts | 1 + src/lib/QtWidgets/QPushButton/index.ts | 6 +++--- src/lib/QtWidgets/QScrollArea/index.ts | 2 ++ src/lib/QtWidgets/QWidget/index.ts | 1 + 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/lib/QtWidgets/QMainWindow/index.ts b/src/lib/QtWidgets/QMainWindow/index.ts index fdc9b889f5..34e36d51f1 100644 --- a/src/lib/QtWidgets/QMainWindow/index.ts +++ b/src/lib/QtWidgets/QMainWindow/index.ts @@ -32,6 +32,7 @@ export class QMainWindow extends NodeWidget { }; } setCentralWidget(widget: NodeWidget) { + // react:✓ this.native.setCentralWidget(widget.native, widget.getFlexNode()); this.centralWidget = widget; } diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 007cdc515f..65f2d9e571 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -50,6 +50,7 @@ export class QPlainTextEdit extends QAbstractScrollArea { this.native.setPlainText(`${text}`); } setPlaceholderText(text: string) { + // react:✓, //TODO:getter this.placeholderText = text; this.native.setPlaceholderText(text); } diff --git a/src/lib/QtWidgets/QPushButton/index.ts b/src/lib/QtWidgets/QPushButton/index.ts index 4145c70d9f..926aeeabd7 100644 --- a/src/lib/QtWidgets/QPushButton/index.ts +++ b/src/lib/QtWidgets/QPushButton/index.ts @@ -28,16 +28,16 @@ export class QPushButton extends NodeWidget { this.setText.bind(this); this.setFlat.bind(this); } - setText(text: string | number) { + // react:✓, //TODO:getter this.native.setText(`${text}`); } - setFlat(isFlat: boolean) { + // react:✓, //TODO:getter this.native.setFlat(isFlat); } - setIcon(icon: QIcon) { + // react:✓, //TODO:getter this.native.setIcon(icon.native); } } diff --git a/src/lib/QtWidgets/QScrollArea/index.ts b/src/lib/QtWidgets/QScrollArea/index.ts index 8ad3090cca..0859b366ce 100644 --- a/src/lib/QtWidgets/QScrollArea/index.ts +++ b/src/lib/QtWidgets/QScrollArea/index.ts @@ -25,10 +25,12 @@ export class QScrollArea extends QAbstractScrollArea { this.takeWidget.bind(this); } setWidget(widget: NodeWidget) { + // react:✓, //TODO:getter this.contentWidget = widget; this.native.setWidget(widget.native); } takeWidget(): NodeWidget | null { + // react:✓ const contentWidget = this.contentWidget; this.contentWidget = null; if (contentWidget) { diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index f4a75c2f94..48caf7163d 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -49,6 +49,7 @@ export abstract class NodeWidget extends EventWidget { this.native.setGeometry(x, y, w, h); }; geometry = (): Rect => { + // react:✓ return this.native.geometry(); }; setObjectName = (objectName: string) => { From 0444c087e467a1c4fdd6d239e40e8d256727af65 Mon Sep 17 00:00:00 2001 From: Roy Sommer Date: Thu, 12 Sep 2019 11:47:40 +0300 Subject: [PATCH 059/891] added support for QCheckBoxEvents.toggled --- src/cpp/QtWidgets/QCheckBox/ncheckbox.h | 9 +++++++++ src/demo.ts | 4 ++++ src/lib/QtWidgets/QCheckBox/index.ts | 3 ++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cpp/QtWidgets/QCheckBox/ncheckbox.h b/src/cpp/QtWidgets/QCheckBox/ncheckbox.h index e9e660c5be..8ed6054d58 100644 --- a/src/cpp/QtWidgets/QCheckBox/ncheckbox.h +++ b/src/cpp/QtWidgets/QCheckBox/ncheckbox.h @@ -2,12 +2,21 @@ #include #include "src/cpp/core/NodeWidget/nodewidget.h" +#include "napi.h" class NCheckBox: public QCheckBox, public NodeWidget { NODEWIDGET_IMPLEMENTATIONS(QCheckBox) public: using QCheckBox::QCheckBox; //inherit all constructors of QCheckBox + + void connectWidgetSignalsToEventEmitter() { + QObject::connect(this, &QCheckBox::toggled, [=](bool checked) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "toggled"), Napi::Value::From(env, checked) }); + }); + } }; diff --git a/src/demo.ts b/src/demo.ts index 6d548407af..7fdfec7f69 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -19,6 +19,7 @@ import { QApplication, QClipboardMode } from "./index"; +import { QCheckBoxEvents } from './lib/QtWidgets/QCheckBox'; const path = require("path"); @@ -33,6 +34,9 @@ const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); checkbox.setObjectName("check"); checkbox.setChecked(true); +checkbox.addEventListener(QCheckBoxEvents.toggled, () => { + console.log('checkbox was toggled!'); +}) const dial = new QDial(); checkbox.setObjectName("dial"); diff --git a/src/lib/QtWidgets/QCheckBox/index.ts b/src/lib/QtWidgets/QCheckBox/index.ts index 7d739c06da..29b6b8127f 100644 --- a/src/lib/QtWidgets/QCheckBox/index.ts +++ b/src/lib/QtWidgets/QCheckBox/index.ts @@ -4,7 +4,8 @@ import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; export const QCheckBoxEvents = Object.freeze({ - ...BaseWidgetEvents + ...BaseWidgetEvents, + toggled: "toggled" }); export class QCheckBox extends NodeWidget { native: NativeElement; From 34753e7c80937cc664d0eeac79fc8b0338f1b7b6 Mon Sep 17 00:00:00 2001 From: Roy Sommer Date: Thu, 12 Sep 2019 11:51:40 +0300 Subject: [PATCH 060/891] updated imports in demo --- src/demo.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/demo.ts b/src/demo.ts index 7fdfec7f69..63d15d4d36 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -17,9 +17,9 @@ import { WindowState, QTextOptionWrapMode, QApplication, - QClipboardMode + QClipboardMode, + QCheckBoxEvents } from "./index"; -import { QCheckBoxEvents } from './lib/QtWidgets/QCheckBox'; const path = require("path"); From 4c4f272d0e520aed5bdd214f11b5d38edb058824 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 11:59:27 +0200 Subject: [PATCH 061/891] Create CNAME --- docs/CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000000..334ded21ee --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +docs.nodegui.org \ No newline at end of file From 49ad0f765fb163cfc28d4a362c1fb9014f6b2b4f Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:29:01 +0200 Subject: [PATCH 062/891] Update CNAME --- docs/CNAME | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CNAME b/docs/CNAME index 334ded21ee..063ef9d7d4 100644 --- a/docs/CNAME +++ b/docs/CNAME @@ -1 +1 @@ -docs.nodegui.org \ No newline at end of file +nodegui.org \ No newline at end of file From 348fb4fcf0207a8a0488c4c6ee433f9f117b247a Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:35:20 +0200 Subject: [PATCH 063/891] Delete CNAME --- docs/CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 063ef9d7d4..0000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -nodegui.org \ No newline at end of file From c22c95a9639515c37ae314f33283f1a38b6afce3 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:35:26 +0200 Subject: [PATCH 064/891] Create CNAME --- docs/CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000000..063ef9d7d4 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +nodegui.org \ No newline at end of file From 2e7f96099de6561476c551f6f16b5ce710a5dd27 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:39:16 +0200 Subject: [PATCH 065/891] Delete CNAME --- docs/CNAME | 1 - 1 file changed, 1 deletion(-) delete mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 063ef9d7d4..0000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -nodegui.org \ No newline at end of file From ec45eac7b60172d6b053087562ae97ec58d85729 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:39:23 +0200 Subject: [PATCH 066/891] Create CNAME --- docs/CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/CNAME diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000000..063ef9d7d4 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +nodegui.org \ No newline at end of file From 494c965e8f5878c6d0a95206ffbc363b267ac480 Mon Sep 17 00:00:00 2001 From: Atul R Date: Thu, 12 Sep 2019 12:42:00 +0200 Subject: [PATCH 067/891] Update CNAME --- docs/CNAME | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/CNAME b/docs/CNAME index 063ef9d7d4..334ded21ee 100644 --- a/docs/CNAME +++ b/docs/CNAME @@ -1 +1 @@ -nodegui.org \ No newline at end of file +docs.nodegui.org \ No newline at end of file From 57dc25f9aa60d9567df1942c718b5a527c89ecae Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2019 20:58:47 +0000 Subject: [PATCH 068/891] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a189210cf2..86c4d1a0ac 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NodeGUI [![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) -[![All Contributors](https://img.shields.io/badge/all_contributors-10-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-11-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 @@ -120,6 +120,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Átila Camurça Alves
Átila Camurça Alves

📖 James Hibbard
James Hibbard

💻 Soonwoo Hong
Soonwoo Hong

💻 + Roy Sommer
Roy Sommer

💻 From 176daf7c6c9de2f0e4c1bcb7289efd274f2063ee Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2019 20:58:48 +0000 Subject: [PATCH 069/891] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 560c8737bf..f1f7274406 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -94,6 +94,15 @@ "contributions": [ "code" ] + }, + { + "login": "illBeRoy", + "name": "Roy Sommer", + "avatar_url": "https://avatars2.githubusercontent.com/u/6681893?v=4", + "profile": "https://github.com/illBeRoy", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From ab965947465bfdc608499285860e61b53a86359f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2019 20:59:27 +0000 Subject: [PATCH 070/891] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 86c4d1a0ac..1c9a99f0fb 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NodeGUI [![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) -[![All Contributors](https://img.shields.io/badge/all_contributors-11-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 @@ -121,6 +121,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d James Hibbard
James Hibbard

💻 Soonwoo Hong
Soonwoo Hong

💻 Roy Sommer
Roy Sommer

💻 + Paulo Coghi
Paulo Coghi

🤔 From 10fe87e1af14d115a5c9931cfa37cabf09f48da8 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 13 Sep 2019 20:59:28 +0000 Subject: [PATCH 071/891] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index f1f7274406..801d7b0b99 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -103,6 +103,15 @@ "contributions": [ "code" ] + }, + { + "login": "paulocoghi", + "name": "Paulo Coghi", + "avatar_url": "https://avatars1.githubusercontent.com/u/378397?v=4", + "profile": "https://github.com/paulocoghi", + "contributions": [ + "ideas" + ] } ], "contributorsPerLine": 7, From ec82a760edf56ac0677bacd39148cf04fceee52b Mon Sep 17 00:00:00 2001 From: Balthild Date: Tue, 17 Sep 2019 11:34:08 +0800 Subject: [PATCH 072/891] Converting QIcon ot QPixmap --- src/cpp/QtGui/QIcon/qicon_wrap.cpp | 29 +++++++++++++++++++++++++++++ src/cpp/QtGui/QIcon/qicon_wrap.h | 1 + src/lib/QtGui/QIcon/index.ts | 20 ++++++++++++++++++++ 3 files changed, 50 insertions(+) diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/QtGui/QIcon/qicon_wrap.cpp index 218a744de7..10e7d614e5 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/QtGui/QIcon/qicon_wrap.cpp @@ -1,4 +1,5 @@ #include "qicon_wrap.h" +#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" #include "src/cpp/Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" @@ -9,6 +10,7 @@ Napi::Object QIconWrap::init(Napi::Env env, Napi::Object exports) Napi::HandleScope scope(env); char CLASSNAME[] = "QIcon"; Napi::Function func = DefineClass(env, CLASSNAME, { + InstanceMethod("pixmap", &QIconWrap::pixmap), COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE }); constructor = Napi::Persistent(func); @@ -45,3 +47,30 @@ QIcon *QIconWrap::getInternalInstance() { return this->instance.get(); } + +Napi::Value QIconWrap::pixmap(const Napi::CallbackInfo& info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Number widthValue = info[0].As(); + Napi::Number heightValue = info[1].As(); + int width = widthValue.Int32Value(); + int height = heightValue.Int32Value(); + + QIcon::Mode mode = QIcon::Normal; + if (info.Length() > 2){ + int modeInt = info[2].As().Int32Value(); + mode = static_cast(modeInt); + } + + QIcon::State state = QIcon::Off; + if (info.Length() > 3){ + int stateInt = info[3].As().Int32Value(); + state = static_cast(stateInt); + } + + QPixmap* pixmap = new QPixmap(this->instance->pixmap(width, height, mode)); + auto instance = QPixmapWrap::constructor.New({ Napi::External::New(env, pixmap) }); + return instance; +} diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.h b/src/cpp/QtGui/QIcon/qicon_wrap.h index a4e9dd9539..549a0e60cd 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.h +++ b/src/cpp/QtGui/QIcon/qicon_wrap.h @@ -17,4 +17,5 @@ class QIconWrap : public Napi::ObjectWrap ~QIconWrap(); QIcon *getInternalInstance(); // Wrapped methods + Napi::Value pixmap(const Napi::CallbackInfo& info); }; diff --git a/src/lib/QtGui/QIcon/index.ts b/src/lib/QtGui/QIcon/index.ts index 70c1de6a20..4405ec5ddb 100644 --- a/src/lib/QtGui/QIcon/index.ts +++ b/src/lib/QtGui/QIcon/index.ts @@ -1,5 +1,9 @@ import addon from "../../core/addon"; import { Component, NativeElement } from "../../core/Component"; +import { QPixmap } from "../../QtGui/QPixmap"; + +export enum QIconMode { Normal, Disabled, Active, Selected } +export enum QIconState { Off, On } type arg = string | NativeElement; export class QIcon extends Component { @@ -13,4 +17,20 @@ export class QIcon extends Component { this.native = new addon.QIcon(); } } + pixmap = ( + width: number, + height: number, + mode?: QIconMode, + state?: QIconState, + ): QPixmap => { + let nativePixmap; + if (mode && state) { + nativePixmap = this.native.pixmap(width, height, mode, state); + } else if (mode) { + nativePixmap = this.native.pixmap(width, height, mode); + } else { + nativePixmap = this.native.pixmap(width, height); + } + return new QPixmap(nativePixmap); + }; } From ec5c560ca1396859f440f0cc009d0e808d891b2a Mon Sep 17 00:00:00 2001 From: Balthild Date: Tue, 17 Sep 2019 11:37:36 +0800 Subject: [PATCH 073/891] Fix code format --- src/cpp/QtGui/QIcon/qicon_wrap.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/QtGui/QIcon/qicon_wrap.cpp index 10e7d614e5..d2a7642c5e 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/QtGui/QIcon/qicon_wrap.cpp @@ -59,15 +59,15 @@ Napi::Value QIconWrap::pixmap(const Napi::CallbackInfo& info) int height = heightValue.Int32Value(); QIcon::Mode mode = QIcon::Normal; - if (info.Length() > 2){ - int modeInt = info[2].As().Int32Value(); - mode = static_cast(modeInt); + if (info.Length() > 2) { + int modeInt = info[2].As().Int32Value(); + mode = static_cast(modeInt); } QIcon::State state = QIcon::Off; - if (info.Length() > 3){ - int stateInt = info[3].As().Int32Value(); - state = static_cast(stateInt); + if (info.Length() > 3) { + int stateInt = info[3].As().Int32Value(); + state = static_cast(stateInt); } QPixmap* pixmap = new QPixmap(this->instance->pixmap(width, height, mode)); From fbb2b12d85aba4c43775b8cc6cedcb36a2b43276 Mon Sep 17 00:00:00 2001 From: Balthild Date: Tue, 17 Sep 2019 14:58:16 +0800 Subject: [PATCH 074/891] Fix mode arg --- src/cpp/QtGui/QIcon/qicon_wrap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/QtGui/QIcon/qicon_wrap.cpp index d2a7642c5e..5185c67689 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/QtGui/QIcon/qicon_wrap.cpp @@ -70,7 +70,7 @@ Napi::Value QIconWrap::pixmap(const Napi::CallbackInfo& info) state = static_cast(stateInt); } - QPixmap* pixmap = new QPixmap(this->instance->pixmap(width, height, mode)); + QPixmap* pixmap = new QPixmap(this->instance->pixmap(width, height, mode, state)); auto instance = QPixmapWrap::constructor.New({ Napi::External::New(env, pixmap) }); return instance; } From 2795a5e9c46a9119b029d887349387740d26b40b Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2019 21:04:39 +0000 Subject: [PATCH 075/891] docs: update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1c9a99f0fb..0ca4bb90e9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # NodeGUI [![Join the NodeGUI community on Spectrum](https://withspectrum.github.io/badge/badge.svg)](https://spectrum.chat/nodegui) -[![All Contributors](https://img.shields.io/badge/all_contributors-12-orange.svg?style=flat-square)](#contributors) +[![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors) Build **performant**, **native** and **cross-platform** desktop applications with **JavaScript** + powerful **CSS like styling**.🚀 @@ -122,6 +122,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Soonwoo Hong
Soonwoo Hong

💻 Roy Sommer
Roy Sommer

💻 Paulo Coghi
Paulo Coghi

🤔 + Balthild Ires
Balthild Ires

💻 From 73b2f2d7cbc131d30e2e901b69aa88af5d848b94 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2019 21:04:40 +0000 Subject: [PATCH 076/891] docs: update .all-contributorsrc --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 801d7b0b99..fcb6d6c2e3 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -112,6 +112,15 @@ "contributions": [ "ideas" ] + }, + { + "login": "balthild", + "name": "Balthild Ires", + "avatar_url": "https://avatars2.githubusercontent.com/u/2662758?v=4", + "profile": "https://balthild.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From 2bcbb387787f9d41a99ec64a7ca6ddcb5993f009 Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 20 Sep 2019 23:18:02 +0200 Subject: [PATCH 077/891] Adds documentation and exports --- docs/api/QIcon.md | 11 +++++++++++ src/index.ts | 2 +- src/lib/QtGui/QIcon/index.ts | 14 +++++++++++--- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/docs/api/QIcon.md b/docs/api/QIcon.md index 2a6cd1e089..11a88e226c 100644 --- a/docs/api/QIcon.md +++ b/docs/api/QIcon.md @@ -30,3 +30,14 @@ QIcon can access all the instance properties defined in [Component](api/Componen ### Instance Methods QIcon can access all the instance methods defined in [Component](api/Component.md) +Additionally it also has the following instance methods: + +#### `icon.pixmap(width, height, mode?, state?)` + +Returns a pixmap with the requested size, mode, and state, generating one if necessary. The pixmap might be smaller than requested, but never larger. +. It calls the native method [QIcon: pixmap](https://doc.qt.io/qt-5/qicon.html#pixmap-3). + +- `width`: number, +- `height`: number +- `mode?`: QIconMode +- `state?`: QIconState diff --git a/src/index.ts b/src/index.ts index 7acd8a56f5..a07bd0783c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -5,7 +5,7 @@ export * from "./lib/QtEnums"; // Gui: export { QApplication } from "./lib/QtGui/QApplication"; export { QPixmap } from "./lib/QtGui/QPixmap"; -export { QIcon } from "./lib/QtGui/QIcon"; +export { QIcon, QIconMode, QIconState } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; export { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; export { QClipboard, QClipboardMode } from "./lib/QtGui/QClipboard"; diff --git a/src/lib/QtGui/QIcon/index.ts b/src/lib/QtGui/QIcon/index.ts index 4405ec5ddb..b35fe6351a 100644 --- a/src/lib/QtGui/QIcon/index.ts +++ b/src/lib/QtGui/QIcon/index.ts @@ -2,8 +2,16 @@ import addon from "../../core/addon"; import { Component, NativeElement } from "../../core/Component"; import { QPixmap } from "../../QtGui/QPixmap"; -export enum QIconMode { Normal, Disabled, Active, Selected } -export enum QIconState { Off, On } +export enum QIconMode { + Normal, + Disabled, + Active, + Selected +} +export enum QIconState { + Off, + On +} type arg = string | NativeElement; export class QIcon extends Component { @@ -21,7 +29,7 @@ export class QIcon extends Component { width: number, height: number, mode?: QIconMode, - state?: QIconState, + state?: QIconState ): QPixmap => { let nativePixmap; if (mode && state) { From d250b766cea6ee7959cb437036409eac486db47f Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 20 Sep 2019 23:32:46 +0200 Subject: [PATCH 078/891] updates readme --- docs/api/QIcon.md | 2 +- docs/api/QTabWidget.md | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 docs/api/QTabWidget.md diff --git a/docs/api/QIcon.md b/docs/api/QIcon.md index 11a88e226c..9720e3801c 100644 --- a/docs/api/QIcon.md +++ b/docs/api/QIcon.md @@ -32,7 +32,7 @@ QIcon can access all the instance properties defined in [Component](api/Componen QIcon can access all the instance methods defined in [Component](api/Component.md) Additionally it also has the following instance methods: -#### `icon.pixmap(width, height, mode?, state?)` +#### `icon.pixmap(width, height, mode?, state?)` (v0.1.10 & up) Returns a pixmap with the requested size, mode, and state, generating one if necessary. The pixmap might be smaller than requested, but never larger. . It calls the native method [QIcon: pixmap](https://doc.qt.io/qt-5/qicon.html#pixmap-3). diff --git a/docs/api/QTabWidget.md b/docs/api/QTabWidget.md new file mode 100644 index 0000000000..761c76e37a --- /dev/null +++ b/docs/api/QTabWidget.md @@ -0,0 +1,3 @@ +## Class: QTabWidget + +Will be available from NodeGUI v0.1.10 and up From c8d957ef5f3961399e7385e8f481878ed6228b2d Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 20 Sep 2019 23:33:57 +0200 Subject: [PATCH 079/891] cleanup demo.ts a tiny bit --- src/demo.ts | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/demo.ts b/src/demo.ts index ff0bbe8557..320831026c 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -18,13 +18,9 @@ import { CursorShape, WindowState, QTextOptionWrapMode, - QApplication, - QClipboardMode, QCheckBoxEvents } from "./index"; -import { QTabWidgetEvents } from "./lib/QtWidgets/QTabWidget"; - const path = require("path"); const win = new QMainWindow(); @@ -44,8 +40,8 @@ checkbox.setText("Check me out?"); checkbox.setObjectName("check"); checkbox.setChecked(true); checkbox.addEventListener(QCheckBoxEvents.toggled, () => { - console.log('checkbox was toggled!'); -}) + console.log("checkbox was toggled!"); +}); const dial = new QDial(); checkbox.setObjectName("dial"); @@ -57,16 +53,6 @@ lineEdit.setObjectName("editable"); const button = new QPushButton(); button.setText("Push Push Push!"); button.setObjectName("btn"); -button.setFlat(true); -button.addEventListener("clicked", () => { - const clipboard = QApplication.clipboard(); - console.log("clipboard: ", clipboard.text(QClipboardMode.Clipboard)); - clipboard.setText("yooooo", QClipboardMode.Clipboard); - if (rootView.layout) { - (rootView.layout as FlexLayout).removeWidget(dial); - } - label.setInlineStyle("color:blue;"); -}); const nodeguiLogo = new QIcon( path.resolve(__dirname, "../extras/assets/nodegui.png") @@ -84,7 +70,7 @@ const tab2 = new QWidget(); tab1.setLayout(new QGridLayout()); tab2.setLayout(new QGridLayout()); -if(tab1.layout && tab2.layout) { +if (tab1.layout && tab2.layout) { tab1.layout.addWidget(label1); tab2.layout.addWidget(label2); } From 3c97199a104845e79c919460be1bccca008c5f91 Mon Sep 17 00:00:00 2001 From: Atul R Date: Mon, 16 Sep 2019 23:36:59 +0200 Subject: [PATCH 080/891] Adds cmake as a build system for mac instead of node-gyp --- CMakeLists.txt | 125 +++++++++++++ binding.gyp | 10 -- config/common.gypi | 1 + package-lock.json | 435 ++++++++++++++++++++++++++++++++++++++++++++- package.json | 5 +- 5 files changed, 556 insertions(+), 20 deletions(-) create mode 100644 CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000000..0ca80eccb5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,125 @@ +cmake_minimum_required(VERSION 3.1) + +if(${CMAKE_VERSION} VERSION_LESS 3.15) + cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) +else() + cmake_policy(VERSION 3.15) +endif() + +project(NodeGUI + VERSION 1.0 + DESCRIPTION "Build cross platform native desktop apps" + HOMEPAGE_URL https://nodegui.org + LANGUAGES CXX +) + +set(ADDON_NAME "qtnode") + +add_library(${ADDON_NAME} SHARED + ${CMAKE_JS_SRC} + ${PROJECT_SOURCE_DIR}/src/cpp/main.cpp + # non wrapped + ${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexitem.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/nodestyle.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp + # wrapped cpps. Move non wrapped ones to shared gypi + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QIcon/qicon_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QCursor/qcursor_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/qdial_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp + # moc + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nwidget_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlabel_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/ncheckbox_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/ndial_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlineedit_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nmainwindow_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nprogressbar_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/npushbutton_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nspinbox_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nradiobutton_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nplaintextedit_moc.cpp + ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp + # deps + ${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp + ${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp +) + +# NAPI stuff +execute_process(COMMAND node -p "require('node-addon-api').include" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE NODE_ADDON_API_DIR +) +string(REPLACE "\n" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) +string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) + +# qt stuff +execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE QT_HOME_DIR +) +string(REPLACE "\n" "" QT_HOME_DIR ${QT_HOME_DIR}) +string(REPLACE "\"" "" QT_HOME_DIR ${QT_HOME_DIR}) + +# Continue +set_target_properties(${ADDON_NAME} PROPERTIES PREFIX "" SUFFIX ".node") + +target_include_directories(${ADDON_NAME} PRIVATE + ${CMAKE_JS_INC} + ${NODE_ADDON_API_DIR} + ${PROJECT_SOURCE_DIR} + ${PROJECT_SOURCE_DIR}/deps + ${QT_HOME_DIR}/include + ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers + ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers + ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers +) + +target_compile_definitions(${ADDON_NAME} PRIVATE + NAPI_CPP_EXCEPTIONS + _HAS_EXCEPTIONS=1 + SPDLOG_COMPILED_LIB + ENUM_BITFIELDS_NOT_SUPPORTED +) + +target_compile_features(${ADDON_NAME} PRIVATE + cxx_std_14 +) + +target_link_libraries(${ADDON_NAME} + ${CMAKE_JS_LIB} + ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore + ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui + ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets +) diff --git a/binding.gyp b/binding.gyp index 5366582a52..15e4c70dd6 100644 --- a/binding.gyp +++ b/binding.gyp @@ -11,16 +11,6 @@ "./config/qt.gypi", "./config/deps.gypi", ], - 'dependencies': [ - # './config/deps.gypi:nodeguidep', - ], - 'conditions':[ - ['OS=="mac"', { - 'xcode_settings': { - 'OTHER_LDFLAGS': ['-Wl,-rpath,@loader_path'], - }, - }] - ] }, ] } diff --git a/config/common.gypi b/config/common.gypi index 5f282ef8eb..ad71863f22 100644 --- a/config/common.gypi +++ b/config/common.gypi @@ -21,6 +21,7 @@ 'CLANG_CXX_LIBRARY': 'libc++', 'MACOSX_DEPLOYMENT_TARGET': '10.7', 'OTHER_CFLAGS': ['-std=c++14'], + 'OTHER_LDFLAGS': ['-Wl,-rpath,@loader_path'], }, }], ['OS=="linux"', { diff --git a/package-lock.json b/package-lock.json index 16d2aa1c8a..d9fad40b30 100644 --- a/package-lock.json +++ b/package-lock.json @@ -73,6 +73,16 @@ "uri-js": "^4.2.2" } }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ansi/-/ansi-0.3.1.tgz", + "integrity": "sha1-DELU+xcWDVqa8eSEus4cZpIsGyE=" + }, "ansi-align": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", @@ -195,6 +205,25 @@ "tweetnacl": "^0.14.3" } }, + "big-integer": { + "version": "1.6.44", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.44.tgz", + "integrity": "sha512-7MzElZPTyJ2fNvBkPxtFQ2fWIkVmuzw41+BZHSzpEq3ymB2MfeKp1+yXl/tS75xCx+WnyV+yb0kp+K1C3UNwmQ==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bluebird": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", + "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==" + }, "boxen": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz", @@ -257,6 +286,21 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, + "buffer-indexof-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.1.tgz", + "integrity": "sha1-qfuAbOgUXVQoUQznLyeLs2OmOL8=" + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=" + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -303,6 +347,14 @@ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -367,6 +419,16 @@ } } }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", @@ -375,6 +437,86 @@ "mimic-response": "^1.0.0" } }, + "cmake-js": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/cmake-js/-/cmake-js-5.3.2.tgz", + "integrity": "sha512-OsRQ3ZgoV3nJ+3bZr9MEvSuhGS7xc3LgmPZ2gCXlLqF5Wxi6mUQNK70dm/2UUf4/QNBssdYWB5Y7BSRX9FFUrg==", + "requires": { + "bluebird": "^3", + "debug": "^4", + "fs-extra": "^5.0.0", + "is-iojs": "^1.0.1", + "lodash": "^4", + "memory-stream": "0", + "npmlog": "^1.2.0", + "rc": "^1.2.7", + "request": "^2.54.0", + "semver": "^5.0.3", + "splitargs": "0", + "tar": "^4", + "traceur": "0.0.x", + "unzipper": "^0.8.13", + "url-join": "0", + "which": "^1.0.9", + "yargs": "^3.6.0" + }, + "dependencies": { + "are-we-there-yet": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.0.6.tgz", + "integrity": "sha1-otKMkxAqpsyWJFomy5VN4G7FPww=", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.0 || ^1.1.13" + } + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "fs-extra": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-5.0.0.tgz", + "integrity": "sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ==", + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "gauge": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-1.2.7.tgz", + "integrity": "sha1-6c7FSD09TuDvRLYKfZnkk14TbZM=", + "requires": { + "ansi": "^0.3.0", + "has-unicode": "^2.0.0", + "lodash.pad": "^4.1.0", + "lodash.padend": "^4.1.0", + "lodash.padstart": "^4.1.0" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "npmlog": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-1.2.1.tgz", + "integrity": "sha1-KOe+YZYJtT960d0wChDWTXFiaLY=", + "requires": { + "ansi": "~0.3.0", + "are-we-there-yet": "~1.0.0", + "gauge": "~1.2.0" + } + } + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -401,6 +543,14 @@ "delayed-stream": "~1.0.0" } }, + "commander": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", + "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + }, "compressible": { "version": "2.0.17", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.17.tgz", @@ -489,6 +639,11 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -500,8 +655,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "defer-to-connect": { "version": "1.0.2", @@ -518,6 +672,14 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "requires": { + "readable-stream": "^2.0.2" + } + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -667,6 +829,17 @@ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -734,6 +907,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" + }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -790,8 +968,12 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -801,6 +983,11 @@ "number-is-nan": "^1.0.0" } }, + "is-iojs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-iojs/-/is-iojs-1.1.0.tgz", + "integrity": "sha1-TBEDO11dlNbqs3dd7cm+fQCDJfE=" + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -879,6 +1066,39 @@ "json-buffer": "3.0.0" } }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha1-hMinKrWcRyUyFIDJdeZQg0LnCTc=" + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lodash.pad": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/lodash.pad/-/lodash.pad-4.5.1.tgz", + "integrity": "sha1-QzCUmoM6fI2iLMIPaibE1Z3runA=" + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -902,6 +1122,37 @@ } } }, + "memory-stream": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/memory-stream/-/memory-stream-0.0.3.tgz", + "integrity": "sha1-6+jdHDuLw4wOeUHp3dWuvmtN6D8=", + "requires": { + "readable-stream": "~1.0.26-2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "mime-db": { "version": "1.40.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", @@ -1061,6 +1312,14 @@ "wrappy": "1" } }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", @@ -1184,7 +1443,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -1195,8 +1453,7 @@ "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" } } }, @@ -1276,6 +1533,11 @@ "glob": "^7.1.3" } }, + "rsvp": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz", + "integrity": "sha512-OfWGQTb9vnwRjwtA2QwpG2ICclHC3pgXZO5xt8H2EfgDquO0qVdSb5T88L4qJVAEugbS56pAuV4XZM58UX8ulw==" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1380,6 +1642,11 @@ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", @@ -1405,6 +1672,29 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-support": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", + "integrity": "sha1-6lo5AKHByyUJagrozFwrSxDe09w=", + "requires": { + "source-map": "0.1.32" + }, + "dependencies": { + "source-map": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", + "integrity": "sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "splitargs": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/splitargs/-/splitargs-0.0.7.tgz", + "integrity": "sha1-/p965lc3GzOxDLgNoUPPgknPazs=" + }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -1456,8 +1746,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "supports-color": { "version": "6.1.0", @@ -1511,6 +1800,42 @@ } } }, + "traceur": { + "version": "0.0.111", + "resolved": "https://registry.npmjs.org/traceur/-/traceur-0.0.111.tgz", + "integrity": "sha1-wE3nTRRpbDNzQn3k/Ajsr5E/w6E=", + "requires": { + "commander": "2.9.x", + "glob": "5.0.x", + "rsvp": "^3.0.13", + "semver": "^4.3.3", + "source-map-support": "~0.2.8" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "semver": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=" + } + } + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=" + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -1540,6 +1865,53 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" }, + "unzipper": { + "version": "0.8.14", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.8.14.tgz", + "integrity": "sha512-8rFtE7EP5ssOwGpN2dt1Q4njl0N1hUXJ7sSPz0leU2hRdq6+pra57z4YPBlVqm40vcgv6ooKZEAx48fMTv9x4w==", + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "~1.0.10", + "listenercount": "~1.0.1", + "readable-stream": "~2.1.5", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=" + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "update-check": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.2.tgz", @@ -1558,6 +1930,11 @@ "punycode": "^2.1.0" } }, + "url-join": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-0.0.1.tgz", + "integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g=" + }, "url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", @@ -1650,16 +2027,56 @@ } } }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, "yallist": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "^2.0.1", + "cliui": "^3.0.3", + "decamelize": "^1.1.1", + "os-locale": "^1.4.0", + "string-width": "^1.0.1", + "window-size": "^0.1.4", + "y18n": "^3.2.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + } + } + }, "yauzl": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", diff --git a/package.json b/package.json index 2a9dc432fd..25db9c84f0 100644 --- a/package.json +++ b/package.json @@ -23,10 +23,13 @@ "build:addon": "node-gyp -j 8 configure build", "rebuild:addon": "node-gyp -j 8 rebuild", "automoc": "node ./scripts/automoc.js", - "docs": "serve docs" + "docs": "serve docs", + "build:cmake": "cmake-js compile -- -j 8", + "dev:cmake": "tsc && qode dist/demo.js" }, "dependencies": { "@nodegui/qode": "^1.0.5", + "cmake-js": "^5.3.2", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", "node-gyp": "^5.0.3", From 1c385b33f16bf14f3203318e7df396861a089102 Mon Sep 17 00:00:00 2001 From: Atul R Date: Tue, 17 Sep 2019 00:06:38 +0200 Subject: [PATCH 081/891] Adds stuff for windows and linux --- CMakeLists.txt | 58 +++++++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0ca80eccb5..64c3e14346 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.1) - +set(CMAKE_BUILD_PARALLEL_LEVEL 8) if(${CMAKE_VERSION} VERSION_LESS 3.15) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) else() @@ -100,10 +100,6 @@ target_include_directories(${ADDON_NAME} PRIVATE ${NODE_ADDON_API_DIR} ${PROJECT_SOURCE_DIR} ${PROJECT_SOURCE_DIR}/deps - ${QT_HOME_DIR}/include - ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers - ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers - ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers ) target_compile_definitions(${ADDON_NAME} PRIVATE @@ -119,7 +115,53 @@ target_compile_features(${ADDON_NAME} PRIVATE target_link_libraries(${ADDON_NAME} ${CMAKE_JS_LIB} - ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore - ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui - ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets ) + +if (APPLE) + target_include_directories(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}/include + ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers + ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers + ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers + ) + + target_link_libraries(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore + ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui + ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets + ) +endif() + +if (WIN32) + target_include_directories(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}\include + ${QT_HOME_DIR}\include\QtCore + ${QT_HOME_DIR}\include\QtGui + ${QT_HOME_DIR}\include\QtWidgets + ) + + target_link_libraries(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}\lib\Qt5Core.lib + ${QT_HOME_DIR}\lib\Qt5Gui.lib + ${QT_HOME_DIR}\lib\Qt5Widgets.lib + ) +endif() + +if(UNIX AND NOT APPLE) + set(LINUX TRUE) +endif() + +if(LINUX) + target_include_directories(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}/include + ${QT_HOME_DIR}/include/QtCore + ${QT_HOME_DIR}/include/QtGui + ${QT_HOME_DIR}/include/QtWidgets + ) + + target_link_libraries(${ADDON_NAME} PRIVATE + ${QT_HOME_DIR}/lib/libQt5Core.so + ${QT_HOME_DIR}/lib/libQt5Gui.so + ${QT_HOME_DIR}/lib/libQt5Widgets.so + ) +endif() \ No newline at end of file diff --git a/package.json b/package.json index 25db9c84f0..b8bcc1dde1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "rebuild:addon": "node-gyp -j 8 rebuild", "automoc": "node ./scripts/automoc.js", "docs": "serve docs", - "build:cmake": "cmake-js compile -- -j 8", + "build:cmake": "cmake-js compile", "dev:cmake": "tsc && qode dist/demo.js" }, "dependencies": { From 86e2590f4f31f7237a488c6d0b48df8ae652f620 Mon Sep 17 00:00:00 2001 From: master-atul Date: Mon, 16 Sep 2019 22:25:36 +0200 Subject: [PATCH 082/891] Fixes cmake on windows --- CMakeLists.txt | 166 ++++++++++++++++++++++++------------------------- 1 file changed, 83 insertions(+), 83 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 64c3e14346..b6a14eda68 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,64 +16,64 @@ project(NodeGUI set(ADDON_NAME "qtnode") add_library(${ADDON_NAME} SHARED - ${CMAKE_JS_SRC} - ${PROJECT_SOURCE_DIR}/src/cpp/main.cpp + "${CMAKE_JS_SRC}" + "${PROJECT_SOURCE_DIR}/src/cpp/main.cpp" # non wrapped - ${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexitem.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/nodestyle.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp + "${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexitem.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/nodestyle.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp" # wrapped cpps. Move non wrapped ones to shared gypi - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QIcon/qicon_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QCursor/qcursor_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/qdial_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QIcon/qicon_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QCursor/qcursor_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/qdial_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" # moc - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nwidget_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlabel_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/ncheckbox_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/ndial_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlineedit_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nmainwindow_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nprogressbar_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/npushbutton_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nspinbox_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nradiobutton_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nplaintextedit_moc.cpp - ${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nwidget_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlabel_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/ncheckbox_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/ndial_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlineedit_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nmainwindow_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nprogressbar_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/npushbutton_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nspinbox_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nradiobutton_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nplaintextedit_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp" # deps - ${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp - ${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp + "${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp" ) # NAPI stuff @@ -89,17 +89,17 @@ execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE QT_HOME_DIR ) -string(REPLACE "\n" "" QT_HOME_DIR ${QT_HOME_DIR}) -string(REPLACE "\"" "" QT_HOME_DIR ${QT_HOME_DIR}) +string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") +string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") # Continue set_target_properties(${ADDON_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${ADDON_NAME} PRIVATE - ${CMAKE_JS_INC} - ${NODE_ADDON_API_DIR} - ${PROJECT_SOURCE_DIR} - ${PROJECT_SOURCE_DIR}/deps + "${CMAKE_JS_INC}" + "${NODE_ADDON_API_DIR}" + "${PROJECT_SOURCE_DIR}" + "${PROJECT_SOURCE_DIR}/deps" ) target_compile_definitions(${ADDON_NAME} PRIVATE @@ -113,37 +113,37 @@ target_compile_features(${ADDON_NAME} PRIVATE cxx_std_14 ) -target_link_libraries(${ADDON_NAME} - ${CMAKE_JS_LIB} +target_link_libraries(${ADDON_NAME} PRIVATE + "${CMAKE_JS_LIB}" ) if (APPLE) target_include_directories(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}/include - ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers - ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers - ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers + "${QT_HOME_DIR}/include" + "${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers" + "${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers" + "${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers" ) target_link_libraries(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore - ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui - ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets + "${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore" + "${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui" + "${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets" ) endif() if (WIN32) target_include_directories(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}\include - ${QT_HOME_DIR}\include\QtCore - ${QT_HOME_DIR}\include\QtGui - ${QT_HOME_DIR}\include\QtWidgets + "${QT_HOME_DIR}\\include" + "${QT_HOME_DIR}\\include\\QtCore" + "${QT_HOME_DIR}\\include\\QtGui" + "${QT_HOME_DIR}\\include\\QtWidgets" ) target_link_libraries(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}\lib\Qt5Core.lib - ${QT_HOME_DIR}\lib\Qt5Gui.lib - ${QT_HOME_DIR}\lib\Qt5Widgets.lib + "${QT_HOME_DIR}\\lib\\Qt5Core.lib" + "${QT_HOME_DIR}\\lib\\Qt5Gui.lib" + "${QT_HOME_DIR}\\lib\\Qt5Widgets.lib" ) endif() @@ -153,15 +153,15 @@ endif() if(LINUX) target_include_directories(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}/include - ${QT_HOME_DIR}/include/QtCore - ${QT_HOME_DIR}/include/QtGui - ${QT_HOME_DIR}/include/QtWidgets + "${QT_HOME_DIR}/include" + "${QT_HOME_DIR}/include/QtCore" + "${QT_HOME_DIR}/include/QtGui" + "${QT_HOME_DIR}/include/QtWidgets" ) target_link_libraries(${ADDON_NAME} PRIVATE - ${QT_HOME_DIR}/lib/libQt5Core.so - ${QT_HOME_DIR}/lib/libQt5Gui.so - ${QT_HOME_DIR}/lib/libQt5Widgets.so + "${QT_HOME_DIR}/lib/libQt5Core.so" + "${QT_HOME_DIR}/lib/libQt5Gui.so" + "${QT_HOME_DIR}/lib/libQt5Widgets.so" ) endif() \ No newline at end of file From 60f3f7e9de6aeb4571f8ce6115863c2a07c5fbbc Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 18 Sep 2019 00:11:27 +0200 Subject: [PATCH 083/891] Cleans up --- CMakeLists.txt | 107 ++++++++++++++++++++++++++++++------------------- 1 file changed, 65 insertions(+), 42 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b6a14eda68..1a73cbe8b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,16 +8,16 @@ endif() project(NodeGUI VERSION 1.0 - DESCRIPTION "Build cross platform native desktop apps" - HOMEPAGE_URL https://nodegui.org - LANGUAGES CXX ) set(ADDON_NAME "qtnode") +# --------------------------------------- + add_library(${ADDON_NAME} SHARED "${CMAKE_JS_SRC}" "${PROJECT_SOURCE_DIR}/src/cpp/main.cpp" + # core # non wrapped "${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp" @@ -26,6 +26,19 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp" + # deps + "${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp" + "${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp" # wrapped cpps. Move non wrapped ones to shared gypi "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp" @@ -33,7 +46,6 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QIcon/qicon_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QCursor/qcursor_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/qdial_wrap.cpp" @@ -48,6 +60,7 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" # moc "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nwidget_moc.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlabel_moc.cpp" @@ -61,19 +74,6 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nradiobutton_moc.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nplaintextedit_moc.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp" - # deps - "${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp" ) # NAPI stuff @@ -92,32 +92,21 @@ execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") -# Continue -set_target_properties(${ADDON_NAME} PROPERTIES PREFIX "" SUFFIX ".node") - -target_include_directories(${ADDON_NAME} PRIVATE - "${CMAKE_JS_INC}" - "${NODE_ADDON_API_DIR}" - "${PROJECT_SOURCE_DIR}" - "${PROJECT_SOURCE_DIR}/deps" -) - -target_compile_definitions(${ADDON_NAME} PRIVATE - NAPI_CPP_EXCEPTIONS - _HAS_EXCEPTIONS=1 - SPDLOG_COMPILED_LIB - ENUM_BITFIELDS_NOT_SUPPORTED -) - -target_compile_features(${ADDON_NAME} PRIVATE - cxx_std_14 -) - -target_link_libraries(${ADDON_NAME} PRIVATE - "${CMAKE_JS_LIB}" -) if (APPLE) + # function(createSymlinks) + # message("Creating qt symlinks") + # execute_process( + # COMMAND 'mkdir -p ${QT_HOME_DIR}/include' + # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtCore' + # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtGui' + # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtWidgets' + # WORKING_DIRECTORY ${QT_HOME_DIR} + # ) + # endfunction() + + # createSymlinks() + target_include_directories(${ADDON_NAME} PRIVATE "${QT_HOME_DIR}/include" "${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers" @@ -130,6 +119,7 @@ if (APPLE) "${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui" "${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets" ) + endif() if (WIN32) @@ -164,4 +154,37 @@ if(LINUX) "${QT_HOME_DIR}/lib/libQt5Gui.so" "${QT_HOME_DIR}/lib/libQt5Widgets.so" ) -endif() \ No newline at end of file +endif() + +# Continue +set_target_properties(${ADDON_NAME} PROPERTIES PREFIX "" SUFFIX ".node") + +target_include_directories(${ADDON_NAME} PRIVATE + "${CMAKE_JS_INC}" + "${NODE_ADDON_API_DIR}" + "${PROJECT_SOURCE_DIR}" + "${PROJECT_SOURCE_DIR}/deps" +) + +target_compile_definitions(${ADDON_NAME} PRIVATE + NAPI_CPP_EXCEPTIONS + SPDLOG_COMPILED_LIB +) + + +if (WIN32) + target_compile_definitions(${ADDON_NAME} PRIVATE + _HAS_EXCEPTIONS=1 + ENUM_BITFIELDS_NOT_SUPPORTED + ) +endif() + +target_compile_features(${ADDON_NAME} PRIVATE + cxx_std_14 +) + + +target_link_libraries(${ADDON_NAME} PRIVATE + "${CMAKE_JS_LIB}" +) + From 75e81403183ac6c032520b3f05194988d0aa792b Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 18 Sep 2019 21:17:48 +0200 Subject: [PATCH 084/891] Adds cmake build support --- CMakeLists.txt | 121 ++++++---------------------------------- binding.gyp | 16 ------ config/application.gypi | 36 ------------ config/common.cmake | 13 +++++ config/common.gypi | 48 ---------------- config/deps.gypi | 33 ----------- config/napi.cmake | 27 +++++++++ config/qt.cmake | 70 +++++++++++++++++++++++ config/qt.gypi | 64 --------------------- package-lock.json | 28 ++++++++++ package.json | 8 +-- 11 files changed, 157 insertions(+), 307 deletions(-) delete mode 100644 binding.gyp delete mode 100644 config/application.gypi create mode 100644 config/common.cmake delete mode 100644 config/common.gypi delete mode 100644 config/deps.gypi create mode 100644 config/napi.cmake create mode 100644 config/qt.cmake delete mode 100644 config/qt.gypi diff --git a/CMakeLists.txt b/CMakeLists.txt index 1a73cbe8b0..9d76772fe2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,17 +1,19 @@ cmake_minimum_required(VERSION 3.1) -set(CMAKE_BUILD_PARALLEL_LEVEL 8) if(${CMAKE_VERSION} VERSION_LESS 3.15) cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) else() cmake_policy(VERSION 3.15) endif() +if(${CMAKE_VERSION} VERSION_LESS "3.7.0") + set(CMAKE_INCLUDE_CURRENT_DIR ON) +endif() project(NodeGUI VERSION 1.0 ) -set(ADDON_NAME "qtnode") +set(ADDON_NAME "qtnode") # --------------------------------------- add_library(${ADDON_NAME} SHARED @@ -57,6 +59,7 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" @@ -76,115 +79,23 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp" ) -# NAPI stuff -execute_process(COMMAND node -p "require('node-addon-api').include" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE NODE_ADDON_API_DIR -) -string(REPLACE "\n" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) -string(REPLACE "\"" "" NODE_ADDON_API_DIR ${NODE_ADDON_API_DIR}) - -# qt stuff -execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} - OUTPUT_VARIABLE QT_HOME_DIR -) -string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") -string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") - - -if (APPLE) - # function(createSymlinks) - # message("Creating qt symlinks") - # execute_process( - # COMMAND 'mkdir -p ${QT_HOME_DIR}/include' - # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtCore' - # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtGui' - # COMMAND 'ln -sfn ${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers ${QT_HOME_DIR}/include/QtWidgets' - # WORKING_DIRECTORY ${QT_HOME_DIR} - # ) - # endfunction() +# common +include(./config/common.cmake) +AddCommonConfig(${ADDON_NAME}) +# qt +include(./config/qt.cmake) +AddQtSupport(${ADDON_NAME}) +# napi +include(./config/napi.cmake) +AddNapiSupport(${ADDON_NAME}) - # createSymlinks() - - target_include_directories(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}/include" - "${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/Headers" - "${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/Headers" - "${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/Headers" - ) - - target_link_libraries(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}/lib/QtCore.framework/Versions/5/QtCore" - "${QT_HOME_DIR}/lib/QtGui.framework/Versions/5/QtGui" - "${QT_HOME_DIR}/lib/QtWidgets.framework/Versions/5/QtWidgets" - ) - -endif() - -if (WIN32) - target_include_directories(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}\\include" - "${QT_HOME_DIR}\\include\\QtCore" - "${QT_HOME_DIR}\\include\\QtGui" - "${QT_HOME_DIR}\\include\\QtWidgets" - ) - - target_link_libraries(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}\\lib\\Qt5Core.lib" - "${QT_HOME_DIR}\\lib\\Qt5Gui.lib" - "${QT_HOME_DIR}\\lib\\Qt5Widgets.lib" - ) -endif() - -if(UNIX AND NOT APPLE) - set(LINUX TRUE) -endif() - -if(LINUX) - target_include_directories(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}/include" - "${QT_HOME_DIR}/include/QtCore" - "${QT_HOME_DIR}/include/QtGui" - "${QT_HOME_DIR}/include/QtWidgets" - ) - - target_link_libraries(${ADDON_NAME} PRIVATE - "${QT_HOME_DIR}/lib/libQt5Core.so" - "${QT_HOME_DIR}/lib/libQt5Gui.so" - "${QT_HOME_DIR}/lib/libQt5Widgets.so" - ) -endif() - -# Continue -set_target_properties(${ADDON_NAME} PROPERTIES PREFIX "" SUFFIX ".node") target_include_directories(${ADDON_NAME} PRIVATE "${CMAKE_JS_INC}" - "${NODE_ADDON_API_DIR}" "${PROJECT_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/deps" ) -target_compile_definitions(${ADDON_NAME} PRIVATE - NAPI_CPP_EXCEPTIONS - SPDLOG_COMPILED_LIB -) - - -if (WIN32) - target_compile_definitions(${ADDON_NAME} PRIVATE - _HAS_EXCEPTIONS=1 - ENUM_BITFIELDS_NOT_SUPPORTED - ) -endif() - -target_compile_features(${ADDON_NAME} PRIVATE - cxx_std_14 -) - - target_link_libraries(${ADDON_NAME} PRIVATE - "${CMAKE_JS_LIB}" -) - + "${CMAKE_JS_LIB}" +) \ No newline at end of file diff --git a/binding.gyp b/binding.gyp deleted file mode 100644 index 15e4c70dd6..0000000000 --- a/binding.gyp +++ /dev/null @@ -1,16 +0,0 @@ -{ - "includes": [], - "targets": [ - { - "target_name": "qtnode", - 'include_dirs': ['.', './deps/'], - "includes": [ - "./config/application.gypi", - "./config/moc.gypi", - "./config/common.gypi", - "./config/qt.gypi", - "./config/deps.gypi", - ], - }, - ] -} diff --git a/config/application.gypi b/config/application.gypi deleted file mode 100644 index 89e19e63d2..0000000000 --- a/config/application.gypi +++ /dev/null @@ -1,36 +0,0 @@ -{ - "sources": [ - "../src/cpp/main.cpp", - # non wrapped - "../src/cpp/Extras/Utils/nutils.cpp", - "../src/cpp/core/FlexLayout/flexlayout.cpp", - "../src/cpp/core/FlexLayout/flexitem.cpp", - "../src/cpp/core/YogaWidget/nodestyle.cpp", - "../src/cpp/core/Events/eventsmap.cpp", - "../src/cpp/core/Events/eventwidget.cpp", - "../src/cpp/core/YogaWidget/yogawidget.cpp", - # wrapped cpps. Move non wrapped ones to shared gypi - "../src/cpp/QtGui/QApplication/qapplication_wrap.cpp", - "../src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp", - "../src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp", - "../src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp", - "../src/cpp/QtGui/QIcon/qicon_wrap.cpp", - "../src/cpp/QtGui/QCursor/qcursor_wrap.cpp", - '../src/cpp/core/FlexLayout/flexlayout_wrap.cpp', - "../src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp", - "../src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp", - "../src/cpp/QtWidgets/QDial/qdial_wrap.cpp", - "../src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp", - "../src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp", - "../src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp", - "../src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp", - "../src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp", - "../src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp", - "../src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp", - "../src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp", - "../src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp", - "../src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp", - "../src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp", - "../src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" - ], -} diff --git a/config/common.cmake b/config/common.cmake new file mode 100644 index 0000000000..e330d5b680 --- /dev/null +++ b/config/common.cmake @@ -0,0 +1,13 @@ +function(AddCommonConfig addonName) + target_compile_definitions(${addonName} PRIVATE + SPDLOG_COMPILED_LIB + ) + target_compile_features(${addonName} PRIVATE + cxx_std_14 + ) + if (WIN32) + target_compile_definitions(${addonName} PRIVATE + ENUM_BITFIELDS_NOT_SUPPORTED + ) + endif() +endfunction(AddCommonConfig addonName) \ No newline at end of file diff --git a/config/common.gypi b/config/common.gypi deleted file mode 100644 index ad71863f22..0000000000 --- a/config/common.gypi +++ /dev/null @@ -1,48 +0,0 @@ -{ - 'cflags!': ['-fno-exceptions'], - 'cflags_cc!': ['-fno-exceptions'], - 'sources': [], - 'includes': [], - 'include_dirs': [ - " Date: Wed, 18 Sep 2019 23:13:41 +0200 Subject: [PATCH 085/891] Working automatic moc --- CMakeLists.txt | 37 +- config/moc.gypi | 19 - config/moc.json | 18 - config/qt.cmake | 2 + .../QCheckBox/{ncheckbox.h => ncheckbox.hpp} | 1 + src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h | 2 +- .../QtWidgets/QDial/{ndial.h => ndial.hpp} | 1 + src/cpp/QtWidgets/QDial/qdial_wrap.h | 2 +- .../QtWidgets/QLabel/{nlabel.h => nlabel.hpp} | 1 + src/cpp/QtWidgets/QLabel/qlabel_wrap.h | 2 +- .../QLineEdit/{nlineedit.h => nlineedit.hpp} | 1 + src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h | 2 +- .../{nmainwindow.h => nmainwindow.hpp} | 1 + .../QtWidgets/QMainWindow/qmainwindow_wrap.h | 2 +- .../{nplaintextedit.h => nplaintextedit.hpp} | 1 + .../QPlainTextEdit/qplaintextedit_wrap.h | 2 +- .../{nprogressbar.h => nprogressbar.hpp} | 1 + .../QProgressBar/qprogressbar_wrap.h | 2 +- .../{npushbutton.h => npushbutton.hpp} | 1 + .../QtWidgets/QPushButton/qpushbutton_wrap.h | 2 +- .../{nradiobutton.h => nradiobutton.hpp} | 1 + .../QRadioButton/qradiobutton_wrap.h | 2 +- .../{nscrollarea.h => nscrollarea.hpp} | 1 + .../QtWidgets/QScrollArea/qscrollarea_wrap.h | 2 +- .../QSpinBox/{nspinbox.h => nspinbox.hpp} | 1 + src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h | 2 +- .../QWidget/{nwidget.h => nwidget.hpp} | 1 + src/cpp/QtWidgets/QWidget/qwidget_wrap.h | 2 +- src/cpp/autogen/ncheckbox_moc.cpp | 337 ------------------ src/cpp/autogen/ndial_moc.cpp | 336 ----------------- src/cpp/autogen/nlabel_moc.cpp | 336 ----------------- src/cpp/autogen/nlineedit_moc.cpp | 337 ------------------ src/cpp/autogen/nmainwindow_moc.cpp | 337 ------------------ src/cpp/autogen/nplaintextedit_moc.cpp | 337 ------------------ src/cpp/autogen/nprogressbar_moc.cpp | 337 ------------------ src/cpp/autogen/npushbutton_moc.cpp | 337 ------------------ src/cpp/autogen/nradiobutton_moc.cpp | 337 ------------------ src/cpp/autogen/nscrollarea_moc.cpp | 337 ------------------ src/cpp/autogen/nspinbox_moc.cpp | 337 ------------------ src/cpp/autogen/nwidget_moc.cpp | 336 ----------------- src/cpp/core/NodeWidget/nodewidget.h | 1 - 41 files changed, 47 insertions(+), 4107 deletions(-) delete mode 100644 config/moc.gypi delete mode 100644 config/moc.json rename src/cpp/QtWidgets/QCheckBox/{ncheckbox.h => ncheckbox.hpp} (97%) rename src/cpp/QtWidgets/QDial/{ndial.h => ndial.hpp} (99%) rename src/cpp/QtWidgets/QLabel/{nlabel.h => nlabel.hpp} (94%) rename src/cpp/QtWidgets/QLineEdit/{nlineedit.h => nlineedit.hpp} (99%) rename src/cpp/QtWidgets/QMainWindow/{nmainwindow.h => nmainwindow.hpp} (95%) rename src/cpp/QtWidgets/QPlainTextEdit/{nplaintextedit.h => nplaintextedit.hpp} (99%) rename src/cpp/QtWidgets/QProgressBar/{nprogressbar.h => nprogressbar.hpp} (95%) rename src/cpp/QtWidgets/QPushButton/{npushbutton.h => npushbutton.hpp} (99%) rename src/cpp/QtWidgets/QRadioButton/{nradiobutton.h => nradiobutton.hpp} (95%) rename src/cpp/QtWidgets/QScrollArea/{nscrollarea.h => nscrollarea.hpp} (95%) rename src/cpp/QtWidgets/QSpinBox/{nspinbox.h => nspinbox.hpp} (98%) rename src/cpp/QtWidgets/QWidget/{nwidget.h => nwidget.hpp} (97%) delete mode 100644 src/cpp/autogen/ncheckbox_moc.cpp delete mode 100644 src/cpp/autogen/ndial_moc.cpp delete mode 100644 src/cpp/autogen/nlabel_moc.cpp delete mode 100644 src/cpp/autogen/nlineedit_moc.cpp delete mode 100644 src/cpp/autogen/nmainwindow_moc.cpp delete mode 100644 src/cpp/autogen/nplaintextedit_moc.cpp delete mode 100644 src/cpp/autogen/nprogressbar_moc.cpp delete mode 100644 src/cpp/autogen/npushbutton_moc.cpp delete mode 100644 src/cpp/autogen/nradiobutton_moc.cpp delete mode 100644 src/cpp/autogen/nscrollarea_moc.cpp delete mode 100644 src/cpp/autogen/nspinbox_moc.cpp delete mode 100644 src/cpp/autogen/nwidget_moc.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 9d76772fe2..aafd1f7775 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,15 +4,20 @@ if(${CMAKE_VERSION} VERSION_LESS 3.15) else() cmake_policy(VERSION 3.15) endif() -if(${CMAKE_VERSION} VERSION_LESS "3.7.0") - set(CMAKE_INCLUDE_CURRENT_DIR ON) -endif() + +# Find including in corresponding build directories +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC ON) +set(CMAKE_AUTOUIC OFF) +set(CMAKE_AUTORCC OFF) +set(CMAKE_AUTOMOC_RELAXED_MODE ON) +set(QT_VERSION_MAJOR 5) +add_executable(Qt5::moc IMPORTED) project(NodeGUI VERSION 1.0 ) - set(ADDON_NAME "qtnode") # --------------------------------------- @@ -65,18 +70,18 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" # moc - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nwidget_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlabel_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/ncheckbox_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/ndial_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nlineedit_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nmainwindow_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nprogressbar_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/npushbutton_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nspinbox_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nradiobutton_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nplaintextedit_moc.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/autogen/nscrollarea_moc.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/nwidget.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/nlabel.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/ndial.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/npushbutton.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp" ) # common diff --git a/config/moc.gypi b/config/moc.gypi deleted file mode 100644 index 06304172f7..0000000000 --- a/config/moc.gypi +++ /dev/null @@ -1,19 +0,0 @@ -# AUTOGENERATED FILE. DO NOT MODIFY . ALL CHANGES WILL BE LOST -# RUN: npm run automoc after updating moc.json -{ - "sources": [ - "../src/cpp/autogen/nwidget_moc.cpp", - "../src/cpp/autogen/nlabel_moc.cpp", - "../src/cpp/autogen/ncheckbox_moc.cpp", - "../src/cpp/autogen/ndial_moc.cpp", - "../src/cpp/autogen/nlineedit_moc.cpp", - "../src/cpp/autogen/nmainwindow_moc.cpp", - "../src/cpp/autogen/nprogressbar_moc.cpp", - "../src/cpp/autogen/npushbutton_moc.cpp", - "../src/cpp/autogen/nspinbox_moc.cpp", - "../src/cpp/autogen/nradiobutton_moc.cpp", - "../src/cpp/autogen/ntabwidget_moc.cpp", - "../src/cpp/autogen/nplaintextedit_moc.cpp", - "../src/cpp/autogen/nscrollarea_moc.cpp" - ] -} \ No newline at end of file diff --git a/config/moc.json b/config/moc.json deleted file mode 100644 index cd21b2acdd..0000000000 --- a/config/moc.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "include": "src/cpp/core/NodeWidget/nodewidget.h", - "headers": [ - "src/cpp/QtWidgets/QWidget/nwidget.h", - "src/cpp/QtWidgets/QLabel/nlabel.h", - "src/cpp/QtWidgets/QCheckBox/ncheckbox.h", - "src/cpp/QtWidgets/QDial/ndial.h", - "src/cpp/QtWidgets/QLineEdit/nlineedit.h", - "src/cpp/QtWidgets/QMainWindow/nmainwindow.h", - "src/cpp/QtWidgets/QProgressBar/nprogressbar.h", - "src/cpp/QtWidgets/QPushButton/npushbutton.h", - "src/cpp/QtWidgets/QSpinBox/nspinbox.h", - "src/cpp/QtWidgets/QRadioButton/nradiobutton.h", - "src/cpp/QtWidgets/QTabWidget/ntabwidget.h", - "src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h", - "src/cpp/QtWidgets/QScrollArea/nscrollarea.h" - ] -} diff --git a/config/qt.cmake b/config/qt.cmake index 1e37bfd1c0..d3e1b47621 100644 --- a/config/qt.cmake +++ b/config/qt.cmake @@ -8,6 +8,8 @@ function(AddQtSupport addonName) string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") + set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_HOME_DIR}/bin/moc) + if (APPLE) # createQtMacSymlinks() diff --git a/src/cpp/QtWidgets/QCheckBox/ncheckbox.h b/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp similarity index 97% rename from src/cpp/QtWidgets/QCheckBox/ncheckbox.h rename to src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp index 8ed6054d58..b2fa48f4c7 100644 --- a/src/cpp/QtWidgets/QCheckBox/ncheckbox.h +++ b/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp @@ -6,6 +6,7 @@ class NCheckBox: public QCheckBox, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QCheckBox) public: using QCheckBox::QCheckBox; //inherit all constructors of QCheckBox diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h index 8f49f85bac..85b81bbc56 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "ncheckbox.h" +#include "ncheckbox.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" diff --git a/src/cpp/QtWidgets/QDial/ndial.h b/src/cpp/QtWidgets/QDial/ndial.hpp similarity index 99% rename from src/cpp/QtWidgets/QDial/ndial.h rename to src/cpp/QtWidgets/QDial/ndial.hpp index 3e9029b265..5765d329f3 100644 --- a/src/cpp/QtWidgets/QDial/ndial.h +++ b/src/cpp/QtWidgets/QDial/ndial.hpp @@ -5,6 +5,7 @@ class NDial: public QDial, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QDial) public: using QDial::QDial; //inherit all constructors of QDial diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.h b/src/cpp/QtWidgets/QDial/qdial_wrap.h index 5f75be29b6..48addd4553 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.h +++ b/src/cpp/QtWidgets/QDial/qdial_wrap.h @@ -3,7 +3,7 @@ #include #include #include -#include "ndial.h" +#include "ndial.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h" diff --git a/src/cpp/QtWidgets/QLabel/nlabel.h b/src/cpp/QtWidgets/QLabel/nlabel.hpp similarity index 94% rename from src/cpp/QtWidgets/QLabel/nlabel.h rename to src/cpp/QtWidgets/QLabel/nlabel.hpp index 686a0c82f6..0e88b003cb 100644 --- a/src/cpp/QtWidgets/QLabel/nlabel.h +++ b/src/cpp/QtWidgets/QLabel/nlabel.hpp @@ -5,6 +5,7 @@ class NLabel: public QLabel, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QLabel) public: using QLabel::QLabel; //inherit all constructors of QLabel diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h index c8bcde7ee8..7e9a6e90d6 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h +++ b/src/cpp/QtWidgets/QLabel/qlabel_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nlabel.h" +#include "nlabel.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QLabelWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QLineEdit/nlineedit.h b/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp similarity index 99% rename from src/cpp/QtWidgets/QLineEdit/nlineedit.h rename to src/cpp/QtWidgets/QLineEdit/nlineedit.hpp index 130e6d34b9..c96a269ce4 100644 --- a/src/cpp/QtWidgets/QLineEdit/nlineedit.h +++ b/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp @@ -5,6 +5,7 @@ class NLineEdit: public QLineEdit, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QLineEdit) public: using QLineEdit::QLineEdit; //inherit all constructors of QLineEdit diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h index 4d8ea42593..66029a01d5 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h +++ b/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nlineedit.h" +#include "nlineedit.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QLineEditWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QMainWindow/nmainwindow.h b/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp similarity index 95% rename from src/cpp/QtWidgets/QMainWindow/nmainwindow.h rename to src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp index 0d62b5500b..a60dde54ca 100644 --- a/src/cpp/QtWidgets/QMainWindow/nmainwindow.h +++ b/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp @@ -6,6 +6,7 @@ class NMainWindow: public QMainWindow, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QMainWindow) public: using QMainWindow::QMainWindow; //inherit all constructors of QMainWindow diff --git a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h index b53706a7fc..9d7d232156 100644 --- a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h +++ b/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nmainwindow.h" +#include "nmainwindow.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QMainWindowWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp similarity index 99% rename from src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h rename to src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp index 2b5d5d9116..e4b6f8e479 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp @@ -6,6 +6,7 @@ class NPlainTextEdit : public QPlainTextEdit, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QPlainTextEdit) public: using QPlainTextEdit::QPlainTextEdit; //inherit all constructors of QPlainTextEdit diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index a451c83183..4a9f1acc20 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nplaintextedit.h" +#include "nplaintextedit.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" diff --git a/src/cpp/QtWidgets/QProgressBar/nprogressbar.h b/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp similarity index 95% rename from src/cpp/QtWidgets/QProgressBar/nprogressbar.h rename to src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp index 106d89bc69..06b3862ee8 100644 --- a/src/cpp/QtWidgets/QProgressBar/nprogressbar.h +++ b/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp @@ -5,6 +5,7 @@ class NProgressBar: public QProgressBar, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QProgressBar) public: using QProgressBar::QProgressBar; //inherit all constructors of QProgressBar diff --git a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h index 41ca2a78fe..7a5d05d38d 100644 --- a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h +++ b/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nprogressbar.h" +#include "nprogressbar.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" class QProgressBarWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QPushButton/npushbutton.h b/src/cpp/QtWidgets/QPushButton/npushbutton.hpp similarity index 99% rename from src/cpp/QtWidgets/QPushButton/npushbutton.h rename to src/cpp/QtWidgets/QPushButton/npushbutton.hpp index 654fd22537..db6f240ef0 100644 --- a/src/cpp/QtWidgets/QPushButton/npushbutton.h +++ b/src/cpp/QtWidgets/QPushButton/npushbutton.hpp @@ -6,6 +6,7 @@ class NPushButton: public QPushButton, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QPushButton) public: using QPushButton::QPushButton; //inherit all constructors of QPushButton diff --git a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h index 4ef0b427b0..0dda9bb847 100644 --- a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h +++ b/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "npushbutton.h" +#include "npushbutton.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/Extras/Utils/nutils.h" diff --git a/src/cpp/QtWidgets/QRadioButton/nradiobutton.h b/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp similarity index 95% rename from src/cpp/QtWidgets/QRadioButton/nradiobutton.h rename to src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp index 56155e4d1a..4e27777b2d 100644 --- a/src/cpp/QtWidgets/QRadioButton/nradiobutton.h +++ b/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp @@ -5,6 +5,7 @@ class NRadioButton: public QRadioButton, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QRadioButton) public: using QRadioButton::QRadioButton; //inherit all constructors of QRadioButton diff --git a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h index 88fb018b21..694b73cad5 100644 --- a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h +++ b/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nradiobutton.h" +#include "nradiobutton.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" diff --git a/src/cpp/QtWidgets/QScrollArea/nscrollarea.h b/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp similarity index 95% rename from src/cpp/QtWidgets/QScrollArea/nscrollarea.h rename to src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp index 1b67903025..8eba3d5c9b 100644 --- a/src/cpp/QtWidgets/QScrollArea/nscrollarea.h +++ b/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp @@ -5,6 +5,7 @@ class NScrollArea: public QScrollArea, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QScrollArea) public: using QScrollArea::QScrollArea; //inherit all constructors of QScrollArea diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h index 26df980f92..764a98ccc7 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nscrollarea.h" +#include "nscrollarea.hpp" #include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" class QScrollAreaWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QSpinBox/nspinbox.h b/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp similarity index 98% rename from src/cpp/QtWidgets/QSpinBox/nspinbox.h rename to src/cpp/QtWidgets/QSpinBox/nspinbox.hpp index 7f237b1acc..54ec2de097 100644 --- a/src/cpp/QtWidgets/QSpinBox/nspinbox.h +++ b/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp @@ -6,6 +6,7 @@ class NSpinBox: public QSpinBox, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QSpinBox) public: using QSpinBox::QSpinBox; //inherit all constructors of QSpinBox diff --git a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h index baba8a483b..9cb39733c1 100644 --- a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h +++ b/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "nspinbox.h" +#include "nspinbox.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/Extras/Utils/nutils.h" diff --git a/src/cpp/QtWidgets/QWidget/nwidget.h b/src/cpp/QtWidgets/QWidget/nwidget.hpp similarity index 97% rename from src/cpp/QtWidgets/QWidget/nwidget.h rename to src/cpp/QtWidgets/QWidget/nwidget.hpp index e1d29cf7be..6175ee0a43 100644 --- a/src/cpp/QtWidgets/QWidget/nwidget.h +++ b/src/cpp/QtWidgets/QWidget/nwidget.hpp @@ -7,6 +7,7 @@ class NWidget: public QWidget, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QWidget) public: using QWidget::QWidget; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h b/src/cpp/QtWidgets/QWidget/qwidget_wrap.h index e9ee9c3bde..aeec327aa0 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h +++ b/src/cpp/QtWidgets/QWidget/qwidget_wrap.h @@ -3,7 +3,7 @@ #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include #include -#include "nwidget.h" +#include "nwidget.hpp" class QWidgetWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/autogen/ncheckbox_moc.cpp b/src/cpp/autogen/ncheckbox_moc.cpp deleted file mode 100644 index b6cf7b2f11..0000000000 --- a/src/cpp/autogen/ncheckbox_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'ncheckbox.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QCheckBox/ncheckbox.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'ncheckbox.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NCheckBox_t { - QByteArrayData data[47]; - char stringdata0[546]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NCheckBox_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NCheckBox_t qt_meta_stringdata_NCheckBox = { - { -QT_MOC_LITERAL(0, 0, 9), // "NCheckBox" -QT_MOC_LITERAL(1, 10, 8), // "yDisplay" -QT_MOC_LITERAL(2, 19, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 31, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 45, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 56, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 72, 10), // "yDirection" -QT_MOC_LITERAL(7, 83, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 98, 9), // "yOverflow" -QT_MOC_LITERAL(9, 108, 9), // "yPosition" -QT_MOC_LITERAL(10, 118, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 128, 5), // "yFlex" -QT_MOC_LITERAL(12, 134, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 144, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 156, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 169, 4), // "yTop" -QT_MOC_LITERAL(16, 174, 6), // "yRight" -QT_MOC_LITERAL(17, 181, 7), // "yBottom" -QT_MOC_LITERAL(18, 189, 5), // "yLeft" -QT_MOC_LITERAL(19, 195, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 206, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 216, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 227, 6), // "yWidth" -QT_MOC_LITERAL(23, 234, 7), // "yHeight" -QT_MOC_LITERAL(24, 242, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 252, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 263, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 275, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 289, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 304, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 317, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 336, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 353, 8), // "yPadding" -QT_MOC_LITERAL(33, 362, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 373, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 386, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 400, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 412, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 430, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 446, 7), // "yMargin" -QT_MOC_LITERAL(40, 454, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 465, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 478, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 492, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 504, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 522, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 538, 7) // "yBorder" - - }, - "NCheckBox\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NCheckBox[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NCheckBox::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NCheckBox::staticMetaObject = { { - &QCheckBox::staticMetaObject, - qt_meta_stringdata_NCheckBox.data, - qt_meta_data_NCheckBox, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NCheckBox::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NCheckBox::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NCheckBox.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QCheckBox::qt_metacast(_clname); -} - -int NCheckBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QCheckBox::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/ndial_moc.cpp b/src/cpp/autogen/ndial_moc.cpp deleted file mode 100644 index d0996541f0..0000000000 --- a/src/cpp/autogen/ndial_moc.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'ndial.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QDial/ndial.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'ndial.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NDial_t { - QByteArrayData data[47]; - char stringdata0[542]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NDial_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NDial_t qt_meta_stringdata_NDial = { - { -QT_MOC_LITERAL(0, 0, 5), // "NDial" -QT_MOC_LITERAL(1, 6, 8), // "yDisplay" -QT_MOC_LITERAL(2, 15, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 27, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 41, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 52, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 68, 10), // "yDirection" -QT_MOC_LITERAL(7, 79, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 94, 9), // "yOverflow" -QT_MOC_LITERAL(9, 104, 9), // "yPosition" -QT_MOC_LITERAL(10, 114, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 124, 5), // "yFlex" -QT_MOC_LITERAL(12, 130, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 140, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 152, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 165, 4), // "yTop" -QT_MOC_LITERAL(16, 170, 6), // "yRight" -QT_MOC_LITERAL(17, 177, 7), // "yBottom" -QT_MOC_LITERAL(18, 185, 5), // "yLeft" -QT_MOC_LITERAL(19, 191, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 202, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 212, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 223, 6), // "yWidth" -QT_MOC_LITERAL(23, 230, 7), // "yHeight" -QT_MOC_LITERAL(24, 238, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 248, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 259, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 271, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 285, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 300, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 313, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 332, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 349, 8), // "yPadding" -QT_MOC_LITERAL(33, 358, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 369, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 382, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 396, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 408, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 426, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 442, 7), // "yMargin" -QT_MOC_LITERAL(40, 450, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 461, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 474, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 488, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 500, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 518, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 534, 7) // "yBorder" - - }, - "NDial\0yDisplay\0yAlignItems\0yAlignContent\0" - "yAlignSelf\0yJustifyContent\0yDirection\0" - "yFlexDirection\0yOverflow\0yPosition\0" - "yFlexWrap\0yFlex\0yFlexGrow\0yFlexShrink\0" - "yAspectRatio\0yTop\0yRight\0yBottom\0yLeft\0" - "yFlexBasis\0yMinWidth\0yMinHeight\0yWidth\0" - "yHeight\0yMaxWidth\0yMaxHeight\0yPaddingTop\0" - "yPaddingRight\0yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NDial[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NDial::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NDial::staticMetaObject = { { - &QDial::staticMetaObject, - qt_meta_stringdata_NDial.data, - qt_meta_data_NDial, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NDial::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NDial::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NDial.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QDial::qt_metacast(_clname); -} - -int NDial::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QDial::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nlabel_moc.cpp b/src/cpp/autogen/nlabel_moc.cpp deleted file mode 100644 index 7d1674f427..0000000000 --- a/src/cpp/autogen/nlabel_moc.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nlabel.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QLabel/nlabel.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nlabel.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NLabel_t { - QByteArrayData data[47]; - char stringdata0[543]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NLabel_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NLabel_t qt_meta_stringdata_NLabel = { - { -QT_MOC_LITERAL(0, 0, 6), // "NLabel" -QT_MOC_LITERAL(1, 7, 8), // "yDisplay" -QT_MOC_LITERAL(2, 16, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 28, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 42, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 53, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 69, 10), // "yDirection" -QT_MOC_LITERAL(7, 80, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 95, 9), // "yOverflow" -QT_MOC_LITERAL(9, 105, 9), // "yPosition" -QT_MOC_LITERAL(10, 115, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 125, 5), // "yFlex" -QT_MOC_LITERAL(12, 131, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 141, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 153, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 166, 4), // "yTop" -QT_MOC_LITERAL(16, 171, 6), // "yRight" -QT_MOC_LITERAL(17, 178, 7), // "yBottom" -QT_MOC_LITERAL(18, 186, 5), // "yLeft" -QT_MOC_LITERAL(19, 192, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 203, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 213, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 224, 6), // "yWidth" -QT_MOC_LITERAL(23, 231, 7), // "yHeight" -QT_MOC_LITERAL(24, 239, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 249, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 260, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 272, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 286, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 301, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 314, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 333, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 350, 8), // "yPadding" -QT_MOC_LITERAL(33, 359, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 370, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 383, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 397, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 409, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 427, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 443, 7), // "yMargin" -QT_MOC_LITERAL(40, 451, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 462, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 475, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 489, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 501, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 519, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 535, 7) // "yBorder" - - }, - "NLabel\0yDisplay\0yAlignItems\0yAlignContent\0" - "yAlignSelf\0yJustifyContent\0yDirection\0" - "yFlexDirection\0yOverflow\0yPosition\0" - "yFlexWrap\0yFlex\0yFlexGrow\0yFlexShrink\0" - "yAspectRatio\0yTop\0yRight\0yBottom\0yLeft\0" - "yFlexBasis\0yMinWidth\0yMinHeight\0yWidth\0" - "yHeight\0yMaxWidth\0yMaxHeight\0yPaddingTop\0" - "yPaddingRight\0yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NLabel[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NLabel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NLabel::staticMetaObject = { { - &QLabel::staticMetaObject, - qt_meta_stringdata_NLabel.data, - qt_meta_data_NLabel, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NLabel::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NLabel::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NLabel.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QLabel::qt_metacast(_clname); -} - -int NLabel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QLabel::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nlineedit_moc.cpp b/src/cpp/autogen/nlineedit_moc.cpp deleted file mode 100644 index 1eadd7b592..0000000000 --- a/src/cpp/autogen/nlineedit_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nlineedit.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QLineEdit/nlineedit.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nlineedit.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NLineEdit_t { - QByteArrayData data[47]; - char stringdata0[546]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NLineEdit_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NLineEdit_t qt_meta_stringdata_NLineEdit = { - { -QT_MOC_LITERAL(0, 0, 9), // "NLineEdit" -QT_MOC_LITERAL(1, 10, 8), // "yDisplay" -QT_MOC_LITERAL(2, 19, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 31, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 45, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 56, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 72, 10), // "yDirection" -QT_MOC_LITERAL(7, 83, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 98, 9), // "yOverflow" -QT_MOC_LITERAL(9, 108, 9), // "yPosition" -QT_MOC_LITERAL(10, 118, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 128, 5), // "yFlex" -QT_MOC_LITERAL(12, 134, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 144, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 156, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 169, 4), // "yTop" -QT_MOC_LITERAL(16, 174, 6), // "yRight" -QT_MOC_LITERAL(17, 181, 7), // "yBottom" -QT_MOC_LITERAL(18, 189, 5), // "yLeft" -QT_MOC_LITERAL(19, 195, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 206, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 216, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 227, 6), // "yWidth" -QT_MOC_LITERAL(23, 234, 7), // "yHeight" -QT_MOC_LITERAL(24, 242, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 252, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 263, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 275, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 289, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 304, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 317, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 336, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 353, 8), // "yPadding" -QT_MOC_LITERAL(33, 362, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 373, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 386, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 400, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 412, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 430, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 446, 7), // "yMargin" -QT_MOC_LITERAL(40, 454, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 465, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 478, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 492, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 504, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 522, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 538, 7) // "yBorder" - - }, - "NLineEdit\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NLineEdit[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NLineEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NLineEdit::staticMetaObject = { { - &QLineEdit::staticMetaObject, - qt_meta_stringdata_NLineEdit.data, - qt_meta_data_NLineEdit, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NLineEdit::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NLineEdit::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NLineEdit.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QLineEdit::qt_metacast(_clname); -} - -int NLineEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QLineEdit::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nmainwindow_moc.cpp b/src/cpp/autogen/nmainwindow_moc.cpp deleted file mode 100644 index ee0e00e8d7..0000000000 --- a/src/cpp/autogen/nmainwindow_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nmainwindow.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QMainWindow/nmainwindow.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nmainwindow.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NMainWindow_t { - QByteArrayData data[47]; - char stringdata0[548]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NMainWindow_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NMainWindow_t qt_meta_stringdata_NMainWindow = { - { -QT_MOC_LITERAL(0, 0, 11), // "NMainWindow" -QT_MOC_LITERAL(1, 12, 8), // "yDisplay" -QT_MOC_LITERAL(2, 21, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 33, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 47, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 58, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 74, 10), // "yDirection" -QT_MOC_LITERAL(7, 85, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 100, 9), // "yOverflow" -QT_MOC_LITERAL(9, 110, 9), // "yPosition" -QT_MOC_LITERAL(10, 120, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 130, 5), // "yFlex" -QT_MOC_LITERAL(12, 136, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 146, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 158, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 171, 4), // "yTop" -QT_MOC_LITERAL(16, 176, 6), // "yRight" -QT_MOC_LITERAL(17, 183, 7), // "yBottom" -QT_MOC_LITERAL(18, 191, 5), // "yLeft" -QT_MOC_LITERAL(19, 197, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 208, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 218, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 229, 6), // "yWidth" -QT_MOC_LITERAL(23, 236, 7), // "yHeight" -QT_MOC_LITERAL(24, 244, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 254, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 265, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 277, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 291, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 306, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 319, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 338, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 355, 8), // "yPadding" -QT_MOC_LITERAL(33, 364, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 375, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 388, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 402, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 414, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 432, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 448, 7), // "yMargin" -QT_MOC_LITERAL(40, 456, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 467, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 480, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 494, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 506, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 524, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 540, 7) // "yBorder" - - }, - "NMainWindow\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NMainWindow[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NMainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NMainWindow::staticMetaObject = { { - &QMainWindow::staticMetaObject, - qt_meta_stringdata_NMainWindow.data, - qt_meta_data_NMainWindow, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NMainWindow::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NMainWindow::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NMainWindow.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QMainWindow::qt_metacast(_clname); -} - -int NMainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QMainWindow::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nplaintextedit_moc.cpp b/src/cpp/autogen/nplaintextedit_moc.cpp deleted file mode 100644 index ab97aed691..0000000000 --- a/src/cpp/autogen/nplaintextedit_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nplaintextedit.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QPlainTextEdit/nplaintextedit.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nplaintextedit.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NPlainTextEdit_t { - QByteArrayData data[47]; - char stringdata0[551]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NPlainTextEdit_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NPlainTextEdit_t qt_meta_stringdata_NPlainTextEdit = { - { -QT_MOC_LITERAL(0, 0, 14), // "NPlainTextEdit" -QT_MOC_LITERAL(1, 15, 8), // "yDisplay" -QT_MOC_LITERAL(2, 24, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 36, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 50, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 61, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 77, 10), // "yDirection" -QT_MOC_LITERAL(7, 88, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 103, 9), // "yOverflow" -QT_MOC_LITERAL(9, 113, 9), // "yPosition" -QT_MOC_LITERAL(10, 123, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 133, 5), // "yFlex" -QT_MOC_LITERAL(12, 139, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 149, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 161, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 174, 4), // "yTop" -QT_MOC_LITERAL(16, 179, 6), // "yRight" -QT_MOC_LITERAL(17, 186, 7), // "yBottom" -QT_MOC_LITERAL(18, 194, 5), // "yLeft" -QT_MOC_LITERAL(19, 200, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 211, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 221, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 232, 6), // "yWidth" -QT_MOC_LITERAL(23, 239, 7), // "yHeight" -QT_MOC_LITERAL(24, 247, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 257, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 268, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 280, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 294, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 309, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 322, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 341, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 358, 8), // "yPadding" -QT_MOC_LITERAL(33, 367, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 378, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 391, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 405, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 417, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 435, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 451, 7), // "yMargin" -QT_MOC_LITERAL(40, 459, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 470, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 483, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 497, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 509, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 527, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 543, 7) // "yBorder" - - }, - "NPlainTextEdit\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NPlainTextEdit[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NPlainTextEdit::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NPlainTextEdit::staticMetaObject = { { - &QPlainTextEdit::staticMetaObject, - qt_meta_stringdata_NPlainTextEdit.data, - qt_meta_data_NPlainTextEdit, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NPlainTextEdit::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NPlainTextEdit::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NPlainTextEdit.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QPlainTextEdit::qt_metacast(_clname); -} - -int NPlainTextEdit::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QPlainTextEdit::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nprogressbar_moc.cpp b/src/cpp/autogen/nprogressbar_moc.cpp deleted file mode 100644 index bc0c73d040..0000000000 --- a/src/cpp/autogen/nprogressbar_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nprogressbar.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QProgressBar/nprogressbar.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nprogressbar.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NProgressBar_t { - QByteArrayData data[47]; - char stringdata0[549]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NProgressBar_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NProgressBar_t qt_meta_stringdata_NProgressBar = { - { -QT_MOC_LITERAL(0, 0, 12), // "NProgressBar" -QT_MOC_LITERAL(1, 13, 8), // "yDisplay" -QT_MOC_LITERAL(2, 22, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 34, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 48, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 59, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 75, 10), // "yDirection" -QT_MOC_LITERAL(7, 86, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 101, 9), // "yOverflow" -QT_MOC_LITERAL(9, 111, 9), // "yPosition" -QT_MOC_LITERAL(10, 121, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 131, 5), // "yFlex" -QT_MOC_LITERAL(12, 137, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 147, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 159, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 172, 4), // "yTop" -QT_MOC_LITERAL(16, 177, 6), // "yRight" -QT_MOC_LITERAL(17, 184, 7), // "yBottom" -QT_MOC_LITERAL(18, 192, 5), // "yLeft" -QT_MOC_LITERAL(19, 198, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 209, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 219, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 230, 6), // "yWidth" -QT_MOC_LITERAL(23, 237, 7), // "yHeight" -QT_MOC_LITERAL(24, 245, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 255, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 266, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 278, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 292, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 307, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 320, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 339, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 356, 8), // "yPadding" -QT_MOC_LITERAL(33, 365, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 376, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 389, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 403, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 415, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 433, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 449, 7), // "yMargin" -QT_MOC_LITERAL(40, 457, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 468, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 481, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 495, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 507, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 525, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 541, 7) // "yBorder" - - }, - "NProgressBar\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NProgressBar[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NProgressBar::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NProgressBar::staticMetaObject = { { - &QProgressBar::staticMetaObject, - qt_meta_stringdata_NProgressBar.data, - qt_meta_data_NProgressBar, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NProgressBar::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NProgressBar::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NProgressBar.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QProgressBar::qt_metacast(_clname); -} - -int NProgressBar::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QProgressBar::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/npushbutton_moc.cpp b/src/cpp/autogen/npushbutton_moc.cpp deleted file mode 100644 index b8e70db621..0000000000 --- a/src/cpp/autogen/npushbutton_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'npushbutton.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QPushButton/npushbutton.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'npushbutton.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NPushButton_t { - QByteArrayData data[47]; - char stringdata0[548]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NPushButton_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NPushButton_t qt_meta_stringdata_NPushButton = { - { -QT_MOC_LITERAL(0, 0, 11), // "NPushButton" -QT_MOC_LITERAL(1, 12, 8), // "yDisplay" -QT_MOC_LITERAL(2, 21, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 33, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 47, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 58, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 74, 10), // "yDirection" -QT_MOC_LITERAL(7, 85, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 100, 9), // "yOverflow" -QT_MOC_LITERAL(9, 110, 9), // "yPosition" -QT_MOC_LITERAL(10, 120, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 130, 5), // "yFlex" -QT_MOC_LITERAL(12, 136, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 146, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 158, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 171, 4), // "yTop" -QT_MOC_LITERAL(16, 176, 6), // "yRight" -QT_MOC_LITERAL(17, 183, 7), // "yBottom" -QT_MOC_LITERAL(18, 191, 5), // "yLeft" -QT_MOC_LITERAL(19, 197, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 208, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 218, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 229, 6), // "yWidth" -QT_MOC_LITERAL(23, 236, 7), // "yHeight" -QT_MOC_LITERAL(24, 244, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 254, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 265, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 277, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 291, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 306, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 319, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 338, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 355, 8), // "yPadding" -QT_MOC_LITERAL(33, 364, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 375, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 388, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 402, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 414, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 432, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 448, 7), // "yMargin" -QT_MOC_LITERAL(40, 456, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 467, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 480, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 494, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 506, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 524, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 540, 7) // "yBorder" - - }, - "NPushButton\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NPushButton[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NPushButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NPushButton::staticMetaObject = { { - &QPushButton::staticMetaObject, - qt_meta_stringdata_NPushButton.data, - qt_meta_data_NPushButton, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NPushButton::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NPushButton::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NPushButton.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QPushButton::qt_metacast(_clname); -} - -int NPushButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QPushButton::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nradiobutton_moc.cpp b/src/cpp/autogen/nradiobutton_moc.cpp deleted file mode 100644 index 520f5765c1..0000000000 --- a/src/cpp/autogen/nradiobutton_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nradiobutton.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QRadioButton/nradiobutton.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nradiobutton.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NRadioButton_t { - QByteArrayData data[47]; - char stringdata0[549]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NRadioButton_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NRadioButton_t qt_meta_stringdata_NRadioButton = { - { -QT_MOC_LITERAL(0, 0, 12), // "NRadioButton" -QT_MOC_LITERAL(1, 13, 8), // "yDisplay" -QT_MOC_LITERAL(2, 22, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 34, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 48, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 59, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 75, 10), // "yDirection" -QT_MOC_LITERAL(7, 86, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 101, 9), // "yOverflow" -QT_MOC_LITERAL(9, 111, 9), // "yPosition" -QT_MOC_LITERAL(10, 121, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 131, 5), // "yFlex" -QT_MOC_LITERAL(12, 137, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 147, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 159, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 172, 4), // "yTop" -QT_MOC_LITERAL(16, 177, 6), // "yRight" -QT_MOC_LITERAL(17, 184, 7), // "yBottom" -QT_MOC_LITERAL(18, 192, 5), // "yLeft" -QT_MOC_LITERAL(19, 198, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 209, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 219, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 230, 6), // "yWidth" -QT_MOC_LITERAL(23, 237, 7), // "yHeight" -QT_MOC_LITERAL(24, 245, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 255, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 266, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 278, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 292, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 307, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 320, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 339, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 356, 8), // "yPadding" -QT_MOC_LITERAL(33, 365, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 376, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 389, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 403, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 415, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 433, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 449, 7), // "yMargin" -QT_MOC_LITERAL(40, 457, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 468, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 481, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 495, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 507, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 525, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 541, 7) // "yBorder" - - }, - "NRadioButton\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NRadioButton[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NRadioButton::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NRadioButton::staticMetaObject = { { - &QRadioButton::staticMetaObject, - qt_meta_stringdata_NRadioButton.data, - qt_meta_data_NRadioButton, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NRadioButton::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NRadioButton::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NRadioButton.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QRadioButton::qt_metacast(_clname); -} - -int NRadioButton::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QRadioButton::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nscrollarea_moc.cpp b/src/cpp/autogen/nscrollarea_moc.cpp deleted file mode 100644 index 2bbd62a39a..0000000000 --- a/src/cpp/autogen/nscrollarea_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nscrollarea.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QScrollArea/nscrollarea.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nscrollarea.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NScrollArea_t { - QByteArrayData data[47]; - char stringdata0[548]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NScrollArea_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NScrollArea_t qt_meta_stringdata_NScrollArea = { - { -QT_MOC_LITERAL(0, 0, 11), // "NScrollArea" -QT_MOC_LITERAL(1, 12, 8), // "yDisplay" -QT_MOC_LITERAL(2, 21, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 33, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 47, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 58, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 74, 10), // "yDirection" -QT_MOC_LITERAL(7, 85, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 100, 9), // "yOverflow" -QT_MOC_LITERAL(9, 110, 9), // "yPosition" -QT_MOC_LITERAL(10, 120, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 130, 5), // "yFlex" -QT_MOC_LITERAL(12, 136, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 146, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 158, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 171, 4), // "yTop" -QT_MOC_LITERAL(16, 176, 6), // "yRight" -QT_MOC_LITERAL(17, 183, 7), // "yBottom" -QT_MOC_LITERAL(18, 191, 5), // "yLeft" -QT_MOC_LITERAL(19, 197, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 208, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 218, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 229, 6), // "yWidth" -QT_MOC_LITERAL(23, 236, 7), // "yHeight" -QT_MOC_LITERAL(24, 244, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 254, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 265, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 277, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 291, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 306, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 319, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 338, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 355, 8), // "yPadding" -QT_MOC_LITERAL(33, 364, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 375, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 388, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 402, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 414, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 432, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 448, 7), // "yMargin" -QT_MOC_LITERAL(40, 456, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 467, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 480, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 494, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 506, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 524, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 540, 7) // "yBorder" - - }, - "NScrollArea\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NScrollArea[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NScrollArea::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NScrollArea::staticMetaObject = { { - &QScrollArea::staticMetaObject, - qt_meta_stringdata_NScrollArea.data, - qt_meta_data_NScrollArea, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NScrollArea::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NScrollArea::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NScrollArea.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QScrollArea::qt_metacast(_clname); -} - -int NScrollArea::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QScrollArea::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nspinbox_moc.cpp b/src/cpp/autogen/nspinbox_moc.cpp deleted file mode 100644 index 16dbd0355e..0000000000 --- a/src/cpp/autogen/nspinbox_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nspinbox.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QSpinBox/nspinbox.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nspinbox.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NSpinBox_t { - QByteArrayData data[47]; - char stringdata0[545]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NSpinBox_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NSpinBox_t qt_meta_stringdata_NSpinBox = { - { -QT_MOC_LITERAL(0, 0, 8), // "NSpinBox" -QT_MOC_LITERAL(1, 9, 8), // "yDisplay" -QT_MOC_LITERAL(2, 18, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 30, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 44, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 55, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 71, 10), // "yDirection" -QT_MOC_LITERAL(7, 82, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 97, 9), // "yOverflow" -QT_MOC_LITERAL(9, 107, 9), // "yPosition" -QT_MOC_LITERAL(10, 117, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 127, 5), // "yFlex" -QT_MOC_LITERAL(12, 133, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 143, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 155, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 168, 4), // "yTop" -QT_MOC_LITERAL(16, 173, 6), // "yRight" -QT_MOC_LITERAL(17, 180, 7), // "yBottom" -QT_MOC_LITERAL(18, 188, 5), // "yLeft" -QT_MOC_LITERAL(19, 194, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 205, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 215, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 226, 6), // "yWidth" -QT_MOC_LITERAL(23, 233, 7), // "yHeight" -QT_MOC_LITERAL(24, 241, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 251, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 262, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 274, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 288, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 303, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 316, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 335, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 352, 8), // "yPadding" -QT_MOC_LITERAL(33, 361, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 372, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 385, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 399, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 411, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 429, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 445, 7), // "yMargin" -QT_MOC_LITERAL(40, 453, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 464, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 477, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 491, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 503, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 521, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 537, 7) // "yBorder" - - }, - "NSpinBox\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NSpinBox[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NSpinBox::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NSpinBox::staticMetaObject = { { - &QSpinBox::staticMetaObject, - qt_meta_stringdata_NSpinBox.data, - qt_meta_data_NSpinBox, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NSpinBox::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NSpinBox::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NSpinBox.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QSpinBox::qt_metacast(_clname); -} - -int NSpinBox::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QSpinBox::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/autogen/nwidget_moc.cpp b/src/cpp/autogen/nwidget_moc.cpp deleted file mode 100644 index dd46532ce2..0000000000 --- a/src/cpp/autogen/nwidget_moc.cpp +++ /dev/null @@ -1,336 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'nwidget.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QWidget/nwidget.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'nwidget.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NWidget_t { - QByteArrayData data[47]; - char stringdata0[544]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NWidget_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NWidget_t qt_meta_stringdata_NWidget = { - { -QT_MOC_LITERAL(0, 0, 7), // "NWidget" -QT_MOC_LITERAL(1, 8, 8), // "yDisplay" -QT_MOC_LITERAL(2, 17, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 29, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 43, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 54, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 70, 10), // "yDirection" -QT_MOC_LITERAL(7, 81, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 96, 9), // "yOverflow" -QT_MOC_LITERAL(9, 106, 9), // "yPosition" -QT_MOC_LITERAL(10, 116, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 126, 5), // "yFlex" -QT_MOC_LITERAL(12, 132, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 142, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 154, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 167, 4), // "yTop" -QT_MOC_LITERAL(16, 172, 6), // "yRight" -QT_MOC_LITERAL(17, 179, 7), // "yBottom" -QT_MOC_LITERAL(18, 187, 5), // "yLeft" -QT_MOC_LITERAL(19, 193, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 204, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 214, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 225, 6), // "yWidth" -QT_MOC_LITERAL(23, 232, 7), // "yHeight" -QT_MOC_LITERAL(24, 240, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 250, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 261, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 273, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 287, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 302, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 315, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 334, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 351, 8), // "yPadding" -QT_MOC_LITERAL(33, 360, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 371, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 384, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 398, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 410, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 428, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 444, 7), // "yMargin" -QT_MOC_LITERAL(40, 452, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 463, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 476, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 490, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 502, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 520, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 536, 7) // "yBorder" - - }, - "NWidget\0yDisplay\0yAlignItems\0yAlignContent\0" - "yAlignSelf\0yJustifyContent\0yDirection\0" - "yFlexDirection\0yOverflow\0yPosition\0" - "yFlexWrap\0yFlex\0yFlexGrow\0yFlexShrink\0" - "yAspectRatio\0yTop\0yRight\0yBottom\0yLeft\0" - "yFlexBasis\0yMinWidth\0yMinHeight\0yWidth\0" - "yHeight\0yMaxWidth\0yMaxHeight\0yPaddingTop\0" - "yPaddingRight\0yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NWidget[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NWidget::staticMetaObject = { { - &QWidget::staticMetaObject, - qt_meta_stringdata_NWidget.data, - qt_meta_data_NWidget, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NWidget::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NWidget::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NWidget.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QWidget::qt_metacast(_clname); -} - -int NWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QWidget::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/cpp/core/NodeWidget/nodewidget.h b/src/cpp/core/NodeWidget/nodewidget.h index ca16ecbbf5..51e02697c3 100644 --- a/src/cpp/core/NodeWidget/nodewidget.h +++ b/src/cpp/core/NodeWidget/nodewidget.h @@ -12,7 +12,6 @@ class NodeWidget : public YogaWidget, public EventWidget { #ifndef NODEWIDGET_IMPLEMENTATIONS #define NODEWIDGET_IMPLEMENTATIONS(BaseWidgetName) \ \ -Q_OBJECT \ public: \ SET_YOGA_WIDGET_Q_PROPERTIES \ EVENTWIDGET_IMPLEMENTATIONS(BaseWidgetName) \ From 5e6dd2ad464da456d50ed8a5d89edc3a6869dc6e Mon Sep 17 00:00:00 2001 From: Atul R Date: Wed, 18 Sep 2019 23:49:32 +0200 Subject: [PATCH 086/891] rename qtnode to nodegui_core --- CMakeLists.txt | 29 +++++++++++++---------------- config/qt.cmake | 11 +++++++++-- src/lib/core/addon.ts | 2 +- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index aafd1f7775..4a30f3f554 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,12 +5,9 @@ else() cmake_policy(VERSION 3.15) endif() -# Find including in corresponding build directories set(CMAKE_INCLUDE_CURRENT_DIR ON) +# Need for automatic moc. Moc executable path is set in qt.cmake set(CMAKE_AUTOMOC ON) -set(CMAKE_AUTOUIC OFF) -set(CMAKE_AUTORCC OFF) -set(CMAKE_AUTOMOC_RELAXED_MODE ON) set(QT_VERSION_MAJOR 5) add_executable(Qt5::moc IMPORTED) @@ -18,14 +15,13 @@ project(NodeGUI VERSION 1.0 ) -set(ADDON_NAME "qtnode") +set(CORE_WIDGETS_ADDON "nodegui_core") # --------------------------------------- -add_library(${ADDON_NAME} SHARED +add_library(${CORE_WIDGETS_ADDON} SHARED "${CMAKE_JS_SRC}" "${PROJECT_SOURCE_DIR}/src/cpp/main.cpp" - # core - # non wrapped + # core internals "${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexitem.cpp" @@ -33,7 +29,7 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp" - # deps + # core deps "${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp" "${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp" "${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp" @@ -46,7 +42,7 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp" "${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp" "${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp" - # wrapped cpps. Move non wrapped ones to shared gypi + # wrapped cpps "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" @@ -69,7 +65,7 @@ add_library(${ADDON_NAME} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" - # moc + # Custom widgets "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/nwidget.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/nlabel.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp" @@ -86,21 +82,22 @@ add_library(${ADDON_NAME} SHARED # common include(./config/common.cmake) -AddCommonConfig(${ADDON_NAME}) +AddCommonConfig(${CORE_WIDGETS_ADDON}) # qt include(./config/qt.cmake) -AddQtSupport(${ADDON_NAME}) +AddQtSupport(${CORE_WIDGETS_ADDON}) + # napi include(./config/napi.cmake) -AddNapiSupport(${ADDON_NAME}) +AddNapiSupport(${CORE_WIDGETS_ADDON}) -target_include_directories(${ADDON_NAME} PRIVATE +target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_INC}" "${PROJECT_SOURCE_DIR}" "${PROJECT_SOURCE_DIR}/deps" ) -target_link_libraries(${ADDON_NAME} PRIVATE +target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_LIB}" ) \ No newline at end of file diff --git a/config/qt.cmake b/config/qt.cmake index d3e1b47621..868441613f 100644 --- a/config/qt.cmake +++ b/config/qt.cmake @@ -8,10 +8,9 @@ function(AddQtSupport addonName) string(REPLACE "\n" "" QT_HOME_DIR "${QT_HOME_DIR}") string(REPLACE "\"" "" QT_HOME_DIR "${QT_HOME_DIR}") - set_property(TARGET Qt5::moc PROPERTY IMPORTED_LOCATION ${QT_HOME_DIR}/bin/moc) - if (APPLE) # createQtMacSymlinks() + set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}/bin/moc") target_include_directories(${addonName} PRIVATE "${QT_HOME_DIR}/include" @@ -27,6 +26,8 @@ function(AddQtSupport addonName) endif() if (WIN32) + set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}\\bin\\moc.exe") + target_include_directories(${addonName} PRIVATE "${QT_HOME_DIR}\\include" "${QT_HOME_DIR}\\include\\QtCore" @@ -45,6 +46,8 @@ function(AddQtSupport addonName) endif() if(LINUX) + set(CUSTOM_QT_MOC_PATH "${QT_HOME_DIR}/bin/moc") + target_include_directories(${addonName} PRIVATE "${QT_HOME_DIR}/include" "${QT_HOME_DIR}/include/QtCore" @@ -57,6 +60,10 @@ function(AddQtSupport addonName) "${QT_HOME_DIR}/lib/libQt5Widgets.so" ) endif() + + # set custom moc executable location + set_target_properties(Qt5::moc PROPERTIES IMPORTED_LOCATION "${CUSTOM_QT_MOC_PATH}") + endfunction(AddQtSupport addonName) # function(createQtMacSymlinks) diff --git a/src/lib/core/addon.ts b/src/lib/core/addon.ts index a38d93de5b..54fc192cac 100644 --- a/src/lib/core/addon.ts +++ b/src/lib/core/addon.ts @@ -1,3 +1,3 @@ -const addon = require("../../../build/Release/qtnode.node"); +const addon = require("../../../build/Release/nodegui_core.node"); export default addon; From 495071089a55ee40124a59abd6314ab90dcec4a6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Fri, 20 Sep 2019 23:45:11 +0200 Subject: [PATCH 087/891] move ntabwidget over to cmake --- CMakeLists.txt | 1 + src/cpp/QtWidgets/QTabWidget/{ntabwidget.h => ntabwidget.hpp} | 1 + src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) rename src/cpp/QtWidgets/QTabWidget/{ntabwidget.h => ntabwidget.hpp} (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a30f3f554..1654da0352 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,6 +78,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp" ) # common diff --git a/src/cpp/QtWidgets/QTabWidget/ntabwidget.h b/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp similarity index 99% rename from src/cpp/QtWidgets/QTabWidget/ntabwidget.h rename to src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp index 221eed0882..b358d08015 100644 --- a/src/cpp/QtWidgets/QTabWidget/ntabwidget.h +++ b/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp @@ -6,6 +6,7 @@ class NTabWidget: public QTabWidget, public NodeWidget { + Q_OBJECT NODEWIDGET_IMPLEMENTATIONS(QTabWidget) public: using QTabWidget::QTabWidget; //inherit all constructors of QTabWidget diff --git a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h index c12540498c..765bb076a6 100644 --- a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h +++ b/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h @@ -1,7 +1,7 @@ #pragma once #include -#include "ntabwidget.h" +#include "ntabwidget.hpp" #include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" #include "src/cpp/Extras/Utils/nutils.h" From 12b08baed9d3ba78f28efba790c310b522982eac Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 21 Sep 2019 00:05:46 +0200 Subject: [PATCH 088/891] Cleans up addon import --- src/lib/QtGui/QApplication/index.ts | 4 +- src/lib/QtGui/QClipboard/index.ts | 2 +- src/lib/QtGui/QCursor/index.ts | 6 +-- src/lib/QtGui/QEvent/QKeyEvent/index.ts | 2 +- src/lib/QtGui/QIcon/index.ts | 2 +- src/lib/QtGui/QPixmap/index.ts | 4 +- src/lib/QtWidgets/QCheckBox/index.ts | 2 +- src/lib/QtWidgets/QDial/index.ts | 2 +- src/lib/QtWidgets/QGridLayout/index.ts | 2 +- src/lib/QtWidgets/QLabel/index.ts | 2 +- src/lib/QtWidgets/QLineEdit/index.ts | 2 +- src/lib/QtWidgets/QMainWindow/index.ts | 2 +- src/lib/QtWidgets/QPlainTextEdit/index.ts | 2 +- src/lib/QtWidgets/QProgressBar/index.ts | 2 +- src/lib/QtWidgets/QPushButton/index.ts | 2 +- src/lib/QtWidgets/QRadioButton/index.ts | 2 +- src/lib/QtWidgets/QScrollArea/index.ts | 2 +- src/lib/QtWidgets/QSpinBox/index.ts | 2 +- src/lib/QtWidgets/QTabWidget/index.ts | 2 +- src/lib/QtWidgets/QWidget/index.ts | 4 +- src/lib/core/FlexLayout/index.ts | 2 +- src/lib/{core => utils}/addon.ts | 0 src/lib/{utils.ts => utils/helpers.ts} | 2 +- tsconfig.json | 66 +++-------------------- 24 files changed, 35 insertions(+), 85 deletions(-) rename src/lib/{core => utils}/addon.ts (100%) rename src/lib/{utils.ts => utils/helpers.ts} (76%) diff --git a/src/lib/QtGui/QApplication/index.ts b/src/lib/QtGui/QApplication/index.ts index cca01ed5c9..22b7e2165b 100644 --- a/src/lib/QtGui/QApplication/index.ts +++ b/src/lib/QtGui/QApplication/index.ts @@ -1,6 +1,6 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { Component, NativeElement } from "../../core/Component"; -import { checkIfNativeElement } from "../../utils"; +import { checkIfNativeElement } from "../../utils/helpers"; import { QClipboard } from "../QClipboard"; type arg = NativeElement; diff --git a/src/lib/QtGui/QClipboard/index.ts b/src/lib/QtGui/QClipboard/index.ts index e2a871325a..caaa0eb3ef 100644 --- a/src/lib/QtGui/QClipboard/index.ts +++ b/src/lib/QtGui/QClipboard/index.ts @@ -1,5 +1,5 @@ import { Component, NativeElement } from "../../core/Component"; -import { checkIfNativeElement } from "../../utils"; +import { checkIfNativeElement } from "../../utils/helpers"; export class QClipboard extends Component { native: NativeElement; diff --git a/src/lib/QtGui/QCursor/index.ts b/src/lib/QtGui/QCursor/index.ts index 352e3d62ee..e792f50b27 100644 --- a/src/lib/QtGui/QCursor/index.ts +++ b/src/lib/QtGui/QCursor/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { Component, NativeElement } from "../../core/Component"; import { QPixmap } from "../QPixmap"; @@ -15,8 +15,8 @@ export class QCursor extends Component { } pos = (): { x: number; y: number } => { return this.native.pos(); - } + }; setPos = (x: number, y: number) => { return this.native.setPos(x, y); - } + }; } diff --git a/src/lib/QtGui/QEvent/QKeyEvent/index.ts b/src/lib/QtGui/QEvent/QKeyEvent/index.ts index 3966410ec1..63f914bd65 100644 --- a/src/lib/QtGui/QEvent/QKeyEvent/index.ts +++ b/src/lib/QtGui/QEvent/QKeyEvent/index.ts @@ -1,4 +1,4 @@ -import addon from "../../../core/addon"; +import addon from "../../../utils/addon"; import { NativeElement } from "../../../core/Component"; import { NativeEvent } from "../../../core/EventWidget"; diff --git a/src/lib/QtGui/QIcon/index.ts b/src/lib/QtGui/QIcon/index.ts index b35fe6351a..0408dcebb1 100644 --- a/src/lib/QtGui/QIcon/index.ts +++ b/src/lib/QtGui/QIcon/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { Component, NativeElement } from "../../core/Component"; import { QPixmap } from "../../QtGui/QPixmap"; diff --git a/src/lib/QtGui/QPixmap/index.ts b/src/lib/QtGui/QPixmap/index.ts index 7d7699fcfd..821bebbe53 100644 --- a/src/lib/QtGui/QPixmap/index.ts +++ b/src/lib/QtGui/QPixmap/index.ts @@ -1,7 +1,7 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { Component, NativeElement } from "../../core/Component"; import { AspectRatioMode } from "../../QtEnums"; -import { checkIfNativeElement } from "../../utils"; +import { checkIfNativeElement } from "../../utils/helpers"; type arg = string | NativeElement; export class QPixmap extends Component { diff --git a/src/lib/QtWidgets/QCheckBox/index.ts b/src/lib/QtWidgets/QCheckBox/index.ts index 29b6b8127f..df318da43e 100644 --- a/src/lib/QtWidgets/QCheckBox/index.ts +++ b/src/lib/QtWidgets/QCheckBox/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QDial/index.ts b/src/lib/QtWidgets/QDial/index.ts index dac398cfe7..bdfe3c3d4a 100644 --- a/src/lib/QtWidgets/QDial/index.ts +++ b/src/lib/QtWidgets/QDial/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QGridLayout/index.ts b/src/lib/QtWidgets/QGridLayout/index.ts index 0a91c0a564..98997e8485 100644 --- a/src/lib/QtWidgets/QGridLayout/index.ts +++ b/src/lib/QtWidgets/QGridLayout/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { NodeLayout } from "../QLayout"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QLabel/index.ts b/src/lib/QtWidgets/QLabel/index.ts index 14a518dedf..a24f4ed6fd 100644 --- a/src/lib/QtWidgets/QLabel/index.ts +++ b/src/lib/QtWidgets/QLabel/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QLineEdit/index.ts b/src/lib/QtWidgets/QLineEdit/index.ts index 52e67fa1b4..09449bfac8 100644 --- a/src/lib/QtWidgets/QLineEdit/index.ts +++ b/src/lib/QtWidgets/QLineEdit/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QMainWindow/index.ts b/src/lib/QtWidgets/QMainWindow/index.ts index 34e36d51f1..fd7ace615e 100644 --- a/src/lib/QtWidgets/QMainWindow/index.ts +++ b/src/lib/QtWidgets/QMainWindow/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QPlainTextEdit/index.ts b/src/lib/QtWidgets/QPlainTextEdit/index.ts index 65f2d9e571..e5357713e4 100644 --- a/src/lib/QtWidgets/QPlainTextEdit/index.ts +++ b/src/lib/QtWidgets/QPlainTextEdit/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QProgressBar/index.ts b/src/lib/QtWidgets/QProgressBar/index.ts index 1cc5081de1..5687c706cd 100644 --- a/src/lib/QtWidgets/QProgressBar/index.ts +++ b/src/lib/QtWidgets/QProgressBar/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QPushButton/index.ts b/src/lib/QtWidgets/QPushButton/index.ts index 926aeeabd7..5807b1842d 100644 --- a/src/lib/QtWidgets/QPushButton/index.ts +++ b/src/lib/QtWidgets/QPushButton/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QRadioButton/index.ts b/src/lib/QtWidgets/QRadioButton/index.ts index af1410657c..745c5ec3d1 100644 --- a/src/lib/QtWidgets/QRadioButton/index.ts +++ b/src/lib/QtWidgets/QRadioButton/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QScrollArea/index.ts b/src/lib/QtWidgets/QScrollArea/index.ts index 0859b366ce..b4f5784bd9 100644 --- a/src/lib/QtWidgets/QScrollArea/index.ts +++ b/src/lib/QtWidgets/QScrollArea/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QSpinBox/index.ts b/src/lib/QtWidgets/QSpinBox/index.ts index 76f9a04e20..f47c8e9c92 100644 --- a/src/lib/QtWidgets/QSpinBox/index.ts +++ b/src/lib/QtWidgets/QSpinBox/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QTabWidget/index.ts b/src/lib/QtWidgets/QTabWidget/index.ts index cb80aeba7d..0d87c01f73 100644 --- a/src/lib/QtWidgets/QTabWidget/index.ts +++ b/src/lib/QtWidgets/QTabWidget/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; import { BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; diff --git a/src/lib/QtWidgets/QWidget/index.ts b/src/lib/QtWidgets/QWidget/index.ts index 48caf7163d..1295fe3779 100644 --- a/src/lib/QtWidgets/QWidget/index.ts +++ b/src/lib/QtWidgets/QWidget/index.ts @@ -1,4 +1,4 @@ -import addon from "../../core/addon"; +import addon from "../../utils/addon"; import { NodeLayout } from "../QLayout"; import { EventWidget, BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; @@ -12,7 +12,7 @@ import { StyleSheet, prepareInlineStyleSheet } from "../../core/Style/StyleSheet"; -import { checkIfNativeElement } from "../../utils"; +import { checkIfNativeElement } from "../../utils/helpers"; // All Widgets should extend from NodeWidget // Implement all native QWidget methods here so that all widgets get access to those aswell export abstract class NodeWidget extends EventWidget { diff --git a/src/lib/core/FlexLayout/index.ts b/src/lib/core/FlexLayout/index.ts index 0824749e15..2f28210c06 100644 --- a/src/lib/core/FlexLayout/index.ts +++ b/src/lib/core/FlexLayout/index.ts @@ -1,4 +1,4 @@ -import addon from "../addon"; +import addon from "../../utils/addon"; import { NodeWidget } from "../../QtWidgets/QWidget"; import { NodeLayout } from "../../QtWidgets/QLayout"; import { FlexNode } from "../YogaWidget"; diff --git a/src/lib/core/addon.ts b/src/lib/utils/addon.ts similarity index 100% rename from src/lib/core/addon.ts rename to src/lib/utils/addon.ts diff --git a/src/lib/utils.ts b/src/lib/utils/helpers.ts similarity index 76% rename from src/lib/utils.ts rename to src/lib/utils/helpers.ts index 00f059216d..41ce065a00 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils/helpers.ts @@ -1,4 +1,4 @@ -import { NativeElement } from "./core/Component"; +import { NativeElement } from "../core/Component"; export const checkIfNativeElement = (arg: any) => { const nativeArg = arg as NativeElement; diff --git a/tsconfig.json b/tsconfig.json index f11ab04356..10d7bda8cb 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,63 +1,13 @@ { "compilerOptions": { - /* Basic Options */ - "target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */, - "module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */, - // "lib": [], /* Specify library files to be included in the compilation. */ - // "allowJs": true /* Allow javascript files to be compiled. */, - // "checkJs": true, /* Report errors in .js files. */ - // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ - "declaration": true /* Generates corresponding '.d.ts' file. */, - // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ - "sourceMap": true /* Generates corresponding '.map' file. */, - // "outFile": "./", /* Concatenate and emit output to single file. */ - "outDir": "./dist" /* Redirect output structure to the directory. */, - // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ - // "composite": true, /* Enable project compilation */ - // "incremental": true, /* Enable incremental compilation */ - // "tsBuildInfoFile": ".cache/tsconfig.tsbuildinfo" /* Specify file to store incremental compilation information */, - // "removeComments": true, /* Do not emit comments to output. */ - // "noEmit": true, /* Do not emit outputs. */ - // "importHelpers": true, /* Import emit helpers from 'tslib'. */ - // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ - // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ - - /* Strict Type-Checking Options */ - "strict": true /* Enable all strict type-checking options. */, - // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - // "strictNullChecks": true, /* Enable strict null checks. */ - // "strictFunctionTypes": true, /* Enable strict checking of function types. */ - // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ - // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ - // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ - // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ - - /* Additional Checks */ - // "noUnusedLocals": true, /* Report errors on unused locals. */ - // "noUnusedParameters": true, /* Report errors on unused parameters. */ - // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ - // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - - /* Module Resolution Options */ - "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, - // "baseUrl": "./" /* Base directory to resolve non-absolute module names. */, - // "paths": {} /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */, - // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ - // "typeRoots": [], /* List of folders to include type definitions from. */ - // "types": [] /* Type declaration files to be included in compilation. */, - // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ - "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, - // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ - - /* Source Map Options */ - // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ - // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ - // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ - // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ - - /* Experimental Options */ - // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ - // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + "target": "ES2015", + "module": "commonjs", + "declaration": true, + "sourceMap": true, + "outDir": "./dist", + "strict": true, + "moduleResolution": "node", + "esModuleInterop": true, "resolveJsonModule": true }, "include": ["src"] From 1acb9e722e38218366128874bc86e5faec24e682 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 21 Sep 2019 00:11:24 +0200 Subject: [PATCH 089/891] Adds exports and removed automoc script as we no longer need it (as cmake handles it for us) --- package.json | 1 - scripts/automoc.js | 75 ------- src/cpp/Extras/Utils/nutils.cpp | 2 - src/cpp/Extras/Utils/nutils.h | 1 - src/cpp/autogen/ntabwidget_moc.cpp | 337 ----------------------------- src/index.ts | 3 +- 6 files changed, 2 insertions(+), 417 deletions(-) delete mode 100644 scripts/automoc.js delete mode 100644 src/cpp/autogen/ntabwidget_moc.cpp diff --git a/package.json b/package.json index 46827b4a18..0ab9883127 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,6 @@ "postinstall": "npm run build:addon", "build": "tsc && npm run build:addon", "build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile", - "automoc": "node ./scripts/automoc.js", "docs": "serve docs" }, "dependencies": { diff --git a/scripts/automoc.js b/scripts/automoc.js deleted file mode 100644 index 1805095afb..0000000000 --- a/scripts/automoc.js +++ /dev/null @@ -1,75 +0,0 @@ -const path = require("path"); -const fs = require("fs"); -const childProcess = require("child_process"); -const { qtHome } = require("@nodegui/qode"); - -const ROOT_DIR = path.resolve(__dirname, "../"); -const MOC_AUTOGEN_DIR = path.resolve(ROOT_DIR, "src/cpp/autogen"); -const MOC_GYPI_FILE = path.resolve(ROOT_DIR, "config/moc.gypi"); - -const getConfig = () => { - const configFilePath = path.resolve(ROOT_DIR, "config/moc.json"); - return JSON.parse(fs.readFileSync(configFilePath)); -}; - -const generateCommand = (headerFilePath, includeFilePath) => { - const infilePath = path.resolve(ROOT_DIR, headerFilePath); - const parsed = path.parse(infilePath); - const outfilePath = path.format({ - dir: MOC_AUTOGEN_DIR, - name: `${parsed.name}_moc`, - ext: ".cpp" - }); - const command = `moc ${infilePath} -o ${outfilePath} --include ${includeFilePath}`; - return { - command, - infilePath, - outfilePath - }; -}; - -const generateMocGypiFile = outFilePaths => { - const sources = outFilePaths.map(eachOutFilePath => { - return path.relative(path.parse(MOC_GYPI_FILE).dir, eachOutFilePath); - }); - - const gypiConfig = { - sources: sources - }; - const comment = `# AUTOGENERATED FILE. DO NOT MODIFY . ALL CHANGES WILL BE LOST\n# RUN: npm run automoc after updating moc.json\n`; - console.log("Updating moc.gypi..."); - const fileContent = JSON.stringify(gypiConfig, null, 4); - fs.writeFileSync(MOC_GYPI_FILE, comment.concat(fileContent)); - console.log("Updated moc.gypi"); -}; - -const main = () => { - const config = getConfig(); - const includeFilePath = path.resolve(ROOT_DIR, config.include); - const outFiles = config.headers.map(eachHeaderPath => { - const { command, outfilePath } = generateCommand( - eachHeaderPath, - includeFilePath - ); - const mocPath = path.resolve(process.env.QT_INSTALL_DIR || qtHome, "bin"); - childProcess.exec( - command, - { - env: { - ...process.env, - PATH: `${mocPath}${path.delimiter}${process.env.PATH}` - } - }, - error => { - if (error) { - console.error(`exec error: ${error}`); - return; - } - } - ); - return outfilePath; - }); - generateMocGypiFile(outFiles); -}; - -main(); diff --git a/src/cpp/Extras/Utils/nutils.cpp b/src/cpp/Extras/Utils/nutils.cpp index 7c595bd568..8199ed9a16 100644 --- a/src/cpp/Extras/Utils/nutils.cpp +++ b/src/cpp/Extras/Utils/nutils.cpp @@ -3,8 +3,6 @@ #include #include "deps/spdlog/spdlog.h" -void extrautils::noop(){} - YGSize extrautils::measureQtWidget (YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode){ FlexLayout::NodeContext *ctx = FlexLayout::getNodeContext(node); if(ctx){ diff --git a/src/cpp/Extras/Utils/nutils.h b/src/cpp/Extras/Utils/nutils.h index a14944215f..3dc210687f 100644 --- a/src/cpp/Extras/Utils/nutils.h +++ b/src/cpp/Extras/Utils/nutils.h @@ -3,7 +3,6 @@ #include "src/cpp/core/FlexLayout/flexlayout.h" namespace extrautils { - void noop(); YGSize measureQtWidget (YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode); } diff --git a/src/cpp/autogen/ntabwidget_moc.cpp b/src/cpp/autogen/ntabwidget_moc.cpp deleted file mode 100644 index abe50a6028..0000000000 --- a/src/cpp/autogen/ntabwidget_moc.cpp +++ /dev/null @@ -1,337 +0,0 @@ -/**************************************************************************** -** Meta object code from reading C++ file 'ntabwidget.h' -** -** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0) -** -** WARNING! All changes made in this file will be lost! -*****************************************************************************/ - -#include -#include "../QtWidgets/QTabWidget/ntabwidget.h" -#include -#include -#if !defined(Q_MOC_OUTPUT_REVISION) -#error "The header file 'ntabwidget.h' doesn't include ." -#elif Q_MOC_OUTPUT_REVISION != 67 -#error "This file was generated using the moc from 5.13.0. It" -#error "cannot be used with the include files from this version of Qt." -#error "(The moc has changed too much.)" -#endif - -QT_BEGIN_MOC_NAMESPACE -QT_WARNING_PUSH -QT_WARNING_DISABLE_DEPRECATED -struct qt_meta_stringdata_NTabWidget_t { - QByteArrayData data[47]; - char stringdata0[547]; -}; -#define QT_MOC_LITERAL(idx, ofs, len) \ - Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \ - qptrdiff(offsetof(qt_meta_stringdata_NTabWidget_t, stringdata0) + ofs \ - - idx * sizeof(QByteArrayData)) \ - ) -static const qt_meta_stringdata_NTabWidget_t qt_meta_stringdata_NTabWidget = { - { -QT_MOC_LITERAL(0, 0, 10), // "NTabWidget" -QT_MOC_LITERAL(1, 11, 8), // "yDisplay" -QT_MOC_LITERAL(2, 20, 11), // "yAlignItems" -QT_MOC_LITERAL(3, 32, 13), // "yAlignContent" -QT_MOC_LITERAL(4, 46, 10), // "yAlignSelf" -QT_MOC_LITERAL(5, 57, 15), // "yJustifyContent" -QT_MOC_LITERAL(6, 73, 10), // "yDirection" -QT_MOC_LITERAL(7, 84, 14), // "yFlexDirection" -QT_MOC_LITERAL(8, 99, 9), // "yOverflow" -QT_MOC_LITERAL(9, 109, 9), // "yPosition" -QT_MOC_LITERAL(10, 119, 9), // "yFlexWrap" -QT_MOC_LITERAL(11, 129, 5), // "yFlex" -QT_MOC_LITERAL(12, 135, 9), // "yFlexGrow" -QT_MOC_LITERAL(13, 145, 11), // "yFlexShrink" -QT_MOC_LITERAL(14, 157, 12), // "yAspectRatio" -QT_MOC_LITERAL(15, 170, 4), // "yTop" -QT_MOC_LITERAL(16, 175, 6), // "yRight" -QT_MOC_LITERAL(17, 182, 7), // "yBottom" -QT_MOC_LITERAL(18, 190, 5), // "yLeft" -QT_MOC_LITERAL(19, 196, 10), // "yFlexBasis" -QT_MOC_LITERAL(20, 207, 9), // "yMinWidth" -QT_MOC_LITERAL(21, 217, 10), // "yMinHeight" -QT_MOC_LITERAL(22, 228, 6), // "yWidth" -QT_MOC_LITERAL(23, 235, 7), // "yHeight" -QT_MOC_LITERAL(24, 243, 9), // "yMaxWidth" -QT_MOC_LITERAL(25, 253, 10), // "yMaxHeight" -QT_MOC_LITERAL(26, 264, 11), // "yPaddingTop" -QT_MOC_LITERAL(27, 276, 13), // "yPaddingRight" -QT_MOC_LITERAL(28, 290, 14), // "yPaddingBottom" -QT_MOC_LITERAL(29, 305, 12), // "yPaddingLeft" -QT_MOC_LITERAL(30, 318, 18), // "yPaddingHorizontal" -QT_MOC_LITERAL(31, 337, 16), // "yPaddingVertical" -QT_MOC_LITERAL(32, 354, 8), // "yPadding" -QT_MOC_LITERAL(33, 363, 10), // "yMarginTop" -QT_MOC_LITERAL(34, 374, 12), // "yMarginRight" -QT_MOC_LITERAL(35, 387, 13), // "yMarginBottom" -QT_MOC_LITERAL(36, 401, 11), // "yMarginLeft" -QT_MOC_LITERAL(37, 413, 17), // "yMarginHorizontal" -QT_MOC_LITERAL(38, 431, 15), // "yMarginVertical" -QT_MOC_LITERAL(39, 447, 7), // "yMargin" -QT_MOC_LITERAL(40, 455, 10), // "yBorderTop" -QT_MOC_LITERAL(41, 466, 12), // "yBorderRight" -QT_MOC_LITERAL(42, 479, 13), // "yBorderBottom" -QT_MOC_LITERAL(43, 493, 11), // "yBorderLeft" -QT_MOC_LITERAL(44, 505, 17), // "yBorderHorizontal" -QT_MOC_LITERAL(45, 523, 15), // "yBorderVertical" -QT_MOC_LITERAL(46, 539, 7) // "yBorder" - - }, - "NTabWidget\0yDisplay\0yAlignItems\0" - "yAlignContent\0yAlignSelf\0yJustifyContent\0" - "yDirection\0yFlexDirection\0yOverflow\0" - "yPosition\0yFlexWrap\0yFlex\0yFlexGrow\0" - "yFlexShrink\0yAspectRatio\0yTop\0yRight\0" - "yBottom\0yLeft\0yFlexBasis\0yMinWidth\0" - "yMinHeight\0yWidth\0yHeight\0yMaxWidth\0" - "yMaxHeight\0yPaddingTop\0yPaddingRight\0" - "yPaddingBottom\0yPaddingLeft\0" - "yPaddingHorizontal\0yPaddingVertical\0" - "yPadding\0yMarginTop\0yMarginRight\0" - "yMarginBottom\0yMarginLeft\0yMarginHorizontal\0" - "yMarginVertical\0yMargin\0yBorderTop\0" - "yBorderRight\0yBorderBottom\0yBorderLeft\0" - "yBorderHorizontal\0yBorderVertical\0" - "yBorder" -}; -#undef QT_MOC_LITERAL - -static const uint qt_meta_data_NTabWidget[] = { - - // content: - 8, // revision - 0, // classname - 0, 0, // classinfo - 0, 0, // methods - 46, 14, // properties - 0, 0, // enums/sets - 0, 0, // constructors - 0, // flags - 0, // signalCount - - // properties: name, type, flags - 1, QMetaType::QString, 0x00095103, - 2, QMetaType::QString, 0x00095103, - 3, QMetaType::QString, 0x00095103, - 4, QMetaType::QString, 0x00095103, - 5, QMetaType::QString, 0x00095103, - 6, QMetaType::QString, 0x00095103, - 7, QMetaType::QString, 0x00095103, - 8, QMetaType::QString, 0x00095103, - 9, QMetaType::QString, 0x00095103, - 10, QMetaType::QString, 0x00095103, - 11, QMetaType::Float, 0x00095103, - 12, QMetaType::Float, 0x00095103, - 13, QMetaType::Float, 0x00095103, - 14, QMetaType::Float, 0x00095103, - 15, QMetaType::QString, 0x00095003, - 16, QMetaType::QString, 0x00095003, - 17, QMetaType::QString, 0x00095003, - 18, QMetaType::QString, 0x00095003, - 19, QMetaType::QString, 0x00095103, - 20, QMetaType::QString, 0x00095103, - 21, QMetaType::QString, 0x00095103, - 22, QMetaType::QString, 0x00095103, - 23, QMetaType::QString, 0x00095103, - 24, QMetaType::QString, 0x00095103, - 25, QMetaType::QString, 0x00095103, - 26, QMetaType::QString, 0x00095103, - 27, QMetaType::QString, 0x00095103, - 28, QMetaType::QString, 0x00095103, - 29, QMetaType::QString, 0x00095103, - 30, QMetaType::QString, 0x00095103, - 31, QMetaType::QString, 0x00095103, - 32, QMetaType::QString, 0x00095103, - 33, QMetaType::QString, 0x00095103, - 34, QMetaType::QString, 0x00095103, - 35, QMetaType::QString, 0x00095103, - 36, QMetaType::QString, 0x00095103, - 37, QMetaType::QString, 0x00095103, - 38, QMetaType::QString, 0x00095103, - 39, QMetaType::QString, 0x00095003, - 40, QMetaType::Float, 0x00095103, - 41, QMetaType::Float, 0x00095103, - 42, QMetaType::Float, 0x00095103, - 43, QMetaType::Float, 0x00095103, - 44, QMetaType::Float, 0x00095103, - 45, QMetaType::Float, 0x00095103, - 46, QMetaType::Float, 0x00095103, - - 0 // eod -}; - -void NTabWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) -{ - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: *reinterpret_cast< QString*>(_v) = _t->_yDisplay; break; - case 1: *reinterpret_cast< QString*>(_v) = _t->_yAlignItems; break; - case 2: *reinterpret_cast< QString*>(_v) = _t->_yAlignContent; break; - case 3: *reinterpret_cast< QString*>(_v) = _t->_yAlignSelf; break; - case 4: *reinterpret_cast< QString*>(_v) = _t->_yJustifyContent; break; - case 5: *reinterpret_cast< QString*>(_v) = _t->_yDirection; break; - case 6: *reinterpret_cast< QString*>(_v) = _t->_yFlexDirection; break; - case 7: *reinterpret_cast< QString*>(_v) = _t->_yOverflow; break; - case 8: *reinterpret_cast< QString*>(_v) = _t->_yPosition; break; - case 9: *reinterpret_cast< QString*>(_v) = _t->_yFlexWrap; break; - case 10: *reinterpret_cast< float*>(_v) = _t->_yFlex; break; - case 11: *reinterpret_cast< float*>(_v) = _t->_yFlexGrow; break; - case 12: *reinterpret_cast< float*>(_v) = _t->_yFlexShrink; break; - case 13: *reinterpret_cast< float*>(_v) = _t->_yAspectRatio; break; - case 14: *reinterpret_cast< QString*>(_v) = _t->_yTop; break; - case 15: *reinterpret_cast< QString*>(_v) = _t->_yRight; break; - case 16: *reinterpret_cast< QString*>(_v) = _t->_yBottom; break; - case 17: *reinterpret_cast< QString*>(_v) = _t->_yLeft; break; - case 18: *reinterpret_cast< QString*>(_v) = _t->_yFlexBasis; break; - case 19: *reinterpret_cast< QString*>(_v) = _t->_yMinWidth; break; - case 20: *reinterpret_cast< QString*>(_v) = _t->_yMinHeight; break; - case 21: *reinterpret_cast< QString*>(_v) = _t->_yWidth; break; - case 22: *reinterpret_cast< QString*>(_v) = _t->_yHeight; break; - case 23: *reinterpret_cast< QString*>(_v) = _t->_yMaxWidth; break; - case 24: *reinterpret_cast< QString*>(_v) = _t->_yMaxHeight; break; - case 25: *reinterpret_cast< QString*>(_v) = _t->_yPaddingTop; break; - case 26: *reinterpret_cast< QString*>(_v) = _t->_yPaddingRight; break; - case 27: *reinterpret_cast< QString*>(_v) = _t->_yPaddingBottom; break; - case 28: *reinterpret_cast< QString*>(_v) = _t->_yPaddingLeft; break; - case 29: *reinterpret_cast< QString*>(_v) = _t->_yPaddingHorizontal; break; - case 30: *reinterpret_cast< QString*>(_v) = _t->_yPaddingVertical; break; - case 31: *reinterpret_cast< QString*>(_v) = _t->_yPadding; break; - case 32: *reinterpret_cast< QString*>(_v) = _t->_yMarginTop; break; - case 33: *reinterpret_cast< QString*>(_v) = _t->_yMarginRight; break; - case 34: *reinterpret_cast< QString*>(_v) = _t->_yMarginBottom; break; - case 35: *reinterpret_cast< QString*>(_v) = _t->_yMarginLeft; break; - case 36: *reinterpret_cast< QString*>(_v) = _t->_yMarginHorizontal; break; - case 37: *reinterpret_cast< QString*>(_v) = _t->_yMarginVertical; break; - case 38: *reinterpret_cast< QString*>(_v) = _t->_yMargin; break; - case 39: *reinterpret_cast< float*>(_v) = _t->_yBorderTop; break; - case 40: *reinterpret_cast< float*>(_v) = _t->_yBorderRight; break; - case 41: *reinterpret_cast< float*>(_v) = _t->_yBorderBottom; break; - case 42: *reinterpret_cast< float*>(_v) = _t->_yBorderLeft; break; - case 43: *reinterpret_cast< float*>(_v) = _t->_yBorderHorizontal; break; - case 44: *reinterpret_cast< float*>(_v) = _t->_yBorderVertical; break; - case 45: *reinterpret_cast< float*>(_v) = _t->_yBorder; break; - default: break; - } - } else if (_c == QMetaObject::WriteProperty) { - auto *_t = static_cast(_o); - Q_UNUSED(_t) - void *_v = _a[0]; - switch (_id) { - case 0: _t->setYDisplay(*reinterpret_cast< QString*>(_v)); break; - case 1: _t->setYAlignItems(*reinterpret_cast< QString*>(_v)); break; - case 2: _t->setYAlignContent(*reinterpret_cast< QString*>(_v)); break; - case 3: _t->setYAlignSelf(*reinterpret_cast< QString*>(_v)); break; - case 4: _t->setYJustifyContent(*reinterpret_cast< QString*>(_v)); break; - case 5: _t->setYDirection(*reinterpret_cast< QString*>(_v)); break; - case 6: _t->setYFlexDirection(*reinterpret_cast< QString*>(_v)); break; - case 7: _t->setYOverflow(*reinterpret_cast< QString*>(_v)); break; - case 8: _t->setYPosition(*reinterpret_cast< QString*>(_v)); break; - case 9: _t->setYFlexWrap(*reinterpret_cast< QString*>(_v)); break; - case 10: _t->setYFlex(*reinterpret_cast< float*>(_v)); break; - case 11: _t->setYFlexGrow(*reinterpret_cast< float*>(_v)); break; - case 12: _t->setYFlexShrink(*reinterpret_cast< float*>(_v)); break; - case 13: _t->setYAspectRatio(*reinterpret_cast< float*>(_v)); break; - case 14: _t->setYNodeTop(*reinterpret_cast< QString*>(_v)); break; - case 15: _t->setYNodeRight(*reinterpret_cast< QString*>(_v)); break; - case 16: _t->setYNodeBottom(*reinterpret_cast< QString*>(_v)); break; - case 17: _t->setYNodeLeft(*reinterpret_cast< QString*>(_v)); break; - case 18: _t->setYFlexBasis(*reinterpret_cast< QString*>(_v)); break; - case 19: _t->setYMinWidth(*reinterpret_cast< QString*>(_v)); break; - case 20: _t->setYMinHeight(*reinterpret_cast< QString*>(_v)); break; - case 21: _t->setYWidth(*reinterpret_cast< QString*>(_v)); break; - case 22: _t->setYHeight(*reinterpret_cast< QString*>(_v)); break; - case 23: _t->setYMaxWidth(*reinterpret_cast< QString*>(_v)); break; - case 24: _t->setYMaxHeight(*reinterpret_cast< QString*>(_v)); break; - case 25: _t->setYPaddingTop(*reinterpret_cast< QString*>(_v)); break; - case 26: _t->setYPaddingRight(*reinterpret_cast< QString*>(_v)); break; - case 27: _t->setYPaddingBottom(*reinterpret_cast< QString*>(_v)); break; - case 28: _t->setYPaddingLeft(*reinterpret_cast< QString*>(_v)); break; - case 29: _t->setYPaddingHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 30: _t->setYPaddingVertical(*reinterpret_cast< QString*>(_v)); break; - case 31: _t->setYPadding(*reinterpret_cast< QString*>(_v)); break; - case 32: _t->setYMarginTop(*reinterpret_cast< QString*>(_v)); break; - case 33: _t->setYMarginRight(*reinterpret_cast< QString*>(_v)); break; - case 34: _t->setYMarginBottom(*reinterpret_cast< QString*>(_v)); break; - case 35: _t->setYMarginLeft(*reinterpret_cast< QString*>(_v)); break; - case 36: _t->setYMarginHorizontal(*reinterpret_cast< QString*>(_v)); break; - case 37: _t->setYMarginVertical(*reinterpret_cast< QString*>(_v)); break; - case 38: _t->setYMarginAll(*reinterpret_cast< QString*>(_v)); break; - case 39: _t->setYBorderTop(*reinterpret_cast< float*>(_v)); break; - case 40: _t->setYBorderRight(*reinterpret_cast< float*>(_v)); break; - case 41: _t->setYBorderBottom(*reinterpret_cast< float*>(_v)); break; - case 42: _t->setYBorderLeft(*reinterpret_cast< float*>(_v)); break; - case 43: _t->setYBorderHorizontal(*reinterpret_cast< float*>(_v)); break; - case 44: _t->setYBorderVertical(*reinterpret_cast< float*>(_v)); break; - case 45: _t->setYBorder(*reinterpret_cast< float*>(_v)); break; - default: break; - } - } else if (_c == QMetaObject::ResetProperty) { - } -#endif // QT_NO_PROPERTIES - Q_UNUSED(_o); - Q_UNUSED(_id); - Q_UNUSED(_c); - Q_UNUSED(_a); -} - -QT_INIT_METAOBJECT const QMetaObject NTabWidget::staticMetaObject = { { - &QTabWidget::staticMetaObject, - qt_meta_stringdata_NTabWidget.data, - qt_meta_data_NTabWidget, - qt_static_metacall, - nullptr, - nullptr -} }; - - -const QMetaObject *NTabWidget::metaObject() const -{ - return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; -} - -void *NTabWidget::qt_metacast(const char *_clname) -{ - if (!_clname) return nullptr; - if (!strcmp(_clname, qt_meta_stringdata_NTabWidget.stringdata0)) - return static_cast(this); - if (!strcmp(_clname, "NodeWidget")) - return static_cast< NodeWidget*>(this); - return QTabWidget::qt_metacast(_clname); -} - -int NTabWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) -{ - _id = QTabWidget::qt_metacall(_c, _id, _a); - if (_id < 0) - return _id; - -#ifndef QT_NO_PROPERTIES - if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty - || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) { - qt_static_metacall(this, _c, _id, _a); - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyDesignable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyScriptable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyStored) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyEditable) { - _id -= 46; - } else if (_c == QMetaObject::QueryPropertyUser) { - _id -= 46; - } -#endif // QT_NO_PROPERTIES - return _id; -} -QT_WARNING_POP -QT_END_MOC_NAMESPACE diff --git a/src/index.ts b/src/index.ts index 96c04202f0..1e26c4a98e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,7 +11,7 @@ export { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; export { QClipboard, QClipboardMode } from "./lib/QtGui/QClipboard"; // Events: Maybe a separate module ? export { QKeyEvent } from "./lib/QtGui/QEvent/QKeyEvent"; -export { NativeEvent } from "./lib/core/EventWidget"; +export { NativeEvent, BaseWidgetEvents } from "./lib/core/EventWidget"; // Abstract: export { NodeWidget } from "./lib/QtWidgets/QWidget"; export { NodeLayout } from "./lib/QtWidgets/QLayout"; @@ -40,3 +40,4 @@ export { QGridLayout } from "./lib/QtWidgets/QGridLayout"; export { FlexLayout } from "./lib/core/FlexLayout"; // Others: export { StyleSheet } from "./lib/core/Style/StyleSheet"; +export { NativeElement, Component } from "./lib/core/Component"; From 90638a61d570e0b98567b3f2a8692602db9d260b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Here=C3=B1=C3=BA?= Date: Sat, 21 Sep 2019 15:05:26 -0300 Subject: [PATCH 090/891] Syntax issue on line 27 --- docs/tutorial/about.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/about.md b/docs/tutorial/about.md index e81e7786e4..f838bf4ab4 100644 --- a/docs/tutorial/about.md +++ b/docs/tutorial/about.md @@ -24,6 +24,6 @@ running `$ npm install @nodegui/nodegui` will do the right thing. In order to evolve faster with every Node.Js release, NodeGui aims to patch NodeJs with as much minimum code as possible. This makes sure we support all Node features and keeps upgrade process simple. -NodeGui will always link dynamically to Qt inorder to maintain LGPL lisence requirements for Open source projects. +NodeGui will always link dynamically to Qt in order to maintain LGPL lisence requirements for Open source projects. NodeGui also encourages plugin/module based architecture, hence instead of bloating the entire core of NodeGui we prefer to build independent modules that can be managed and updated by the community thus keeping the end product binary size low and enabling faster upgrades. From 8219fbe163689f1fe913675c569697941c79b033 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Here=C3=B1=C3=BA?= Date: Sat, 21 Sep 2019 16:38:02 -0300 Subject: [PATCH 091/891] Minor proposal on line 32 --- docs/tutorial/application-architecture.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/application-architecture.md b/docs/tutorial/application-architecture.md index 909179de81..4190e9decf 100644 --- a/docs/tutorial/application-architecture.md +++ b/docs/tutorial/application-architecture.md @@ -29,7 +29,7 @@ Then following questions arise: - **What if we run Qt on a separate thread?** : No this is not possible since Qt has a requirement that it needs to run on the main thread. - **What if we run Node on a separate thread?** : This would mean we need to build a complex bridge between Node and Qt threads to make them communicate. A strict no no. -So inorder to make both NodeJs and Qt work together we need to find a way to merge these two event loop into one. This is achieved by a custom NodeJs binary we call as `Qode`. +So in order to make both NodeJs and Qt work together we need to find a way to merge these two event loop into one. This is achieved by a custom NodeJs binary we call as `Qode`. Qode is a lightly modified fork of Node.js that merges Node's event loop with Qt's event loop. The idea of merging event loops is inspired by Electron and [other](https://github.com/yue) Gui libraries developed by [zcbenz (Cheng Zhao)](https://github.com/zcbenz). It has been detailed in a post here: [Electron internals](https://electronjs.org/blog/electron-internals-node-integration). Hence, we reused the logic from electron to achieve smooth integration between Qt and NodeJs. From ba06f3966941a28adf606d044345b884727d959c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dar=C3=ADo=20Here=C3=B1=C3=BA?= Date: Sat, 21 Sep 2019 17:00:35 -0300 Subject: [PATCH 092/891] Syntax issue on paragraph 03 --- docs/react/first-app.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/react/first-app.md b/docs/react/first-app.md index 17b204be66..1d8855d6b2 100644 --- a/docs/react/first-app.md +++ b/docs/react/first-app.md @@ -1,6 +1,6 @@ # Writing Your First React NodeGUI App -React NodeGUI enables you to create desktop applications with JavaScript (React). React NodeGUI is a react renderer for NodeGui. This makes it extrememly memory and CPU efficient as compared to other popular Javascript Desktop GUI solutions. +React NodeGUI enables you to create desktop applications with JavaScript (React). React NodeGUI is a react renderer for NodeGui. This makes it extremely memory and CPU efficient as compared to other popular Javascript Desktop GUI solutions. ## Hello World From a287d9ca59b8f58f62c33901dd7d76e6195bd9e6 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 21 Sep 2019 22:53:25 +0200 Subject: [PATCH 093/891] separates include headers and implementation --- CMakeLists.txt | 118 +++---- deps/yoga/YGLayout.h | 45 --- deps/yoga/YGStyle.h | 301 ------------------ {deps => src/cpp/deps}/spdlog/async.h | 0 {deps => src/cpp/deps}/spdlog/async_logger.h | 0 {deps => src/cpp/deps}/spdlog/common.h | 0 .../deps}/spdlog/details/async_logger_impl.h | 0 .../cpp/deps}/spdlog/details/circular_q.h | 0 .../deps}/spdlog/details/console_globals.h | 0 .../cpp/deps}/spdlog/details/file_helper.h | 0 .../cpp/deps}/spdlog/details/fmt_helper.h | 0 .../cpp/deps}/spdlog/details/log_msg.h | 0 .../cpp/deps}/spdlog/details/logger_impl.h | 0 .../deps}/spdlog/details/mpmc_blocking_q.h | 0 .../cpp/deps}/spdlog/details/null_mutex.h | 0 {deps => src/cpp/deps}/spdlog/details/os.h | 0 .../deps}/spdlog/details/pattern_formatter.h | 0 .../deps}/spdlog/details/periodic_worker.h | 0 .../cpp/deps}/spdlog/details/registry.h | 0 .../cpp/deps}/spdlog/details/thread_pool.h | 0 .../cpp/deps}/spdlog/fmt/bin_to_hex.h | 0 .../cpp/deps}/spdlog/fmt/bundled/LICENSE.rst | 0 .../cpp/deps}/spdlog/fmt/bundled/chrono.h | 0 .../cpp/deps}/spdlog/fmt/bundled/color.h | 0 .../cpp/deps}/spdlog/fmt/bundled/core.h | 0 .../cpp/deps}/spdlog/fmt/bundled/format-inl.h | 0 .../cpp/deps}/spdlog/fmt/bundled/format.h | 0 .../cpp/deps}/spdlog/fmt/bundled/locale.h | 0 .../cpp/deps}/spdlog/fmt/bundled/ostream.h | 0 .../cpp/deps}/spdlog/fmt/bundled/posix.h | 0 .../cpp/deps}/spdlog/fmt/bundled/printf.h | 0 .../cpp/deps}/spdlog/fmt/bundled/ranges.h | 0 .../cpp/deps}/spdlog/fmt/bundled/time.h | 0 {deps => src/cpp/deps}/spdlog/fmt/fmt.h | 0 {deps => src/cpp/deps}/spdlog/fmt/ostr.h | 0 {deps => src/cpp/deps}/spdlog/formatter.h | 0 {deps => src/cpp/deps}/spdlog/logger.h | 0 .../cpp/deps}/spdlog/sinks/android_sink.h | 0 .../cpp/deps}/spdlog/sinks/ansicolor_sink.h | 0 .../cpp/deps}/spdlog/sinks/base_sink.h | 0 .../cpp/deps}/spdlog/sinks/basic_file_sink.h | 0 .../cpp/deps}/spdlog/sinks/daily_file_sink.h | 0 .../cpp/deps}/spdlog/sinks/dist_sink.h | 0 .../cpp/deps}/spdlog/sinks/msvc_sink.h | 0 .../cpp/deps}/spdlog/sinks/null_sink.h | 0 .../cpp/deps}/spdlog/sinks/ostream_sink.h | 0 .../deps}/spdlog/sinks/rotating_file_sink.h | 0 {deps => src/cpp/deps}/spdlog/sinks/sink.h | 0 .../deps}/spdlog/sinks/stdout_color_sinks.h | 0 .../cpp/deps}/spdlog/sinks/stdout_sinks.h | 0 .../cpp/deps}/spdlog/sinks/syslog_sink.h | 0 .../cpp/deps}/spdlog/sinks/wincolor_sink.h | 0 {deps => src/cpp/deps}/spdlog/spdlog.h | 0 {deps => src/cpp/deps}/spdlog/tweakme.h | 0 {deps => src/cpp/deps}/spdlog/version.h | 0 src/cpp/deps/yoga/Bitfield.h | 144 +++++++++ {deps => src/cpp/deps}/yoga/CompactValue.h | 0 {deps => src/cpp/deps}/yoga/Utils.cpp | 0 {deps => src/cpp/deps}/yoga/Utils.h | 0 {deps => src/cpp/deps}/yoga/YGConfig.cpp | 0 {deps => src/cpp/deps}/yoga/YGConfig.h | 0 {deps => src/cpp/deps}/yoga/YGEnums.cpp | 0 {deps => src/cpp/deps}/yoga/YGEnums.h | 0 {deps => src/cpp/deps}/yoga/YGFloatOptional.h | 0 {deps => src/cpp/deps}/yoga/YGLayout.cpp | 3 +- src/cpp/deps/yoga/YGLayout.h | 68 ++++ {deps => src/cpp/deps}/yoga/YGMacros.h | 0 {deps => src/cpp/deps}/yoga/YGNode.cpp | 50 ++- {deps => src/cpp/deps}/yoga/YGNode.h | 61 ++-- {deps => src/cpp/deps}/yoga/YGNodePrint.cpp | 0 {deps => src/cpp/deps}/yoga/YGNodePrint.h | 0 {deps => src/cpp/deps}/yoga/YGStyle.cpp | 0 src/cpp/deps/yoga/YGStyle.h | 202 ++++++++++++ {deps => src/cpp/deps}/yoga/YGValue.cpp | 0 {deps => src/cpp/deps}/yoga/YGValue.h | 0 {deps => src/cpp/deps}/yoga/Yoga-internal.h | 0 {deps => src/cpp/deps}/yoga/Yoga.cpp | 42 ++- {deps => src/cpp/deps}/yoga/Yoga.h | 0 {deps => src/cpp/deps}/yoga/event/event.cpp | 14 +- {deps => src/cpp/deps}/yoga/event/event.h | 25 +- .../cpp/deps}/yoga/internal/experiments-inl.h | 0 .../cpp/deps}/yoga/internal/experiments.cpp | 0 .../cpp/deps}/yoga/internal/experiments.h | 0 {deps => src/cpp/deps}/yoga/log.cpp | 0 {deps => src/cpp/deps}/yoga/log.h | 0 .../nodegui}/Extras/Utils/nutils.h | 2 +- .../QtGui/QApplication/qapplication_wrap.h | 0 .../QtGui/QClipboard/qclipboard_wrap.h | 2 +- .../nodegui}/QtGui/QCursor/qcursor_wrap.h | 2 +- .../QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h | 0 .../nodegui}/QtGui/QIcon/qicon_wrap.h | 2 +- .../nodegui}/QtGui/QPixmap/qpixmap_wrap.h | 2 +- .../qabstractscrollarea_macro.h | 4 +- .../QAbstractSlider/qabstractslider_macro.h | 4 +- .../QtWidgets/QCheckBox/ncheckbox.hpp | 2 +- .../QtWidgets/QCheckBox/qcheckbox_wrap.h | 2 +- .../nodegui}/QtWidgets/QDial/ndial.hpp | 2 +- .../nodegui}/QtWidgets/QDial/qdial_wrap.h | 4 +- .../QtWidgets/QGridLayout/qgridlayout_wrap.h | 2 +- .../nodegui}/QtWidgets/QLabel/nlabel.hpp | 2 +- .../nodegui}/QtWidgets/QLabel/qlabel_wrap.h | 2 +- .../QtWidgets/QLayout/qlayout_macro.h | 2 +- .../nodegui}/QtWidgets/QLayout/qlayout_wrap.h | 2 +- .../QtWidgets/QLineEdit/nlineedit.hpp | 2 +- .../QtWidgets/QLineEdit/qlineedit_wrap.h | 2 +- .../QtWidgets/QMainWindow/nmainwindow.hpp | 2 +- .../QtWidgets/QMainWindow/qmainwindow_wrap.h | 2 +- .../QPlainTextEdit/nplaintextedit.hpp | 4 +- .../QPlainTextEdit/qplaintextedit_wrap.h | 4 +- .../QtWidgets/QProgressBar/nprogressbar.hpp | 2 +- .../QProgressBar/qprogressbar_wrap.h | 2 +- .../QtWidgets/QPushButton/npushbutton.hpp | 2 +- .../QtWidgets/QPushButton/qpushbutton_wrap.h | 4 +- .../QtWidgets/QRadioButton/nradiobutton.hpp | 2 +- .../QRadioButton/qradiobutton_wrap.h | 2 +- .../QtWidgets/QScrollArea/nscrollarea.hpp | 2 +- .../QtWidgets/QScrollArea/qscrollarea_wrap.h | 2 +- .../nodegui}/QtWidgets/QSpinBox/nspinbox.hpp | 2 +- .../QtWidgets/QSpinBox/qspinbox_wrap.h | 4 +- .../QtWidgets/QTabWidget/ntabwidget.hpp | 2 +- .../QtWidgets/QTabWidget/qtabwidget_wrap.h | 6 +- .../nodegui}/QtWidgets/QWidget/nwidget.hpp | 2 +- .../QtWidgets/QWidget/qwidget_macro.h | 10 +- .../nodegui}/QtWidgets/QWidget/qwidget_wrap.h | 2 +- .../nodegui}/core/Component/component_macro.h | 0 .../nodegui}/core/Events/eventsmap.h | 0 .../nodegui}/core/Events/eventwidget.h | 2 +- .../nodegui}/core/Events/eventwidget_macro.h | 0 .../nodegui}/core/FlexLayout/flexitem.h | 0 .../nodegui}/core/FlexLayout/flexlayout.h | 0 .../core/FlexLayout/flexlayout_wrap.h | 2 +- .../nodegui}/core/NodeWidget/nodewidget.h | 4 +- .../nodegui}/core/YogaWidget/nodestyle.h | 0 .../nodegui}/core/YogaWidget/yogawidget.h | 2 +- .../core/YogaWidget/yogawidget_macro.h | 0 src/cpp/{ => lib}/Extras/Utils/nutils.cpp | 2 +- .../QtGui/QApplication/qapplication_wrap.cpp | 8 +- .../QtGui/QClipboard/qclipboard_wrap.cpp | 4 +- .../{ => lib}/QtGui/QCursor/qcursor_wrap.cpp | 6 +- .../QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp | 6 +- src/cpp/{ => lib}/QtGui/QIcon/qicon_wrap.cpp | 6 +- .../{ => lib}/QtGui/QPixmap/qpixmap_wrap.cpp | 4 +- .../QtWidgets/QCheckBox/qcheckbox_wrap.cpp | 6 +- .../{ => lib}/QtWidgets/QDial/qdial_wrap.cpp | 6 +- .../QGridLayout/qgridlayout_wrap.cpp | 6 +- .../QtWidgets/QLabel/qlabel_wrap.cpp | 8 +- .../QtWidgets/QLayout/qlayout_wrap.cpp | 2 +- .../QtWidgets/QLineEdit/qlineedit_wrap.cpp | 6 +- .../QMainWindow/qmainwindow_wrap.cpp | 6 +- .../QPlainTextEdit/qplaintextedit_wrap.cpp | 6 +- .../QProgressBar/qprogressbar_wrap.cpp | 6 +- .../QPushButton/qpushbutton_wrap.cpp | 8 +- .../QRadioButton/qradiobutton_wrap.cpp | 6 +- .../QScrollArea/qscrollarea_wrap.cpp | 6 +- .../QtWidgets/QSpinBox/qspinbox_wrap.cpp | 8 +- .../QtWidgets/QTabWidget/qtabwidget_wrap.cpp | 8 +- .../QtWidgets/QWidget/qwidget_wrap.cpp | 6 +- src/cpp/{ => lib}/core/Events/eventsmap.cpp | 2 +- src/cpp/{ => lib}/core/Events/eventwidget.cpp | 2 +- .../{ => lib}/core/FlexLayout/flexitem.cpp | 2 +- .../{ => lib}/core/FlexLayout/flexlayout.cpp | 4 +- .../core/FlexLayout/flexlayout_wrap.cpp | 6 +- .../{ => lib}/core/YogaWidget/nodestyle.cpp | 2 +- .../{ => lib}/core/YogaWidget/yogawidget.cpp | 2 +- src/cpp/main.cpp | 44 +-- 165 files changed, 723 insertions(+), 654 deletions(-) delete mode 100644 deps/yoga/YGLayout.h delete mode 100644 deps/yoga/YGStyle.h rename {deps => src/cpp/deps}/spdlog/async.h (100%) rename {deps => src/cpp/deps}/spdlog/async_logger.h (100%) rename {deps => src/cpp/deps}/spdlog/common.h (100%) rename {deps => src/cpp/deps}/spdlog/details/async_logger_impl.h (100%) rename {deps => src/cpp/deps}/spdlog/details/circular_q.h (100%) rename {deps => src/cpp/deps}/spdlog/details/console_globals.h (100%) rename {deps => src/cpp/deps}/spdlog/details/file_helper.h (100%) rename {deps => src/cpp/deps}/spdlog/details/fmt_helper.h (100%) rename {deps => src/cpp/deps}/spdlog/details/log_msg.h (100%) rename {deps => src/cpp/deps}/spdlog/details/logger_impl.h (100%) rename {deps => src/cpp/deps}/spdlog/details/mpmc_blocking_q.h (100%) rename {deps => src/cpp/deps}/spdlog/details/null_mutex.h (100%) rename {deps => src/cpp/deps}/spdlog/details/os.h (100%) rename {deps => src/cpp/deps}/spdlog/details/pattern_formatter.h (100%) rename {deps => src/cpp/deps}/spdlog/details/periodic_worker.h (100%) rename {deps => src/cpp/deps}/spdlog/details/registry.h (100%) rename {deps => src/cpp/deps}/spdlog/details/thread_pool.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bin_to_hex.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/LICENSE.rst (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/chrono.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/color.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/core.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/format-inl.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/format.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/locale.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/ostream.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/posix.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/printf.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/ranges.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/bundled/time.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/fmt.h (100%) rename {deps => src/cpp/deps}/spdlog/fmt/ostr.h (100%) rename {deps => src/cpp/deps}/spdlog/formatter.h (100%) rename {deps => src/cpp/deps}/spdlog/logger.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/android_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/ansicolor_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/base_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/basic_file_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/daily_file_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/dist_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/msvc_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/null_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/ostream_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/rotating_file_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/stdout_color_sinks.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/stdout_sinks.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/syslog_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/sinks/wincolor_sink.h (100%) rename {deps => src/cpp/deps}/spdlog/spdlog.h (100%) rename {deps => src/cpp/deps}/spdlog/tweakme.h (100%) rename {deps => src/cpp/deps}/spdlog/version.h (100%) create mode 100644 src/cpp/deps/yoga/Bitfield.h rename {deps => src/cpp/deps}/yoga/CompactValue.h (100%) rename {deps => src/cpp/deps}/yoga/Utils.cpp (100%) rename {deps => src/cpp/deps}/yoga/Utils.h (100%) rename {deps => src/cpp/deps}/yoga/YGConfig.cpp (100%) rename {deps => src/cpp/deps}/yoga/YGConfig.h (100%) rename {deps => src/cpp/deps}/yoga/YGEnums.cpp (100%) rename {deps => src/cpp/deps}/yoga/YGEnums.h (100%) rename {deps => src/cpp/deps}/yoga/YGFloatOptional.h (100%) rename {deps => src/cpp/deps}/yoga/YGLayout.cpp (93%) create mode 100644 src/cpp/deps/yoga/YGLayout.h rename {deps => src/cpp/deps}/yoga/YGMacros.h (100%) rename {deps => src/cpp/deps}/yoga/YGNode.cpp (93%) rename {deps => src/cpp/deps}/yoga/YGNode.h (86%) rename {deps => src/cpp/deps}/yoga/YGNodePrint.cpp (100%) rename {deps => src/cpp/deps}/yoga/YGNodePrint.h (100%) rename {deps => src/cpp/deps}/yoga/YGStyle.cpp (100%) create mode 100644 src/cpp/deps/yoga/YGStyle.h rename {deps => src/cpp/deps}/yoga/YGValue.cpp (100%) rename {deps => src/cpp/deps}/yoga/YGValue.h (100%) rename {deps => src/cpp/deps}/yoga/Yoga-internal.h (100%) rename {deps => src/cpp/deps}/yoga/Yoga.cpp (99%) rename {deps => src/cpp/deps}/yoga/Yoga.h (100%) rename {deps => src/cpp/deps}/yoga/event/event.cpp (93%) rename {deps => src/cpp/deps}/yoga/event/event.h (90%) rename {deps => src/cpp/deps}/yoga/internal/experiments-inl.h (100%) rename {deps => src/cpp/deps}/yoga/internal/experiments.cpp (100%) rename {deps => src/cpp/deps}/yoga/internal/experiments.h (100%) rename {deps => src/cpp/deps}/yoga/log.cpp (100%) rename {deps => src/cpp/deps}/yoga/log.h (100%) rename src/cpp/{ => include/nodegui}/Extras/Utils/nutils.h (77%) rename src/cpp/{ => include/nodegui}/QtGui/QApplication/qapplication_wrap.h (100%) rename src/cpp/{ => include/nodegui}/QtGui/QClipboard/qclipboard_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtGui/QCursor/qcursor_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h (100%) rename src/cpp/{ => include/nodegui}/QtGui/QIcon/qicon_wrap.h (90%) rename src/cpp/{ => include/nodegui}/QtGui/QPixmap/qpixmap_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h (93%) rename src/cpp/{ => include/nodegui}/QtWidgets/QAbstractSlider/qabstractslider_macro.h (96%) rename src/cpp/{ => include/nodegui}/QtWidgets/QCheckBox/ncheckbox.hpp (92%) rename src/cpp/{ => include/nodegui}/QtWidgets/QCheckBox/qcheckbox_wrap.h (92%) rename src/cpp/{ => include/nodegui}/QtWidgets/QDial/ndial.hpp (97%) rename src/cpp/{ => include/nodegui}/QtWidgets/QDial/qdial_wrap.h (87%) rename src/cpp/{ => include/nodegui}/QtWidgets/QGridLayout/qgridlayout_wrap.h (92%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLabel/nlabel.hpp (81%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLabel/qlabel_wrap.h (92%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLayout/qlayout_macro.h (96%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLayout/qlayout_wrap.h (89%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLineEdit/nlineedit.hpp (97%) rename src/cpp/{ => include/nodegui}/QtWidgets/QLineEdit/qlineedit_wrap.h (93%) rename src/cpp/{ => include/nodegui}/QtWidgets/QMainWindow/nmainwindow.hpp (84%) rename src/cpp/{ => include/nodegui}/QtWidgets/QMainWindow/qmainwindow_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtWidgets/QPlainTextEdit/nplaintextedit.hpp (98%) rename src/cpp/{ => include/nodegui}/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h (89%) rename src/cpp/{ => include/nodegui}/QtWidgets/QProgressBar/nprogressbar.hpp (84%) rename src/cpp/{ => include/nodegui}/QtWidgets/QProgressBar/qprogressbar_wrap.h (93%) rename src/cpp/{ => include/nodegui}/QtWidgets/QPushButton/npushbutton.hpp (96%) rename src/cpp/{ => include/nodegui}/QtWidgets/QPushButton/qpushbutton_wrap.h (87%) rename src/cpp/{ => include/nodegui}/QtWidgets/QRadioButton/nradiobutton.hpp (84%) rename src/cpp/{ => include/nodegui}/QtWidgets/QRadioButton/qradiobutton_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtWidgets/QScrollArea/nscrollarea.hpp (83%) rename src/cpp/{ => include/nodegui}/QtWidgets/QScrollArea/qscrollarea_wrap.h (89%) rename src/cpp/{ => include/nodegui}/QtWidgets/QSpinBox/nspinbox.hpp (92%) rename src/cpp/{ => include/nodegui}/QtWidgets/QSpinBox/qspinbox_wrap.h (91%) rename src/cpp/{ => include/nodegui}/QtWidgets/QTabWidget/ntabwidget.hpp (97%) rename src/cpp/{ => include/nodegui}/QtWidgets/QTabWidget/qtabwidget_wrap.h (86%) rename src/cpp/{ => include/nodegui}/QtWidgets/QWidget/nwidget.hpp (91%) rename src/cpp/{ => include/nodegui}/QtWidgets/QWidget/qwidget_macro.h (97%) rename src/cpp/{ => include/nodegui}/QtWidgets/QWidget/qwidget_wrap.h (90%) rename src/cpp/{ => include/nodegui}/core/Component/component_macro.h (100%) rename src/cpp/{ => include/nodegui}/core/Events/eventsmap.h (100%) rename src/cpp/{ => include/nodegui}/core/Events/eventwidget.h (90%) rename src/cpp/{ => include/nodegui}/core/Events/eventwidget_macro.h (100%) rename src/cpp/{ => include/nodegui}/core/FlexLayout/flexitem.h (100%) rename src/cpp/{ => include/nodegui}/core/FlexLayout/flexlayout.h (100%) rename src/cpp/{ => include/nodegui}/core/FlexLayout/flexlayout_wrap.h (93%) rename src/cpp/{ => include/nodegui}/core/NodeWidget/nodewidget.h (79%) rename src/cpp/{ => include/nodegui}/core/YogaWidget/nodestyle.h (100%) rename src/cpp/{ => include/nodegui}/core/YogaWidget/yogawidget.h (99%) rename src/cpp/{ => include/nodegui}/core/YogaWidget/yogawidget_macro.h (100%) rename src/cpp/{ => lib}/Extras/Utils/nutils.cpp (95%) rename src/cpp/{ => lib}/QtGui/QApplication/qapplication_wrap.cpp (94%) rename src/cpp/{ => lib}/QtGui/QClipboard/qclipboard_wrap.cpp (96%) rename src/cpp/{ => lib}/QtGui/QCursor/qcursor_wrap.cpp (94%) rename src/cpp/{ => lib}/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp (91%) rename src/cpp/{ => lib}/QtGui/QIcon/qicon_wrap.cpp (94%) rename src/cpp/{ => lib}/QtGui/QPixmap/qpixmap_wrap.cpp (97%) rename src/cpp/{ => lib}/QtWidgets/QCheckBox/qcheckbox_wrap.cpp (94%) rename src/cpp/{ => lib}/QtWidgets/QDial/qdial_wrap.cpp (96%) rename src/cpp/{ => lib}/QtWidgets/QGridLayout/qgridlayout_wrap.cpp (94%) rename src/cpp/{ => lib}/QtWidgets/QLabel/qlabel_wrap.cpp (94%) rename src/cpp/{ => lib}/QtWidgets/QLayout/qlayout_wrap.cpp (93%) rename src/cpp/{ => lib}/QtWidgets/QLineEdit/qlineedit_wrap.cpp (95%) rename src/cpp/{ => lib}/QtWidgets/QMainWindow/qmainwindow_wrap.cpp (94%) rename src/cpp/{ => lib}/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp (97%) rename src/cpp/{ => lib}/QtWidgets/QProgressBar/qprogressbar_wrap.cpp (95%) rename src/cpp/{ => lib}/QtWidgets/QPushButton/qpushbutton_wrap.cpp (93%) rename src/cpp/{ => lib}/QtWidgets/QRadioButton/qradiobutton_wrap.cpp (93%) rename src/cpp/{ => lib}/QtWidgets/QScrollArea/qscrollarea_wrap.cpp (93%) rename src/cpp/{ => lib}/QtWidgets/QSpinBox/qspinbox_wrap.cpp (96%) rename src/cpp/{ => lib}/QtWidgets/QTabWidget/qtabwidget_wrap.cpp (95%) rename src/cpp/{ => lib}/QtWidgets/QWidget/qwidget_wrap.cpp (91%) rename src/cpp/{ => lib}/core/Events/eventsmap.cpp (99%) rename src/cpp/{ => lib}/core/Events/eventwidget.cpp (98%) rename src/cpp/{ => lib}/core/FlexLayout/flexitem.cpp (86%) rename src/cpp/{ => lib}/core/FlexLayout/flexlayout.cpp (98%) rename src/cpp/{ => lib}/core/FlexLayout/flexlayout_wrap.cpp (96%) rename src/cpp/{ => lib}/core/YogaWidget/nodestyle.cpp (98%) rename src/cpp/{ => lib}/core/YogaWidget/yogawidget.cpp (99%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1654da0352..ae5189e3b0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,63 +22,63 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${CMAKE_JS_SRC}" "${PROJECT_SOURCE_DIR}/src/cpp/main.cpp" # core internals - "${PROJECT_SOURCE_DIR}/src/cpp/Extras/Utils/nutils.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexitem.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/nodestyle.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventsmap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/Events/eventwidget.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/YogaWidget/yogawidget.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/Extras/Utils/nutils.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexitem.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/YogaWidget/nodestyle.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventsmap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventwidget.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/YogaWidget/yogawidget.cpp" # core deps - "${PROJECT_SOURCE_DIR}/deps/yoga/log.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/Utils.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGConfig.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGEnums.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGLayout.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGNode.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGNodePrint.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGStyle.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/YGValue.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/Yoga.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/event/event.cpp" - "${PROJECT_SOURCE_DIR}/deps/yoga/internal/experiments.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/log.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/Utils.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGConfig.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGEnums.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGLayout.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGNode.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGNodePrint.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGStyle.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGValue.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/Yoga.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/event/event.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/internal/experiments.cpp" # wrapped cpps - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QApplication/qapplication_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QIcon/qicon_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtGui/QCursor/qcursor_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/qdial_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/core/FlexLayout/flexlayout_wrap.cpp" - # Custom widgets - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QWidget/nwidget.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLabel/nlabel.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QDial/ndial.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPushButton/npushbutton.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp" - "${PROJECT_SOURCE_DIR}/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp" + # Custom widgets (include them for automoc since they contain Q_OBJECT) + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSpinBox/nspinbox.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QRadioButton/nradiobutton.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp" ) # common @@ -96,7 +96,13 @@ AddNapiSupport(${CORE_WIDGETS_ADDON}) target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_INC}" "${PROJECT_SOURCE_DIR}" - "${PROJECT_SOURCE_DIR}/deps" + "${PROJECT_SOURCE_DIR}/src/cpp/deps" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui" +) + +target_include_directories(${CORE_WIDGETS_ADDON} PUBLIC + "${PROJECT_SOURCE_DIR}/src/cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include" ) target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE diff --git a/deps/yoga/YGLayout.h b/deps/yoga/YGLayout.h deleted file mode 100644 index 74082a7640..0000000000 --- a/deps/yoga/YGLayout.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include "YGFloatOptional.h" -#include "Yoga-internal.h" - -struct YGLayout { - std::array position = {}; - std::array dimensions = {{YGUndefined, YGUndefined}}; - std::array margin = {}; - std::array border = {}; - std::array padding = {}; - YGDirection direction : 2; - bool didUseLegacyFlag : 1; - bool doesLegacyStretchFlagAffectsLayout : 1; - bool hadOverflow : 1; - - uint32_t computedFlexBasisGeneration = 0; - YGFloatOptional computedFlexBasis = {}; - - // Instead of recomputing the entire layout every single time, we cache some - // information to break early when nothing changed - uint32_t generationCount = 0; - YGDirection lastOwnerDirection = (YGDirection) -1; - - uint32_t nextCachedMeasurementsIndex = 0; - std::array - cachedMeasurements = {}; - std::array measuredDimensions = {{YGUndefined, YGUndefined}}; - - YGCachedMeasurement cachedLayout = YGCachedMeasurement(); - - YGLayout() - : direction(YGDirectionInherit), - didUseLegacyFlag(false), - doesLegacyStretchFlagAffectsLayout(false), - hadOverflow(false) {} - - bool operator==(YGLayout layout) const; - bool operator!=(YGLayout layout) const { return !(*this == layout); } -}; diff --git a/deps/yoga/YGStyle.h b/deps/yoga/YGStyle.h deleted file mode 100644 index ce3816040a..0000000000 --- a/deps/yoga/YGStyle.h +++ /dev/null @@ -1,301 +0,0 @@ -/* - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the LICENSE - * file in the root directory of this source tree. - */ -#pragma once -#include -#include -#include -#include -#include -#include "CompactValue.h" -#include "YGEnums.h" -#include "YGFloatOptional.h" -#include "Yoga-internal.h" -#include "Yoga.h" - -#if !defined(ENUM_BITFIELDS_NOT_SUPPORTED) -#define BITFIELD_ENUM_SIZED(num) : num -#else -#define BITFIELD_ENUM_SIZED(num) -#endif - -#define BITFIELD_ACCESSORS(FIELD) \ - decltype(FIELD##_) get_##FIELD() const { return FIELD##_; } \ - void set_##FIELD(decltype(FIELD##_) x) { FIELD##_ = x; } - -#define BITFIELD_REF(FIELD) \ - BitfieldRef< \ - decltype(FIELD##_), \ - &YGStyle::get_##FIELD, \ - &YGStyle::set_##FIELD, \ - FIELD##Bit> - -class YGStyle { - template - using Values = - facebook::yoga::detail::Values()>; - using CompactValue = facebook::yoga::detail::CompactValue; - - static constexpr uint64_t allBits(int fromBit, int toBit) { - return fromBit < toBit - ? (uint64_t{1} << fromBit) | allBits(fromBit + 1, toBit) - : 0; - } - -public: - using Dimensions = Values; - using Edges = Values; - - template - struct Ref { - YGStyle& style; - operator T() const { return style.*Prop; } - Ref& operator=(T value) { - style.*Prop = value; - style.assignedProps_.set(PropBit); - return *this; - } - }; - - template YGStyle::*Prop, int PropBit> - struct IdxRef { - struct Ref { - YGStyle& style; - Idx idx; - operator CompactValue() const { return (style.*Prop)[idx]; } - operator YGValue() const { return (style.*Prop)[idx]; } - Ref& operator=(CompactValue value) { - (style.*Prop)[idx] = value; - style.assignedProps_.set(PropBit + idx); - return *this; - } - }; - - YGStyle& style; - IdxRef& operator=(const Values& values) { - style.*Prop = values; - style.assignedProps_ |= - allBits(PropBit, PropBit + facebook::yoga::enums::count()); - return *this; - } - operator const Values&() const { return style.*Prop; } - Ref operator[](Idx idx) { return {style, idx}; } - CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } - }; - - template < - typename T, - T (YGStyle::*Get)() const, - void (YGStyle::*Set)(T), - int PropBit> - struct BitfieldRef { - YGStyle& style; - - operator T() const { return (style.*Get)(); } - BitfieldRef& operator=(T x) { - (style.*Set)(x); - style.assignedProps_.set(PropBit); - return *this; - } - }; - -#ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wbitfield-constant-conversion" -#endif - - YGStyle() - : direction_(YGDirectionInherit), - flexDirection_(YGFlexDirectionColumn), - justifyContent_(YGJustifyFlexStart), - alignContent_(YGAlignFlexStart), - alignItems_(YGAlignStretch), - alignSelf_(YGAlignAuto), - positionType_(YGPositionTypeRelative), - flexWrap_(YGWrapNoWrap), - overflow_(YGOverflowVisible), - display_(YGDisplayFlex) {} - -#ifdef __clang__ -#pragma clang diagnostic pop -#endif - - ~YGStyle() = default; - - static constexpr int directionBit = 0; - static constexpr int flexDirectionBit = directionBit + 1; - static constexpr int justifyContentBit = flexDirectionBit + 1; - static constexpr int alignContentBit = justifyContentBit + 1; - static constexpr int alignItemsBit = alignContentBit + 1; - static constexpr int alignSelfBit = alignItemsBit + 1; - static constexpr int positionTypeBit = alignSelfBit + 1; - static constexpr int flexWrapBit = positionTypeBit + 1; - static constexpr int overflowBit = flexWrapBit + 1; - static constexpr int displayBit = overflowBit + 1; - static constexpr int flexBit = displayBit + 1; - static constexpr int flexGrowBit = flexBit + 1; - static constexpr int flexShrinkBit = flexGrowBit + 1; - static constexpr int flexBasisBit = flexShrinkBit + 1; - static constexpr int marginBit = flexBasisBit + 1; - static constexpr int positionBit = - marginBit + facebook::yoga::enums::count(); - static constexpr int paddingBit = - positionBit + facebook::yoga::enums::count(); - static constexpr int borderBit = - paddingBit + facebook::yoga::enums::count(); - static constexpr int dimensionsBit = - borderBit + facebook::yoga::enums::count(); - static constexpr int maxDimensionsBit = - dimensionsBit + facebook::yoga::enums::count(); - static constexpr int minDimensionsBit = - maxDimensionsBit + facebook::yoga::enums::count(); - static constexpr int aspectRatioBit = - minDimensionsBit + facebook::yoga::enums::count(); - - static constexpr int numStyles = aspectRatioBit + 1; - -private: - std::bitset assignedProps_; - - /* Some platforms don't support enum bitfields, - so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */ - YGDirection direction_ BITFIELD_ENUM_SIZED(2); - YGFlexDirection flexDirection_ BITFIELD_ENUM_SIZED(2); - YGJustify justifyContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignContent_ BITFIELD_ENUM_SIZED(3); - YGAlign alignItems_ BITFIELD_ENUM_SIZED(3); - YGAlign alignSelf_ BITFIELD_ENUM_SIZED(3); - YGPositionType positionType_ BITFIELD_ENUM_SIZED(1); - YGWrap flexWrap_ BITFIELD_ENUM_SIZED(2); - YGOverflow overflow_ BITFIELD_ENUM_SIZED(2); - YGDisplay display_ BITFIELD_ENUM_SIZED(1); - YGFloatOptional flex_ = {}; - YGFloatOptional flexGrow_ = {}; - YGFloatOptional flexShrink_ = {}; - CompactValue flexBasis_ = CompactValue::ofAuto(); - Edges margin_ = {}; - Edges position_ = {}; - Edges padding_ = {}; - Edges border_ = {}; - Dimensions dimensions_{CompactValue::ofAuto()}; - Dimensions minDimensions_ = {}; - Dimensions maxDimensions_ = {}; - // Yoga specific properties, not compatible with flexbox specification - YGFloatOptional aspectRatio_ = {}; - - BITFIELD_ACCESSORS(direction) - BITFIELD_ACCESSORS(flexDirection) - BITFIELD_ACCESSORS(justifyContent) - BITFIELD_ACCESSORS(alignContent); - BITFIELD_ACCESSORS(alignItems); - BITFIELD_ACCESSORS(alignSelf); - BITFIELD_ACCESSORS(positionType); - BITFIELD_ACCESSORS(flexWrap); - BITFIELD_ACCESSORS(overflow); - BITFIELD_ACCESSORS(display); - -public: - const decltype(assignedProps_)& assignedProps() const { - return assignedProps_; - } - - // for library users needing a type - using ValueRepr = std::remove_reference::type; - - YGDirection direction() const { return direction_; } - BITFIELD_REF(direction) direction() { return {*this}; } - - YGFlexDirection flexDirection() const { return flexDirection_; } - BITFIELD_REF(flexDirection) flexDirection() { return {*this}; } - - YGJustify justifyContent() const { return justifyContent_; } - BITFIELD_REF(justifyContent) justifyContent() { return {*this}; } - - YGAlign alignContent() const { return alignContent_; } - BITFIELD_REF(alignContent) alignContent() { return {*this}; } - - YGAlign alignItems() const { return alignItems_; } - BITFIELD_REF(alignItems) alignItems() { return {*this}; } - - YGAlign alignSelf() const { return alignSelf_; } - BITFIELD_REF(alignSelf) alignSelf() { return {*this}; } - - YGPositionType positionType() const { return positionType_; } - BITFIELD_REF(positionType) positionType() { return {*this}; } - - YGWrap flexWrap() const { return flexWrap_; } - BITFIELD_REF(flexWrap) flexWrap() { return {*this}; } - - YGOverflow overflow() const { return overflow_; } - BITFIELD_REF(overflow) overflow() { return {*this}; } - - YGDisplay display() const { return display_; } - BITFIELD_REF(display) display() { return {*this}; } - - YGFloatOptional flex() const { return flex_; } - Ref flex() { return {*this}; } - - YGFloatOptional flexGrow() const { return flexGrow_; } - Ref flexGrow() { - return {*this}; - } - - YGFloatOptional flexShrink() const { return flexShrink_; } - Ref flexShrink() { - return {*this}; - } - - CompactValue flexBasis() const { return flexBasis_; } - Ref flexBasis() { - return {*this}; - } - - const Edges& margin() const { return margin_; } - IdxRef margin() { return {*this}; } - - const Edges& position() const { return position_; } - IdxRef position() { - return {*this}; - } - - const Edges& padding() const { return padding_; } - IdxRef padding() { return {*this}; } - - const Edges& border() const { return border_; } - IdxRef border() { return {*this}; } - - const Dimensions& dimensions() const { return dimensions_; } - IdxRef dimensions() { - return {*this}; - } - - const Dimensions& minDimensions() const { return minDimensions_; } - IdxRef - minDimensions() { - return {*this}; - } - - const Dimensions& maxDimensions() const { return maxDimensions_; } - IdxRef - maxDimensions() { - return {*this}; - } - - // Yoga specific properties, not compatible with flexbox specification - YGFloatOptional aspectRatio() const { return aspectRatio_; } - Ref aspectRatio() { - return {*this}; - } -}; - -bool operator==(const YGStyle& lhs, const YGStyle& rhs); -inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { - return !(lhs == rhs); -} - -#undef BITFIELD_ENUM_SIZED -#undef BITFIELD_ACCESSORS -#undef BITFIELD_REF diff --git a/deps/spdlog/async.h b/src/cpp/deps/spdlog/async.h similarity index 100% rename from deps/spdlog/async.h rename to src/cpp/deps/spdlog/async.h diff --git a/deps/spdlog/async_logger.h b/src/cpp/deps/spdlog/async_logger.h similarity index 100% rename from deps/spdlog/async_logger.h rename to src/cpp/deps/spdlog/async_logger.h diff --git a/deps/spdlog/common.h b/src/cpp/deps/spdlog/common.h similarity index 100% rename from deps/spdlog/common.h rename to src/cpp/deps/spdlog/common.h diff --git a/deps/spdlog/details/async_logger_impl.h b/src/cpp/deps/spdlog/details/async_logger_impl.h similarity index 100% rename from deps/spdlog/details/async_logger_impl.h rename to src/cpp/deps/spdlog/details/async_logger_impl.h diff --git a/deps/spdlog/details/circular_q.h b/src/cpp/deps/spdlog/details/circular_q.h similarity index 100% rename from deps/spdlog/details/circular_q.h rename to src/cpp/deps/spdlog/details/circular_q.h diff --git a/deps/spdlog/details/console_globals.h b/src/cpp/deps/spdlog/details/console_globals.h similarity index 100% rename from deps/spdlog/details/console_globals.h rename to src/cpp/deps/spdlog/details/console_globals.h diff --git a/deps/spdlog/details/file_helper.h b/src/cpp/deps/spdlog/details/file_helper.h similarity index 100% rename from deps/spdlog/details/file_helper.h rename to src/cpp/deps/spdlog/details/file_helper.h diff --git a/deps/spdlog/details/fmt_helper.h b/src/cpp/deps/spdlog/details/fmt_helper.h similarity index 100% rename from deps/spdlog/details/fmt_helper.h rename to src/cpp/deps/spdlog/details/fmt_helper.h diff --git a/deps/spdlog/details/log_msg.h b/src/cpp/deps/spdlog/details/log_msg.h similarity index 100% rename from deps/spdlog/details/log_msg.h rename to src/cpp/deps/spdlog/details/log_msg.h diff --git a/deps/spdlog/details/logger_impl.h b/src/cpp/deps/spdlog/details/logger_impl.h similarity index 100% rename from deps/spdlog/details/logger_impl.h rename to src/cpp/deps/spdlog/details/logger_impl.h diff --git a/deps/spdlog/details/mpmc_blocking_q.h b/src/cpp/deps/spdlog/details/mpmc_blocking_q.h similarity index 100% rename from deps/spdlog/details/mpmc_blocking_q.h rename to src/cpp/deps/spdlog/details/mpmc_blocking_q.h diff --git a/deps/spdlog/details/null_mutex.h b/src/cpp/deps/spdlog/details/null_mutex.h similarity index 100% rename from deps/spdlog/details/null_mutex.h rename to src/cpp/deps/spdlog/details/null_mutex.h diff --git a/deps/spdlog/details/os.h b/src/cpp/deps/spdlog/details/os.h similarity index 100% rename from deps/spdlog/details/os.h rename to src/cpp/deps/spdlog/details/os.h diff --git a/deps/spdlog/details/pattern_formatter.h b/src/cpp/deps/spdlog/details/pattern_formatter.h similarity index 100% rename from deps/spdlog/details/pattern_formatter.h rename to src/cpp/deps/spdlog/details/pattern_formatter.h diff --git a/deps/spdlog/details/periodic_worker.h b/src/cpp/deps/spdlog/details/periodic_worker.h similarity index 100% rename from deps/spdlog/details/periodic_worker.h rename to src/cpp/deps/spdlog/details/periodic_worker.h diff --git a/deps/spdlog/details/registry.h b/src/cpp/deps/spdlog/details/registry.h similarity index 100% rename from deps/spdlog/details/registry.h rename to src/cpp/deps/spdlog/details/registry.h diff --git a/deps/spdlog/details/thread_pool.h b/src/cpp/deps/spdlog/details/thread_pool.h similarity index 100% rename from deps/spdlog/details/thread_pool.h rename to src/cpp/deps/spdlog/details/thread_pool.h diff --git a/deps/spdlog/fmt/bin_to_hex.h b/src/cpp/deps/spdlog/fmt/bin_to_hex.h similarity index 100% rename from deps/spdlog/fmt/bin_to_hex.h rename to src/cpp/deps/spdlog/fmt/bin_to_hex.h diff --git a/deps/spdlog/fmt/bundled/LICENSE.rst b/src/cpp/deps/spdlog/fmt/bundled/LICENSE.rst similarity index 100% rename from deps/spdlog/fmt/bundled/LICENSE.rst rename to src/cpp/deps/spdlog/fmt/bundled/LICENSE.rst diff --git a/deps/spdlog/fmt/bundled/chrono.h b/src/cpp/deps/spdlog/fmt/bundled/chrono.h similarity index 100% rename from deps/spdlog/fmt/bundled/chrono.h rename to src/cpp/deps/spdlog/fmt/bundled/chrono.h diff --git a/deps/spdlog/fmt/bundled/color.h b/src/cpp/deps/spdlog/fmt/bundled/color.h similarity index 100% rename from deps/spdlog/fmt/bundled/color.h rename to src/cpp/deps/spdlog/fmt/bundled/color.h diff --git a/deps/spdlog/fmt/bundled/core.h b/src/cpp/deps/spdlog/fmt/bundled/core.h similarity index 100% rename from deps/spdlog/fmt/bundled/core.h rename to src/cpp/deps/spdlog/fmt/bundled/core.h diff --git a/deps/spdlog/fmt/bundled/format-inl.h b/src/cpp/deps/spdlog/fmt/bundled/format-inl.h similarity index 100% rename from deps/spdlog/fmt/bundled/format-inl.h rename to src/cpp/deps/spdlog/fmt/bundled/format-inl.h diff --git a/deps/spdlog/fmt/bundled/format.h b/src/cpp/deps/spdlog/fmt/bundled/format.h similarity index 100% rename from deps/spdlog/fmt/bundled/format.h rename to src/cpp/deps/spdlog/fmt/bundled/format.h diff --git a/deps/spdlog/fmt/bundled/locale.h b/src/cpp/deps/spdlog/fmt/bundled/locale.h similarity index 100% rename from deps/spdlog/fmt/bundled/locale.h rename to src/cpp/deps/spdlog/fmt/bundled/locale.h diff --git a/deps/spdlog/fmt/bundled/ostream.h b/src/cpp/deps/spdlog/fmt/bundled/ostream.h similarity index 100% rename from deps/spdlog/fmt/bundled/ostream.h rename to src/cpp/deps/spdlog/fmt/bundled/ostream.h diff --git a/deps/spdlog/fmt/bundled/posix.h b/src/cpp/deps/spdlog/fmt/bundled/posix.h similarity index 100% rename from deps/spdlog/fmt/bundled/posix.h rename to src/cpp/deps/spdlog/fmt/bundled/posix.h diff --git a/deps/spdlog/fmt/bundled/printf.h b/src/cpp/deps/spdlog/fmt/bundled/printf.h similarity index 100% rename from deps/spdlog/fmt/bundled/printf.h rename to src/cpp/deps/spdlog/fmt/bundled/printf.h diff --git a/deps/spdlog/fmt/bundled/ranges.h b/src/cpp/deps/spdlog/fmt/bundled/ranges.h similarity index 100% rename from deps/spdlog/fmt/bundled/ranges.h rename to src/cpp/deps/spdlog/fmt/bundled/ranges.h diff --git a/deps/spdlog/fmt/bundled/time.h b/src/cpp/deps/spdlog/fmt/bundled/time.h similarity index 100% rename from deps/spdlog/fmt/bundled/time.h rename to src/cpp/deps/spdlog/fmt/bundled/time.h diff --git a/deps/spdlog/fmt/fmt.h b/src/cpp/deps/spdlog/fmt/fmt.h similarity index 100% rename from deps/spdlog/fmt/fmt.h rename to src/cpp/deps/spdlog/fmt/fmt.h diff --git a/deps/spdlog/fmt/ostr.h b/src/cpp/deps/spdlog/fmt/ostr.h similarity index 100% rename from deps/spdlog/fmt/ostr.h rename to src/cpp/deps/spdlog/fmt/ostr.h diff --git a/deps/spdlog/formatter.h b/src/cpp/deps/spdlog/formatter.h similarity index 100% rename from deps/spdlog/formatter.h rename to src/cpp/deps/spdlog/formatter.h diff --git a/deps/spdlog/logger.h b/src/cpp/deps/spdlog/logger.h similarity index 100% rename from deps/spdlog/logger.h rename to src/cpp/deps/spdlog/logger.h diff --git a/deps/spdlog/sinks/android_sink.h b/src/cpp/deps/spdlog/sinks/android_sink.h similarity index 100% rename from deps/spdlog/sinks/android_sink.h rename to src/cpp/deps/spdlog/sinks/android_sink.h diff --git a/deps/spdlog/sinks/ansicolor_sink.h b/src/cpp/deps/spdlog/sinks/ansicolor_sink.h similarity index 100% rename from deps/spdlog/sinks/ansicolor_sink.h rename to src/cpp/deps/spdlog/sinks/ansicolor_sink.h diff --git a/deps/spdlog/sinks/base_sink.h b/src/cpp/deps/spdlog/sinks/base_sink.h similarity index 100% rename from deps/spdlog/sinks/base_sink.h rename to src/cpp/deps/spdlog/sinks/base_sink.h diff --git a/deps/spdlog/sinks/basic_file_sink.h b/src/cpp/deps/spdlog/sinks/basic_file_sink.h similarity index 100% rename from deps/spdlog/sinks/basic_file_sink.h rename to src/cpp/deps/spdlog/sinks/basic_file_sink.h diff --git a/deps/spdlog/sinks/daily_file_sink.h b/src/cpp/deps/spdlog/sinks/daily_file_sink.h similarity index 100% rename from deps/spdlog/sinks/daily_file_sink.h rename to src/cpp/deps/spdlog/sinks/daily_file_sink.h diff --git a/deps/spdlog/sinks/dist_sink.h b/src/cpp/deps/spdlog/sinks/dist_sink.h similarity index 100% rename from deps/spdlog/sinks/dist_sink.h rename to src/cpp/deps/spdlog/sinks/dist_sink.h diff --git a/deps/spdlog/sinks/msvc_sink.h b/src/cpp/deps/spdlog/sinks/msvc_sink.h similarity index 100% rename from deps/spdlog/sinks/msvc_sink.h rename to src/cpp/deps/spdlog/sinks/msvc_sink.h diff --git a/deps/spdlog/sinks/null_sink.h b/src/cpp/deps/spdlog/sinks/null_sink.h similarity index 100% rename from deps/spdlog/sinks/null_sink.h rename to src/cpp/deps/spdlog/sinks/null_sink.h diff --git a/deps/spdlog/sinks/ostream_sink.h b/src/cpp/deps/spdlog/sinks/ostream_sink.h similarity index 100% rename from deps/spdlog/sinks/ostream_sink.h rename to src/cpp/deps/spdlog/sinks/ostream_sink.h diff --git a/deps/spdlog/sinks/rotating_file_sink.h b/src/cpp/deps/spdlog/sinks/rotating_file_sink.h similarity index 100% rename from deps/spdlog/sinks/rotating_file_sink.h rename to src/cpp/deps/spdlog/sinks/rotating_file_sink.h diff --git a/deps/spdlog/sinks/sink.h b/src/cpp/deps/spdlog/sinks/sink.h similarity index 100% rename from deps/spdlog/sinks/sink.h rename to src/cpp/deps/spdlog/sinks/sink.h diff --git a/deps/spdlog/sinks/stdout_color_sinks.h b/src/cpp/deps/spdlog/sinks/stdout_color_sinks.h similarity index 100% rename from deps/spdlog/sinks/stdout_color_sinks.h rename to src/cpp/deps/spdlog/sinks/stdout_color_sinks.h diff --git a/deps/spdlog/sinks/stdout_sinks.h b/src/cpp/deps/spdlog/sinks/stdout_sinks.h similarity index 100% rename from deps/spdlog/sinks/stdout_sinks.h rename to src/cpp/deps/spdlog/sinks/stdout_sinks.h diff --git a/deps/spdlog/sinks/syslog_sink.h b/src/cpp/deps/spdlog/sinks/syslog_sink.h similarity index 100% rename from deps/spdlog/sinks/syslog_sink.h rename to src/cpp/deps/spdlog/sinks/syslog_sink.h diff --git a/deps/spdlog/sinks/wincolor_sink.h b/src/cpp/deps/spdlog/sinks/wincolor_sink.h similarity index 100% rename from deps/spdlog/sinks/wincolor_sink.h rename to src/cpp/deps/spdlog/sinks/wincolor_sink.h diff --git a/deps/spdlog/spdlog.h b/src/cpp/deps/spdlog/spdlog.h similarity index 100% rename from deps/spdlog/spdlog.h rename to src/cpp/deps/spdlog/spdlog.h diff --git a/deps/spdlog/tweakme.h b/src/cpp/deps/spdlog/tweakme.h similarity index 100% rename from deps/spdlog/tweakme.h rename to src/cpp/deps/spdlog/tweakme.h diff --git a/deps/spdlog/version.h b/src/cpp/deps/spdlog/version.h similarity index 100% rename from deps/spdlog/version.h rename to src/cpp/deps/spdlog/version.h diff --git a/src/cpp/deps/yoga/Bitfield.h b/src/cpp/deps/yoga/Bitfield.h new file mode 100644 index 0000000000..da85a5bf34 --- /dev/null +++ b/src/cpp/deps/yoga/Bitfield.h @@ -0,0 +1,144 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once + +#include +#include +#include +#include + +namespace facebook { +namespace yoga { + +namespace detail { + +constexpr size_t log2ceil(size_t n) { + return n < 1 ? 0 : (1 + log2ceil(n / 2)); +} + +// The number of bits necessary to represent enums defined with YG_ENUM_SEQ_DECL +template +constexpr size_t bitWidth() { + static_assert( + enums::count() > 0, "Enums must have at least one entries"); + return log2ceil(enums::count() - 1); +} + +// Number of bits needed for a boolean +template <> +constexpr size_t bitWidth() { + return 1; +} + +template +struct BitTraits {}; + +template +struct BitTraits { + // Base cases + static constexpr size_t width(size_t) { return 0; } + static constexpr size_t shift(size_t) { return 0; } +}; + +template +struct BitTraits { + using Rest = BitTraits; + + static constexpr size_t width(size_t idx) { + return idx == 0 ? bitWidth() : Rest::width(idx - 1); + } + + static constexpr size_t shift(size_t idx) { + return idx == 0 ? Rest::width(0) + Rest::shift(0) : Rest::shift(idx - 1); + } + + static constexpr U mask(size_t idx) { + return ((U{1} << width(idx)) - 1) << shift(idx); + } +}; + +template +struct IndexedType { + using Type = typename IndexedType::Type; +}; + +template +struct IndexedType<0, T, Ts...> { + using Type = T; +}; + +} // namespace detail + +template +class Bitfield { + static_assert( + std::is_integral::value, + "Bitfield needs an integral storage type"); + static_assert( + std::is_unsigned::value, + "Bitfield needs an unsigned storage type"); + static_assert(sizeof...(Fields) > 0, "Bitfield needs at least one member"); + + using BitTraits = detail::BitTraits; + +#if !defined(_MSC_VER) || _MSC_VER > 1914 + static_assert( + BitTraits::shift(0) + BitTraits::width(0) <= + std::numeric_limits::digits, + "Specified storage type is too narrow to hold all types"); +#endif + + template + using TypeAt = typename detail::IndexedType::Type; + + template + static constexpr Storage initStorage(Value value, Values... values) { + return ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)) | + initStorage(values...); + } + + template + static constexpr Storage initStorage() { + return Storage{0}; + } + + Storage storage_ = 0; + +public: + template + class Ref { + Bitfield& bitfield_; + + public: + Ref(Bitfield& bitfield) : bitfield_(bitfield) {} + Ref& operator=(TypeAt value) { + bitfield_.storage_ = (bitfield_.storage_ & ~BitTraits::mask(Idx)) | + ((value << BitTraits::shift(Idx)) & BitTraits::mask(Idx)); + return *this; + } + operator TypeAt() const { + return const_cast(bitfield_).at(); + } + }; + + constexpr Bitfield() = default; + constexpr Bitfield(Fields... values) : storage_{initStorage<0>(values...)} {} + + template + constexpr TypeAt at() const { + return static_cast>( + (storage_ & BitTraits::mask(Idx)) >> BitTraits::shift(Idx)); + } + + template + Ref at() { + return {*this}; + } +}; + +} // namespace yoga +} // namespace facebook diff --git a/deps/yoga/CompactValue.h b/src/cpp/deps/yoga/CompactValue.h similarity index 100% rename from deps/yoga/CompactValue.h rename to src/cpp/deps/yoga/CompactValue.h diff --git a/deps/yoga/Utils.cpp b/src/cpp/deps/yoga/Utils.cpp similarity index 100% rename from deps/yoga/Utils.cpp rename to src/cpp/deps/yoga/Utils.cpp diff --git a/deps/yoga/Utils.h b/src/cpp/deps/yoga/Utils.h similarity index 100% rename from deps/yoga/Utils.h rename to src/cpp/deps/yoga/Utils.h diff --git a/deps/yoga/YGConfig.cpp b/src/cpp/deps/yoga/YGConfig.cpp similarity index 100% rename from deps/yoga/YGConfig.cpp rename to src/cpp/deps/yoga/YGConfig.cpp diff --git a/deps/yoga/YGConfig.h b/src/cpp/deps/yoga/YGConfig.h similarity index 100% rename from deps/yoga/YGConfig.h rename to src/cpp/deps/yoga/YGConfig.h diff --git a/deps/yoga/YGEnums.cpp b/src/cpp/deps/yoga/YGEnums.cpp similarity index 100% rename from deps/yoga/YGEnums.cpp rename to src/cpp/deps/yoga/YGEnums.cpp diff --git a/deps/yoga/YGEnums.h b/src/cpp/deps/yoga/YGEnums.h similarity index 100% rename from deps/yoga/YGEnums.h rename to src/cpp/deps/yoga/YGEnums.h diff --git a/deps/yoga/YGFloatOptional.h b/src/cpp/deps/yoga/YGFloatOptional.h similarity index 100% rename from deps/yoga/YGFloatOptional.h rename to src/cpp/deps/yoga/YGFloatOptional.h diff --git a/deps/yoga/YGLayout.cpp b/src/cpp/deps/yoga/YGLayout.cpp similarity index 93% rename from deps/yoga/YGLayout.cpp rename to src/cpp/deps/yoga/YGLayout.cpp index d1144ea6f2..ee39886862 100644 --- a/deps/yoga/YGLayout.cpp +++ b/src/cpp/deps/yoga/YGLayout.cpp @@ -15,7 +15,8 @@ bool YGLayout::operator==(YGLayout layout) const { YGFloatArrayEqual(margin, layout.margin) && YGFloatArrayEqual(border, layout.border) && YGFloatArrayEqual(padding, layout.padding) && - direction == layout.direction && hadOverflow == layout.hadOverflow && + direction() == layout.direction() && + hadOverflow() == layout.hadOverflow() && lastOwnerDirection == layout.lastOwnerDirection && nextCachedMeasurementsIndex == layout.nextCachedMeasurementsIndex && cachedLayout == layout.cachedLayout && diff --git a/src/cpp/deps/yoga/YGLayout.h b/src/cpp/deps/yoga/YGLayout.h new file mode 100644 index 0000000000..4b62ceccf6 --- /dev/null +++ b/src/cpp/deps/yoga/YGLayout.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once +#include "Bitfield.h" +#include "YGFloatOptional.h" +#include "Yoga-internal.h" + +struct YGLayout { + std::array position = {}; + std::array dimensions = {{YGUndefined, YGUndefined}}; + std::array margin = {}; + std::array border = {}; + std::array padding = {}; + +private: + static constexpr size_t directionIdx = 0; + static constexpr size_t didUseLegacyFlagIdx = 1; + static constexpr size_t doesLegacyStretchFlagAffectsLayoutIdx = 2; + static constexpr size_t hadOverflowIdx = 3; + facebook::yoga::Bitfield flags_ = + {YGDirectionInherit, false, false, false}; + +public: + uint32_t computedFlexBasisGeneration = 0; + YGFloatOptional computedFlexBasis = {}; + + // Instead of recomputing the entire layout every single time, we cache some + // information to break early when nothing changed + uint32_t generationCount = 0; + YGDirection lastOwnerDirection = (YGDirection) -1; + + uint32_t nextCachedMeasurementsIndex = 0; + std::array + cachedMeasurements = {}; + std::array measuredDimensions = {{YGUndefined, YGUndefined}}; + + YGCachedMeasurement cachedLayout = YGCachedMeasurement(); + + YGDirection direction() const { return flags_.at(); } + decltype(flags_)::Ref direction() { + return flags_.at(); + } + + bool didUseLegacyFlag() const { return flags_.at(); } + decltype(flags_)::Ref didUseLegacyFlag() { + return flags_.at(); + } + + bool doesLegacyStretchFlagAffectsLayout() const { + return flags_.at(); + } + decltype(flags_)::Ref + doesLegacyStretchFlagAffectsLayout() { + return flags_.at(); + } + + bool hadOverflow() const { return flags_.at(); } + decltype(flags_)::Ref hadOverflow() { + return flags_.at(); + } + + bool operator==(YGLayout layout) const; + bool operator!=(YGLayout layout) const { return !(*this == layout); } +}; diff --git a/deps/yoga/YGMacros.h b/src/cpp/deps/yoga/YGMacros.h similarity index 100% rename from deps/yoga/YGMacros.h rename to src/cpp/deps/yoga/YGMacros.h diff --git a/deps/yoga/YGNode.cpp b/src/cpp/deps/yoga/YGNode.cpp similarity index 93% rename from deps/yoga/YGNode.cpp rename to src/cpp/deps/yoga/YGNode.cpp index 8941487fb5..bb240dfc8b 100644 --- a/deps/yoga/YGNode.cpp +++ b/src/cpp/deps/yoga/YGNode.cpp @@ -15,14 +15,7 @@ using facebook::yoga::detail::CompactValue; YGNode::YGNode(YGNode&& node) { context_ = node.context_; - hasNewLayout_ = node.hasNewLayout_; - isReferenceBaseline_ = node.isReferenceBaseline_; - isDirty_ = node.isDirty_; - nodeType_ = node.nodeType_; - measureUsesContext_ = node.measureUsesContext_; - baselineUsesContext_ = node.baselineUsesContext_; - printUsesContext_ = node.printUsesContext_; - useWebDefaults_ = node.useWebDefaults_; + flags_ = node.flags_; measure_ = node.measure_; baseline_ = node.baseline_; print_ = node.print_; @@ -48,7 +41,7 @@ YGNode::YGNode(const YGNode& node, YGConfigRef config) : YGNode{node} { void YGNode::print(void* printContext) { if (print_.noContext != nullptr) { - if (printUsesContext_) { + if (flags_.at()) { print_.withContext(this, printContext); } else { print_.noContext(this); @@ -154,14 +147,14 @@ YGSize YGNode::measure( YGMeasureMode heightMode, void* layoutContext) { - return measureUsesContext_ + return flags_.at() ? measure_.withContext( this, width, widthMode, height, heightMode, layoutContext) : measure_.noContext(this, width, widthMode, height, heightMode); } float YGNode::baseline(float width, float height, void* layoutContext) { - return baselineUsesContext_ + return flags_.at() ? baseline_.withContext(this, width, height, layoutContext) : baseline_.noContext(this, width, height); } @@ -172,7 +165,7 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { if (measureFunc.noContext == nullptr) { // TODO: t18095186 Move nodeType to opt-in function and mark appropriate // places in Litho - nodeType_ = YGNodeTypeDefault; + flags_.at() = YGNodeTypeDefault; } else { YGAssertWithNode( this, @@ -188,14 +181,14 @@ void YGNode::setMeasureFunc(decltype(YGNode::measure_) measureFunc) { } void YGNode::setMeasureFunc(YGMeasureFunc measureFunc) { - measureUsesContext_ = false; + flags_.at() = false; decltype(YGNode::measure_) m; m.noContext = measureFunc; setMeasureFunc(m); } void YGNode::setMeasureFunc(MeasureWithContextFn measureFunc) { - measureUsesContext_ = true; + flags_.at() = true; decltype(YGNode::measure_) m; m.withContext = measureFunc; setMeasureFunc(m); @@ -214,10 +207,10 @@ void YGNode::insertChild(YGNodeRef child, uint32_t index) { } void YGNode::setDirty(bool isDirty) { - if (isDirty == isDirty_) { + if (isDirty == flags_.at()) { return; } - isDirty_ = isDirty; + flags_.at() = isDirty; if (isDirty && dirtied_) { dirtied_(this); } @@ -238,7 +231,7 @@ void YGNode::removeChild(uint32_t index) { } void YGNode::setLayoutDirection(YGDirection direction) { - layout_.direction = direction; + layout_.direction() = direction; } void YGNode::setLayoutMargin(float margin, int index) { @@ -276,7 +269,7 @@ void YGNode::setLayoutMeasuredDimension(float measuredDimension, int index) { } void YGNode::setLayoutHadOverflow(bool hadOverflow) { - layout_.hadOverflow = hadOverflow; + layout_.hadOverflow() = hadOverflow; } void YGNode::setLayoutDimension(float dimension, int index) { @@ -357,7 +350,7 @@ YGValue YGNode::resolveFlexBasisPtr() const { return flexBasis; } if (!style_.flex().isUndefined() && style_.flex().unwrap() > 0.0f) { - return useWebDefaults_ ? YGValueAuto : YGValueZero; + return flags_.at() ? YGValueAuto : YGValueZero; } return YGValueAuto; } @@ -396,7 +389,7 @@ void YGNode::cloneChildrenIfNeeded(void* cloneContext) { } void YGNode::markDirtyAndPropogate() { - if (!isDirty_) { + if (!flags_.at()) { setDirty(true); setLayoutComputedFlexBasis(YGFloatOptional()); if (owner_) { @@ -406,7 +399,7 @@ void YGNode::markDirtyAndPropogate() { } void YGNode::markDirtyAndPropogateDownwards() { - isDirty_ = true; + flags_.at() = true; for_each(children_.begin(), children_.end(), [](YGNodeRef childNode) { childNode->markDirtyAndPropogateDownwards(); }); @@ -433,11 +426,12 @@ float YGNode::resolveFlexShrink() const { if (!style_.flexShrink().isUndefined()) { return style_.flexShrink().unwrap(); } - if (!useWebDefaults_ && !style_.flex().isUndefined() && + if (!flags_.at() && !style_.flex().isUndefined() && style_.flex().unwrap() < 0.0f) { return -style_.flex().unwrap(); } - return useWebDefaults_ ? kWebDefaultFlexShrink : kDefaultFlexShrink; + return flags_.at() ? kWebDefaultFlexShrink + : kDefaultFlexShrink; } bool YGNode::isNodeFlexible() { @@ -526,12 +520,12 @@ YGFloatOptional YGNode::getTrailingPaddingAndBorder( } bool YGNode::didUseLegacyFlag() { - bool didUseLegacyFlag = layout_.didUseLegacyFlag; + bool didUseLegacyFlag = layout_.didUseLegacyFlag(); if (didUseLegacyFlag) { return true; } for (const auto& child : children_) { - if (child->layout_.didUseLegacyFlag) { + if (child->layout_.didUseLegacyFlag()) { didUseLegacyFlag = true; break; } @@ -541,11 +535,11 @@ bool YGNode::didUseLegacyFlag() { void YGNode::setLayoutDoesLegacyFlagAffectsLayout( bool doesLegacyFlagAffectsLayout) { - layout_.doesLegacyStretchFlagAffectsLayout = doesLegacyFlagAffectsLayout; + layout_.doesLegacyStretchFlagAffectsLayout() = doesLegacyFlagAffectsLayout; } void YGNode::setLayoutDidUseLegacyFlag(bool didUseLegacyFlag) { - layout_.didUseLegacyFlag = didUseLegacyFlag; + layout_.didUseLegacyFlag() = didUseLegacyFlag; } bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { @@ -582,7 +576,7 @@ void YGNode::reset() { clearChildren(); - auto webDefaults = useWebDefaults_; + auto webDefaults = flags_.at(); *this = YGNode{getConfig()}; if (webDefaults) { useWebDefaults(); diff --git a/deps/yoga/YGNode.h b/src/cpp/deps/yoga/YGNode.h similarity index 86% rename from deps/yoga/YGNode.h rename to src/cpp/deps/yoga/YGNode.h index cc11cc88d8..cc5f36861b 100644 --- a/deps/yoga/YGNode.h +++ b/src/cpp/deps/yoga/YGNode.h @@ -7,6 +7,7 @@ #pragma once #include #include +#include "Bitfield.h" #include "CompactValue.h" #include "YGConfig.h" #include "YGLayout.h" @@ -23,15 +24,20 @@ struct YGNode { using PrintWithContextFn = void (*)(YGNode*, void*); private: + static constexpr size_t hasNewLayout_ = 0; + static constexpr size_t isReferenceBaseline_ = 1; + static constexpr size_t isDirty_ = 2; + static constexpr size_t nodeType_ = 3; + static constexpr size_t measureUsesContext_ = 4; + static constexpr size_t baselineUsesContext_ = 5; + static constexpr size_t printUsesContext_ = 6; + static constexpr size_t useWebDefaults_ = 7; + void* context_ = nullptr; - bool hasNewLayout_ : 1; - bool isReferenceBaseline_ : 1; - bool isDirty_ : 1; - YGNodeType nodeType_ : 1; - bool measureUsesContext_ : 1; - bool baselineUsesContext_ : 1; - bool printUsesContext_ : 1; - bool useWebDefaults_ : 1; + using Flags = facebook::yoga:: + Bitfield; + Flags flags_ = + {true, false, false, YGNodeTypeDefault, false, false, false, false}; uint8_t reserved_ = 0; union { YGMeasureFunc noContext; @@ -63,7 +69,7 @@ struct YGNode { void setBaselineFunc(decltype(baseline_)); void useWebDefaults() { - useWebDefaults_ = true; + flags_.at() = true; style_.flexDirection() = YGFlexDirectionRow; style_.alignContent() = YGAlignStretch; } @@ -79,17 +85,8 @@ struct YGNode { public: YGNode() : YGNode{YGConfigGetDefault()} {} - explicit YGNode(const YGConfigRef config) - : hasNewLayout_{true}, - isReferenceBaseline_{false}, - isDirty_{false}, - nodeType_{YGNodeTypeDefault}, - measureUsesContext_{false}, - baselineUsesContext_{false}, - printUsesContext_{false}, - useWebDefaults_{config->useWebDefaults}, - config_{config} { - if (useWebDefaults_) { + explicit YGNode(const YGConfigRef config) : config_{config} { + if (config->useWebDefaults) { useWebDefaults(); } }; @@ -116,9 +113,9 @@ struct YGNode { void print(void*); - bool getHasNewLayout() const { return hasNewLayout_; } + bool getHasNewLayout() const { return flags_.at(); } - YGNodeType getNodeType() const { return nodeType_; } + YGNodeType getNodeType() const { return flags_.at(); } bool hasMeasureFunc() const noexcept { return measure_.noContext != nullptr; } @@ -144,7 +141,7 @@ struct YGNode { uint32_t getLineIndex() const { return lineIndex_; } - bool isReferenceBaseline() { return isReferenceBaseline_; } + bool isReferenceBaseline() { return flags_.at(); } // returns the YGNodeRef that owns this YGNode. An owner is used to identify // the YogaTree that a YGNode belongs to. This method will return the parent @@ -177,7 +174,7 @@ struct YGNode { YGConfigRef getConfig() const { return config_; } - bool isDirty() const { return isDirty_; } + bool isDirty() const { return flags_.at(); } std::array getResolvedDimensions() const { return resolvedDimensions_; @@ -225,17 +222,19 @@ struct YGNode { void setPrintFunc(YGPrintFunc printFunc) { print_.noContext = printFunc; - printUsesContext_ = false; + flags_.at() = false; } void setPrintFunc(PrintWithContextFn printFunc) { print_.withContext = printFunc; - printUsesContext_ = true; + flags_.at() = true; } void setPrintFunc(std::nullptr_t) { setPrintFunc(YGPrintFunc{nullptr}); } - void setHasNewLayout(bool hasNewLayout) { hasNewLayout_ = hasNewLayout; } + void setHasNewLayout(bool hasNewLayout) { + flags_.at() = hasNewLayout; + } - void setNodeType(YGNodeType nodeType) { nodeType_ = nodeType; } + void setNodeType(YGNodeType nodeType) { flags_.at() = nodeType; } void setMeasureFunc(YGMeasureFunc measureFunc); void setMeasureFunc(MeasureWithContextFn); @@ -244,11 +243,11 @@ struct YGNode { } void setBaselineFunc(YGBaselineFunc baseLineFunc) { - baselineUsesContext_ = false; + flags_.at() = false; baseline_.noContext = baseLineFunc; } void setBaselineFunc(BaselineWithContextFn baseLineFunc) { - baselineUsesContext_ = true; + flags_.at() = true; baseline_.withContext = baseLineFunc; } void setBaselineFunc(std::nullptr_t) { @@ -264,7 +263,7 @@ struct YGNode { void setLineIndex(uint32_t lineIndex) { lineIndex_ = lineIndex; } void setIsReferenceBaseline(bool isReferenceBaseline) { - isReferenceBaseline_ = isReferenceBaseline; + flags_.at() = isReferenceBaseline; } void setOwner(YGNodeRef owner) { owner_ = owner; } diff --git a/deps/yoga/YGNodePrint.cpp b/src/cpp/deps/yoga/YGNodePrint.cpp similarity index 100% rename from deps/yoga/YGNodePrint.cpp rename to src/cpp/deps/yoga/YGNodePrint.cpp diff --git a/deps/yoga/YGNodePrint.h b/src/cpp/deps/yoga/YGNodePrint.h similarity index 100% rename from deps/yoga/YGNodePrint.h rename to src/cpp/deps/yoga/YGNodePrint.h diff --git a/deps/yoga/YGStyle.cpp b/src/cpp/deps/yoga/YGStyle.cpp similarity index 100% rename from deps/yoga/YGStyle.cpp rename to src/cpp/deps/yoga/YGStyle.cpp diff --git a/src/cpp/deps/yoga/YGStyle.h b/src/cpp/deps/yoga/YGStyle.h new file mode 100644 index 0000000000..b497b5c157 --- /dev/null +++ b/src/cpp/deps/yoga/YGStyle.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the LICENSE + * file in the root directory of this source tree. + */ +#pragma once +#include +#include +#include +#include +#include "Bitfield.h" +#include "CompactValue.h" +#include "YGEnums.h" +#include "YGFloatOptional.h" +#include "Yoga-internal.h" +#include "Yoga.h" + +class YGStyle { + template + using Values = + facebook::yoga::detail::Values()>; + using CompactValue = facebook::yoga::detail::CompactValue; + +public: + using Dimensions = Values; + using Edges = Values; + + template + struct Ref { + YGStyle& style; + operator T() const { return style.*Prop; } + Ref& operator=(T value) { + style.*Prop = value; + return *this; + } + }; + + template YGStyle::*Prop> + struct IdxRef { + struct Ref { + YGStyle& style; + Idx idx; + operator CompactValue() const { return (style.*Prop)[idx]; } + operator YGValue() const { return (style.*Prop)[idx]; } + Ref& operator=(CompactValue value) { + (style.*Prop)[idx] = value; + return *this; + } + }; + + YGStyle& style; + IdxRef& operator=(const Values& values) { + style.*Prop = values; + return *this; + } + operator const Values&() const { return style.*Prop; } + Ref operator[](Idx idx) { return {style, idx}; } + CompactValue operator[](Idx idx) const { return (style.*Prop)[idx]; } + }; + + YGStyle() = default; + ~YGStyle() = default; + +private: + static constexpr size_t directionIdx = 0; + static constexpr size_t flexDirectionIdx = 1; + static constexpr size_t justifyContentIdx = 2; + static constexpr size_t alignContentIdx = 3; + static constexpr size_t alignItemsIdx = 4; + static constexpr size_t alignSelfIdx = 5; + static constexpr size_t positionTypeIdx = 6; + static constexpr size_t flexWrapIdx = 7; + static constexpr size_t overflowIdx = 8; + static constexpr size_t displayIdx = 9; + using Flags = facebook::yoga::Bitfield< + uint32_t, + YGDirection, + YGFlexDirection, + YGJustify, + YGAlign, + YGAlign, + YGAlign, + YGPositionType, + YGWrap, + YGOverflow, + YGDisplay>; + + Flags flags_ = {YGDirectionInherit, + YGFlexDirectionColumn, + YGJustifyFlexStart, + YGAlignFlexStart, + YGAlignStretch, + YGAlignAuto, + YGPositionTypeRelative, + YGWrapNoWrap, + YGOverflowVisible, + YGDisplayFlex}; + YGFloatOptional flex_ = {}; + YGFloatOptional flexGrow_ = {}; + YGFloatOptional flexShrink_ = {}; + CompactValue flexBasis_ = CompactValue::ofAuto(); + Edges margin_ = {}; + Edges position_ = {}; + Edges padding_ = {}; + Edges border_ = {}; + Dimensions dimensions_{CompactValue::ofAuto()}; + Dimensions minDimensions_ = {}; + Dimensions maxDimensions_ = {}; + // Yoga specific properties, not compatible with flexbox specification + YGFloatOptional aspectRatio_ = {}; + +public: + // for library users needing a type + using ValueRepr = std::remove_reference::type; + + YGDirection direction() const { return flags_.at(); } + Flags::Ref direction() { return flags_.at(); } + + YGFlexDirection flexDirection() const { + return flags_.at(); + } + Flags::Ref flexDirection() { + return flags_.at(); + } + + YGJustify justifyContent() const { return flags_.at(); } + Flags::Ref justifyContent() { + return flags_.at(); + } + + YGAlign alignContent() const { return flags_.at(); } + Flags::Ref alignContent() { + return flags_.at(); + } + + YGAlign alignItems() const { return flags_.at(); } + Flags::Ref alignItems() { return flags_.at(); } + + YGAlign alignSelf() const { return flags_.at(); } + Flags::Ref alignSelf() { return flags_.at(); } + + YGPositionType positionType() const { return flags_.at(); } + Flags::Ref positionType() { + return flags_.at(); + } + + YGWrap flexWrap() const { return flags_.at(); } + Flags::Ref flexWrap() { return flags_.at(); } + + YGOverflow overflow() const { return flags_.at(); } + Flags::Ref overflow() { return flags_.at(); } + + YGDisplay display() const { return flags_.at(); } + Flags::Ref display() { return flags_.at(); } + + YGFloatOptional flex() const { return flex_; } + Ref flex() { return {*this}; } + + YGFloatOptional flexGrow() const { return flexGrow_; } + Ref flexGrow() { return {*this}; } + + YGFloatOptional flexShrink() const { return flexShrink_; } + Ref flexShrink() { return {*this}; } + + CompactValue flexBasis() const { return flexBasis_; } + Ref flexBasis() { return {*this}; } + + const Edges& margin() const { return margin_; } + IdxRef margin() { return {*this}; } + + const Edges& position() const { return position_; } + IdxRef position() { return {*this}; } + + const Edges& padding() const { return padding_; } + IdxRef padding() { return {*this}; } + + const Edges& border() const { return border_; } + IdxRef border() { return {*this}; } + + const Dimensions& dimensions() const { return dimensions_; } + IdxRef dimensions() { return {*this}; } + + const Dimensions& minDimensions() const { return minDimensions_; } + IdxRef minDimensions() { + return {*this}; + } + + const Dimensions& maxDimensions() const { return maxDimensions_; } + IdxRef maxDimensions() { + return {*this}; + } + + // Yoga specific properties, not compatible with flexbox specification + YGFloatOptional aspectRatio() const { return aspectRatio_; } + Ref aspectRatio() { return {*this}; } +}; + +bool operator==(const YGStyle& lhs, const YGStyle& rhs); +inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) { + return !(lhs == rhs); +} diff --git a/deps/yoga/YGValue.cpp b/src/cpp/deps/yoga/YGValue.cpp similarity index 100% rename from deps/yoga/YGValue.cpp rename to src/cpp/deps/yoga/YGValue.cpp diff --git a/deps/yoga/YGValue.h b/src/cpp/deps/yoga/YGValue.h similarity index 100% rename from deps/yoga/YGValue.h rename to src/cpp/deps/yoga/YGValue.h diff --git a/deps/yoga/Yoga-internal.h b/src/cpp/deps/yoga/Yoga-internal.h similarity index 100% rename from deps/yoga/Yoga-internal.h rename to src/cpp/deps/yoga/Yoga-internal.h diff --git a/deps/yoga/Yoga.cpp b/src/cpp/deps/yoga/Yoga.cpp similarity index 99% rename from deps/yoga/Yoga.cpp rename to src/cpp/deps/yoga/Yoga.cpp index e87fa32516..1a374ab374 100644 --- a/deps/yoga/Yoga.cpp +++ b/src/cpp/deps/yoga/Yoga.cpp @@ -15,7 +15,6 @@ #include "YGNodePrint.h" #include "Yoga-internal.h" #include "event/event.h" -#include "internal/experiments-inl.h" #ifdef _MSC_VER #include @@ -892,7 +891,7 @@ YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { "Cannot get layout properties of multi-edge shorthands"); \ \ if (edge == YGEdgeStart) { \ - if (node->getLayout().direction == YGDirectionRTL) { \ + if (node->getLayout().direction() == YGDirectionRTL) { \ return node->getLayout().instanceName[YGEdgeRight]; \ } else { \ return node->getLayout().instanceName[YGEdgeLeft]; \ @@ -900,7 +899,7 @@ YGValue YGNodeStyleGetMaxHeight(const YGNodeConstRef node) { } \ \ if (edge == YGEdgeEnd) { \ - if (node->getLayout().direction == YGDirectionRTL) { \ + if (node->getLayout().direction() == YGDirectionRTL) { \ return node->getLayout().instanceName[YGEdgeLeft]; \ } else { \ return node->getLayout().instanceName[YGEdgeRight]; \ @@ -916,15 +915,15 @@ YG_NODE_LAYOUT_PROPERTY_IMPL(float, Right, position[YGEdgeRight]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Bottom, position[YGEdgeBottom]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Width, dimensions[YGDimensionWidth]); YG_NODE_LAYOUT_PROPERTY_IMPL(float, Height, dimensions[YGDimensionHeight]); -YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction); -YG_NODE_LAYOUT_PROPERTY_IMPL(bool, HadOverflow, hadOverflow); +YG_NODE_LAYOUT_PROPERTY_IMPL(YGDirection, Direction, direction()); +YG_NODE_LAYOUT_PROPERTY_IMPL(bool, HadOverflow, hadOverflow()); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Margin, margin); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Border, border); YG_NODE_LAYOUT_RESOLVED_PROPERTY_IMPL(float, Padding, padding); bool YGNodeLayoutGetDidLegacyStretchFlagAffectLayout(const YGNodeRef node) { - return node->getLayout().doesLegacyStretchFlagAffectsLayout; + return node->getLayout().doesLegacyStretchFlagAffectsLayout(); } uint32_t gCurrentGenerationCount = 0; @@ -1645,6 +1644,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( layoutContext); layoutMarkerData.measureCallbacks += 1; + layoutMarkerData.measureCallbackReasonsCount[static_cast(reason)] += + 1; Event::publish( node, @@ -1657,15 +1658,6 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions( measuredSize.height, reason}); - if (internal::isEnabled(internal::Experiment::kDoubleMeasureCallbacks)) { - node->measure( - innerWidth, - widthMeasureMode, - innerHeight, - heightMeasureMode, - layoutContext); - } - node->setLayoutMeasuredDimension( YGNodeBoundAxis( node, @@ -1853,7 +1845,7 @@ static float YGNodeComputeFlexBasisForChildren( const uint32_t generationCount) { float totalOuterFlexBasis = 0.0f; YGNodeRef singleFlexChild = nullptr; - YGVector children = node->getChildren(); + const YGVector &children = node->getChildren(); YGMeasureMode measureModeMainDim = YGFlexDirectionIsRow(mainAxis) ? widthMeasureMode : heightMeasureMode; // If there is only one child with flexGrow + flexShrink it means we can set @@ -2185,27 +2177,29 @@ static float YGDistributeFreeSpaceSecondPass( const YGMeasureMode childHeightMeasureMode = !isMainAxisRow ? childMainMeasureMode : childCrossMeasureMode; + const bool isLayoutPass = performLayout && !requiresStretchLayout; // Recursively call the layout algorithm for this child with the updated // main size. YGLayoutNodeInternal( currentRelativeChild, childWidth, childHeight, - node->getLayout().direction, + node->getLayout().direction(), childWidthMeasureMode, childHeightMeasureMode, availableInnerWidth, availableInnerHeight, - performLayout && !requiresStretchLayout, - LayoutPassReason::kFlex, + isLayoutPass, + isLayoutPass ? LayoutPassReason::kFlexLayout + : LayoutPassReason::kFlexMeasure, config, layoutMarkerData, layoutContext, depth, generationCount); node->setLayoutHadOverflow( - node->getLayout().hadOverflow | - currentRelativeChild->getLayout().hadOverflow); + node->getLayout().hadOverflow() | + currentRelativeChild->getLayout().hadOverflow()); } return deltaFreeSpace; } @@ -2964,7 +2958,7 @@ static void YGNodelayoutImpl( } node->setLayoutHadOverflow( - node->getLayout().hadOverflow | + node->getLayout().hadOverflow() | (collectedFlexItemsValues.remainingFreeSpace < 0)); // STEP 6: MAIN-AXIS JUSTIFICATION & CROSS-AXIS SIZE DETERMINATION @@ -4143,7 +4137,7 @@ void YGNodeCalculateLayoutWithContext( 0, // tree root gCurrentGenerationCount)) { node->setPosition( - node->getLayout().direction, ownerWidth, ownerHeight, ownerWidth); + node->getLayout().direction(), ownerWidth, ownerHeight, ownerWidth); YGRoundToPixelGrid(node, node->getConfig()->pointScaleFactor, 0.0f, 0.0f); #ifdef DEBUG @@ -4193,7 +4187,7 @@ void YGNodeCalculateLayoutWithContext( 0, // tree root gCurrentGenerationCount)) { nodeWithoutLegacyFlag->setPosition( - nodeWithoutLegacyFlag->getLayout().direction, + nodeWithoutLegacyFlag->getLayout().direction(), ownerWidth, ownerHeight, ownerWidth); diff --git a/deps/yoga/Yoga.h b/src/cpp/deps/yoga/Yoga.h similarity index 100% rename from deps/yoga/Yoga.h rename to src/cpp/deps/yoga/Yoga.h diff --git a/deps/yoga/event/event.cpp b/src/cpp/deps/yoga/event/event.cpp similarity index 93% rename from deps/yoga/event/event.cpp rename to src/cpp/deps/yoga/event/event.cpp index 326214fc4e..48e8f41da8 100644 --- a/deps/yoga/event/event.cpp +++ b/src/cpp/deps/yoga/event/event.cpp @@ -16,18 +16,20 @@ const char* LayoutPassReasonToString(const LayoutPassReason value) { switch (value) { case LayoutPassReason::kInitial: return "initial"; - case LayoutPassReason::kMeasureChild: - return "measure"; - case LayoutPassReason::kAbsMeasureChild: - return "abs_measure"; - case LayoutPassReason::kFlex: - return "flex"; case LayoutPassReason::kAbsLayout: return "abs_layout"; case LayoutPassReason::kStretch: return "stretch"; case LayoutPassReason::kMultilineStretch: return "multiline_stretch"; + case LayoutPassReason::kFlexLayout: + return "flex_layout"; + case LayoutPassReason::kMeasureChild: + return "measure"; + case LayoutPassReason::kAbsMeasureChild: + return "abs_measure"; + case LayoutPassReason::kFlexMeasure: + return "flex_measure"; default: return "unknown"; } diff --git a/deps/yoga/event/event.h b/src/cpp/deps/yoga/event/event.h similarity index 90% rename from deps/yoga/event/event.h rename to src/cpp/deps/yoga/event/event.h index 618574e8da..39b07394d3 100644 --- a/deps/yoga/event/event.h +++ b/src/cpp/deps/yoga/event/event.h @@ -8,6 +8,7 @@ #include #include +#include #include struct YGConfig; @@ -23,6 +24,18 @@ enum struct LayoutType : int { kCachedMeasure = 3 }; +enum struct LayoutPassReason : int { + kInitial = 0, + kAbsLayout = 1, + kStretch = 2, + kMultilineStretch = 3, + kFlexLayout = 4, + kMeasureChild = 5, + kAbsMeasureChild = 6, + kFlexMeasure = 7, + COUNT +}; + struct LayoutData { int layouts; int measures; @@ -30,16 +43,8 @@ struct LayoutData { int cachedLayouts; int cachedMeasures; int measureCallbacks; -}; - -enum struct LayoutPassReason : int { - kInitial = 0, - kMeasureChild = 1, - kAbsMeasureChild = 2, - kFlex = 3, - kAbsLayout = 4, - kStretch = 5, - kMultilineStretch = 6 + std::array(LayoutPassReason::COUNT)> + measureCallbackReasonsCount; }; const char* LayoutPassReasonToString(const LayoutPassReason value); diff --git a/deps/yoga/internal/experiments-inl.h b/src/cpp/deps/yoga/internal/experiments-inl.h similarity index 100% rename from deps/yoga/internal/experiments-inl.h rename to src/cpp/deps/yoga/internal/experiments-inl.h diff --git a/deps/yoga/internal/experiments.cpp b/src/cpp/deps/yoga/internal/experiments.cpp similarity index 100% rename from deps/yoga/internal/experiments.cpp rename to src/cpp/deps/yoga/internal/experiments.cpp diff --git a/deps/yoga/internal/experiments.h b/src/cpp/deps/yoga/internal/experiments.h similarity index 100% rename from deps/yoga/internal/experiments.h rename to src/cpp/deps/yoga/internal/experiments.h diff --git a/deps/yoga/log.cpp b/src/cpp/deps/yoga/log.cpp similarity index 100% rename from deps/yoga/log.cpp rename to src/cpp/deps/yoga/log.cpp diff --git a/deps/yoga/log.h b/src/cpp/deps/yoga/log.h similarity index 100% rename from deps/yoga/log.h rename to src/cpp/deps/yoga/log.h diff --git a/src/cpp/Extras/Utils/nutils.h b/src/cpp/include/nodegui/Extras/Utils/nutils.h similarity index 77% rename from src/cpp/Extras/Utils/nutils.h rename to src/cpp/include/nodegui/Extras/Utils/nutils.h index 3dc210687f..2c5c43529f 100644 --- a/src/cpp/Extras/Utils/nutils.h +++ b/src/cpp/include/nodegui/Extras/Utils/nutils.h @@ -1,6 +1,6 @@ #pragma once -#include "src/cpp/core/FlexLayout/flexlayout.h" +#include "core/FlexLayout/flexlayout.h" namespace extrautils { YGSize measureQtWidget (YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode); diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.h b/src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h similarity index 100% rename from src/cpp/QtGui/QApplication/qapplication_wrap.h rename to src/cpp/include/nodegui/QtGui/QApplication/qapplication_wrap.h diff --git a/src/cpp/QtGui/QClipboard/qclipboard_wrap.h b/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h similarity index 91% rename from src/cpp/QtGui/QClipboard/qclipboard_wrap.h rename to src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h index 386a0e98d7..916ee2e0a4 100644 --- a/src/cpp/QtGui/QClipboard/qclipboard_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QClipboard/qclipboard_wrap.h @@ -2,7 +2,7 @@ #include #include -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" class QClipboardWrap : public Napi::ObjectWrap { diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.h b/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h similarity index 91% rename from src/cpp/QtGui/QCursor/qcursor_wrap.h rename to src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h index e723107faf..8627faaf94 100644 --- a/src/cpp/QtGui/QCursor/qcursor_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QCursor/qcursor_wrap.h @@ -3,7 +3,7 @@ #include #include #include -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" class QCursorWrap : public Napi::ObjectWrap { diff --git a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h b/src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h similarity index 100% rename from src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h rename to src/cpp/include/nodegui/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.h b/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h similarity index 90% rename from src/cpp/QtGui/QIcon/qicon_wrap.h rename to src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h index 549a0e60cd..b7db9dce61 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QIcon/qicon_wrap.h @@ -3,7 +3,7 @@ #include #include #include -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" class QIconWrap : public Napi::ObjectWrap { diff --git a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h similarity index 91% rename from src/cpp/QtGui/QPixmap/qpixmap_wrap.h rename to src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h index b8c90ca628..2ba3371c0a 100644 --- a/src/cpp/QtGui/QPixmap/qpixmap_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h @@ -3,7 +3,7 @@ #include #include #include -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" class QPixmapWrap : public Napi::ObjectWrap { private: diff --git a/src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h b/src/cpp/include/nodegui/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h similarity index 93% rename from src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h rename to src/cpp/include/nodegui/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h index ebe8f6a54d..0daa9e18ef 100644 --- a/src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h @@ -1,7 +1,7 @@ #pragma once -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtWidgets/QWidget/qwidget_macro.h" #include "deps/spdlog/spdlog.h" /* diff --git a/src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h b/src/cpp/include/nodegui/QtWidgets/QAbstractSlider/qabstractslider_macro.h similarity index 96% rename from src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h rename to src/cpp/include/nodegui/QtWidgets/QAbstractSlider/qabstractslider_macro.h index f12ca9489e..dd6f0f579c 100644 --- a/src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QAbstractSlider/qabstractslider_macro.h @@ -1,7 +1,7 @@ #pragma once -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtWidgets/QWidget/qwidget_macro.h" #include "deps/spdlog/spdlog.h" /* diff --git a/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp b/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp similarity index 92% rename from src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp rename to src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp index b2fa48f4c7..b7a06bbb4b 100644 --- a/src/cpp/QtWidgets/QCheckBox/ncheckbox.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QCheckBox/ncheckbox.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" #include "napi.h" class NCheckBox: public QCheckBox, public NodeWidget diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h similarity index 92% rename from src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h index 85b81bbc56..8c02100f77 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QCheckBox/qcheckbox_wrap.h @@ -3,7 +3,7 @@ #include #include #include "ncheckbox.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QCheckBoxWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QDial/ndial.hpp b/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp similarity index 97% rename from src/cpp/QtWidgets/QDial/ndial.hpp rename to src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp index 5765d329f3..176643e62e 100644 --- a/src/cpp/QtWidgets/QDial/ndial.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QDial/ndial.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NDial: public QDial, public NodeWidget { diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.h b/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h similarity index 87% rename from src/cpp/QtWidgets/QDial/qdial_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h index 48addd4553..bf15db0778 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QDial/qdial_wrap.h @@ -4,8 +4,8 @@ #include #include #include "ndial.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" -#include "src/cpp/QtWidgets/QAbstractSlider/qabstractslider_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QAbstractSlider/qabstractslider_macro.h" class QDialWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h similarity index 92% rename from src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h index 2f0b23d5e4..8d766be093 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QGridLayout/qgridlayout_wrap.h @@ -3,7 +3,7 @@ #include #include #include -#include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" +#include "QtWidgets/QLayout/qlayout_macro.h" class QGridLayoutWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QLabel/nlabel.hpp b/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp similarity index 81% rename from src/cpp/QtWidgets/QLabel/nlabel.hpp rename to src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp index 0e88b003cb..1a0dca34e7 100644 --- a/src/cpp/QtWidgets/QLabel/nlabel.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QLabel/nlabel.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NLabel: public QLabel, public NodeWidget { diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h similarity index 92% rename from src/cpp/QtWidgets/QLabel/qlabel_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h index 7e9a6e90d6..63782364b9 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLabel/qlabel_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nlabel.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QLabelWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QLayout/qlayout_macro.h b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_macro.h similarity index 96% rename from src/cpp/QtWidgets/QLayout/qlayout_macro.h rename to src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_macro.h index 1a5caa7160..3271e16d7c 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_macro.h @@ -1,6 +1,6 @@ #pragma once -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" #include /* diff --git a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h similarity index 89% rename from src/cpp/QtWidgets/QLayout/qlayout_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h index 56638e5f2d..a90b8a08f9 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLayout/qlayout_wrap.h @@ -4,7 +4,7 @@ #include #include -#include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" +#include "QtWidgets/QLayout/qlayout_macro.h" //ABSTRACT CLASS class QLayoutWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp b/src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp similarity index 97% rename from src/cpp/QtWidgets/QLineEdit/nlineedit.hpp rename to src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp index c96a269ce4..ebb1d16bd3 100644 --- a/src/cpp/QtWidgets/QLineEdit/nlineedit.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QLineEdit/nlineedit.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NLineEdit: public QLineEdit, public NodeWidget { diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h b/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h similarity index 93% rename from src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h index 66029a01d5..fae100d89f 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QLineEdit/qlineedit_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nlineedit.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QLineEditWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp b/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp similarity index 84% rename from src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp rename to src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp index a60dde54ca..68283bb01c 100644 --- a/src/cpp/QtWidgets/QMainWindow/nmainwindow.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QMainWindow/nmainwindow.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" #include class NMainWindow: public QMainWindow, public NodeWidget diff --git a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h b/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h similarity index 91% rename from src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h index 9d7d232156..9926986d5d 100644 --- a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QMainWindow/qmainwindow_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nmainwindow.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QMainWindowWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp similarity index 98% rename from src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp rename to src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp index e4b6f8e479..b367d52526 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/nplaintextedit.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp @@ -1,8 +1,8 @@ #pragma once -#include "deps/spdlog/spdlog.h" #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "deps/spdlog/spdlog.h" +#include "core/NodeWidget/nodewidget.h" class NPlainTextEdit : public QPlainTextEdit, public NodeWidget { diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h similarity index 89% rename from src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h index 4a9f1acc20..5a63d59f16 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h @@ -3,8 +3,8 @@ #include #include #include "nplaintextedit.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" -#include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" class QPlainTextEditWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp b/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp similarity index 84% rename from src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp rename to src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp index 06b3862ee8..dd4521866e 100644 --- a/src/cpp/QtWidgets/QProgressBar/nprogressbar.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QProgressBar/nprogressbar.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NProgressBar: public QProgressBar, public NodeWidget { diff --git a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h b/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h similarity index 93% rename from src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h index 7a5d05d38d..83929d5130 100644 --- a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QProgressBar/qprogressbar_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nprogressbar.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QProgressBarWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QPushButton/npushbutton.hpp b/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp similarity index 96% rename from src/cpp/QtWidgets/QPushButton/npushbutton.hpp rename to src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp index db6f240ef0..9c2aa26185 100644 --- a/src/cpp/QtWidgets/QPushButton/npushbutton.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QPushButton/npushbutton.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" #include "napi.h" class NPushButton: public QPushButton, public NodeWidget diff --git a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h similarity index 87% rename from src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h index 0dda9bb847..a0c104b95c 100644 --- a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QPushButton/qpushbutton_wrap.h @@ -3,9 +3,9 @@ #include #include #include "npushbutton.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "Extras/Utils/nutils.h" class QPushButtonWrap : public Napi::ObjectWrap { private: diff --git a/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp b/src/cpp/include/nodegui/QtWidgets/QRadioButton/nradiobutton.hpp similarity index 84% rename from src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp rename to src/cpp/include/nodegui/QtWidgets/QRadioButton/nradiobutton.hpp index 4e27777b2d..8ba034f053 100644 --- a/src/cpp/QtWidgets/QRadioButton/nradiobutton.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QRadioButton/nradiobutton.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NRadioButton: public QRadioButton, public NodeWidget { diff --git a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h b/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h similarity index 91% rename from src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h index 694b73cad5..19fd3e39c9 100644 --- a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QRadioButton/qradiobutton_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nradiobutton.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" class QRadioButtonWrap : public Napi::ObjectWrap{ diff --git a/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp b/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp similarity index 83% rename from src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp rename to src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp index 8eba3d5c9b..c1a44a4ca1 100644 --- a/src/cpp/QtWidgets/QScrollArea/nscrollarea.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NScrollArea: public QScrollArea, public NodeWidget { diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h b/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h similarity index 89% rename from src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h index 764a98ccc7..d6fa65e9e0 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QScrollArea/qscrollarea_wrap.h @@ -3,7 +3,7 @@ #include #include #include "nscrollarea.hpp" -#include "src/cpp/QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" +#include "QtWidgets/QAbstractScrollArea/qabstractscrollarea_macro.h" class QScrollAreaWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp b/src/cpp/include/nodegui/QtWidgets/QSpinBox/nspinbox.hpp similarity index 92% rename from src/cpp/QtWidgets/QSpinBox/nspinbox.hpp rename to src/cpp/include/nodegui/QtWidgets/QSpinBox/nspinbox.hpp index 54ec2de097..5b439ed1fb 100644 --- a/src/cpp/QtWidgets/QSpinBox/nspinbox.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QSpinBox/nspinbox.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" #include "napi.h" class NSpinBox: public QSpinBox, public NodeWidget diff --git a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h b/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h similarity index 91% rename from src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h index 9cb39733c1..417709f17a 100644 --- a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QSpinBox/qspinbox_wrap.h @@ -3,9 +3,9 @@ #include #include #include "nspinbox.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "Extras/Utils/nutils.h" class QSpinBoxWrap : public Napi::ObjectWrap { private: diff --git a/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp b/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp similarity index 97% rename from src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp rename to src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp index b358d08015..0921d3f3cc 100644 --- a/src/cpp/QtWidgets/QTabWidget/ntabwidget.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" #include "napi.h" class NTabWidget: public QTabWidget, public NodeWidget diff --git a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h similarity index 86% rename from src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h index 765bb076a6..2c76eb9eed 100644 --- a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QTabWidget/qtabwidget_wrap.h @@ -1,9 +1,9 @@ #pragma once #include -#include "ntabwidget.hpp" -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QTabWidget/ntabwidget.hpp" +#include "QtWidgets/QWidget/qwidget_macro.h" +#include "Extras/Utils/nutils.h" class QTabWidgetWrap : public Napi::ObjectWrap { private: diff --git a/src/cpp/QtWidgets/QWidget/nwidget.hpp b/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp similarity index 91% rename from src/cpp/QtWidgets/QWidget/nwidget.hpp rename to src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp index 6175ee0a43..ae1e56804a 100644 --- a/src/cpp/QtWidgets/QWidget/nwidget.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp @@ -3,7 +3,7 @@ #include #include #include -#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "core/NodeWidget/nodewidget.h" class NWidget: public QWidget, public NodeWidget { diff --git a/src/cpp/QtWidgets/QWidget/qwidget_macro.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h similarity index 97% rename from src/cpp/QtWidgets/QWidget/qwidget_macro.h rename to src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h index 7e3ae6d7bb..7bbeb3568e 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_macro.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_macro.h @@ -1,10 +1,10 @@ #pragma once -#include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" -#include "src/cpp/core/YogaWidget/yogawidget_macro.h" -#include "src/cpp/core/Events/eventwidget_macro.h" -#include "src/cpp/core/Component/component_macro.h" -#include "src/cpp/QtGui/QIcon/qicon_wrap.h" +#include "QtWidgets/QLayout/qlayout_wrap.h" +#include "core/YogaWidget/yogawidget_macro.h" +#include "core/Events/eventwidget_macro.h" +#include "core/Component/component_macro.h" +#include "QtGui/QIcon/qicon_wrap.h" #include /* diff --git a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h similarity index 90% rename from src/cpp/QtWidgets/QWidget/qwidget_wrap.h rename to src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h index aeec327aa0..32781bcd3d 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_wrap.h +++ b/src/cpp/include/nodegui/QtWidgets/QWidget/qwidget_wrap.h @@ -1,6 +1,6 @@ #pragma once -#include "src/cpp/QtWidgets/QWidget/qwidget_macro.h" +#include "QtWidgets/QWidget/qwidget_macro.h" #include #include #include "nwidget.hpp" diff --git a/src/cpp/core/Component/component_macro.h b/src/cpp/include/nodegui/core/Component/component_macro.h similarity index 100% rename from src/cpp/core/Component/component_macro.h rename to src/cpp/include/nodegui/core/Component/component_macro.h diff --git a/src/cpp/core/Events/eventsmap.h b/src/cpp/include/nodegui/core/Events/eventsmap.h similarity index 100% rename from src/cpp/core/Events/eventsmap.h rename to src/cpp/include/nodegui/core/Events/eventsmap.h diff --git a/src/cpp/core/Events/eventwidget.h b/src/cpp/include/nodegui/core/Events/eventwidget.h similarity index 90% rename from src/cpp/core/Events/eventwidget.h rename to src/cpp/include/nodegui/core/Events/eventwidget.h index 419b97640f..1afbfaece5 100644 --- a/src/cpp/core/Events/eventwidget.h +++ b/src/cpp/include/nodegui/core/Events/eventwidget.h @@ -1,7 +1,7 @@ #pragma once #include -#include "src/cpp/core/Events/eventsmap.h" +#include "core/Events/eventsmap.h" #include class EventWidget { diff --git a/src/cpp/core/Events/eventwidget_macro.h b/src/cpp/include/nodegui/core/Events/eventwidget_macro.h similarity index 100% rename from src/cpp/core/Events/eventwidget_macro.h rename to src/cpp/include/nodegui/core/Events/eventwidget_macro.h diff --git a/src/cpp/core/FlexLayout/flexitem.h b/src/cpp/include/nodegui/core/FlexLayout/flexitem.h similarity index 100% rename from src/cpp/core/FlexLayout/flexitem.h rename to src/cpp/include/nodegui/core/FlexLayout/flexitem.h diff --git a/src/cpp/core/FlexLayout/flexlayout.h b/src/cpp/include/nodegui/core/FlexLayout/flexlayout.h similarity index 100% rename from src/cpp/core/FlexLayout/flexlayout.h rename to src/cpp/include/nodegui/core/FlexLayout/flexlayout.h diff --git a/src/cpp/core/FlexLayout/flexlayout_wrap.h b/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h similarity index 93% rename from src/cpp/core/FlexLayout/flexlayout_wrap.h rename to src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h index 28fac3104a..0ba84edddb 100644 --- a/src/cpp/core/FlexLayout/flexlayout_wrap.h +++ b/src/cpp/include/nodegui/core/FlexLayout/flexlayout_wrap.h @@ -3,7 +3,7 @@ #include #include #include "flexlayout.h" -#include "src/cpp/QtWidgets/QLayout/qlayout_macro.h" +#include "QtWidgets/QLayout/qlayout_macro.h" class FlexLayoutWrap : public Napi::ObjectWrap{ private: diff --git a/src/cpp/core/NodeWidget/nodewidget.h b/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h similarity index 79% rename from src/cpp/core/NodeWidget/nodewidget.h rename to src/cpp/include/nodegui/core/NodeWidget/nodewidget.h index 51e02697c3..e4ca793f49 100644 --- a/src/cpp/core/NodeWidget/nodewidget.h +++ b/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h @@ -1,6 +1,6 @@ #pragma once -#include "src/cpp/core/YogaWidget/yogawidget.h" -#include "src/cpp/core/Events/eventwidget_macro.h" +#include "core/YogaWidget/yogawidget.h" +#include "core/Events/eventwidget_macro.h" // class to unify all the custom features + add extra features if needed class NodeWidget : public YogaWidget, public EventWidget { diff --git a/src/cpp/core/YogaWidget/nodestyle.h b/src/cpp/include/nodegui/core/YogaWidget/nodestyle.h similarity index 100% rename from src/cpp/core/YogaWidget/nodestyle.h rename to src/cpp/include/nodegui/core/YogaWidget/nodestyle.h diff --git a/src/cpp/core/YogaWidget/yogawidget.h b/src/cpp/include/nodegui/core/YogaWidget/yogawidget.h similarity index 99% rename from src/cpp/core/YogaWidget/yogawidget.h rename to src/cpp/include/nodegui/core/YogaWidget/yogawidget.h index 49715fafec..090b7bf3c1 100644 --- a/src/cpp/core/YogaWidget/yogawidget.h +++ b/src/cpp/include/nodegui/core/YogaWidget/yogawidget.h @@ -2,7 +2,7 @@ #include #include #include "nodestyle.h" -#include "src/cpp/core/FlexLayout/flexitem.h" +#include "core/FlexLayout/flexitem.h" /* YogaWidget class will be used to extend any regular Qt Widget class to give it Yoga Flex powers. diff --git a/src/cpp/core/YogaWidget/yogawidget_macro.h b/src/cpp/include/nodegui/core/YogaWidget/yogawidget_macro.h similarity index 100% rename from src/cpp/core/YogaWidget/yogawidget_macro.h rename to src/cpp/include/nodegui/core/YogaWidget/yogawidget_macro.h diff --git a/src/cpp/Extras/Utils/nutils.cpp b/src/cpp/lib/Extras/Utils/nutils.cpp similarity index 95% rename from src/cpp/Extras/Utils/nutils.cpp rename to src/cpp/lib/Extras/Utils/nutils.cpp index 8199ed9a16..41bc7bfefa 100644 --- a/src/cpp/Extras/Utils/nutils.cpp +++ b/src/cpp/lib/Extras/Utils/nutils.cpp @@ -1,6 +1,6 @@ -#include "nutils.h" #include #include +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" YGSize extrautils::measureQtWidget (YGNodeRef node, float width, YGMeasureMode widthMode, float height, YGMeasureMode heightMode){ diff --git a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp similarity index 94% rename from src/cpp/QtGui/QApplication/qapplication_wrap.cpp rename to src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp index 7ea729e835..de6f236090 100644 --- a/src/cpp/QtGui/QApplication/qapplication_wrap.cpp +++ b/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp @@ -1,7 +1,7 @@ -#include "qapplication_wrap.h" -#include "src/cpp/core/Component/component_macro.h" -#include "src/cpp/Extras/Utils/nutils.h" -#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h" +#include "QtGui/QApplication/qapplication_wrap.h" +#include "core/Component/component_macro.h" +#include "Extras/Utils/nutils.h" +#include "QtGui/QClipboard/qclipboard_wrap.h" Napi::FunctionReference QApplicationWrap::constructor; int QApplicationWrap::argc = 0; diff --git a/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp b/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp similarity index 96% rename from src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp rename to src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp index 48d56e993f..2078b6a823 100644 --- a/src/cpp/QtGui/QClipboard/qclipboard_wrap.cpp +++ b/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp @@ -1,5 +1,5 @@ -#include "qclipboard_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtGui/QClipboard/qclipboard_wrap.h" +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" Napi::FunctionReference QClipboardWrap::constructor; diff --git a/src/cpp/QtGui/QCursor/qcursor_wrap.cpp b/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp similarity index 94% rename from src/cpp/QtGui/QCursor/qcursor_wrap.cpp rename to src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp index ddbf05a1e1..afbe47356f 100644 --- a/src/cpp/QtGui/QCursor/qcursor_wrap.cpp +++ b/src/cpp/lib/QtGui/QCursor/qcursor_wrap.cpp @@ -1,7 +1,7 @@ -#include "qcursor_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtGui/QCursor/qcursor_wrap.h" +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" -#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" Napi::FunctionReference QCursorWrap::constructor; diff --git a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp b/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp similarity index 91% rename from src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp rename to src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp index 92c0d2bb32..cefb5160e9 100644 --- a/src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp +++ b/src/cpp/lib/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.cpp @@ -1,8 +1,8 @@ -#include "qkeyevent_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" #include +#include "QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h" +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" -#include "src/cpp/core/Component/component_macro.h" +#include "core/Component/component_macro.h" Napi::FunctionReference QKeyEventWrap::constructor; diff --git a/src/cpp/QtGui/QIcon/qicon_wrap.cpp b/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp similarity index 94% rename from src/cpp/QtGui/QIcon/qicon_wrap.cpp rename to src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp index 5185c67689..994f0eb738 100644 --- a/src/cpp/QtGui/QIcon/qicon_wrap.cpp +++ b/src/cpp/lib/QtGui/QIcon/qicon_wrap.cpp @@ -1,6 +1,6 @@ -#include "qicon_wrap.h" -#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" Napi::FunctionReference QIconWrap::constructor; diff --git a/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp similarity index 97% rename from src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp rename to src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp index 08a72a5646..a3d5067746 100644 --- a/src/cpp/QtGui/QPixmap/qpixmap_wrap.cpp +++ b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp @@ -1,5 +1,5 @@ -#include "qpixmap_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" +#include "Extras/Utils/nutils.h" #include "deps/spdlog/spdlog.h" Napi::FunctionReference QPixmapWrap::constructor; diff --git a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp b/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp similarity index 94% rename from src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp rename to src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp index 7095375218..420140b920 100644 --- a/src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QCheckBox/qcheckbox_wrap.cpp @@ -1,6 +1,6 @@ -#include "qcheckbox_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QCheckBox/qcheckbox_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QCheckBoxWrap::constructor; diff --git a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp b/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp similarity index 96% rename from src/cpp/QtWidgets/QDial/qdial_wrap.cpp rename to src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp index c38031472a..09c04ddd1b 100644 --- a/src/cpp/QtWidgets/QDial/qdial_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QDial/qdial_wrap.cpp @@ -1,7 +1,7 @@ -#include "qdial_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QDial/qdial_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QDialWrap::constructor; diff --git a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp b/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp similarity index 94% rename from src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp rename to src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp index ff43921bf9..ca55ecc3cf 100644 --- a/src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QGridLayout/qgridlayout_wrap.cpp @@ -1,6 +1,6 @@ -#include "qgridlayout_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QGridLayout/qgridlayout_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QGridLayoutWrap::constructor; diff --git a/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp b/src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp similarity index 94% rename from src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp rename to src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp index 38420b558f..09fcf6462c 100644 --- a/src/cpp/QtWidgets/QLabel/qlabel_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QLabel/qlabel_wrap.cpp @@ -1,7 +1,7 @@ -#include "qlabel_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QLabel/qlabel_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QLabelWrap::constructor; diff --git a/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp b/src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp similarity index 93% rename from src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp rename to src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp index 8e11f9766e..667ad27266 100644 --- a/src/cpp/QtWidgets/QLayout/qlayout_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QLayout/qlayout_wrap.cpp @@ -1,4 +1,4 @@ -#include "qlayout_wrap.h" +#include "QtWidgets/QLayout/qlayout_wrap.h" Napi::FunctionReference QLayoutWrap::constructor; diff --git a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp b/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp similarity index 95% rename from src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp rename to src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp index 127a7dd518..34f8b3c7a1 100644 --- a/src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp @@ -1,7 +1,7 @@ -#include "qlineedit_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QLineEdit/qlineedit_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QLineEditWrap::constructor; diff --git a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp b/src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp similarity index 94% rename from src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp rename to src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp index 84fffdb392..9ec846f0c1 100644 --- a/src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QMainWindow/qmainwindow_wrap.cpp @@ -1,6 +1,6 @@ -#include "qmainwindow_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QMainWindow/qmainwindow_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QMainWindowWrap::constructor; diff --git a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp b/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp similarity index 97% rename from src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp rename to src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp index 93645f6b5a..dad86a684c 100644 --- a/src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp @@ -1,7 +1,7 @@ -#include "qplaintextedit_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include diff --git a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp b/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp similarity index 95% rename from src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp rename to src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp index 274473fb3a..40276ca105 100644 --- a/src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QProgressBar/qprogressbar_wrap.cpp @@ -1,7 +1,7 @@ -#include "qprogressbar_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QProgressBar/qprogressbar_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QProgressBarWrap::constructor; diff --git a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp similarity index 93% rename from src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp rename to src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp index e45afb778e..42f6a63795 100644 --- a/src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QPushButton/qpushbutton_wrap.cpp @@ -1,7 +1,7 @@ -#include "qpushbutton_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtGui/QIcon/qicon_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QPushButton/qpushbutton_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QPushButtonWrap::constructor; diff --git a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp b/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp similarity index 93% rename from src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp rename to src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp index 8a63ddf94d..139343c5a8 100644 --- a/src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QRadioButton/qradiobutton_wrap.cpp @@ -1,7 +1,7 @@ -#include "qradiobutton_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QRadioButton/qradiobutton_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" #include diff --git a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp b/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp similarity index 93% rename from src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp rename to src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp index 2f6e5f9107..e8c1539d92 100644 --- a/src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp @@ -1,6 +1,6 @@ -#include "qscrollarea_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QScrollArea/qscrollarea_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QScrollAreaWrap::constructor; diff --git a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp b/src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp similarity index 96% rename from src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp rename to src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp index 61b08a46e8..8ebe0fc912 100644 --- a/src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QSpinBox/qspinbox_wrap.cpp @@ -1,7 +1,7 @@ -#include "qspinbox_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtGui/QIcon/qicon_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QSpinBox/qspinbox_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QSpinBoxWrap::constructor; diff --git a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp b/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp similarity index 95% rename from src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp rename to src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp index c7ac8f6a09..ea1bd8b4e5 100644 --- a/src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QTabWidget/qtabwidget_wrap.cpp @@ -1,7 +1,7 @@ -#include "qtabwidget_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtGui/QIcon/qicon_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QTabWidget/qtabwidget_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "Extras/Utils/nutils.h" #include Napi::FunctionReference QTabWidgetWrap::constructor; diff --git a/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp b/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp similarity index 91% rename from src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp rename to src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp index 8e6254c367..d799e43954 100644 --- a/src/cpp/QtWidgets/QWidget/qwidget_wrap.cpp +++ b/src/cpp/lib/QtWidgets/QWidget/qwidget_wrap.cpp @@ -1,6 +1,6 @@ -#include "qwidget_wrap.h" -#include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtWidgets/QLayout/qlayout_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference QWidgetWrap::constructor; diff --git a/src/cpp/core/Events/eventsmap.cpp b/src/cpp/lib/core/Events/eventsmap.cpp similarity index 99% rename from src/cpp/core/Events/eventsmap.cpp rename to src/cpp/lib/core/Events/eventsmap.cpp index 018ba64da7..fff9359802 100644 --- a/src/cpp/core/Events/eventsmap.cpp +++ b/src/cpp/lib/core/Events/eventsmap.cpp @@ -1,4 +1,4 @@ -#include "eventsmap.h" +#include "core/Events/eventsmap.h" std::unordered_map EventsMap::eventTypes { { "None", QEvent::None }, diff --git a/src/cpp/core/Events/eventwidget.cpp b/src/cpp/lib/core/Events/eventwidget.cpp similarity index 98% rename from src/cpp/core/Events/eventwidget.cpp rename to src/cpp/lib/core/Events/eventwidget.cpp index f1b3a89d67..a92bc00c58 100644 --- a/src/cpp/core/Events/eventwidget.cpp +++ b/src/cpp/lib/core/Events/eventwidget.cpp @@ -1,4 +1,4 @@ -#include "eventwidget.h" +#include "core/Events/eventwidget.h" #include "deps/spdlog/spdlog.h" #include diff --git a/src/cpp/core/FlexLayout/flexitem.cpp b/src/cpp/lib/core/FlexLayout/flexitem.cpp similarity index 86% rename from src/cpp/core/FlexLayout/flexitem.cpp rename to src/cpp/lib/core/FlexLayout/flexitem.cpp index a6fa48172b..3538c4ac96 100644 --- a/src/cpp/core/FlexLayout/flexitem.cpp +++ b/src/cpp/lib/core/FlexLayout/flexitem.cpp @@ -1,4 +1,4 @@ -#include "flexitem.h" +#include "core/FlexLayout/flexitem.h" FlexItem::FlexItem() { diff --git a/src/cpp/core/FlexLayout/flexlayout.cpp b/src/cpp/lib/core/FlexLayout/flexlayout.cpp similarity index 98% rename from src/cpp/core/FlexLayout/flexlayout.cpp rename to src/cpp/lib/core/FlexLayout/flexlayout.cpp index e2fd8363e4..37d7a34f46 100644 --- a/src/cpp/core/FlexLayout/flexlayout.cpp +++ b/src/cpp/lib/core/FlexLayout/flexlayout.cpp @@ -1,8 +1,8 @@ -#include "flexlayout.h" #include #include #include "spdlog/spdlog.h" -#include "src/cpp/core/YogaWidget/yogawidget.h" +#include "core/FlexLayout/flexlayout.h" +#include "core/YogaWidget/yogawidget.h" FlexLayout::NodeContext* FlexLayout::getNodeContext(YGNodeRef node) { diff --git a/src/cpp/core/FlexLayout/flexlayout_wrap.cpp b/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp similarity index 96% rename from src/cpp/core/FlexLayout/flexlayout_wrap.cpp rename to src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp index 6124f819a2..e9f8309962 100644 --- a/src/cpp/core/FlexLayout/flexlayout_wrap.cpp +++ b/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp @@ -1,6 +1,6 @@ -#include "flexlayout_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/Extras/Utils/nutils.h" +#include "core/FlexLayout/flexlayout_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" Napi::FunctionReference FlexLayoutWrap::constructor; diff --git a/src/cpp/core/YogaWidget/nodestyle.cpp b/src/cpp/lib/core/YogaWidget/nodestyle.cpp similarity index 98% rename from src/cpp/core/YogaWidget/nodestyle.cpp rename to src/cpp/lib/core/YogaWidget/nodestyle.cpp index 7020221130..94840d995a 100644 --- a/src/cpp/core/YogaWidget/nodestyle.cpp +++ b/src/cpp/lib/core/YogaWidget/nodestyle.cpp @@ -1,4 +1,4 @@ -#include "nodestyle.h" +#include "core/YogaWidget/nodestyle.h" std::unordered_map NodeStyle::NodeAlign { {"auto",YGAlignAuto}, diff --git a/src/cpp/core/YogaWidget/yogawidget.cpp b/src/cpp/lib/core/YogaWidget/yogawidget.cpp similarity index 99% rename from src/cpp/core/YogaWidget/yogawidget.cpp rename to src/cpp/lib/core/YogaWidget/yogawidget.cpp index fde00f3690..69e659dbd9 100644 --- a/src/cpp/core/YogaWidget/yogawidget.cpp +++ b/src/cpp/lib/core/YogaWidget/yogawidget.cpp @@ -1,4 +1,4 @@ -#include "yogawidget.h" +#include "core/YogaWidget/yogawidget.h" #include "spdlog/spdlog.h" void YogaWidget::setYDisplay(QString rawValue){ diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 2fc36e65d9..9d440e09b9 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -1,25 +1,25 @@ -#include "src/cpp/QtGui/QApplication/qapplication_wrap.h" -#include "src/cpp/QtGui/QClipboard/qclipboard_wrap.h" -#include "src/cpp/QtWidgets/QWidget/qwidget_wrap.h" -#include "src/cpp/QtGui/QPixmap/qpixmap_wrap.h" -#include "src/cpp/QtGui/QIcon/qicon_wrap.h" -#include "src/cpp/QtGui/QCursor/qcursor_wrap.h" -#include "src/cpp/QtWidgets/QGridLayout/qgridlayout_wrap.h" -#include "src/cpp/QtWidgets/QLayout/qlayout_wrap.h" -#include "src/cpp/QtWidgets/QDial/qdial_wrap.h" -#include "src/cpp/QtWidgets/QLabel/qlabel_wrap.h" -#include "src/cpp/QtWidgets/QMainWindow/qmainwindow_wrap.h" -#include "src/cpp/QtWidgets/QPushButton/qpushbutton_wrap.h" -#include "src/cpp/QtWidgets/QSpinBox/qspinbox_wrap.h" -#include "src/cpp/QtWidgets/QCheckBox/qcheckbox_wrap.h" -#include "src/cpp/QtWidgets/QProgressBar/qprogressbar_wrap.h" -#include "src/cpp/QtWidgets/QRadioButton/qradiobutton_wrap.h" -#include "src/cpp/QtWidgets/QTabWidget/qtabwidget_wrap.h" -#include "src/cpp/QtWidgets/QLineEdit/qlineedit_wrap.h" -#include "src/cpp/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h" -#include "src/cpp/core/FlexLayout/flexlayout_wrap.h" -#include "src/cpp/QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h" -#include "src/cpp/QtWidgets/QScrollArea/qscrollarea_wrap.h" +#include "QtGui/QApplication/qapplication_wrap.h" +#include "QtGui/QClipboard/qclipboard_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "QtGui/QPixmap/qpixmap_wrap.h" +#include "QtGui/QIcon/qicon_wrap.h" +#include "QtGui/QCursor/qcursor_wrap.h" +#include "QtWidgets/QGridLayout/qgridlayout_wrap.h" +#include "QtWidgets/QLayout/qlayout_wrap.h" +#include "QtWidgets/QDial/qdial_wrap.h" +#include "QtWidgets/QLabel/qlabel_wrap.h" +#include "QtWidgets/QMainWindow/qmainwindow_wrap.h" +#include "QtWidgets/QPushButton/qpushbutton_wrap.h" +#include "QtWidgets/QSpinBox/qspinbox_wrap.h" +#include "QtWidgets/QCheckBox/qcheckbox_wrap.h" +#include "QtWidgets/QProgressBar/qprogressbar_wrap.h" +#include "QtWidgets/QRadioButton/qradiobutton_wrap.h" +#include "QtWidgets/QTabWidget/qtabwidget_wrap.h" +#include "QtWidgets/QLineEdit/qlineedit_wrap.h" +#include "QtWidgets/QPlainTextEdit/qplaintextedit_wrap.h" +#include "core/FlexLayout/flexlayout_wrap.h" +#include "QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h" +#include "QtWidgets/QScrollArea/qscrollarea_wrap.h" #include // These cant be instantiated in JS Side void InitPrivateHelpers(Napi::Env env){ From 15a48e67235474b0c953d484aec6653b392d5dc3 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sat, 21 Sep 2019 23:26:58 +0200 Subject: [PATCH 094/891] cleanup --- src/demo.ts | 1 + src/lib/core/bootstrap.ts | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/demo.ts b/src/demo.ts index 320831026c..36f49a667b 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -41,6 +41,7 @@ checkbox.setObjectName("check"); checkbox.setChecked(true); checkbox.addEventListener(QCheckBoxEvents.toggled, () => { console.log("checkbox was toggled!"); + label1.setInlineStyle("color: green;"); }); const dial = new QDial(); diff --git a/src/lib/core/bootstrap.ts b/src/lib/core/bootstrap.ts index 6ce6a9637c..ec22529d29 100644 --- a/src/lib/core/bootstrap.ts +++ b/src/lib/core/bootstrap.ts @@ -8,13 +8,16 @@ called. This is required inorder to make the timers work nicely due to merger of event loops */ -function wrapWithActivateUvLoop(func: any) { - return function() { - (process as any).activateUvLoop(); - //@ts-ignore - return func.apply(this, arguments); + +const noop = () => {}; + +const wrapWithActivateUvLoop = (func: Function) => { + return (...args: any[]) => { + const activateUvLoop = (process as any).activateUvLoop || noop; + activateUvLoop(); + return func(...args); }; -} +}; const main = () => { process.nextTick = wrapWithActivateUvLoop(process.nextTick); From e87485441eda73577cd11df5c5d418ec8249aea2 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 14:24:46 +0200 Subject: [PATCH 095/891] Adds include and linkings for plugins --- CMakeLists.txt | 33 ++++++++----------- config/plugin.cmake | 32 ++++++++++++++++++ examples/README.md | 7 ---- package.json | 7 ++-- plugin/index.js | 11 +++++++ src/cpp/{ => include}/deps/spdlog/async.h | 0 .../{ => include}/deps/spdlog/async_logger.h | 0 src/cpp/{ => include}/deps/spdlog/common.h | 0 .../deps/spdlog/details/async_logger_impl.h | 0 .../deps/spdlog/details/circular_q.h | 0 .../deps/spdlog/details/console_globals.h | 0 .../deps/spdlog/details/file_helper.h | 0 .../deps/spdlog/details/fmt_helper.h | 0 .../deps/spdlog/details/log_msg.h | 0 .../deps/spdlog/details/logger_impl.h | 0 .../deps/spdlog/details/mpmc_blocking_q.h | 0 .../deps/spdlog/details/null_mutex.h | 0 .../{ => include}/deps/spdlog/details/os.h | 0 .../deps/spdlog/details/pattern_formatter.h | 0 .../deps/spdlog/details/periodic_worker.h | 0 .../deps/spdlog/details/registry.h | 0 .../deps/spdlog/details/thread_pool.h | 0 .../deps/spdlog/fmt/bin_to_hex.h | 0 .../deps/spdlog/fmt/bundled/LICENSE.rst | 0 .../deps/spdlog/fmt/bundled/chrono.h | 0 .../deps/spdlog/fmt/bundled/color.h | 0 .../deps/spdlog/fmt/bundled/core.h | 0 .../deps/spdlog/fmt/bundled/format-inl.h | 0 .../deps/spdlog/fmt/bundled/format.h | 0 .../deps/spdlog/fmt/bundled/locale.h | 0 .../deps/spdlog/fmt/bundled/ostream.h | 0 .../deps/spdlog/fmt/bundled/posix.h | 0 .../deps/spdlog/fmt/bundled/printf.h | 0 .../deps/spdlog/fmt/bundled/ranges.h | 0 .../deps/spdlog/fmt/bundled/time.h | 0 src/cpp/{ => include}/deps/spdlog/fmt/fmt.h | 0 src/cpp/{ => include}/deps/spdlog/fmt/ostr.h | 0 src/cpp/{ => include}/deps/spdlog/formatter.h | 0 src/cpp/{ => include}/deps/spdlog/logger.h | 0 .../deps/spdlog/sinks/android_sink.h | 0 .../deps/spdlog/sinks/ansicolor_sink.h | 0 .../deps/spdlog/sinks/base_sink.h | 0 .../deps/spdlog/sinks/basic_file_sink.h | 0 .../deps/spdlog/sinks/daily_file_sink.h | 0 .../deps/spdlog/sinks/dist_sink.h | 0 .../deps/spdlog/sinks/msvc_sink.h | 0 .../deps/spdlog/sinks/null_sink.h | 0 .../deps/spdlog/sinks/ostream_sink.h | 0 .../deps/spdlog/sinks/rotating_file_sink.h | 0 .../{ => include}/deps/spdlog/sinks/sink.h | 0 .../deps/spdlog/sinks/stdout_color_sinks.h | 0 .../deps/spdlog/sinks/stdout_sinks.h | 0 .../deps/spdlog/sinks/syslog_sink.h | 0 .../deps/spdlog/sinks/wincolor_sink.h | 0 src/cpp/{ => include}/deps/spdlog/spdlog.h | 0 src/cpp/{ => include}/deps/spdlog/tweakme.h | 0 src/cpp/{ => include}/deps/spdlog/version.h | 0 src/cpp/{ => include}/deps/yoga/Bitfield.h | 0 .../{ => include}/deps/yoga/CompactValue.h | 0 src/cpp/{ => include}/deps/yoga/Utils.cpp | 0 src/cpp/{ => include}/deps/yoga/Utils.h | 0 src/cpp/{ => include}/deps/yoga/YGConfig.cpp | 0 src/cpp/{ => include}/deps/yoga/YGConfig.h | 0 src/cpp/{ => include}/deps/yoga/YGEnums.cpp | 0 src/cpp/{ => include}/deps/yoga/YGEnums.h | 0 .../{ => include}/deps/yoga/YGFloatOptional.h | 0 src/cpp/{ => include}/deps/yoga/YGLayout.cpp | 0 src/cpp/{ => include}/deps/yoga/YGLayout.h | 0 src/cpp/{ => include}/deps/yoga/YGMacros.h | 0 src/cpp/{ => include}/deps/yoga/YGNode.cpp | 0 src/cpp/{ => include}/deps/yoga/YGNode.h | 0 .../{ => include}/deps/yoga/YGNodePrint.cpp | 0 src/cpp/{ => include}/deps/yoga/YGNodePrint.h | 0 src/cpp/{ => include}/deps/yoga/YGStyle.cpp | 0 src/cpp/{ => include}/deps/yoga/YGStyle.h | 0 src/cpp/{ => include}/deps/yoga/YGValue.cpp | 0 src/cpp/{ => include}/deps/yoga/YGValue.h | 0 .../{ => include}/deps/yoga/Yoga-internal.h | 0 src/cpp/{ => include}/deps/yoga/Yoga.cpp | 0 src/cpp/{ => include}/deps/yoga/Yoga.h | 0 .../{ => include}/deps/yoga/event/event.cpp | 0 src/cpp/{ => include}/deps/yoga/event/event.h | 0 .../deps/yoga/internal/experiments-inl.h | 0 .../deps/yoga/internal/experiments.cpp | 0 .../deps/yoga/internal/experiments.h | 0 src/cpp/{ => include}/deps/yoga/log.cpp | 0 src/cpp/{ => include}/deps/yoga/log.h | 0 .../nodegui/core/NodeWidget/nodewidget.h | 1 - 88 files changed, 61 insertions(+), 30 deletions(-) create mode 100644 config/plugin.cmake delete mode 100644 examples/README.md create mode 100644 plugin/index.js rename src/cpp/{ => include}/deps/spdlog/async.h (100%) rename src/cpp/{ => include}/deps/spdlog/async_logger.h (100%) rename src/cpp/{ => include}/deps/spdlog/common.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/async_logger_impl.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/circular_q.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/console_globals.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/file_helper.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/fmt_helper.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/log_msg.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/logger_impl.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/mpmc_blocking_q.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/null_mutex.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/os.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/pattern_formatter.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/periodic_worker.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/registry.h (100%) rename src/cpp/{ => include}/deps/spdlog/details/thread_pool.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bin_to_hex.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/LICENSE.rst (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/chrono.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/color.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/core.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/format-inl.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/format.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/locale.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/ostream.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/posix.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/printf.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/ranges.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/bundled/time.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/fmt.h (100%) rename src/cpp/{ => include}/deps/spdlog/fmt/ostr.h (100%) rename src/cpp/{ => include}/deps/spdlog/formatter.h (100%) rename src/cpp/{ => include}/deps/spdlog/logger.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/android_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/ansicolor_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/base_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/basic_file_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/daily_file_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/dist_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/msvc_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/null_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/ostream_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/rotating_file_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/stdout_color_sinks.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/stdout_sinks.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/syslog_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/sinks/wincolor_sink.h (100%) rename src/cpp/{ => include}/deps/spdlog/spdlog.h (100%) rename src/cpp/{ => include}/deps/spdlog/tweakme.h (100%) rename src/cpp/{ => include}/deps/spdlog/version.h (100%) rename src/cpp/{ => include}/deps/yoga/Bitfield.h (100%) rename src/cpp/{ => include}/deps/yoga/CompactValue.h (100%) rename src/cpp/{ => include}/deps/yoga/Utils.cpp (100%) rename src/cpp/{ => include}/deps/yoga/Utils.h (100%) rename src/cpp/{ => include}/deps/yoga/YGConfig.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGConfig.h (100%) rename src/cpp/{ => include}/deps/yoga/YGEnums.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGEnums.h (100%) rename src/cpp/{ => include}/deps/yoga/YGFloatOptional.h (100%) rename src/cpp/{ => include}/deps/yoga/YGLayout.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGLayout.h (100%) rename src/cpp/{ => include}/deps/yoga/YGMacros.h (100%) rename src/cpp/{ => include}/deps/yoga/YGNode.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGNode.h (100%) rename src/cpp/{ => include}/deps/yoga/YGNodePrint.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGNodePrint.h (100%) rename src/cpp/{ => include}/deps/yoga/YGStyle.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGStyle.h (100%) rename src/cpp/{ => include}/deps/yoga/YGValue.cpp (100%) rename src/cpp/{ => include}/deps/yoga/YGValue.h (100%) rename src/cpp/{ => include}/deps/yoga/Yoga-internal.h (100%) rename src/cpp/{ => include}/deps/yoga/Yoga.cpp (100%) rename src/cpp/{ => include}/deps/yoga/Yoga.h (100%) rename src/cpp/{ => include}/deps/yoga/event/event.cpp (100%) rename src/cpp/{ => include}/deps/yoga/event/event.h (100%) rename src/cpp/{ => include}/deps/yoga/internal/experiments-inl.h (100%) rename src/cpp/{ => include}/deps/yoga/internal/experiments.cpp (100%) rename src/cpp/{ => include}/deps/yoga/internal/experiments.h (100%) rename src/cpp/{ => include}/deps/yoga/log.cpp (100%) rename src/cpp/{ => include}/deps/yoga/log.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ae5189e3b0..3d4f9b5138 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,18 +30,18 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/Events/eventwidget.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/YogaWidget/yogawidget.cpp" # core deps - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/log.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/Utils.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGConfig.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGEnums.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGLayout.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGNode.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGNodePrint.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGStyle.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/YGValue.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/Yoga.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/event/event.cpp" - "${PROJECT_SOURCE_DIR}/src/cpp/deps/yoga/internal/experiments.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/log.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/Utils.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGConfig.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGEnums.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGLayout.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGNode.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGNodePrint.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGStyle.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/YGValue.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/Yoga.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/event/event.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps/yoga/internal/experiments.cpp" # wrapped cpps "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QApplication/qapplication_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtGui/QClipboard/qclipboard_wrap.cpp" @@ -87,22 +87,17 @@ AddCommonConfig(${CORE_WIDGETS_ADDON}) # qt include(./config/qt.cmake) AddQtSupport(${CORE_WIDGETS_ADDON}) - # napi include(./config/napi.cmake) AddNapiSupport(${CORE_WIDGETS_ADDON}) - target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_INC}" "${PROJECT_SOURCE_DIR}" - "${PROJECT_SOURCE_DIR}/src/cpp/deps" - "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui" -) - -target_include_directories(${CORE_WIDGETS_ADDON} PUBLIC "${PROJECT_SOURCE_DIR}/src/cpp" "${PROJECT_SOURCE_DIR}/src/cpp/include" + "${PROJECT_SOURCE_DIR}/src/cpp/include/deps" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui" ) target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE diff --git a/config/plugin.cmake b/config/plugin.cmake new file mode 100644 index 0000000000..53de5d2dd4 --- /dev/null +++ b/config/plugin.cmake @@ -0,0 +1,32 @@ +# This cmake file will be used in the plugins +set(PLUGIN_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}") +set(NODEGUI_ROOT "${PLUGIN_CMAKE_DIR}/..") +set(NODEGUI_LIBRARY "${NODEGUI_ROOT}/build/Release/nodegui_core.node") + +function(AddPluginConfig addonName) + # common + include("${PLUGIN_CMAKE_DIR}/common.cmake") + AddCommonConfig(${addonName}) + # qt + include("${PLUGIN_CMAKE_DIR}/qt.cmake") + AddQtSupport(${addonName}) + # napi + include("${PLUGIN_CMAKE_DIR}/napi.cmake") + AddNapiSupport(${addonName}) + + target_link_libraries(${addonName} PRIVATE + "${NODEGUI_LIBRARY}" + ) + + target_include_directories(${addonName} PRIVATE + "${CMAKE_JS_INC}" + "${NODEGUI_ROOT}" + "${NODEGUI_ROOT}/src/cpp" + "${NODEGUI_ROOT}/src/cpp/include" + "${NODEGUI_ROOT}/src/cpp/include/deps" + "${NODEGUI_ROOT}/src/cpp/include/nodegui" + ) + + +endfunction(AddPluginConfig addonName) + diff --git a/examples/README.md b/examples/README.md deleted file mode 100644 index 92d5c68d3d..0000000000 --- a/examples/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Examples - -Examples have now moved to a repo of their own - -They are all available at: - -https://github.com/nodegui/examples diff --git a/package.json b/package.json index 0ab9883127..e57e31ecc6 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,11 @@ "files": [ "dist", "config", - "binding.gyp", + "CMakeLists.txt", "src", "extras/legal", - "deps" + "deps", + "plugin" ], "author": "Atul R ", "license": "MIT", @@ -26,6 +27,7 @@ "dependencies": { "@nodegui/qode": "^1.0.5", "cmake-js": "^5.3.2", + "cross-env": "^6.0.0", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", "node-gyp": "^5.0.3", @@ -34,7 +36,6 @@ "devDependencies": { "@types/bindings": "^1.3.0", "@types/node": "^12.0.2", - "cross-env": "^6.0.0", "prettier": "^1.17.1", "serve": "^11.1.0", "typescript": "^3.4.5" diff --git a/plugin/index.js b/plugin/index.js new file mode 100644 index 0000000000..f9a6e17818 --- /dev/null +++ b/plugin/index.js @@ -0,0 +1,11 @@ +const path = require("path"); + +const NODEGUI_ROOT = path.resolve(__dirname, ".."); +const CMAKE_HELPER_DIR = path.resolve(NODEGUI_ROOT, "config"); +const CMAKE_HELPER_FILE = path.resolve(CMAKE_HELPER_DIR, "plugin.cmake"); + +module.exports = { + CMAKE_HELPER_FILE, + CMAKE_HELPER_DIR, + NODEGUI_ROOT +}; diff --git a/src/cpp/deps/spdlog/async.h b/src/cpp/include/deps/spdlog/async.h similarity index 100% rename from src/cpp/deps/spdlog/async.h rename to src/cpp/include/deps/spdlog/async.h diff --git a/src/cpp/deps/spdlog/async_logger.h b/src/cpp/include/deps/spdlog/async_logger.h similarity index 100% rename from src/cpp/deps/spdlog/async_logger.h rename to src/cpp/include/deps/spdlog/async_logger.h diff --git a/src/cpp/deps/spdlog/common.h b/src/cpp/include/deps/spdlog/common.h similarity index 100% rename from src/cpp/deps/spdlog/common.h rename to src/cpp/include/deps/spdlog/common.h diff --git a/src/cpp/deps/spdlog/details/async_logger_impl.h b/src/cpp/include/deps/spdlog/details/async_logger_impl.h similarity index 100% rename from src/cpp/deps/spdlog/details/async_logger_impl.h rename to src/cpp/include/deps/spdlog/details/async_logger_impl.h diff --git a/src/cpp/deps/spdlog/details/circular_q.h b/src/cpp/include/deps/spdlog/details/circular_q.h similarity index 100% rename from src/cpp/deps/spdlog/details/circular_q.h rename to src/cpp/include/deps/spdlog/details/circular_q.h diff --git a/src/cpp/deps/spdlog/details/console_globals.h b/src/cpp/include/deps/spdlog/details/console_globals.h similarity index 100% rename from src/cpp/deps/spdlog/details/console_globals.h rename to src/cpp/include/deps/spdlog/details/console_globals.h diff --git a/src/cpp/deps/spdlog/details/file_helper.h b/src/cpp/include/deps/spdlog/details/file_helper.h similarity index 100% rename from src/cpp/deps/spdlog/details/file_helper.h rename to src/cpp/include/deps/spdlog/details/file_helper.h diff --git a/src/cpp/deps/spdlog/details/fmt_helper.h b/src/cpp/include/deps/spdlog/details/fmt_helper.h similarity index 100% rename from src/cpp/deps/spdlog/details/fmt_helper.h rename to src/cpp/include/deps/spdlog/details/fmt_helper.h diff --git a/src/cpp/deps/spdlog/details/log_msg.h b/src/cpp/include/deps/spdlog/details/log_msg.h similarity index 100% rename from src/cpp/deps/spdlog/details/log_msg.h rename to src/cpp/include/deps/spdlog/details/log_msg.h diff --git a/src/cpp/deps/spdlog/details/logger_impl.h b/src/cpp/include/deps/spdlog/details/logger_impl.h similarity index 100% rename from src/cpp/deps/spdlog/details/logger_impl.h rename to src/cpp/include/deps/spdlog/details/logger_impl.h diff --git a/src/cpp/deps/spdlog/details/mpmc_blocking_q.h b/src/cpp/include/deps/spdlog/details/mpmc_blocking_q.h similarity index 100% rename from src/cpp/deps/spdlog/details/mpmc_blocking_q.h rename to src/cpp/include/deps/spdlog/details/mpmc_blocking_q.h diff --git a/src/cpp/deps/spdlog/details/null_mutex.h b/src/cpp/include/deps/spdlog/details/null_mutex.h similarity index 100% rename from src/cpp/deps/spdlog/details/null_mutex.h rename to src/cpp/include/deps/spdlog/details/null_mutex.h diff --git a/src/cpp/deps/spdlog/details/os.h b/src/cpp/include/deps/spdlog/details/os.h similarity index 100% rename from src/cpp/deps/spdlog/details/os.h rename to src/cpp/include/deps/spdlog/details/os.h diff --git a/src/cpp/deps/spdlog/details/pattern_formatter.h b/src/cpp/include/deps/spdlog/details/pattern_formatter.h similarity index 100% rename from src/cpp/deps/spdlog/details/pattern_formatter.h rename to src/cpp/include/deps/spdlog/details/pattern_formatter.h diff --git a/src/cpp/deps/spdlog/details/periodic_worker.h b/src/cpp/include/deps/spdlog/details/periodic_worker.h similarity index 100% rename from src/cpp/deps/spdlog/details/periodic_worker.h rename to src/cpp/include/deps/spdlog/details/periodic_worker.h diff --git a/src/cpp/deps/spdlog/details/registry.h b/src/cpp/include/deps/spdlog/details/registry.h similarity index 100% rename from src/cpp/deps/spdlog/details/registry.h rename to src/cpp/include/deps/spdlog/details/registry.h diff --git a/src/cpp/deps/spdlog/details/thread_pool.h b/src/cpp/include/deps/spdlog/details/thread_pool.h similarity index 100% rename from src/cpp/deps/spdlog/details/thread_pool.h rename to src/cpp/include/deps/spdlog/details/thread_pool.h diff --git a/src/cpp/deps/spdlog/fmt/bin_to_hex.h b/src/cpp/include/deps/spdlog/fmt/bin_to_hex.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bin_to_hex.h rename to src/cpp/include/deps/spdlog/fmt/bin_to_hex.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/LICENSE.rst b/src/cpp/include/deps/spdlog/fmt/bundled/LICENSE.rst similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/LICENSE.rst rename to src/cpp/include/deps/spdlog/fmt/bundled/LICENSE.rst diff --git a/src/cpp/deps/spdlog/fmt/bundled/chrono.h b/src/cpp/include/deps/spdlog/fmt/bundled/chrono.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/chrono.h rename to src/cpp/include/deps/spdlog/fmt/bundled/chrono.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/color.h b/src/cpp/include/deps/spdlog/fmt/bundled/color.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/color.h rename to src/cpp/include/deps/spdlog/fmt/bundled/color.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/core.h b/src/cpp/include/deps/spdlog/fmt/bundled/core.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/core.h rename to src/cpp/include/deps/spdlog/fmt/bundled/core.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/format-inl.h b/src/cpp/include/deps/spdlog/fmt/bundled/format-inl.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/format-inl.h rename to src/cpp/include/deps/spdlog/fmt/bundled/format-inl.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/format.h b/src/cpp/include/deps/spdlog/fmt/bundled/format.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/format.h rename to src/cpp/include/deps/spdlog/fmt/bundled/format.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/locale.h b/src/cpp/include/deps/spdlog/fmt/bundled/locale.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/locale.h rename to src/cpp/include/deps/spdlog/fmt/bundled/locale.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/ostream.h b/src/cpp/include/deps/spdlog/fmt/bundled/ostream.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/ostream.h rename to src/cpp/include/deps/spdlog/fmt/bundled/ostream.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/posix.h b/src/cpp/include/deps/spdlog/fmt/bundled/posix.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/posix.h rename to src/cpp/include/deps/spdlog/fmt/bundled/posix.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/printf.h b/src/cpp/include/deps/spdlog/fmt/bundled/printf.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/printf.h rename to src/cpp/include/deps/spdlog/fmt/bundled/printf.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/ranges.h b/src/cpp/include/deps/spdlog/fmt/bundled/ranges.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/ranges.h rename to src/cpp/include/deps/spdlog/fmt/bundled/ranges.h diff --git a/src/cpp/deps/spdlog/fmt/bundled/time.h b/src/cpp/include/deps/spdlog/fmt/bundled/time.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/bundled/time.h rename to src/cpp/include/deps/spdlog/fmt/bundled/time.h diff --git a/src/cpp/deps/spdlog/fmt/fmt.h b/src/cpp/include/deps/spdlog/fmt/fmt.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/fmt.h rename to src/cpp/include/deps/spdlog/fmt/fmt.h diff --git a/src/cpp/deps/spdlog/fmt/ostr.h b/src/cpp/include/deps/spdlog/fmt/ostr.h similarity index 100% rename from src/cpp/deps/spdlog/fmt/ostr.h rename to src/cpp/include/deps/spdlog/fmt/ostr.h diff --git a/src/cpp/deps/spdlog/formatter.h b/src/cpp/include/deps/spdlog/formatter.h similarity index 100% rename from src/cpp/deps/spdlog/formatter.h rename to src/cpp/include/deps/spdlog/formatter.h diff --git a/src/cpp/deps/spdlog/logger.h b/src/cpp/include/deps/spdlog/logger.h similarity index 100% rename from src/cpp/deps/spdlog/logger.h rename to src/cpp/include/deps/spdlog/logger.h diff --git a/src/cpp/deps/spdlog/sinks/android_sink.h b/src/cpp/include/deps/spdlog/sinks/android_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/android_sink.h rename to src/cpp/include/deps/spdlog/sinks/android_sink.h diff --git a/src/cpp/deps/spdlog/sinks/ansicolor_sink.h b/src/cpp/include/deps/spdlog/sinks/ansicolor_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/ansicolor_sink.h rename to src/cpp/include/deps/spdlog/sinks/ansicolor_sink.h diff --git a/src/cpp/deps/spdlog/sinks/base_sink.h b/src/cpp/include/deps/spdlog/sinks/base_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/base_sink.h rename to src/cpp/include/deps/spdlog/sinks/base_sink.h diff --git a/src/cpp/deps/spdlog/sinks/basic_file_sink.h b/src/cpp/include/deps/spdlog/sinks/basic_file_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/basic_file_sink.h rename to src/cpp/include/deps/spdlog/sinks/basic_file_sink.h diff --git a/src/cpp/deps/spdlog/sinks/daily_file_sink.h b/src/cpp/include/deps/spdlog/sinks/daily_file_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/daily_file_sink.h rename to src/cpp/include/deps/spdlog/sinks/daily_file_sink.h diff --git a/src/cpp/deps/spdlog/sinks/dist_sink.h b/src/cpp/include/deps/spdlog/sinks/dist_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/dist_sink.h rename to src/cpp/include/deps/spdlog/sinks/dist_sink.h diff --git a/src/cpp/deps/spdlog/sinks/msvc_sink.h b/src/cpp/include/deps/spdlog/sinks/msvc_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/msvc_sink.h rename to src/cpp/include/deps/spdlog/sinks/msvc_sink.h diff --git a/src/cpp/deps/spdlog/sinks/null_sink.h b/src/cpp/include/deps/spdlog/sinks/null_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/null_sink.h rename to src/cpp/include/deps/spdlog/sinks/null_sink.h diff --git a/src/cpp/deps/spdlog/sinks/ostream_sink.h b/src/cpp/include/deps/spdlog/sinks/ostream_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/ostream_sink.h rename to src/cpp/include/deps/spdlog/sinks/ostream_sink.h diff --git a/src/cpp/deps/spdlog/sinks/rotating_file_sink.h b/src/cpp/include/deps/spdlog/sinks/rotating_file_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/rotating_file_sink.h rename to src/cpp/include/deps/spdlog/sinks/rotating_file_sink.h diff --git a/src/cpp/deps/spdlog/sinks/sink.h b/src/cpp/include/deps/spdlog/sinks/sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/sink.h rename to src/cpp/include/deps/spdlog/sinks/sink.h diff --git a/src/cpp/deps/spdlog/sinks/stdout_color_sinks.h b/src/cpp/include/deps/spdlog/sinks/stdout_color_sinks.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/stdout_color_sinks.h rename to src/cpp/include/deps/spdlog/sinks/stdout_color_sinks.h diff --git a/src/cpp/deps/spdlog/sinks/stdout_sinks.h b/src/cpp/include/deps/spdlog/sinks/stdout_sinks.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/stdout_sinks.h rename to src/cpp/include/deps/spdlog/sinks/stdout_sinks.h diff --git a/src/cpp/deps/spdlog/sinks/syslog_sink.h b/src/cpp/include/deps/spdlog/sinks/syslog_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/syslog_sink.h rename to src/cpp/include/deps/spdlog/sinks/syslog_sink.h diff --git a/src/cpp/deps/spdlog/sinks/wincolor_sink.h b/src/cpp/include/deps/spdlog/sinks/wincolor_sink.h similarity index 100% rename from src/cpp/deps/spdlog/sinks/wincolor_sink.h rename to src/cpp/include/deps/spdlog/sinks/wincolor_sink.h diff --git a/src/cpp/deps/spdlog/spdlog.h b/src/cpp/include/deps/spdlog/spdlog.h similarity index 100% rename from src/cpp/deps/spdlog/spdlog.h rename to src/cpp/include/deps/spdlog/spdlog.h diff --git a/src/cpp/deps/spdlog/tweakme.h b/src/cpp/include/deps/spdlog/tweakme.h similarity index 100% rename from src/cpp/deps/spdlog/tweakme.h rename to src/cpp/include/deps/spdlog/tweakme.h diff --git a/src/cpp/deps/spdlog/version.h b/src/cpp/include/deps/spdlog/version.h similarity index 100% rename from src/cpp/deps/spdlog/version.h rename to src/cpp/include/deps/spdlog/version.h diff --git a/src/cpp/deps/yoga/Bitfield.h b/src/cpp/include/deps/yoga/Bitfield.h similarity index 100% rename from src/cpp/deps/yoga/Bitfield.h rename to src/cpp/include/deps/yoga/Bitfield.h diff --git a/src/cpp/deps/yoga/CompactValue.h b/src/cpp/include/deps/yoga/CompactValue.h similarity index 100% rename from src/cpp/deps/yoga/CompactValue.h rename to src/cpp/include/deps/yoga/CompactValue.h diff --git a/src/cpp/deps/yoga/Utils.cpp b/src/cpp/include/deps/yoga/Utils.cpp similarity index 100% rename from src/cpp/deps/yoga/Utils.cpp rename to src/cpp/include/deps/yoga/Utils.cpp diff --git a/src/cpp/deps/yoga/Utils.h b/src/cpp/include/deps/yoga/Utils.h similarity index 100% rename from src/cpp/deps/yoga/Utils.h rename to src/cpp/include/deps/yoga/Utils.h diff --git a/src/cpp/deps/yoga/YGConfig.cpp b/src/cpp/include/deps/yoga/YGConfig.cpp similarity index 100% rename from src/cpp/deps/yoga/YGConfig.cpp rename to src/cpp/include/deps/yoga/YGConfig.cpp diff --git a/src/cpp/deps/yoga/YGConfig.h b/src/cpp/include/deps/yoga/YGConfig.h similarity index 100% rename from src/cpp/deps/yoga/YGConfig.h rename to src/cpp/include/deps/yoga/YGConfig.h diff --git a/src/cpp/deps/yoga/YGEnums.cpp b/src/cpp/include/deps/yoga/YGEnums.cpp similarity index 100% rename from src/cpp/deps/yoga/YGEnums.cpp rename to src/cpp/include/deps/yoga/YGEnums.cpp diff --git a/src/cpp/deps/yoga/YGEnums.h b/src/cpp/include/deps/yoga/YGEnums.h similarity index 100% rename from src/cpp/deps/yoga/YGEnums.h rename to src/cpp/include/deps/yoga/YGEnums.h diff --git a/src/cpp/deps/yoga/YGFloatOptional.h b/src/cpp/include/deps/yoga/YGFloatOptional.h similarity index 100% rename from src/cpp/deps/yoga/YGFloatOptional.h rename to src/cpp/include/deps/yoga/YGFloatOptional.h diff --git a/src/cpp/deps/yoga/YGLayout.cpp b/src/cpp/include/deps/yoga/YGLayout.cpp similarity index 100% rename from src/cpp/deps/yoga/YGLayout.cpp rename to src/cpp/include/deps/yoga/YGLayout.cpp diff --git a/src/cpp/deps/yoga/YGLayout.h b/src/cpp/include/deps/yoga/YGLayout.h similarity index 100% rename from src/cpp/deps/yoga/YGLayout.h rename to src/cpp/include/deps/yoga/YGLayout.h diff --git a/src/cpp/deps/yoga/YGMacros.h b/src/cpp/include/deps/yoga/YGMacros.h similarity index 100% rename from src/cpp/deps/yoga/YGMacros.h rename to src/cpp/include/deps/yoga/YGMacros.h diff --git a/src/cpp/deps/yoga/YGNode.cpp b/src/cpp/include/deps/yoga/YGNode.cpp similarity index 100% rename from src/cpp/deps/yoga/YGNode.cpp rename to src/cpp/include/deps/yoga/YGNode.cpp diff --git a/src/cpp/deps/yoga/YGNode.h b/src/cpp/include/deps/yoga/YGNode.h similarity index 100% rename from src/cpp/deps/yoga/YGNode.h rename to src/cpp/include/deps/yoga/YGNode.h diff --git a/src/cpp/deps/yoga/YGNodePrint.cpp b/src/cpp/include/deps/yoga/YGNodePrint.cpp similarity index 100% rename from src/cpp/deps/yoga/YGNodePrint.cpp rename to src/cpp/include/deps/yoga/YGNodePrint.cpp diff --git a/src/cpp/deps/yoga/YGNodePrint.h b/src/cpp/include/deps/yoga/YGNodePrint.h similarity index 100% rename from src/cpp/deps/yoga/YGNodePrint.h rename to src/cpp/include/deps/yoga/YGNodePrint.h diff --git a/src/cpp/deps/yoga/YGStyle.cpp b/src/cpp/include/deps/yoga/YGStyle.cpp similarity index 100% rename from src/cpp/deps/yoga/YGStyle.cpp rename to src/cpp/include/deps/yoga/YGStyle.cpp diff --git a/src/cpp/deps/yoga/YGStyle.h b/src/cpp/include/deps/yoga/YGStyle.h similarity index 100% rename from src/cpp/deps/yoga/YGStyle.h rename to src/cpp/include/deps/yoga/YGStyle.h diff --git a/src/cpp/deps/yoga/YGValue.cpp b/src/cpp/include/deps/yoga/YGValue.cpp similarity index 100% rename from src/cpp/deps/yoga/YGValue.cpp rename to src/cpp/include/deps/yoga/YGValue.cpp diff --git a/src/cpp/deps/yoga/YGValue.h b/src/cpp/include/deps/yoga/YGValue.h similarity index 100% rename from src/cpp/deps/yoga/YGValue.h rename to src/cpp/include/deps/yoga/YGValue.h diff --git a/src/cpp/deps/yoga/Yoga-internal.h b/src/cpp/include/deps/yoga/Yoga-internal.h similarity index 100% rename from src/cpp/deps/yoga/Yoga-internal.h rename to src/cpp/include/deps/yoga/Yoga-internal.h diff --git a/src/cpp/deps/yoga/Yoga.cpp b/src/cpp/include/deps/yoga/Yoga.cpp similarity index 100% rename from src/cpp/deps/yoga/Yoga.cpp rename to src/cpp/include/deps/yoga/Yoga.cpp diff --git a/src/cpp/deps/yoga/Yoga.h b/src/cpp/include/deps/yoga/Yoga.h similarity index 100% rename from src/cpp/deps/yoga/Yoga.h rename to src/cpp/include/deps/yoga/Yoga.h diff --git a/src/cpp/deps/yoga/event/event.cpp b/src/cpp/include/deps/yoga/event/event.cpp similarity index 100% rename from src/cpp/deps/yoga/event/event.cpp rename to src/cpp/include/deps/yoga/event/event.cpp diff --git a/src/cpp/deps/yoga/event/event.h b/src/cpp/include/deps/yoga/event/event.h similarity index 100% rename from src/cpp/deps/yoga/event/event.h rename to src/cpp/include/deps/yoga/event/event.h diff --git a/src/cpp/deps/yoga/internal/experiments-inl.h b/src/cpp/include/deps/yoga/internal/experiments-inl.h similarity index 100% rename from src/cpp/deps/yoga/internal/experiments-inl.h rename to src/cpp/include/deps/yoga/internal/experiments-inl.h diff --git a/src/cpp/deps/yoga/internal/experiments.cpp b/src/cpp/include/deps/yoga/internal/experiments.cpp similarity index 100% rename from src/cpp/deps/yoga/internal/experiments.cpp rename to src/cpp/include/deps/yoga/internal/experiments.cpp diff --git a/src/cpp/deps/yoga/internal/experiments.h b/src/cpp/include/deps/yoga/internal/experiments.h similarity index 100% rename from src/cpp/deps/yoga/internal/experiments.h rename to src/cpp/include/deps/yoga/internal/experiments.h diff --git a/src/cpp/deps/yoga/log.cpp b/src/cpp/include/deps/yoga/log.cpp similarity index 100% rename from src/cpp/deps/yoga/log.cpp rename to src/cpp/include/deps/yoga/log.cpp diff --git a/src/cpp/deps/yoga/log.h b/src/cpp/include/deps/yoga/log.h similarity index 100% rename from src/cpp/deps/yoga/log.h rename to src/cpp/include/deps/yoga/log.h diff --git a/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h b/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h index e4ca793f49..c81b193c2a 100644 --- a/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h +++ b/src/cpp/include/nodegui/core/NodeWidget/nodewidget.h @@ -8,7 +8,6 @@ class NodeWidget : public YogaWidget, public EventWidget { }; - #ifndef NODEWIDGET_IMPLEMENTATIONS #define NODEWIDGET_IMPLEMENTATIONS(BaseWidgetName) \ \ From f5e290beecf37abceebff9e069741ee5672f2909 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 15:19:37 +0200 Subject: [PATCH 096/891] Clean up the configs a bit more --- CMakeLists.txt | 23 ++++------------------- config/plugin.cmake | 11 ++++------- config/qt.cmake | 6 ++++++ 3 files changed, 14 insertions(+), 26 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d4f9b5138..4772cae716 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,19 +1,10 @@ cmake_minimum_required(VERSION 3.1) -if(${CMAKE_VERSION} VERSION_LESS 3.15) - cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) -else() - cmake_policy(VERSION 3.15) -endif() -set(CMAKE_INCLUDE_CURRENT_DIR ON) -# Need for automatic moc. Moc executable path is set in qt.cmake -set(CMAKE_AUTOMOC ON) -set(QT_VERSION_MAJOR 5) -add_executable(Qt5::moc IMPORTED) +include(./config/common.cmake) +include(./config/qt.cmake) +include(./config/napi.cmake) -project(NodeGUI - VERSION 1.0 -) +project(NodeGUI VERSION 1.0) set(CORE_WIDGETS_ADDON "nodegui_core") # --------------------------------------- @@ -81,14 +72,8 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp" ) -# common -include(./config/common.cmake) AddCommonConfig(${CORE_WIDGETS_ADDON}) -# qt -include(./config/qt.cmake) AddQtSupport(${CORE_WIDGETS_ADDON}) -# napi -include(./config/napi.cmake) AddNapiSupport(${CORE_WIDGETS_ADDON}) target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE diff --git a/config/plugin.cmake b/config/plugin.cmake index 53de5d2dd4..34f67925bb 100644 --- a/config/plugin.cmake +++ b/config/plugin.cmake @@ -3,15 +3,13 @@ set(PLUGIN_CMAKE_DIR "${CMAKE_CURRENT_LIST_DIR}") set(NODEGUI_ROOT "${PLUGIN_CMAKE_DIR}/..") set(NODEGUI_LIBRARY "${NODEGUI_ROOT}/build/Release/nodegui_core.node") +include("${PLUGIN_CMAKE_DIR}/common.cmake") +include("${PLUGIN_CMAKE_DIR}/qt.cmake") +include("${PLUGIN_CMAKE_DIR}/napi.cmake") + function(AddPluginConfig addonName) - # common - include("${PLUGIN_CMAKE_DIR}/common.cmake") AddCommonConfig(${addonName}) - # qt - include("${PLUGIN_CMAKE_DIR}/qt.cmake") AddQtSupport(${addonName}) - # napi - include("${PLUGIN_CMAKE_DIR}/napi.cmake") AddNapiSupport(${addonName}) target_link_libraries(${addonName} PRIVATE @@ -27,6 +25,5 @@ function(AddPluginConfig addonName) "${NODEGUI_ROOT}/src/cpp/include/nodegui" ) - endfunction(AddPluginConfig addonName) diff --git a/config/qt.cmake b/config/qt.cmake index 868441613f..c45e1a6acc 100644 --- a/config/qt.cmake +++ b/config/qt.cmake @@ -1,4 +1,10 @@ # Adds Qt support +# make sure you include this at the top of whichever Cmakelist file you are going to use. +# Need for automatic moc. Moc executable path is set in qt.cmake +set(CMAKE_AUTOMOC ON) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(QT_VERSION_MAJOR 5) +add_executable(Qt5::moc IMPORTED) function(AddQtSupport addonName) execute_process(COMMAND node -p "require('@nodegui/qode').qtHome" From e8b30b2282bc908b837c3e2bf4a030c55f5eb253 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 17:19:41 +0200 Subject: [PATCH 097/891] Adds target versioning" --- CMakeLists.txt | 10 ++++++++-- config/common.cmake | 13 ++++++++++++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4772cae716..7212b10509 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,10 +4,11 @@ include(./config/common.cmake) include(./config/qt.cmake) include(./config/napi.cmake) -project(NodeGUI VERSION 1.0) +# --------------------------------------- set(CORE_WIDGETS_ADDON "nodegui_core") -# --------------------------------------- + +project(${CORE_WIDGETS_ADDON}) add_library(${CORE_WIDGETS_ADDON} SHARED "${CMAKE_JS_SRC}" @@ -87,4 +88,9 @@ target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_LIB}" +) + +GetModuleVersion(${CORE_WIDGETS_ADDON} "${CMAKE_CURRENT_LIST_DIR}") +set_target_properties(${CORE_WIDGETS_ADDON} PROPERTIES + VERSION "${${CORE_WIDGETS_ADDON}_VERSION}" ) \ No newline at end of file diff --git a/config/common.cmake b/config/common.cmake index e330d5b680..e5bb4bd56b 100644 --- a/config/common.cmake +++ b/config/common.cmake @@ -10,4 +10,15 @@ function(AddCommonConfig addonName) ENUM_BITFIELDS_NOT_SUPPORTED ) endif() -endfunction(AddCommonConfig addonName) \ No newline at end of file +endfunction(AddCommonConfig addonName) + +function(GetModuleVersion moduleName packageJsonDir) + execute_process(COMMAND node -p "require('${packageJsonDir}/package.json').version" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE packageJsonVersion + ) + string(REPLACE "\n" "" packageJsonVersion "${packageJsonVersion}") + string(REPLACE "\"" "" packageJsonVersion "${packageJsonVersion}") + + set("${moduleName}_VERSION" "${packageJsonVersion}" PARENT_SCOPE) +endfunction(GetModuleVersion moduleName packageJsonDir) \ No newline at end of file From c9b802b7a13158ca303627b22d6c3fe89796eb82 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 18:03:19 +0200 Subject: [PATCH 098/891] version 2 bump --- docs/development/setting-up.md | 16 ++-- docs/react/about.md | 6 -- docs/tutorial/about.md | 6 -- docs/tutorial/development-environment.md | 14 ++- package-lock.json | 115 +---------------------- package.json | 7 +- 6 files changed, 22 insertions(+), 142 deletions(-) diff --git a/docs/development/setting-up.md b/docs/development/setting-up.md index e76f42e044..6b98587efa 100644 --- a/docs/development/setting-up.md +++ b/docs/development/setting-up.md @@ -9,8 +9,8 @@ Make sure you follow the setup guide of [Qode][qode_setup] so that you have a bu **Requirements** 1. Node version: > 11 -2. Python 2.x , Make, GCC v7 -3. Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209 +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Make, GCC v7 4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] ### Windows: @@ -18,9 +18,10 @@ Make sure you follow the setup guide of [Qode][qode_setup] so that you have a bu **Requirements** 1. Node version: > 11 -2. Python 2.x and Visual Studio Community 2017 -3. Powershell -4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Visual Studio Community 2017 +4. Powershell +5. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] ### Linux: @@ -29,8 +30,9 @@ Supported versions: Ubuntu 17.10 and up **Requirements** 1. Node version: > 11 -2. Python 2.x , Make, GCC v7, pkg-config -3. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Make, GCC v7, pkg-config +4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] On Ubuntu: `$ sudo apt-get install pkg-config build-essentials` should install everything except Qt5. diff --git a/docs/react/about.md b/docs/react/about.md index 922a930470..bb073d00a4 100644 --- a/docs/react/about.md +++ b/docs/react/about.md @@ -12,12 +12,6 @@ Get started building with React NodeGUI in the [First React NodeGUI app](react/f As soon as a new version of NodeGui is released a corresponding version of React NodeGUI will be released simultaneously. This makes sure that both NodeGui and React NodeGUI releases go out in sync. NodeGui an React NodeGUI will be released as separate packages in order keep everything easily maintainable. -### Versioning - -NodeGui/React NodeGUI follows [`semver`](https://semver.org). -For most applications, and using any recent version of npm, -running `$ npm install @nodegui/react-nodegui` will do the right thing. - ## Core Philosophy [See core philosophy of NodeGui](tutorial/about?id=core-philosophy) diff --git a/docs/tutorial/about.md b/docs/tutorial/about.md index f838bf4ab4..b66eeca950 100644 --- a/docs/tutorial/about.md +++ b/docs/tutorial/about.md @@ -14,12 +14,6 @@ When a new version of Node.js is released, NodeGui usually waits about a month b NodeGui's version of Qt is usually updated within a month after a new stable version is released, depending on the effort involved in the upgrade. -### Versioning - -NodeGui follows [`semver`](https://semver.org). -For most applications, and using any recent version of npm, -running `$ npm install @nodegui/nodegui` will do the right thing. - ## Core Philosophy In order to evolve faster with every Node.Js release, NodeGui aims to patch NodeJs with as much minimum code as possible. This makes sure we support all Node features and keeps upgrade process simple. diff --git a/docs/tutorial/development-environment.md b/docs/tutorial/development-environment.md index fae0f36800..11285d1bc3 100644 --- a/docs/tutorial/development-environment.md +++ b/docs/tutorial/development-environment.md @@ -10,9 +10,9 @@ rudimentary understanding of your operating system's command line client. **Requirements:** - NodeGui supports macOS 10.10 (Yosemite) and up. NodeGui currently only supports 64bit OS. -- Python 2.x , Make, GCC v7 +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +- Make, GCC v7 - Currently supported Node.Js versions are 12.x and up. -- Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209 We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm @@ -35,13 +35,11 @@ for JavaScript development. > NodeGui supports Windows 7 and later versions – attempting to develop NodeGui > applications on earlier versions of Windows might not work. NodeGui currently only supports 64bit OS. - **Requirements:** -- Python 2.x, Visual studio 2017 +- Visual studio 2017 +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) - Currently supported Node.Js versions are 12.x and up. -- Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209 - We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm @@ -67,9 +65,9 @@ for JavaScript development. **Requirements:** -- Python 2.x , Make, GCC v7 +- Make, GCC v7 +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) - Currently supported Node.Js versions are 12.x and up. -- Make sure you dont have spaces inside your home path. NodeGYP has issues with spaces in the path. https://github.com/nodejs/node-gyp/issues/209 - On Ubuntu and Ubuntu-based distros it is advisable to run `sudo apt-get update`, followed by `sudo apt-get install pkg-config build-essential` We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm diff --git a/package-lock.json b/package-lock.json index cc3e6b14a0..de4e9ffa0c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.9", + "version": "0.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -47,11 +47,6 @@ "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg==", "dev": true }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -138,26 +133,12 @@ "color-convert": "^1.9.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" - }, "arch": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", "dev": true }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, "arg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz", @@ -591,11 +572,6 @@ "typedarray": "^0.0.6" } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -611,7 +587,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-6.0.0.tgz", "integrity": "sha512-G/B6gtkjgthT8AP/xN1wdj5Xe18fVyk58JepK8GxpUbqcz3hyWxegocMbvnZK+KoTslwd0ACZ3woi/DVUdVjyQ==", - "dev": true, "requires": { "cross-spawn": "^7.0.0" }, @@ -620,7 +595,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.0.tgz", "integrity": "sha512-6U/8SMK2FBNnB21oQ4+6Nsodxanw1gTkntYA2zBdkFYFu3ZDx65P2ONEXGSvob/QS6REjVHQ9zxzdOafwFdstw==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^1.2.0", @@ -630,8 +604,7 @@ "path-key": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.0.tgz", - "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==", - "dev": true + "integrity": "sha512-8cChqz0RP6SHJkMt48FW0A7+qUOn+OsnOsVtzI59tZ8m+5bCSk7hzwET0pulwOM2YMn9J1efb07KB9l9f30SGg==" } } }, @@ -868,21 +841,6 @@ "rimraf": "2" } }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -1253,39 +1211,6 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.1.tgz", "integrity": "sha512-2+DuKodWvwRTrCfKOeR24KIc5unKjOh8mz17NCzVnHWfjAdDqbfbjqh7gUT+BkXBRQM52+xCHciKWonJ3CbJMQ==" }, - "node-gyp": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz", - "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==", - "requires": { - "env-paths": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^4.4.8", - "which": "1" - }, - "dependencies": { - "env-paths": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", - "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=" - } - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "requires": { - "abbrev": "1" - } - }, "normalize-url": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.3.0.tgz", @@ -1300,17 +1225,6 @@ "path-key": "^2.0.0" } }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", @@ -1321,11 +1235,6 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", @@ -1665,11 +1574,6 @@ } } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, "setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -1679,7 +1583,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -1687,13 +1590,13 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "source-map": { "version": "0.6.1", @@ -2005,14 +1908,6 @@ "isexe": "^2.0.0" } }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "widest-line": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz", diff --git a/package.json b/package.json index e57e31ecc6..99a7a8aaf5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.1.9", + "version": "0.2.0", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -18,7 +18,6 @@ "private": false, "scripts": { "dev": "npm run build && qode dist/demo.js", - "install": "npm -v", "postinstall": "npm run build:addon", "build": "tsc && npm run build:addon", "build:addon": "cross-env CMAKE_BUILD_PARALLEL_LEVEL=8 cmake-js compile", @@ -30,7 +29,6 @@ "cross-env": "^6.0.0", "cuid": "^2.1.6", "node-addon-api": "^1.6.3", - "node-gyp": "^5.0.3", "postcss-nodegui-autoprefixer": "0.0.7" }, "devDependencies": { @@ -39,6 +37,5 @@ "prettier": "^1.17.1", "serve": "^11.1.0", "typescript": "^3.4.5" - }, - "gypfile": true + } } From 968415806d63be98fde54025908db9921de34b8f Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 18:06:22 +0200 Subject: [PATCH 099/891] upload files --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 99a7a8aaf5..27066babd3 100644 --- a/package.json +++ b/package.json @@ -8,9 +8,8 @@ "dist", "config", "CMakeLists.txt", - "src", + "src/cpp", "extras/legal", - "deps", "plugin" ], "author": "Atul R ", From ab85d3f191be485dec05718f92b70c33735e41f9 Mon Sep 17 00:00:00 2001 From: Atul Date: Sun, 22 Sep 2019 18:16:31 +0200 Subject: [PATCH 100/891] Fixes linux build --- CMakeLists.txt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7212b10509..de6cac2058 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -89,8 +89,3 @@ target_include_directories(${CORE_WIDGETS_ADDON} PRIVATE target_link_libraries(${CORE_WIDGETS_ADDON} PRIVATE "${CMAKE_JS_LIB}" ) - -GetModuleVersion(${CORE_WIDGETS_ADDON} "${CMAKE_CURRENT_LIST_DIR}") -set_target_properties(${CORE_WIDGETS_ADDON} PROPERTIES - VERSION "${${CORE_WIDGETS_ADDON}_VERSION}" -) \ No newline at end of file From 0b90a0c57aebcd2555cf5cf0de3cd9025cb009bd Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 23:10:13 +0200 Subject: [PATCH 101/891] Using known compilation features from cmake 3.1 instead of 3.15 --- .gitignore | 3 ++- config/common.cmake | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 461e6f6a00..f83d88a716 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules build dist .vscode -.cache \ No newline at end of file +.cache +.DS_Store \ No newline at end of file diff --git a/config/common.cmake b/config/common.cmake index e5bb4bd56b..689cbed3e6 100644 --- a/config/common.cmake +++ b/config/common.cmake @@ -3,7 +3,11 @@ function(AddCommonConfig addonName) SPDLOG_COMPILED_LIB ) target_compile_features(${addonName} PRIVATE - cxx_std_14 + cxx_inheriting_constructors + cxx_lambdas + cxx_auto_type + cxx_variadic_templates + cxx_variable_templates ) if (WIN32) target_compile_definitions(${addonName} PRIVATE From 8a0a24d0e7256c643b4b29f3807a32a9ebbaa7a2 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 22 Sep 2019 23:19:25 +0200 Subject: [PATCH 102/891] bump version --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index de4e9ffa0c..9887059601 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.2.0", + "version": "0.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 27066babd3..a36ce45d47 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@nodegui/nodegui", - "version": "0.2.0", + "version": "0.2.1", "description": "A cross platform library to build native desktop apps.", "main": "dist/index.js", "typings": "dist/index.d.ts", From 22498953ba5928183bc9dfef5587d67fe8a61304 Mon Sep 17 00:00:00 2001 From: soonoo Date: Wed, 25 Sep 2019 00:55:06 +0900 Subject: [PATCH 103/891] Adds basic support for QSystemTrayIcon --- CMakeLists.txt | 2 + .../QSystemTrayIcon/nsystemtrayicon.hpp | 17 ++++ .../QSystemTrayIcon/qsystemtrayicon_wrap.h | 25 ++++++ .../QSystemTrayIcon/qsystemtrayicon_wrap.cpp | 83 +++++++++++++++++++ src/cpp/main.cpp | 2 + src/demo.ts | 8 +- src/index.ts | 1 + src/lib/QtWidgets/QSystemTrayIcon/index.ts | 32 +++++++ 8 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp create mode 100644 src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h create mode 100644 src/cpp/lib/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.cpp create mode 100644 src/lib/QtWidgets/QSystemTrayIcon/index.ts diff --git a/CMakeLists.txt b/CMakeLists.txt index de6cac2058..e855e63170 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -56,6 +56,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QLineEdit/qlineedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QPlainTextEdit/qplaintextedit_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QScrollArea/qscrollarea_wrap.cpp" + "${PROJECT_SOURCE_DIR}/src/cpp/lib/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.cpp" "${PROJECT_SOURCE_DIR}/src/cpp/lib/core/FlexLayout/flexlayout_wrap.cpp" # Custom widgets (include them for automoc since they contain Q_OBJECT) "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QWidget/nwidget.hpp" @@ -71,6 +72,7 @@ add_library(${CORE_WIDGETS_ADDON} SHARED "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QPlainTextEdit/nplaintextedit.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QScrollArea/nscrollarea.hpp" "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QTabWidget/ntabwidget.hpp" + "${PROJECT_SOURCE_DIR}/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp" ) AddCommonConfig(${CORE_WIDGETS_ADDON}) diff --git a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp new file mode 100644 index 0000000000..de09633d79 --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include +#include "core/NodeWidget/nodewidget.h" +#include "napi.h" + +class NSystemTrayIcon: public QSystemTrayIcon, public NodeWidget +{ + Q_OBJECT + NODEWIDGET_IMPLEMENTATIONS(QSystemTrayIcon) +public: + using QSystemTrayIcon::QSystemTrayIcon; //inherit all constructors of QSystemTrayIcon + void connectWidgetSignalsToEventEmitter() { + } +}; + + diff --git a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h new file mode 100644 index 0000000000..fb115d45e6 --- /dev/null +++ b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h @@ -0,0 +1,25 @@ +#pragma once + +#include +#include "nsystemtrayicon.hpp" +#include "QtWidgets/QWidget/qwidget_macro.h" + +class QSystemTrayIconWrap : public Napi::ObjectWrap{ + private: + NSystemTrayIcon* instance; + public: + static Napi::Object init(Napi::Env env, Napi::Object exports); + QSystemTrayIconWrap(const Napi::CallbackInfo& info); + ~QSystemTrayIconWrap(); + NSystemTrayIcon* getInternalInstance(); + //class constructor + static Napi::FunctionReference constructor; + //wrapped methods + Napi::Value show(const Napi::CallbackInfo& info); + Napi::Value hide(const Napi::CallbackInfo& info); + Napi::Value setIcon(const Napi::CallbackInfo& info); + Napi::Value isVisible(const Napi::CallbackInfo& info); + + EVENTWIDGET_WRAPPED_METHODS_DECLARATION +}; + diff --git a/src/cpp/lib/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.cpp b/src/cpp/lib/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.cpp new file mode 100644 index 0000000000..ae9b9d29fa --- /dev/null +++ b/src/cpp/lib/QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.cpp @@ -0,0 +1,83 @@ +#include "QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h" +#include "QtWidgets/QWidget/qwidget_wrap.h" +#include "Extras/Utils/nutils.h" +#include +#include + + +Napi::FunctionReference QSystemTrayIconWrap::constructor; + +Napi::Object QSystemTrayIconWrap::init(Napi::Env env, Napi::Object exports) { + Napi::HandleScope scope(env); + char CLASSNAME[] = "QSystemTrayIcon"; + Napi::Function func = DefineClass(env, CLASSNAME, { + InstanceMethod("show", &QSystemTrayIconWrap::show), + InstanceMethod("hide", &QSystemTrayIconWrap::hide), + InstanceMethod("setIcon", &QSystemTrayIconWrap::setIcon), + InstanceMethod("isVisible", &QSystemTrayIconWrap::isVisible), + + COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE + EVENTWIDGET_WRAPPED_METHODS_EXPORT_DEFINE(QSystemTrayIconWrap) + }); + constructor = Napi::Persistent(func); + exports.Set(CLASSNAME, func); + return exports; +} + +NSystemTrayIcon* QSystemTrayIconWrap::getInternalInstance() { + return this->instance; +} + +QSystemTrayIconWrap::QSystemTrayIconWrap(const Napi::CallbackInfo& info): Napi::ObjectWrap(info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + if(info.Length() == 1) { + Napi::Object parentObject = info[0].As(); + QWidgetWrap* parentWidgetWrap = Napi::ObjectWrap::Unwrap(parentObject); + this->instance = new NSystemTrayIcon(parentWidgetWrap->getInternalInstance()); //this sets the parent to current widget + }else if (info.Length() == 0){ + this->instance = new NSystemTrayIcon(); + }else { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } +} + +QSystemTrayIconWrap::~QSystemTrayIconWrap() { + delete this->instance; +} + +Napi::Value QSystemTrayIconWrap::show(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + this->instance->show(); + return env.Null(); +} + +Napi::Value QSystemTrayIconWrap::hide(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + this->instance->hide(); + return env.Null(); +} + +Napi::Value QSystemTrayIconWrap::setIcon(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + Napi::Object iconObject = info[0].As(); + QIconWrap *iconWrap = Napi::ObjectWrap::Unwrap(iconObject); + this->instance->setIcon(*iconWrap->getInternalInstance()); + return env.Null(); +} + +Napi::Value QSystemTrayIconWrap::isVisible(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + + bool visibility = this->instance->isVisible(); + return Napi::Boolean::New(env, visibility); +} + diff --git a/src/cpp/main.cpp b/src/cpp/main.cpp index 9d440e09b9..6f1cb4d247 100644 --- a/src/cpp/main.cpp +++ b/src/cpp/main.cpp @@ -20,6 +20,7 @@ #include "core/FlexLayout/flexlayout_wrap.h" #include "QtGui/QEvent/QKeyEvent/qkeyevent_wrap.h" #include "QtWidgets/QScrollArea/qscrollarea_wrap.h" +#include "QtWidgets/QSystemTrayIcon/qsystemtrayicon_wrap.h" #include // These cant be instantiated in JS Side void InitPrivateHelpers(Napi::Env env){ @@ -49,6 +50,7 @@ Napi::Object Main(Napi::Env env, Napi::Object exports) { QDialWrap::init(env, exports); QLabelWrap::init(env, exports); QScrollAreaWrap::init(env, exports); + QSystemTrayIconWrap::init(env, exports); return exports; } diff --git a/src/demo.ts b/src/demo.ts index 36f49a667b..784aea8e39 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -18,7 +18,8 @@ import { CursorShape, WindowState, QTextOptionWrapMode, - QCheckBoxEvents + QCheckBoxEvents, + QSystemTrayIcon, } from "./index"; const path = require("path"); @@ -105,6 +106,10 @@ const pixmap = new QPixmap( imageLabel.setPixmap(pixmap); scrollArea.setWidget(imageLabel); +const tray = new QSystemTrayIcon(); +tray.setIcon(icon); +tray.show() + if (rootView.layout) { rootView.layout.addWidget(tabs); rootView.layout.addWidget(checkbox); @@ -134,3 +139,4 @@ win.show(); win.setWindowState(WindowState.WindowActive); (global as any).win = win; // To prevent win from being garbage collected. +(global as any).systemTray = tray; // To prevent system tray from being garbage collected. diff --git a/src/index.ts b/src/index.ts index 1e26c4a98e..8d8736775a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -35,6 +35,7 @@ export { LineWrapMode } from "./lib/QtWidgets/QPlainTextEdit"; export { QScrollArea, QScrollAreaEvents } from "./lib/QtWidgets/QScrollArea"; +export { QSystemTrayIcon, QSystemTrayIconEvents } from './lib/QtWidgets/QSystemTrayIcon'; // Layouts: export { QGridLayout } from "./lib/QtWidgets/QGridLayout"; export { FlexLayout } from "./lib/core/FlexLayout"; diff --git a/src/lib/QtWidgets/QSystemTrayIcon/index.ts b/src/lib/QtWidgets/QSystemTrayIcon/index.ts new file mode 100644 index 0000000000..60e63a5784 --- /dev/null +++ b/src/lib/QtWidgets/QSystemTrayIcon/index.ts @@ -0,0 +1,32 @@ +import addon from "../../utils/addon"; +import { NodeWidget } from "../QWidget"; +import { BaseWidgetEvents } from "../../core/EventWidget"; +import { NativeElement } from "../../core/Component"; +import { QIcon } from "../../QtGui/QIcon"; + +export const QSystemTrayIconEvents = Object.freeze({ + ...BaseWidgetEvents, +}); +export class QSystemTrayIcon extends NodeWidget { + native: NativeElement; + constructor(parent?: NodeWidget) { + let native; + if (parent) { + native = new addon.QSystemTrayIcon(parent.native); + } else { + native = new addon.QSystemTrayIcon(); + } + super(native); + this.native = native; + this.parent = parent; + // bind member functions + this.setIcon = this.setIcon.bind(this); + this.isVisible = this.isVisible.bind(this); + } + setIcon(icon: QIcon) { + this.native.setIcon(icon.native); + } + isVisible(): boolean { + return this.native.isVisible(); + } +} From c284558886a8947a218c1e117d754394ef0523d4 Mon Sep 17 00:00:00 2001 From: soonoo Date: Wed, 25 Sep 2019 12:18:57 +0900 Subject: [PATCH 104/891] Changes QSystemTrayIcon to inherit EventWidget instead of NodeWidget --- .../QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp | 4 ++-- src/lib/QtWidgets/QSystemTrayIcon/index.ts | 13 ++++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp index de09633d79..e822423a64 100644 --- a/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp +++ b/src/cpp/include/nodegui/QtWidgets/QSystemTrayIcon/nsystemtrayicon.hpp @@ -4,10 +4,10 @@ #include "core/NodeWidget/nodewidget.h" #include "napi.h" -class NSystemTrayIcon: public QSystemTrayIcon, public NodeWidget +class NSystemTrayIcon: public QSystemTrayIcon, public EventWidget { Q_OBJECT - NODEWIDGET_IMPLEMENTATIONS(QSystemTrayIcon) + EVENTWIDGET_IMPLEMENTATIONS(QSystemTrayIcon) public: using QSystemTrayIcon::QSystemTrayIcon; //inherit all constructors of QSystemTrayIcon void connectWidgetSignalsToEventEmitter() { diff --git a/src/lib/QtWidgets/QSystemTrayIcon/index.ts b/src/lib/QtWidgets/QSystemTrayIcon/index.ts index 60e63a5784..05d0376163 100644 --- a/src/lib/QtWidgets/QSystemTrayIcon/index.ts +++ b/src/lib/QtWidgets/QSystemTrayIcon/index.ts @@ -1,13 +1,13 @@ import addon from "../../utils/addon"; import { NodeWidget } from "../QWidget"; -import { BaseWidgetEvents } from "../../core/EventWidget"; +import { EventWidget, BaseWidgetEvents } from "../../core/EventWidget"; import { NativeElement } from "../../core/Component"; import { QIcon } from "../../QtGui/QIcon"; export const QSystemTrayIconEvents = Object.freeze({ ...BaseWidgetEvents, }); -export class QSystemTrayIcon extends NodeWidget { +export class QSystemTrayIcon extends EventWidget { native: NativeElement; constructor(parent?: NodeWidget) { let native; @@ -18,11 +18,18 @@ export class QSystemTrayIcon extends NodeWidget { } super(native); this.native = native; - this.parent = parent; // bind member functions + this.show = this.show.bind(this); + this.hide = this.hide.bind(this); this.setIcon = this.setIcon.bind(this); this.isVisible = this.isVisible.bind(this); } + show() { + this.native.show(); + } + hide() { + this.native.hide(); + } setIcon(icon: QIcon) { this.native.setIcon(icon.native); } From bc05bce077ef2187a543d72b95ea20bf0882e658 Mon Sep 17 00:00:00 2001 From: soonoo Date: Wed, 25 Sep 2019 12:20:49 +0900 Subject: [PATCH 105/891] Changes tray icon to white colored nodegui logo --- extras/assets/nodegui_white.png | Bin 0 -> 67511 bytes src/demo.ts | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 extras/assets/nodegui_white.png diff --git a/extras/assets/nodegui_white.png b/extras/assets/nodegui_white.png new file mode 100644 index 0000000000000000000000000000000000000000..79d6b33a1d07fbe05029add198b1791b045b8b1c GIT binary patch literal 67511 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%0Du2IdeVYGaZgoE;2sY? zjw|>J?`*};jTSmi^uYX{oxT72a*7N-$@Q%s8i%R^Qs;h6F@Eif)Fs;rI#pf%-(&It zrPR$nQO}>ZUWSnP8De}W;iV7f<0v`$chs1GPx<@hJRedxWkG;(>3a6c4=@bpFo=k4 zqTdzvF{q}-jEx`|%B3~tNx_rVk66~9lGok#!>7a0HOgAAPuh^7vAExaqHZ#fK1d=TDhcW=7T`wF|oEc69Wc_19kLk_ z?_2g5|4?WCKGyek@ZT#z6yB?Y7kJetY9r#|xaYvZugi@gpDUnhT|Fh3_SZ-vYOGj+ z)QHt@n%pIVoCsJRgRjFFSywq`gq&;h@&EV6c-f!+1h|~wgMwt>YVcPPfqyw?@>&@e z5pdC>f}1t~x&RSKr+C$p%Bopz*TUpF;Fw(Cm@Lv;$ejo1Ne?yejz(K+{(CRJg=YZ< zjL@PwN}uw9>*FMrhj$Y?YwUvo#nAXfTVCj2u!iV*k|81VG0RYBd&FZ1*916w!&l0F zEumOlFIy`u`tRsr4Nhz8j>2%6}|zcKZ4X^WZd&av3b0q?*H%V8c(DeQ<1jV_2G{YWGOcz5^_ljU7i;7 zjCv_pLsIBJj}{ni4rNHZ=3XfVa78b0(-C-L&ZfQ0q5A_dGL zBjaVHU7#B*u8@Q3Z?{jF?fe%cBTq-H)wZC=(u#iA+PsE9s0|{3MQhT66v02sKwba; z9jJyl$rkH-bhi5*$3z~n`=l3=Bj{hJ3DVyOe~A3OZ(v^Hsnr3450#b&BvyCqSkxP@ zalb zdrL~F->|Cs9AVV-k~7iD*Q27?;#Q5P_v7aG(Q!@oQqw!ea~D0sQeK9AFGg=II^njD z?t<-gq<^POU{m#Ech*eQ3>SG@>MzqV&O1y}HxIqZ+E}?d`U7}35~yg^R=KYqDAhRP z9miTaf^P<5=u6bg_tm6vF7ZY-EuJN@!oR!h_0}Xc-L~y;`aEht8B@P3KXLFq=QHI` zJTg!y`zg|?rwTS_LK#~1Oc zrE;S4MHY#+@r$v?i<6rijUUP~zpx|pjSfhRO&98|CROuo@|fKj!5^y)qB(|&R%(U$ z5Z978&nwzKtXSG$w%{gJrZT14dp0=R)HY-py5u2MrM)AGTw;u z7@13|#Sd7~m-gW&VSJU zft@8)t=0-hxP0|~@8<~>Ixb=#o&QIlf#f@8&qlQH^|B-ct0>#}rQn;n`l528VPY7K z<$o09loD>Xg0!2z-8C=Dfo>I@v7fS(On2Wws@Y-viOrnR@^#zU?d!Z# zkVLNks+arFP%HPm`LkY?w>Mi}@Hs0n8)#8m)8h$Z&|G^TSoo+nA@{CFjv1o2K|?wU zI4d)Co7#SV^U2j}d@&OC3x(*10*h{QdcM!LI(bhcQjJCE+L~PX_HUXzI&1GDoU511 zIZR0%ufKj|DPykSh|$Vu+&454|GUk%-{$l-TwR|^bPMjM<3s;i;tpJkr+kT9dQoV1 zvm4CAwmFYK11$USgO5OPIcn~2q)4h395~P=nt5SE@2#R%&bz5kHJ-XPzY3nH zh@dSjU^+1?(~UhVy#W;``X|!Q?8K}yN2<`L*dAcU=wKR?%LyNXc;TTj0 zM^FdFO3|mLhI~3cnpkHm|0_boLOv}rAcuF>k;dM1)=3bB{#8G8In+-jI8!3lgZ!B1 z8l`M!jeKLqj$50r;eP=|Rpglrij-CsQ4X2u4)*8D+NVz)1)|DW{$k=GFJ73u&c?Bn znBtT}irV5vxz)9+e1=a7f^z3r=Eb7sF@(A0ZKc8zU${oW4vH&B1C#GX5uQDseiv2q ze0m%Zk(LLlzhzkTv1{Bq=4u|`TzqD;l#YjH*%?3V(c2$&m0HQswlng!cXwm>`v#kt zK)8kD7jwxoea*&393c=U7XR+<^C6TBQ(7>5&~}V>k%6Nu^on)cKd!Lr%DqK)aHTh5 zSzCy#$E7keiu});Cuj59C40e`iSb-PSXh-{c%cG<~NP-!86a3b){BIX2$X75p_F_mk~2 z9D8yHNjYSy(wJ$8+|_kvscnd>o6syNKQ*CrVp9^Qu{QdC6@h zy%BK6GMxz_nty~di`;%mY3F7bKxOA7K$aDQBU-Kwo_K}+Q$UsPYBqdu0?aiDPvo8X zKv}3Nj0;_Evt{AA7d=Du$L-kwqv#4Bqf_7KA^M z&pn|=-!NI)m6OOH)4&5}5(5R@&6_`ghJ#@x#t-F~HiQJ8f>4qi*0&Cw@Udk(|DA9vPyY?mXE9ZcxWl)mPvliQ8P ztjot~^Z5%G_h9+jm0KCe0cWxOEkeVq<~+D0f%B4*?c@SOe+Y;e#vb(jVb-1vy$4p>;lO1;Jc1K;j!H+3l8=GH#o5Vm6jEurC9e zenikAVq>dtkNUdvgkTuUK;H_QVb@Szd`xXCPpBiXYBYA5SF-_eDur9uye3C%%zkQ1R}EnE*+Ok5h>EzxGRe5B-_`PZ=KW z8Xohgr37WcsNUiIC&2!W;PXN<7LE`eoYm0V(|qXj_wei&lfhoPLRE6$fWv_6O0%!? zsYfEE8j$34x-q6-(eMzxV8Z8gPKvcry*{6%8%Fk1V$eB*Q`wQ@oX!$_&bbmPd6ytP zK_Rz0_#)s<2MfA-Cx6+ymJI|%*4o6Lnn3C>!iY|!`Db_zBlVd!G?_f-${wUlCYOB; z3cZt-!#5{m|Gc~UuKX{Nm8gS!oJaVU)!{jgF)9SE+I(;H`A5FOViv2>bL+AQ@QFCQ zvR|ty2FlD2ZR6Qex?+EBQ00FOpSrZYw)G=FCm)#m5q7gBDeCkB38-{5I8T^1B<3H`rfutsOO)&)RfL$s$jk zH`HK#*E1EJTT3TNsugeA)+yYz&>%E}1l%JeeBh?TIR#A*uIi^JD8~FmGj#XeQ-8J_ z=AC3CUcE7)Vn;sPVdbnM<`kSJT;0=e5n4k9u=9lX;6d30K%J?g9qyp2OkXsTV=K%4L9*Nv(M&F-x z!?mer{G{%pGnD*mc~CBrBb7Vr{47OumMS%3N)W?~o-S2jOy}$ZZ)>F*$aBm57OcMC zXR)2s+^DzyM`qJEP-IrYRJDHG&7yKrcpP(=|mjF`@)-U(fg*?m>^rwpTL z)1Xn|ZW!|NNF1U)8Z{87s%7Uhfs{*?);`tj-*0i4N{Z>@5AVdz zWwYjX3j#Ap$hLZtBD1LbZt!x+^_ABujdPk&qh=tw7JT8aP<6}pWNW+LQ1P4eqm_99B)jYAygP8 zAIhoyP02Yvn>iR`^%{QcJ_NKH2s1KF;gJ9Lg0=NW^;)*~XCFK5iM50T7#KC;vbz)o0g=oWiuOB54Y6Sf|-}23QLr?&psQI%A05jEaX`JOalYBYOw| z4b*XzG%l<^h*`WAa)DKIEp$bPj7?>&r67m=^eVOA{9SGUo$DCBTU$T1!tMC%E%Sf|N5xs}eD5-rY$mzwhv`z)}aMR7LF?fjq$MjN? zwd71ZWEzeM8Y7uud17ga|4^&}U)C0)9HZm6%(|nPte~gccqn3B<*}Dby z4aEyB^LK{jQ{@qXA8$|~^Jxc6YGLutX#CB`EsnuQ$BV1HdKD>~QE`&#h;)_v=j0T< z3hndL%)S=U<)E1PQ2UY=e(8CKU2LqNMj@TqW{WRnWnqL!`ax245jJw> zWAmnM$aDh@Ns=@nG>2u_d`EN)QIIp(RxxIX-oU4bD{&4cYas{D_LbJ6e{{ZxKaR3h zheW|OfLSpPdhXRhR_zOy^pqvDyiZ!hha*83*}?pP0inQ5ef(Qul)A6`Y~>Q8>~ojk z4IS&wsVrZr`pzgORt}7voGp%wHRaw75X1u+qGSp!%PN6Gzg63xxt$)>@ikp228!>t zNPa@CsbaXCrMDf$%|1G$*WRJz9GkU7074`gaJ04|SgVRX_2rK@MadCe7-@E?l1xmo z8HotuNa*JE=gNhvfU^Sg1}*Ai;|L!D!b?vA_g5a+V`K9PzGvClwOvi8ryh7|@#xF7 zN|Wv(N1Q4YBzj+u21;;9hAds3fz+CrtzX*xiNB5+$&1^QH z4hmY9;`J^K^;(<4GNaU{fUzY?wA9Org)Hvh{VtG96EwG^=WGL+`T zpi4NnCUI540pV2ZM9vyU1!2=_(hEMz+xVywsOk-HtwjEqJBc#b)0m#22mY)vypY*zR^ z#b*EW+=R7z5E!dR)D@;R(aHtbpTUGxW;2N_<@|Q}UW`pyt+OB}8K?i~#PSP>vi~kp zzx`;g_w0-gT}BW&JQouAPcb#Sd-Iv%+w+d}NB};~et)5qsEratr#}TldkNAv_qoa| zTQEzG2=^(Uk>X#Dh-M5}ifv7AJt~Y+G&hnguq-*nmK`lqO(i9Q!G&XxvXi$ zyC6&4%$VMBVJQ$;1;XTb0I)x;yMkUlTD1S1F=RFr3?K<)lwTR#@C!ytK~XE9-taX9 zHSn!ozJYul=(`KidbM2%IeQ>jkHrBg)|rBt$KLw46N9K!{psDOM<<0G?$%OyXC^Cl z+-c3?M^x9{-JeYe8yO2Gs~ZxL{8%ekcL#g=Jxc1Rt#izq2~z@tvEX^+l&Biq;%4cT zw}_`7)47`U0y*L%fxbMg=_;-YzN-e-Qk57IyI3 zi)m$Uath9|h7g*!mFK{>;C==R^m8SU^L z%Mm@lCBM-UqZJdD!D^GQ%&vqV!<29cRqF^kd*~C%lly-~3|oX!SaHhDN$nyh_PO_< z=1nP5T~0wl-0let>(8pRetzT*8KkO&E&=D{+4`#T+pZYqW!hppgO6W`^peL!4HO-k z66x#^*|tV2EiKZSoGe?y#y>M+Vnor?&HJmvxYyx%swP@6qzPx8NP#caro7h;FvCrVQMfs)V{M@ zRoIL7sF&8vZQnBk3%gcpMGG89a!PQ9!o0Fa_Yw?KQY`u|(I>*bn07VmXMh-LtRU?d z;QYpAYett;jsdiKqW)F_qj{=Hk|Fywgi>8h9sRS2P)Lkt;vu`|iGF^oq{~utWrmTJ z`uKe1v!3|ak;CO1yAAI7??wxwcJjv`fDGvYzxYEIm5)P?F68W0J?^IQVTc*xw{l{{ zNu(b9%uwZkW9*=>!&O%kYq`w1U=L!bPF!4`n5E8KKKJw7vhDk>WDBU!V5i5igR=?2 z-*>!Y3Pn~?t<7en85QUrz}Do*F&pLjYh#f04WL#r3L{z)8qPdL?vER}foEfe!Awr6 zlo2nLRnSXYHDKtQC%(jd8PHb^h2{VKo-6xem>$NiyI{Hyi_5>FUER3?56?(ov{4}y%-8GgOCNv-eZmwo3OcIb?{k0_bKDo9aw$u?s>X2 z9ANSJT45im6$-MhNjZIHcwVXgdmJs-ezz3$JRXgTQ)+dSW!{zYN*qrcc8r(4 zu{R$5D}Ye3BD_Bezcr4-1itDPKUc_d3ZD11r*Jj06hM-`WqwS*qkhJ)b#gS!*g}EN zPPOuJsNZf9m$A@*lc{pYCX@MO zIzB{r3AZIC3r-qg<_0xPeC@=`mp$E+NxXH|BYa}GpHYxwsSiHhJnASRKYW8iTiiDK zR8}^D82092-OVWAf#1Z29#~N4EGQ@{C3J%B>s=vhC_W`KoIQ)=3I zK&pm>ln%4dJvqL8Z-4DUpISwTqLdxAo{$$piszqMw8erxPCfVHVD}unu?MNr<)&=K zh2M!r$K-u@u81OUArjQbc5kWJbi#sR=&zhg?%YGK?B0-Y3Phk7r8RWA&T;I{RtLwm zh=UWVAcB5i{w~7w(D;#a76MFnMx`24cEJ#8^QP`ccxR+>k9KB{$$!UTS@J|{hL&af zD;}-AuOCw))rn2~e#6{)_a@RYpHlRo_EBdj)B@Z_1kEs?aUc=rG!x>ykL~m(XMSd8yCqFV+N+~Ql;SCmy>z4}=~Vvq5Fbo!{cRx}TIi+A`3 z&`DEe5w=8_kwjJ|Xy!|_Ay$FfKui}swg{MDo(yV7k zv8%?*yPBuA9rj265+OXQ8tn_cfZ&fJ)}BjaX-z3&j&kMrgf&JMLjIXaldNvD{xpCH zgmAWk@$|$NyOSbm)WwVs4uYeTM+t|!nvb>Xc%whO5#FNHm_`CbkS%Fd=NMyuYW4*U zZCD%thK77NZsO0zKa3*)LgCmQUISO~nW)9XP*9_~s1ajQQGZgYX`Kt+7T;8Z(#cOB zQJqg`m_Fo6iK9T)vDuQ+P3NnD{UKxnmC%wFWVtBka^hme*Wb$sVO`aQt(*8ZlKKSR zyX6@g(Gw1ncLWooim2tBFPqtFG=B8vWXkkF#$@YVT0sAxK+ zc8)i6qp9JX3tfU{oq1p`aBPcgwLJ4w;23!gqD63mFm*-Bo{QHIS@#q?PE)$NlXI1h z;I9ztwm|iJ-d;$uP-6#aT96}b9y%zr{B+&BCZFJtc*Y}o9C?*ilt#0L?=vJQ@@CI}YL&9c^cnV!`AYEtBLTi3C52{!hBN(a-tXPVlv!Q*&Vyd#Bdac&wfQ2SW&(WQ8p(>_>x&l1Q(? zx5$Ye%HDQp!K5j;DQv3wxUq_=V(w7?@prr0kkVPP2C1&wU=<{n5n2yPlF4A*m6(SL zl*J!%!U&8h=Jih(RQV&$qsr%YLq_g8CrxoUiWn&LieNhytkk=gYqHF}f)MSk;)nv?IuumyQ5MIdEYO)G^j{~XMN3W)_bHf;bDfftYT)uoQ1f1<#it|~-8WX!r z^fcG4nH&DtrgvN+?b2{1bLSI7%}kTr1GWbSF4UIs4vCLcJl9XFuh;5aKmvxH&#&xJ$&ab(>cjf^z!Gw#pj4ihrCTKI;p0M9X>&bYy;=C)OVP2UDnBXKP!>ymb2jn;q^A;FjN>sPo48~U?eV~x`NhBC}2v_<_=^vF8!>mTD=oO(IeO~nMn;Y)u+Jn-zA%~m?v@bPJp%HYAS zD?Nle1t`ZnuM(Xx&(+gyg`0i*Tic#XY&c~6a0~M&!6Hpes|1!+f=VMeU1zt%WgBw4 zsY2yjpBGMF^Nb$W%XyS~Hihcq>*i!(G(du^xno`pw5Z0eyEFK9&FsK0;fVfw5l0%J zVy}9`&^ZrTj4xl-$xLxwU$gCSQzAw~1Gv?r^vC=!@jE%f^s}@GpS`=11W?ELJxJAY z)M%5ZqoFYPQ0hs#^v%Yz>X*qd4)}TRegp}>QUyBHwbp1y9Y73_Nczp%@W#HWw6YnY zOD8Kwk7XFmQ)sI^^?061)T8uU)cU>oNdpIxn|yOWoT*K|CXH4$d)GgpysvxJ6tb*i z0?%JhdcA#qsgZk>BI_(LvSSL&UJC7cP^02L@v^yUz}Y1fVk8gX-91Put-=ktHmXC{ zdT!3&ptWqQ=#X+QPjkj?nHc*#5+68ULhAeNCTt{P?tHDq5myWWdQBB-m-0?>cGtQjRM zZ#Lu4uZ2QxT@XsFSOf|^*p57O}rp6!P=kd`ybM#(vL+|RqD&8`fH{- zlmx#(i-49Cf=3oqO%2zW`fOzDpz))}RyjA{%?4Jq)g8#p*1x9j zGpsiJ@d>#TPgneiGckfq1(PmydXC3cx2*kzu+$2O<_ED=R`eXo$#aQkV&D!Eo%jOg zig~ys{;b4ECS&0MZh9_vhwN7trSE`uB_-&PJBv5gvlwmBV&~3FB#HA^y>u z)QfF#zW%eq-+JGE$IihG`Lg_)8{Yh_)w_N7}?_LOr{dUjt zsa5Zv6iM{}-k^$|UeP`I={reP=DkDScT`o#;#@!FPWSotzh5M(eifuTMNZg$c3`yl2jbuU<$`V? zI*}bYqhHV)ylVc}j;a+wv76lBd)e%kx<$(XNOrt;!L%IfJvG+b`q#tgg^Y_YZg5Xg zFI>0v23PKlt2#(0>FrYw*)V#osvFWn+sdQNoSuv+Vs#1-yGBs; zgbTN*SC!00)tinl2O1k+~9Iv8J(UDpPPZONlRBJ6!BRk6pNp*(BRazZEOjsuI?6{aCQN-e|7YaDJ}s zIjM_o#rW%x;Zwmew-J=Z^|UTR$H$-m;u4>JC4YL!8F>q>Neqkb!%$04T|YkN>XHrL zlq0(J?Hm92Txd(WlOSi-TqjDS)a({8oEB-dZ*F^e9+}${2KXqbZoI-m%X6<|!p?6C zExtMVQBiNdK^J)W+PhEi{myjB8{PZ; z=uOGsUKQr;5c3q)gHSYjx1FMmHz`L~!+`p3y__N_R?b}o?cuJHC)u=C!vgs&7bZHdsQ6AS~(_MYZ4YdS=sde6GfvrcW_=rOr@ zaW{Ppt!CHk&2>iISE#G}p1A3wjxJ z{#dDfYnRr1f9b{xIo_hM#l=h1@Prs7pbx?oXR{K5cWQrILg3oOK}xW76LIpqQ6St6 zGcf-k=B;(7s-PW`?-igFs+|kGoLZ3k1)@n4R8dJpYy3<;0K}2yuEdF;8_nNc&6~O& zRB4pl65QrS)Ro>s7jdBCeR*f9aP!xu5uw(RK#-rh*GONMl)+snLPGb83x%e%qa+T; z@|o>4`X>KFg6E`iYsYm?wnWc5q|D%u1^Mj244z!>yfTOkF<@|g&xWa==?XL0*8)Dy z`k$@GzaZGWMOEg=%i)VZfiB@BIUoPSksCZfsUzZL$P3K6u!f*Kx&7T6lix6%wm8Cr zR3bVd#0#HuQ)PZ$ANpY@JgRY}_7qJ^8mS#4M**VM01k)Ssip`w&79|HR^#sn$EJ7a zr`5EH*ud@>Sk{~82nja}W)Z`xt{rnf_m?VAi^|*)GgBpCsgrPo(K~4>5TBh`pki~F zn`5==B99?2KgGLnqVl!B$lIpm(Iv8sT!nCNi(v1NvURZ1qwH3wPz^(SY9Euo{ZL-i z0lGy&-5zV$Qmruxoa`58ErYbQmRwx8cp9w7S$6lRiD)pr_i7p;RL;7sGV^?)Y2hQh zq3Z!P|C`8@&^33t*Re7O^_J^4LTw(r&lQwUO08dv3A)`2wg_D|A;$m$^?KJiZa1ce zD#^5ap`lFYw)8(P1-y)3rZpAEk|9q23LD{EYYZ%ai^WToirPX>ocY-;z{xcab$D<= z2w^xC=g(azb=C)haxOd?h3#ocj*}-js8Bg9^bUI9mOs3xXp1$EREbJw3VOrTO z)<(gWXyAIT?ubWJq~qkm)0dPXV(1Z3+T8$e<<>ycSNBif9|$zrz$bL@^8&3!`sBm_ zcaFe${ACndHLTx_{+)L);1RVa?`#xf`ZMKF9{%7PALD`K`;=6w*qxN{8@d!_~0|cq_V55x$B405wSnRD|Owb(=;{!!0R;0StO~3 zP$k_N01wy8?2k0|`Jad^{&|Q|aar|I9ilYs&7AJl^<4xWeYN)K`$?r&<~Mx)DkuaH zmK;Q;UXo1ltxkrn9BD~0_GhC6!7`uWucaLZ=s?OTkj+HULVc_;k53H>TL*CMpuOfnFu2SMqikS6TsrC{<;Q5Av@&;YV= z;CoVdMvhn2xUa4jBmXxZ<_>mp0S@JIiTY3}4DL^mi@d5!+ZQxVuldX-7} z-E4oHuh(q+y-9N~QDm*Tvc%}i*r)sm5wF&U(4;jo3z`3#i)J9_8Jxt)xsY1b4~_%H z)ob>?LB<+fK8VvdtglW=gPb*plM!a|<>8N$$M+grB*G?>aYE_L3-8}g>{kx0g4#?Ws`gL=SjTR;7rBD^OMLylm zeKkYUI&?cX07uS00>T|F!nl$LV%!YP>4mh#gZ(}nx!XWdQwyB}=`wB=zQ^4C7{l$= ze_cKfHhIOped-iIC)I6FZj%HZ)52c4s1vaz6v5&Ssr+2S2y3p8)LB{{azCf+QC_&9 z3?{jiD`FbtG6LHcUGNXzTyy{doOV`KH0(jtCL&4Qu0__%(f|6sIFPXYl)`B?O08N{ zO-L-Azq3F{UBCYzZ>ZI7<2e(0_i?LL`=NL04K#&5i)KAgLTa~viDC}SeVICC@oXyP zS=Mo_Ixvrhp1bNrW(rI2E!n(U>s}5d$w7oI|5Jz|FDbcm`QJ8QygVeZEqa6ft7ods zwY6ULc1@OKyC2+k;wtY<9oF}7!(1X{QrdAptr-6I{_|{?oN?#_$1=N0rMv~^!Ov7_ zSHEH87Cn0FEo%M|Wm2lglA;0SAIwh|hP8r>&Cw;`G5{?2;mCzkgIX5$20tJ#I+~6b+RG}#o`kaHlZkLfv&Jtr^2J?N0o{0lM`ZQtY#IGE6 zIQ&xgf~y$t+^TO;d$RJz$4|s-=sQDzBrf3NG5cD8jaVHnkxuM~G|90akZ{}|_sVLU zozyEB-Jf82n%z2fuMpqDA5Siln23DaYT!Qrfdf6vXM8!&f1h4Wg7nrZ?4zAm7d$)b z_>rsJhSy))AKn4MgRZ&G!#`azz?^sYe-5K{+}pbK^xw8z7#ajh+&?8nc=^opAK3*= zi$COcr@a5;>dynAYXARnye6_$Dr+T)8B6vQ*_DbzQQ68~lIFf{E&mLn;9H4?Ig zkzE_N$~JamE5cw9W5hIkuQPbPKfm9f-M2I6I@j{Np3CF;cnqGpuyXZUmRDGW5(0bx zpr0gke*-;3c-_t+0N95QISe%jx12I-I>7<{eq=uXW&R-^TJrOU$81R99ZJv$n3N8# z%5J(#&iBW6*Ea&lQ2;X~*FMu4aZ6D2i!(fzwFbFWwHpaeyTBttK#@ zX=fPX}vGF zN$OyxK3sMYDn3SCQ@*49yZvLOjtOapi z(Q(5O6Pv98r>kVh5+0BR+R_;fL2Z6te}2>tR;!voY3p9y<$HDh<0Qo;ssNa^T9jfb zuDf_X`k@M1yO5&REYz4e-enRZ@;_dgIbc`>AfP*OkB||P*!lwTd$4;4+du6+fv+wk zQ;8NmG!CmVHrE)fvuY1{^Z|2q~L#;>}JpOfNw5;(BZj%5W zaFPL>%nQm{JVKs9k~oSXdk2$0WmoH&rm!GLqv)>)Axy0Y8?k`7Yk%AyIGc8h5uL` zo##z!_{mU9l3>L6WIjCoxnjI6<_)5E1HNryEl+MpVq%l2>R^u27LU~xp4exEPaWIr zAm-Xw=+A;WKCh~^Xgs{wm*M|Qa96PPDFtVTFy)jfH^$H-j-Tt@1UrSFf-1e)MCeRK zGZhPYH#;v8y~q91Uw=`pG5W^6fdzPo(mp7DB^=5>z<$piS%GKlsosq4vdBFEIjeD< z3pY|2w@6Hxsb0epB7cD}dF@Md>Nbk`mN~xUh1Ic8ByP{rYxcuOq`teN>x}TK8Snm^ zOcerJ*X@MU_Q_Opofc#!(-BctFrK+WWhi7Wz1K<`q!*!%_K8gsq=sA7iHf zdqSqb_1J(xRbu!#>#5hFDpuAe5s_-*1Cp-!Zo9=nu=o~o^dr}wh0mR=e6L>W-%fV$ zX4IZn9MxDq&cbiNwE1?p^C#k_r>oNlIHO*4&~^6ZUO3EboFlS;<$nTS=_vGgm+vdW z_WBQt2O7<2-|Ig-0KvuDHLnM*YXd03JZ5gqZQ6Zfk2yY-Z}+YxQEYWID-XVm_PMlj z7u%OMd-@ACu|`X%G=%YK4%GJsgPf^t|8}lltao;^YG9TSNe#j}OdIM_Wbb*ZZ$mD| zK0gDHC}$;`06osNTtDIlXhdt(g35EsF*rrzd_uB{{}pq4%kgIb>ZK&%taN3 z22NkDWk#HG0{Tu1xbP5g;obBj<{l{dva>V z%eM$>i@t4r9|gvjHb*=R?R{#R!ivb!*lwuA9jy<}-oFbJY`eMQ{u?$Bb!71J4K#bM zFVH!F&S05edv}K2yw@@XXXNu1=!zSkU>pfTx_|??E1LqVB}%>sB3OVf5i2&N^pOu76+X5(c{-J?tyf z4)RGe{_boaO=QNE`G2a~7)vyW!%}WOA^57jlovSY{&~Mg8YuvEN3MlWTYNx)B5!B9 ziA5g6v+L#uYMMMGDNY9+sc_!DpR3_tRr8sVo4&3yLToz@G8S?aZ~gxQszt`M&xYTj zHbuSKe*+(;2n9K1<-1l_RXozPewEm6%(MW{ z$&=IGag4rgg?4DlZ({U}_|iwg@kjf2mEFC3M`36W0uQe8pTc);0b7=LkmZ01TXk#9L4KR;)y>=HSCXtdyQ z=xDM4|BqKW6%&V~%SR)hE8Tkh_M!Tih*g)s{FPrTc?RyCzR532D+aTtxmW${W{z$# z3jpkDCZ?vkb{1p*%zWz={NJj?CUY-VGGcvHK_HFZCqnCMa2J7j~y%WF;oGI5+ ze2Q)c?FxA>DF{sHx!KSWXbjLxHl`#HR$AYMYmvR0i#Jm}-48 zZetbs_zmZ-K^$k47A{@LYj)%vpKx0q;h`ns(Ne~}LC<=I5GfqTM<^-sN~S#jcp7}9 zEsVnRCFC8|M!`okb7QM>0%72Dqz;1^BP*G9Cw#!ss)c(r>6TUCg4vN;?HWayNP=l{ z=idj~t#R!kLDc5p(EwUSXI57c?vpjgpRx6wt^|}99N^;mzlQ-X^-xRBx%}Hz@u%@C zT_~IZG#KZfXK7ABZ1Qzepg%oR>Kg<#Nl^@_+Y5VACtA~F-<5RO)GKfBm9q3n!i!?) zKW0mOZ2RX1zD+ywk3R{4KV!7LMqP&x;yOolRLQGlc8}G-&puF|3}uV4@XA5rY5>=; z(uPw?J1N#cY)m{trlAQh@1C!iY=2f#V%+`d35w~>zPyCN8Ib5a?l;5{^Y)}x+q35C zYZNmTepcwPls`!)F0AOcZRe_5%TeCa6GA~v;;uy%|M@Eq{I~qCjKI+o_Vrcp`E+k| z!bk_~RU<7qhHUx$T%am#p?at#O~Lh&%}dV!U3%19#(KVT=fzk(xZI~KFQ-fw(C!MGd^IV>Nn_7 z3dHf~3g}8j#{#3v>2bjE-_qn4C7Rr{vjjNQoV03}l_&rYBR6RjyZv>>z*#)#PfO|# z%Y7|8aez|gk=A*Bl|@C1>;&yyhVK&y%?s#c<-32TN8PaUM%C9|>#f$Km^)zmk~bn8 z$X|UI_XbF`g0Z$Vt4QD-p!eyN-RhBr+Y2p|%)B7X@8#vabuQ(p~HJ04qxX$|LfCO5?0| zhieL&B1){O&d`%?QIm)p`2+8;S(s8rsFeyH>1p2ybAog)#r^;)OjiNHyxh8Bk^_2` zEAT+!-Is4PPWB5dNkfX=eMJ=h@g&8TW_d~l9GEQwU<9JuNz_CKGNR3a9OShEH&LOhULBkzL7cS^T78EXP;daW-Sq$mT z!|7~z`$~uL=+dYDKmH?4xNFqJ(Vjm^JDaID2y8VVk%_%~-oc^i3#c~c?7sPeT9N<1 zR6o)M0QcFF3j3evH7D(Qi))(!%5%~>rE|-MbAgbScf;U8FuI``b~nZ5ecd{u$Pq^d zEDUtulOXKmhxdC=s+R1W3F9BPQEXX^Gnb_z@S@FZEB5ItyRxcUCp+afjCbToF~~0c z9Z!7mZ=T9$DBN}$+9KWRCChEt`8Ndb(i0{uy>YljH(UBTP;6IV6po5Y@!V>;yw@2N zNX83m(=b$b2A_6R?Eeh=4m=uU8Tv#reXfU~GB2d(+odOf#w==os-`w_K3?zo`;LI~ zSoJ-!Cl--t0{@9m(D239YgLNWGDq%^bB{G&Pa;om(rTIC`KU z1qsT$(|7kxOYLJ>Jm9foW{4!zr#-x5O5leb-B1p&|0#0j+5dY8=%gv2DHTrNT*b;N zztT7JkE=9U0&Rp2;)$`eKm0q8y${}Xl^mU9O+tcVWVp}S;A9I@7VDwDAF9pi%_^4= z%6!Uv^5;V25AL!}biQMHq#b^lyiu(=52W2rUtlIReeL_*IK{hqBcy`q(lVxJ`rgm4 zqP}PJ*b{vuq>|xk$L_ZpvRsrot6s)3Op#~B8uHN=RDGMM+SUGhhIk#Ro3K7$OlfL6 zCIYqwz8ISO)fc_tfqC~HM>UX-lXw^P)rMdU$cF)$wGfZs1*J4^!`}YDe%#-LIsqEHiwsZ--CsCFNk;C%GsneX zz#ge>X825G%`+B`(1YuZu%wG~6kk!^_sqU0!>{!me2DOrbXN5r$3J)3won^?sK*)U!h$_a>29(FT@ARoMq{Xbj=czz}*YjS@lt+0TW3@t5==D#8@saDF zXrG^3vzR~~8=}Y1GL%P1Z6Xszt*OMC_pYJ*PGMF8;Qv;Z zy7@5cZp3|s7Of_mQb%u1nk{zkY9Z0PtgIVMs=54|cwz!+^axohCUHrwOgmjhvsF0I$Tj|9tKBP}&RieA^0#R;|M3O@EyHe?ht))i5~ZcvxSwewRBH8 z^UVcg7v`RZ|8RTYRS3)rm0L&HAzWc%N|tyAIc(r!oP^^4-g5N-bYLG=R6AmoNE|FE zc`n^z1Llxnl>LC|>)9Hg2S)c4l?nCM(}hmI*w1R820!G3N4q?u$+{(VO1>xNR=lI? znx&UsD-Se4beC?GM2{d0V~%s69nRl^9R9qLZJqm-c22CJ3tiY`sp;pJPVLI?5U|2_ z?M|F;jXz(1LMhI5CZAgaUFI}vXuK393BRa=hm zkGpfp&yGQG*e#TTr|zjwX@${ zx<%;0z{Cp(s0bEBm1iQJ39ycZhF}K7YMHt z-I-i3S(Zt7J*xHOGh)lKxc|NC2^(RUv5T=f`2g${*mW*=2i3-Q%R?!cUSvo1Y3>7L zoo^CXYtdxYW)EBJN|8EJI(SZ~4MF!`?;Ii|&f||CgNU%L3{;<2ia)N@cdh0M1HenQ%aGaw{U@>gRA}ubxPFOmQaF zyJ?>+`*P(K9+5P{v-X;=sLUIz*2+_ekV!p#Ec3aR`dWGzU@#E<8oj|^6TVso-C=*l z|C~=(e5E?34k<`dB7mbYZ@vRL#cvMH-g{%H>zTc2qw?jzcG1Q?@5M0-(pS%}iA6s( zZdzG`pyt5_z;_i`Sfq|H%YyH0^VD^NU&O65*lX`Lyr5~u)Z4u<+&e$FiM(1(znr9t z8anlRR7q+iPn=13Ihmm=x0RPOJUBvYvy%Rmabz=Ue$S&BxiAkfhKZq7+tv z6yL+<<;K`wwEr6-WQ`bA(76le8wz_V*z+iZ8rP# z^`x(=R@yv~tm>K4B|Q2-f`3K>>L2cx#nTygMx19bpe)3wyXZp1ICI5mtmIl7ic(T- zR%7n8ZZg#;Y9k4*3Z!w(NasE2>O<901YmGry*4cuE44wumn_c9EPx^{U%rryknfF_-|KKtDfqK%X~V26}~@z|5sb;;qW|1+9$m&6)u(EV2$ zKGQFMm@zJYM|JSuwT&Gsl+8nXF|r?~J8Z0`+^i4T;LHY+iY2%T+G?Ezobr8sl$YSb z$ukp&wgNift7B7YKV|B<+)S{`mpd6$X^B2Suv(C$GEO=e8a^)34MJ{+e?*Sw2nsRTiwWrJz6i(*HJTE*F z1>38yzDPz8{6Oj|0aoy2JczRt3tqdJp2@|G0G+4Gk;@e#dDH(@WKc^3)&F~gGfP)A z3u!8ZMa&c*tD6pkP(jae0yR^Ni_4OT0bMD`LH!O6TM?m`PD6bcDg9iS>drX6pI+0G zC)1K3uTy^$YEq=|z)h<4t|Ba=DzW|^)u4lajMkH%U}cdI!C2&d&PyFB$|0iZq}wg| z1!H`*#~<~2;~OyqiLs4~hNoS{DIkYo`ew)R71pac<;=t&s$oEib5zgV#hMs@40+I_ zZ16?-YrV8bt^pjFEOl%?VKPsF`!o^|Zk3rmO)lMYb%bpVv;Zo(FyJa}g9G~>)mV^E;z&F8Z9oN4J|Cbd6LWPRKtB2}Y-YC) zk{|4*r&;Y$VP8J9FeY3P9GfQXTBB| zR*HUed4>TJXp81rkzuJa^LefMD8J;om&pETXJ2Xm_nOg@rT_n|(~SdAv%~0fp2&rY za!$93)Fg*s;88E}{}9rH4UDnhLS1~3`w5(T(6Z1KD8B-VVBq!wpMl{*tDh#xgRNQl z8Ne1iY61uNDl}42RkA%%%V*yMTK`G6a|Ze?^2pN#T*JLP}9g~QDuM+21??Iuv<9IGeL9C z(jX^iG+?1J@73a)^XZG%4vq4l8}4AVL#m68vDkPjYjZpXUFWzrtzREk@#yHMv|830rq1161Acua5-A*m^Bs{yhnU>Zuujh_HB%=K^4yLuqO2E@b|} zZ%XVoe4j)Jg3AALldzH0%sj`wvIhjcw4`@wQs}ZLgsw#ujaSHZhn1aeCJwff$2nQw zzX`vK6WwD#B4auPXwIcVz155FIRNhw;3@r$y=f0yb=Ze#Z+jAhY^G{%(1V(>{Grjv z;UiK^K>k}W8*FQeRJ^sCgXQ;!L=wmVLuSkj7}$>3zwi6R8ZKdQCM5O*wL=n!(Y+&d zvyv*cU55vds35}KFhe{hQXuU%58xf;CCptKp@EM)^YV=b&!vBskd@u}w}T#e$-K+4N0B{-eWvUI z-@#P*>~T_Nb%^Z7hji;;(PaqA0a<8c;4dpfGf#^d7qT zmZA-JV?7(_+dw1k9sa*}z_|+djA`Xtcb)fx{G`TQp={sj+{5o&8YjO6YlrA0p2q7W zX7ypkp;Q^lWj-k32x5E}xGVeVjh$q!u{FP0Nfm#s{_SgYfAGCBoE2%oBi!kpvj5>D z>{zLH%*i7SdlGZI@>({IMn>&+&#rz0mSYRHSjzAH?Dx|W_6 z{_&Jndj2rFB>R^XCM7Gp6?Crww^tKyYFxgXoVVa*&xsr~Jx6wsbYT<&n^Mbte^6;e zDCyU~8cSjQOntNTpl{@wrno-4-8P&H-fqajT$b_SAm>wDuCo>%Y_uC7qi9U3G0v{I zVbw7aF<)Lmt+5iQJzSTe=Wzcpq{X0~QyQB;?YU%kd>Nm&h&!zL?whBe+HaMek9``~76@=AU#3;r>Z*3@nN#8i` zWK13wLw-eX1`NSOvZQ9|l9fnb4yM16e!xnko^(G`&tY%C>QhzJdks?k^Rm9_4tW&@9Vx}H!qpGQ$;+bNXyGYZ8%A={TJISr*nltqdO#CPj z4uZcM0mhgp`9NbU@B_8oY;KrEZI5twk4Le*$j8?n0iK2!We?!yb?qp*+@Bk$NuGH= z>hbUBq=o6Hr__-65SYUd>y>|79LWU(`uqHXM%8#`k`QY;Kt)Qd;Z&kc?_$b)yTXpu zSVB^7UR9G+zjTX~HZ$B<2dWZu+jnovn$B1Et6B=I;LY$`2iYi@Fq;_NSId_OUOIIH1C<2wf^tX;1ynUu1nNQ5xW%)IP2^BD~~6XEifc4^nDVzpMm8 zrKNd2?B_PH0CuINZ6Cg-bk)8AX?|&nzE*UTI}+1(XV)I}NW06To7jZX2WG|-T9wJN zbf3`=Nd?806~6aGbD+(fvX9!|pVmIRVJ)`=8Pz($R|X{-t3j_4$#f71`-U%%AqBPp_9& z42|ADAXs%Q%V=+2iYI9HgxQ$>qSy%o4DhfxL0xs1G{C=tBc#v`#l)Haa`9qeZeWc{LE6s38tc}Oi3M9BHW)5 zgNWn5`I<_mDJxxJ9TVYFJ=i*)sRO5W7UhhBTAyrnZR+ZR0bZx32i3--8SMRnOisQ>#W<=Av42((2Vqf=+uMpm1l3dVCe23B}bA zbca9yt8P&{$Og2lcHCkuvRF%rUQzy%6I$Ddw5MFuJ8H!=!JLtM;95nPsg2$(6mD~| zOd33L8BSGq-ohe%QZ78(4J!#qV>uvz`Fbr|ZL$$6+VFIh8Krv7FnoLL=}<=}1? zw_KtVmt4a2AuM-wV0Nry=5SikJKn^ae$JU7KnVau=vGRXiX4vAe6y}6|%Me7`~JVo2dOzx@WnM3K#9~x#R z1-~z^S}1w{V^n97GyhH;z0mBo63SE4na2E_M$S{@1j!Gj&3N>}0OLdX;i?fuDVL7i z2>;SjX6_}^p$|QXz)$I~{~9^bS!&VNxv{LfY}N{&*%L;~R)X7WsAKW|$04EXVg0j= z<(XbpzphkjLdBuHgHLR%XyMXXMET|8^X|;W@T04%iZ#7?Io9B7h2H{eZivkz@GL6b z!^*uCj0mfwJ~^;w;_} zVDWn1WAEmZXDrjbG6#!&@-;QW+}f6|i!n4bG-hvLWtVF0?$9n_(_EOM!0~FP z2FNwcyIlt*p3U$;`@2fAb&Wq_54M@73${@DCx}o}HT2Q`Ylwrc$PWJrg9CI^3@+pG z!su8|V|aMd*aZXKMRfOVkfbqhmCdTw12xEGf+iW{0F4nX1aUh5eWM!}AP-b_Y{O{|Wk=9}j>S%3C5-z0Nvv=#N zw_*9@&ei_CZ9ETIHZRUL@vFkb7K*(#*CQpw23R1h(p1Z%HY^`|vig1}|7gGAlKJ#ie8h(n?{9ZWY9;y%z4%&$HQ2#J+`bvH~ zhkg+cv@3`uV*L(z@71jOCclMf4>!?$WMAywnqrV19A2qkw8{3sqRQa0lmqQo0*Heu zrcol~6d*$rM2wqJZwSCt8IuCz>NkO)>x~?%V2aX%jXliYS$zz9DKm05%9!tOJi%1W ziahx^gxQ`w_fDazSjI8E1o*G#NM>le%ehWg|Hc*;N1b8OPfgooQy-lLE+7!_iBw2L z^LkijiP(9ekv;T7dUnv_Eof}08#eH}SR_W;j_%;-TqXsMwW1Bgal78WVwxrKQyns| z&wQtyk%~eu{B4d)Qj}q&-tgPG<3waA=@{PcK8T}`#y0I$ zk!OB}i0QE;{YLknA)QUiF%I4FVoLT^+n4ZuxznXT4}~z7oxP%G+C$%`NM#*OaN~Hb zlmDaoa+s=?`-&2IVexLK{^pg-Q$Goj@&t5=MKc4_ar*?znm$IQ72`5wB&#!$|z)fX_ zU*7TaYkT-9aa*(WB{8}$RFM~~#6oWj^LN(=3UC&m1+k;JYdBQu^_Z@LzgxST&Fx@$ z4gX|gvy11dE7$PhFSn5NR#v9~xOvJ|-p=F-%Hpu{7hM>OINoP}@Bi`Soj1V4yCi;$hP$eZc{W~1k84u97=eXX4 zk2;acaC@GB#q$HlVm?(mPDaIskXNRZo<4fd_ThHZq+=Ecc)mZfn(MVWq!s@bx zNl;Kk_w%y7pk&(A-KT>Mg1X@1#%-CtoG4GO_WAMvn_1}W$CZQRk`IEOCs2*KQwxzx zo*Xn$njaMX%-msH(b1o^_WAtdTapTt?{7h2DfhahhNxUf{}1eyS}oKbgZxm=xhv`{QnP7I3d}OTotp zu@w2PpcuV*_p+|@aH7>~2%5&_;o64_^n{Xc>m{H{4*$FF(jA?z-7C{wG2)d!bM3&q zfht*#*yX#Z-ODo;TkA(MOC}NA?sTiu<+6NowRMkR%Fz z^bSaIpT$(&lNFau;|BDhAg$WhPyhZ*t*_v;o1ja1K0y=Gm@jxGWzBX?@U3>2?g0O! zMRD3EohcQvyuTwnZ_o~tIstq4mE}|2Zy=kxkNb5H2B?h1%Q2fUF(U`z z)T3RH2*O;s&1&c*xuj)}rvx6oil!*TbQet%`@MYpf1Ukg|5af2yD%#Fj*O#!U&|@x zP@A-xYH1Mb543g|ZQmhgT7Yva)o*2F1HZ&ddrRbMI0}k->c10>OgI~8bxby%)tYc{ z(SWoaRxUzaskMD^;;16-_UyhHk1!n%Ms!i?f4HmC4~IcvHSah2TuH}}EXFDJ9i_PcUP(p&tOWQ3|6`ii$jhn?FP-p% zs#aZtmh2VO-slwK9^gk^{IMV1Z%VS?avD^B^gX*y_!M)28`|{x`v);@a1o?&i8QVM zFhLmk)d0@+>tqb_2k-Ux!N0Ndwnnl<%#kk4}ee`!P$BRL?i6qSX)g z!cuJYKQGt~-|&*SJooz?wA$b|s-N;{;pKa$>}K||%l z!LH0(<&QB9s-V#-bhh%U)o_a<3e5IPLa8dxbeN-2$Yr$|*#HLCPQKI&E!IaREM~X%XrAUF9>D!JN+R;GDrUKzvIchec$X4Xyq$C zyu}c>n%i!Bpf9Jxvk8=c|E%V$))*J@8F^kRPa&xMnQ^I+^nKLYe!_3Y?eT*3^}Ll3 zfBA+oOurqe3T@{x#MRl00tu4m)K$@&3U>!@gFBDsp?~WWJvcm;276&Mt&l(uB=MY0 zsE_PrX;FEYo{BPYb1UNYaQS!Pa#^C@ZyhErJIj}s_yFTLWo#dFIcLG1>+FrwP|1}5 zCe|J*`PyEV=rCEM#>5F|>sO;1+^1&PC%z~5N>vcwYj*}#b#5gmo*K-P$*OLz?BJ}v zn_Zt|FGbl&9u%JXvh(I7kdn%cBVA5HL8%8RKRxLXORck+&FgB#wD8`u#y5Um`%|iE zQaqINi@^iRMOivG!;6-dny?Ym3Jz!}`}tsQpm2=;pR-{K-L@GshuM~=P0}BKv>qON z0uNkeF#5N5cr`;4vGo;4?k#2XQgN87j=iV_!%xGW;bE9vO4swj)(_FvX6w?jpOFOip2^4CV2w|rRmhPA|la&h}pf2G`BDnJXD89c;EqrY#hVeH5| zFHGLAD$BaOdI1I9+vEr!1+5}!#{Ns@Y~f0s&UER3oaChnEx<{=SpusYY-;vA+@r4S zR{E=Jw3N0$W05jG;wI&0#&x)YQj&z9?KOYz>hnGX$;I!bA^XFY2Cs?C;t z{b4Xujs%BSoe5I)Y7A4W^D7u)ku?K^Qw;k_UfZ&zG9$mqf4x$EU$WUJykffAi(0>9 zuT?F?N}-twgPJ z#4D$bZl21$;K>NmH@pCJI6|m}&@lOl;OA6pwy66+M;+LM z8>F7Yz|ZTG+iO+&8A)Z~l{u$e8Q*b+Xo%`$Z`F7}t2W1>q{Rl8HM^IrOT8nd>@U?a z)mlx-{j(6NxgD>{KGDNSFw*!$H!6MYt|GHMkp@iP>ge5vqdTuxpURIvtaxO-cuTVw ziY2BMP7J~Af|o!}FKoXNLx0|ODORrK$Wxg~g(h@`VfIlz)pvUxO6$`qDt1wVzo2T| zs%JyWspU`7?gN4nkZ_(OEgc3?B~e}q%9gi901&k?>?ZGVPb@GkwvV(h)i}ZgCaJeQh>P=*3wmKV}s1h35{&vyq!<+ zR~&89lDQigmwQxeLg8g^MP;f==0T-nU_n2g-LttFl)_KLpfRl?xcN6i58`+a6;xzb z>a5TQw{tKjhAnvjUB{!6D>rbiv)rld)EzHU9{`|%4V2)PSKQS>FF#eSpi2Amy+r3{ z7?7fb?Oho`IPS=cJD*zt3uUhyb%3A;-$_)PK3-?q0t^&{?;`8?wEl>jlB8UO66}kk zqna3Ji^i7yJiD&=fH=4Nv0hPL)BUQRNh5{@CS}VJ&zr=5Ux_t%4wTa_Fel&7!1am1 zQ@PNrmKQ9>3SF5y0ZOh6M5hBjiDQlKgR@1=AztYX&*<--n;NfTR4qKpspP zLC4Xqf^99O(t)-{L4h%#$+PPu(%~X}tJcg@_u8{#NsFaIQ2C@>y&~m#8(Q0fq~g&v z1InTWY{2FIfwi+3^to5%^&~%MT7P+J)ep+g3OM2s9?Iph4X>xjcAu6|Eab?h9138n zakR@&$Tr=5hrxM_(K%IWTN>Tn3x~QV zaj(201~VVX)^$l}2OP|pz8RWB9W)JY`VW@~tZ7^FVuMQx2zVzxJ9&Du@EXg9&XIGe zZVUq(ZY4+_6_iY+eSl8Q!q5Z>PlVcL4IE0h>4G0=eM z&Bmk4()9?Nq%4Ssd$Oed08__n*vpRSYNywu0tA*ZNfC+-CFuPUly};XYILq1xXQ56 ze)IrjxEw*pz*zq{cZk4Li6SG)&tG}+r9*;$=={76x#s!8$tZmQ4(A_tO1nHq&ekg; z{n13HY(~`0(=$=t@0ra>b#ZMRrJPdKv@xuhHr*enMCJ9|2C+BE#hj z!fL#E#EF#z>fk|8exC=CRP)%^RtW*axmj!Hn*<8Nm$c1c2o(K2h!LUX1Z=Z)Kn}3Q zR)yUwpR?~=UT2%B69aR3{}TFvB^#_|L%L%_i8Mhhav*!Qv~KaGp1-w$74~mS%bgb# zh`JwIdXkas7jg|G38d?d-NWliv`p=>W_S(=@*|Vwf^vvAZ@yul%i#-1@v1z!au<=T z6M}-cejZrSQ)kNe0&JkQT%O>Qihd?#C(vTA?Tg*)a$+30xXan2;sGys zW?qHV|7am{fvY}`I_}5=imvh$G~}{{Mf{Ooo0eqLn|AbLAGD@@j*kZ-viWyYjz18O z894+G00MmdM=w|*uOOl}8we1MCmhz~_P}hYfS+yV{Cc?!WFu6ddc)qpa_+03d6;ka z-%5f_?@H(08bZ@Wn1VTekxs01hZZzd5m3-9%62&k{)AlX4g zBXoDTm;wM@j|m2*ihhSrZ^CnNo+R<1_j`c~)CK}d02%D2l!Fhz&AL)uNw8EAy|(ov z0wnXWOsA{WWKylxW)BQC2P~XJuI_8zGhz*Nc;FD_^cJ2JKw`5A-^leZnqbqjBDP-O z6f3|21K-iSdDk}Zw=Xb2l1_j_5S#FG-_fuL;b!PzjVl!%)UdxbGvn-fWKunS`!NjB2i zVRKLc#tKZDc>~bfTf!DJGY36j^Je9-*s2bItHlNtY{smZd=*aIu8>N@uG9lJ-K*&8!-dv)ayCjE+IN%-pjoUIxx@C71T^ z425~1?Ay4-my##@IJemj@xor-71P%@;Fmx(7I-&0$M34if!vTJW##kZ@{a2{!rdM8 zaBp)$T2&bw7H?_rN(Hz(#zR4kM${SWNxc=MIR}}hWn|Aq2a7$91vn^6(j=ze4J{)N z*Xeueh79v1RSi#a4=e~#V*G%i^uiAs0kk3Cs7@T;+R4>(bOxqT_O;7UAvd}wt1LI9 zrf~GbX?urQ0Au&KK$sDuSOlE%ex*Qo0xGRx2VKL-Qi|?+>lBp;1+R1q*_R;1wqk-* zC2)qM3`rxuqvQiUM;6f~B<6W|TJ^jT>2$g~9$PuGm8jdcCIio!G%6zR?rjv!`443C zPN6MgvDI8~WjnpbLtzHJP(3dP@usHp$Vjwg=n0H<6*BKBaJ=+p^9|ZLynzK+`-pK9 zu;7|D*wg8cX;ld0t^(ii+cAe`cZQnHH_ZkhAjYmmTbdm2dt9&Qd)W+y5VC;}cIWaXHU zC10x)sp_A#5^KQ2_J9tMOGd;cWVK}O?3@qOd~xy^vPP=1=XgHZMgK~+Vo7}f{4L_Q z)oa0DHvy|`PTIAFvm|#XNC~2d;pLVO5DcdS=1*#|pkR0us8)x`P0h5ktVsc{t^ZzB^A`J8fjEe+ax{oCe~jECKl&! zW^@84WOyOs>wc@!H+1bz!Cw(T`7Au7vl{NRATm*(cJmL=Rr2m#o)O1A>wZMwlilyU2XBj#U{df@7p*y3kJGh z(cM-olfMfRns$$r{~GX^iW{TKHrz?PH$18xKfLSt?M+rKnM&VBSTbEo>fmJ!XVtkD zA+d&3*d!a!5As`mFKqXm7Aj;`1vAdhNkgV7i&{|zjwqBvVO2fb9QxF{eF6zvoh*uE zj}ABhrlb%IwY&bW^`YpnCT5eXJT=C?X?u9kW>Llc`=9>37Kgl3}7j$ z;cLArm8QPU!rv)yU!6X z?xL2?eNEn&ls3BSBt^Qx1YyDa>C)S!qBADm!iUc%S6?-~auA3Vu=d_{2%JldVfpcN zQ0Lb));Lf4O`a;{z)?XX@-%y7vzS27l$c?7s`)P9B-i<3aYv`A))|lFYN{axrQPy z8&)pnY7lhbnSYe%19j8ugC)4wV3Y3NLWus9b`WxL&oNy-?kI*jP=f2ge=&N#w&BH; zUW3JnJSTF$HXCG?E|D1M6jux7Vy)?Ez%O8#22EU|EgJR~BH<@~GiN24{$%S;se>D+ zOcAgp{2YCyL1(Vv4Ku`7@B$AXn?_J=Uss+Y_!~J_vMM7(5e#n@Tn<#Q9? zOcig{$#A|qA=Ypljs?t7{)9zK9~at)%qKJkx`(?JHrM#ak6eO9Nr5%A2gqgV#Q3Nk8G+zokwtdg z4~9HhJ8aJOOdj|bO``G?ukWH2zyIW2tFV0QU4rR(6U?9P6$~Q6Yj}N+E}_5;pHDaz zNft`RnZG$0b2S92H!A;gOGT%he%bCz+Q^T_Z_^<`t-3g5SA_KFWJ?tS0nxQNE=Ge3 zYd5+d0nDLYp8DS=;1blmBAoVnGnVD)i$QirLkQt#NbKc%?}Y8TSXkTWS>yRtS!uoB zfU_9*AOnY``wtd?>vGJ4Zdfz&zRtrpd9ZWfH*vN5N?MX2#p)^TIJDrrbvwS0%eIGJ zU;m7MiDf^{Mh zJ3PF5NPqIfXq<;6z>|MN{KYd{j8`uc-8&XcY+!6B^H0i-6JwlmRztLMl`r&}1Wh@B zU|=l{V1NYuB0O!npda7x1|Q@dTin0LDB z9ou@JMQjOtwjJPZ)zr%{X0rt8gK9VxtgDd7ybIjqsmYV7JMRkU1StGaMRVwG4)GQT zJSgA1uKBrZ&-ygWf%I|pTamGYE&6!0fg$!fuRi&Lp-?Ha(fLaf;qm+-QqD!Ns#oy| zJ=KgDKC!@!^HT}VPyRNx(;&Ig#N>v8L=3F~GN#x0YvPC?9Cf+%gYzR569d$P-nAl?BsTsRdI1 zdT_+iQ`odc!&N(NJ}-vp_vHIXm@5MbT^jumc~6fARr0l0ff)Y(I`Z1Us?7A<-MIth z2~2%yj|47LmEl>I4`9A8f9rHjDKvm|g0w5+DDUVdwq*&#+%HIp0H_?x8iIT!aCO=V z;OK&FaINvvbuwM4lA97mbf|jV4Q%mD$(;6f{7cTtMtb9e-EzJgMj;f8c|I64INSk@ z8)DFEZ`)AXHAZXBLx6@^k%y&kS}JdjEPKdm)Qja)U&DtX8XjPuud0im0Bi?_b0QG0 zM@CVg<|T^2M^H{kHK@5>;o7akf$`1q0sZ5vx6Sq(B^A?<)e79@XWm6K*D2FVKs z-6mLz1TY6)5Ain0myR8y4H)H z+waAQ5&iNKT?*6Q=zKY`jnhNihllKaYONI+R5FnC!ax~Dg{_m{@WwtUKfbszks~Oi zHpg?Y@c(P-$m5~jzL^LqOAC5-zG$)aNtM< z^J5;Gp-8H5%m7^e<69{2PaF|VvciJ%RK>y1{;3^}&vl9xXM<=S1&K(ar!^H!Na0#i z)2FV`&8v5*a7_=!o2OkdH}K$9jVO*Wb=8EvNRsFH0Xb6*hMZ!&OrPgz4FN1yYUN zW*rLPd7)7CH!;#?*h87ONFfXlw6?l+*5=OckNay2sjU58DaD4QUa#@$DviA>54(c0 z-N1IXx9%$1^4dd(pBS>?*1?<5M5eX0pzzuyaaqOsSa>ORaDx!>#qRd_#Jw(V4OhHw@@d0x94DdQdnTDVf?f98=RJcOVG8$8Y5Fy; z!dY7YQ}z69vIKIE%cFTiCvqx?ZH=c{*)D-y=c-pO)2$o~dnp!{jUJndpT)q~b|giWj%gT~iJ`VX|+uwALiuta0#aXKdkyLrF=XFE3S60>sWk z&HQ@hN|%-(^_fsly06cpf`@?=Ce{b1m}krR5nObK;gu1Tj6Iu%InN&ua_SYVh21@L zVPRPv>7r>3@`y5AFf4Uh__A)V3MsCmsxxVWq6A0Hl3d`+pdGQ0nFM`# zbo_I-(qQMXDO@jDc6689p>I(C2g2|?%cC_R$tzqM#+2l|xC0I*2@Xuc!gn=dIVH$j zCT7N2(I)gFp@&*``=zA=b~aG19q8$&E^T1~FYvS?sZFz*eFh1=T=#^9$k+xJt7t%H z??7VO{g_q;>r?pB)&AL@Vk9nMnt6iPMAT#>ykt#ZuYSIV-G5~jX%;f}2Q)u!k-p!UI)tPT$_A@SFS90vTfaMU#*_M~5ai>4iXN4s8 z7C2-hPbrxW)7!UR9jvI)xz|Rw8xPG`sq(e-X-sP|h3iSeaf<)*RO@3cQ zW6?<;R7Y}u?#uGSBqeXTXDtGf-24wW=O_TqEk1MY2jYRwpc`tw?ySIF(mKDHkewfY zx*R*#Y2489<|?4xZ@))xHCs<2;au%|b4T(cc~R_J=3{c&Zj&22C5y3JVx<}s&@N=q zK1whNpQwJ3JnE?ydhj(jCm9YqjyeAmzpW)565Rbq7Nqa<+AT*QA1!@k@}2jRYkV;y zX;LxqBd>X2yQSy$mC{^D+L}THrKDV9joA1RR>xyjfFI&JGX2u-;6fIDk}{e^qi)n;hz^y{8VL?U6DfVxW_ z_hA-kkZQf;X!){x*|}aGUUO`JPaQ3S+g-}DYw5(hgOqe_cC{}glK|{q!;ZXShBva%-r*TUiTn31vDTiFo z)c;ctCDZTW5tola-jx;{c0zk6$n&I1K-;t2qw*+Ya&ZGX{-kpGK$O#qFQ`ZI)9sC= zPA@L5dv62}{B=_!POjWE!{mM17&iDKMfi0B)=*LRKpEbo@HvuUIjM)1+%xdLjAL~y zy_{}QIn6~3t4R=7j)lu7jUWKttfEwr4^cd1=ldZ`Rs8QoUu@v(I?cLag}r*siDuov zT&zykdSM2y4S=~ZZV7yyu->U*>qQ%SNgs~e^hLBI7u)n>c?ayen~&OH>JG_!3JyvW zhv*J2{|RtSumi$3)?%u#|A2(0J2GlOdue&zAJ<;wLbTxqvtSjmql6x84fY5e0KEzw zya{!Y-vmDh^99!N{tK3hffdETn&F^z&a@3G;e1G79la86LV0|fwF@-bq{QAKMb7qIoAE&d1{Z+-8A&?Xyw#S{f$YO$Z(a^6Oo? z2GK_^+>Fvi(`D_<&nOP+kTrZ*s^>YtS3%Vv9CmDfbqQ92kH(?4e2>sgj<>(6Hkpa>p@U7p^HwJ1IhXB&A)<)d#tgZZJPW1>DHbfb~*t>$cu zR*@b9h2jFw)nm;_x5b~)$C?vX8LMb9GUQIO?zY;bH*ihXdcbJUra`P$4LW1jw<;U_ z^-5!qdYn{X)%kXIyh7$i7uPFt&nKbx^K($#%*+DI9)ru0MP=2ay*I?RAL6hPpU(Gv zqP_o~zfanl9~E+q<5f+y{c{T`!_M7JfkERDi{t+3 zay&R*ffz+MW4Y^x#IXNrHZzvvnW}XKxjh27bX&hOgs{MC#}0_f<0DtWSXt4+j0!OU zQF*OHq_J=_vWQJ_rFL0h1o;7V=!mCzd@43bKvdGT=Bi=Uqnp@&%`z&g73$xiX*&-X zo4wu;>`z$ibA0tdfjyzXKE%zKs0s7Cy}&URbC9RBReRG@%72{oA~)5@$+j`IX6tXGI#jb zcWQOr4sD+9AB%znSI{7B0W942?pEI@UuZ}gGgPhrG;9_A<#*o$lRv1m-WvV)Yy!#` z2J;9l^jN6L^FTgpU`#^!X|SNvxmzcLJy|Fr@OjMTkK0!$Ew6PN2F65Z2jX}?Dm63g zP(Ks$xU=2RYP*Fy)XR$`;(hiwyqh*oe7Y^>*g+g`pGGso*T(PTXa9!G=GApHZPHBU_thy6f$Qp4EgI z>bI8(*VyDvdJxGM7JH<17Y{B+d|<5mz@$ZvxunjI611wCI`&Ih?#~HR1s$7-ec#T* zgwo}BqTF5Pxoc9VFx=A?)Nc@^qr(FMJs-0I$sn^O(B zL}atd?2ktp21j?F^1DG;)EQWY2v_b4_qvQ>0_m0l$}O=sm*>l+m} z1Rv%s(O;r4qbcm_f-2sv1Qs}r)IQO@GJ3D+E8mTAeWQG;#u_uWG>Rrsfj3mjdkL7b zRH2!X4!Y?rO`A1o%%zs)$ry)oAa?@f3r!Y8VEx`)Jh584-YH3V$3-8)B2I}t1Z$b1 zHgF_8ehH(rBx!8v5i)*#IunifR=6$xQalJ8nss>xIgB1xEl7QNAn+L{- zNQg{goj~xm6sfBm$x8)TK}xM!086$kBRzpR>MSchad@xJYWNGRQ_Bh{uU40J0eZuk#~w)%ii{<)#Bu zf7q}`shNU(h&R4zjCnsA>lU(He)xKKKJ}~7)}O|@NF3OE`N}<25UVKQZv#@6*W6o) zo;X6N^?e`4RuLZDe}^f-uz95EL_)n88e2eR+23+H%3grLo!v zW1ioyXw<(a1fE}i@+`-me^hWYcCAZ!h+v^9W04;XC-NPtj%P+whlVzv*_^8!O7+OCEwb)L_o;@Z6Dd6$0o}2wFr(n&fFh``HAqSt(yqRXvHH;s ziRX)6gi6onTg*7_#$FAe{xe|)lI(E7VW>nQIGb)x9>!rjuUHHxKBsr0# zS90BkAk8MpmrGzNb@)I;#KBS)SWU+AnJs*nFvSxXl^NE5aV0eEAb3J3PKvC#3YL5T zNmN5xCS3ZBoC#&>NSq{hWwo#}hCKXojK>p=)axZE4U7G(`+47f+~fPxV$%vp+c;v! zs#W~5sHyQ$d}Jga!vGU2ZE%}^qG{T_4Yj=^n)%cn=TeM^xzoxBH7x3==?jnWV(7R4 zI?DA{?)Rpu5LJh^_~+4Ve#jSY2MMRXR#)S}d4e_fC#M+H=DJ!<4pA>JuM2Jem8}PO zwwb{1EbVCoub>#?R1Yp6#mNLTIBK){?kL@L^ordlX|2h+cAYb;z0x{i?c^ z)UkBqf@2)X6Yx3;Isx}{F@viGvNwn{871ZTvZ%Gmopz6?p=Dt=R)972O8N=Nzs3P-eJY4CAs+?Q{)&5>HkIYE#l{0Fhh|HGxm~y z44`IAYuOSoH$fkAmnp0n zMZ=4!hM_fK<@>l?o&+w}$5}?fN;*>UL{~C%fRSqO#)+t+n@?TxzvXe0E8OB5pm^US zUn$|CxQOjF<7-?n+woRpU_rx*13BqG7PeFseAgXjdns}He-?{PAN>rkbUzj0fR3!$ z1G-1Q<|he%=u>HCxU1^Ar?Zw0ljRDiapO~gF0ow1Ljmy-i>=ttG{=kzJFCg(Vbfdg zOi`#qe}z5Evf}bkTnU!gu$2#sMNb1~_$edpr~7LC!cP%gyo5Q#=D}5LEX){heCGsz zNO}h3*01lMyZ>HOH6(-(<|UW^Z3CAruP|ZMKlU8hQUT+%>mA5mlkSTLBODuzXhFX7 zToDW1+`%;Job61W!v5kG2X^U-#C+M<;|5ARSe>DZTO_n z4Rq=u;`{0J%L;OeBO!6@acnD>F1*6P5Mn4sljpFud&u}Flb0uT!Srj;P1a{`z+5FJ z4PGXI>v|*_8<>w{gq`K8tIjxq_-AN9{?Sd0kJ-W22Gt` zNX2Aux#O#{49Bm+sxU9E@ihfgW?g}RIWaW9^JGCZ`G+IH4k>iuir$yZ1tT?j@blK;yj0O%+NKc-PXXILL-n9O`g2%O4d9mIl%72sbc zz()}U;Fmb;H)`n}>2th03py6krsxv3^0J&!ZsMTuPBAD2o39d26zPsKydt;oz-T#* zd5uatJ$E~mvoC>IC<}~;wM_}ES<9F-R(0{a)RaX@&>=D2V zUqGN?`)PEGx%qgArsd>D!p!XwW+H{NLM;iPwX@1YJNRtma7G1`ikF~`nB$@OCO*V? z#a?5fF^pSt={6Q4ZvsCmLRsf~!KjQ{wdZ=;G>0sr@)N Date: Sun, 29 Sep 2019 02:03:48 -0300 Subject: [PATCH 106/891] qpixmap save() --- docs/api/QPixmap.md | 13 +++++ .../nodegui/QtGui/QPixmap/qpixmap_wrap.h | 1 + src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp | 19 +++++++ src/demo.ts | 52 ++++++++++++++----- src/index.ts | 2 +- src/lib/QtGui/QPixmap/index.ts | 9 +++- 6 files changed, 80 insertions(+), 16 deletions(-) diff --git a/docs/api/QPixmap.md b/docs/api/QPixmap.md index 8148421652..bae202f52f 100644 --- a/docs/api/QPixmap.md +++ b/docs/api/QPixmap.md @@ -42,6 +42,19 @@ returns true if load was successful otherwise returns false. - `imageUrl` string (_optional_). Absolute path of the image that needs to be loaded in the memory. +#### `pixMap.save(fileName, format)` + +Saves the pixmap to the file with the given fileName using the specified image file format and quality factor. Returns `true` if successful; otherwise returns false. + +The quality factor must be in the range `[0,100]` or -1. Specify 0 to obtain small compressed files, 100 for large uncompressed files, and -1 to use the default settings. + +If format is 0, an image format will be chosen from fileName's suffix. + +See also [Reading and Writing Image Files.](https://doc.qt.io/qt-5/qpixmap.html#reading-and-writing-image-files). + +- `fileName` string. +- `format` string. (_optional_). + #### `pixMap.scaled(width, height, aspectRatioMode?)` Scales the pixmap to provided height and width with respect to aspectRatioMode. diff --git a/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h index 2ba3371c0a..31b276f5fa 100644 --- a/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h +++ b/src/cpp/include/nodegui/QtGui/QPixmap/qpixmap_wrap.h @@ -16,6 +16,7 @@ class QPixmapWrap : public Napi::ObjectWrap { QPixmap* getInternalInstance(); // Wrapped methods Napi::Value load(const Napi::CallbackInfo& info); + Napi::Value save(const Napi::CallbackInfo& info); Napi::Value scaled(const Napi::CallbackInfo& info); }; diff --git a/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp index a3d5067746..39162c86a7 100644 --- a/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp +++ b/src/cpp/lib/QtGui/QPixmap/qpixmap_wrap.cpp @@ -10,6 +10,7 @@ Napi::Object QPixmapWrap::init(Napi::Env env, Napi::Object exports) char CLASSNAME[] = "QPixmap"; Napi::Function func = DefineClass(env, CLASSNAME,{ InstanceMethod("load", &QPixmapWrap::load), + InstanceMethod("save", &QPixmapWrap::save), InstanceMethod("scaled",&QPixmapWrap::scaled), COMPONENT_WRAPPED_METHODS_EXPORT_DEFINE }); @@ -62,6 +63,24 @@ Napi::Value QPixmapWrap::load(const Napi::CallbackInfo& info) return Napi::Boolean::New(env, loadSuccess); } +Napi::Value QPixmapWrap::save(const Napi::CallbackInfo& info) +{ + Napi::Env env = info.Env(); + Napi::HandleScope scope(env); + bool loadSuccess = false; + if(info.Length() >= 1 && info.Length() <=3) { + QString fileName = QString::fromUtf8(info[0].As().Utf8Value().c_str()); + if(info.Length() >= 2) { + loadSuccess = this->instance->save(fileName, info[1].As().Utf8Value().c_str()); + } else { + loadSuccess = this->instance->save(fileName); + } + }else { + Napi::TypeError::New(env, "Wrong number of arguments").ThrowAsJavaScriptException(); + } + return Napi::Boolean::New(env, loadSuccess); +} + Napi::Value QPixmapWrap::scaled(const Napi::CallbackInfo& info) { Napi::Env env = info.Env(); diff --git a/src/demo.ts b/src/demo.ts index acaf607c2a..dbbee54cdd 100644 --- a/src/demo.ts +++ b/src/demo.ts @@ -20,9 +20,13 @@ import { QTextOptionWrapMode, QCheckBoxEvents, QSystemTrayIcon, + ReadWriteImageFormats, + QPushButtonEvents } from "./index"; +import { ok, equal } from "assert"; +import { existsSync, unlinkSync, readFileSync } from "fs"; +import { resolve } from "path" -const path = require("path"); const win = new QMainWindow(); @@ -40,9 +44,9 @@ const checkbox = new QCheckBox(); checkbox.setText("Check me out?"); checkbox.setObjectName("check"); checkbox.setChecked(true); -checkbox.addEventListener(QCheckBoxEvents.toggled, () => { - console.log("checkbox was toggled!"); - label1.setInlineStyle("color: green;"); +checkbox.addEventListener(QCheckBoxEvents.toggled, checked => { + console.log(`${checked ? 'checked' : 'unchecked'}`); + label1.setInlineStyle(`color: ${checked ? 'green' : 'red'}`); }); const dial = new QDial(); @@ -57,11 +61,11 @@ button.setText("Push Push Push!"); button.setObjectName("btn"); const nodeguiLogo = new QIcon( - path.resolve(__dirname, "../extras/assets/nodegui.png") + resolve(__dirname, "../extras/assets/nodegui.png") ); const icon = new QIcon( - path.resolve(__dirname, "../extras/assets/start_icon.png") + resolve(__dirname, "../extras/assets/start_icon.png") ); button.setIcon(icon); @@ -101,13 +105,32 @@ scrollArea.setInlineStyle("flex: 1; width:'100%';"); const imageLabel = new QLabel(); const pixmap = new QPixmap( - path.resolve(__dirname, "../extras/assets/kitchen.png") + resolve(__dirname, "../extras/assets/kitchen.png") ); imageLabel.setPixmap(pixmap); scrollArea.setWidget(imageLabel); +function testQPixmapSave(fileName: string, format?: ReadWriteImageFormats) { + try { + existsSync(fileName) && unlinkSync(fileName); + ok(!existsSync(fileName)); + equal(pixmap.save(fileName, format), true); + ok(existsSync(fileName)); + // ideally we want to use file-type, jimp or magica to verify tmp.png has the correct encoding and/or is identical to source img. + ok(readFileSync(fileName).byteLength > 1000); + } catch (error) { + console.error("QPixmap.save test failed", error, error.stack); + } finally { + unlinkSync(fileName); + } +} +testQPixmapSave("tmp.png"); +testQPixmapSave("tmp.jpg"); +testQPixmapSave("tmp_jpg", "JPG"); +testQPixmapSave("tmp_bmp", "BMP"); + const trayIcon = new QIcon( - path.resolve(__dirname, "../extras/assets/nodegui_white.png") + resolve(__dirname, "../extras/assets/nodegui_white.png") ); const tray = new QSystemTrayIcon(); tray.setIcon(trayIcon); @@ -125,6 +148,7 @@ if (rootView.layout) { rootView.layout.addWidget(dial); } +(async ()=>{ win.setCentralWidget(rootView); win.setStyleSheet(` #root { @@ -134,12 +158,12 @@ win.setStyleSheet(` justify-content: 'space-around'; } `); - -win.setWindowIcon(nodeguiLogo); -win.setWindowTitle("NodeGUI Demo"); -win.resize(400, 700); -win.show(); -win.setWindowState(WindowState.WindowActive); + win.setWindowIcon(nodeguiLogo); + await win.setWindowTitle("NodeGUI Demo"); + win.resize(400, 700); + win.show(); + await win.setWindowState(WindowState.WindowActive); +})(); (global as any).win = win; // To prevent win from being garbage collected. (global as any).systemTray = tray; // To prevent system tray from being garbage collected. diff --git a/src/index.ts b/src/index.ts index 8d8736775a..bbfb41fc90 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,7 +4,7 @@ import "./lib/core/bootstrap"; export * from "./lib/QtEnums"; // Gui: export { QApplication } from "./lib/QtGui/QApplication"; -export { QPixmap } from "./lib/QtGui/QPixmap"; +export { QPixmap, ReadWriteImageFormats, ImageFormats } from "./lib/QtGui/QPixmap"; export { QIcon, QIconMode, QIconState } from "./lib/QtGui/QIcon"; export { QCursor } from "./lib/QtGui/QCursor"; export { QTextOptionWrapMode } from "./lib/QtGui/QTextOption"; diff --git a/src/lib/QtGui/QPixmap/index.ts b/src/lib/QtGui/QPixmap/index.ts index 821bebbe53..3d33508f1b 100644 --- a/src/lib/QtGui/QPixmap/index.ts +++ b/src/lib/QtGui/QPixmap/index.ts @@ -3,6 +3,9 @@ import { Component, NativeElement } from "../../core/Component"; import { AspectRatioMode } from "../../QtEnums"; import { checkIfNativeElement } from "../../utils/helpers"; +export type ImageFormats = 'BMP' | 'GIF' | 'JPG' | 'JPEG' | 'PNG' | 'PBM' | 'PGM' | 'PPM' | 'XBM' | 'XPM' +export type ReadWriteImageFormats = 'BMP' | 'JPG' | 'JPEG' | 'PNG' | 'PBM' | 'XBM' | 'XPM' + type arg = string | NativeElement; export class QPixmap extends Component { native: NativeElement; @@ -17,9 +20,13 @@ export class QPixmap extends Component { this.native = new addon.QPixmap(); } } - load = (imageUrl: string) => { + load = (imageUrl: string): boolean => { return this.native.load(imageUrl); }; + save = (fileName: string, format?: ReadWriteImageFormats): boolean => { + //TODO: quality argument + return format ? this.native.save(fileName, format) : this.native.save(fileName); + }; scaled = ( width: number, height: number, From eca218ac79d1c3f75e33a2b5dbfaf70814f83445 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 29 Sep 2019 20:14:35 +0200 Subject: [PATCH 107/891] Adds new doc site (#124) * Adds base template for new docs site * Adds Apis to docs * add some css from rn * Fix right side sidebar functionality * Basic docs * adds old docs * Cleans up unnecessary files * Chane links * Adds docusaurus v2 * Styling fixes * adds wip and new assets * adds code image * Add FAQ link * Adds analytics * adds cname * cleanup blogs --- docs/api/QTabWidget.md | 3 - extras/logo/nodegui-circle.png | Bin 0 -> 114575 bytes extras/logo/nodegui.svg | 3 +- website/.gitignore | 20 + website/README.md | 33 + website/blog/2019-05-30-welcome.md | 12 + {docs => website/docs}/api/Component.md | 11 +- {docs => website/docs}/api/EventWidget.md | 15 +- {docs => website/docs}/api/FlexLayout.md | 19 +- {docs => website/docs}/api/NodeLayout.md | 21 +- {docs => website/docs}/api/NodeWidget.md | 69 +- .../docs}/api/QAbstractScrollArea.md | 15 +- {docs => website/docs}/api/QAbstractSlider.md | 29 +- {docs => website/docs}/api/QApplication.md | 25 +- {docs => website/docs}/api/QCheckBox.md | 17 +- {docs => website/docs}/api/QClipboard.md | 11 +- {docs => website/docs}/api/QCursor.md | 5 +- {docs => website/docs}/api/QDial.md | 27 +- website/docs/api/QGridLayout.md | 54 + {docs => website/docs}/api/QIcon.md | 13 +- {docs => website/docs}/api/QLabel.md | 21 +- {docs => website/docs}/api/QLineEdit.md | 23 +- {docs => website/docs}/api/QMainWindow.md | 17 +- {docs => website/docs}/api/QPixmap.md | 17 +- {docs => website/docs}/api/QPlainTextEdit.md | 31 +- {docs => website/docs}/api/QProgressBar.md | 21 +- {docs => website/docs}/api/QPushButton.md | 19 +- {docs => website/docs}/api/QRadioButton.md | 13 +- {docs => website/docs}/api/QScrollArea.md | 13 +- {docs => website/docs}/api/QSpinBox.md | 30 +- website/docs/api/QTabWidget.md | 6 + {docs => website/docs}/api/QWidget.md | 11 +- {docs => website/docs}/api/QtEnums.md | 5 + {docs => website/docs}/api/YogaWidget.md | 13 +- {docs => website/docs}/api/process.md | 5 +- {docs => website/docs}/api/synopsis.md | 28 +- website/docs/development/README.md | 48 + website/docs/development/common_errors.md | 7 + website/docs/development/debugging.md | 11 + website/docs/development/getting-started.md | 113 + website/docs/development/setting-up.md | 55 + .../development/signal_and_event_handling.md | 150 + website/docs/development/styling.md | 100 + website/docs/development/wrapping_widgets.md | 3 + website/docs/doc1.md | 162 + website/docs/faq.md | 65 + .../guides/custom-nodegui-native-plugin.md | 6 + website/docs/guides/debugging-in-vscode.md | 39 + website/docs/guides/debugging.md | 59 + website/docs/guides/getting-started.md | 139 + website/docs/guides/handle-events.md | 6 + website/docs/guides/images.md | 6 + website/docs/guides/layout.md | 112 + website/docs/guides/networking.md | 6 + website/docs/guides/nodegui-architecture.md | 107 + website/docs/guides/scroll-view.md | 6 + website/docs/guides/styling.md | 175 + website/docs/guides/tutorial.md | 72 + .../docs/guides/using-native-node-modules.md | 55 + website/docs/mdx.md | 22 + website/docusaurus.config.js | 92 + website/package.json | 33 + website/sidebars.js | 53 + website/src/css/custom.css | 34 + website/src/pages/components/CodeExample.js | 42 + .../src/pages/components/CreateNativeApps.js | 47 + website/src/pages/components/Features.js | 63 + website/src/pages/components/Hero.js | 85 + .../src/pages/components/SplitView/index.js | 18 + .../components/SplitView/styles.modules.css | 61 + website/src/pages/components/Try.js | 76 + website/src/pages/components/common.js | 41 + website/src/pages/index.js | 30 + website/src/pages/styles.module.css | 42 + website/static/CNAME | 1 + website/static/img/code-sample.png | Bin 0 -> 89159 bytes website/static/img/demo.png | Bin 0 -> 31950 bytes website/static/img/favicon.ico | Bin 0 -> 15406 bytes website/static/img/logo-circle.png | Bin 0 -> 28008 bytes website/static/img/logo.png | Bin 0 -> 16004 bytes website/static/img/logo.svg | 5 + website/static/img/logox200.png | Bin 0 -> 6735 bytes website/static/img/undraw_code_review.svg | 1 + .../static/img/undraw_docusaurus_mountain.svg | 170 + .../static/img/undraw_docusaurus_react.svg | 169 + website/static/img/undraw_docusaurus_tree.svg | 1 + website/static/img/undraw_website_setup.svg | 1 + website/static/img/undraw_windows.svg | 11 + website/yarn.lock | 9266 +++++++++++++++++ 89 files changed, 12302 insertions(+), 239 deletions(-) delete mode 100644 docs/api/QTabWidget.md create mode 100644 extras/logo/nodegui-circle.png create mode 100755 website/.gitignore create mode 100755 website/README.md create mode 100755 website/blog/2019-05-30-welcome.md rename {docs => website/docs}/api/Component.md (89%) rename {docs => website/docs}/api/EventWidget.md (91%) rename {docs => website/docs}/api/FlexLayout.md (88%) rename {docs => website/docs}/api/NodeLayout.md (89%) rename {docs => website/docs}/api/NodeWidget.md (87%) rename {docs => website/docs}/api/QAbstractScrollArea.md (88%) rename {docs => website/docs}/api/QAbstractSlider.md (87%) rename {docs => website/docs}/api/QApplication.md (89%) rename {docs => website/docs}/api/QCheckBox.md (87%) rename {docs => website/docs}/api/QClipboard.md (94%) rename {docs => website/docs}/api/QCursor.md (90%) rename {docs => website/docs}/api/QDial.md (87%) create mode 100644 website/docs/api/QGridLayout.md rename {docs => website/docs}/api/QIcon.md (87%) rename {docs => website/docs}/api/QLabel.md (85%) rename {docs => website/docs}/api/QLineEdit.md (82%) rename {docs => website/docs}/api/QMainWindow.md (89%) rename {docs => website/docs}/api/QPixmap.md (86%) rename {docs => website/docs}/api/QPlainTextEdit.md (81%) rename {docs => website/docs}/api/QProgressBar.md (87%) rename {docs => website/docs}/api/QPushButton.md (83%) rename {docs => website/docs}/api/QRadioButton.md (87%) rename {docs => website/docs}/api/QScrollArea.md (90%) rename {docs => website/docs}/api/QSpinBox.md (88%) create mode 100644 website/docs/api/QTabWidget.md rename {docs => website/docs}/api/QWidget.md (90%) rename {docs => website/docs}/api/QtEnums.md (88%) rename {docs => website/docs}/api/YogaWidget.md (91%) rename {docs => website/docs}/api/process.md (96%) rename {docs => website/docs}/api/synopsis.md (69%) create mode 100644 website/docs/development/README.md create mode 100644 website/docs/development/common_errors.md create mode 100644 website/docs/development/debugging.md create mode 100644 website/docs/development/getting-started.md create mode 100644 website/docs/development/setting-up.md create mode 100644 website/docs/development/signal_and_event_handling.md create mode 100644 website/docs/development/styling.md create mode 100644 website/docs/development/wrapping_widgets.md create mode 100755 website/docs/doc1.md create mode 100644 website/docs/faq.md create mode 100644 website/docs/guides/custom-nodegui-native-plugin.md create mode 100644 website/docs/guides/debugging-in-vscode.md create mode 100644 website/docs/guides/debugging.md create mode 100644 website/docs/guides/getting-started.md create mode 100644 website/docs/guides/handle-events.md create mode 100644 website/docs/guides/images.md create mode 100644 website/docs/guides/layout.md create mode 100644 website/docs/guides/networking.md create mode 100644 website/docs/guides/nodegui-architecture.md create mode 100644 website/docs/guides/scroll-view.md create mode 100644 website/docs/guides/styling.md create mode 100644 website/docs/guides/tutorial.md create mode 100644 website/docs/guides/using-native-node-modules.md create mode 100755 website/docs/mdx.md create mode 100755 website/docusaurus.config.js create mode 100755 website/package.json create mode 100755 website/sidebars.js create mode 100755 website/src/css/custom.css create mode 100644 website/src/pages/components/CodeExample.js create mode 100644 website/src/pages/components/CreateNativeApps.js create mode 100644 website/src/pages/components/Features.js create mode 100644 website/src/pages/components/Hero.js create mode 100644 website/src/pages/components/SplitView/index.js create mode 100644 website/src/pages/components/SplitView/styles.modules.css create mode 100644 website/src/pages/components/Try.js create mode 100644 website/src/pages/components/common.js create mode 100755 website/src/pages/index.js create mode 100755 website/src/pages/styles.module.css create mode 100644 website/static/CNAME create mode 100644 website/static/img/code-sample.png create mode 100644 website/static/img/demo.png create mode 100755 website/static/img/favicon.ico create mode 100755 website/static/img/logo-circle.png create mode 100644 website/static/img/logo.png create mode 100644 website/static/img/logo.svg create mode 100644 website/static/img/logox200.png create mode 100644 website/static/img/undraw_code_review.svg create mode 100755 website/static/img/undraw_docusaurus_mountain.svg create mode 100755 website/static/img/undraw_docusaurus_react.svg create mode 100755 website/static/img/undraw_docusaurus_tree.svg create mode 100644 website/static/img/undraw_website_setup.svg create mode 100644 website/static/img/undraw_windows.svg create mode 100644 website/yarn.lock diff --git a/docs/api/QTabWidget.md b/docs/api/QTabWidget.md deleted file mode 100644 index 761c76e37a..0000000000 --- a/docs/api/QTabWidget.md +++ /dev/null @@ -1,3 +0,0 @@ -## Class: QTabWidget - -Will be available from NodeGUI v0.1.10 and up diff --git a/extras/logo/nodegui-circle.png b/extras/logo/nodegui-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..c2af7b0405c8fd38ba313558d88550c6d4e2218c GIT binary patch literal 114575 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

%cFWeI=X7Wqf2hm=u7Dt^w zL2hr$RY-LxB*Hof4f+A{a9ZFql}1m!-A74zvuohAd=_hOxuCr=<>@W~%)!t_O$V;u z8)tXcty}y^ZGf8df+!aMS*!uv4BtbcvvWO!kYMVXeJ&`cKkxtid5#7|S(sjoFbqM% zPRsig?OhZVP9!*tRL>)jRgoE6$EEN8Ebfu;jIeyUj zKn^E0XF&v=h7etTeXI~1^mCnOOMz)L0IL@`+3ZQ-OcIS3$1=%V&ZWHF@+bh#|7{3_ z8H-0qpTRlPyBsThzg)G^h$Ubfl6-FH!SRu0i6Dvy2+;x(j#`uxOjBdsH80U%`OE3! z^*hAlv$jzt4dh`T;DGDmr9Ol91R3L5oVE6szJqx4I{prsOHF5I;+eCe{Mmzxs4+>1 zTKupsjJK#-m?mzPKK>XNx_gw;W+YE~Op1=bWu$i?HyC|av8SjJpx4^6PRME=qq^T{ zVBmm|qeeb5Q9VKm!L*!Gr>NazjMv~Q=RZ=e8IoQu5xhEQU8xf&ff}Ly;y&)KqB3r~ z0fP!+$UEbkPd^L1kt`P02_zp@rOp?y4JapZojP(I7yl2Vv2JjFAyF4Gc?4xK#N|AG zHh40xQ>Tzrz>H&_v-5Pus`+;4Es)?uC+%H=qIGxQFUoG^7H-Wn*l#Yu5uag7(O}9W zR&jyOMdmDx9nsR#as~t{6g;bv9G|~>wZqGcNTsAY`^p2RRI6rZP6~;LC?LKfK17ia z@*Gpg3G&8&ve}ZdCP}pE^3pYFUdIH2wSq5RUktPK5Ks)qK0W6lL4qY^4anjk92E(- zBO*czbHu1$0>P){=dbJRBOoI(`J<4>3yF$k&R-;x2K@|x%&<88fCvzQ=-61=2wjJ= z{EBE3kX`flu+tUjsR-ISiS&@vtI%TWgnQPlq zUiFcKCZ;#%wQ+^XX0}exbPXGxdFuTB(ZBnOh2HFKhia=jPfv`G75MEHg&vO#>0HHN z)PpWjBf9(k39rTN;s$0cHvPZh*buWD_$KojPn9W)ZAdP5hs$58P#j>@GgR7fv0V>= zJCxvMsQz23;N&o!+?=TN42>hM?P(zBb^lGhrPlvvw6SOK$ztn9Wo_N{o z1-}S^XPbXSnF!O(P(xXV?Z>_CKp?``RI?c0)V|j+JWDQnUcGJr$DM(T**>JT^Lo(C z6}YZ+6g%o?N%=nQ=!k*r43GU7LIlgt*Mrcxf%UZ4Tt-Mp2%+>l`1VEO;@OuO&Gi^Z zI*cjTr;(^7E5jcZ2fH4mbRJ5L920S|R;o{jMU2K*9TA>6SnwhO{VTU^RPV3NmgKX2=L&=G2LvTfWtd$mCMXU|a z%2k*2UtCW0ew-Uav=f1Sd|drka!O2e-V^bj8h2`Wn54OpnA@W}%g4(g zmtRQeCLWF-^+4Wh0363L@xVBKvjB#-)i2HIkWM(rr%Wpp$I0IeQi-e^V7lL7kre-W zsPw0L5mdAO*f&0GgIr?$eDv5cbC3b-yTtVdDB{j|1&;UTEcUwp@WRA6Hph2HA`%bb zNcz7IO^lYHO350Z!o#_IzXJK>6@b1Y{n4yN%a`XN&8c^TQQ|np!(Ek|THfBn%!^oR z%WitlIXE~$L>%E4E?6+xoy%9OI1XbnAiD>`g9>16X|1;s<{FRQy|Z0=K5ip68<@Ow zvf1RmKnGQw&HIh#51n4DL0(ugZ$NZsB}i_!dIA zgaw$7gSK*Z=I`X6KM7q!U68ba)Uu4xNA9=;Zh9tybW@xuWQF9l5i<(a1M@&m9*?)- z{&`li*qT>wm1P}IA8kSheSTQ6Lg?LXg20lkERh6Kkn9eYNX2g?G6};<9|-AMP*7kQ z(*Pa{&EfY=_~|N0Rq7fW^>t8ATM!FJ08UeOW;OP!Hf{Pl7$n2x6T&Sm{fepfpx*i| z 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 zξ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 literal 0 HcmV?d00001 diff --git a/extras/logo/nodegui.svg b/extras/logo/nodegui.svg index 03842124a8..6f0676dde9 100644 --- a/extras/logo/nodegui.svg +++ b/extras/logo/nodegui.svg @@ -1,5 +1,4 @@ - + diff --git a/website/.gitignore b/website/.gitignore new file mode 100755 index 0000000000..1b34df5127 --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,20 @@ +# dependencies +/node_modules + +# production +/build + +# generated files +.docusaurus +.cache-loader + +# misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/website/README.md b/website/README.md new file mode 100755 index 0000000000..71505291a8 --- /dev/null +++ b/website/README.md @@ -0,0 +1,33 @@ +# Website + +This website is built using Docusaurus 2, a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +``` +$ GIT_USER= USE_SSH=1 yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/website/blog/2019-05-30-welcome.md b/website/blog/2019-05-30-welcome.md new file mode 100755 index 0000000000..141a6dee86 --- /dev/null +++ b/website/blog/2019-05-30-welcome.md @@ -0,0 +1,12 @@ +--- +id: welcome +title: Welcome +author: Atul R +authorTitle: Maintainer @NodeGui +authorURL: https://github.com/master-atul +authorImageURL: https://avatars2.githubusercontent.com/u/4029423?s=460&v=4 +authorTwitter: masteratul94 +tags: [nodegui, hello] +--- + +This is the new blog site for NodeGui. This will be updated soon. diff --git a/docs/api/Component.md b/website/docs/api/Component.md similarity index 89% rename from docs/api/Component.md rename to website/docs/api/Component.md index ffb30283e8..12540e5aec 100644 --- a/docs/api/Component.md +++ b/website/docs/api/Component.md @@ -1,4 +1,7 @@ -## Class: Component +--- +sidebar_label: Component +title: Component +--- > Abstract class that is root most base class for all widgets and layouts in the NodeGui World. @@ -10,14 +13,14 @@ To get a clearer picture you can take a look at the Component source code here: `src/lib/core/Component/index.ts` -### Static Methods +## Static Methods There are no public static methods for Component. -### Instance Properties +## Instance Properties There are no public instance properties for Component. -### Instance Methods +## Instance Methods There are no public instance methods for Component. diff --git a/docs/api/EventWidget.md b/website/docs/api/EventWidget.md similarity index 91% rename from docs/api/EventWidget.md rename to website/docs/api/EventWidget.md index 55df137f62..a711df8708 100644 --- a/docs/api/EventWidget.md +++ b/website/docs/api/EventWidget.md @@ -1,4 +1,7 @@ -## Class: EventWidget +--- +sidebar_label: EventWidget +title: EventWidget +--- > Abstract class that adds event handling support to all widgets. @@ -29,21 +32,21 @@ view.addEventListener(QWidgetEvents.MouseMove, () => { EventWidget will contain all methods and properties that are useful to handle events and signals of widgets in the NodeGui world. -### Static Methods +## Static Methods EventWidget can access all the static methods defined in [YogaWidget](api/YogaWidget.md) -### Instance Properties +## Instance Properties EventWidget can access all the instance properties defined in [YogaWidget](api/YogaWidget.md) -### Instance Methods +## Instance Methods EventWidget can access all the instance methods defined in [YogaWidget](api/YogaWidget.md) Additionally it also has the following instance methods: -#### `widget.addEventListener(eventType, callback)` +### `widget.addEventListener(eventType, callback)` Adds an event listener to the widget to listen to events that occur on a widget. @@ -51,7 +54,7 @@ Adds an event listener to the widget to listen to events that occur on a widget. - `callback` (payload?: NativeEvent | any) => void - A callback function to invoke when an event occurs. Usually you receive a nativeEvent or a string as argument. -#### `widget.removeEventListener(eventType, callback?)` +### `widget.removeEventListener(eventType, callback?)` Removes the specified event listener from the widget. diff --git a/docs/api/FlexLayout.md b/website/docs/api/FlexLayout.md similarity index 88% rename from docs/api/FlexLayout.md rename to website/docs/api/FlexLayout.md index 7f83463383..282fd68710 100644 --- a/docs/api/FlexLayout.md +++ b/website/docs/api/FlexLayout.md @@ -1,4 +1,7 @@ -## Class: FlexLayout +--- +sidebar_label: FlexLayout +title: FlexLayout +--- > Custom layout to help layout child widgets using flex layout. @@ -26,28 +29,28 @@ layout.addWidget(label); layout.addWidget(label2); ``` -### Static Methods +## Static Methods FlexLayout can access all the static methods defined in [NodeLayout](api/NodeLayout.md) -### Instance Properties +## Instance Properties FlexLayout can access all the instance properties defined in [NodeLayout](api/NodeLayout.md) -### Instance Methods +## Instance Methods FlexLayout can access all the instance methods defined in [NodeLayout](api/NodeLayout.md) Additionally it also has the following instance methods: -#### `layout.addWidget(childWidget, childFlexNode?)` +### `layout.addWidget(childWidget, childFlexNode?)` Adds the childWidget to the layout. It calls the native method of custom FlexLayout. - `childWidget` NodeWidget - child widget that needs to be added to the layout. - `childFlexNode` flexNode ref (_Optional_) - flexNode reference of the child widget. You can get this by calling `childWidget.getFlexNode()`. -#### `layout.insertChildBefore(childWidget, beforeChildWidget, childFlexNode?, beforeChildFlexNode?)` +### `layout.insertChildBefore(childWidget, beforeChildWidget, childFlexNode?, beforeChildFlexNode?)` Adds the childWidget before another already set childWidget in the layout. It calls the native method of custom FlexLayout. @@ -56,14 +59,14 @@ Adds the childWidget before another already set childWidget in the layout. It ca - `childFlexNode` flexNode ref (_Optional_) - flexNode reference of the child widget. You can get this by calling `childWidget.getFlexNode()`. - `beforeChildFlexNode` flexNode ref (_Optional_) - flexNode reference of the before child widget. You can get this by calling `beforeChildWidget.getFlexNode()`. -#### `layout.removeWidget(childWidget, childFlexNode?)` +### `layout.removeWidget(childWidget, childFlexNode?)` Removes the childWidget from the layout. It calls the native method of custom FlexLayout. - `childWidget` NodeWidget - child widget that needs to be added to the layout. - `childFlexNode` flexNode ref (_Optional_) - flexNode reference of the child widget. You can get this by calling `childWidget.getFlexNode()`. -#### `layout.setFlexNode(flexNode)` +### `layout.setFlexNode(flexNode)` A layout doesnt have its own flexNode. This method sets the flex Node to use for calculating position of the child widgets. Hence this should be always equal to the flex node of widget for which this layout is set. This is called internally by `widget.setLayout`. diff --git a/docs/api/NodeLayout.md b/website/docs/api/NodeLayout.md similarity index 89% rename from docs/api/NodeLayout.md rename to website/docs/api/NodeLayout.md index cd4f1982ce..4986e9c7d8 100644 --- a/docs/api/NodeLayout.md +++ b/website/docs/api/NodeLayout.md @@ -1,4 +1,7 @@ -## Class: NodeLayout +--- +sidebar_label: NodeLayout +title: NodeLayout +--- > Abstract class to add functionalities common to all Layout. @@ -31,41 +34,41 @@ addChildToLayout(new GridLayout(), new QWidget()); NodeLayout will list all methods and properties that are common to all layouts in the NodeGui world. -### Static Methods +## Static Methods NodeLayout can access all the static methods defined in [Component](api/Component.md) -### Instance Properties +## Instance Properties NodeLayout can access all the instance properties defined in [Component](api/Component.md) Additionally it also has the following instance properties: -#### `layout.type` +### `layout.type` This will return the string `layout` for all layouts. -### Instance Methods +## Instance Methods NodeLayout can access all the instance methods defined in [Component](api/Component.md) Additionally it also has the following instance methods: -#### `layout.addWidget(childWidget, ...args)` +### `layout.addWidget(childWidget, ...args)` This is an abstract method in NodeLayout class. All Layouts inheriting from NodeLayout should implement this method. - `childWidget` NodeWidget - Any widget in the NodeGui world. - `...args` any[] - Additional params as required by the layout. -#### `layout.activate()` +### `layout.activate()` Redoes the layout for parent widget of this layout if necessary. Returns true if the layout was redone. -#### `layout.invalidate()` +### `layout.invalidate()` Invalidates any cached information in this layout. -#### `layout.update()` +### `layout.update()` Updates the layout for parent widget of this layout. You should generally not need to call this because it is automatically called at the most appropriate times. diff --git a/docs/api/NodeWidget.md b/website/docs/api/NodeWidget.md similarity index 87% rename from docs/api/NodeWidget.md rename to website/docs/api/NodeWidget.md index e29571bb7a..a0c69891ea 100644 --- a/docs/api/NodeWidget.md +++ b/website/docs/api/NodeWidget.md @@ -1,4 +1,7 @@ -## Class: NodeWidget +--- +sidebar_label: NodeWidget +title: NodeWidget +--- > Abstract class to add functionalities common to all Widgets. @@ -30,127 +33,127 @@ showWidget(new QRadioButton()); NodeWidget will list all methods and properties that are common to all widgets in the NodeGui world. -### Static Methods +## Static Methods NodeWidget can access all the static methods defined in [EventWidget](api/EventWidget.md) -### Instance Properties +## Instance Properties NodeWidget can access all the instance properties defined in [EventWidget](api/EventWidget.md) Additionally it also has the following instance properties: -#### `widget.layout` +### `widget.layout` A `NodeLayout` representing current layout that is set on the widget. -#### `widget.type` +### `widget.type` This will return the string `widget` for all widgets. -### Instance Methods +## Instance Methods NodeWidget can access all the instance methods defined in [EventWidget](api/EventWidget.md) Additionally it also has the following instance methods: -#### `widget.show()` +### `widget.show()` Shows the widget and its children. It calls the native method [QWidget: show](https://doc.qt.io/qt-5/qwidget.html#show). -#### `widget.resize(width, height)` +### `widget.resize(width, height)` Resizes the widget. It calls the native method [QWidget: resize](https://doc.qt.io/qt-5/qwidget.html#resize-1). - `width` number - Pixels. - `height` number - Pixels. -#### `widget.close()` +### `widget.close()` Closes this widget. It calls the native method [QWidget: close](https://doc.qt.io/qt-5/qwidget.html#close). Returns true if the widget was closed; otherwise returns false. -#### `widget.setLayout(layout)` +### `widget.setLayout(layout)` Sets the layout manager for this widget to layout. It calls the native method [QWidget: setLayout](https://doc.qt.io/qt-5/qwidget.html#setLayout). - `layout` NodeLayout - Any layout that inherits from NodeLayout class. -#### `widget.setStyleSheet(styleSheet)` +### `widget.setStyleSheet(styleSheet)` Sets the property that holds the widget's style sheet. It calls the native method [QWidget: styleSheet](https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop). - `styleSheet` string - String which holds the widget's style sheet. Make sure you create this string using `StyleSheet.create()` -#### `widget.setCursor(cursor)` +### `widget.setCursor(cursor)` Sets the window mouse cursor. It calls the native method [QWidget: setCursor](https://doc.qt.io/qt-5/qwidget.html#cursor-prop). - `cursor` CursorShape - Specifies current cursor for the window [CursorShape is an enum from Qt](api/QtEnums.md) -#### `widget.setWindowIcon(icon)` +### `widget.setWindowIcon(icon)` Sets the window icon. It calls the native method [QWidget: setWindowIcon](https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop). - `icon` QIcon - Specifies icon for the window. -#### `widget.setWindowState(state)` +### `widget.setWindowState(state)` Sets the window state. It calls the native method [QWidget: setWindowState](https://doc.qt.io/qt-5/qwidget.html#setWindowState). - `state` WindowState - Specifies current state for the window [WindowState is an enum from Qt](api/QtEnums.md) -#### `widget.setWindowTitle(title)` +### `widget.setWindowTitle(title)` Sets the window title property. It calls the native method [QWidget: setWindowTitle](https://doc.qt.io/qt-5/qwidget.html#windowTitle-prop). - `title` string - String which holds the windows title. -#### `widget.styleSheet()` +### `widget.styleSheet()` Gets the property that holds the widget's style sheet. It calls the native method [QWidget: styleSheet](https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop). -#### `widget.hide()` +### `widget.hide()` Hides the widget and its children. It calls the native method [QWidget: hide](https://doc.qt.io/qt-5/qwidget.html#hide). -#### `widget.move(x, y)` +### `widget.move(x, y)` Sets the screen position of the widget. It calls the native method [QWidget: move](https://doc.qt.io/qt-5/qwidget.html#move-1). - `x` number - Pixels. - `y` number - Pixels. -#### `widget.setObjectName(objectName)` +### `widget.setObjectName(objectName)` Sets the object name of the widget in Qt. It calls the native method [QObject: setObjectName](https://doc.qt.io/qt-5/qobject.html#objectName-prop). Object name can be analogous to `id` of an element in the web world. Using the objectName of the widget one can reference it in the Qt's stylesheet much like what we do with id in the web world. - `objectName` string - String which holds the widget's object name. -#### `widget.objectName()` +### `widget.objectName()` Gets the property that holds the widget's object name. It calls the native method [QObject: setObjectName](https://doc.qt.io/qt-5/qobject.html#objectName-prop). -#### `widget.setMouseTracking(isMouseTracked)` +### `widget.setMouseTracking(isMouseTracked)` Sets the property that tells whether mouseTracking is enabled for the widget. It calls the native method [QWidget: mouseTracking](https://doc.qt.io/qt-5/qwidget.html#mouseTracking-prop). - `isMouseTracked` boolean - Set it to true to enable mouse tracking. -#### `widget.setEnabled(enabled)` +### `widget.setEnabled(enabled)` Sets the property that tells whether the widget is enabled. It calls the native method [QWidget: enabled](https://doc.qt.io/qt-5/qwidget.html#enabled-prop). In general an enabled widget handles keyboard and mouse events; a disabled widget does not. - `enabled` boolean - Set it to true to enable the widget. -#### `widget.setFixedSize(width, height)` +### `widget.setFixedSize(width, height)` Sets both the minimum and maximum sizes of the widget. It calls the native method [QWidget: setFixedSize](https://doc.qt.io/qt-5/qwidget.html#setFixedSize). - `width` number - Pixels. - `height` number - Pixels. -#### `widget.setGeometry(x, y, width, height)` +### `widget.setGeometry(x, y, width, height)` Sets the screen position as well as size of the widget. It calls the native method [QWidget: setGeometry](https://doc.qt.io/qt-5/qwidget.html#setGeometry-1). @@ -159,48 +162,48 @@ Sets the screen position as well as size of the widget. It calls the native meth - `width` number - Pixels. - `height` number - Pixels. -#### `widget.setMaximumSize(width, height)` +### `widget.setMaximumSize(width, height)` Sets the maximum size of the widget. It calls the native method [QWidget: setMaximumSize](https://doc.qt.io/qt-5/qwidget.html#setMaximumSize-1). - `width` number - Pixels. - `height` number - Pixels. -#### `widget.setMinimumSize(width, height)` +### `widget.setMinimumSize(width, height)` Sets the minimum size of the widget. It calls the native method [QWidget: setMinimumSize](https://doc.qt.io/qt-5/qwidget.html#setMinimumSize-1). - `width` number - Pixels. - `height` number - Pixels. -#### `widget.repaint()` +### `widget.repaint()` Repaints the widget. It calls the native method [QWidget: repaint](https://doc.qt.io/qt-5/qwidget.html#repaint). -#### `widget.update()` +### `widget.update()` Updates the widget. It calls the native method [QWidget: update](https://doc.qt.io/qt-5/qwidget.html#update). -#### `widget.pos()` +### `widget.pos()` returns the current widget position. It calls the native method [QWidget: pos](https://doc.qt.io/qt-5/qwidget.html#pos-prop). The returned size object contains x and y coordinates in pixels. -#### `widget.size()` +### `widget.size()` returns the current widget size. It calls the native method [QWidget: size](https://doc.qt.io/qt-5/qwidget.html#size-prop). The returned size object contains width and height in pixels. -#### `widget.updateGeometry()` +### `widget.updateGeometry()` Notifies the layout system that this widget has changed and may need to change geometry. -#### `widget.setAttribute(attributeName, switchOn)` +### `widget.setAttribute(attributeName, switchOn)` Sets the attribute attribute on this widget if on is true; otherwise clears the attribute. It calls the native method [QWidget: setAttribute](https://doc.qt.io/qt-5/qwidget.html#setAttribute). - `attributeName` WidgetAttribute - Enum from WidgetAttribute. - `switchOn` - set it to true if you want to enable an attribute. -#### `widget.testAttribute(attributeName)` +### `widget.testAttribute(attributeName)` Returns true if attribute attribute is set on this widget; otherwise returns false. It calls the native method [QWidget: testAttribute](https://doc.qt.io/qt-5/qwidget.html#testAttribute). diff --git a/docs/api/QAbstractScrollArea.md b/website/docs/api/QAbstractScrollArea.md similarity index 88% rename from docs/api/QAbstractScrollArea.md rename to website/docs/api/QAbstractScrollArea.md index 3ad273b3d7..4092f8e7e3 100644 --- a/docs/api/QAbstractScrollArea.md +++ b/website/docs/api/QAbstractScrollArea.md @@ -1,4 +1,7 @@ -## Class: QAbstractScrollArea +--- +sidebar_label: QAbstractScrollArea +title: QAbstractScrollArea +--- > Abstract class to add functionalities common to all scrollarea based widgets. @@ -10,26 +13,26 @@ QAbstractScrollArea will list all methods and properties that are common to all scrollable widgets in the NodeGui world. -### Static Methods +## Static Methods QAbstractScrollArea can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QAbstractScrollArea can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QAbstractScrollArea can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `widget.setViewport(widget)` +### `widget.setViewport(widget)` Sets the viewport to be the given widget. It calls the native method [QAbstractScrollArea: setViewport](https://doc.qt.io/qt-5/qabstractscrollarea.html#setViewport). - `widget` NodeWidget. -#### `widget.viewport()` +### `widget.viewport()` Returns the viewport widget (NodeWidget). It calls the native method [QAbstractScrollArea: viewport](https://doc.qt.io/qt-5/qabstractscrollarea.html#viewport). diff --git a/docs/api/QAbstractSlider.md b/website/docs/api/QAbstractSlider.md similarity index 87% rename from docs/api/QAbstractSlider.md rename to website/docs/api/QAbstractSlider.md index d51524fb0a..515318ec12 100644 --- a/docs/api/QAbstractSlider.md +++ b/website/docs/api/QAbstractSlider.md @@ -1,4 +1,7 @@ -## Class: QAbstractSlider +--- +sidebar_label: QAbstractSlider +title: QAbstractSlider +--- > Abstract class to add functionalities common to all slider based widgets. @@ -10,58 +13,58 @@ QAbstractSlider will list all methods and properties that are common to all slider widgets in the NodeGui world. -### Static Methods +## Static Methods QAbstractSlider can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QAbstractSlider can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QAbstractSlider can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `widget.setSingleStep(step)` +### `widget.setSingleStep(step)` Sets the step value for user arrow key slider interaction. It calls the native method [QAbstractSlider: setSingleStep](https://doc.qt.io/qt-5/qabstractslider.html#singleStep-prop). - `step` number - Specified single step value. -#### `widget.setMaximum(maximum)` +### `widget.setMaximum(maximum)` Sets the maximum value for slider. It calls the native method [QAbstractSlider: setMaximum](https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop). - `maximum` number - Specified maximum slider value. -#### `widget.setMinimum(minimum)` +### `widget.setMinimum(minimum)` Sets the minimum value for slider. It calls the native method [QAbstractSlider: setMinimum](https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop). - `minimum` number - Specified minimum slider value. -#### `widget.setValue(value)` +### `widget.setValue(value)` Sets the current value for slider. It calls the native method [QAbstractSlider: setValue](https://doc.qt.io/qt-5/qabstractslider.html#value-prop). - `value` number - Specified current slider value. -#### `widget.setOrientation(orientation)` +### `widget.setOrientation(orientation)` Sets the current orientation for slider. It calls the native method [QAbstractSlider: setOrientation](https://doc.qt.io/qt-5/qabstractslider.html#orientation-prop). - `orientation` Orientation - Specifies visual orientation of the slider. [Orientation is an enum from Qt](api/QtEnums.md) -#### `slider.maximum()` +### `slider.maximum()` Returns the maximum value (Number) of the slider. It calls the native method [QAbstractSlider: maximum](https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop). -#### `slider.minimum()` +### `slider.minimum()` Returns the minimum value (Number) of the slider. It calls the native method [QAbstractSlider: minimum](https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop). -#### `slider.value()` +### `slider.value()` -Returns the current value (Number) of the slider. It calls the native method [QAbstractSlider: value](https://doc.qt.io/qt-5/qabstractslider.html#value-prop). \ No newline at end of file +Returns the current value (Number) of the slider. It calls the native method [QAbstractSlider: value](https://doc.qt.io/qt-5/qabstractslider.html#value-prop). diff --git a/docs/api/QApplication.md b/website/docs/api/QApplication.md similarity index 89% rename from docs/api/QApplication.md rename to website/docs/api/QApplication.md index 52cb531407..d79c76c9ec 100644 --- a/docs/api/QApplication.md +++ b/website/docs/api/QApplication.md @@ -1,4 +1,7 @@ -## Class: QApplication +--- +sidebar_label: QApplication +title: QApplication +--- > QApplication is the root object for the entire application. It manages app level settings. @@ -10,48 +13,48 @@ The QApplication class manages the GUI application's control flow and main setti ### Example -```javascript +```js const { QApplication } = require("@nodegui/nodegui"); const qApp = QApplication.instance(); qApp.quit(); ``` -### Static Methods +## Static Methods QApplication can access all the static methods defined in [Component](api/Component.md). Additionally it also has the following static methods. -#### `QApplication.instance()` +### `QApplication.instance()` Returns the already initialised QApplication instance. It calls the native method [QApplication: instance](https://doc.qt.io/qt-5/qcoreapplication.html#instance). -#### `QApplication.clipboard()` +### `QApplication.clipboard()` Returns the object for interacting with the clipboard. It calls the native method [QApplication: clipboard](https://doc.qt.io/qt-5/qguiapplication.html#clipboard). See QClipboard. -### Instance Properties +## Instance Properties QApplication can access all the instance properties defined in [Component](api/Component.md) -### Instance Methods +## Instance Methods QApplication can access all the instance methods defined in [Component](api/Component.md). Additionally it also has the following instance methods: -#### `qApp.quit()` +### `qApp.quit()` Quits the entire app. It calls the native method [QApplication: quit](https://doc.qt.io/qt-5/qcoreapplication.html#quit). -#### `qApp.exit(returnCode)` +### `qApp.exit(returnCode)` Tells the application to exit with a return code. It calls the native method [QApplication: exit](https://doc.qt.io/qt-5/qcoreapplication.html#exit). - `returnCode` number - The exit code while quitting the app. -#### `qApp.processEvents()` +### `qApp.processEvents()` Processes all pending events for the calling thread . It calls the native method [QApplication: processEvents](https://doc.qt.io/qt-5/qcoreapplication.html#processEvents). -#### `qApp.exec()` +### `qApp.exec()` > We will never call this method in NodeGui, since Qode will execute this function for us. It exists for experiments only. diff --git a/docs/api/QCheckBox.md b/website/docs/api/QCheckBox.md similarity index 87% rename from docs/api/QCheckBox.md rename to website/docs/api/QCheckBox.md index 2d5de98f73..488a1a5a29 100644 --- a/docs/api/QCheckBox.md +++ b/website/docs/api/QCheckBox.md @@ -1,4 +1,7 @@ -## Class: QCheckBox +--- +sidebar_label: QCheckBox +title: QCheckBox +--- > Create and control checkbox. @@ -21,31 +24,31 @@ checkbox.setText("Hello"); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QCheckBox can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QCheckBox can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QCheckBox can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `checkbox.setText(text)` +### `checkbox.setText(text)` Sets the given text to the checkbox. - `text` string -#### `checkbox.isChecked()` +### `checkbox.isChecked()` returns whether the checkbox is checked or not. It calls the native method [QAbstractButton: isChecked](https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop). -#### `checkbox.setChecked(check)` +### `checkbox.setChecked(check)` This property holds whether the button is checked. It calls the native method [QAbstractButton: setChecked](https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop). diff --git a/docs/api/QClipboard.md b/website/docs/api/QClipboard.md similarity index 94% rename from docs/api/QClipboard.md rename to website/docs/api/QClipboard.md index 439604b0ad..863f4538db 100644 --- a/docs/api/QClipboard.md +++ b/website/docs/api/QClipboard.md @@ -1,4 +1,7 @@ -## Class: QClipboard +--- +sidebar_label: QClipboard +title: QClipboard +--- > The QClipboard class provides access to the window system clipboard. @@ -19,15 +22,15 @@ const clipboard = QApplication.clipboard(); const text = clipboard.text(QClipboardMode.Clipboard); ``` -### Static Methods +## Static Methods QClipboard can access all the static methods defined in [Component](api/Component.md) -### Instance Properties +## Instance Properties QClipboard can access all the instance properties defined in [Component](api/Component.md) -### Instance Methods +## Instance Methods QClipboard can access all the instance methods defined in [Component](api/Component.md). Additionally it has: diff --git a/docs/api/QCursor.md b/website/docs/api/QCursor.md similarity index 90% rename from docs/api/QCursor.md rename to website/docs/api/QCursor.md index c862ea7250..ff247ad398 100644 --- a/docs/api/QCursor.md +++ b/website/docs/api/QCursor.md @@ -1,4 +1,7 @@ -## Class: QCursor +--- +sidebar_label: QCursor +title: QCursor +--- > The QCursor class provides scalable icons in different modes and states. diff --git a/docs/api/QDial.md b/website/docs/api/QDial.md similarity index 87% rename from docs/api/QDial.md rename to website/docs/api/QDial.md index cbc2698f40..018529c746 100644 --- a/docs/api/QDial.md +++ b/website/docs/api/QDial.md @@ -1,4 +1,7 @@ -## Class: QDial +--- +sidebar_label: QDial +title: QDial +--- > Create and control dial slider widgets. @@ -20,48 +23,48 @@ const dial = new QDial(); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QDial can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QDial can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QDial can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: -#### `dial.setNotchesVisible(visible)` +### `dial.setNotchesVisible(visible)` Sets the visibility of notches drawn around the dial. It calls the native method [QDial: setNotchesVisible](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). - `visible` boolean - Set the value as current notch visibility. -#### `dial.setWrapping(on)` +### `dial.setWrapping(on)` Sets the ability to wrap arrow around the dial instead of limiting it to upper part of the dial. It calls the native method [QDial: setWrapping](https://doc.qt.io/qt-5/qdial.html#wrapping-prop). - `on` boolean - Set the value as current wrapping setting. -#### `dial.setNotchTarget(target)` +### `dial.setNotchTarget(target)` Sets the number of pixels between dial notches. It calls the native method [QDial: setNotchTarget](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). - `target` number - Specifies number of pixels between notches. -#### `dial.notchTarget()` +### `dial.notchTarget()` Returns the current number of pixels between dial notches. It calls the native method [QDial: notchTarget](https://doc.qt.io/qt-5/qdial.html#notchTarget-prop). -#### `dial.notchesVisible()` +### `dial.notchesVisible()` Returns the visibility status (Boolean) of dial notches. It calls the native method [QDial: notchesVisible](https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop). -#### `dial.notchesVisible()` +### `dial.notchesVisible()` Returns the visibility status (Boolean) of dial notches. It calls the native method [QDial: notchesVisible](https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop). -#### `dial.wrapping()` +### `dial.wrapping()` -Returns the current wrapping (Boolean) state of the dial. It calls the native method [QDial: wrapping](https://doc.qt.io/qt-5/qdial.html#wrapping-prop). \ No newline at end of file +Returns the current wrapping (Boolean) state of the dial. It calls the native method [QDial: wrapping](https://doc.qt.io/qt-5/qdial.html#wrapping-prop). diff --git a/website/docs/api/QGridLayout.md b/website/docs/api/QGridLayout.md new file mode 100644 index 0000000000..6dc3b7f8c6 --- /dev/null +++ b/website/docs/api/QGridLayout.md @@ -0,0 +1,54 @@ +--- +sidebar_label: QGridLayout +title: QGridLayout +--- + +> The QGridLayout class lays out widgets in a grid. + +**This class is a JS wrapper around Qt's [QGridLayout](https://doc.qt.io/qt-5/qgridlayout.html)** + +**QGridLayout inherits from [NodeLayout](api/NodeLayout.md)** + +### Example + +```javascript +const { QGridLayout, QWidget, QLabel } = require("@nodegui/nodegui"); + +const view = new QWidget(); +const layout = new QGridLayout(); +view.setLayout(layout); + +const label = new QLabel(); +label.setText("label1"); +const label2 = new QLabel(); +label2.setText("label2"); + +layout.addWidget(label); +layout.addWidget(label2); +``` + +## Static Methods + +QGridLayout can access all the static methods defined in [NodeLayout](api/NodeLayout.md) + +## Instance Properties + +QGridLayout can access all the instance properties defined in [NodeLayout](api/NodeLayout.md) + +## Instance Methods + +QGridLayout can access all the instance methods defined in [NodeLayout](api/NodeLayout.md) + +Additionally it also has the following instance methods: + +### `layout.addWidget(childWidget)` + +Adds the childWidget to the layout. It calls the native method QGridLayout [QGridLayout: addWidget](https://doc.qt.io/qt-5/qwidget.html#show). + +- `childWidget` NodeWidget - child widget that needs to be added to the layout. + +### `layout.removeWidget(childWidget)` + +Removes the childWidget from the layout. It calls the native method of custom QGridLayout. [QGridLayout: removeWidget](https://doc.qt.io/qt-5/qlayout.html#removeWidget). + +- `childWidget` NodeWidget - child widget that needs to be added to the layout. diff --git a/docs/api/QIcon.md b/website/docs/api/QIcon.md similarity index 87% rename from docs/api/QIcon.md rename to website/docs/api/QIcon.md index 9720e3801c..a412653947 100644 --- a/docs/api/QIcon.md +++ b/website/docs/api/QIcon.md @@ -1,4 +1,7 @@ -## Class: QIcon +--- +sidebar_label: QIcon +title: QIcon +--- > The QIcon class provides scalable icons in different modes and states. @@ -19,20 +22,20 @@ const icon = new QIcon(imageUrl); - `imageUrl` string (_optional_). Absolute path of the image that needs to be loaded in the memory. -### Static Methods +## Static Methods QIcon can access all the static methods defined in [Component](api/Component.md) -### Instance Properties +## Instance Properties QIcon can access all the instance properties defined in [Component](api/Component.md) -### Instance Methods +## Instance Methods QIcon can access all the instance methods defined in [Component](api/Component.md) Additionally it also has the following instance methods: -#### `icon.pixmap(width, height, mode?, state?)` (v0.1.10 & up) +### `icon.pixmap(width, height, mode?, state?)` (v0.1.10 & up) Returns a pixmap with the requested size, mode, and state, generating one if necessary. The pixmap might be smaller than requested, but never larger. . It calls the native method [QIcon: pixmap](https://doc.qt.io/qt-5/qicon.html#pixmap-3). diff --git a/docs/api/QLabel.md b/website/docs/api/QLabel.md similarity index 85% rename from docs/api/QLabel.md rename to website/docs/api/QLabel.md index 5c9d15c3e0..892d958e25 100644 --- a/docs/api/QLabel.md +++ b/website/docs/api/QLabel.md @@ -1,4 +1,7 @@ -## Class: QLabel +--- +sidebar_label: QLabel +title: QLabel +--- > Create and control text. @@ -21,37 +24,37 @@ label.setText("Hello"); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QLabel can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QLabel can access all the instance properties defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance properties: -#### `label.pixmap` +### `label.pixmap` The pixmap currently set on this label. -#### `label.text` +### `label.text` the current text set on the label. -### Instance Methods +## Instance Methods QLabel can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: -#### `label.setText(text)` +### `label.setText(text)` Sets the given text to the label. - `text` string -#### `label.setWordWrap(on)` +### `label.setWordWrap(on)` - `on` boolean - If true it sets wordwrap on the label -#### `label.setPixmap(pixMap)` +### `label.setPixmap(pixMap)` Images in the form of a pixmap can be set as the label content diff --git a/docs/api/QLineEdit.md b/website/docs/api/QLineEdit.md similarity index 82% rename from docs/api/QLineEdit.md rename to website/docs/api/QLineEdit.md index 654f1864d1..9b57f34653 100644 --- a/docs/api/QLineEdit.md +++ b/website/docs/api/QLineEdit.md @@ -1,4 +1,7 @@ -## Class: QLineEdit +--- +sidebar_label: QLineEdit +title: QLineEdit +--- > Create and control editable text field. @@ -20,44 +23,44 @@ const lineEdit = new QLineEdit(); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QLineEdit can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QLineEdit can access all the instance properties defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance properties: -#### `lineEdit.placeholderText` +### `lineEdit.placeholderText` The placeholder text set on the lineEdit. -### Instance Methods +## Instance Methods QLineEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: -#### `lineEdit.setText(text)` +### `lineEdit.setText(text)` Sets the given text to the lineEdit. - `text` string -#### `lineEdit.setPlaceholderText(text)` +### `lineEdit.setPlaceholderText(text)` Sets the given text to the lineEdit's placeholder. - `text` string -#### `lineEdit.text()` +### `lineEdit.text()` Returns the currently set text from native lineEdit widget. -#### `lineEdit.setReadOnly(isReadOnly)` +### `lineEdit.setReadOnly(isReadOnly)` Sets the lineEdit to be read only. lineEdit property holds whether the line edit is read only. - `isReadOnly` boolean -#### `lineEdit.clear()` +### `lineEdit.clear()` Clears the lineEdit. diff --git a/docs/api/QMainWindow.md b/website/docs/api/QMainWindow.md similarity index 89% rename from docs/api/QMainWindow.md rename to website/docs/api/QMainWindow.md index c7b25f5a0b..6c9b2a682e 100644 --- a/docs/api/QMainWindow.md +++ b/website/docs/api/QMainWindow.md @@ -1,4 +1,7 @@ -## Class: QMainWindow +--- +sidebar_label: QMainWindow +title: QMainWindow +--- > Create and control windows. @@ -26,31 +29,31 @@ global.win = win; // prevent's gc of win QMainWindow needs to have a central widget set before other widgets can be added as a children/nested children. Once a central widget is set you can add children/layout to the central widget. -### Static Methods +## Static Methods QMainWindow can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QMainWindow can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance properties: -#### `win.layout` +### `win.layout` A `NodeLayout` representing current layout that is set on the window. If a centralWidget is set then the layout of central widget is returned. -#### `win.centralWidget` +### `win.centralWidget` A `NodeWidget` representing currently set central widget on the window. -### Instance Methods +## Instance Methods QMainWindow can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `win.setCentralWidget(widget)` +### `win.setCentralWidget(widget)` Sets the given widget to be the main window's central widget. diff --git a/docs/api/QPixmap.md b/website/docs/api/QPixmap.md similarity index 86% rename from docs/api/QPixmap.md rename to website/docs/api/QPixmap.md index bae202f52f..2760f962c5 100644 --- a/docs/api/QPixmap.md +++ b/website/docs/api/QPixmap.md @@ -1,4 +1,7 @@ -## Class: QPixmap +--- +sidebar_label: QPixmap +title: QPixmap +--- > The QPixmap class helps hold an image in the form of off-screen image representation. @@ -21,21 +24,21 @@ const pixMap = new QPixmap(imageUrl); - `imageUrl` string (_optional_). Absolute path of the image that needs to be loaded in the memory. -### Static Methods +## Static Methods QPixmap can access all the static methods defined in [Component](api/Component.md) -### Instance Properties +## Instance Properties QPixmap can access all the instance properties defined in [Component](api/Component.md) -### Instance Methods +## Instance Methods QPixmap can access all the instance methods defined in [Component](api/Component.md) Additionally it also has the following instance methods: -#### `pixMap.load(imageUrl)` +### `pixMap.load(imageUrl)` loads an image from the url into memory as a Pixmap. returns true if load was successful otherwise returns false. @@ -46,13 +49,11 @@ returns true if load was successful otherwise returns false. Saves the pixmap to the file with the given fileName using the specified image file format and quality factor. Returns `true` if successful; otherwise returns false. -The quality factor must be in the range `[0,100]` or -1. Specify 0 to obtain small compressed files, 100 for large uncompressed files, and -1 to use the default settings. - If format is 0, an image format will be chosen from fileName's suffix. See also [Reading and Writing Image Files.](https://doc.qt.io/qt-5/qpixmap.html#reading-and-writing-image-files). -- `fileName` string. +- `fileName` string. - `format` string. (_optional_). #### `pixMap.scaled(width, height, aspectRatioMode?)` diff --git a/docs/api/QPlainTextEdit.md b/website/docs/api/QPlainTextEdit.md similarity index 81% rename from docs/api/QPlainTextEdit.md rename to website/docs/api/QPlainTextEdit.md index 688bc894aa..997e157001 100644 --- a/docs/api/QPlainTextEdit.md +++ b/website/docs/api/QPlainTextEdit.md @@ -1,4 +1,7 @@ -## Class: QPlainTextEdit +--- +sidebar_label: QPlainTextEdit +title: QPlainTextEdit +--- > Used to edit and display plain text. @@ -20,62 +23,62 @@ const plainTextEdit = new QPlainTextEdit(); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QPlainTextEdit can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QPlainTextEdit can access all the instance properties defined in [NodeWidget](api/NodeWidget.md). -#### `plainTextEdit.placeholderText` +### `plainTextEdit.placeholderText` The placeholder text set on the plainTextEdit. -### Instance Methods +## Instance Methods QPlainTextEdit can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). -#### `plainTextEdit.setPlainText(text)` +### `plainTextEdit.setPlainText(text)` Sets the given text to the plainTextEdit. It calls the native method [QPlainTextEdit: setPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText). - `text` string -#### `plainTextEdit.setPlaceholderText(text)` +### `plainTextEdit.setPlaceholderText(text)` Sets the given text to the plainTextEdit's placeholder. - `text` string -#### `plainTextEdit.toPlainText()` +### `plainTextEdit.toPlainText()` Returns the text of the text edit as plain text. [QPlainTextEdit: toPlainText](https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText). -#### `plainTextEdit.setReadOnly(isReadOnly)` +### `plainTextEdit.setReadOnly(isReadOnly)` Sets the plainTextEdit to be read only. [QPlainTextEdit: isReadOnly](https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop). -#### `plainTextEdit.clear()` +### `plainTextEdit.clear()` Deletes all the text in the text edit.[QPlainTextEdit: clear](https://doc.qt.io/qt-5/qplaintextedit.html#clear). -#### `plainTextEdit.setWordWrapMode(mode)` +### `plainTextEdit.setWordWrapMode(mode)` This property holds the mode QPlainTextEdit will use when wrapping text by words.[QPlainTextEdit: setWordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). - mode: QTextOptionWrapMode -#### `plainTextEdit.wordWrapMode()` +### `plainTextEdit.wordWrapMode()` returns word wrap mode. [QPlainTextEdit: wordWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop). -#### `plainTextEdit.setLineWrapMode(mode)` +### `plainTextEdit.setLineWrapMode(mode)` This property holds the line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop). - mode: LineWrapMode -#### `plainTextEdit.lineWrapMode()` +### `plainTextEdit.lineWrapMode()` returns line wrap mode. [QPlainTextEdit: setLineWrapMode](https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop). diff --git a/docs/api/QProgressBar.md b/website/docs/api/QProgressBar.md similarity index 87% rename from docs/api/QProgressBar.md rename to website/docs/api/QProgressBar.md index c265fb6b24..36244e6d1e 100644 --- a/docs/api/QProgressBar.md +++ b/website/docs/api/QProgressBar.md @@ -1,4 +1,7 @@ -## Class: QProgressBar +--- +sidebar_label: QProgressBar +title: QProgressBar +--- > Create and control progress bar widgets. @@ -20,42 +23,42 @@ const progressBar = new QProgressBar(); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QProgressBar can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QProgressBar can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QProgressBar can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: -#### `progressBar.setValue(value)` +### `progressBar.setValue(value)` Sets the current value of the progressBar. It calls the native method [QProgressBar: setValue](https://doc.qt.io/qt-5/qprogressbar.html#value-prop). - `value` number - Set the value as current value -#### `progressBar.setMaximum(max)` +### `progressBar.setMaximum(max)` Sets the max value of the progressBar. It calls the native method [QProgressBar: setMaximum](https://doc.qt.io/qt-5/qprogressbar.html#maximum-prop). - `max` number - Set the value as max value of the progress bar. -#### `progressBar.setMinimum(min)` +### `progressBar.setMinimum(min)` Sets the min value of the progressBar. It calls the native method [QProgressBar: setMinimum](https://doc.qt.io/qt-5/qprogressbar.html#minimum-prop). - `min` number - Set the value as min value of the progress bar. -#### `progressBar.setOrientation(orientation)` +### `progressBar.setOrientation(orientation)` Sets the orientation of the progressBar. It calls the native method [QProgressBar: setOrientation](https://doc.qt.io/qt-5/qprogressbar.html#orientation-prop). - `orientation` Orientation - Specifies visual orientation of the progress bar. [Orientation is an enum from Qt](api/QtEnums.md) -#### `progressBar.value()` +### `progressBar.value()` Returns the current value (Number) of the progressBar. It calls the native method [QProgressBar: value](https://doc.qt.io/qt-5/qprogressbar.html#value-prop). diff --git a/docs/api/QPushButton.md b/website/docs/api/QPushButton.md similarity index 83% rename from docs/api/QPushButton.md rename to website/docs/api/QPushButton.md index 0674e7c3be..e39159fdad 100644 --- a/docs/api/QPushButton.md +++ b/website/docs/api/QPushButton.md @@ -1,4 +1,7 @@ -## Class: QPushButton +--- +sidebar_label: QPushButton +title: QPushButton +--- > Create and control buttons. @@ -21,34 +24,34 @@ button.setText("Hello"); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QPushButton can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QPushButton can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QPushButton can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `button.setText(text)` +### `button.setText(text)` Sets the given text to the button. - `text` string -#### `button.setFlat(isFlat)` +### `button.setFlat(isFlat)` Sets whether the button border is raised. - `isFlat` boolean -#### `button.setIcon(icon)` +### `button.setIcon(icon)` Sets an icon in the button. -- `icon` QIcon \ No newline at end of file +- `icon` QIcon diff --git a/docs/api/QRadioButton.md b/website/docs/api/QRadioButton.md similarity index 87% rename from docs/api/QRadioButton.md rename to website/docs/api/QRadioButton.md index b2bcd31f31..42153393f1 100644 --- a/docs/api/QRadioButton.md +++ b/website/docs/api/QRadioButton.md @@ -1,4 +1,7 @@ -## Class: QRadioButton +--- +sidebar_label: QRadioButton +title: QRadioButton +--- > Create and control radio button. @@ -21,21 +24,21 @@ radioButton.setText("Hello"); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QRadioButton can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QRadioButton can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QRadioButton can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) Additionally it also has the following instance methods: -#### `radioButton.setText(text)` +### `radioButton.setText(text)` Sets the given text to the radioButton. diff --git a/docs/api/QScrollArea.md b/website/docs/api/QScrollArea.md similarity index 90% rename from docs/api/QScrollArea.md rename to website/docs/api/QScrollArea.md index 0b682ce1ab..1e50368331 100644 --- a/docs/api/QScrollArea.md +++ b/website/docs/api/QScrollArea.md @@ -1,4 +1,7 @@ -## Class: QScrollArea +--- +sidebar_label: QScrollArea +title: QScrollArea +--- > A `QScrollArea` provides a scrolling view onto another widget. @@ -27,19 +30,19 @@ scrollArea.setWidget(imageLabel); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QScrollArea can access all the static methods defined in [QAbstractScrollArea](api/QAbstractScrollArea.md) -### Instance Properties +## Instance Properties QScrollArea can access all the instance properties defined in [QAbstractScrollArea](api/QAbstractScrollArea.md) -### Instance Methods +## Instance Methods QScrollArea can access all the instance methods defined in [QAbstractScrollArea](api/QAbstractScrollArea.md). Additionally it also has the following instance methods: -#### `scrollArea.setWidget(widget)` +### `scrollArea.setWidget(widget)` Sets the scroll area's widget. It calls the native method [QScrollArea: setWidget](https://doc.qt.io/qt-5/qscrollarea.html#setWidget). diff --git a/docs/api/QSpinBox.md b/website/docs/api/QSpinBox.md similarity index 88% rename from docs/api/QSpinBox.md rename to website/docs/api/QSpinBox.md index 73961e9c0c..c908bde47e 100644 --- a/docs/api/QSpinBox.md +++ b/website/docs/api/QSpinBox.md @@ -1,4 +1,7 @@ -## Class: QSpinBox +--- +sidebar_label: QSpinBox +title: QSpinBox +--- > Create and control spin box widgets. @@ -20,61 +23,60 @@ const spinBox = new QSpinBox(); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QSpinBox can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QSpinBox can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QSpinBox can access all the instance methods defined in [NodeWidget](api/NodeWidget.md). Additionally it also has the following instance methods: -#### `spinBox.setValue(val)` +### `spinBox.setValue(val)` Sets the current value of the spinBox. It calls the native method [QSpinBox: setValue](https://doc.qt.io/qt-5/qspinbox.html#value-prop). - `val` number - Set the value as current value -#### `spinBox.setRange(minimum, maximum)` +### `spinBox.setRange(minimum, maximum)` Sets the min/max value of the spinBox. It calls the native method [QSpinBox: setRange](https://doc.qt.io/qt-5/qspinbox.html#setRange). - `max` number - Set the value as max value of the progress bar. -#### `spinBox.setPrefix(prefix)` +### `spinBox.setPrefix(prefix)` Sets the prefix of the spinBox. It calls the native method [QSpinBox: setPrefix](https://doc.qt.io/qt-5/qspinbox.html#prefix-prop). - `prefix` string - Specifies prefix content shows before the spinBox value. [Prefix is an enum from Qt](api/QtEnums.md) -#### `spinBox.setSuffix(suffix)` +### `spinBox.setSuffix(suffix)` Sets the suffix of the spinBox. It calls the native method [QSpinBox: setSuffix](https://doc.qt.io/qt-5/qspinbox.html#suffix-prop). - `suffix` string - Specifies suffix content shows after the spinBox value. [Suffix is an enum from Qt](api/QtEnums.md) -#### `spinBox.setSingleStep(val)` +### `spinBox.setSingleStep(val)` Sets the single step value of the spinBox. It calls the native method [QSpinBox: setSingleStep](https://doc.qt.io/qt-5/qspinbox.html#singleStep-prop). - `val` number - Specifies amount value changes with each step. [Suffix is an enum from Qt](api/QtEnums.md) - -#### `spinBox.cleanText()` +### `spinBox.cleanText()` Returns the text content (String) of the spinBox excluding any prefix, suffix, or leading or trailing whitespace. It calls the native method [QSpinBox: value](https://doc.qt.io/qt-5/qspinbox.html#minimum-prop). -#### `spinBox.minimum()` +### `spinBox.minimum()` Returns the minimum value (Number) of the spinBox. It calls the native method [QSpinBox: value](https://doc.qt.io/qt-5/qspinbox.html#minimum-prop). -#### `spinBox.maximum()` +### `spinBox.maximum()` Returns the maximum value (Number) of the spinBox. It calls the native method [QSpinBox: value](https://doc.qt.io/qt-5/qspinbox.html#maximum-prop). -#### `spinBox.value()` +### `spinBox.value()` Returns the current value (Number) of the spinBox. It calls the native method [QSpinBox: value](https://doc.qt.io/qt-5/qspinbox.html#value-prop). diff --git a/website/docs/api/QTabWidget.md b/website/docs/api/QTabWidget.md new file mode 100644 index 0000000000..3c6f6c0864 --- /dev/null +++ b/website/docs/api/QTabWidget.md @@ -0,0 +1,6 @@ +--- +sidebar_label: QTabWidget +title: QTabWidget +--- + +Will be available from NodeGUI v0.1.10 and up diff --git a/docs/api/QWidget.md b/website/docs/api/QWidget.md similarity index 90% rename from docs/api/QWidget.md rename to website/docs/api/QWidget.md index 99455b8f50..2eb88a2fac 100644 --- a/docs/api/QWidget.md +++ b/website/docs/api/QWidget.md @@ -1,4 +1,7 @@ -## Class: QWidget +--- +sidebar_label: QWidget +title: QWidget +--- > Create and control views. @@ -22,14 +25,14 @@ view.setLayout(new FlexLayout()); - `parent` NodeWidget (_optional_). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget. -### Static Methods +## Static Methods QWidget can access all the static methods defined in [NodeWidget](api/NodeWidget.md) -### Instance Properties +## Instance Properties QWidget can access all the instance properties defined in [NodeWidget](api/NodeWidget.md) -### Instance Methods +## Instance Methods QWidget can access all the instance methods defined in [NodeWidget](api/NodeWidget.md) diff --git a/docs/api/QtEnums.md b/website/docs/api/QtEnums.md similarity index 88% rename from docs/api/QtEnums.md rename to website/docs/api/QtEnums.md index 1ee590203c..5bc2dd5ec4 100644 --- a/docs/api/QtEnums.md +++ b/website/docs/api/QtEnums.md @@ -1,3 +1,8 @@ +--- +sidebar_label: Qt Enums +title: Qt Enums +--- + ## Enums from Qt For a complete list of Enums that we can use from Javascript see file diff --git a/docs/api/YogaWidget.md b/website/docs/api/YogaWidget.md similarity index 91% rename from docs/api/YogaWidget.md rename to website/docs/api/YogaWidget.md index d85d188c81..f8d54f0811 100644 --- a/docs/api/YogaWidget.md +++ b/website/docs/api/YogaWidget.md @@ -1,4 +1,7 @@ -## Class: YogaWidget +--- +sidebar_label: YogaWidget +title: YogaWidget +--- > Abstract class to add common functionality related to Flex layout to all Widgets. @@ -18,20 +21,20 @@ const flexNode = view.getFlexNode(); YogaWidget helps in storing all flex properties of a widget. -### Static Methods +## Static Methods YogaWidget can access all the static methods defined in [Component](api/Component.md) -### Instance Properties +## Instance Properties YogaWidget can access all the instance properties defined in [Component](api/Component.md) -### Instance Methods +## Instance Methods YogaWidget can access all the instance methods defined in [Component](api/Component.md) Additionally it also has the following instance methods: -#### `widget.getFlexNode()` +### `widget.getFlexNode()` Returns a native reference to the flex node used in c++ instance for the widget. This is not a regular javascript object and hence no methods or properties can be accessed from it. It exists so that we pass around a widgets flex node to layouts, etc. diff --git a/docs/api/process.md b/website/docs/api/process.md similarity index 96% rename from docs/api/process.md rename to website/docs/api/process.md index 57361451a5..8761d72aa6 100644 --- a/docs/api/process.md +++ b/website/docs/api/process.md @@ -1,4 +1,7 @@ -# process +--- +sidebar_label: process +title: process +--- > Extensions to process object. diff --git a/docs/api/synopsis.md b/website/docs/api/synopsis.md similarity index 69% rename from docs/api/synopsis.md rename to website/docs/api/synopsis.md index fc1b07a47c..fc14a20c7d 100644 --- a/docs/api/synopsis.md +++ b/website/docs/api/synopsis.md @@ -1,13 +1,16 @@ -# Synopsis +--- +sidebar_label: Synopsis +title: Synopsis +--- > How to use Node.js and NodeGui's APIs. All of [Node.js's built-in modules](https://nodejs.org/api/) are available in -NodeGui and third-party node modules also fully supported as well (including -the [native modules](../tutorial/using-native-node-modules.md)). +NodeGui. Also, third-party node modules that are known to work with Node.Js are fully supported as well (including +the native node modules). -NodeGui also provides some extra built-in modules for developing native -desktop applications. +Apart from Node.Js ecosystem, NodeGui also provides some extra built-in widget and modules for developing native +desktop applications. So, you can think of NodeGui as NodeJs + Gui Widgets powered by Qt. The app script is like a normal Node.js script: @@ -21,7 +24,7 @@ win.show(); global.win = win; // To prevent win from being garbage collected. ``` -To run your app, read [Run your app](../tutorial/first-app.md#running-your-app). +To run your app, read [Run your app](/docs/guides/tutorial). ## Destructuring assignment @@ -34,8 +37,7 @@ const { QMainWindow, QWidget, QLabel, - FlexLayout, - StyleSheet + FlexLayout } = require("@nodegui/nodegui"); const win = new QMainWindow(); @@ -46,23 +48,17 @@ const rootLayout = new FlexLayout(); centralWidget.setLayout(rootLayout); const label = new QLabel(); -label.setObjectName("mylabel"); +label.setInlineStyle("font-size: 16px; font-weight: bold;"); label.setText("Hello World"); rootLayout.addWidget(label); win.setCentralWidget(centralWidget); win.setStyleSheet( - StyleSheet.create( - ` + ` #myroot { background-color: #009688; } - #mylabel { - font-size: 16px; - font-weight: bold; - } ` - ) ); win.show(); diff --git a/website/docs/development/README.md b/website/docs/development/README.md new file mode 100644 index 0000000000..1f800a76ca --- /dev/null +++ b/website/docs/development/README.md @@ -0,0 +1,48 @@ +# Contributor's guide + +This guide is for everyone who want's to contribute to the development of NodeGui. + +Please make sure you have read the [User's guides](/) before reading this guide. + +- [Setting up the NodeGui Contributor's Environment](development/setting-up.md) + - [Setting up macOS](development/setting-up.md#macosx) + - [Setting up Windows](development/setting-up.md#windows) + - [Setting up Linux](development/setting-up.md#linux) +- [Getting started](development/getting-started.md) + - [Code Structure](development/getting-started.md#Code-Structure) + - [Wrapping a widget: TLDR version](development/getting-started.md#Wrapping-a-widget) + - [Learning Materials](development/getting-started.md#Learning-Materials) +- [Styling](development/styling.md) + - [Painting](development/styling.md#painting) + - [Layout](development/styling.md#layout) +- [Signal and Event Handling](development/signal_and_event_handling.md) +- [Debugging](development/debugging.md) +- [Common Errors](development/common_errors.md) +- [Wrapping a Widget: Detailed](development/wrapping_widgets.md) +- [Getting Support](tutorial/support.md) + + +# Where to start or How can you help? + + You can follow the contributors guide above to get a gist. + + It is fairly straightforward to get started. I would start with a project of my own and start adding missing functionalities. + + Or simply put I would recommend you start by adding an unexported method to an existing widget. + + **For example:** + + You could add the corresponding Qt method to QProgressbar + https://doc.qt.io/qt-5/qprogressbar.html#textVisible-prop to get a grip on it. + + This PR can be used as a guide + + https://github.com/nodegui/nodegui/issues/36 + + https://github.com/nodegui/nodegui/pull/39 + + You can also take a look at few bugs or the issue board here to know what you can pick up if you are out of ideas. + + https://github.com/nodegui/nodegui/projects/ + + https://github.com/nodegui/react-nodegui/projects/ diff --git a/website/docs/development/common_errors.md b/website/docs/development/common_errors.md new file mode 100644 index 0000000000..2489f57aa0 --- /dev/null +++ b/website/docs/development/common_errors.md @@ -0,0 +1,7 @@ +# Common errors + +1. **Segmentation fault:** Segmentation fault occurs when you access a Pointer that is pointing to an invalid memory address. One major reason for this can be that JS garbage collector would have garbage collected the addon generated value and you try accessing it after a while. This is mostly the case if you see seg fault happening randomly after some time of startup. + +2. **Widget not visible in Flex layout** Widget might have gotten zero height/width. This can occur if yoga was not able to get the default height/width of the widget. Make sure you have implemented + `YGNodeSetMeasureFunc(this->instance->getFlexNode(), &extrautils::measureQtWidget);` + if its a leaf node widget(doesnt contain any children). diff --git a/website/docs/development/debugging.md b/website/docs/development/debugging.md new file mode 100644 index 0000000000..aa31e25ad9 --- /dev/null +++ b/website/docs/development/debugging.md @@ -0,0 +1,11 @@ +# debugging + +## Debugging JS + +// TODO + +## Debugging C++ + +https://medium.com/@atulanand94/debugging-nodejs-c-addons-using-vs-code-27e9940fc3ad + +https://medium.com/cameron-nokes/how-to-debug-native-node-addons-in-mac-osx-66f69f81afcb diff --git a/website/docs/development/getting-started.md b/website/docs/development/getting-started.md new file mode 100644 index 0000000000..fbe60e7237 --- /dev/null +++ b/website/docs/development/getting-started.md @@ -0,0 +1,113 @@ +## Getting started + +This library aims to be a nodejs addon which can export Qt Widgets to the Javascript world. By doing so one can develop fully fledged cross platform native GUI applications using only Javascript. + +The library depends on `qode` which is a lightly modified version of NodeJS. The slight modification was needed to make it work with this addon. In essense, we will do `qode your_file.js` instead of `node your_file.js`. + +Qode is inspired by this post by [Cheng Zhao](https://github.com/zcbenz): https://electronjs.org/blog/electron-internals-node-integration + +This library does not modify Qt in any way and only use it as it is. This library also dynamically links to Qt. So it needs Qt libs to be installed in your system to work (This is done to keep in compliance with open source LGPL license of Qt). We can think of exporting the required libs later. + +## Code Structure + +``` +. +├── binding.gyp +├── config +├── demo.ts +├── package.json +├── src +│   ├── cpp <-- C++ source code +│   └── lib <-- Typescript source code +├── tsconfig.json +└── yarn.lock +``` + +The main folder is `src`. It contains + +- `cpp` : This folder contains all the C++ source code. Basically all the wrapper code using NAPI to export Qt Widgets and other helper functions to Javascript. +- `lib` : This folder contains all the Typescript code of the library. This is used to add additonal helper methods and types to exported addon. + +**Detailed version:** + +``` +. +├── binding.gyp +├── config +│   ├── application.gypi +│   ├── common.gypi +│   └── yoga.gypi +├── demo.ts +├── package.json +├── src +│   ├── cpp +│   │   ├── Extras +│   │   ├── QtGui <------ All exported classes found inside Qts Gui dynamic library +│   │   ├── QtWidgets <------ All exported classes found inside Qts Widgets dynamic library +│   │   ├── core +│   │   └── main.cpp +│   └── lib +│   ├── QtGui +│   ├── QtWidgets +│   └── core +├── tsconfig.json +└── yarn.lock + +``` + +First step to seeing how everything works is to take a look at `demo.ts` file. This file is basically like a Kitchen application showcasing all the exported widgets currently with the library. + +Make sure you have read how to write native NodeJS Addons blog first. https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f + +Once you have done that check out `src/cpp/main.cpp` and `config/application.gypi` to see the list of exported C++ classes. + +Then maybe you can take a look at `src/cpp/QtWidgets/QLabel/qlabel_wrap.h`. This will show you how to wrap a simple Qt Widget. +Check the corresponding JS file for the addon here `src/lib/QtWidgets/QLabel/index.ts`. + +## Wrapping a widget + +Create wrappers for each and every Qt class that you will use with N-API (using node-addon-api since it is c++) and export it onto JS side. + +Taking the example of QLabel, if you look inside the directory `src/cpp/QtWidgets/QLabel`, you should see: + +``` +├── QLabel +│   ├── nlabel.cpp +│   ├── nlabel.h <---- Extended QLabel +│   ├── nlabel_moc.cpp <--- Autogenerated file by qt moc. +│   ├── qlabel_wrap.cpp +│   └── qlabel_wrap.h <--- Wrapper file +``` + +The idea is : + +1. We will first extend QLabel class to form NLabel. NLabel is basically QLabel with some extra methods and variables. More on it below. +2. Then we will use NLabel and wrap it using NAPI and export it to JS side. This is what qlabel_wrap does. + +**NLabel**: Since NLabel has inherited from QLabel we can treat is as QLabel with extra methods and properties. Primary reason to extend QLabel to create NLabel is to add support for Event listeners and CSS styling using Flex. +So if you take a look at NLabel you will see, it inherits from QLabel and NodeWidget. NodeWidget inturn inherits from YogaWidget and EventWidget. Event widget adds event handling support. YogaWidget is a class that contains the magic that enables a regular Qt Widget to have Yoga node. A Yoga node is an instance used by yoga library to calculate a widgets position on the screen. Yoga is a library that will layout the widget on the screen. To do so we will specify the flex properties like alignitems, justify content, margin, paddings etc on the Yoga node of the widget. Apart from adding yoga node, YogaWidget adds support for specifying those yoga properties via Qt's stylesheet. (This is done by using Q_PROPERTY). To make this work we need to use something called as Q_OBJECT inside the class which is a C++ macro. Q_OBJECT will be expanded to relevant code by the compiler. In Qt whenever we add Q_OBJECT to a header file, we need to use a pre compiler called Qt MOC (Meta Object Compiler). The way we use it is + +``` +moc headername.h -o headername_moc.cpp --include // example : ../../core/YogaWidget/yogawidget.h +``` + +So for nlabel I would run it as: + +``` +moc nlabel.h -o nlabel_moc.cpp --include ../../core/YogaWidget/yogawidget.h +``` + +This will run moc on `headername.h` and generate `headername_moc.cpp`. We will include `headername_moc.cpp` in `config/moc.gypi`. If you dont do this. Then it will give a symbol not found error. + +I hope QLabel's example is enough for now. For more examples and inspirations we can take a look at other wrapped widgets. + +## Learning Materials + +1. Beginners guide to NodeJS Addon - https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f +2. First read this: N-API in nodejs docs +3. https://www.youtube.com/watch?v=-Oniup60Afs&feature=youtu.be +4. See samples at https://github.com/nodejs/abi-stable-node-addon-examples/ + 4.1. You can see the readme of https://github.com/nodejs/node-addon-api.git/ +5. See node-qt implementation. It is implemented in Nan (explained in video). +6. Now try to match the implementation in node-qt and convert to N-API using examples from samples. +7. Implementations not in node-qt need to be done with effort. diff --git a/website/docs/development/setting-up.md b/website/docs/development/setting-up.md new file mode 100644 index 0000000000..6b98587efa --- /dev/null +++ b/website/docs/development/setting-up.md @@ -0,0 +1,55 @@ +# Setup project for development + +## Development setup and getting started + +Make sure you follow the setup guide of [Qode][qode_setup] so that you have a build environment ready for Qode. + +### MacOSX: + +**Requirements** + +1. Node version: > 11 +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Make, GCC v7 +4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] + +### Windows: + +**Requirements** + +1. Node version: > 11 +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Visual Studio Community 2017 +4. Powershell +5. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] + +### Linux: + +Supported versions: Ubuntu 17.10 and up + +**Requirements** + +1. Node version: > 11 +2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +3. Make, GCC v7, pkg-config +4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] + +On Ubuntu: `$ sudo apt-get install pkg-config build-essentials` should install everything except Qt5. + +Note: If you are using your own version of Qt make sure to + +`export PKG_CONFIG_PATH="/5.13.0/gcc_64/lib/pkgconfig"` + +### Common: + +1. Once you have setup the platform specific stuff as mentioned above, follow these: +2. `git clone` this repo. +3. `yarn install` +4. `yarn build:addon` +5. `yarn dev` + +If you want to run with your own version of Qt make sure to pass qt_home_dir variable when building addon. + +`npm run rebuild:addon [--qt_home_dir=/path/to/qt]` + +[qode_setup]: https://github.com/nodegui/qode diff --git a/website/docs/development/signal_and_event_handling.md b/website/docs/development/signal_and_event_handling.md new file mode 100644 index 0000000000..c72d6b1fae --- /dev/null +++ b/website/docs/development/signal_and_event_handling.md @@ -0,0 +1,150 @@ +# Event handling + +In Qt you can respond to an external event like a key press via event handling. Events always are processed by the event loop. Alongside events Qt also has a concept of Signals/Slots. Signals and slots are used to primarily communicate between widgets (more precisely QObjects). So the most common way of interacting between Qt Widgets is done through signals/slots. (More details here: https://doc.qt.io/qt-5/signalsandslots.html). Hence we would be implementing support for both events and signals. + +**Technicals:** + +> An event is a message encapsulated in a class (QEvent) which is processed in an event loop and dispatched to a recipient that can either accept the message or pass it along to others to process. They are usually created in response to external system events like mouse clicks. +> Signals and Slots are a convenient way for QObjects to communicate with one another and are more similar to callback functions. In most circumstances, when a "signal" is emitted, any slot function connected to it is called directly. The exception is when signals and slots cross thread boundaries. In this case, the signal will essentially be converted into an event. + +# Implementing Signal handling + +In Qt signals and slots are used to communicate between different qt widgets. So they can be used to implement things like +onClick, onHover etc. + +The way Qt Signals work is explained here: + +https://doc.qt.io/qt-5/signalsandslots.html + +The way you use them in Qt for a PushButton is explained here: +https://wiki.qt.io/How_to_Use_QPushButton#Signals + +# Adding signal/event handling support to a NodeWidget + +We will take the example of PushButton + +**Javascript** + +Steps: + +The widget should inherit from `NodeWidget`. NodeWidget inherits from EventWidget internally. EventWidget constructor needs native object while initialising. So arrange your code such that native object gets initialised before calling `super(native)`. + +EventWidget adds `addEventListener` method to the widget which can be called +like this: + +```js +button.addEventListener("clicked", () => { + console.log("clicked"); +}); +``` + +To help the user know what all signals/events are supported, export an enum like `QPushButtonEvents` as shown below. + +So the user can then use it as below: + +```js +button.addEventListener(QPushButtonEvents.clicked, () => { + console.log("clicked"); +}); +``` + +Example: + +```js +import addon from "../../core/addon"; +import { NodeWidget } from "../../QtGui/QWidget"; +import { BaseWidgetEvents } from "../../core/EventWidget"; + +export const QPushButtonEvents = Object.freeze({ + ...BaseWidgetEvents, + clicked: "clicked", + pressed: "pressed", + released: "released", + toggled: "toggled" +}); + +export class QPushButton extends NodeWidget { + native: NativeElement; + constructor(parent?: NodeWidget) { + let native; + if (parent) { + native = new addon.QPushButton(parent.native); + } else { + native = new addon.QPushButton(); + } + super(native); + this.parent = parent; + this.native = native; + // bind member functions + this.setText.bind(this); + } + + setText(text: string | number) { + this.native.setText(`${text}`); + } +} +``` + +**C++** + +Steps: + +1. `NPushButton` + +Inherit from both QPushButton and NodeWidget. Make sure you have added NODEWIDGET_IMPLEMENTATIONS macro. This adds a crucial method for events support. It will override `event(QEvent *)` method of QPushbutton so that nodejs can listen to the events of this widget. This makes sure we convert all the QEvent's of this widget to an event for the nodejs event emitter. + +Also make sure to connect all the signals of the widgets to the event emitter instance from NodeJS. This way we kindof convert the signal to a simple nodejs event. + +```cpp +#pragma once + +#include +#include "src/cpp/core/NodeWidget/nodewidget.h" +#include "napi.h" + +class NPushButton: public QPushButton, public NodeWidget +{ + NODEWIDGET_IMPLEMENTATIONS(QPushButton) +public: + using QPushButton::QPushButton; //inherit all constructors of QPushButton + + // override this method and implement all signals here + void connectWidgetSignalsToEventEmitter() { + // Qt Connects: Implement all signal connects here + QObject::connect(this, &QPushButton::clicked, [=](bool checked) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "clicked"), Napi::Value::From(env, checked) }); + }); + QObject::connect(this, &QPushButton::released, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "released") }); + }); + QObject::connect(this, &QPushButton::pressed, [=]() { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "pressed") }); + }); + QObject::connect(this, &QPushButton::toggled, [=](bool checked) { + Napi::Env env = this->emitOnNode.Env(); + Napi::HandleScope scope(env); + this->emitOnNode.Call({ Napi::String::New(env, "toggled"), Napi::Value::From(env, checked) }); + }); + } +}; + +``` + +**Additional** + +Make sure `npushbutton.h` is added to `config/moc.json`. +And run `npm run automoc` before running `npm run build:addon` + +We need to run Qt's MOC (Meta Object Compiler) on the file whenever we use Q_OBJECT in a class or use QObject::connect. This is so that Qt can expand the macros and add necessary implementations to our class. + +# How does it work ? + +1. On JS side for each widget instance we create an instance of NodeJS's Event Emitter. This is done by the class `EventWidget` from which `NodeWidget` inherits +2. We send this event emiiter's `emit` function to the C++ side by calling `initNodeEventEmitter` method and store a pointer to the event emitter's emit function using `emitOnNode`. initNodeEventEmitter function is added by a macro from EventWidget (c++). You can find the initNodeEventEmitter method with the event widget macros. +3. We setup Qt's connect method for all the signals that we want to listen to and call the emitOnNode (which is actually emit from Event emitter) whenever a signal arrives. This is done manually on every widget by overriding the method `connectWidgetSignalsToEventEmitter`. Check `npushbutton.h` for details. This takes care of all the signals of the widgets. Now to export all qt events of the widget, we had overriden the widgets `event(Event*)` method to listen to events received by the widget and send it to the event emitter. This is done inside the EVENTWIDGET_IMPLEMENTATIONS macro diff --git a/website/docs/development/styling.md b/website/docs/development/styling.md new file mode 100644 index 0000000000..786fb2e62a --- /dev/null +++ b/website/docs/development/styling.md @@ -0,0 +1,100 @@ +# How styling works? + +There are two parts to styling. + +1. Layout +2. Painting : Colors, text color, etc + +## Painting + +The regular styles such as text color, font-size, font weight etc are achieved using Qt's stylesheet. +We just call Qt's setStyleSheet method on the native widget and pass in the styles as a string. + +This method is implemented as part of `QWIDGET_WRAPPED_METHODS_DECLARATION` in `qwidget_macro.h`. +So all widgets using this macro will get the setStyleSheet method. + +## Layout + +Layouting is basically positioning widgets on the screen. It takes into account everything from margins, paddings, positions etc. Our main focus will be Flex layouting. For flex layout we are using yoga library from facebook. This is the same library used by React Native. Before looking at flaxlayout in this libarary I recommend browsing Yoga's C API doc here: `deps/yoga/doc.md` + +In case `nodegui`. I have implemented a custom Qt layout by extending `QLayout`, hence Qt is able to take over automagically when window is resized or any other layouting event occurs. +You can find the implementation at `src/cpp/core/FlexLayout/flexlayout.h`. + +The c++ api provided by this custom layout looks like this: + +```cpp + // FlexLayout is a custom Layout built for QT. This layout will be used to layout qt widgets using facebook's yoga library. + // Thus giving ability to layout Qt Widgets using Flexbox. + // Usage: + QWidget *container = new QWidget(); + YGNodeRef root = YGNodeNew(); + YGNodeRef child1 = YGNodeNew(); + YGNodeRef child2 = YGNodeNew(); + FlexLayout * flayout = new FlexLayout(container,root); +// or FlexLayout * flayout = new FlexLayout(container); +// or FlexLayout *flayout = new FlexLayout(); + + flayout->addWidget(btn1, child1); + flayout->addWidget(btn2, child2); + +``` + +This layout is exported to Javascript side via `src/cpp/core/FlexLayout/flexlayout_wrap.h` + +The JS Api looks like this: + +```js +const view = new QWidget(rootView); + +const flayout = new FlexLayout(); // Create layout +flayout.setFlexNode(view.getFlexNode()); // Set widget's flex as layout's flex node. + +view.setLayout(flayout); // set layout as view's layout + +const label = new QLabel(view); +label.setText("Hello12321"); + +const label2 = new QLabel(view); +label2.setText("SECOND LABEL"); + +flayout.addWidget(label2, label2.getFlexNode()); // Add child to layout +flayout.addWidget(label, label.getFlexNode()); // Add child to layout +``` + +### Implementation + +1. Every widget that wants to use flex layout should extend from `flexItem` found at `src/cpp/core/FlexLayout/flexitem.h`. + For example, see `nlabel.h` at `src/cpp/QtWidgets/QLabel/nlabel.h` + + NLabel inherits from `NodeWidget` which inherits from `YogaWidget` which inturn inherits from `FlexItem` + + - `FlexItem` adds a YogaNode to every widget. + - `YogaWidget` adds Yoga specific q-properties to the widget, which is useful to assign yoga properties via qstylesheet. More on this below. + - `NodeWidget` adds layout support via `YogaWidget` and event handling support via `EventWidget` + +### FlexItem + +FlexItem : `src/cpp/core/FlexLayout/flexitem.h` add flexnode to each widget. +FlexItem adds methods like getFlexNode. + +### YogaWidget + +Qt StyleSheet allows you to specify style properties just like in web. You could specify font-size, margin, padding, etc. Qt StyleSheet also allows custom style properties via Qt's q-property system. + +So in order to enable yoga based properties like alignItems, justifyContent, flex, etc via qt's stylesheet we +declare and define q properties for each of those custom properties we want. +This allows us to use something like: + +```js +view.setStyleSheet(` + background-color:green; + qproperty-flex: 1; + qproperty-alignItems: 'center'; +`); +``` + +Notice `qproperty-` prefix? These are the custom q-properties we defined in `YogaWidget.h`. We do not need to prefix `qproperty-` if a stylehsheet string is passed through `StyleSheet.create()`. StyleSheet.create has an autoprefixer which will do the right thing. + +### NodeWidget + +Every widget we implement should inherit from NodeWidget. This helps us add all the properties we want in the widgets via a single class. NodeWidget is the class that contains properties and methods shared by all widgets. This class allows us to add features to all widgets easily. diff --git a/website/docs/development/wrapping_widgets.md b/website/docs/development/wrapping_widgets.md new file mode 100644 index 0000000000..f2af19f270 --- /dev/null +++ b/website/docs/development/wrapping_widgets.md @@ -0,0 +1,3 @@ +# Exporting a new method from a widget + +# Exporting a new widget from scratch diff --git a/website/docs/doc1.md b/website/docs/doc1.md new file mode 100755 index 0000000000..a350ace5a6 --- /dev/null +++ b/website/docs/doc1.md @@ -0,0 +1,162 @@ +--- +id: doc1 +title: Style Guide +sidebar_label: Style Guide +--- + +You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/). + +## Markdown Syntax + +To serve as an example page when styling markdown based Docusaurus sites. + +## Headers + +# H1 - Create the best documentation + +## H2 - Create the best documentation + +### H3 - Create the best documentation + +#### H4 - Create the best documentation + +##### H5 - Create the best documentation + +###### H6 - Create the best documentation + +--- + +## Emphasis + +Emphasis, aka italics, with _asterisks_ or _underscores_. + +Strong emphasis, aka bold, with **asterisks** or **underscores**. + +Combined emphasis with **asterisks and _underscores_**. + +Strikethrough uses two tildes. ~~Scratch this.~~ + +--- + +## Lists + +1. First ordered list item +1. Another item ⋅⋅\* Unordered sub-list. +1. Actual numbers don't matter, just that it's a number ⋅⋅1. Ordered sub-list +1. And another item. + +⋅⋅⋅You can have properly indented paragraphs within list items. Notice the blank line above, and the leading spaces (at least one, but we'll use three here to also align the raw Markdown). + +⋅⋅⋅To have a line break without a paragraph, you will need to use two trailing spaces.⋅⋅ ⋅⋅⋅Note that this line is separate, but within the same paragraph.⋅⋅ ⋅⋅⋅(This is contrary to the typical GFM line break behaviour, where trailing spaces are not required.) + +- Unordered list can use asterisks + +* Or minuses + +- Or pluses + +--- + +## Links + +[I'm an inline-style link](https://www.google.com) + +[I'm an inline-style link with title](https://www.google.com "Google's Homepage") + +[I'm a reference-style link][arbitrary case-insensitive reference text] + +[I'm a relative reference to a repository file](../blob/master/LICENSE) + +[You can use numbers for reference-style link definitions][1] + +Or leave it empty and use the [link text itself]. + +URLs and URLs in angle brackets will automatically get turned into links. http://www.example.com or and sometimes example.com (but not on Github, for example). + +Some text to show that the reference links can follow later. + +[arbitrary case-insensitive reference text]: https://www.mozilla.org +[1]: http://slashdot.org +[link text itself]: http://www.reddit.com + +--- + +## Images + +Here's our logo (hover to see the title text): + +Inline-style: ![alt text](https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 1') + +Reference-style: ![alt text][logo] + +[logo]: https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png 'Logo Title Text 2' + +--- + +## Code + +```javascript +var s = 'JavaScript syntax highlighting'; +alert(s); +``` + +```python +s = "Python syntax highlighting" +print s +``` + +``` +No language indicated, so no syntax highlighting. +But let's throw in a tag. +``` + +--- + +## Tables + +Colons can be used to align columns. + +| Tables | Are | Cool | +| ------------- | :-----------: | -----: | +| col 3 is | right-aligned | \$1600 | +| col 2 is | centered | \$12 | +| zebra stripes | are neat | \$1 | + +There must be at least 3 dashes separating each header cell. The outer pipes (|) are optional, and you don't need to make the raw Markdown line up prettily. You can also use inline Markdown. + +| Markdown | Less | Pretty | +| -------- | --------- | ---------- | +| _Still_ | `renders` | **nicely** | +| 1 | 2 | 3 | + +--- + +## Blockquotes + +> Blockquotes are very handy in email to emulate reply text. This line is part of the same quote. + +Quote break. + +> This is a very long line that will still be quoted properly when it wraps. Oh boy let's keep writing to make sure this is long enough to actually wrap for everyone. Oh, you can _put_ **Markdown** into a blockquote. + +--- + +## Inline HTML + +

+
Definition list
+
Is something people use sometimes.
+ +
Markdown in HTML
+
Does *not* work **very** well. Use HTML tags.
+
+ +--- + +## Line Breaks + +Here's a line for us to start with. + +This line is separated from the one above by two newlines, so it will be a _separate paragraph_. + +This line is also a separate paragraph, but... This line is only separated by a single newline, so it's a separate line in the _same paragraph_. diff --git a/website/docs/faq.md b/website/docs/faq.md new file mode 100644 index 0000000000..91b5789f22 --- /dev/null +++ b/website/docs/faq.md @@ -0,0 +1,65 @@ +--- +title: FAQ +sidebar_label: FAQ +--- + +## Why am I having trouble installing Qode? + +When running `npm install @nodegui/qode`, some users occasionally encounter +installation errors. + +In almost all cases, these errors are the result of network problems and not +actual issues with the `@nodegui/qode` npm package. Errors like `ELIFECYCLE`, +`EAI_AGAIN`, `ECONNRESET`, and `ETIMEDOUT` are all indications of such +network problems. The best resolution is to try switching networks, or +wait a bit and try installing again. + +You can also attempt to download Qode directly from +[nodegui/qode/releases](https://github.com/nodegui/qode/releases) +if installing via `npm` is failing. + +## Javascript widgets are missing methods and properties as compared to QT widget? + +As you would have noticed, the list of methods and properties are less compared to what is present in the Qt's corresponding widget class. This is because we havent written wrappers for them yet. You can help add more methods by following the development guide for contributors. Overtime this gap would reduce. + +## When will Qode upgrade to latest Node.js / Qt version? + +When a new version of Node.js/Qt gets released, we usually wait for about a month +before upgrading the one in Qode. So we can avoid getting affected by bugs +introduced in new Node.js/Qt versions, which happens very often. + +## My app's window/widgets/tray disappeared after a few minutes. + +This happens when the variable which is used to store the window/tray gets +garbage collected. + +If you encounter this problem, the following articles may prove helpful: + +- [Memory Management][memory-management] +- [Variable Scope][variable-scope] + +If you want a quick fix, you can make the variables global by changing your +code from this: + +```javascript +const { QWidget } = require("@nodegui/nodegui"); + +const view = new QWidget(); +view.setObjectName("container"); +view.setLayout(new FlexLayout()); +``` + +to this: + +```javascript +const { QWidget } = require("@nodegui/nodegui"); + +const view = new QWidget(); +view.setObjectName("container"); +view.setLayout(new FlexLayout()); + +global.view = view; //prevent GC +``` + +[memory-management]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management +[variable-scope]: https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx diff --git a/website/docs/guides/custom-nodegui-native-plugin.md b/website/docs/guides/custom-nodegui-native-plugin.md new file mode 100644 index 0000000000..c9511d17db --- /dev/null +++ b/website/docs/guides/custom-nodegui-native-plugin.md @@ -0,0 +1,6 @@ +--- +sidebar_label: Custom NodeGui Plugin +title: Custom NodeGui Plugin +--- + +WIP diff --git a/website/docs/guides/debugging-in-vscode.md b/website/docs/guides/debugging-in-vscode.md new file mode 100644 index 0000000000..2566cedd8d --- /dev/null +++ b/website/docs/guides/debugging-in-vscode.md @@ -0,0 +1,39 @@ +--- +sidebar_label: Debugging in VSCode +title: Debugging in VSCode +--- + +- **Open a NodeGui project in VSCode.** + + ```sh + $ git clone git@github.com:nodegui/nodegui-starter.git + $ code nodegui-starter + ``` + +- **Add a file `.vscode/launch.json` with the following configuration:** + + ```json + { + "version": "0.2.0", + "configurations": [ + { + "name": "Debug Qode Process", + "type": "node", + "request": "launch", + "cwd": "${workspaceRoot}", + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/qode", + "windows": { + "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/qode.exe" + }, + "args": ["./dist/index.js"], + "outputCapture": "std" + } + ] + } + ``` + + **Tip**: You could also configure a preLaunchTask for building typescript before launching the debugger everytime. + +- **Debugging** + + Set some breakpoints in `index.js`, and start debugging in the [Debug View](https://code.visualstudio.com/docs/editor/debugging). You should be able to hit the breakpoints. diff --git a/website/docs/guides/debugging.md b/website/docs/guides/debugging.md new file mode 100644 index 0000000000..696f555c4c --- /dev/null +++ b/website/docs/guides/debugging.md @@ -0,0 +1,59 @@ +--- +sidebar_label: Debugging +title: Debugging +--- + +## Application Debugging + +Whenever your NodeGui application is not behaving the way you wanted it to, +an array of debugging tools might help you find coding errors, performance +bottlenecks, or optimization opportunities. + +Since a NodeGui application runs on Qode. And Qode is essentially Node.Js. We can consider a NodeGui app as a regular NodeJs app. Hence, you can use any debugging tool that you use with Node.Js +One of the most popular way of debugging a Node.Js app is by making use of the [Chromium Developer Tools][node-inspect]. + +Google offers [excellent documentation for their developer tools][devtools]. +We recommend that you make yourself familiar with them - they are usually one +of the most powerful utilities in any NodeGui Developer's tool belt. + +## Debugging Qode process + +To debug JavaScript that's executed in the Qode/Node process you will need to use an external debugger and +launch Qode with the `--inspect` or `--inspect-brk` switch. Once you run it you can open up Chrome and visit `chrome://inspect` where you should see your app listed. + +### Command Line Switches + +Use one of the following command line switches to enable debugging of the process: + +#### `--inspect=[port]` + +Qode will listen for V8 inspector protocol messages on the specified `port`, +an external debugger will need to connect on this port. The default `port` is +`9229`. + +```shell +qode --inspect=9229 your/app +``` + +#### `--inspect-brk=[port]` + +Like `--inspect` but pauses execution on the first line of JavaScript. + +**Note** + +If you are using the official boilerplate `nodegui-starter`, then you can achieve this by running + +``` +npm run debug +``` + +### External Debuggers + +You will need to use a debugger that supports the V8 inspector protocol. + +- Connect Chrome by visiting `chrome://inspect` and selecting to inspect the + launched NodeGui app present there. +- [Debugging the NodeGui app in VSCode](debugging-in-vscode.md) + +[node-inspect]: https://nodejs.org/en/docs/inspector/ +[devtools]: https://developer.chrome.com/devtools diff --git a/website/docs/guides/getting-started.md b/website/docs/guides/getting-started.md new file mode 100644 index 0000000000..1167ed58f0 --- /dev/null +++ b/website/docs/guides/getting-started.md @@ -0,0 +1,139 @@ +--- +sidebar_label: Getting started +title: Getting started +--- + +NodeGui enables you to create desktop applications with JavaScript. You could see it +as a lightly modified variant of the Node.js runtime that is focused on desktop applications +instead of web servers. + +NodeGui is also an efficient JavaScript binding to a cross platform graphical user interface +(GUI) library `Qt`. Qt is one of the most mature and efficient library for building desktop applications. +This enabled NodeGui to be extrememly memory and CPU efficient as compared to other popular Javascript Desktop GUI solutions. A hello world app built with NodeGui runs on less than 20Mb of memory. + +## Developer environment + +To turn your operating system into an environment capable of building desktop apps with NodeGui, you would need Node.js, npm,a code editor of your choice, and a rudimentary understanding of your operating system's command line client. + +Along with these, there are a few operating system dependent instructions that are listed below. + +### Setting up on macOS + +**Requirements:** + +- NodeGui supports macOS 10.10 (Yosemite) and up. NodeGui currently only supports 64bit OS. +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +- Make, GCC v7 +- Currently supported Node.Js versions are 12.x and up. + +We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm + +Confirm that both `node` and `npm` are available by running: + +```sh +# This command should print the version of Node.js +node -v + +# This command should print the version of npm +npm -v +``` + +If both commands printed a version number, you are all set! Before you get +started, you might want to install a [code editor](#a-good-editor) suited +for JavaScript development. + +### Setting up on Windows + +> NodeGui supports Windows 7 and later versions – attempting to develop NodeGui +> applications on earlier versions of Windows might not work. NodeGui currently only supports 64bit OS. + +**Requirements:** + +- Visual studio 2017 and up. +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +- Currently supported Node.Js versions are 12.x and up. + +We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm + +We strongly recommend Powershell as preferred terminal in Windows. + +Confirm that both `node` and `npm` are available by running: + +```powershell +# This command should print the version of Node.js +node -v + +# This command should print the version of npm +npm -v +``` + +If both commands printed a version number, you are all set! Before you get +started, you might want to install a [code editor](#a-good-editor) suited +for JavaScript development. + +### Setting up on Linux + +> NodeGui currently supports Ubuntu 16.04 and Debian 10 and up. Although other Linux distributions can also be easily supported. NodeGui currently only supports 64bit OS. + +**Requirements:** + +- Make, GCC v7 +- CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) +- Currently supported Node.Js versions are 12.x and up. +- On Ubuntu and Ubuntu-based distros it is advisable to run `sudo apt-get update`, followed by `sudo apt-get install pkg-config build-essential` + +We strongly suggest you use some kind of version manager for Node.Js. This would allow you to switch to any version of nodejs quite easily. We recommend `nvm`: https://github.com/nvm-sh/nvm + +Confirm that both `node` and `npm` are available by running: + +```sh +# This command should print the version of Node.js +node -v + +# This command should print the version of npm +npm -v +``` + +If both commands printed a version number, you are all set! Before you get +started, you might want to install a [code editor](#a-good-editor) suited +for JavaScript development. + +### A Good Editor + +We might suggest two free popular editors: +GitHub's [Atom][atom] and Microsoft's [Visual Studio Code][code]. Both of +them have excellent JavaScript support. + +If you are one of the many developers with a strong preference, know that +virtually all code editors and IDEs these days support JavaScript. + +[code]: https://code.visualstudio.com/ +[atom]: https://atom.io/ + +### Hello World + +Clone and run the code in this tutorial by using the +[`nodegui/nodegui-starter`][quick-start] repository. + +**Note**: Running this requires [Git](https://git-scm.com) and [npm](https://www.npmjs.com/). + +```sh +# Clone the repository +$ git clone https://github.com/nodegui/nodegui-starter +# Go into the repository +$ cd nodegui-starter +# Install dependencies +$ npm install +# Run the app +$ npm start +``` + +That's it! + +Congratulations! You've successfully run and modified your first NodeGui app. + +### Now what? + +If you're curious to learn more about NodeGui, continue on to the [tutorial](tutorial.md). + +[quick-start]: https://github.com/nodegui/nodegui-starter diff --git a/website/docs/guides/handle-events.md b/website/docs/guides/handle-events.md new file mode 100644 index 0000000000..5135d61d54 --- /dev/null +++ b/website/docs/guides/handle-events.md @@ -0,0 +1,6 @@ +--- +sidebar_label: Handle Events +title: Handle Events +--- + +WIP diff --git a/website/docs/guides/images.md b/website/docs/guides/images.md new file mode 100644 index 0000000000..31e67b13b4 --- /dev/null +++ b/website/docs/guides/images.md @@ -0,0 +1,6 @@ +--- +sidebar_label: Images +title: Images +--- + +WIP diff --git a/website/docs/guides/layout.md b/website/docs/guides/layout.md new file mode 100644 index 0000000000..1ab2d0a4e2 --- /dev/null +++ b/website/docs/guides/layout.md @@ -0,0 +1,112 @@ +--- +sidebar_label: Layout +title: Layout +--- + +NodeGui uses a layout system to automatically arranging child widgets within a widget to ensure that they make good use of the available space. + +## Fixed Dimensions + +A widget's height and width determine its size on the screen. The simplest way to set the dimensions of a widget is by adding a fixed width and height to style. Setting dimensions this way is common for widgets that should always render at exactly the same size, regardless of screen dimensions. + +```javascript + +const { QMainWindow, QWidget } = require("@nodegui/nodegui"); + +const win = new QMainWindow(); +const view = new QWidget(win); + +view.setInlineStyle("width:50px; height:30px; background-color: yellow;"); + +win.show(); +(global as any).win = win; + +``` + +## Dynamic Layouts + +Dynamic layouts automatically position and resize widgets when the amount of space available for them changes, ensuring that they are consistently arranged and that the user interface as a whole remains usable. + +NodeGui currently supports the following layouts at the moment: + +- FlexLayout +- QGridLayout + +_More layouts will be added as time goes on. You can also add layouts yourself by creating custom native plugins for NodeGui usng the [Custom Native Plugin API.](custom-nodegui-native-plugin.md)_ + +## FlexLayout + +Use FlexLayout to have the children expand and shrink dynamically based on available space. Normally you will use `flex: 1`, which tells a widget to fill all available space, shared evenly amongst other widgets with the same parent. The larger the flex given, the higher the ratio of space a component will take compared to its siblings. + +> A widget can only expand to fill available space if its parent has dimensions greater than 0. If a parent does not have either a fixed width and height or flex, the parent will have dimensions of 0 and the flex children will not be visible. + +Flexbox is designed to provide a consistent layout on different screen sizes. You will normally use a combination of flexDirection, alignItems, and justifyContent to achieve the right layout. + +### Example: + +Lets say you want to build a UI that has a parent view which has two child widgets. One a label with text Hello and another a view with background color white. Now you want the label to occupy 1/3 of the available space while the white colored child view to occupy the remaining 2/3 space. + +flex layout example 1 + +The code for that would look something like this: + +```javascript +let { QLabel, FlexLayout, QWidget, QMainWindow } = require("@nodegui/nodegui"); + +// Create a root view and assign a flex layout to it. +const rootView = new QWidget(); +rootView.setLayout(new FlexLayout()); +rootView.setObjectName("rootView"); + +// Create two widgets - one label and one view +const label = new QLabel(); +label.setText("Hello"); +label.setObjectName("label"); + +const view = new QWidget(); +view.setObjectName("view"); + +// Now tell rootView layout that the label and the other view are its children +rootView.layout.addWidget(label); +rootView.layout.addWidget(view); + +// Tell FlexLayout how you want children of rootView to be poisitioned +rootView.setStyleSheet(` + #rootView{ + flex: 1; + background-color: blue; + } + #label { + flex: 1; + color: white; + background-color: green; + } + #view { + flex: 3; + background-color: white; + } +`); + +const win = new QMainWindow(); +win.setCentralWidget(rootView); +win.show(); +global.win = win; +``` + +### TLDR + +- First step is to set a layout on the parent widget. You can do this using the widget's `setLayout` method. Here we are using FlexLayout. + +- For a layout to work you must let the layout know which widgets are the children and how to lay them on the available screen space within the parent widget. You do this using a layout's `addWidget` method. In the case of FlexLayout you will specify properties by setting flex properties on the parent and child widgets. + +> To know more on how FlexBox layout works in depth you can visit: https://facebook.github.io/react-native/docs/0.60/flexbox. +> +> NodeGui uses the same library that React Native uses underneath for FlexBox ([Yoga](https://github.com/facebook/yoga)). + +- You can specify layout properties via inline styles also. + +## Conclusion + +The primary layout in NodeGui is the Flexbox layout. Flexbox layout can be controlled via stylesheet just as in web. So both paint and layout properties are available at the same place. + +NodeGui will also try to support other available layouts in Qt. But, If you need a special layout that Qt/NodeGui doesnt yet support you can always create a [native plugin for NodeGui](custom-nodegui-native-plugin.md) and use Qt's APIs to create one. In fact, Qt doesnt have a FlexLayout built in, FlexLayout is actually a custom Qt layout written with the help of Yoga library. diff --git a/website/docs/guides/networking.md b/website/docs/guides/networking.md new file mode 100644 index 0000000000..28128e632d --- /dev/null +++ b/website/docs/guides/networking.md @@ -0,0 +1,6 @@ +--- +sidebar_label: Networking +title: Networking +--- + +WIP diff --git a/website/docs/guides/nodegui-architecture.md b/website/docs/guides/nodegui-architecture.md new file mode 100644 index 0000000000..e29fc9c8a0 --- /dev/null +++ b/website/docs/guides/nodegui-architecture.md @@ -0,0 +1,107 @@ +--- +sidebar_label: Architecture +title: Architecture +--- + +By looking at how NodeGui works internally, we would get a clear picture on why the APIs are designed the way they are. + +## Qode + +NodeGui uses Qt for creating Windows and other UI element. Hence it exports thin wrappers of native C++ widgets from Qt into Javascript world. Now, every Qt application needs to initialize an instance of `QApplication` before creating widgets. The way we do it in C++ Qt application is (dont worry if it doesnt make sense right now): + +```cpp + #include + #include + + int main(int argc, char *argv[]) + { + QApplication app(argc, argv); // Important + + QPushButton hello("Hello world!"); + hello.resize(100, 30); + hello.show(); + + return app.exec(); // Important + } +``` + +Like many Gui libraries Qt uses an event/message loop to handle events from widgets. Hence, when we call `app.exec()` Qt starts its message loop and blocks on that line. This is all good when there is only one message loop in the entire app. But since we want to use Qt with NodeJS and NodeJs has its own event loop, we cannot run both Qt and NodeJs on the same thread easily. + +Then following questions arise: + +- **What if we run Qt on a separate thread?** : No this is not possible since Qt has a requirement that it needs to run on the main thread. +- **What if we run Node on a separate thread?** : This would mean we need to build a complex bridge between Node and Qt threads to make them communicate. A strict no no. + +So in order to make both NodeJs and Qt work together we need to find a way to merge these two event loop into one. This is achieved by a custom NodeJs binary we call as `Qode`. + +Qode is a lightly modified fork of Node.js that merges Node's event loop with Qt's event loop. The idea of merging event loops is inspired by Electron and [other](https://github.com/yue) Gui libraries developed by [zcbenz (Cheng Zhao)](https://github.com/zcbenz). It has been detailed in a post here: [Electron internals](https://electronjs.org/blog/electron-internals-node-integration). Hence, we reused the logic from electron to achieve smooth integration between Qt and NodeJs. + +The idea is to release a corresponding Qode binary for every NodeJs version that comes out after Node v12.6. +The source code of Qode can be found [here](https://github.com/nodegui/qode). + +_\*PS: Qode is a fork of [Yode](https://github.com/yue/yode)_ + +## Using NodeGui APIs + +NodeGui offers a number of APIs that support the development of a desktop +application. You'd access NodeGui's APIs by requiring its included module: + +```javascript +require("@nodegui/nodegui"); +``` + +A window in NodeGui is for instance created using the `QMainWindow` +class. + +```javascript +const { QMainWindow } = require("@nodegui/nodegui"); + +const win = new QMainWindow(); +``` + +## Using Nodejs APIs + +NodeGui exposes full access to Node.js. This has two important implications: + +1. All APIs available in Node.js are available in NodeGui. Calling the + following code from an NodeGui app works: + +```javascript +const fs = require("fs"); + +const root = fs.readdirSync("/"); + +// This will print all files at the root-level of the disk, +// either '/' or 'C:\'. +console.log(root); +``` + +2. You can use Node.js modules in your application. Pick your favorite npm + module. npm offers currently the world's biggest repository of open-source + code – the ability to use well-maintained and tested code that used to be + reserved for server applications is one of the key features of NodeGui. + +As an example, to use the official AWS SDK in your application, you'd first +install it as a dependency: + +```sh +npm install --save aws-sdk +``` + +Then, in your NodeGui app, require and use the module as if you were +building a Node.js application: + +```javascript +// A ready-to-use S3 Client +const S3 = require("aws-sdk/clients/s3"); +``` + +There is one important caveat: Native Node.js modules (that is, modules that +require compilation of native code before they can be used) will need to be +compiled with Qode or a compatible Node version to be used with NodeGui. + +The vast majority of Node.js modules are _not_ native. Only 400 out of the +~650.000 modules are native. However, if you do need native modules, please +consult [this guide on how to recompile them for NodeGui][native-node]. + +[native-node]: using-native-node-modules.md diff --git a/website/docs/guides/scroll-view.md b/website/docs/guides/scroll-view.md new file mode 100644 index 0000000000..89ec383a96 --- /dev/null +++ b/website/docs/guides/scroll-view.md @@ -0,0 +1,6 @@ +--- +sidebar_label: Scroll View +title: Scroll View +--- + +WIP diff --git a/website/docs/guides/styling.md b/website/docs/guides/styling.md new file mode 100644 index 0000000000..9bc46f9e0e --- /dev/null +++ b/website/docs/guides/styling.md @@ -0,0 +1,175 @@ +--- +sidebar_label: Styling +title: Styling +--- + +With NodeGui, you can style a widget to your needs. If you are familiar with CSS in the web world you would feel right at home. All widgets have a method `setInlineStyle` for setting inline styles for the respective widget. The style names and values usually match how CSS works on the web. + +Here's an example: + +```js +const { QLabel, QMainWindow } = require("@nodegui/nodegui"); + +const win = new QMainWindow(); + +const label = new QLabel(win); +label.setText("Hello world"); +label.setInlineStyle("color: green; background-color: white;"); + +win.show(); +global.win = win; +``` + +## Overview + +NodeGui makes use of [Qt's stylesheet](https://doc.qt.io/qt-5/stylesheet-syntax.html) for styling. Qt Style Sheet terminology and syntactic rules are almost identical to those of HTML CSS. Additionally, NodeGui adds support for layout using flex properties like align-items, justify-content, etc. Flexbox layout support is added using [facebook's yoga library](https://github.com/facebook/yoga). + +You would write your style properties in a string and pass it to the NodeGui widgets either via global styles or inline styles (similar to how it works in the web). + +## Global styles + +Lets take a look at an example: + +```js +const { QLabel, FlexLayout, QWidget } = require("@nodegui/nodegui"); + +const view = new QWidget(); +view.setObjectName("rootView"); +view.setLayout(new FlexLayout()); + +const label = new QLabel(); +label.setObjectName("helloLabel"); +label.setText("Hello"); + +const label2 = new QLabel(); +label2.setObjectName("worldLabel"); +label2.setText("World"); + +view.layout.addWidget(label); +view.layout.addWidget(label2); + +view.setStyleSheet(` + #helloLabel { + color: red; + padding: 10px; + } + #worldLabel { + color: green; + padding: 10px; + } + #rootView { + background-color: black; + } +`); +view.show(); +(global as any).view = view; + +``` + +In the case of global stylesheet you can define all your style properties in a stylesheet string and the tell the root view or window to set it as a stylsheet for it and its child widgets. The only difference here from web is that you can set a stylesheet on a widget at any level in the whole tree of widgets, the stylesheet will affect the widget and its children. + +In the above example, in order to reference a widget in a stylesheet we will assign it a `objectName` using setObjectName instance method. Think of objectName as something similar to an `id` in the case of web. Now using the objectName you could reference the widget in the stylesheet and set style properties on them. Do not worry about the layout stuff that is going on here, that will be covered in the next section. + +Global stylesheet really becomes powerful when you use things like pseudo-selectors (hover, checked, etc). It also has helps in implementing cascaded styles which allow you to style a group of widgets at once. We will see more about these features below. + +> More details on all the features and the syntax can be found here: https://doc.qt.io/qt-5/stylesheet-syntax.html + +## Inline styles + +Lets look at this example again: + +```js +const { QLabel, QMainWindow } = require("@nodegui/nodegui"); + +const win = new QMainWindow(); + +const label = new QLabel(win); +label.setText("Hello world"); +label.setInlineStyle("color: green; background-color: white;"); + +win.show(); +global.win = win; +``` + +In most cases it would be easier to style the widgets inline. NodeGui supports inline styling using `setInlineStyle` instance method. Inline styles will only affect the widget to which the style is applied to and is often easier to understand and manage. All properties you use in the global stylesheet are available in inline styles as well. + +## Selectors + +NodeGui style sheets support all the selectors defined in CSS2. +Some examples include: + +```css +* { + color: blue; +} + +QPushButton { + padding: 10px; +} + +#okButton { + margin: 10px; +} + +#mainView > QPushButton { + margin: 10px; +} +``` + +To see a complete list of selectors see here: https://doc.qt.io/qt-5/stylesheet-syntax.html#selector-types + +## Pseudo states + +Like in the web, you can style your widget based on its state. An example would be, you might want the color of the button text to be red when its hovered upon. These are possible with pseudo states. Pseudo-states appear at the end of the selector, with a colon (:) in between. + +```css +#okButton:hover { + color: red; +} +``` + +> More details here : https://doc.qt.io/qt-5/stylesheet-syntax.html#pseudo-states + +## Cascading + +Style sheets can be set on the parent widgets and on child widgets. An arbitrary widget's effective style sheet is obtained by merging the style sheets set on the widget's ancestors (parent, grandparent, etc.). + +When conflicts arise, the widget's own inline style sheet is always preferred to any inherited style sheet, irrespective of the specificity of the conflicting rules. Likewise, the parent widget's style sheet is preferred to the grandparent's, etc. + +The behaviour is similar to what we see on the web. + +> For more in depth examples see here: https://doc.qt.io/qt-5/stylesheet-syntax.html#cascading + +## Supported properties + +Since we are not running inside a web browser, there are few differences in the properties you could use in NodeGui vs in web. + +The complete list is detailed here: https://doc.qt.io/qt-5/stylesheet-reference.html#list-of-properties + +Apart from the properties listed in the link, NodeGui also supports layout properties related to Flex. You can use all flex properties such as align-items, justify-content, flex, etc on all widgets. [The layout styling will be coverted in more detail in the section: Layout.](layout.md) + +## Advanced usage (Setting QObject Properties) + +In Qt, every widget has certain properties set on them using something called as [Q_PROPERTY](https://doc.qt.io/qt-5/qobject.html#Q_PROPERTY). There are many q-properties that are defined on each widget already. You can also define custom qproperties in the native C++ code yourself too. What does it have to do with styling ? The thing is some of these properties can be altered using qt stylesheet. In Qt's terminology, these properties are called designable properties. + +For example: + +```css +MyLabel { + qproperty-alignment: AlignCenter; +} +MyGroupBox { + qproperty-titlecolor: rgb(100, 200, 100); +} +QPushButton { + qproperty-iconsize: 20px 20px; +} +``` + +You can discover these properties by following Qt's documentation or by running a simple google search like "center text in QLabel using stylesheet in Qt". These are advanced properties and in practice will come in use rarely but its good to know. + +> More details : https://doc.qt.io/qt-5/stylesheet-syntax.html#setting-qobject-properties + +--- + +In this section, we mostly covered the paint properties in the NodeGui stylesheet. The next section would cover on how you can use flex to layout your widgets with stylesheet. diff --git a/website/docs/guides/tutorial.md b/website/docs/guides/tutorial.md new file mode 100644 index 0000000000..3e119a0af6 --- /dev/null +++ b/website/docs/guides/tutorial.md @@ -0,0 +1,72 @@ +--- +sidebar_label: Learn the Basics +title: Learn the Basics +--- + +NodeGui uses native components instead of web based components as building blocks. So to understand the basic structure of a NodeGui app, you need to be familiar with Javascript or Typescript. This tutorial is aimed at everyone who has some web experience with web development. + +## NodeGui development in a nutshell + +As far as development is concerned, an NodeGui application is essentially a Node.js application. The starting point is a `package.json` that is identical to that of a Node.js module. A most basic NodeGui app would have the following +folder structure: + +```text +your-app/ +├── package.json +├── index.js +``` + +All APIs and features found in NodeGui are accessible through the `@nodegui/nodegui` module, which can be required like any other Node.js module. Additionally you have access to all Node.js apis and node modules. + +```javascript +require("@nodegui/nodegui"); +``` + +The `@nodegui/nodegui` module exports features in namespaces. As an example, a window can be created +using the `QMainWindow` class. A simple `main.js` file might open a window: + +```javascript +const { QMainWindow } = require("@nodegui/nodegui"); + +const win = new QMainWindow(); +win.show(); + +global.win = win; // To prevent win from being garbage collected. +``` + +The `index.js` should create windows and handle all the system events your +application might encounter. + +## What's going on here? + +Firstly, we are running a regular Node.js app. This means that we are not running in a browser environment. The window you see is actually a native widget created by Qt. QMainWindow is essentially a lightweight javascript wrapper over Qt's QMainWindow. Hence every method you call on QMainWindow instance is actually affecting a native window widget. This is very light weight as compared to browser based solutions and hence is more closer to the Operating system.s + +## Trying out the starter project + +Clone and run the code by using the +[`nodegui/nodegui-starter`][quick-start] repository. + +**Note**: Running this requires [Git](https://git-scm.com) and [npm](https://www.npmjs.com/). + +```sh +# Clone the repository +$ git clone https://github.com/nodegui/nodegui-starter +# Go into the repository +$ cd nodegui-starter +# Install dependencies +$ npm install +# Run the app +$ npm start +``` + +[quick-start]: https://github.com/nodegui/nodegui-starter + +## What else other than a basic window? + +NodeGui has support for basic widgets like QWidget (similar to div), QCheckBox, QPushButton and many more. +You can take a look at the list of native widgets that NodeGui currently supports here : [Native widgets in NodeGui](/docs/api/QWidget). +With time more widgets and APIs will be added to NodeGui. Apart from modules in NodeGui, you also have access to the entire node modules ecosystem. Thus, any node module that you can use with Node.js, can be used with NodeGui. This makes it extremely powerful. + +Fine, I want something more custom and beautiful than just native looking widgets. What do I do? + +To make things more beautiful, you will have to [learn about styling](styling). Lets take a look at that next. diff --git a/website/docs/guides/using-native-node-modules.md b/website/docs/guides/using-native-node-modules.md new file mode 100644 index 0000000000..1f3cd3cd29 --- /dev/null +++ b/website/docs/guides/using-native-node-modules.md @@ -0,0 +1,55 @@ +--- +sidebar_label: Native Node Modules +title: Using native Node Modules +--- + +Native Node modules are supported by NodeGui, but since NodeGui is very +likely to use a different V8 version from the Node binary installed on your +system, the modules you use will need to be recompiled for NodeGui's node/v8 version. Otherwise, +you will get the following class of error when you try to run your app: + +```sh +Error: The module '/path/to/native/module.node' +was compiled against a different Node.js version using +NODE_MODULE_VERSION $XYZ. This version of Node.js requires +NODE_MODULE_VERSION $ABC. Please try re-compiling or re-installing +the module (for instance, using `npm rebuild` or `npm install`). +``` + +## How to install native modules + +To compile native Node modules against a build of NodeGui that doesn't +match a public release, instruct `npm` to use the version of Qode (NodeJs) you have bundled +with your custom build. + +```sh +npm rebuild --nodedir=/path/to/nodegui/vendor/qode +``` + +or + +```sh +qode /path/to/npm rebuild +``` + +## Troubleshooting + +If you installed a native module and found it was not working, you need to check +the following things: + +- When in doubt, rebuild native modules with qode first. +- Make sure the native module is compatible with the target platform and + architecture for your NodeGui app. +- After you upgrade NodeGui, you usually need to rebuild the modules. + +## Modules that rely on `node-pre-gyp` + +The [`node-pre-gyp` tool][node-pre-gyp] provides a way to deploy native Node +modules with prebuilt binaries, and many popular modules are using it. + +Usually those modules work fine under NodeGui, but sometimes when NodeGui uses +a newer version of V8 than Node and/or there are ABI changes, bad things may +happen. So in general, it is recommended to always build native modules from +source code. + +[node-pre-gyp]: https://github.com/mapbox/node-pre-gyp diff --git a/website/docs/mdx.md b/website/docs/mdx.md new file mode 100755 index 0000000000..dd222e2c16 --- /dev/null +++ b/website/docs/mdx.md @@ -0,0 +1,22 @@ +--- +id: mdx +title: Powered by MDX +--- + +You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/). + +export const Highlight = ({children, color}) => ( + + {children} + +); + +Docusaurus green and Facebook blue are my favorite colors. + +I can write **Markdown** alongside my _JSX_! diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js new file mode 100755 index 0000000000..a9b89ef565 --- /dev/null +++ b/website/docusaurus.config.js @@ -0,0 +1,92 @@ +module.exports = { + title: "NodeGui", + tagline: + "Build performant, native, cross platform desktop apps with JavaScript and CSS 🚀", + url: "https://nodegui.org", + baseUrl: "/", + favicon: "img/favicon.ico", + organizationName: "nodegui", // Usually your GitHub org/user name. + projectName: "nodegui", // Usually your repo name. + themeConfig: { + navbar: { + title: "NodeGui", + logo: { + alt: "NodeGui Logo", + src: "img/logo-circle.png" + }, + links: [ + { to: "docs/guides/getting-started", label: "Docs", position: "right" }, + { to: "docs/api/QApplication", label: "API", position: "right" }, + { to: "blog", label: "Blog", position: "right" }, + { + href: "https://github.com/nodegui/nodegui", + label: "GitHub", + position: "right" + } + ] + }, + footer: { + style: "dark", + links: [ + { + title: "Docs", + items: [ + { to: "docs/guides/getting-started", label: "Getting Started" }, + { to: "docs/api/QApplication", label: "API" } + ] + }, + { + title: "Community", + items: [ + { + label: "Spectrum", + href: "https://spectrum.chat/nodegui" + }, + { + label: "Twitter", + to: "https://twitter.com/node_gui" + }, + { + label: "Medium", + to: "https://medium.com/nodegui" + } + ] + }, + { + title: "More", + items: [ + { + label: "Blog", + to: "blog" + }, + { + label: "React NodeGui", + to: "https://react.nodegui.org" + }, + { + label: "FAQ", + to: "docs/faq" + } + ] + } + ], + copyright: `Copyright © ${new Date().getFullYear()} NodeGui` + }, + googleAnalytics: { + trackingID: "UA-145065218-1" + } + }, + presets: [ + [ + "@docusaurus/preset-classic", + { + docs: { + sidebarPath: require.resolve("./sidebars.js") + }, + theme: { + customCss: require.resolve("./src/css/custom.css") + } + } + ] + ] +}; diff --git a/website/package.json b/website/package.json new file mode 100755 index 0000000000..60303c5dbb --- /dev/null +++ b/website/package.json @@ -0,0 +1,33 @@ +{ + "name": "nodegui", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy" + }, + "dependencies": { + "@docusaurus/core": "^2.0.0-alpha.24", + "@docusaurus/plugin-google-analytics": "^2.0.0-alpha.23", + "@docusaurus/preset-classic": "^2.0.0-alpha.24", + "classnames": "^2.2.6", + "react": "^16.8.4", + "react-dom": "^16.8.4", + "styled-components": "^4.4.0" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + } +} diff --git a/website/sidebars.js b/website/sidebars.js new file mode 100755 index 0000000000..37d8263d05 --- /dev/null +++ b/website/sidebars.js @@ -0,0 +1,53 @@ +module.exports = { + api: { + General: ["api/synopsis"], + Widgets: [ + "api/QApplication", + "api/QCheckBox", + "api/QDial", + "api/QIcon", + "api/QLabel", + "api/QLineEdit", + "api/QMainWindow", + "api/QPlainTextEdit", + "api/QProgressBar", + "api/QPushButton", + "api/QRadioButton", + "api/QScrollArea", + "api/QSpinBox", + "api/QTabWidget", + "api/QWidget" + ], + Layouts: ["api/FlexLayout", "api/QGridLayout"], + Modules: ["api/QClipboard", "api/QCursor", "api/QPixmap", "api/QtEnums"], + "Internal Modules": [ + "api/Component", + "api/EventWidget", + "api/NodeLayout", + "api/NodeWidget", + "api/YogaWidget", + "api/QAbstractScrollArea", + "api/QAbstractSlider" + ], + APIs: ["api/process"] + }, + guides: { + "The Basics": [ + "guides/getting-started", + "guides/tutorial", + "guides/styling", + "guides/layout", + "guides/handle-events", + "guides/scroll-view", + "guides/images", + "guides/networking" + ], + Guides: [ + "guides/nodegui-architecture", + "guides/debugging", + "guides/debugging-in-vscode", + "guides/using-native-node-modules", + "guides/custom-nodegui-native-plugin" + ] + } +}; diff --git a/website/src/css/custom.css b/website/src/css/custom.css new file mode 100755 index 0000000000..deb4eb6256 --- /dev/null +++ b/website/src/css/custom.css @@ -0,0 +1,34 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #0195a5; + --ifm-color-primary-dark: rgb(2, 117, 129); + --ifm-color-primary-darker: rgb(2, 94, 104); + --ifm-color-primary-darkest: rgb(1, 61, 68); + --ifm-color-primary-light: #0299aa; + --ifm-color-primary-lighter: #03b5c9; + --ifm-color-primary-lightest: #04d4eb; + + /* Navbar*/ + + --ifm-navbar-background-color: rgb(51, 54, 59); + --ifm-navbar-link-color: white; +} + +.navbar__sidebar__items .menu__list-item .menu__link { + color: white; +} +.navbar__toggle { + color: white; +} +.contents .contents__link { + color: var(--ifm-font-base-color); +} +a:hover { + text-decoration: underline dotted; +} diff --git a/website/src/pages/components/CodeExample.js b/website/src/pages/components/CodeExample.js new file mode 100644 index 0000000000..bbf93bd6f0 --- /dev/null +++ b/website/src/pages/components/CodeExample.js @@ -0,0 +1,42 @@ +import React from "react"; +import { SplitView } from "./SplitView"; +import styled from "styled-components"; + +const Image = styled.img` + max-height: 300px; + padding-bottom: 40px; +`; + +export const CodeExample = () => { + const ColumnOne = () => { + return ( +
+ +
+ ); + }; + const ColumnTwo = () => { + return ( +
+

Written in JavaScript—rendered with native code by Qt

+

+ Apps can be built completely in JavaScript. This enables native app + development for whole new teams of developers, and can let existing + native teams work much faster. +

+ +

+ With NodeGui you get flexibility of web and perfromance of Native + desktop apps. +

+
+ ); + }; + return ( + } + columnTwo={} + /> + ); +}; diff --git a/website/src/pages/components/CreateNativeApps.js b/website/src/pages/components/CreateNativeApps.js new file mode 100644 index 0000000000..c3efb31204 --- /dev/null +++ b/website/src/pages/components/CreateNativeApps.js @@ -0,0 +1,47 @@ +import React from "react"; +import { SplitView } from "./SplitView"; +import styled from "styled-components"; + +const Image = styled.img` + max-height: 300px; + padding-bottom: 40px; +`; + +export const CreateNativeApps = () => { + const ColumnOne = () => { + return ; + }; + const ColumnTwo = () => { + return ( +
+

+ Create native apps for Windows, MacOs and Linux using JavaScript and + CSS +

+ +

+ lets you create truly native apps and doesn't compromise on your + users' experience. It provides a core set of platform agnostic native + widgets that map directly to the platform’s native UI building blocks. +

+ +

+ NodeGui widgets are built on top of{" "} + + Qt + {" "} + which is a mature dekstop apps framework. NodeGui widgets are + extremely customizable just like in the web but does{" "} + NOT use a Web browser under the hood. +

+
+ ); + }; + return ( + } + columnTwo={} + /> + ); +}; diff --git a/website/src/pages/components/Features.js b/website/src/pages/components/Features.js new file mode 100644 index 0000000000..170e0ca957 --- /dev/null +++ b/website/src/pages/components/Features.js @@ -0,0 +1,63 @@ +import React from "react"; +import withBaseUrl from "@docusaurus/withBaseUrl"; +import styles from "../styles.module.css"; +import classnames from "classnames"; + +const features = [ + { + title: <>Web Technologies, + imageUrl: "img/undraw_website_setup.svg", + description: ( + <> + With NodeGui, you can build your app with familiar web technologies like + CSS and JavaScript. There is even a{" "} + React based version. + + ) + }, + { + title: <>Open Source, + imageUrl: "img/undraw_code_review.svg", + description: ( + <> + NodeGui is an open source project maintained by an active community of + contributors. + + ) + }, + { + title: <> Cross Platform, + imageUrl: "img/undraw_windows.svg", + description: ( + <> + Compatible with Mac, Windows, and Linux, Electron apps build and run on + three platforms. + + ) + } +]; +export const Features = () => { + return ( +
+
+
+ {features.map(({ imageUrl, title, description }, idx) => ( +
+ {imageUrl && ( +
+ {title} +
+ )} +

{title}

+

{description}

+
+ ))} +
+
+
+ ); +}; diff --git a/website/src/pages/components/Hero.js b/website/src/pages/components/Hero.js new file mode 100644 index 0000000000..29b563c2f6 --- /dev/null +++ b/website/src/pages/components/Hero.js @@ -0,0 +1,85 @@ +import React from "react"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import styled from "styled-components"; +import { Header, Container, H1, Center } from "./common"; +import styles from "../styles.module.css"; +import withBaseUrl from "@docusaurus/withBaseUrl"; + +const ActionButton = styled.a` + ${props => { + switch (props.type) { + case "primary": + return ` + color: white; + background: var(--ifm-color-primary); + &:hover { + color: white; + text-decoration: none; + background: var(--ifm-color-primary-dark); + } + `; + case "secondary": + return ` + &::after { + content: "›"; + font-size: 24px; + margin-left: 5px; + text-align: center; + } + `; + } + }} + padding: 0.7rem 1.1rem; + font-size: 1.2em; +`; +const Title = styled(H1)` + font-size: 3em; + font-weight: 600; +`; +const Tagline = styled.p` + font-size: 1.6em; + text-align: center; +`; +const MainLogo = styled.img` + max-width: 170px; +`; + +const MainHeader = styled(Header)` + padding-bottom: 40px; +`; + +function ActionContainer() { + return ( +
+ + Quick start + + + Learn basics + +
+ ); +} + +export const Hero = () => { + const context = useDocusaurusContext(); + const { siteConfig = {} } = context; + return ( + + +
+ + {siteConfig.title} + {siteConfig.tagline} +
+ +
+
+
+
+ ); +}; diff --git a/website/src/pages/components/SplitView/index.js b/website/src/pages/components/SplitView/index.js new file mode 100644 index 0000000000..9532ef8a54 --- /dev/null +++ b/website/src/pages/components/SplitView/index.js @@ -0,0 +1,18 @@ +import { Section } from "../common"; +import "./styles.modules.css"; +import React from "react"; + +export const SplitView = props => { + return ( +
+
+
+ {props.columnOne} +
+
+ {props.columnTwo} +
+
+
+ ); +}; diff --git a/website/src/pages/components/SplitView/styles.modules.css b/website/src/pages/components/SplitView/styles.modules.css new file mode 100644 index 0000000000..173da38437 --- /dev/null +++ b/website/src/pages/components/SplitView/styles.modules.css @@ -0,0 +1,61 @@ +.SplitView { + display: grid; +} + +.SplitView .column { + width: 100%; + display: flex; + align-items: center; + justify-content: center; +} + +.SplitView .column.first { + grid-area: first; +} + +.SplitView .column.text { + padding: 0 50px; +} + +.SplitView .column.last { + grid-area: last; +} + +@media only screen and (min-width: 961px) { + .SplitView { + max-width: 80%; + margin: 0 auto; + grid-template-columns: repeat(2, 1fr); + grid-template-areas: "first last"; + } + + .SplitView.reverse { + grid-template-areas: "last first"; + } + + .SplitView .column.left { + padding-right: 50px; + } + + .SplitView .column.right { + padding-left: 50px; + } +} + +@media only screen and (max-width: 960px) { + .SplitView, + .SplitView.reverse { + grid-template-columns: 1fr; + grid-template-areas: "first" "last"; + } + + .SplitView .column { + padding: 0 4rem; + } +} + +@media only screen and (max-width: 480px) { + .SplitView .column { + padding: 0 1.25rem; + } +} diff --git a/website/src/pages/components/Try.js b/website/src/pages/components/Try.js new file mode 100644 index 0000000000..ea184efacd --- /dev/null +++ b/website/src/pages/components/Try.js @@ -0,0 +1,76 @@ +import React from "react"; +import styled from "styled-components"; +import { Section, Container, Center, H2, H4 } from "./common"; + +const Code = styled.code` + color: white !important; + font-size: 14px; + position: relative; + &::before { + content: "$"; + position: absolute; + left: -13px; + color: gray; + } +`; +const Terminal = styled.div` + background: black; + display: flex; + flex-direction: column; + border: 1px solid gray; + border-bottom: none; + border-top-left-radius: 10px; + border-top-right-radius: 10px; + padding: 50px 30px 30px 30px; + width: 600px; + max-width: 100%; + position: relative; + margin-bottom: 20px; + &::before { + content: "○ ○ ○"; + color: gray; + font-size: 14px; + position: absolute; + left: 15px; + top: 5px; + } +`; + +const SubTitle = styled.h4` + font-weight: 400; +`; +const Description = styled.div` + width: 600px; + max-width: 100%; +`; + +export const Try = () => { + return ( +
+ +
+

Give it a try

+ + 1. Run these commands + + git clone https://github.com/nodegui/nodegui-starter + cd nodegui-starter + npm install + npm start + + + 2.{" "} + + Learn the basics + {" "} + or dive deeper and take a{" "} + + look at the APIs. + + + +
+
+
+ ); +}; diff --git a/website/src/pages/components/common.js b/website/src/pages/components/common.js new file mode 100644 index 0000000000..d2736cdbc7 --- /dev/null +++ b/website/src/pages/components/common.js @@ -0,0 +1,41 @@ +import styled from "styled-components"; + +export const Header = styled.header``; + +export const Section = styled.section` + display: flex; + align-items: center; + padding: 2rem 0 0 0; + width: 100%; + margin: 0 auto; +`; + +export const Container = styled.div` + margin-left: auto; + margin-right: auto; + max-width: 1140px; + max-width: var(--ifm-container-width); + padding-left: 1rem; + padding-left: var(--ifm-spacing-horizontal); + padding-right: 1rem; + padding-right: var(--ifm-spacing-horizontal); + width: 100%; +`; + +export const Center = styled.div` + flex-direction: column; + display: flex; + align-items: center; +`; + +export const Ol = styled.ol``; + +export const Li = styled.li` + font-size: 20px; +`; + +export const H1 = styled.h1``; +export const H2 = styled.h2``; +export const H4 = styled.h4` + font-weight: 600; +`; diff --git a/website/src/pages/index.js b/website/src/pages/index.js new file mode 100755 index 0000000000..585be59e75 --- /dev/null +++ b/website/src/pages/index.js @@ -0,0 +1,30 @@ +import React from "react"; +import Layout from "@theme/Layout"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; + +import { Try } from "./components/Try"; +import { Hero } from "./components/Hero"; +import { Features } from "./components/Features"; +import { CreateNativeApps } from "./components/CreateNativeApps"; +import { CodeExample } from "./components/CodeExample"; + +function Home() { + const context = useDocusaurusContext(); + const { siteConfig = {} } = context; + return ( + + +
+ + + + +
+
+ ); +} + +export default Home; diff --git a/website/src/pages/styles.module.css b/website/src/pages/styles.module.css new file mode 100755 index 0000000000..b84aeed1d7 --- /dev/null +++ b/website/src/pages/styles.module.css @@ -0,0 +1,42 @@ +/** + * Copyright (c) 2017-present, Facebook, Inc. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 966px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureImage { + height: 200px; + width: 200px; +} diff --git a/website/static/CNAME b/website/static/CNAME new file mode 100644 index 0000000000..334ded21ee --- /dev/null +++ b/website/static/CNAME @@ -0,0 +1 @@ +docs.nodegui.org \ No newline at end of file diff --git a/website/static/img/code-sample.png b/website/static/img/code-sample.png new file mode 100644 index 0000000000000000000000000000000000000000..1292fcf5ef46fff2ae5fcabbd3876f786260a611 GIT binary patch literal 89159 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 literal 0 HcmV?d00001 diff --git a/website/static/img/demo.png b/website/static/img/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..eb0022606b74d02d35cfad90ae2e57d19c175c03 GIT binary patch literal 31950 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 Vx22k8Ko*BcSIa=NM%_O8zX94sBdP!Z literal 0 HcmV?d00001 diff --git a/website/static/img/favicon.ico b/website/static/img/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..dd0da4c36dc3729e89d67f24aa75f70e3467af56 GIT binary patch literal 15406 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 I|I-=xFBkz{g#Z8m literal 0 HcmV?d00001 diff --git a/website/static/img/logo-circle.png b/website/static/img/logo-circle.png new file mode 100755 index 0000000000000000000000000000000000000000..4df1fdd88a6cd7b5b6f2ac8ae745bc8de89a1d80 GIT binary patch literal 28008 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

>7dM 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 Sf%pYA!f>yt!9D%sm;MLZqwo0u literal 0 HcmV?d00001 diff --git a/website/static/img/logo.png b/website/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fce598c9f5dc015ff7a0c985e10189d7e6a491d4 GIT binary patch literal 16004 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 U&C!rMIJ+D{PD&ZrAYmH%e?5vw2><{9 literal 0 HcmV?d00001 diff --git a/website/static/img/logo.svg b/website/static/img/logo.svg new file mode 100644 index 0000000000..03842124a8 --- /dev/null +++ b/website/static/img/logo.svg @@ -0,0 +1,5 @@ + + + + diff --git a/website/static/img/logox200.png b/website/static/img/logox200.png new file mode 100644 index 0000000000000000000000000000000000000000..496b95fd9af4204564be6082508c882c5e71b202 GIT binary patch literal 6735 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 literal 0 HcmV?d00001 diff --git a/website/static/img/undraw_code_review.svg b/website/static/img/undraw_code_review.svg new file mode 100644 index 0000000000..2b60017a61 --- /dev/null +++ b/website/static/img/undraw_code_review.svg @@ -0,0 +1 @@ +code review \ No newline at end of file diff --git a/website/static/img/undraw_docusaurus_mountain.svg b/website/static/img/undraw_docusaurus_mountain.svg new file mode 100755 index 0000000000..431cef2f7f --- /dev/null +++ b/website/static/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/static/img/undraw_docusaurus_react.svg b/website/static/img/undraw_docusaurus_react.svg new file mode 100755 index 0000000000..e417050433 --- /dev/null +++ b/website/static/img/undraw_docusaurus_react.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/website/static/img/undraw_docusaurus_tree.svg b/website/static/img/undraw_docusaurus_tree.svg new file mode 100755 index 0000000000..a05cc03dda --- /dev/null +++ b/website/static/img/undraw_docusaurus_tree.svg @@ -0,0 +1 @@ +docu_tree \ No newline at end of file diff --git a/website/static/img/undraw_website_setup.svg b/website/static/img/undraw_website_setup.svg new file mode 100644 index 0000000000..bda916dac0 --- /dev/null +++ b/website/static/img/undraw_website_setup.svg @@ -0,0 +1 @@ +website setup \ No newline at end of file diff --git a/website/static/img/undraw_windows.svg b/website/static/img/undraw_windows.svg new file mode 100644 index 0000000000..da5b8a5ce9 --- /dev/null +++ b/website/static/img/undraw_windows.svg @@ -0,0 +1,11 @@ +windows + + + + + + + X + + + \ No newline at end of file diff --git a/website/yarn.lock b/website/yarn.lock new file mode 100644 index 0000000000..7cbd973e1a --- /dev/null +++ b/website/yarn.lock @@ -0,0 +1,9266 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@7.5.5", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" + integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.0.tgz#9b00f73554edd67bebc86df8303ef678be3d7b48" + integrity sha512-FuRhDRtsd6IptKpHXAa+4WPZYY2ZzgowkbLBecEDDSje1X/apG7jQM33or3NdOmjXBKWGOg4JmSiRfUfuTtHXw== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.0" + "@babel/helpers" "^7.6.0" + "@babel/parser" "^7.6.0" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.0" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.5.5": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.6.2.tgz#069a776e8d5e9eefff76236bc8845566bd31dd91" + integrity sha512-l8zto/fuoZIbncm+01p8zPSDZu/VuuJhAfA7d/AbzM09WR7iVhavvfNDYCNpo1VvLk6E6xgAoP9P+/EMJHuRkQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helpers" "^7.6.2" + "@babel/parser" "^7.6.2" + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.6.0", "@babel/generator@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.6.2.tgz#dac8a3c2df118334c2a29ff3446da1636a8f8c03" + integrity sha512-j8iHaIW4gGPnViaIHI7e9t/Hl8qLjERI6DcV9kEpAIDJsAOrcnXqRS7t+QbhL76pwbtqP+QCQLL0z1CyVmtjjQ== + dependencies: + "@babel/types" "^7.6.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + integrity sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz#6b69628dfe4087798e0c4ed98e3d4a6b2fbd2f5f" + integrity sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== + dependencies: + "@babel/types" "^7.3.0" + esutils "^2.0.0" + +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-define-map@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz#3dec32c2046f37e09b28c93eb0b103fd2a25d369" + integrity sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.5.5" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" + integrity sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA== + dependencies: + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-member-expression-to-functions@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz#1fb5b8ec4453a93c439ee9fe3aeea4a84b76b590" + integrity sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA== + dependencies: + "@babel/types" "^7.5.5" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + integrity sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.1.0", "@babel/helper-module-transforms@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz#f84ff8a09038dcbca1fd4355661a500937165b4a" + integrity sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.5.5" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + integrity sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@7.0.0", "@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" + integrity sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz#f84ce43df031222d2bad068d2626cb5799c34bc2" + integrity sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.5.5" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.5.5" + "@babel/types" "^7.5.5" + +"@babel/helper-simple-access@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" + integrity sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w== + dependencies: + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-wrap-function@^7.1.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" + integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/template" "^7.1.0" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.2.0" + +"@babel/helpers@^7.6.0", "@babel/helpers@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.6.2.tgz#681ffe489ea4dcc55f23ce469e58e59c1c045153" + integrity sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA== + dependencies: + "@babel/template" "^7.6.0" + "@babel/traverse" "^7.6.2" + "@babel/types" "^7.6.0" + +"@babel/highlight@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" + integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.5.5", "@babel/parser@^7.6.0", "@babel/parser@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.6.2.tgz#205e9c95e16ba3b8b96090677a67c9d6075b70a1" + integrity sha512-mdFqWrSPCmikBoaBYMuBulzTIKuXVPtEISFbRRVNwMWpCms/hmE2kRq0bblUHaNRKrjRlmVbx1sDHmjmRgD2Xg== + +"@babel/plugin-proposal-async-generator-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" + integrity sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-syntax-async-generators" "^7.2.0" + +"@babel/plugin-proposal-dynamic-import@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" + integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + +"@babel/plugin-proposal-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" + integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz#61939744f71ba76a3ae46b5eea18a54c16d22e58" + integrity sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz#8ffccc8f3a6545e9f78988b6bf4fe881b88e8096" + integrity sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" + integrity sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz#05413762894f41bfe42b9a5e80919bd575dcc802" + integrity sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/plugin-syntax-async-generators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" + integrity sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" + integrity sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-jsx@7.2.0", "@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@7.2.0", "@babel/plugin-syntax-object-rest-spread@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz#a94013d6eda8908dfe6a477e7f9eda85656ecf5c" + integrity sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" + integrity sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + +"@babel/plugin-transform-block-scoped-functions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" + integrity sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.2.tgz#96c33ab97a9ae500cc6f5b19e04a7e6553360a79" + integrity sha512-zZT8ivau9LOQQaOGC7bQLQOT4XPkPXgN2ERfUgk1X8ql+mVkLc4E8eKk+FO3o0154kxzqenWCorfmEXpEZcrSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz#d094299d9bd680a14a2a0edae38305ad60fb4de9" + integrity sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.5.5" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" + integrity sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz#44bbe08b57f4480094d57d9ffbcd96d309075ba6" + integrity sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz#44abb948b88f0199a627024e1508acaf8dc9b2f9" + integrity sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" + integrity sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" + integrity sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz#39dfe957de4420445f1fcf88b68a2e4aa4515486" + integrity sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" + integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" + integrity sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.2.tgz#c1ca0bb84b94f385ca302c3932e870b0fb0e522b" + integrity sha512-xBdB+XOs+lgbZc2/4F5BVDVcDNS4tcSKQc96KmlqLEAwz6tpYPEvPdmDfvVG0Ssn8lAhronaRs6Z6KSexIpK5g== + dependencies: + regexpu-core "^4.6.0" + +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.5.5": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz#c70021df834073c65eb613b8679cc4a381d1a9f9" + integrity sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.5.5" + +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" + integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" + integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" + integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== + dependencies: + "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" + integrity sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz#fc77cf798b24b10c46e1b51b1b88c2bf661bb8dd" + integrity sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz#a1e454b5995560a9c1e0d537dfc15061fd2687e1" + integrity sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" + integrity sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz#b692aad888a7e8d8b1b214be6b9dc03d5031f698" + integrity sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/preset-env@^7.5.5": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.6.2.tgz#abbb3ed785c7fe4220d4c82a53621d71fc0c75d3" + integrity sha512-Ru7+mfzy9M1/YTEtlDS8CD45jd22ngb9tXnn64DvQK3ooyqSw9K4K9DUWmYknTTVk4TqygL9dqCrZgm1HMea/Q== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.6.2" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.6.2" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.6.2" + "@babel/plugin-transform-classes" "^7.5.5" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.6.0" + "@babel/plugin-transform-dotall-regex" "^7.6.2" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.6.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.6.2" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.5.5" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.6.2" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.6.2" + "@babel/types" "^7.6.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.4.0": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.6.2.tgz#c3d6e41b304ef10dcf13777a33e7694ec4a9a6dd" + integrity sha512-EXxN64agfUqqIGeEjI5dL5z0Sw0ZwWo1mLTi4mQowCZ42O59b7DRpZAnTC6OqdF28wMBMFKNb/4uFGrVaigSpg== + dependencies: + regenerator-runtime "^0.13.2" + +"@babel/template@^7.1.0", "@babel/template@^7.4.4", "@babel/template@^7.6.0": + version "7.6.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.6.0.tgz#7f0159c7f5012230dad64cca42ec9bdb5c9536e6" + integrity sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.6.0" + "@babel/types" "^7.6.0" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.5", "@babel/traverse@^7.6.0", "@babel/traverse@^7.6.2": + version "7.6.2" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.6.2.tgz#b0e2bfd401d339ce0e6c05690206d1e11502ce2c" + integrity sha512-8fRE76xNwNttVEF2TwxJDGBLWthUkHWSldmfuBzVRmEDWOtu4XdINTgN7TDWzuLg4bbeIMLvfMFD9we5YcWkRQ== + dependencies: + "@babel/code-frame" "^7.5.5" + "@babel/generator" "^7.6.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.6.2" + "@babel/types" "^7.6.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.6.0": + version "7.6.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.6.1.tgz#53abf3308add3ac2a2884d539151c57c4b3ac648" + integrity sha512-X7gdiuaCmA0uRjCmRtYJNAVCc/q+5xSgsfKJHqMN4iNLILX39677fJE1O40arPMh0TTtS9ItH67yre6c7k6t0g== + dependencies: + esutils "^2.0.2" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@csstools/convert-colors@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7" + integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw== + +"@docusaurus/core@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.0.0-alpha.24.tgz#bbc895839b0c0971084b7612468a6979dcc851ab" + integrity sha512-eP+QGa1lHoPzhEfzBIXR8qobacFhwNlLlmUGf2nky2TtoZH5qCLcZPHu6TomaWkyi8LuHSJXI7ZVG9vdYq1DyA== + dependencies: + "@babel/core" "^7.5.5" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/preset-env" "^7.5.5" + "@babel/preset-react" "^7.0.0" + "@docusaurus/utils" "^2.0.0-alpha.24" + babel-loader "^8.0.6" + babel-plugin-dynamic-import-node "^2.3.0" + cache-loader "^4.0.1" + chalk "^2.4.2" + chokidar "^3.0.2" + classnames "^2.2.6" + clean-webpack-plugin "^2.0.1" + commander "^2.20.0" + copy-webpack-plugin "^5.0.3" + css-loader "^3.1.0" + ejs "^2.6.2" + express "^4.17.1" + fs-extra "^8.1.0" + globby "^10.0.1" + html-webpack-plugin "^4.0.0-beta.7" + import-fresh "^3.0.0" + lodash "^4.17.14" + mini-css-extract-plugin "^0.8.0" + nprogress "^0.2.0" + null-loader "^3.0.0" + optimize-css-assets-webpack-plugin "^5.0.3" + portfinder "^1.0.21" + postcss-loader "^3.0.0" + postcss-preset-env "^6.7.0" + react-dev-utils "^9.0.1" + react-helmet "^6.0.0-beta" + react-loadable "^5.5.0" + react-loadable-ssr-addon "^0.1.9" + react-router "^5.0.1" + react-router-config "^5.0.1" + react-router-dom "^5.0.1" + semver "^6.1.1" + shelljs "^0.8.3" + static-site-generator-webpack-plugin "^3.4.2" + std-env "^2.2.1" + style-loader "^0.23.1" + terser-webpack-plugin "^1.3.0" + wait-file "^1.0.2" + webpack "^4.36.1" + webpack-bundle-analyzer "^3.3.2" + webpack-dev-server "^3.7.2" + webpack-merge "^4.2.1" + webpack-nicelog "^2.3.1" + +"@docusaurus/mdx-loader@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.24.tgz#7e6342b142e41928939f08e1b0a036d0ab0c0f62" + integrity sha512-72KzuAv/1Xlhs17WLnGoH0Sv7G2dkmMjZU1bLUHO0yIZ4ilLcrS7Gk+Ki0mZsteeoNIrdWSgdctcN5xkkJr1fg== + dependencies: + "@babel/parser" "^7.5.5" + "@babel/traverse" "^7.5.5" + "@mdx-js/mdx" "^1.1.0" + "@mdx-js/react" "^1.0.27" + github-slugger "^1.2.1" + gray-matter "^4.0.2" + loader-utils "^1.2.3" + mdast-util-to-string "^1.0.6" + remark-emoji "^2.0.2" + remark-slug "^5.1.2" + stringify-object "^3.3.0" + unist-util-visit "^1.4.1" + +"@docusaurus/plugin-content-blog@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.24.tgz#7e9280ae4292549956400ba6611c5cbd0c1cece5" + integrity sha512-pSEIt4yxq4wHU5S4f80N6kDJ4itKFlODTA8gLwcXK0932w85yWYZTuzFqRaXrWGdShFSI6jKQxk0/lkOj6i6qg== + dependencies: + "@docusaurus/mdx-loader" "^2.0.0-alpha.24" + "@docusaurus/utils" "^2.0.0-alpha.24" + fs-extra "^8.1.0" + globby "^10.0.1" + loader-utils "^1.2.3" + lodash "^4.17.14" + +"@docusaurus/plugin-content-docs-legacy@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs-legacy/-/plugin-content-docs-legacy-2.0.0-alpha.24.tgz#5acc77b0ede21064d8e382b4be9a6571e5597474" + integrity sha512-cvsOc71n0Emn+267KANAs/aElmvJMwSP8l2bTHjtJuOiEiPgr53bD5+ZPz04GqJNAe/EaB2cPUOIw8xgEqXinA== + dependencies: + "@docusaurus/mdx-loader" "^2.0.0-alpha.24" + "@docusaurus/utils" "^2.0.0-alpha.24" + fs-extra "^8.1.0" + globby "^10.0.1" + import-fresh "^3.0.0" + loader-utils "^1.2.3" + +"@docusaurus/plugin-content-pages@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.24.tgz#302f1bfc959f59afdf7da0acac5b526eeb30236b" + integrity sha512-qgvQu/+VAGWfYLcfcTEntj9o0DHTjDhckifoD582vLukVKAYeq+bCIrDzGYVkoSyZf2oJFMydZ6ihM4ozcLTTg== + dependencies: + "@docusaurus/utils" "^2.0.0-alpha.24" + globby "^10.0.1" + +"@docusaurus/plugin-google-analytics@^2.0.0-alpha.23": + version "2.0.0-alpha.23" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.23.tgz#3b8d469c992f31a58d272c5ca9d67d4acd66b574" + integrity sha512-oa2GH6csafbCwU7y34744e8aeB4+WWmrFoGQaxTz/0wpBj9NsjAdeUnyJaWsRGrrR3FmecZweymWpoemA/T4Vg== + +"@docusaurus/plugin-google-analytics@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.24.tgz#023c8f988390dc90dc3341f09f92947f1aaa4d21" + integrity sha512-enMCwNL8I6pf4kiMld2evcIA5xWg8I++Ma6MUCLzPsm5yO44THTftmYOeSqgJ+mk7uabYgdky2/6puIGtvBjHA== + +"@docusaurus/plugin-google-gtag@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.24.tgz#93c618204a8bd045187a06a8b41b1637c6860d71" + integrity sha512-kkKm+65yHnKB773z+mDZGvEuauFck4Pkuxlv5yCOHyZwPE8irE/kPI7Tfn1VSClY1m5VWQUdRD0+v2AUcqLWsw== + +"@docusaurus/plugin-sitemap@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.24.tgz#ee37b62bb85bf73fb10652d603ad74978c8bdcbe" + integrity sha512-tlPA+BKQ1tlFToWPKr4C4dkBl5qOGgwCggMH69QiphwFIwbREIQzfe1xIZUmMhpCGO+VwGlBxEU2U8J/EZ5uRg== + dependencies: + sitemap "^3.2.2" + +"@docusaurus/preset-classic@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.24.tgz#f12404835a2c0101be2c27e7b18406f34e8bdaeb" + integrity sha512-xRgRof7VuCe9wzVTL5eWP5IED7LgULh3l+wu6A1yYL9JCrTFzJmUsPtlGy2IBiW2sLgXKhGd5oCZtCRB7gwYng== + dependencies: + "@docusaurus/plugin-content-blog" "^2.0.0-alpha.24" + "@docusaurus/plugin-content-docs-legacy" "^2.0.0-alpha.24" + "@docusaurus/plugin-content-pages" "^2.0.0-alpha.24" + "@docusaurus/plugin-google-analytics" "^2.0.0-alpha.24" + "@docusaurus/plugin-google-gtag" "^2.0.0-alpha.24" + "@docusaurus/plugin-sitemap" "^2.0.0-alpha.24" + "@docusaurus/theme-classic" "^2.0.0-alpha.24" + "@docusaurus/theme-search-algolia" "^2.0.0-alpha.24" + +"@docusaurus/theme-classic@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.24.tgz#84dfa3c34f6b206befa92ca4e01030aa6499a5f5" + integrity sha512-gv6LPYe/iGiTf4gmdsFEPJmOmOjrwRuY4Y28DwOe8cZFVs5CCHE0ngtNE9hrD3tB0MP3r5btCwk4+mvZzpVV6A== + dependencies: + "@mdx-js/mdx" "^1.1.0" + "@mdx-js/react" "^1.0.27" + classnames "^2.2.6" + clipboard "^2.0.4" + infima "0.2.0-alpha.2" + prism-react-renderer "^0.1.7" + react-toggle "^4.0.2" + +"@docusaurus/theme-search-algolia@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.24.tgz#c9a6f029d0cf83d215b6f788a5792a2399bdd524" + integrity sha512-veDM5RU5IH8CMxpfViPBAa58jSLtWBY7i7A9FPm2pP/YrTTnhhJsVkH7IO4j/PFHt2NNtyFJtcJz6rjrpqp42A== + dependencies: + docsearch.js "^2.6.3" + +"@docusaurus/utils@^2.0.0-alpha.24": + version "2.0.0-alpha.24" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.0.0-alpha.24.tgz#942fb9b061850c674e2967b63adae6bbc583a7a6" + integrity sha512-gofANcrYDhQa5lvGKj71nedwwndEfAMxTSR2SeJ7TewN087Gj5PawVa2Ep5pdGXDVXLx19CmuOKjtCbflqo/dw== + dependencies: + escape-string-regexp "^2.0.0" + fs-extra "^8.1.0" + gray-matter "^4.0.2" + lodash "^4.17.14" + +"@emotion/is-prop-valid@^0.8.1": + version "0.8.3" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29" + integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig== + dependencies: + "@emotion/memoize" "0.7.3" + +"@emotion/memoize@0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78" + integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow== + +"@emotion/unitless@^0.7.0": + version "0.7.4" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.4.tgz#a87b4b04e5ae14a88d48ebef15015f6b7d1f5677" + integrity sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ== + +"@hapi/address@2.x.x": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.2.tgz#1c794cd6dbf2354d1eb1ef10e0303f573e1c7222" + integrity sha512-O4QDrx+JoGKZc6aN64L04vqa7e41tIiLU+OvKdcYaEMP97UttL0f9GIi9/0A4WAMx0uBd6SidDIhktZhgOcN8Q== + +"@hapi/bourne@1.x.x": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@hapi/bourne/-/bourne-1.3.2.tgz#0a7095adea067243ce3283e1b56b8a8f453b242a" + integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA== + +"@hapi/hoek@8.x.x": + version "8.2.5" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.2.5.tgz#b307d3f1aced22e05bd6a2403c302eaebb577da3" + integrity sha512-rmGFzok1zR3xZKd5m3ihWdqafXFxvPHoQ/78+AG5URKbEbJiwBBfRgzbu+07W5f3+07JRshw6QqGbVmCp8ntig== + +"@hapi/joi@^15.1.0": + version "15.1.1" + resolved "https://registry.yarnpkg.com/@hapi/joi/-/joi-15.1.1.tgz#c675b8a71296f02833f8d6d243b34c57b8ce19d7" + integrity sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ== + dependencies: + "@hapi/address" "2.x.x" + "@hapi/bourne" "1.x.x" + "@hapi/hoek" "8.x.x" + "@hapi/topo" "3.x.x" + +"@hapi/topo@3.x.x": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-3.1.4.tgz#42e2fe36f593d90ad258a08b582be128c141c45d" + integrity sha512-aVWQTOI9wBD6zawmOr6f+tdEIxQC8JXfQVLTjgGe8YEStAWGn/GNNVTobKJhbWKveQj2RyYF3oYbO9SC8/eOCA== + dependencies: + "@hapi/hoek" "8.x.x" + +"@mdx-js/mdx@^1.1.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.5.0.tgz#0f9aa44c888ad197f7346f8c8c81d0bc2d1b17a6" + integrity sha512-Xkg3AjxgCGwxXRBSVssekhsKdEg3N7mGrvGyxYgVapSTqaO4c/3El+iLWhNzFJ99ujosnCTMVw+cDq3oLYJx1w== + dependencies: + "@babel/core" "7.6.0" + "@babel/plugin-syntax-jsx" "7.2.0" + "@babel/plugin-syntax-object-rest-spread" "7.2.0" + "@mdx-js/util" "^1.5.0" + babel-plugin-apply-mdx-type-prop "^1.5.0" + babel-plugin-extract-import-names "^1.5.0" + camelcase-css "2.0.1" + detab "2.0.2" + hast-util-raw "5.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "6.0.2" + remark-mdx "^1.5.0" + remark-parse "7.0.1" + remark-squeeze-paragraphs "3.0.4" + style-to-object "0.2.3" + unified "8.3.2" + unist-builder "1.0.4" + unist-util-visit "2.0.0" + +"@mdx-js/react@^1.0.27": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.5.0.tgz#bb060963c459e4e1553130448006ab756c6fdc4c" + integrity sha512-SsXcxwvGYA00HQcZHuE+8vl53paa4tgMo748ZE2cQvir7E7/tRsayU8VRE4fSIWuSaDgOnw8jO+D5zBHP1P2Rg== + +"@mdx-js/util@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.5.0.tgz#4915de47ae55ae62bb26eef073b8e022ea506e14" + integrity sha512-+mJxrZfDoZ1TX/BVxBaDtYfZFS95r6Z6u5CnYNZJYZdcELUaBX0D7FMM9Up/sb9OTq1sfxHkEkud8sohqrIT/Q== + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.scandir@2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.2.tgz#1f981cd5b83e85cfdeb386fc693d4baab392fa54" + integrity sha512-wrIBsjA5pl13f0RN4Zx4FNWmU71lv03meGKnqRUoCyan17s4V3WL92f3w3AIuWbNnpcrQyFBU5qMavJoB8d27w== + dependencies: + "@nodelib/fs.stat" "2.0.2" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.2", "@nodelib/fs.stat@^2.0.1": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.2.tgz#2762aea8fe78ea256860182dcb52d61ee4b8fda6" + integrity sha512-z8+wGWV2dgUhLqrtRYa03yDx4HWMvXKi1z8g3m2JyxAx8F7xk74asqPk5LAETjqDSGLFML/6CDl0+yFunSYicw== + +"@nodelib/fs.stat@^1.1.2": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" + integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== + +"@nodelib/fs.walk@^1.2.1": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.3.tgz#a555dc256acaf00c62b0db29529028dd4d4cb141" + integrity sha512-l6t8xEhfK9Sa4YO5mIRdau7XSOADfmh3jCr0evNHdY+HNkW6xuQhgMH7D73VV6WpZOagrW0UludvMTiifiwTfA== + dependencies: + "@nodelib/fs.scandir" "2.1.2" + fastq "^1.6.0" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "12.7.8" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.7.8.tgz#cb1bf6800238898bc2ff6ffa5702c3cadd350708" + integrity sha512-FMdVn84tJJdV+xe+53sYiZS4R5yn1mAIxfj+DVoNiQjTYz1+OYmjwEZr1ev9nU0axXwda0QDbYl06QHanRVH3A== + +"@types/q@^1.5.1": + version "1.5.2" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" + integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== + +"@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +acorn-walk@^6.1.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^6.0.7, acorn@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.3.0.tgz#0087509119ffa4fc0a0041d1e93a417e68cb856e" + integrity sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA== + +address@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== + +address@1.1.2, address@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" + integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== + +agentkeepalive@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-2.2.0.tgz#c5d1bd4b129008f1163f236f86e5faea2026e2ef" + integrity sha1-xdG9SxKQCPEWPyNvhuX66iAm4u8= + +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0, ajv-keywords@^3.4.1: + version "3.4.1" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.1.tgz#ef916e271c64ac12171fd8384eaae6b2345854da" + integrity sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ== + +ajv@^6.0.1, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +algoliasearch@^3.24.5: + version "3.35.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-3.35.0.tgz#03f2900698c7c547fce9fb8fb8d0b9a56c8da405" + integrity sha512-Om4aLzkGbUi+Rc3sa8s48CRj2Qe7u5TXS7lK7Z681x2EiAa5Qx5uB/kbp8A6qY6dFDX7vstYRIYZ7t9XgdJ1dw== + dependencies: + agentkeepalive "^2.2.0" + debug "^2.6.9" + envify "^4.0.0" + es6-promise "^4.1.0" + events "^1.1.0" + foreach "^2.0.5" + global "^4.3.2" + inherits "^2.0.1" + isarray "^2.0.1" + load-script "^1.0.0" + object-keys "^1.0.11" + querystring-es3 "^0.2.1" + reduce "^1.0.1" + semver "^5.1.0" + tunnel-agent "^0.6.0" + +alphanum-sort@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= + +ansi-colors@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.0.tgz#e609350e50a9313b472789b2f14ef35808ee14d6" + integrity sha512-Ozz7l4ixzI7Oxj2+cw+p0tVUt27BpaJ+1+q1TCeANWxHpvyn2+Un+YamBdfKu0uh8xLodGhoa1v7595NhKDAuA== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +aproba@^1.0.3, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-filter@~0.0.0: + version "0.0.1" + resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= + +array-flatten@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-map@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= + +array-reduce@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +autocomplete.js@0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/autocomplete.js/-/autocomplete.js-0.36.0.tgz#94fe775fe64b6cd42e622d076dc7fd26bedd837b" + integrity sha512-jEwUXnVMeCHHutUt10i/8ZiRaCb0Wo+ZyKxeGsYwBDtw6EJHqEeDrq4UwZRD8YBSvp3g6klP678il2eeiVXN2Q== + dependencies: + immediate "^3.2.3" + +autoprefixer@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.1.tgz#51967a02d2d2300bb01866c1611ec8348d355a47" + integrity sha512-aVo5WxR3VyvyJxcJC3h4FKfwCQvQWb1tSI5VHNibddCVWrcD1NvlxEweg3TSgiPztMnWfjpy2FURKA2kvDE+Tw== + dependencies: + browserslist "^4.6.3" + caniuse-lite "^1.0.30000980" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.17" + postcss-value-parser "^4.0.0" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-code-frame@6.26.0, babel-code-frame@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-loader@^8.0.6: + version "8.0.6" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" + integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== + dependencies: + find-cache-dir "^2.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + pify "^4.0.1" + +babel-plugin-apply-mdx-type-prop@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.5.0.tgz#01574b3087c7e47673d340332fb8d76a801e8dc0" + integrity sha512-C5h3X7pPV7Pt5QUzbeOILPrgon5Zw830XJ7evT8AFO77ZZy/+pEH1tOaNBa1IiMcSjFqLATYjqlT8uZYn9z49w== + dependencies: + "@babel/helper-plugin-utils" "7.0.0" + "@mdx-js/util" "^1.5.0" + +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.5.0.tgz#b5df56411705de97b20f5acf69caf9e0d8010edd" + integrity sha512-GzNJ0/RlfHWCd7QE05FIPlK8s2ZDQ9aTggDb3IJgpSu+0E4hCNKIjYmSGXFfgdjFlB/eDyOw9ZZ4KDWU7hnnog== + dependencies: + "@babel/helper-plugin-utils" "7.0.0" + +"babel-plugin-styled-components@>= 1": + version "1.10.6" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.6.tgz#f8782953751115faf09a9f92431436912c34006b" + integrity sha512-gyQj/Zf1kQti66100PhrCRjI5ldjaze9O0M3emXRPAN80Zsf8+e1thpTpaXJXVHXtaM4/+dJEgZHyS9Its+8SA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" + +babel-plugin-syntax-jsx@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= + +bail@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" + integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +bfj@^6.1.1: + version "6.1.2" + resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" + integrity sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw== + dependencies: + bluebird "^3.5.5" + check-types "^8.0.3" + hoopy "^0.1.4" + tryer "^1.0.1" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +bluebird@^3.0.5, bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== + +body-parser@1.19.0: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU= + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +browserslist@4.7.0, browserslist@^4.0.0, browserslist@^4.6.0, browserslist@^4.6.3, browserslist@^4.6.4, browserslist@^4.6.6: + version "4.7.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" + integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== + dependencies: + caniuse-lite "^1.0.30000989" + electron-to-chromium "^1.3.247" + node-releases "^1.1.29" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== + +buffer-json@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/buffer-json/-/buffer-json-2.0.0.tgz#f73e13b1e42f196fe2fd67d001c7d7107edd7c23" + integrity sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^11.3.3: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cacache@^12.0.2: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + infer-owner "^1.0.3" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-loader@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cache-loader/-/cache-loader-4.1.0.tgz#9948cae353aec0a1fcb1eafda2300816ec85387e" + integrity sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw== + dependencies: + buffer-json "^2.0.0" + find-cache-dir "^3.0.0" + loader-utils "^1.2.3" + mkdirp "^0.5.1" + neo-async "^2.6.1" + schema-utils "^2.0.0" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= + +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelize@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" + integrity sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs= + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000980, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989: + version "1.0.30000997" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000997.tgz#ba44a606804f8680894b7042612c2c7f65685b7e" + integrity sha512-BQLFPIdj2ntgBNWp9Q64LGUIEmvhKkzzHhUHR3CD5A9Lb7ZKF20/+sgadhFap69lk5XmK1fTUleDclaRFvgVUA== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +ccount@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" + integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== + +chalk@1.1.3, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@2.4.2, chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +character-entities-legacy@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" + integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== + +character-entities@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" + integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== + +character-reference-invalid@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" + integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-types@^8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552" + integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ== + +cheerio@^0.22.0: + version "0.22.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" + integrity sha1-qbqoYKP5tZWmuBsahocxIe06Jp4= + dependencies: + css-select "~1.2.0" + dom-serializer "~0.1.0" + entities "~1.1.1" + htmlparser2 "^3.9.1" + lodash.assignin "^4.0.9" + lodash.bind "^4.1.4" + lodash.defaults "^4.0.1" + lodash.filter "^4.4.0" + lodash.flatten "^4.2.0" + lodash.foreach "^4.3.0" + lodash.map "^4.4.0" + lodash.merge "^4.4.0" + lodash.pick "^4.2.1" + lodash.reduce "^4.4.0" + lodash.reject "^4.4.0" + lodash.some "^4.4.0" + +chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.1.1.tgz#27e953f3950336efcc455fd03e240c7299062003" + integrity sha512-df4o16uZmMHzVQwECZRHwfguOt5ixpuQVaZHjYMvYisgKhE+JXwcj/Tcr3+3bu/XeOJQ9ycYmzu7Mv8XrGxJDQ== + dependencies: + anymatch "^3.1.0" + braces "^3.0.2" + glob-parent "^5.0.0" + is-binary-path "^2.1.0" + is-glob "^4.0.1" + normalize-path "^3.0.0" + readdirp "^3.1.1" + optionalDependencies: + fsevents "^2.0.6" + +chownr@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== + +chrome-trace-event@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + +ci-info@^1.5.0, ci-info@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +classnames@^2.2.5, classnames@^2.2.6: + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" + integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q== + +clean-css@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== + dependencies: + source-map "~0.6.0" + +clean-webpack-plugin@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-2.0.2.tgz#805a19ff20d46a06125298a25eb31142ecad2166" + integrity sha512-pi1111o4OBd9qvacbgs+NRqClfVPKVIc66B4d8kx6Ho/L+i9entQ/NpK600CsTYTPu3kWvKwwyKarsYMvC2xeA== + dependencies: + del "^4.0.0" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +clipboard@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" + integrity sha512-Vw26VSLRpJfBofiVaFb/I8PVfdI1OxKcYShe6fm0sP/DtmiWQNCjhM/okTvdCo0G+lMMm1rMYbk4IK4x1X+kgQ== + dependencies: + good-listener "^1.2.2" + select "^1.1.2" + tiny-emitter "^2.0.0" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" + integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0, color-convert@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" + integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" + integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.2" + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +comma-separated-tokens@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" + integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== + +commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + +compressible@~2.0.16: + version "2.0.17" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.17.tgz#6e8c108a16ad58384a977f3a482ca20bff2f38c1" + integrity sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw== + dependencies: + mime-db ">= 1.40.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +connect-history-api-fallback@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" + integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg== + +consola@^1.4.3: + version "1.4.5" + resolved "https://registry.yarnpkg.com/consola/-/consola-1.4.5.tgz#09732d07cb50af07332e54e0f42fafb92b962c4a" + integrity sha512-movqq3MbyXbSf7cG/x+EbO3VjKQVZPB/zeB5+lN1TuBYh9BWDemLQca9P+a4xpO4lXva9rz+Bd8XyqlH136Lww== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + lodash "^4.17.5" + std-env "^1.1.0" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +content-disposition@0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" + integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== + dependencies: + safe-buffer "5.1.2" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= + +cookie@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" + integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + +copy-webpack-plugin@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-5.0.4.tgz#c78126f604e24f194c6ec2f43a64e232b5d43655" + integrity sha512-YBuYGpSzoCHSSDGyHy6VJ7SHojKp6WHT4D7ItcQFNAYx2hrwkMe56e97xfVR0/ovDuMTrMffXUiltvQljtAGeg== + dependencies: + cacache "^11.3.3" + find-cache-dir "^2.1.0" + glob-parent "^3.1.0" + globby "^7.1.1" + is-glob "^4.0.1" + loader-utils "^1.2.3" + minimatch "^3.0.4" + normalize-path "^3.0.0" + p-limit "^2.2.0" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + webpack-log "^2.0.0" + +core-js-compat@^3.1.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.2.1.tgz#0cbdbc2e386e8e00d3b85dc81c848effec5b8150" + integrity sha512-MwPZle5CF9dEaMYdDeWm73ao/IflDH+FjeJCWEADcEgFSE9TLimFKwJsfmkwzI8eC0Aj0mgvMDjeQjrElkz4/A== + dependencies: + browserslist "^4.6.6" + semver "^6.3.0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@6.0.5, cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-blank-pseudo@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz#dfdefd3254bf8a82027993674ccf35483bfcb3c5" + integrity sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w== + dependencies: + postcss "^7.0.5" + +css-color-keywords@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" + integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU= + +css-color-names@0.0.4, css-color-names@^0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= + +css-declaration-sorter@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" + integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== + dependencies: + postcss "^7.0.1" + timsort "^0.3.0" + +css-has-pseudo@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz#3c642ab34ca242c59c41a125df9105841f6966ee" + integrity sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^5.0.0-rc.4" + +css-loader@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.2.0.tgz#bb570d89c194f763627fcf1f80059c6832d009b2" + integrity sha512-QTF3Ud5H7DaZotgdcJjGMvyDj5F3Pn1j/sC6VBEOVp94cbwqyIBdcs/quzj4MC1BKQSrTpQznegH/5giYbhnCQ== + dependencies: + camelcase "^5.3.1" + cssesc "^3.0.0" + icss-utils "^4.1.1" + loader-utils "^1.2.3" + normalize-path "^3.0.0" + postcss "^7.0.17" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.1.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.0.0" + schema-utils "^2.0.0" + +css-prefers-color-scheme@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz#6f830a2714199d4f0d0d0bb8a27916ed65cff1f4" + integrity sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg== + dependencies: + postcss "^7.0.5" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^1.1.0, css-select@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-select@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.0.2.tgz#ab4386cec9e1f668855564b17c3733b43b2a5ede" + integrity sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ== + dependencies: + boolbase "^1.0.0" + css-what "^2.1.2" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-to-react-native@^2.2.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.2.tgz#e75e2f8f7aa385b4c3611c52b074b70a002f2e7d" + integrity sha512-VOFaeZA053BqvvvqIA8c9n0+9vFppVBAHCp6JgFTtTMU3Mzi+XnelJ9XC9ul3BqFzZyQ5N+H0SnwsWT2Ebchxw== + dependencies: + camelize "^1.0.0" + css-color-keywords "^1.0.0" + postcss-value-parser "^3.3.0" + +css-tree@1.0.0-alpha.29: + version "1.0.0-alpha.29" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39" + integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg== + dependencies: + mdn-data "~1.1.0" + source-map "^0.5.3" + +css-tree@1.0.0-alpha.33: + version "1.0.0-alpha.33" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e" + integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w== + dependencies: + mdn-data "2.0.4" + source-map "^0.5.3" + +css-unit-converter@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" + integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= + +css-what@2.1, css-what@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" + integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== + +cssdb@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-4.4.0.tgz#3bf2f2a68c10f5c6a08abd92378331ee803cddb0" + integrity sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ== + +cssesc@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-2.0.0.tgz#3b13bd1bb1cb36e1bcb5a4dcd27f54c5dcb35703" + integrity sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-default@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" + integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== + dependencies: + css-declaration-sorter "^4.0.1" + cssnano-util-raw-cache "^4.0.1" + postcss "^7.0.0" + postcss-calc "^7.0.1" + postcss-colormin "^4.0.3" + postcss-convert-values "^4.0.1" + postcss-discard-comments "^4.0.2" + postcss-discard-duplicates "^4.0.2" + postcss-discard-empty "^4.0.1" + postcss-discard-overridden "^4.0.1" + postcss-merge-longhand "^4.0.11" + postcss-merge-rules "^4.0.3" + postcss-minify-font-values "^4.0.2" + postcss-minify-gradients "^4.0.2" + postcss-minify-params "^4.0.2" + postcss-minify-selectors "^4.0.2" + postcss-normalize-charset "^4.0.1" + postcss-normalize-display-values "^4.0.2" + postcss-normalize-positions "^4.0.2" + postcss-normalize-repeat-style "^4.0.2" + postcss-normalize-string "^4.0.2" + postcss-normalize-timing-functions "^4.0.2" + postcss-normalize-unicode "^4.0.1" + postcss-normalize-url "^4.0.1" + postcss-normalize-whitespace "^4.0.2" + postcss-ordered-values "^4.1.2" + postcss-reduce-initial "^4.0.3" + postcss-reduce-transforms "^4.0.2" + postcss-svgo "^4.0.2" + postcss-unique-selectors "^4.0.1" + +cssnano-util-get-arguments@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" + integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= + +cssnano-util-get-match@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" + integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= + +cssnano-util-raw-cache@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" + integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== + dependencies: + postcss "^7.0.0" + +cssnano-util-same-parent@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" + integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== + +cssnano@^4.1.10: + version "4.1.10" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" + integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== + dependencies: + cosmiconfig "^5.0.0" + cssnano-preset-default "^4.0.7" + is-resolvable "^1.0.0" + postcss "^7.0.0" + +csso@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b" + integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg== + dependencies: + css-tree "1.0.0-alpha.29" + +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= + +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.2.5, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +deep-equal@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.0.tgz#3103cdf8ab6d32cf4a8df7865458f2b8d33f3745" + integrity sha512-ZbfWJq/wN1Z273o7mUSjILYqehAktR2NVoSrOukDkU9kg2v/Uv89yU4Cvz8seJeAmtN5oqiefKq8FPuXOboqLw== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +default-gateway@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-4.2.0.tgz#167104c7500c2115f6dd69b0a536bb8ed720552b" + integrity sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA== + dependencies: + execa "^1.0.0" + ip-regex "^2.1.0" + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^4.0.0, del@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" + integrity sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ== + dependencies: + "@types/glob" "^7.1.1" + globby "^6.1.0" + is-path-cwd "^2.0.0" + is-path-in-cwd "^2.0.0" + p-map "^2.0.0" + pify "^4.0.1" + rimraf "^2.6.3" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +delegate@^3.1.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +detab@2.0.2, detab@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.2.tgz#074970d1a807b045d0258a4235df5928dd683561" + integrity sha512-Q57yPrxScy816TTE1P/uLRXLDKjXhvYTbfxS/e6lPD+YrqghbsMlGB9nQzj/zVtSPaF0DFPSdO916EWO4sQUyQ== + dependencies: + repeat-string "^1.5.4" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +detect-port-alt@1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dir-glob@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" + integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== + dependencies: + path-type "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0= + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg== + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY= + dependencies: + buffer-indexof "^1.0.0" + +docsearch.js@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/docsearch.js/-/docsearch.js-2.6.3.tgz#57cb4600d3b6553c677e7cbbe6a734593e38625d" + integrity sha512-GN+MBozuyz664ycpZY0ecdQE0ND/LSgJKhTLA0/v3arIS3S1Rpf2OJz6A35ReMsm91V5apcmzr5/kM84cvUg+A== + dependencies: + algoliasearch "^3.24.5" + autocomplete.js "0.36.0" + hogan.js "^3.0.2" + request "^2.87.0" + stack-utils "^1.0.1" + to-factory "^1.0.0" + zepto "^1.2.0" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.1.tgz#13650c850daffea35d8b626a4cfc4d3a17643fdb" + integrity sha512-sK3ujri04WyjwQXVoK4PU3y8ula1stq10GJZpqHIUgoGZdsGzAGu65BnU3d08aTVSvO7mGPZUc0wTEDL+qGE0Q== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" + integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== + dependencies: + domelementtype "^1.3.0" + entities "^1.1.1" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + integrity sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg= + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" + integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== + +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" + integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^1.5.1, domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +dot-prop@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== + dependencies: + is-obj "^1.0.0" + +duplexer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +ejs@^2.6.1, ejs@^2.6.2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.1.tgz#5b5ab57f718b79d4aca9254457afecd36fa80228" + integrity sha512-kS/gEPzZs3Y1rRsbGX4UOSjtP/CeJP0CxSNZHYxGfVM/VgLcv0ZqM7C45YyTj2DI2g7+P9Dd24C+IMIg6D0nYQ== + +electron-to-chromium@^1.3.247: + version "1.3.267" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.267.tgz#7745ff9d447fd2a9802e1c6dfa518631e0cf5357" + integrity sha512-9Q2ixAJC+oHjWNtJV0MQ4vJMCWSowIrC6V6vcr+bwPddTDHj2ddv9xxXCzf4jT/fy6HP7maPoW0gifXkRxCttQ== + +elliptic@^6.0.0: + version "6.5.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.1.tgz#c380f5f909bf1b9b4428d028cd18d3b0efd6b52b" + integrity sha512-xvJINNLbTeWQjrl6X+7eQCrIy/YPv5XCpKW6kB5mKvtnGILoLDcySuwomfdzt0BMdLNVnuRNTuzKNHj0bva1Cg== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" + integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== + +entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" + integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== + +envify@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/envify/-/envify-4.1.0.tgz#f39ad3db9d6801b4e6b478b61028d3f0b6819f7e" + integrity sha512-IKRVVoAYr4pIx4yIWNsz9mOsboxlNXiu7TNBnem/K/uTHdkyzXWDzHCK7UTolqBbgaBz0tQHsD3YNls0uIIjiw== + dependencies: + esprima "^4.0.0" + through "~2.3.4" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.12.0, es-abstract@^1.5.1: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.1.0: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +eslint-scope@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +esutils@^2.0.0, esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +eval@^0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.4.tgz#e05dbe0dab4b9330215cbb7bf4886eb24bd58700" + integrity sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw== + dependencies: + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +events@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= + +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= + dependencies: + original ">=0.0.5" + +eventsource@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0" + integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ== + dependencies: + original "^1.0.0" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +express@^4.16.3, express@^4.17.1: + version "4.17.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" + integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== + dependencies: + accepts "~1.3.7" + array-flatten "1.1.1" + body-parser "1.19.0" + content-disposition "0.5.3" + content-type "~1.0.4" + cookie "0.4.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "~1.1.2" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.5" + qs "6.7.0" + range-parser "~1.2.1" + safe-buffer "5.1.2" + send "0.17.1" + serve-static "1.14.1" + setprototypeof "1.1.1" + statuses "~1.5.0" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^2.0.4: + version "2.2.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A== + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-glob@^2.0.2: + version "2.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" + integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.1.2" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.3" + micromatch "^3.1.10" + +fast-glob@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.0.4.tgz#d484a41005cb6faeb399b951fd1bd70ddaebb602" + integrity sha512-wkIbV6qg37xTJwqSsdnIphL1e+LaGz4AIQqr00mIubMaEhv1/HEmJ0uuCGZRNRUkZZmOB5mJKO0ZUTVq+SxMQg== + dependencies: + "@nodelib/fs.stat" "^2.0.1" + "@nodelib/fs.walk" "^1.2.1" + glob-parent "^5.0.0" + is-glob "^4.0.1" + merge2 "^1.2.3" + micromatch "^4.0.2" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fastq@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" + integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== + dependencies: + reusify "^1.0.0" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0, faye-websocket@~0.11.1: + version "0.11.3" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e" + integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA== + dependencies: + websocket-driver ">=0.5.1" + +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +filesize@3.5.11: + version "3.5.11" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee" + integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g== + +filesize@3.6.1, filesize@^3.6.1: + version "3.6.1" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" + integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-cache-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.0.0.tgz#cd4b7dd97b7185b7e17dbfe2d6e4115ee3eeb8fc" + integrity sha512-t7ulV1fmbxh5G9l/492O1p5+EBbr3uwpt6odhFTMc+nWyhmbloe+ja9BZ8pIBtqFWhOmCWVjx+pTW4zDkFoclw== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.0" + pkg-dir "^4.1.0" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I= + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" + +follow-redirects@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.9.0.tgz#8d5bcdc65b7108fe1508649c79c12d732dcedb4f" + integrity sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A== + dependencies: + debug "^3.0.0" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +fork-ts-checker-webpack-plugin@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" + integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== + dependencies: + babel-code-frame "^6.22.0" + chalk "^2.4.1" + chokidar "^2.0.4" + micromatch "^3.1.10" + minimatch "^3.0.4" + semver "^5.6.0" + tapable "^1.0.0" + worker-rpc "^0.1.0" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-minipass@^1.2.5: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@^1.2.7: + version "1.2.9" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.9.tgz#3f5ed66583ccd6f400b5a00db6f7e861363e388f" + integrity sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw== + dependencies: + nan "^2.12.1" + node-pre-gyp "^0.12.0" + +fsevents@^2.0.6: + version "2.0.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.0.7.tgz#382c9b443c6cbac4c57187cdda23aa3bf1ccfc2a" + integrity sha512-a7YT0SV3RB+DjYcppwVDLtn13UQnmg0SWZS7ezZD0UjnLwXmy8Zm21GMVGLaFGimIqcvyMQaOJBrop8MyOp1kQ== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203" + integrity sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg== + +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +github-slugger@^1.0.0, github-slugger@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.1.tgz#47e904e70bf2dccd0014748142d31126cfd49508" + integrity sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= + +glob@^7.0.0, glob@^7.0.3, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@1.0.0, global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-modules@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +global@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.2.tgz#5697619ccd95c5275dbb2d6faa42087c1a941d8d" + integrity sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w== + dependencies: + array-union "^1.0.1" + dir-glob "2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22" + integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +good-listener@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= + dependencies: + delegate "^3.1.2" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gud@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0" + integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== + +gzip-size@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" + integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA= + dependencies: + duplexer "^0.1.1" + +gzip-size@5.1.1, gzip-size@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274" + integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA== + dependencies: + duplexer "^0.1.1" + pify "^4.0.1" + +handle-thing@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" + integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.0, has@^1.0.1, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hast-to-hyperscript@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-7.0.2.tgz#e9237c88c6069999ad38aec847fefc296f484c4c" + integrity sha512-NBMMst0hkDR21uSH75m9W2DkljBrLoMQEhGiLMLNij4HIzEDJMC1UG+CFR6EAjHi2zs3NHBoaAHJOHxftoIN2g== + dependencies: + comma-separated-tokens "^1.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.2.1" + unist-util-is "^3.0.0" + web-namespaces "^1.1.2" + +hast-util-from-parse5@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz#7da8841d707dcf7be73715f7f3b14e021c4e469a" + integrity sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA== + dependencies: + ccount "^1.0.3" + hastscript "^5.0.0" + property-information "^5.0.0" + web-namespaces "^1.1.2" + xtend "^4.0.1" + +hast-util-parse-selector@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.2.tgz#66aabccb252c47d94975f50a281446955160380b" + integrity sha512-jIMtnzrLTjzqgVEQqPEmwEZV+ea4zHRFTP8Z2Utw0I5HuBOXHzUPPQWr6ouJdJqDKLbFU/OEiYwZ79LalZkmmw== + +hast-util-raw@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-5.0.1.tgz#b39539cf4b9f7ccdc131f72a583502a7911b99ee" + integrity sha512-iHo7G6BjRc/GU1Yun5CIEXjil0wVnIbz11C6k0JdDichSDMtYi2+NNtk6YN7EOP0JfPstX30d3pRLfaJv5CkdA== + dependencies: + hast-util-from-parse5 "^5.0.0" + hast-util-to-parse5 "^5.0.0" + html-void-elements "^1.0.1" + parse5 "^5.0.0" + unist-util-position "^3.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hast-util-to-parse5@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-5.1.1.tgz#cabf2dbe9ed988a5128fc708457b37cdf535a2e8" + integrity sha512-ivCeAd5FCXr7bapJIVsWMnx/EmbjkkW2TU2hd1prq+jGwiaUoK+FcpjyPNwsC5ogzCwWO669tOqIovGeLc/ntg== + dependencies: + hast-to-hyperscript "^7.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.1" + zwitch "^1.0.0" + +hastscript@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-5.1.0.tgz#a19b3cca6a26a2bcd0f1b1eac574af9427c1c7df" + integrity sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ== + dependencies: + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.2.0" + property-information "^5.0.1" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hex-color-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" + integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hogan.js@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/hogan.js/-/hogan.js-3.0.2.tgz#4cd9e1abd4294146e7679e41d7898732b02c7bfd" + integrity sha1-TNnhq9QpQUbnZ55B14mHMrAse/0= + dependencies: + mkdirp "0.3.0" + nopt "1.0.10" + +hoist-non-react-statics@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" + integrity sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA== + dependencies: + react-is "^16.7.0" + +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + +hoopy@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/hoopy/-/hoopy-0.1.4.tgz#609207d661100033a9a9402ad3dea677381c1b1d" + integrity sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ== + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI= + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +hsl-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" + integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= + +hsla-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" + integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= + +html-comment-regex@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" + integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== + +html-entities@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= + +html-minifier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-4.0.0.tgz#cca9aad8bce1175e02e17a8c33e46d8988889f56" + integrity sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig== + dependencies: + camel-case "^3.0.0" + clean-css "^4.2.1" + commander "^2.19.0" + he "^1.2.0" + param-case "^2.1.1" + relateurl "^0.2.7" + uglify-js "^3.5.1" + +html-void-elements@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.4.tgz#95e8bb5ecd6b88766569c2645f2b5f1591db9ba5" + integrity sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ== + +html-webpack-plugin@^4.0.0-beta.7: + version "4.0.0-beta.8" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.8.tgz#d9a8d4322d8cf310f1568f6f4f585a80df0ad378" + integrity sha512-n5S2hJi3/vioRvEDswZP2WFgZU8TUqFoYIrkg5dt+xDC4TigQEhIcl4Y81Qs2La/EqKWuJZP8+ikbHGVmzQ4Mg== + dependencies: + html-minifier "^4.0.0" + loader-utils "^1.2.3" + lodash "^4.17.11" + pretty-error "^2.1.1" + tapable "^1.1.3" + util.promisify "1.0.0" + +htmlparser2@^3.3.0, htmlparser2@^3.9.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" + integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== + dependencies: + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +"http-parser-js@>=0.4.0 <0.4.11": + version "0.4.10" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= + +http-proxy-middleware@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a" + integrity sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q== + dependencies: + http-proxy "^1.17.0" + is-glob "^4.0.0" + lodash "^4.17.11" + micromatch "^3.1.10" + +http-proxy@^1.17.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-utils@^4.0.0, icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.2.tgz#99d83a246c196ea5c93ef9315ad7b0819c35069b" + integrity sha512-EXyErtpHbn75ZTsOADsfx6J/FPo6/5cjev46PXrcTpd8z3BoRkXgYu9/JVqrI7tusjmwCZutGeRJeU0Wo1e4Cw== + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== + +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + +immediate@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.2.3.tgz#d140fa8f614659bd6541233097ddaac25cdd991c" + integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= + +immer@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" + integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= + +infer-owner@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +infima@0.2.0-alpha.2: + version "0.2.0-alpha.2" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.2.tgz#cfba3bcf5cd8f54cdfa47850d000ce6967a12c57" + integrity sha512-lCcCTjhQfjV/f1D34/T8BtjxslcLRxkUQdKoYv79CWk8OEPeEr24lyfVUhPyIJkgSeQZ35RSKam0GusIsxI++w== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +inquirer@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@6.5.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" + integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + +internal-ip@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-4.3.0.tgz#845452baad9d2ca3b69c635a137acb9a0dad0907" + integrity sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg== + dependencies: + default-gateway "^4.2.0" + ipaddr.js "^1.9.0" + +interpret@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +ipaddr.js@1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.0.tgz#37df74e430a0e47550fe54a2defe30d8acd95f65" + integrity sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA== + +ipaddr.js@^1.9.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= + +is-absolute-url@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.2.tgz#554f2933e7385cc46e94351977ca2081170a206e" + integrity sha512-+5g/wLlcm1AcxSP7014m6GvbPHswDx980vD/3bZaap8aGV9Yfs7Q6y6tfaupgZ5O74Byzc8dGrSCJ+bFXx0KdA== + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + +is-alphabetical@1.0.3, is-alphabetical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" + integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== + +is-alphanumerical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" + integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-arguments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" + integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + +is-binary-path@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== + +is-ci@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-color-stop@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" + integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= + dependencies: + css-color-names "^0.0.4" + hex-color-regex "^1.1.0" + hsl-regex "^1.0.0" + hsla-regex "^1.0.0" + rgb-regex "^1.0.1" + rgba-regex "^1.0.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= + +is-decimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" + integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" + integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.0, is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= + +is-path-cwd@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-in-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz#bfe2dca26c69f397265a4009963602935a053acb" + integrity sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ== + dependencies: + is-path-inside "^2.1.0" + +is-path-inside@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-2.1.0.tgz#7c9810587d659a40d27bcdb4d5616eab059494b2" + integrity sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg== + dependencies: + path-is-inside "^1.0.2" + +is-plain-obj@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.0.0.tgz#7fd1a7f1b69e160cde9181d2313f445c68aa2679" + integrity sha512-EYisGhpgSCwspmIuRHGjROWTon2Xp8Z7U03Wubk/bTL5TTRC5R1rGVgyjzBrk9+ULdH6cRD06KRcw/xfqhVYKQ== + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= + dependencies: + has "^1.0.1" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= + +is-resolvable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== + +is-root@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5" + integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU= + +is-root@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-svg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" + integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + dependencies: + has-symbols "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-what@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.3.1.tgz#79502181f40226e2d8c09226999db90ef7c1bcbe" + integrity sha512-seFn10yAXy+yJlTRO+8VfiafC+0QJanGLMPTBWLrJm/QPauuchy0UXh8B6H5o9VA8BAzk0iYievt6mNp6gfaqA== + +is-whitespace-character@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" + integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== + +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +is-word-character@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" + integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isarray@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + +js-yaml@^3.11.0, js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +json3@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" + integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +killable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== + +last-call-webpack-plugin@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555" + integrity sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w== + dependencies: + lodash "^4.17.5" + webpack-sources "^1.1.0" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + +load-script@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/load-script/-/load-script-1.0.0.tgz#0491939e0bee5643ee494a7e3da3d2bac70c6ca4" + integrity sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ= + +loader-runner@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash._reinterpolate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= + +lodash.assignin@^4.0.9: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" + integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= + +lodash.bind@^4.1.4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" + integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU= + +lodash.chunk@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" + integrity sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw= + +lodash.defaults@^4.0.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" + integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= + +lodash.filter@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" + integrity sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4= + +lodash.flatten@^4.2.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash.foreach@^4.3.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" + integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM= + +lodash.map@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" + integrity sha1-dx7Hg540c9nEzeKLGTlMNWL09tM= + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.merge@^4.4.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.padstart@^4.6.1: + version "4.6.1" + resolved "https://registry.yarnpkg.com/lodash.padstart/-/lodash.padstart-4.6.1.tgz#d2e3eebff0d9d39ad50f5cbd1b52a7bce6bb611b" + integrity sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs= + +lodash.pick@^4.2.1: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" + integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM= + +lodash.reduce@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" + integrity sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs= + +lodash.reject@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" + integrity sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU= + +lodash.some@^4.4.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" + integrity sha1-G7nzFO9ri63tE7VJFpsqlF62jk0= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash.template@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" + integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== + dependencies: + lodash._reinterpolate "^3.0.0" + lodash.templatesettings "^4.0.0" + +lodash.templatesettings@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" + integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== + dependencies: + lodash._reinterpolate "^3.0.0" + +lodash.toarray@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" + integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= + +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +loglevel@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.4.tgz#f408f4f006db8354d0577dcf6d33485b3cb90d56" + integrity sha512-p0b6mOGKcGa+7nnmKbpzR6qloPbrgLcnio++E+14Vo/XffOGwZtRpUhr8dTH/x2oCMmEoIU0Zwm3ZauhvYD17g== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.0.tgz#1b5f39f6b9270ed33f9f054c5c0f84304989f801" + integrity sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw== + dependencies: + semver "^6.0.0" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + +markdown-escapes@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" + integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +mdast-squeeze-paragraphs@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-3.0.5.tgz#f428b6b944f8faef454db9b58f170c4183cb2e61" + integrity sha512-xX6Vbe348Y/rukQlG4W3xH+7v4ZlzUbSY4HUIQCuYrF2DrkcHx584mCaFxkWoDZKNUfyLZItHC9VAqX3kIP7XA== + dependencies: + unist-util-remove "^1.0.0" + +mdast-util-definitions@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz#2b54ad4eecaff9d9fcb6bf6f9f6b68b232d77ca7" + integrity sha512-HfUArPog1j4Z78Xlzy9Q4aHLnrF/7fb57cooTHypyGoe2XFNbcx/kWZDoOz+ra8CkUzvg3+VHV434yqEd1DRmA== + dependencies: + unist-util-visit "^1.0.0" + +mdast-util-to-hast@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-6.0.2.tgz#24a8791b7c624118637d70f03a9d29116e4311cf" + integrity sha512-GjcOimC9qHI0yNFAQdBesrZXzUkRdFleQlcoU8+TVNfDW6oLUazUx8MgUoTaUyCJzBOnE5AOgqhpURrSlf0QwQ== + dependencies: + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^1.2.0" + mdurl "^1.0.1" + trim "0.0.1" + trim-lines "^1.0.0" + unist-builder "^1.0.1" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^1.1.0" + xtend "^4.0.1" + +mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz#7d85421021343b33de1552fc71cb8e5b4ae7536d" + integrity sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdn-data@~1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01" + integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA== + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memoize-one@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" + integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== + +memory-fs@^0.4.0, memory-fs@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-anything@^2.2.4: + version "2.4.1" + resolved "https://registry.yarnpkg.com/merge-anything/-/merge-anything-2.4.1.tgz#e9bccaec1e49ec6cb5f77ca78c5770d1a35315e6" + integrity sha512-dYOIAl9GFCJNctSIHWOj9OJtarCjsD16P8ObCl6oxrujAG+kOvlwJuOD9/O9iYZ9aTi1RGpGTG9q9etIvuUikQ== + dependencies: + is-what "^3.3.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= + +merge2@^1.2.3: + version "1.3.0" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" + integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= + +microevent.ts@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/microevent.ts/-/microevent.ts-0.1.1.tgz#70b09b83f43df5172d0205a63025bce0f7357fa0" + integrity sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g== + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +mime-db@1.40.0: + version "1.40.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" + integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== + +"mime-db@>= 1.40.0 < 2": + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.24" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" + integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + dependencies: + mime-db "1.40.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.4.4: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU= + dependencies: + dom-walk "^0.1.0" + +mini-create-react-context@^0.3.0: + version "0.3.2" + resolved "https://registry.yarnpkg.com/mini-create-react-context/-/mini-create-react-context-0.3.2.tgz#79fc598f283dd623da8e088b05db8cddab250189" + integrity sha512-2v+OeetEyliMt5VHMXsBhABoJ0/M4RCe7fatd/fBy6SMiKazUSEt3gxxypfnk2SHMkdBYvorHRoQxuGoiwbzAw== + dependencies: + "@babel/runtime" "^7.4.0" + gud "^1.0.0" + tiny-warning "^1.0.2" + +mini-css-extract-plugin@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.0.tgz#81d41ec4fe58c713a96ad7c723cdb2d0bd4d70e1" + integrity sha512-MNpRGbNA52q6U92i0qbVpQNsgk7LExy41MdAlG84FeytfDOtRIf/mCHdEgG8rpTKOaNKiqUnZdlptF469hxqOw== + dependencies: + loader-utils "^1.1.0" + normalize-url "1.9.1" + schema-utils "^1.0.0" + webpack-sources "^1.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= + dependencies: + brace-expansion "^1.0.0" + +minimatch@3.0.4, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= + +minipass@^2.6.0, minipass@^2.8.6: + version "2.8.6" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.8.6.tgz#620d889ace26356391d010ecb9458749df9b6db5" + integrity sha512-lFG7d6g3+/UaFDCOtqPiKAC9zngWWsQZl1g5q6gaONqrjq61SX2xFqXMleQiFVyDpYwa018E9hmlAFY22PCb+A== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.2.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.2.tgz#5d24764998f98112586f7e566bd4c0999769dad4" + integrity sha512-lsNFqSHdJ21EwKzCp12HHJGxSMtHkCW1EMA9cceG3MkMNARjuWotZnMe3NKNshAvFXpm4loZqmYsCmRwhS2JMw== + dependencies: + minipass "^2.9.0" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + integrity sha1-G79asbqCevI1dRQ0kEJkVfSB/h4= + +mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE= + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g== + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= + +nan@^2.12.1: + version "2.14.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" + integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +needle@^2.2.1: + version "2.4.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" + integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== + dependencies: + debug "^3.2.6" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +neo-async@^2.5.0, neo-async@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-emoji@^1.8.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" + integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + dependencies: + lodash.toarray "^4.4.0" + +node-forge@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.8.2.tgz#b4bcc59fb12ce77a8825fc6a783dfe3182499c5a" + integrity sha512-mXQ9GBq1N3uDCyV1pdSzgIguwgtVpM7f5/5J4ipz12PKWElmPpVWLDuWl8iXmhysr21+WmX/OJ5UKx82wjomgg== + +node-libs-browser@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-pre-gyp@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz#39ba4bb1439da030295f899e3b520b7785766149" + integrity sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A== + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^1.1.29: + version "1.1.32" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.32.tgz#485b35c1bf9b4d8baa105d782f8ca731e518276e" + integrity sha512-VhVknkitq8dqtWoluagsGPn3dxTvN9fwgR59fV3D7sLBHe0JfDramsMI8n8mY//ccq/Kkrf8ZRHRpsyVZ3qw1A== + dependencies: + semver "^5.3.0" + +nopt@1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +normalize-url@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" + integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.4" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" + integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha1-y480xTIT2JVyP8urkH6UIq28r7E= + +nth-check@^1.0.2, nth-check@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +null-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" + integrity sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw== + dependencies: + loader-utils "^1.2.3" + schema-utils "^1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" + integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== + +object-is@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" + integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.0, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= + dependencies: + isobject "^3.0.1" + +object.values@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.0.tgz#bf6810ef5da3e5325790eaaa2be213ea84624da9" + integrity sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.12.0" + function-bind "^1.1.1" + has "^1.0.3" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +open@^6.3.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" + integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== + dependencies: + is-wsl "^1.1.0" + +opener@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" + integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== + +opn@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225" + integrity sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ== + dependencies: + is-wsl "^1.1.0" + +opn@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc" + integrity sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA== + dependencies: + is-wsl "^1.1.0" + +optimize-css-assets-webpack-plugin@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz#e2f1d4d94ad8c0af8967ebd7cf138dcb1ef14572" + integrity sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA== + dependencies: + cssnano "^4.1.10" + last-call-webpack-plugin "^3.0.0" + +original@>=0.0.5, original@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg== + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +p-retry@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-3.0.1.tgz#316b4c8893e2c8dc1cfa891f406c4b422bebf328" + integrity sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w== + dependencies: + retry "^0.12.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== + dependencies: + cyclist "^1.0.1" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-asn1@^5.0.0: + version "5.1.5" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" + integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + +parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + +parse5@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= + +path-to-regexp@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= + dependencies: + isarray "0.0.1" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" + integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= + dependencies: + find-up "^2.1.0" + +portfinder@^1.0.21, portfinder@^1.0.24: + version "1.0.24" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.24.tgz#11efbc6865f12f37624b6531ead1d809ed965cfa" + integrity sha512-ekRl7zD2qxYndYflwiryJwMioBI7LI7rVXg3EnLK3sjkouT5eOuhS3gS255XxBksa30VG8UPZYZCdgfGOfkSUg== + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + +postcss-attribute-case-insensitive@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz#b2a721a0d279c2f9103a36331c88981526428cc7" + integrity sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0" + +postcss-calc@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.1.tgz#36d77bab023b0ecbb9789d84dcb23c4941145436" + integrity sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ== + dependencies: + css-unit-converter "^1.1.1" + postcss "^7.0.5" + postcss-selector-parser "^5.0.0-rc.4" + postcss-value-parser "^3.3.1" + +postcss-color-functional-notation@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz#5efd37a88fbabeb00a2966d1e53d98ced93f74e0" + integrity sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-gray@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz#532a31eb909f8da898ceffe296fdc1f864be8547" + integrity sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-color-hex-alpha@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz#a8d9ca4c39d497c9661e374b9c51899ef0f87388" + integrity sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw== + dependencies: + postcss "^7.0.14" + postcss-values-parser "^2.0.1" + +postcss-color-mod-function@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz#816ba145ac11cc3cb6baa905a75a49f903e4d31d" + integrity sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-color-rebeccapurple@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz#c7a89be872bb74e45b1e3022bfe5748823e6de77" + integrity sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-colormin@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" + integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== + dependencies: + browserslist "^4.0.0" + color "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-convert-values@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" + integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-custom-media@^7.0.8: + version "7.0.8" + resolved "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz#fffd13ffeffad73621be5f387076a28b00294e0c" + integrity sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg== + dependencies: + postcss "^7.0.14" + +postcss-custom-properties@^8.0.11: + version "8.0.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz#2d61772d6e92f22f5e0d52602df8fae46fa30d97" + integrity sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA== + dependencies: + postcss "^7.0.17" + postcss-values-parser "^2.0.1" + +postcss-custom-selectors@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz#64858c6eb2ecff2fb41d0b28c9dd7b3db4de7fba" + integrity sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-dir-pseudo-class@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz#6e3a4177d0edb3abcc85fdb6fbb1c26dabaeaba2" + integrity sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-discard-comments@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" + integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== + dependencies: + postcss "^7.0.0" + +postcss-discard-duplicates@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" + integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== + dependencies: + postcss "^7.0.0" + +postcss-discard-empty@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" + integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== + dependencies: + postcss "^7.0.0" + +postcss-discard-overridden@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" + integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== + dependencies: + postcss "^7.0.0" + +postcss-double-position-gradients@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz#fc927d52fddc896cb3a2812ebc5df147e110522e" + integrity sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA== + dependencies: + postcss "^7.0.5" + postcss-values-parser "^2.0.0" + +postcss-env-function@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-env-function/-/postcss-env-function-2.0.2.tgz#0f3e3d3c57f094a92c2baf4b6241f0b0da5365d7" + integrity sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-focus-visible@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz#477d107113ade6024b14128317ade2bd1e17046e" + integrity sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g== + dependencies: + postcss "^7.0.2" + +postcss-focus-within@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz#763b8788596cee9b874c999201cdde80659ef680" + integrity sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w== + dependencies: + postcss "^7.0.2" + +postcss-font-variant@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz#71dd3c6c10a0d846c5eda07803439617bbbabacc" + integrity sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg== + dependencies: + postcss "^7.0.2" + +postcss-gap-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz#431c192ab3ed96a3c3d09f2ff615960f902c1715" + integrity sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg== + dependencies: + postcss "^7.0.2" + +postcss-image-set-function@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz#28920a2f29945bed4c3198d7df6496d410d3f288" + integrity sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-initial@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-initial/-/postcss-initial-3.0.1.tgz#99d319669a13d6c06ef8e70d852f68cb1b399b61" + integrity sha512-I2Sz83ZSHybMNh02xQDK609lZ1/QOyYeuizCjzEhlMgeV/HcDJapQiH4yTqLjZss0X6/6VvKFXUeObaHpJoINw== + dependencies: + lodash.template "^4.5.0" + postcss "^7.0.2" + +postcss-lab-function@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz#bb51a6856cd12289ab4ae20db1e3821ef13d7d2e" + integrity sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg== + dependencies: + "@csstools/convert-colors" "^1.4.0" + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-load-config@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" + integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + +postcss-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-3.0.0.tgz#6b97943e47c72d845fa9e03f273773d4e8dd6c2d" + integrity sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA== + dependencies: + loader-utils "^1.1.0" + postcss "^7.0.0" + postcss-load-config "^2.0.0" + schema-utils "^1.0.0" + +postcss-logical@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-3.0.0.tgz#2495d0f8b82e9f262725f75f9401b34e7b45d5b5" + integrity sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA== + dependencies: + postcss "^7.0.2" + +postcss-media-minmax@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz#b75bb6cbc217c8ac49433e12f22048814a4f5ed5" + integrity sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw== + dependencies: + postcss "^7.0.2" + +postcss-merge-longhand@^4.0.11: + version "4.0.11" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" + integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== + dependencies: + css-color-names "0.0.4" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + stylehacks "^4.0.0" + +postcss-merge-rules@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" + integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + cssnano-util-same-parent "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + vendors "^1.0.0" + +postcss-minify-font-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" + integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-gradients@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" + integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + is-color-stop "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-minify-params@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" + integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== + dependencies: + alphanum-sort "^1.0.0" + browserslist "^4.0.0" + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + uniqs "^2.0.0" + +postcss-minify-selectors@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" + integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== + dependencies: + alphanum-sort "^1.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +postcss-modules-extract-imports@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz#818719a1ae1da325f9832446b01136eeb493cd7e" + integrity sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ== + dependencies: + postcss "^7.0.5" + +postcss-modules-local-by-default@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz#e8a6561be914aaf3c052876377524ca90dbb7915" + integrity sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ== + dependencies: + icss-utils "^4.1.1" + postcss "^7.0.16" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.0.0" + +postcss-modules-scope@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz#ad3f5bf7856114f6fcab901b0502e2a2bc39d4eb" + integrity sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + +postcss-modules-values@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" + integrity sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg== + dependencies: + icss-utils "^4.0.0" + postcss "^7.0.6" + +postcss-nesting@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + +postcss-normalize-charset@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" + integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== + dependencies: + postcss "^7.0.0" + +postcss-normalize-display-values@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" + integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-positions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" + integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== + dependencies: + cssnano-util-get-arguments "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-repeat-style@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" + integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== + dependencies: + cssnano-util-get-arguments "^4.0.0" + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-string@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" + integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== + dependencies: + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-timing-functions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" + integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== + dependencies: + cssnano-util-get-match "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-unicode@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" + integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-url@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" + integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-normalize-whitespace@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" + integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== + dependencies: + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-ordered-values@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" + integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== + dependencies: + cssnano-util-get-arguments "^4.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-overflow-shorthand@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz#31ecf350e9c6f6ddc250a78f0c3e111f32dd4c30" + integrity sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g== + dependencies: + postcss "^7.0.2" + +postcss-page-break@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-2.0.0.tgz#add52d0e0a528cabe6afee8b46e2abb277df46bf" + integrity sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ== + dependencies: + postcss "^7.0.2" + +postcss-place@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-place/-/postcss-place-4.0.1.tgz#e9f39d33d2dc584e46ee1db45adb77ca9d1dcc62" + integrity sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg== + dependencies: + postcss "^7.0.2" + postcss-values-parser "^2.0.0" + +postcss-preset-env@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz#c34ddacf8f902383b35ad1e030f178f4cdf118a5" + integrity sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg== + dependencies: + autoprefixer "^9.6.1" + browserslist "^4.6.4" + caniuse-lite "^1.0.30000981" + css-blank-pseudo "^0.1.4" + css-has-pseudo "^0.10.0" + css-prefers-color-scheme "^3.1.1" + cssdb "^4.4.0" + postcss "^7.0.17" + postcss-attribute-case-insensitive "^4.0.1" + postcss-color-functional-notation "^2.0.1" + postcss-color-gray "^5.0.0" + postcss-color-hex-alpha "^5.0.3" + postcss-color-mod-function "^3.0.3" + postcss-color-rebeccapurple "^4.0.1" + postcss-custom-media "^7.0.8" + postcss-custom-properties "^8.0.11" + postcss-custom-selectors "^5.1.2" + postcss-dir-pseudo-class "^5.0.0" + postcss-double-position-gradients "^1.0.0" + postcss-env-function "^2.0.2" + postcss-focus-visible "^4.0.0" + postcss-focus-within "^3.0.0" + postcss-font-variant "^4.0.0" + postcss-gap-properties "^2.0.0" + postcss-image-set-function "^3.0.1" + postcss-initial "^3.0.0" + postcss-lab-function "^2.0.1" + postcss-logical "^3.0.0" + postcss-media-minmax "^4.0.0" + postcss-nesting "^7.0.0" + postcss-overflow-shorthand "^2.0.0" + postcss-page-break "^2.0.0" + postcss-place "^4.0.1" + postcss-pseudo-class-any-link "^6.0.0" + postcss-replace-overflow-wrap "^3.0.0" + postcss-selector-matches "^4.0.0" + postcss-selector-not "^4.0.0" + +postcss-pseudo-class-any-link@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz#2ed3eed393b3702879dec4a87032b210daeb04d1" + integrity sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew== + dependencies: + postcss "^7.0.2" + postcss-selector-parser "^5.0.0-rc.3" + +postcss-reduce-initial@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" + integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== + dependencies: + browserslist "^4.0.0" + caniuse-api "^3.0.0" + has "^1.0.0" + postcss "^7.0.0" + +postcss-reduce-transforms@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" + integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== + dependencies: + cssnano-util-get-match "^4.0.0" + has "^1.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + +postcss-replace-overflow-wrap@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz#61b360ffdaedca84c7c918d2b0f0d0ea559ab01c" + integrity sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw== + dependencies: + postcss "^7.0.2" + +postcss-selector-matches@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz#71c8248f917ba2cc93037c9637ee09c64436fcff" + integrity sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-not@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz#c68ff7ba96527499e832724a2674d65603b645c0" + integrity sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ== + dependencies: + balanced-match "^1.0.0" + postcss "^7.0.2" + +postcss-selector-parser@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= + dependencies: + dot-prop "^4.1.1" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^5.0.0, postcss-selector-parser@^5.0.0-rc.3, postcss-selector-parser@^5.0.0-rc.4: + version "5.0.0" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz#249044356697b33b64f1a8f7c80922dddee7195c" + integrity sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ== + dependencies: + cssesc "^2.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" + integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + dependencies: + cssesc "^3.0.0" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" + integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== + dependencies: + is-svg "^3.0.0" + postcss "^7.0.0" + postcss-value-parser "^3.0.0" + svgo "^1.0.0" + +postcss-unique-selectors@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" + integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== + dependencies: + alphanum-sort "^1.0.0" + postcss "^7.0.0" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + +postcss-value-parser@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" + integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== + +postcss-values-parser@^2.0.0, postcss-values-parser@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz#da8b472d901da1e205b47bdc98637b9e9e550e5f" + integrity sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg== + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233" + integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + +pretty-error@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-0.1.7.tgz#dc273d0cb6e4a498ba0775094e9a8b01a3ad2eaa" + integrity sha512-EhnM0sYfLK103ASK0ViSv0rta//ZGB0dBA9TiFyOvA+zOj5peLmGEG01sLEDwl9sMe+gSqncInafBe1VFTCMvA== + +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prop-types@^15.5.0, prop-types@^15.5.4, prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" + integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.8.1" + +property-information@^5.0.0, property-information@^5.0.1: + version "5.2.2" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.2.2.tgz#20555eafd2296278a682e5a51d5123e7878ecc30" + integrity sha512-N2moasZmjn2mjVGIWpaqz5qnz6QyeQSGgGvMtl81gA9cPTWa6wpesRSe/quNnOjUHpvSH1oZx0pdz0EEckLFnA== + dependencies: + xtend "^4.0.1" + +proxy-addr@~2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" + integrity sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ== + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.9.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.24: + version "1.4.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.4.0.tgz#5dd26156cdb69fa1fdb8ab1991667d3f80ced7c2" + integrity sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystring-es3@^0.2.0, querystring-es3@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-dev-utils@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.3.tgz#92f97668f03deb09d7fa11ea288832a8c756e35e" + integrity sha512-Mvs6ofsc2xTjeZIrMaIfbXfsPVrbdVy/cVqq6SAacnqfMlcBpDuivhWZ1ODGeJ8HgmyWTLH971PYjj/EPCDVAw== + dependencies: + address "1.0.3" + babel-code-frame "6.26.0" + chalk "1.1.3" + cross-spawn "5.1.0" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.5.11" + global-modules "1.0.0" + gzip-size "3.0.0" + inquirer "3.3.0" + is-root "1.0.0" + opn "5.2.0" + react-error-overlay "^4.0.1" + recursive-readdir "2.2.1" + shell-quote "1.6.1" + sockjs-client "1.1.5" + strip-ansi "3.0.1" + text-table "0.2.0" + +react-dev-utils@^9.0.1: + version "9.0.4" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.0.4.tgz#5c71a8e8afdec0232c44d4e049d21baa437a92af" + integrity sha512-VwR+mBUXPLdYk/rOz6s6qpasIFGd7GW0KXd/3bih+/qGcMQvPG19XxtjDMtiAg0zWiFwp1ugCzAjLThbzFjVqw== + dependencies: + "@babel/code-frame" "7.5.5" + address "1.1.2" + browserslist "4.7.0" + chalk "2.4.2" + cross-spawn "6.0.5" + detect-port-alt "1.1.6" + escape-string-regexp "1.0.5" + filesize "3.6.1" + find-up "3.0.0" + fork-ts-checker-webpack-plugin "1.5.0" + global-modules "2.0.0" + globby "8.0.2" + gzip-size "5.1.1" + immer "1.10.0" + inquirer "6.5.0" + is-root "2.1.0" + loader-utils "1.2.3" + open "^6.3.0" + pkg-up "2.0.0" + react-error-overlay "^6.0.2" + recursive-readdir "2.2.2" + shell-quote "1.7.2" + sockjs-client "1.4.0" + strip-ansi "5.2.0" + text-table "0.2.0" + +react-dom@^16.8.4: + version "16.10.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.10.0.tgz#319356767b5c044f3c016eef28518ef7726dce84" + integrity sha512-0QJQUFrKG04hB/1lWyUs/FOd1qNseKGRQI+JBRsADIqVAFxYObhZ2zsVQKjt+nVSCmi8KA0sL52RLwwWuXQtOw== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + scheduler "^0.16.0" + +react-error-overlay@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.1.tgz#417addb0814a90f3a7082eacba7cee588d00da89" + integrity sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw== + +react-error-overlay@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.2.tgz#642bd6157c6a4b6e9ca4a816f7ed30b868c47f81" + integrity sha512-DHRuRk3K4Lg9obI6J4Y+nKvtwjasYRU9CFL3ud42x9YJG1HbQjSNublapC/WBJOA726gNUbqbj0U2df9+uzspQ== + +react-fast-compare@^2.0.2: + version "2.0.4" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" + integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== + +react-helmet@^6.0.0-beta: + version "6.0.0-beta" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-6.0.0-beta.tgz#1f2ac04521951486e4fce3296d0c88aae8cabd5c" + integrity sha512-GnNWsokebTe7fe8MH2I/a2dl4THYWhthLBoMaQSRYqW5XbPo881WAJGi+lqRBjyOFryW6zpQluEkBy70zh+h9w== + dependencies: + object-assign "^4.1.1" + prop-types "^15.5.4" + react-fast-compare "^2.0.2" + react-side-effect "^1.1.0" + +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.10.0" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.10.0.tgz#3d6a031e57fff73c3cfa0347feb3e8f40c5141e5" + integrity sha512-WRki2sBb7MTpYp7FtDEmSeGKX2vamYyq3rc9o7fKUG+/DHVyJu69NnvJsiSwwhh2Tt8XN40MQHkDBEXwyfxncQ== + +react-loadable-ssr-addon@^0.1.9: + version "0.1.9" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.1.9.tgz#c134275fd36637a554f6438a0b78e0d1f70a8260" + integrity sha512-mjk0ykDmmgPvkoFVwjbhev/VtarlpdR7B9FzuFFxtviFWVjaL8ddw4J89uFvUkC1KtFmXdQ6BF7yzUB54QqmXg== + +react-loadable@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/react-loadable/-/react-loadable-5.5.0.tgz#582251679d3da86c32aae2c8e689c59f1196d8c4" + integrity sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg== + dependencies: + prop-types "^15.5.0" + +react-router-config@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.1.1.tgz#53caa089c291f64c1d597a52827b978b54d7c25d" + integrity sha512-r8R8H0Vt2ISqpk02rR6VZBLk+JZdR6pZV+h9K1y0ISh3/G4GGByNevYBS69x6czcOcWVRcZmXjwY8l9UBCKV+w== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.1.1" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.1.1, react-router@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.1.tgz#9d65f54795f938c0c5b69eaeef58728134ce7c7c" + integrity sha512-ozTXqxKZsn4GfZqpG5rVFHSSxlNuDoMNxgyjM+mFJVhqlnPwwkRsAPkDm1PcNjBdYxMzqAhtz48HkQB6fSYaAQ== + dependencies: + "@babel/runtime" "^7.1.2" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + mini-create-react-context "^0.3.0" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-side-effect@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.2.0.tgz#0e940c78faba0c73b9b0eba9cd3dda8dfb7e7dae" + integrity sha512-v1ht1aHg5k/thv56DRcjw+WtojuuDHFUgGfc+bFHOWsF4ZK6C2V57DO0Or0GPsg6+LSTE0M6Ry/gfzhzSwbc5w== + dependencies: + shallowequal "^1.0.1" + +react-toggle@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/react-toggle/-/react-toggle-4.0.2.tgz#77f487860efb87fafd197672a2db8c885be1440f" + integrity sha512-EPTWnN7gQHgEAUEmjheanZXNzY5TPnQeyyHfEs3YshaiWZf5WNjfYDrglO5F1Hl/dNveX18i4l0grTEsYH2Ccw== + dependencies: + classnames "^2.2.5" + +react@^16.8.4: + version "16.10.0" + resolved "https://registry.yarnpkg.com/react/-/react-16.10.0.tgz#95c41e8fc1c706e174deef54b663b5ab94c8ee32" + integrity sha512-lc37bD3j6ZWJRso/a1rrFu6CO1qOf30ZadUDBi1c5RHA1lBSWA8x2MGABB6Oikk+RfmgC+kAT+XegL0eD1ecKg== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + prop-types "^15.6.2" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6, readable-stream@^3.1.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" + integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +readdirp@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.1.2.tgz#fa85d2d14d4289920e4671dead96431add2ee78a" + integrity sha512-8rhl0xs2cxfVsqzreYCvs8EwBfn/DhVdqtoLmw19uI3SC5avYX9teCurlErfpPXGmYtMHReGaP2RsLnFvz/lnw== + dependencies: + picomatch "^2.0.4" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= + dependencies: + resolve "^1.1.6" + +recursive-readdir@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99" + integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk= + dependencies: + minimatch "3.0.3" + +recursive-readdir@2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.2.tgz#9946fb3274e1628de6e36b2f6714953b4845094f" + integrity sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg== + dependencies: + minimatch "3.0.4" + +reduce@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce/-/reduce-1.0.2.tgz#0cd680ad3ffe0b060e57a5c68bdfce37168d361b" + integrity sha512-xX7Fxke/oHO5IfZSk77lvPa/7bjMh9BuCk4OOoX5XTXrM7s0Z+MkPfSDfz0q7r91BhhGSs8gii/VEN/7zhCPpQ== + dependencies: + object-keys "^1.1.0" + +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regenerator-runtime@^0.13.2: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" + integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== + +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.2.0.tgz#6b30724e306a27833eeb171b66ac8890ba37e41c" + integrity sha512-ztaw4M1VqgMwl9HlPpOuiYgItcHlunW0He2fE6eNfT6E/CF2FtYi9ofOYe4mKntstYk0Fyh/rDRBdS3AnxjlrA== + dependencies: + define-properties "^1.1.2" + +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.0.tgz#a7634dc08f89209c2049adda3525711fb97265dd" + integrity sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA== + +regjsparser@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.0.tgz#f1e6ae8b7da2bae96c99399b868cd6c933a2ba9c" + integrity sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= + +remark-emoji@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.0.2.tgz#49c134021132c192ee4cceed1988ec9b8ced7eb8" + integrity sha512-E8ZOa7Sx1YS9ivWJ8U9xpA8ldzZ4VPAfyUaKqhr1/Pr5Q8ZdQHrpDg6S+rPzMw8t89KNViB/oG9ZdJSFDrUXpA== + dependencies: + node-emoji "^1.8.1" + unist-util-visit "^1.4.0" + +remark-mdx@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.5.0.tgz#780541b0455ab7432dbb8501be32aa7734b1f441" + integrity sha512-eeYUHFAkfsX+zGDQ8iMjsIGWRvco9x//P6OOemYTnXhqlcnn3Xo2kcxsMX9ibvBtX+/qwZ/i+juDnMe5Buu0Xw== + dependencies: + "@babel/core" "7.6.0" + "@babel/helper-plugin-utils" "7.0.0" + "@babel/plugin-proposal-object-rest-spread" "7.5.5" + "@babel/plugin-syntax-jsx" "7.2.0" + "@mdx-js/util" "^1.5.0" + is-alphabetical "1.0.3" + remark-parse "7.0.1" + unified "8.3.2" + +remark-parse@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-7.0.1.tgz#0c13d67e0d7b82c2ad2d8b6604ec5fae6c333c2b" + integrity sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-slug@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-5.1.2.tgz#715ecdef8df1226786204b1887d31ab16aa24609" + integrity sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A== + dependencies: + github-slugger "^1.0.0" + mdast-util-to-string "^1.0.0" + unist-util-visit "^1.0.0" + +remark-squeeze-paragraphs@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-3.0.4.tgz#9fe50c3bf3b572dd88754cd426ada007c0b8dc5f" + integrity sha512-Wmz5Yj9q+W1oryo8BV17JrOXZgUKVcpJ2ApE2pwnoHwhFKSk4Wp2PmFNbmJMgYSqAdFwfkoe+TSYop5Fy8wMgA== + dependencies: + mdast-squeeze-paragraphs "^3.0.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +renderkid@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" + integrity sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA== + dependencies: + css-select "^1.1.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" + strip-ansi "^3.0.0" + utila "^0.4.0" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.5.4, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +replace-ext@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= + +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha1-rW8wwTvs15cBDEaK+ndcDAprR/o= + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo= + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.1.6, resolve@^1.3.2: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= + +reusify@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rgb-regex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" + integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= + +rgba-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" + integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= + +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + +run-parallel@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" + integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + +rx@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/rx/-/rx-4.1.0.tgz#a5f13ff79ef3b740fe30aa803fb09f98805d4782" + integrity sha1-pfE/957zt0D+MKqAP7CfmIBdR4I= + +rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.16.0.tgz#cc8914b79c5c1cfa16714cb1ddc4cbd2c7513efa" + integrity sha512-Jq59uCXQzi71B562VEjuDgvsgfTfkLDvdjNhA7hamN/fKBxecXIEFF24Zu4OVrnAz9NJJ8twa9X16Zp4b0P/xQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +schema-utils@^2.0.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.4.1.tgz#e89ade5d056dc8bcaca377574bb4a9c4e1b8be56" + integrity sha512-RqYLpkPZX5Oc3fw/kHHHyP56fg5Y+XBpIpV8nCg0znIALfq3OH+Ea9Hfeac9BAMwG5IICltiZ0vxFvJQONfA5w== + dependencies: + ajv "^6.10.2" + ajv-keywords "^3.4.1" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo= + +select@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= + +selfsigned@^1.10.6: + version "1.10.6" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.6.tgz#7b3cd37ed9c2034261a173af1a1aae27d8169b67" + integrity sha512-i3+CeqxL7DpAazgVpAGdKMwHuL63B5nhJMh9NQ7xmChGkA3jNFflq6Jyo1LLJYcr3idWiNOPWHCrm4zMayLG4w== + dependencies: + node-forge "0.8.2" + +semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +send@0.17.1: + version "0.17.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serialize-javascript@^1.7.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz#cfc200aef77b600c47da9bb8149c943e798c2fdb" + integrity sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A== + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.14.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +set-blocking@^2.0.0, set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +shallowequal@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + +shell-quote@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= + dependencies: + array-filter "~0.0.0" + array-map "~0.0.0" + array-reduce "~0.0.0" + jsonify "~0.0.0" + +shell-quote@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" + integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== + +shelljs@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097" + integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= + +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + +sitemap@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-3.2.2.tgz#3f77c358fa97b555c879e457098e39910095c62b" + integrity sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg== + dependencies: + lodash.chunk "^4.2.0" + lodash.padstart "^4.6.1" + whatwg-url "^7.0.0" + xmlbuilder "^13.0.0" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== + dependencies: + is-fullwidth-code-point "^2.0.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" + integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM= + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs-client@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.4.0.tgz#c9f2568e19c8fd8173b4997ea3420e0bb306c7d5" + integrity sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g== + dependencies: + debug "^3.2.5" + eventsource "^1.0.7" + faye-websocket "~0.11.1" + inherits "^2.0.3" + json3 "^3.3.2" + url-parse "^1.4.3" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + integrity sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE= + +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA== + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@~0.5.12: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.3: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" + integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" + integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +stack-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== + +state-toggle@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" + integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +static-site-generator-webpack-plugin@^3.4.2: + version "3.4.2" + resolved "https://registry.yarnpkg.com/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-3.4.2.tgz#ad9fd0a4fb8b6f439a7a66018320b459bdb6d916" + integrity sha512-39Kn+fZDVjolLYuX5y1rDvksJIW0QEUaEC/AVO/UewNXxGzoSQI1UYnRsL+ocAcN5Yti6d6rJgEL0qZ5tNXfdw== + dependencies: + bluebird "^3.0.5" + cheerio "^0.22.0" + eval "^0.1.0" + url "^0.11.0" + webpack-sources "^0.2.0" + +"statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +std-env@^1.1.0, std-env@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-1.3.1.tgz#4e1758412439e9ece1d437b1b098551911aa44ee" + integrity sha512-KI2F2pPJpd3lHjng+QLezu0eq+QDtXcv1um016mhOPAJFHKL+09ykK5PUBWta2pZDC8BVV0VPya08A15bUXSLQ== + dependencies: + is-ci "^1.1.0" + +std-env@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-2.2.1.tgz#2ffa0fdc9e2263e0004c1211966e960948a40f6b" + integrity sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ== + dependencies: + ci-info "^1.6.0" + +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@5.2.0, strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +style-loader@^0.23.1: + version "0.23.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.23.1.tgz#cb9154606f3e771ab6c4ab637026a1049174d925" + integrity sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg== + dependencies: + loader-utils "^1.1.0" + schema-utils "^1.0.0" + +style-to-object@0.2.3, style-to-object@^0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.2.3.tgz#afcf42bc03846b1e311880c55632a26ad2780bcb" + integrity sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng== + dependencies: + inline-style-parser "0.1.1" + +styled-components@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.0.tgz#4e381e2dab831d0e6ea431c2840a96323e84e21b" + integrity sha512-xQ6vTI/0zNjZ1BBDRxyjvBddrxhQ3DxjeCdaLM1lSn5FDnkTOQgRkmWvcUiTajqc5nJqKVl+7sUioMqktD0+Zw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@emotion/is-prop-valid" "^0.8.1" + "@emotion/unitless" "^0.7.0" + babel-plugin-styled-components ">= 1" + css-to-react-native "^2.2.2" + memoize-one "^5.0.0" + merge-anything "^2.2.4" + prop-types "^15.5.4" + react-is "^16.6.0" + stylis "^3.5.0" + stylis-rule-sheet "^0.0.10" + supports-color "^5.5.0" + +stylehacks@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" + integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== + dependencies: + browserslist "^4.0.0" + postcss "^7.0.0" + postcss-selector-parser "^3.0.0" + +stylis-rule-sheet@^0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" + integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw== + +stylis@^3.5.0: + version "3.5.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" + integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +svgo@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313" + integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.33" + csso "^3.5.1" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +table@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" + integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg== + dependencies: + ajv "^6.0.1" + ajv-keywords "^3.0.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^1.0.0, tapable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.8.6" + minizlib "^1.2.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.3" + +terser-webpack-plugin@^1.3.0, terser-webpack-plugin@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" + integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg== + dependencies: + cacache "^12.0.2" + find-cache-dir "^2.1.0" + is-wsl "^1.1.0" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.1.2" + webpack-sources "^1.4.0" + worker-farm "^1.7.0" + +terser@^4.1.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.3.4.tgz#ad91bade95619e3434685d69efa621a5af5f877d" + integrity sha512-Kcrn3RiW8NtHBP0ssOAzwa2MsIRQ8lJWiBG/K7JgqPlomA3mtb2DEmp4/hrUA+Jujx+WZ02zqd7GYD+QRBB/2Q== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +text-table@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@~2.3.4: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +thunky@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826" + integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow== + +timers-browserify@^2.0.4: + version "2.0.11" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.11.tgz#800b1f3eee272e5bc53ee465a04d0e804c31211f" + integrity sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ== + dependencies: + setimmediate "^1.0.4" + +timsort@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" + integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= + +tiny-emitter@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" + integrity sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q== + +tiny-invariant@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" + integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== + +tiny-warning@^1.0.0, tiny-warning@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-factory@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-factory/-/to-factory-1.0.0.tgz#8738af8bd97120ad1d4047972ada5563bf9479b1" + integrity sha1-hzivi9lxIK0dQEeXKtpVY7+UebE= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +trim-lines@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.2.tgz#c8adbdbdae21bb5c2766240a661f693afe23e59b" + integrity sha512-3GOuyNeTqk3FAqc3jOJtw7FTjYl94XBR5aD9QnDbK/T4CA9sW/J0l9RoaRPE9wyPP7NF331qnHnvJFBJ+IDkmQ== + +trim-trailing-lines@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" + integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" + integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== + +tryer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" + integrity sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA== + +tslib@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== + +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-is@~1.6.17, type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uglify-js@^3.5.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + +unherit@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" + integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + +unified@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-8.3.2.tgz#aed69d0e577d6ef27268431c63a10faef60e63ab" + integrity sha512-NDtUAXcd4c+mKppCbsZHzmhkKEQuhveZNBrFYmNgMIMk2K9bc8hmG3mLEGVtRmSNodobwyMePAnvIGVWZfPdzQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unist-builder@1.0.4, unist-builder@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" + integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== + dependencies: + object-assign "^4.1.0" + +unist-util-generated@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.4.tgz#2261c033d9fc23fae41872cdb7663746e972c1a7" + integrity sha512-SA7Sys3h3X4AlVnxHdvN/qYdr4R38HzihoEVY2Q2BZu8NHWDnw5OGcC/tXWjQfd4iG+M6qRFNIRGqJmp2ez4Ww== + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-is@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.0.0.tgz#85672993f0d88a8bffb45137aba003ee8da11a38" + integrity sha512-E5JLUKRQlAYiJmN2PVBdSz01R3rUKRSM00X+0DB/yLqxdLu6wZZkRdTIsxDp9X+bkxh8Eq+O2YYRbZvLZtQT1A== + +unist-util-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.3.tgz#fff942b879538b242096c148153826664b1ca373" + integrity sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw== + +unist-util-remove-position@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" + integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-remove@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-1.0.3.tgz#58ec193dfa84b52d5a055ffbc58e5444eb8031a3" + integrity sha512-mB6nCHCQK0pQffUAcCVmKgIWzG/AXs/V8qpS8K72tMPtOSCMSjDeMc5yN+Ye8rB0FhcE+JvW++o1xRNc0R+++g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz#de2a2bc8d3febfa606652673a91455b6a36fb9f3" + integrity sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit-parents@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.0.0.tgz#dd4cdcd86d505ec7a81bdc01bc790f9def742bee" + integrity sha512-H3K8d81S4V3XVXVwLvrLGk+R5VILryfUotD06/R/rLsTsPLGjkn6gIP8qEEVITcuIySNYj0ocJLsePjm9F/Vcg== + dependencies: + "@types/unist" "^2.0.3" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.0.tgz#1fdae5ea88251651bfe49b7e84390d664fc227c5" + integrity sha512-kiTpWKsF54u/78L/UU/i7lxrnqGiEWBgqCpaIZBYP0gwUC+Akq0Ajm4U8JiNIoQNfAioBdsyarnOcTEAb9mLeQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.4.0, unist-util-visit@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== + dependencies: + unist-util-visit-parents "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.7" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.7.tgz#a8a83535e8c00a316e403a5db4ac1b9b853ae278" + integrity sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +util.promisify@1.0.0, util.promisify@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +utila@^0.4.0, utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= + +vendors@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.3.tgz#a6467781abd366217c050f8202e7e50cc9eef8c0" + integrity sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vfile-location@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" + integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== + +vfile-message@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.1.tgz#951881861c22fc1eb39f873c0b93e336a64e8f6d" + integrity sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw== + dependencies: + "@types/unist" "^2.0.2" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.1.tgz#fc3d43a1c71916034216bf65926d5ee3c64ed60c" + integrity sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== + +wait-file@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/wait-file/-/wait-file-1.0.3.tgz#ff160e86afe73adf928863a0d2d0e56c23dec476" + integrity sha512-VW0YDpT7WrkPQ23EgsiHxQB2nTC3evlcJs6ve8XqbCL9K/QDZz+yb2IyZx3hb6vg+fbFFVZgd7FSystWw0dj8g== + dependencies: + "@hapi/joi" "^15.1.0" + fs-extra "^8.1.0" + rx "^4.1.0" + +watchpack@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0, web-namespaces@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.3.tgz#9bbf5c99ff0908d2da031f1d732492a96571a83f" + integrity sha512-r8sAtNmgR0WKOKOxzuSgk09JsHlpKlB+uHi937qypOu3PZ17UxPrierFKDye/uNHjNTTEshu5PId8rojIPj/tA== + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +webpack-bundle-analyzer@^3.3.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.5.2.tgz#ac02834f4b31de8e27d71e6c7a612301ebddb79f" + integrity sha512-g9spCNe25QYUVqHRDkwG414GTok2m7pTTP0wr6l0J50Z3YLS04+BGodTqqoVBL7QfU/U/9p/oiI5XFOyfZ7S/A== + dependencies: + acorn "^6.0.7" + acorn-walk "^6.1.1" + bfj "^6.1.1" + chalk "^2.4.1" + commander "^2.18.0" + ejs "^2.6.1" + express "^4.16.3" + filesize "^3.6.1" + gzip-size "^5.0.0" + lodash "^4.17.15" + mkdirp "^0.5.1" + opener "^1.5.1" + ws "^6.0.0" + +webpack-dev-middleware@^3.7.1: + version "3.7.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" + integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-server@^3.7.2: + version "3.8.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.8.1.tgz#485b64c4aadc23f601e72114b40c1b1fea31d9f1" + integrity sha512-9F5DnfFA9bsrhpUCAfQic/AXBVHvq+3gQS+x6Zj0yc1fVVE0erKh2MV4IV12TBewuTrYeeTIRwCH9qLMvdNvTw== + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.1.8" + compression "^1.7.4" + connect-history-api-fallback "^1.6.0" + debug "^4.1.1" + del "^4.1.1" + express "^4.17.1" + html-entities "^1.2.1" + http-proxy-middleware "^0.19.1" + import-local "^2.0.0" + internal-ip "^4.3.0" + ip "^1.1.5" + is-absolute-url "^3.0.2" + killable "^1.0.1" + loglevel "^1.6.4" + opn "^5.5.0" + p-retry "^3.0.1" + portfinder "^1.0.24" + schema-utils "^1.0.0" + selfsigned "^1.10.6" + semver "^6.3.0" + serve-index "^1.9.1" + sockjs "0.3.19" + sockjs-client "1.4.0" + spdy "^4.0.1" + strip-ansi "^3.0.1" + supports-color "^6.1.0" + url "^0.11.0" + webpack-dev-middleware "^3.7.1" + webpack-log "^2.0.0" + ws "^6.2.1" + yargs "12.0.5" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + integrity sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg== + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-merge@^4.2.1: + version "4.2.2" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.2.2.tgz#a27c52ea783d1398afd2087f547d7b9d2f43634d" + integrity sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g== + dependencies: + lodash "^4.17.15" + +webpack-nicelog@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/webpack-nicelog/-/webpack-nicelog-2.3.1.tgz#35141251ad959df0c39069021de39b47b55cf65b" + integrity sha512-mk+yWcn/1t6Q1B8ZMLu54/LNam0ufQhVPiZNlYIhmIFM3kmHb1QrhGCSSUVdfe8YK9MQnUKBLOq7jtTnXLgUYg== + dependencies: + chalk "^2.4.1" + react-dev-utils "^5.0.1" + webpackbar "^2.6.1" + +webpack-sources@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + integrity sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s= + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + +webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.36.1: + version "4.41.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.0.tgz#db6a254bde671769f7c14e90a1a55e73602fc70b" + integrity sha512-yNV98U4r7wX1VJAj5kyMsu36T8RPPQntcb5fJLOsMz/pt/WrKC0Vp1bAlqPLkA1LegSwQwf6P+kAbyhRKVQ72g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.2.1" + ajv "^6.10.2" + ajv-keywords "^3.4.1" + chrome-trace-event "^1.0.2" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.3" + json-parse-better-errors "^1.0.2" + loader-runner "^2.4.0" + loader-utils "^1.2.3" + memory-fs "^0.4.1" + micromatch "^3.1.10" + mkdirp "^0.5.1" + neo-async "^2.6.1" + node-libs-browser "^2.2.1" + schema-utils "^1.0.0" + tapable "^1.1.3" + terser-webpack-plugin "^1.4.1" + watchpack "^1.6.0" + webpack-sources "^1.4.1" + +webpackbar@^2.6.1: + version "2.6.4" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-2.6.4.tgz#9118dde6b8f513a2d50ce630952157bca9218c6f" + integrity sha512-uQzJwuX172E+Vnk2NRFSM1hZBMCXd2CIpRUl1hr5tbAndTGVnDmYXQKHsbgbCKQXFJKKAl8EHYsdeauJZu2Qvg== + dependencies: + chalk "^2.4.1" + consola "^1.4.3" + figures "^2.0.0" + loader-utils "^1.1.0" + lodash "^4.17.10" + log-update "^2.3.0" + pretty-time "^1.1.0" + schema-utils "^1.0.0" + std-env "^1.3.1" + table "^4.0.3" + +websocket-driver@>=0.5.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" + integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== + dependencies: + http-parser-js ">=0.4.0 <0.4.11" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.14, which@^1.2.9, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + +worker-rpc@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/worker-rpc/-/worker-rpc-0.1.1.tgz#cb565bd6d7071a8f16660686051e969ad32f54d5" + integrity sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg== + dependencies: + microevent.ts "~0.1.1" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^6.0.0, ws@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" + integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== + dependencies: + async-limiter "~1.0.0" + +xmlbuilder@^13.0.0: + version "13.0.2" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7" + integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ== + +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.0.tgz#906cc2100972dc2625ae78f566a2577230a1d6f7" + integrity sha512-6gpP93MR+VOOehKbCPchro3wFZNSNmek8A2kbkOAZLIZAYx1KP/zAqwO0sOHi3xJEb+UBz8NaYt/17UNit1Q9w== + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs@12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + +zepto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/zepto/-/zepto-1.2.0.tgz#e127bd9e66fd846be5eab48c1394882f7c0e4f98" + integrity sha1-4Se9nmb9hGvl6rSME5SIL3wOT5g= + +zwitch@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.4.tgz#93b1b993b13c8926753a41afaf8f27bbfac6be8b" + integrity sha512-YO803/X+13GNaZB7fVopjvHH0uWQKgJkgKnU1YCjxShjKGVuN9PPHHW8g+uFDpkHpSTNi3rCMKMewIcbC1BAYg== From ea046e7d7c13f8cdbb12ef326852b67945d99f69 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 29 Sep 2019 20:40:45 +0200 Subject: [PATCH 108/891] Fix docs build --- website/src/{pages => }/components/CodeExample.js | 2 +- .../{pages => }/components/CreateNativeApps.js | 0 website/src/{pages => }/components/Features.js | 2 +- website/src/{pages => }/components/Hero.js | 2 +- .../index.js => components/SplitView.js} | 4 ++-- website/src/{pages => }/components/Try.js | 2 +- website/src/{pages => }/components/common.js | 0 .../styles.modules.css => components/styles.css} | 0 website/src/pages/index.js | 15 +++++++-------- website/src/pages/styles.module.css | 7 ------- 10 files changed, 13 insertions(+), 21 deletions(-) rename website/src/{pages => }/components/CodeExample.js (94%) rename website/src/{pages => }/components/CreateNativeApps.js (100%) rename website/src/{pages => }/components/Features.js (97%) rename website/src/{pages => }/components/Hero.js (97%) rename website/src/{pages/components/SplitView/index.js => components/SplitView.js} (84%) rename website/src/{pages => }/components/Try.js (95%) rename website/src/{pages => }/components/common.js (100%) rename website/src/{pages/components/SplitView/styles.modules.css => components/styles.css} (100%) mode change 100755 => 100644 website/src/pages/index.js diff --git a/website/src/pages/components/CodeExample.js b/website/src/components/CodeExample.js similarity index 94% rename from website/src/pages/components/CodeExample.js rename to website/src/components/CodeExample.js index bbf93bd6f0..7e92126c26 100644 --- a/website/src/pages/components/CodeExample.js +++ b/website/src/components/CodeExample.js @@ -1,5 +1,5 @@ import React from "react"; -import { SplitView } from "./SplitView"; +import { SplitView } from "../components/SplitView"; import styled from "styled-components"; const Image = styled.img` diff --git a/website/src/pages/components/CreateNativeApps.js b/website/src/components/CreateNativeApps.js similarity index 100% rename from website/src/pages/components/CreateNativeApps.js rename to website/src/components/CreateNativeApps.js diff --git a/website/src/pages/components/Features.js b/website/src/components/Features.js similarity index 97% rename from website/src/pages/components/Features.js rename to website/src/components/Features.js index 170e0ca957..793f545171 100644 --- a/website/src/pages/components/Features.js +++ b/website/src/components/Features.js @@ -1,6 +1,6 @@ import React from "react"; import withBaseUrl from "@docusaurus/withBaseUrl"; -import styles from "../styles.module.css"; +import styles from "../pages/styles.module.css"; import classnames from "classnames"; const features = [ diff --git a/website/src/pages/components/Hero.js b/website/src/components/Hero.js similarity index 97% rename from website/src/pages/components/Hero.js rename to website/src/components/Hero.js index 29b563c2f6..0dc3e18306 100644 --- a/website/src/pages/components/Hero.js +++ b/website/src/components/Hero.js @@ -2,7 +2,7 @@ import React from "react"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; import styled from "styled-components"; import { Header, Container, H1, Center } from "./common"; -import styles from "../styles.module.css"; +import styles from "../pages/styles.module.css"; import withBaseUrl from "@docusaurus/withBaseUrl"; const ActionButton = styled.a` diff --git a/website/src/pages/components/SplitView/index.js b/website/src/components/SplitView.js similarity index 84% rename from website/src/pages/components/SplitView/index.js rename to website/src/components/SplitView.js index 9532ef8a54..6b5d17d8dd 100644 --- a/website/src/pages/components/SplitView/index.js +++ b/website/src/components/SplitView.js @@ -1,5 +1,5 @@ -import { Section } from "../common"; -import "./styles.modules.css"; +import { Section } from "./common"; +import "./styles.css"; import React from "react"; export const SplitView = props => { diff --git a/website/src/pages/components/Try.js b/website/src/components/Try.js similarity index 95% rename from website/src/pages/components/Try.js rename to website/src/components/Try.js index ea184efacd..e6121eaf63 100644 --- a/website/src/pages/components/Try.js +++ b/website/src/components/Try.js @@ -1,6 +1,6 @@ import React from "react"; import styled from "styled-components"; -import { Section, Container, Center, H2, H4 } from "./common"; +import { Section, Container, Center, H2, H4 } from "../components/common"; const Code = styled.code` color: white !important; diff --git a/website/src/pages/components/common.js b/website/src/components/common.js similarity index 100% rename from website/src/pages/components/common.js rename to website/src/components/common.js diff --git a/website/src/pages/components/SplitView/styles.modules.css b/website/src/components/styles.css similarity index 100% rename from website/src/pages/components/SplitView/styles.modules.css rename to website/src/components/styles.css diff --git a/website/src/pages/index.js b/website/src/pages/index.js old mode 100755 new mode 100644 index 585be59e75..b65c0ba459 --- a/website/src/pages/index.js +++ b/website/src/pages/index.js @@ -1,12 +1,12 @@ import React from "react"; -import Layout from "@theme/Layout"; import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; - -import { Try } from "./components/Try"; -import { Hero } from "./components/Hero"; -import { Features } from "./components/Features"; -import { CreateNativeApps } from "./components/CreateNativeApps"; -import { CodeExample } from "./components/CodeExample"; +import Layout from "@theme/Layout"; +import { Try } from "../components/Try"; +import { Hero } from "../components/Hero"; +import { Features } from "../components/Features"; +import { CreateNativeApps } from "../components/CreateNativeApps"; +import { CodeExample } from "../components/CodeExample"; +import "./styles.module.css"; function Home() { const context = useDocusaurusContext(); @@ -26,5 +26,4 @@ function Home() { ); } - export default Home; diff --git a/website/src/pages/styles.module.css b/website/src/pages/styles.module.css index b84aeed1d7..caeec63c59 100755 --- a/website/src/pages/styles.module.css +++ b/website/src/pages/styles.module.css @@ -1,10 +1,3 @@ -/** - * Copyright (c) 2017-present, Facebook, Inc. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - /** * CSS files with the .module.css suffix will be treated as CSS modules * and scoped locally. From 90d927df0a42a92495cfef9a24a8e87d3c3f0191 Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 29 Sep 2019 21:19:24 +0200 Subject: [PATCH 109/891] removes old docs --- docs/.nojekyll | 0 docs/CNAME | 1 - docs/README.md | 75 --------- docs/_coverpage.md | 11 -- docs/development/README.md | 48 ------ docs/development/common_errors.md | 7 - docs/development/debugging.md | 11 -- docs/development/getting-started.md | 113 ------------- docs/development/setting-up.md | 55 ------- docs/development/signal_and_event_handling.md | 150 ------------------ docs/development/styling.md | 100 ------------ docs/development/wrapping_widgets.md | 3 - docs/faq.md | 62 -------- docs/images/demo.png | Bin 132876 -> 0 bytes docs/images/nodegui.svg | 5 - docs/index.html | 71 --------- docs/react/README.md | 69 -------- docs/react/about.md | 17 -- docs/react/first-app.md | 116 -------------- docs/tutorial/about.md | 23 --- docs/tutorial/application-architecture.md | 104 ------------ docs/tutorial/debugging-app-vscode.md | 38 ----- docs/tutorial/debugging-app.md | 54 ------- docs/tutorial/development-environment.md | 99 ------------ docs/tutorial/first-app.md | 120 -------------- docs/tutorial/support.md | 34 ---- docs/tutorial/using-native-node-modules.md | 52 ------ 27 files changed, 1438 deletions(-) delete mode 100644 docs/.nojekyll delete mode 100644 docs/CNAME delete mode 100644 docs/README.md delete mode 100644 docs/_coverpage.md delete mode 100644 docs/development/README.md delete mode 100644 docs/development/common_errors.md delete mode 100644 docs/development/debugging.md delete mode 100644 docs/development/getting-started.md delete mode 100644 docs/development/setting-up.md delete mode 100644 docs/development/signal_and_event_handling.md delete mode 100644 docs/development/styling.md delete mode 100644 docs/development/wrapping_widgets.md delete mode 100644 docs/faq.md delete mode 100644 docs/images/demo.png delete mode 100644 docs/images/nodegui.svg delete mode 100644 docs/index.html delete mode 100644 docs/react/README.md delete mode 100644 docs/react/about.md delete mode 100644 docs/react/first-app.md delete mode 100644 docs/tutorial/about.md delete mode 100644 docs/tutorial/application-architecture.md delete mode 100644 docs/tutorial/debugging-app-vscode.md delete mode 100644 docs/tutorial/debugging-app.md delete mode 100644 docs/tutorial/development-environment.md delete mode 100644 docs/tutorial/first-app.md delete mode 100644 docs/tutorial/support.md delete mode 100644 docs/tutorial/using-native-node-modules.md diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/docs/CNAME b/docs/CNAME deleted file mode 100644 index 334ded21ee..0000000000 --- a/docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -docs.nodegui.org \ No newline at end of file diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 6649221257..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# main doc - -> Looking for React NodeGUI docs? [React NodeGUI docs](react/README.md) - -# Guides and Tutorials - -- [About NodeGui](tutorial/about.md) -- [React NodeGUI](react/README.md) -- [Examples](https://github.com/nodegui/nodegui/tree/master/examples) -- [FAQ](faq.md) -- [Setting up the Development Environment](tutorial/development-environment.md) - - [Setting up macOS](tutorial/development-environment.md#setting-up-macos) - - [Setting up Windows](tutorial/development-environment.md#setting-up-windows) - - [Setting up Linux](tutorial/development-environment.md#setting-up-linux) - - [Choosing an Editor](tutorial/development-environment.md#a-good-editor) -- [Creating your First App](tutorial/first-app.md) - - [Hello World](tutorial/first-app.md#Hello-World) - - [NodeGui Development in a Nutshell](tutorial/first-app.md#NodeGui-development-in-a-nutshell) - - [Running Your App](tutorial/first-app.md#running-your-app) -- [Application Architecture](tutorial/application-architecture.md) - - [Qode](tutorial/application-architecture.md#qode) - - [Using NodeGui's APIs](tutorial/application-architecture.md#using-NodeGui-apis) - - [Using Node.js APIs](tutorial/application-architecture.md#using-nodejs-apis) - - [Using Native Node.js Modules](tutorial/using-native-node-modules.md) -- [Testing and Debugging](tutorial/debugging-app.md) - - [Debugging Qode/NodeGui Process](tutorial/debugging-qode-process.md) - - [Debugging a NodeGui app with Visual Studio Code](tutorial/debugging-app-vscode.md) -- [Distribution](http://github.com/nodegui/packer) -- [Getting Support](tutorial/support.md) - -## API References - -- [Synopsis](api/synopsis.md) -- [Process Object](api/process.md) - -### Modules from NodeGui: - -- [QApplication (Application)](api/QApplication.md) -- [QMainWindow (Window)](api/QMainWindow.md) -- [QWidget (View)](api/QWidget.md) -- [QSpinBox ()](api/QSpinBox.md) -- [QAbstractScrollArea ()](api/QAbstractScrollArea.md) -- [QAbstractSlider ()](api/QAbstractSlider.md) -- [QDial ()](api/QDial.md) -- [QScrollArea ()](api/QScrollArea.md) -- [QPlainTextEdit (TextEdit)](api/QPlainTextEdit.md) -- [QLabel (Text/Image)](api/QLabel.md) -- [QPushButton (Button)](api/QPushButton.md) -- [QRadioButton (RadioButton)](api/QRadioButton.md) -- [QCheckBox (CheckBox)](api/QCheckBox.md) -- [QLineEdit (LineEdit)](api/QLineEdit.md) -- [QProgressBar (ProgressBar)](api/QProgressBar.md) -- [FlexLayout](api/FlexLayout.md) -- [QPixmap](api/QPixmap.md) -- [QIcon](api/QIcon.md) -- [QCursor](api/QCursor.md) -- [QClipboard](api/QClipboard.md) -- [Qt Enums](api/QtEnums.md) - -### Internal Modules - -- [NodeWidget](api/NodeWidget.md) -- [NodeLayout](api/NodeLayout.md) -- [EventWidget](api/EventWidget.md) -- [Component](api/Component.md) -- [YogaWidget](api/YogaWidget.md) - -## Usage - -- [Events usage](todo) -- [Yoga properties using stylesheet usage](todo) - -## Development/Contributor's Guide - -See [development](development/README.md) diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index a7056247d3..0000000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,11 +0,0 @@ -

- -

NodeGui / React NodeGUI

-
-

An open source library for building cross-platform native desktop applications with JavaScript and CSS like styling.

-

-NodeGui is based on Qt5 and NOT chromium, hence it is memory and cpu efficient. React NodeGui is a React renderer for NodeGui. -

-demo - -

diff --git a/docs/development/README.md b/docs/development/README.md deleted file mode 100644 index 1f800a76ca..0000000000 --- a/docs/development/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# Contributor's guide - -This guide is for everyone who want's to contribute to the development of NodeGui. - -Please make sure you have read the [User's guides](/) before reading this guide. - -- [Setting up the NodeGui Contributor's Environment](development/setting-up.md) - - [Setting up macOS](development/setting-up.md#macosx) - - [Setting up Windows](development/setting-up.md#windows) - - [Setting up Linux](development/setting-up.md#linux) -- [Getting started](development/getting-started.md) - - [Code Structure](development/getting-started.md#Code-Structure) - - [Wrapping a widget: TLDR version](development/getting-started.md#Wrapping-a-widget) - - [Learning Materials](development/getting-started.md#Learning-Materials) -- [Styling](development/styling.md) - - [Painting](development/styling.md#painting) - - [Layout](development/styling.md#layout) -- [Signal and Event Handling](development/signal_and_event_handling.md) -- [Debugging](development/debugging.md) -- [Common Errors](development/common_errors.md) -- [Wrapping a Widget: Detailed](development/wrapping_widgets.md) -- [Getting Support](tutorial/support.md) - - -# Where to start or How can you help? - - You can follow the contributors guide above to get a gist. - - It is fairly straightforward to get started. I would start with a project of my own and start adding missing functionalities. - - Or simply put I would recommend you start by adding an unexported method to an existing widget. - - **For example:** - - You could add the corresponding Qt method to QProgressbar - https://doc.qt.io/qt-5/qprogressbar.html#textVisible-prop to get a grip on it. - - This PR can be used as a guide - - https://github.com/nodegui/nodegui/issues/36 - - https://github.com/nodegui/nodegui/pull/39 - - You can also take a look at few bugs or the issue board here to know what you can pick up if you are out of ideas. - - https://github.com/nodegui/nodegui/projects/ - - https://github.com/nodegui/react-nodegui/projects/ diff --git a/docs/development/common_errors.md b/docs/development/common_errors.md deleted file mode 100644 index 2489f57aa0..0000000000 --- a/docs/development/common_errors.md +++ /dev/null @@ -1,7 +0,0 @@ -# Common errors - -1. **Segmentation fault:** Segmentation fault occurs when you access a Pointer that is pointing to an invalid memory address. One major reason for this can be that JS garbage collector would have garbage collected the addon generated value and you try accessing it after a while. This is mostly the case if you see seg fault happening randomly after some time of startup. - -2. **Widget not visible in Flex layout** Widget might have gotten zero height/width. This can occur if yoga was not able to get the default height/width of the widget. Make sure you have implemented - `YGNodeSetMeasureFunc(this->instance->getFlexNode(), &extrautils::measureQtWidget);` - if its a leaf node widget(doesnt contain any children). diff --git a/docs/development/debugging.md b/docs/development/debugging.md deleted file mode 100644 index aa31e25ad9..0000000000 --- a/docs/development/debugging.md +++ /dev/null @@ -1,11 +0,0 @@ -# debugging - -## Debugging JS - -// TODO - -## Debugging C++ - -https://medium.com/@atulanand94/debugging-nodejs-c-addons-using-vs-code-27e9940fc3ad - -https://medium.com/cameron-nokes/how-to-debug-native-node-addons-in-mac-osx-66f69f81afcb diff --git a/docs/development/getting-started.md b/docs/development/getting-started.md deleted file mode 100644 index fbe60e7237..0000000000 --- a/docs/development/getting-started.md +++ /dev/null @@ -1,113 +0,0 @@ -## Getting started - -This library aims to be a nodejs addon which can export Qt Widgets to the Javascript world. By doing so one can develop fully fledged cross platform native GUI applications using only Javascript. - -The library depends on `qode` which is a lightly modified version of NodeJS. The slight modification was needed to make it work with this addon. In essense, we will do `qode your_file.js` instead of `node your_file.js`. - -Qode is inspired by this post by [Cheng Zhao](https://github.com/zcbenz): https://electronjs.org/blog/electron-internals-node-integration - -This library does not modify Qt in any way and only use it as it is. This library also dynamically links to Qt. So it needs Qt libs to be installed in your system to work (This is done to keep in compliance with open source LGPL license of Qt). We can think of exporting the required libs later. - -## Code Structure - -``` -. -├── binding.gyp -├── config -├── demo.ts -├── package.json -├── src -│   ├── cpp <-- C++ source code -│   └── lib <-- Typescript source code -├── tsconfig.json -└── yarn.lock -``` - -The main folder is `src`. It contains - -- `cpp` : This folder contains all the C++ source code. Basically all the wrapper code using NAPI to export Qt Widgets and other helper functions to Javascript. -- `lib` : This folder contains all the Typescript code of the library. This is used to add additonal helper methods and types to exported addon. - -**Detailed version:** - -``` -. -├── binding.gyp -├── config -│   ├── application.gypi -│   ├── common.gypi -│   └── yoga.gypi -├── demo.ts -├── package.json -├── src -│   ├── cpp -│   │   ├── Extras -│   │   ├── QtGui <------ All exported classes found inside Qts Gui dynamic library -│   │   ├── QtWidgets <------ All exported classes found inside Qts Widgets dynamic library -│   │   ├── core -│   │   └── main.cpp -│   └── lib -│   ├── QtGui -│   ├── QtWidgets -│   └── core -├── tsconfig.json -└── yarn.lock - -``` - -First step to seeing how everything works is to take a look at `demo.ts` file. This file is basically like a Kitchen application showcasing all the exported widgets currently with the library. - -Make sure you have read how to write native NodeJS Addons blog first. https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f - -Once you have done that check out `src/cpp/main.cpp` and `config/application.gypi` to see the list of exported C++ classes. - -Then maybe you can take a look at `src/cpp/QtWidgets/QLabel/qlabel_wrap.h`. This will show you how to wrap a simple Qt Widget. -Check the corresponding JS file for the addon here `src/lib/QtWidgets/QLabel/index.ts`. - -## Wrapping a widget - -Create wrappers for each and every Qt class that you will use with N-API (using node-addon-api since it is c++) and export it onto JS side. - -Taking the example of QLabel, if you look inside the directory `src/cpp/QtWidgets/QLabel`, you should see: - -``` -├── QLabel -│   ├── nlabel.cpp -│   ├── nlabel.h <---- Extended QLabel -│   ├── nlabel_moc.cpp <--- Autogenerated file by qt moc. -│   ├── qlabel_wrap.cpp -│   └── qlabel_wrap.h <--- Wrapper file -``` - -The idea is : - -1. We will first extend QLabel class to form NLabel. NLabel is basically QLabel with some extra methods and variables. More on it below. -2. Then we will use NLabel and wrap it using NAPI and export it to JS side. This is what qlabel_wrap does. - -**NLabel**: Since NLabel has inherited from QLabel we can treat is as QLabel with extra methods and properties. Primary reason to extend QLabel to create NLabel is to add support for Event listeners and CSS styling using Flex. -So if you take a look at NLabel you will see, it inherits from QLabel and NodeWidget. NodeWidget inturn inherits from YogaWidget and EventWidget. Event widget adds event handling support. YogaWidget is a class that contains the magic that enables a regular Qt Widget to have Yoga node. A Yoga node is an instance used by yoga library to calculate a widgets position on the screen. Yoga is a library that will layout the widget on the screen. To do so we will specify the flex properties like alignitems, justify content, margin, paddings etc on the Yoga node of the widget. Apart from adding yoga node, YogaWidget adds support for specifying those yoga properties via Qt's stylesheet. (This is done by using Q_PROPERTY). To make this work we need to use something called as Q_OBJECT inside the class which is a C++ macro. Q_OBJECT will be expanded to relevant code by the compiler. In Qt whenever we add Q_OBJECT to a header file, we need to use a pre compiler called Qt MOC (Meta Object Compiler). The way we use it is - -``` -moc headername.h -o headername_moc.cpp --include // example : ../../core/YogaWidget/yogawidget.h -``` - -So for nlabel I would run it as: - -``` -moc nlabel.h -o nlabel_moc.cpp --include ../../core/YogaWidget/yogawidget.h -``` - -This will run moc on `headername.h` and generate `headername_moc.cpp`. We will include `headername_moc.cpp` in `config/moc.gypi`. If you dont do this. Then it will give a symbol not found error. - -I hope QLabel's example is enough for now. For more examples and inspirations we can take a look at other wrapped widgets. - -## Learning Materials - -1. Beginners guide to NodeJS Addon - https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f -2. First read this: N-API in nodejs docs -3. https://www.youtube.com/watch?v=-Oniup60Afs&feature=youtu.be -4. See samples at https://github.com/nodejs/abi-stable-node-addon-examples/ - 4.1. You can see the readme of https://github.com/nodejs/node-addon-api.git/ -5. See node-qt implementation. It is implemented in Nan (explained in video). -6. Now try to match the implementation in node-qt and convert to N-API using examples from samples. -7. Implementations not in node-qt need to be done with effort. diff --git a/docs/development/setting-up.md b/docs/development/setting-up.md deleted file mode 100644 index 6b98587efa..0000000000 --- a/docs/development/setting-up.md +++ /dev/null @@ -1,55 +0,0 @@ -# Setup project for development - -## Development setup and getting started - -Make sure you follow the setup guide of [Qode][qode_setup] so that you have a build environment ready for Qode. - -### MacOSX: - -**Requirements** - -1. Node version: > 11 -2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) -3. Make, GCC v7 -4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] - -### Windows: - -**Requirements** - -1. Node version: > 11 -2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) -3. Visual Studio Community 2017 -4. Powershell -5. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] - -### Linux: - -Supported versions: Ubuntu 17.10 and up - -**Requirements** - -1. Node version: > 11 -2. CMake 3.1 and up (Installation instructions can be found here: https://cmake.org/install/) -3. Make, GCC v7, pkg-config -4. Qt (_Optional_): Make sure you followed the setup instructions from [Qode][qode_setup] - -On Ubuntu: `$ sudo apt-get install pkg-config build-essentials` should install everything except Qt5. - -Note: If you are using your own version of Qt make sure to - -`export PKG_CONFIG_PATH="/5.13.0/gcc_64/lib/pkgconfig"` - -### Common: - -1. Once you have setup the platform specific stuff as mentioned above, follow these: -2. `git clone` this repo. -3. `yarn install` -4. `yarn build:addon` -5. `yarn dev` - -If you want to run with your own version of Qt make sure to pass qt_home_dir variable when building addon. - -`npm run rebuild:addon [--qt_home_dir=/path/to/qt]` - -[qode_setup]: https://github.com/nodegui/qode diff --git a/docs/development/signal_and_event_handling.md b/docs/development/signal_and_event_handling.md deleted file mode 100644 index c72d6b1fae..0000000000 --- a/docs/development/signal_and_event_handling.md +++ /dev/null @@ -1,150 +0,0 @@ -# Event handling - -In Qt you can respond to an external event like a key press via event handling. Events always are processed by the event loop. Alongside events Qt also has a concept of Signals/Slots. Signals and slots are used to primarily communicate between widgets (more precisely QObjects). So the most common way of interacting between Qt Widgets is done through signals/slots. (More details here: https://doc.qt.io/qt-5/signalsandslots.html). Hence we would be implementing support for both events and signals. - -**Technicals:** - -> An event is a message encapsulated in a class (QEvent) which is processed in an event loop and dispatched to a recipient that can either accept the message or pass it along to others to process. They are usually created in response to external system events like mouse clicks. -> Signals and Slots are a convenient way for QObjects to communicate with one another and are more similar to callback functions. In most circumstances, when a "signal" is emitted, any slot function connected to it is called directly. The exception is when signals and slots cross thread boundaries. In this case, the signal will essentially be converted into an event. - -# Implementing Signal handling - -In Qt signals and slots are used to communicate between different qt widgets. So they can be used to implement things like -onClick, onHover etc. - -The way Qt Signals work is explained here: - -https://doc.qt.io/qt-5/signalsandslots.html - -The way you use them in Qt for a PushButton is explained here: -https://wiki.qt.io/How_to_Use_QPushButton#Signals - -# Adding signal/event handling support to a NodeWidget - -We will take the example of PushButton - -**Javascript** - -Steps: - -The widget should inherit from `NodeWidget`. NodeWidget inherits from EventWidget internally. EventWidget constructor needs native object while initialising. So arrange your code such that native object gets initialised before calling `super(native)`. - -EventWidget adds `addEventListener` method to the widget which can be called -like this: - -```js -button.addEventListener("clicked", () => { - console.log("clicked"); -}); -``` - -To help the user know what all signals/events are supported, export an enum like `QPushButtonEvents` as shown below. - -So the user can then use it as below: - -```js -button.addEventListener(QPushButtonEvents.clicked, () => { - console.log("clicked"); -}); -``` - -Example: - -```js -import addon from "../../core/addon"; -import { NodeWidget } from "../../QtGui/QWidget"; -import { BaseWidgetEvents } from "../../core/EventWidget"; - -export const QPushButtonEvents = Object.freeze({ - ...BaseWidgetEvents, - clicked: "clicked", - pressed: "pressed", - released: "released", - toggled: "toggled" -}); - -export class QPushButton extends NodeWidget { - native: NativeElement; - constructor(parent?: NodeWidget) { - let native; - if (parent) { - native = new addon.QPushButton(parent.native); - } else { - native = new addon.QPushButton(); - } - super(native); - this.parent = parent; - this.native = native; - // bind member functions - this.setText.bind(this); - } - - setText(text: string | number) { - this.native.setText(`${text}`); - } -} -``` - -**C++** - -Steps: - -1. `NPushButton` - -Inherit from both QPushButton and NodeWidget. Make sure you have added NODEWIDGET_IMPLEMENTATIONS macro. This adds a crucial method for events support. It will override `event(QEvent *)` method of QPushbutton so that nodejs can listen to the events of this widget. This makes sure we convert all the QEvent's of this widget to an event for the nodejs event emitter. - -Also make sure to connect all the signals of the widgets to the event emitter instance from NodeJS. This way we kindof convert the signal to a simple nodejs event. - -```cpp -#pragma once - -#include -#include "src/cpp/core/NodeWidget/nodewidget.h" -#include "napi.h" - -class NPushButton: public QPushButton, public NodeWidget -{ - NODEWIDGET_IMPLEMENTATIONS(QPushButton) -public: - using QPushButton::QPushButton; //inherit all constructors of QPushButton - - // override this method and implement all signals here - void connectWidgetSignalsToEventEmitter() { - // Qt Connects: Implement all signal connects here - QObject::connect(this, &QPushButton::clicked, [=](bool checked) { - Napi::Env env = this->emitOnNode.Env(); - Napi::HandleScope scope(env); - this->emitOnNode.Call({ Napi::String::New(env, "clicked"), Napi::Value::From(env, checked) }); - }); - QObject::connect(this, &QPushButton::released, [=]() { - Napi::Env env = this->emitOnNode.Env(); - Napi::HandleScope scope(env); - this->emitOnNode.Call({ Napi::String::New(env, "released") }); - }); - QObject::connect(this, &QPushButton::pressed, [=]() { - Napi::Env env = this->emitOnNode.Env(); - Napi::HandleScope scope(env); - this->emitOnNode.Call({ Napi::String::New(env, "pressed") }); - }); - QObject::connect(this, &QPushButton::toggled, [=](bool checked) { - Napi::Env env = this->emitOnNode.Env(); - Napi::HandleScope scope(env); - this->emitOnNode.Call({ Napi::String::New(env, "toggled"), Napi::Value::From(env, checked) }); - }); - } -}; - -``` - -**Additional** - -Make sure `npushbutton.h` is added to `config/moc.json`. -And run `npm run automoc` before running `npm run build:addon` - -We need to run Qt's MOC (Meta Object Compiler) on the file whenever we use Q_OBJECT in a class or use QObject::connect. This is so that Qt can expand the macros and add necessary implementations to our class. - -# How does it work ? - -1. On JS side for each widget instance we create an instance of NodeJS's Event Emitter. This is done by the class `EventWidget` from which `NodeWidget` inherits -2. We send this event emiiter's `emit` function to the C++ side by calling `initNodeEventEmitter` method and store a pointer to the event emitter's emit function using `emitOnNode`. initNodeEventEmitter function is added by a macro from EventWidget (c++). You can find the initNodeEventEmitter method with the event widget macros. -3. We setup Qt's connect method for all the signals that we want to listen to and call the emitOnNode (which is actually emit from Event emitter) whenever a signal arrives. This is done manually on every widget by overriding the method `connectWidgetSignalsToEventEmitter`. Check `npushbutton.h` for details. This takes care of all the signals of the widgets. Now to export all qt events of the widget, we had overriden the widgets `event(Event*)` method to listen to events received by the widget and send it to the event emitter. This is done inside the EVENTWIDGET_IMPLEMENTATIONS macro diff --git a/docs/development/styling.md b/docs/development/styling.md deleted file mode 100644 index abb9d1cef3..0000000000 --- a/docs/development/styling.md +++ /dev/null @@ -1,100 +0,0 @@ -# How styling works? - -There are two parts to styling. - -1. Layout -2. Painting : Colors, text color, etc - -## Painting - -The regular styles such as text color, font-size, font weight etc are achieved using Qt's stylesheet. -We just call Qt's setStyleSheet method on the native widget and pass in the styles as a string. - -This method is implemented as part of `QWIDGET_WRAPPED_METHODS_DECLARATION` in `qwidget_macro.h`. -So all widgets using this macro will get the setStyleSheet method. - -## Layout - -Layouting is basically positioning widgets on the screen. It takes into account everything from margins, paddings, positions etc. Our main focus will be Flex layouting. For flex layout we are using yoga library from facebook. This is the same library used by React Native. Before looking at flaxlayout in this libarary I recommend browsing Yoga's C API doc here: `deps/yoga/doc.md` - -In case `nodegui`. I have implemented a custom Qt layout by extending `QLayout`, hence Qt is able to take over automagically when window is resized or any other layouting event occurs. -You can find the implementation at `src/cpp/core/FlexLayout/flexlayout.h`. - -The c++ api provided by this custom layout looks like this: - -```cpp - // FlexLayout is a custom Layout built for QT. This layout will be used to layout qt widgets using facebook's yoga library. - // Thus giving ability to layout Qt Widgets using Flexbox. - // Usage: - QWidget *container = new QWidget(); - YGNodeRef root = YGNodeNew(); - YGNodeRef child1 = YGNodeNew(); - YGNodeRef child2 = YGNodeNew(); - FlexLayout * flayout = new FlexLayout(container,root); -// or FlexLayout * flayout = new FlexLayout(container); -// or FlexLayout *flayout = new FlexLayout(); - - flayout->addWidget(btn1, child1); - flayout->addWidget(btn2, child2); - -``` - -This layout is exported to Javascript side via `src/cpp/core/FlexLayout/flexlayout_wrap.h` - -The JS Api looks like this: - -```js -const view = new QWidget(rootView); - -const flayout = new FlexLayout(); // Create layout -flayout.setFlexNode(view.getFlexNode()); // Set widget's flex as layout's flex node. - -view.setLayout(flayout); // set layout as view's layout - -const label = new QLabel(view); -label.setText("Hello12321"); - -const label2 = new QLabel(view); -label2.setText("SECOND LABEL"); - -flayout.addWidget(label2, label2.getFlexNode()); // Add child to layout -flayout.addWidget(label, label.getFlexNode()); // Add child to layout -``` - -### Implementation - -1. Every widget that wants to use flex layout should extend from `flexItem` found at `src/cpp/core/FlexLayout/flexitem.h`. - For example, see `nlabel.h` at `src/cpp/QtWidgets/QLabel/nlabel.h` - - NLabel inherits from `NodeWidget` which inherits from `YogaWidget` which inturn inherits from `FlexItem` - - - `FlexItem` adds a YogaNode to every widget. - - `YogaWidget` adds Yoga specific q-properties to the widget, which is useful to assign yoga properties via qstylesheet. More on this below. - - `NodeWidget` adds layout support via `YogaWidget` and event handling support via `EventWidget` - -#### FlexItem - -FlexItem : `src/cpp/core/FlexLayout/flexitem.h` add flexnode to each widget. -FlexItem adds methods like getFlexNode. - -#### YogaWidget - -Qt StyleSheet allows you to specify style properties just like in web. You could specify font-size, margin, padding, etc. Qt StyleSheet also allows custom style properties via Qt's q-property system. - -So in order to enable yoga based properties like alignItems, justifyContent, flex, etc via qt's stylesheet we -declare and define q properties for each of those custom properties we want. -This allows us to use something like: - -```js -view.setStyleSheet(` - background-color:green; - qproperty-flex: 1; - qproperty-alignItems: 'center'; -`); -``` - -Notice `qproperty-` prefix? These are the custom q-properties we defined in `YogaWidget.h`. We do not need to prefix `qproperty-` if a stylehsheet string is passed through `StyleSheet.create()`. StyleSheet.create has an autoprefixer which will do the right thing. - -#### NodeWidget - -Every widget we implement should inherit from NodeWidget. This helps us add all the properties we want in the widgets via a single class. NodeWidget is the class that contains properties and methods shared by all widgets. This class allows us to add features to all widgets easily. diff --git a/docs/development/wrapping_widgets.md b/docs/development/wrapping_widgets.md deleted file mode 100644 index f2af19f270..0000000000 --- a/docs/development/wrapping_widgets.md +++ /dev/null @@ -1,3 +0,0 @@ -# Exporting a new method from a widget - -# Exporting a new widget from scratch diff --git a/docs/faq.md b/docs/faq.md deleted file mode 100644 index 49fac62015..0000000000 --- a/docs/faq.md +++ /dev/null @@ -1,62 +0,0 @@ -# NodeGui FAQ - -## Why am I having trouble installing Qode? - -When running `npm install @nodegui/qode`, some users occasionally encounter -installation errors. - -In almost all cases, these errors are the result of network problems and not -actual issues with the `@nodegui/qode` npm package. Errors like `ELIFECYCLE`, -`EAI_AGAIN`, `ECONNRESET`, and `ETIMEDOUT` are all indications of such -network problems. The best resolution is to try switching networks, or -wait a bit and try installing again. - -You can also attempt to download Qode directly from -[nodegui/qode/releases](https://github.com/nodegui/qode/releases) -if installing via `npm` is failing. - -## Javascript widgets are missing methods and properties as compared to QT widget? - -As you would have noticed, the list of methods and properties are less compared to what is present in the Qt's corresponding widget class. This is because we havent written wrappers for them yet. You can help add more methods by following the development guide for contributors. Overtime this gap would reduce. - -## When will Qode upgrade to latest Node.js / Qt version? - -When a new version of Node.js/Qt gets released, we usually wait for about a month -before upgrading the one in Qode. So we can avoid getting affected by bugs -introduced in new Node.js/Qt versions, which happens very often. - -## My app's window/widgets/tray disappeared after a few minutes. - -This happens when the variable which is used to store the window/tray gets -garbage collected. - -If you encounter this problem, the following articles may prove helpful: - -- [Memory Management][memory-management] -- [Variable Scope][variable-scope] - -If you want a quick fix, you can make the variables global by changing your -code from this: - -```javascript -const { QWidget } = require("@nodegui/nodegui"); - -const view = new QWidget(); -view.setObjectName("container"); -view.setLayout(new FlexLayout()); -``` - -to this: - -```javascript -const { QWidget } = require("@nodegui/nodegui"); - -const view = new QWidget(); -view.setObjectName("container"); -view.setLayout(new FlexLayout()); - -global.view = view; //prevent GC -``` - -[memory-management]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management -[variable-scope]: https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx diff --git a/docs/images/demo.png b/docs/images/demo.png deleted file mode 100644 index 3a69d28cc440aac5e9a6291de7aef392992644be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132876 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 W#TPF}BNX-ke+WG@c!|!fr~e1 - - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 332ece88bb..0000000000 --- a/docs/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - NodeGui - A cross platform library to build performant desktop apps with - Javascript. - - - - - - - - - -
Loading documentation...
- - - - - - - - diff --git a/docs/react/README.md b/docs/react/README.md deleted file mode 100644 index 0af42a33d8..0000000000 --- a/docs/react/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# React NodeGUI - -- [About React NodeGUI](react/about.md) -- [Examples](https://github.com/nodegui/react-nodegui/tree/master/examples) -- [Setting up the Development Environment](tutorial/development-environment.md) -- [Creating your First App](react/first-app.md) - - [Hello World](react/first-app.md#Hello-World) - - [React NodeGUI Development in a Nutshell](react/first-app.md#react-nodegui-development-in-a-nutshell) - - [Running Your App](react/first-app.md#running-your-app) - // TODO from here -- [Application Architecture](react/application-architecture.md) - - [Qode](tutorial/application-architecture.md#qode) - - [Using NodeGui's APIs](tutorial/application-architecture.md#using-NodeGui-apis) - - [Using Node.js APIs](tutorial/application-architecture.md#using-nodejs-apis) - - [Using Native Node.js Modules](tutorial/using-native-node-modules.md) -- [Testing and Debugging](tutorial/debugging-app.md) - - [Debugging Qode/NodeGui Process](tutorial/debugging-qode-process.md) - - [Debugging a NodeGui app with Visual Studio Code](tutorial/debugging-app-vscode.md) -- [Distribution](tutorial/application-distribution.md) - - [Supported Platforms](tutorial/support.md#supported-platforms) - - [Code Signing](tutorial/code-signing.md) - - [Mac App Store](tutorial/mac-app-store-submission-guide.md) - - [Windows Store](tutorial/windows-store-guide.md) - - [Snapcraft](tutorial/snapcraft.md) -- [Getting Support](tutorial/support.md) - -## API References - -- [Synopsis](api/synopsis.md) -- [Process Object](api/process.md) - -### Modules from NodeGui: - -- [QApplication (Application)](api/QApplication.md) -- [QMainWindow (Window)](api/QMainWindow.md) -- [QWidget (View)](api/QWidget.md) -- [QSpinBox ()](api/QSpinBox.md) -- [QAbstractScrollArea ()](api/QAbstractScrollArea.md) -- [QAbstractSlider ()](api/QAbstractSlider.md) -- [QDial ()](api/QDial.md) -- [QScrollArea ()](api/QScrollArea.md) -- [QPlainTextEdit (TextEdit)](api/QPlainTextEdit.md) -- [QLabel (Text/Image)](api/QLabel.md) -- [QPushButton (Button)](api/QPushButton.md) -- [QRadioButton (RadioButton)](api/QRadioButton.md) -- [QCheckBox (CheckBox)](api/QCheckBox.md) -- [QLineEdit (LineEdit)](api/QLineEdit.md) -- [QProgressBar (ProgressBar)](api/QProgressBar.md) -- [FlexLayout](api/FlexLayout.md) -- [QPixmap](api/QPixmap.md) -- [QIcon](api/QIcon.md) -- [Qt Enums](api/QtEnums.md) - -### Internal Modules - -- [NodeWidget](api/NodeWidget.md) -- [NodeLayout](api/NodeLayout.md) -- [EventWidget](api/EventWidget.md) -- [Component](api/Component.md) -- [YogaWidget](api/YogaWidget.md) - -## Usage - -- [Events usage](todo) -- [Yoga properties using stylesheet usage](todo) - -## Development/Contributor's Guide - -See [development](development/README.md) diff --git a/docs/react/about.md b/docs/react/about.md deleted file mode 100644 index bb073d00a4..0000000000 --- a/docs/react/about.md +++ /dev/null @@ -1,17 +0,0 @@ -# About React NodeGUI - -[React NodeGUI](https://github.com/nodegui/react-nodegui) is an open source library for building cross-platform desktop applications with React and CSS like styling. React NodeGUI is a custom react renderer for [NodeGui](https://github.com/nodegui/nodegui). React NodeGUI combines the power and flexibility of React with ease of NodeJs and maturity of Qt5. With React NodeGUI you can build native desktop applications which are underneath Qt applications. This means you could in theory use all of Qt's Gui APIs in Javascript. - -As React Native was an improvement over Cordova based applications in Mobile app development with web technologies, React NodeGUI aims to achieve the same with respect to Electron and other chromium based cross platform Gui solutions. React NodeGUI wants to incorporate everything that is good about Electron: The ease of development, freedom of styling, Native APIs, great documentation, etc. At the same time it aims to be memory and CPU efficient. - -Also, React NodeGUI (like NodeGui) is built with Typescript which means you get autocomplete and strong typechecking support from the IDE even when used in a Javascript project. - -Get started building with React NodeGUI in the [First React NodeGUI app](react/first-app.md). - -### Updating Dependencies - -As soon as a new version of NodeGui is released a corresponding version of React NodeGUI will be released simultaneously. This makes sure that both NodeGui and React NodeGUI releases go out in sync. NodeGui an React NodeGUI will be released as separate packages in order keep everything easily maintainable. - -## Core Philosophy - -[See core philosophy of NodeGui](tutorial/about?id=core-philosophy) diff --git a/docs/react/first-app.md b/docs/react/first-app.md deleted file mode 100644 index 1d8855d6b2..0000000000 --- a/docs/react/first-app.md +++ /dev/null @@ -1,116 +0,0 @@ -# Writing Your First React NodeGUI App - -React NodeGUI enables you to create desktop applications with JavaScript (React). React NodeGUI is a react renderer for NodeGui. This makes it extremely memory and CPU efficient as compared to other popular Javascript Desktop GUI solutions. - -## Hello World - -Clone and run the code in this tutorial by using the -[`nodegui/react-nodegui-starter`][quick-start] repository. - -**Note**: Running this requires [Git](https://git-scm.com) and [npm](https://www.npmjs.com/). - -```sh -# Clone the repository -$ git clone https://github.com/nodegui/react-nodegui-starter -# Go into the repository -$ cd react-nodegui-starter -# Install dependencies -$ npm install -# Run the app -$ npm start -``` - -As far as development is concerned, an React NodeGUI application is essentially a -Node.js application. The starting point is a `package.json` that is identical -to that of a Node.js module. A most basic React NodeGUI app would have the following -folder structure: - -```text -your-app/ -├── package.json -├── index.js -``` - -## React NodeGUI Development in a Nutshell - -React NodeGUI apps are developed in JavaScript using the same principles and methods -found in React Native development. React NodeGUI exposes native widgets in the form of React components. Also, since we are now not running inside a browser, there is no DOM. Hence browser based APIs are NOT available. But you do have access to complete NodeJs APIs along with some exported Qt Apis.All APIs related to React NodeGUI are found in `@nodegui/react-nodegui` module. Additionally you can also access APIs and features from NodeGui via -the `@nodegui/nodegui` module. These can be required like any other Node.js module: - -```javascript -require("@nodegui/nodegui"); -require("@nodegui/react-nodegui"); -``` - -A simple `main.js`. - -```javascript -import { Renderer, View, Text, Button, Window } from "@nodegui/react-nodegui"; -import React, { useState } from "react"; - -const App = () => { - const [time, setTime] = useState(new Date()); - return ( - - -