From 8e1daa4bfd2c3cdb2425fd8793fcdef99d14168b Mon Sep 17 00:00:00 2001 From: Atul R Date: Sun, 29 Sep 2019 20:35:05 +0200 Subject: [PATCH] Deploy website version based on eca218ac79d1c3f75e33a2b5dbfaf70814f83445 --- 0.821df7f17f7288aebb5e.js | 1 + 1.196ce05925ea6d776920.css | 1 + 1.9b3d421a0f44576af60f.js | 1 + 128.e842e81be02948779cd3.js | 1 + 129.8e3566f903859d61277d.js | 1 + 2.27a81c22b5dfa23bfe9b.js | 1 + 2.702de9bbb01fe4f46fa1.css | 1 + 404.html | 28 + CNAME | 1 + blog/index.html | 46 + blog/tags/hello/index.html | 46 + blog/tags/index.html | 38 + blog/tags/nodegui/index.html | 46 + blog/welcome/index.html | 44 + chunk-map.json | 378 ++++ client-manifest.json | 1663 +++++++++++++++++ ...index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css | 1 + ...-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js | 1 + ...list-pagea-6-a-7ba.697ec326a8cebf60b287.js | 1 + ...g-post-pageccc-cab.eaf730b8c654a212f785.js | 1 + ...list-page-01-a-d0b.f9af53c8c6b12587c378.js | 1 + ...posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js | 1 + ...gacy-item-031-769.1f1ce10374de019f5d3a.css | 1 + ...egacy-item-031-769.6e8a6ea08d218712d94a.js | 1 + ...cy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css | 1 + ...acy-page-9-e-7-ca5.d31182005d6c21dd63ac.js | 1 + ...og-welcome-286-e55.76c213cf9ce75984ae91.js | 1 + ...ent---blogaf-1-856.f79900332b57f969c09a.js | 1 + ...component-4-ef-195.be17a07689811b2e54a5.js | 1 + ...ent-widgetac-6-11b.b87fa94e0cd874003d59.js | 1 + ...ex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js | 1 + ...ode-layoutd-28-11a.f1324fa8676e4bf64b44.js | 1 + ...ode-widget-080-a39.e39bcda58fa051ef8f58.js | 1 + ...i-process-5-ec-b1e.81baa4658f7e9a835392.js | 1 + ...oll-area-3-e-6-d7f.ce07722700328be8dfa5.js | 1 + ...t-slider-3-e-0-54d.b7e761ae58b36fe089f1.js | 1 + ...plicationd-3-e-0a3.039f8c83760f87eef546.js | 1 + ...check-boxd-9-b-c95.54af9594d82de2f1c65c.js | 1 + ...clipboard-69-d-2ef.2facddd2ce7d03c7d364.js | 1 + ...i-q-cursor-362-d51.72e3b873d390560e1917.js | 1 + ...pi-q-dial-80-b-99a.facd48a52570d2fd7472.js | 1 + ...id-layouta-4-e-552.f8384f91986e144a1e06.js | 1 + ...pi-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js | 1 + ...-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js | 1 + ...-line-editea-0-53d.f606b13ced935ec46509.js | 1 + ...n-window-0-e-7-299.7a1bf20062e23ed6c510.js | 1 + ...-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js | 1 + ...ext-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js | 1 + ...ogress-barc-46-afe.2a5c874c4e33ecb7a2b8.js | 1 + ...sh-button-06-c-73e.9e1e6d8a0e7c17941efd.js | 1 + ...dio-buttone-54-746.0eceb96f43e589853010.js | 1 + ...oll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js | 1 + ...-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js | 1 + ...tab-widget-508-95e.b35876b3da49da08bcb5.js | 1 + ...-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js | 1 + ...i-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js | 1 + ...-synopsis-7-bb-e1c.2cede4e9cd42a20dcab1.js | 1 + ...oga-widgeta-42-cc7.d048cabe40533b903ea2.js | 1 + ...mon-errorsf-15-a5b.e038ab8ec8bf334300fb.js | 1 + ...-debuggingb-54-9ed.750c6b37dab541484a83.js | 1 + ...ng-started-139-387.91c824c53e601bdee051.js | 1 + ...ent-readme-149-437.115b92599d48666d0070.js | 1 + ...etting-up-28-c-666.3ed03febaee8901fd048.js | 1 + ...handling-7-d-4-f3f.ce2b82a97ac1f368a896.js | 1 + ...nt-styling-293-cad.b3394daf132a97f6e2c2.js | 1 + ...g-widgets-84-b-538.8591cd36dcfe1c65b14a.js | 1 + ...cs-doc-1-b-2-f-e80.b11e6221286a094dd836.js | 1 + ...--docs-faq-048-db5.a3f7755c1443136d038e.js | 1 + ...ive-plugin-632-9db.ae1162899d532c588845.js | 1 + ...-in-vscodebd-7-cec.a37b675eceeff564dcc8.js | 1 + ...debuggingf-3-f-cf5.6a9f350b152e911795d0.js | 1 + ...g-startedc-9-e-20f.058d1e127795274285bb.js | 1 + ...dle-events-160-4b0.c02ea0616d11beafddb3.js | 1 + ...des-images-991-065.914359cdc22f4b9051ef.js | 1 + ...des-layoutdf-5-a64.bbcbc44e5156b817cb02.js | 1 + ...networking-374-03e.17133e9de15be6e64aff.js | 1 + ...chitecture-262-19e.245edae39f1ddac01224.js | 1 + ...roll-view-76-e-87c.73c89be82bf124b2e125.js | 1 + ...des-stylingfec-977.c0e2691c9103260d4124.js | 1 + ...s-tutoriale-53-6ab.3001eaf77a6eeaf068aa.js | 1 + ...e-modules-3-ab-104.3bc40951d03693eaff7d.js | 1 + ...--docs-mdxce-3-7d1.389cb0d1e93efb516d5d.js | 1 + docs/api/Component/index.html | 52 + docs/api/EventWidget/index.html | 52 + docs/api/FlexLayout/index.html | 52 + docs/api/NodeLayout/index.html | 52 + docs/api/NodeWidget/index.html | 53 + docs/api/QAbstractScrollArea/index.html | 52 + docs/api/QAbstractSlider/index.html | 52 + docs/api/QApplication/index.html | 52 + docs/api/QCheckBox/index.html | 52 + docs/api/QClipboard/index.html | 52 + docs/api/QCursor/index.html | 52 + docs/api/QDial/index.html | 52 + docs/api/QGridLayout/index.html | 52 + docs/api/QIcon/index.html | 54 + docs/api/QLabel/index.html | 52 + docs/api/QLineEdit/index.html | 52 + docs/api/QMainWindow/index.html | 53 + docs/api/QPixmap/index.html | 54 + docs/api/QPlainTextEdit/index.html | 52 + docs/api/QProgressBar/index.html | 52 + docs/api/QPushButton/index.html | 52 + docs/api/QRadioButton/index.html | 52 + docs/api/QScrollArea/index.html | 52 + docs/api/QSpinBox/index.html | 52 + docs/api/QTabWidget/index.html | 52 + docs/api/QWidget/index.html | 52 + docs/api/QtEnums/index.html | 52 + docs/api/YogaWidget/index.html | 52 + docs/api/process/index.html | 54 + docs/api/synopsis/index.html | 57 + docs/development/README/index.html | 53 + docs/development/common_errors/index.html | 54 + docs/development/debugging/index.html | 52 + docs/development/getting-started/index.html | 55 + docs/development/setting-up/index.html | 52 + .../signal_and_event_handling/index.html | 57 + docs/development/styling/index.html | 59 + docs/development/wrapping_widgets/index.html | 52 + docs/doc1/index.html | 52 + docs/faq/index.html | 63 + .../custom-nodegui-native-plugin/index.html | 52 + docs/guides/debugging-in-vscode/index.html | 52 + docs/guides/debugging/index.html | 61 + docs/guides/getting-started/index.html | 67 + docs/guides/handle-events/index.html | 52 + docs/guides/images/index.html | 52 + docs/guides/layout/index.html | 52 + docs/guides/networking/index.html | 52 + docs/guides/nodegui-architecture/index.html | 65 + docs/guides/scroll-view/index.html | 52 + docs/guides/styling/index.html | 53 + docs/guides/tutorial/index.html | 58 + .../using-native-node-modules/index.html | 63 + docs/mdx/index.html | 52 + ...ata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js | 1 + img/code-sample.png | Bin 0 -> 89159 bytes img/demo.png | Bin 0 -> 31950 bytes img/favicon.ico | Bin 0 -> 15406 bytes img/logo-circle.png | Bin 0 -> 28008 bytes img/logo.png | Bin 0 -> 16004 bytes img/logo.svg | 5 + img/logox200.png | Bin 0 -> 6735 bytes img/undraw_code_review.svg | 1 + img/undraw_docusaurus_mountain.svg | 170 ++ img/undraw_docusaurus_react.svg | 169 ++ img/undraw_docusaurus_tree.svg | 1 + img/undraw_website_setup.svg | 1 + img/undraw_windows.svg | 11 + index.html | 40 + main.00ae184f6d3bd0eadbce.js | 1 + main.f66713773e9ba37b90fe.css | 1 + ...ta---blog-83-c-2b0.46c7be8f307d8da2c120.js | 1 + ...tags-hellob-02-3e8.cdf356c9ee24382e453e.js | 1 + ...gs-nodegui-632-d46.73df93301c6a1152b2fe.js | 1 + ...g-welcome-27-a-91f.ef07fafa6070c2acef91.js | 1 + ...omponent-3-e-5-43d.b1af807c32f3d1d45a4f.js | 1 + ...nt-widget-39-a-9ea.34b0ce562deb2ec0ae92.js | 1 + ...flex-layoutecf-540.7db8561c2c23b0d92b67.js | 1 + ...e-layout-1-e-9-c15.192849fc91407c883037.js | 1 + ...ode-widgeta-92-a4f.dc800d76f7062b65b2ed.js | 1 + ...i-process-32-d-09e.9dd820231565148c88a2.js | 1 + ...roll-area-59-d-279.378868b047b4e7fc733c.js | 1 + ...ract-sliderdfa-ab7.73efd891b1be587b529b.js | 1 + ...plicationc-1-d-8a4.dba24314be49483727c4.js | 1 + ...-check-box-132-293.363eb2c9b2bdc95e76bb.js | 1 + ...-clipboard-486-b21.5efa03bad36d45e62cbe.js | 1 + ...i-q-cursor-887-11e.af1b21b104f06148557b.js | 1 + ...-api-q-dialbfb-aef.e5ded32011b7d6927cdc.js | 1 + ...id-layout-7-db-030.f3764e551a2bc1cf18a8.js | 1 + ...pi-q-icone-6-d-093.1c4c72d6ff116744c296.js | 1 + ...pi-q-label-165-210.1dba411adf86a92ae91f.js | 1 + ...line-edit-13-f-b8a.df4fef6cc6001cbc07a7.js | 1 + ...in-window-04-f-efb.699f6e2eb1ac78330311.js | 1 + ...pi-q-pixmapfdf-820.087e26967d50eb06140d.js | 1 + ...-text-edit-161-ecc.e89eb96f17b29e76629e.js | 1 + ...gress-bar-43-d-07e.a527e07318808cde454e.js | 1 + ...sh-button-96-d-c92.b15a45966fb25f5f9917.js | 1 + ...dio-button-367-f7c.11484c432455585a7ef3.js | 1 + ...roll-area-46-a-96e.a5c480374e3f8b5fcea2.js | 1 + ...q-spin-box-809-ae0.1fcda0244eebb91ff1bf.js | 1 + ...-tab-widgetebc-5aa.558f01cb9860e9184f4f.js | 1 + ...i-q-widget-287-e6c.1a1aa4d570d756d63bb4.js | 1 + ...i-qt-enums-423-cf9.fb1940e1fff15d344906.js | 1 + ...-synopsis-21-f-a62.a376081207def93aa340.js | 1 + ...ga-widget-95-c-f8b.bdbc70e8a3ba6a1d1808.js | 1 + ...mon-errors-402-ef4.7ea9ca2120cf1ce1bce9.js | 1 + ...-debuggingc-36-26a.3bf9d58aef0157443ea5.js | 1 + ...g-started-89-b-c7a.863d1b0e22372d87282e.js | 1 + ...t-readm-ec-6-c-332.49158ed40eba176b8d72.js | 1 + ...setting-up-979-75f.8f9fc5a72c685e8d0e31.js | 1 + ...handling-0-b-5-692.b16a5b795c3eef3ce5dc.js | 1 + ...-styling-1-c-2-0d6.c1ae40b22fc3b93cd6fc.js | 1 + ...ng-widgets-303-fb8.bfc04ad3ffc9ee24e861.js | 1 + ...ocs-doc-12-a-3-5a1.bb87820e31f222c12801.js | 1 + ...-docs-faq-59-d-2b9.985713e75ca070fdde14.js | 1 + ...ve-plugin-92-b-12f.184a7a6a1f10e05c6c54.js | 1 + ...-debugging-970-fb8.4834f7c20eceaaaee536.js | 1 + ...-in-vscodebf-8-5b0.d26c0a02667ed3c9416d.js | 1 + ...-started-2-b-7-1a4.cfc3dec8bc5f547dfbb8.js | 1 + ...le-events-5-eb-540.61bb8e8da8eeda4cc040.js | 1 + ...des-images-915-5ee.175b82933d61d3e5deb4.js | 1 + ...des-layoutf-65-d7d.3bdf6df942a2264f480b.js | 1 + ...-networkingdfd-ce0.332c039b051021fe2724.js | 1 + ...chitecture-550-b82.72d9e2773d4e285ca973.js | 1 + ...oll-view-9-a-9-2ac.f6039a7dd2d1fa4c6ca6.js | 1 + ...s-styling-9-ea-213.d5570c147002ef8e6bfe.js | 1 + ...tutorial-1-f-1-23b.4e417b24befa6a685ab5.js | 1 + ...e-modules-31-f-551.0accd417ae132a661bdf.js | 1 + ...--docs-mdx-786-f56.e64a4ecfb244bb1efd9f.js | 1 + runtime~main.b0186ad8ee6d73168ac3.js | 1 + sitemap.xml | 1 + ...log-tags-8-d-7-36d.1243f2728e886299c73e.js | 1 + 214 files changed, 5730 insertions(+) create mode 100644 0.821df7f17f7288aebb5e.js create mode 100644 1.196ce05925ea6d776920.css create mode 100644 1.9b3d421a0f44576af60f.js create mode 100644 128.e842e81be02948779cd3.js create mode 100644 129.8e3566f903859d61277d.js create mode 100644 2.27a81c22b5dfa23bfe9b.js create mode 100644 2.702de9bbb01fe4f46fa1.css create mode 100644 404.html create mode 100644 CNAME create mode 100644 blog/index.html create mode 100644 blog/tags/hello/index.html create mode 100644 blog/tags/index.html create mode 100644 blog/tags/nodegui/index.html create mode 100644 blog/welcome/index.html create mode 100644 chunk-map.json create mode 100644 client-manifest.json create mode 100644 component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css create mode 100644 component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js create mode 100644 component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js create mode 100644 component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js create mode 100644 component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js create mode 100644 component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js create mode 100644 component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css create mode 100644 component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js create mode 100644 component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css create mode 100644 component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js create mode 100644 content---blog-welcome-286-e55.76c213cf9ce75984ae91.js create mode 100644 content---blogaf-1-856.f79900332b57f969c09a.js create mode 100644 content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js create mode 100644 content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js create mode 100644 content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js create mode 100644 content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js create mode 100644 content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js create mode 100644 content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js create mode 100644 content---docs-api-q-abstract-scroll-area-3-e-6-d7f.ce07722700328be8dfa5.js create mode 100644 content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js create mode 100644 content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js create mode 100644 content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js create mode 100644 content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js create mode 100644 content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js create mode 100644 content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js create mode 100644 content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js create mode 100644 content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js create mode 100644 content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js create mode 100644 content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js create mode 100644 content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js create mode 100644 content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js create mode 100644 content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js create mode 100644 content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js create mode 100644 content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js create mode 100644 content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js create mode 100644 content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js create mode 100644 content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js create mode 100644 content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js create mode 100644 content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js create mode 100644 content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js create mode 100644 content---docs-api-synopsis-7-bb-e1c.2cede4e9cd42a20dcab1.js create mode 100644 content---docs-api-yoga-widgeta-42-cc7.d048cabe40533b903ea2.js create mode 100644 content---docs-development-common-errorsf-15-a5b.e038ab8ec8bf334300fb.js create mode 100644 content---docs-development-debuggingb-54-9ed.750c6b37dab541484a83.js create mode 100644 content---docs-development-getting-started-139-387.91c824c53e601bdee051.js create mode 100644 content---docs-development-readme-149-437.115b92599d48666d0070.js create mode 100644 content---docs-development-setting-up-28-c-666.3ed03febaee8901fd048.js create mode 100644 content---docs-development-signal-and-event-handling-7-d-4-f3f.ce2b82a97ac1f368a896.js create mode 100644 content---docs-development-styling-293-cad.b3394daf132a97f6e2c2.js create mode 100644 content---docs-development-wrapping-widgets-84-b-538.8591cd36dcfe1c65b14a.js create mode 100644 content---docs-doc-1-b-2-f-e80.b11e6221286a094dd836.js create mode 100644 content---docs-faq-048-db5.a3f7755c1443136d038e.js create mode 100644 content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js create mode 100644 content---docs-guides-debugging-in-vscodebd-7-cec.a37b675eceeff564dcc8.js create mode 100644 content---docs-guides-debuggingf-3-f-cf5.6a9f350b152e911795d0.js create mode 100644 content---docs-guides-getting-startedc-9-e-20f.058d1e127795274285bb.js create mode 100644 content---docs-guides-handle-events-160-4b0.c02ea0616d11beafddb3.js create mode 100644 content---docs-guides-images-991-065.914359cdc22f4b9051ef.js create mode 100644 content---docs-guides-layoutdf-5-a64.bbcbc44e5156b817cb02.js create mode 100644 content---docs-guides-networking-374-03e.17133e9de15be6e64aff.js create mode 100644 content---docs-guides-nodegui-architecture-262-19e.245edae39f1ddac01224.js create mode 100644 content---docs-guides-scroll-view-76-e-87c.73c89be82bf124b2e125.js create mode 100644 content---docs-guides-stylingfec-977.c0e2691c9103260d4124.js create mode 100644 content---docs-guides-tutoriale-53-6ab.3001eaf77a6eeaf068aa.js create mode 100644 content---docs-guides-using-native-node-modules-3-ab-104.3bc40951d03693eaff7d.js create mode 100644 content---docs-mdxce-3-7d1.389cb0d1e93efb516d5d.js create mode 100644 docs/api/Component/index.html create mode 100644 docs/api/EventWidget/index.html create mode 100644 docs/api/FlexLayout/index.html create mode 100644 docs/api/NodeLayout/index.html create mode 100644 docs/api/NodeWidget/index.html create mode 100644 docs/api/QAbstractScrollArea/index.html create mode 100644 docs/api/QAbstractSlider/index.html create mode 100644 docs/api/QApplication/index.html create mode 100644 docs/api/QCheckBox/index.html create mode 100644 docs/api/QClipboard/index.html create mode 100644 docs/api/QCursor/index.html create mode 100644 docs/api/QDial/index.html create mode 100644 docs/api/QGridLayout/index.html create mode 100644 docs/api/QIcon/index.html create mode 100644 docs/api/QLabel/index.html create mode 100644 docs/api/QLineEdit/index.html create mode 100644 docs/api/QMainWindow/index.html create mode 100644 docs/api/QPixmap/index.html create mode 100644 docs/api/QPlainTextEdit/index.html create mode 100644 docs/api/QProgressBar/index.html create mode 100644 docs/api/QPushButton/index.html create mode 100644 docs/api/QRadioButton/index.html create mode 100644 docs/api/QScrollArea/index.html create mode 100644 docs/api/QSpinBox/index.html create mode 100644 docs/api/QTabWidget/index.html create mode 100644 docs/api/QWidget/index.html create mode 100644 docs/api/QtEnums/index.html create mode 100644 docs/api/YogaWidget/index.html create mode 100644 docs/api/process/index.html create mode 100644 docs/api/synopsis/index.html create mode 100644 docs/development/README/index.html create mode 100644 docs/development/common_errors/index.html create mode 100644 docs/development/debugging/index.html create mode 100644 docs/development/getting-started/index.html create mode 100644 docs/development/setting-up/index.html create mode 100644 docs/development/signal_and_event_handling/index.html create mode 100644 docs/development/styling/index.html create mode 100644 docs/development/wrapping_widgets/index.html create mode 100644 docs/doc1/index.html create mode 100644 docs/faq/index.html create mode 100644 docs/guides/custom-nodegui-native-plugin/index.html create mode 100644 docs/guides/debugging-in-vscode/index.html create mode 100644 docs/guides/debugging/index.html create mode 100644 docs/guides/getting-started/index.html create mode 100644 docs/guides/handle-events/index.html create mode 100644 docs/guides/images/index.html create mode 100644 docs/guides/layout/index.html create mode 100644 docs/guides/networking/index.html create mode 100644 docs/guides/nodegui-architecture/index.html create mode 100644 docs/guides/scroll-view/index.html create mode 100644 docs/guides/styling/index.html create mode 100644 docs/guides/tutorial/index.html create mode 100644 docs/guides/using-native-node-modules/index.html create mode 100644 docs/mdx/index.html create mode 100644 docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js create mode 100644 img/code-sample.png create mode 100644 img/demo.png create mode 100644 img/favicon.ico create mode 100644 img/logo-circle.png create mode 100644 img/logo.png create mode 100644 img/logo.svg create mode 100644 img/logox200.png create mode 100644 img/undraw_code_review.svg create mode 100644 img/undraw_docusaurus_mountain.svg create mode 100644 img/undraw_docusaurus_react.svg create mode 100644 img/undraw_docusaurus_tree.svg create mode 100644 img/undraw_website_setup.svg create mode 100644 img/undraw_windows.svg create mode 100644 index.html create mode 100644 main.00ae184f6d3bd0eadbce.js create mode 100644 main.f66713773e9ba37b90fe.css create mode 100644 metadata---blog-83-c-2b0.46c7be8f307d8da2c120.js create mode 100644 metadata---blog-tags-hellob-02-3e8.cdf356c9ee24382e453e.js create mode 100644 metadata---blog-tags-nodegui-632-d46.73df93301c6a1152b2fe.js create mode 100644 metadata---blog-welcome-27-a-91f.ef07fafa6070c2acef91.js create mode 100644 metadata---docs-api-component-3-e-5-43d.b1af807c32f3d1d45a4f.js create mode 100644 metadata---docs-api-event-widget-39-a-9ea.34b0ce562deb2ec0ae92.js create mode 100644 metadata---docs-api-flex-layoutecf-540.7db8561c2c23b0d92b67.js create mode 100644 metadata---docs-api-node-layout-1-e-9-c15.192849fc91407c883037.js create mode 100644 metadata---docs-api-node-widgeta-92-a4f.dc800d76f7062b65b2ed.js create mode 100644 metadata---docs-api-process-32-d-09e.9dd820231565148c88a2.js create mode 100644 metadata---docs-api-q-abstract-scroll-area-59-d-279.378868b047b4e7fc733c.js create mode 100644 metadata---docs-api-q-abstract-sliderdfa-ab7.73efd891b1be587b529b.js create mode 100644 metadata---docs-api-q-applicationc-1-d-8a4.dba24314be49483727c4.js create mode 100644 metadata---docs-api-q-check-box-132-293.363eb2c9b2bdc95e76bb.js create mode 100644 metadata---docs-api-q-clipboard-486-b21.5efa03bad36d45e62cbe.js create mode 100644 metadata---docs-api-q-cursor-887-11e.af1b21b104f06148557b.js create mode 100644 metadata---docs-api-q-dialbfb-aef.e5ded32011b7d6927cdc.js create mode 100644 metadata---docs-api-q-grid-layout-7-db-030.f3764e551a2bc1cf18a8.js create mode 100644 metadata---docs-api-q-icone-6-d-093.1c4c72d6ff116744c296.js create mode 100644 metadata---docs-api-q-label-165-210.1dba411adf86a92ae91f.js create mode 100644 metadata---docs-api-q-line-edit-13-f-b8a.df4fef6cc6001cbc07a7.js create mode 100644 metadata---docs-api-q-main-window-04-f-efb.699f6e2eb1ac78330311.js create mode 100644 metadata---docs-api-q-pixmapfdf-820.087e26967d50eb06140d.js create mode 100644 metadata---docs-api-q-plain-text-edit-161-ecc.e89eb96f17b29e76629e.js create mode 100644 metadata---docs-api-q-progress-bar-43-d-07e.a527e07318808cde454e.js create mode 100644 metadata---docs-api-q-push-button-96-d-c92.b15a45966fb25f5f9917.js create mode 100644 metadata---docs-api-q-radio-button-367-f7c.11484c432455585a7ef3.js create mode 100644 metadata---docs-api-q-scroll-area-46-a-96e.a5c480374e3f8b5fcea2.js create mode 100644 metadata---docs-api-q-spin-box-809-ae0.1fcda0244eebb91ff1bf.js create mode 100644 metadata---docs-api-q-tab-widgetebc-5aa.558f01cb9860e9184f4f.js create mode 100644 metadata---docs-api-q-widget-287-e6c.1a1aa4d570d756d63bb4.js create mode 100644 metadata---docs-api-qt-enums-423-cf9.fb1940e1fff15d344906.js create mode 100644 metadata---docs-api-synopsis-21-f-a62.a376081207def93aa340.js create mode 100644 metadata---docs-api-yoga-widget-95-c-f8b.bdbc70e8a3ba6a1d1808.js create mode 100644 metadata---docs-development-common-errors-402-ef4.7ea9ca2120cf1ce1bce9.js create mode 100644 metadata---docs-development-debuggingc-36-26a.3bf9d58aef0157443ea5.js create mode 100644 metadata---docs-development-getting-started-89-b-c7a.863d1b0e22372d87282e.js create mode 100644 metadata---docs-development-readm-ec-6-c-332.49158ed40eba176b8d72.js create mode 100644 metadata---docs-development-setting-up-979-75f.8f9fc5a72c685e8d0e31.js create mode 100644 metadata---docs-development-signal-and-event-handling-0-b-5-692.b16a5b795c3eef3ce5dc.js create mode 100644 metadata---docs-development-styling-1-c-2-0d6.c1ae40b22fc3b93cd6fc.js create mode 100644 metadata---docs-development-wrapping-widgets-303-fb8.bfc04ad3ffc9ee24e861.js create mode 100644 metadata---docs-doc-12-a-3-5a1.bb87820e31f222c12801.js create mode 100644 metadata---docs-faq-59-d-2b9.985713e75ca070fdde14.js create mode 100644 metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f.184a7a6a1f10e05c6c54.js create mode 100644 metadata---docs-guides-debugging-970-fb8.4834f7c20eceaaaee536.js create mode 100644 metadata---docs-guides-debugging-in-vscodebf-8-5b0.d26c0a02667ed3c9416d.js create mode 100644 metadata---docs-guides-getting-started-2-b-7-1a4.cfc3dec8bc5f547dfbb8.js create mode 100644 metadata---docs-guides-handle-events-5-eb-540.61bb8e8da8eeda4cc040.js create mode 100644 metadata---docs-guides-images-915-5ee.175b82933d61d3e5deb4.js create mode 100644 metadata---docs-guides-layoutf-65-d7d.3bdf6df942a2264f480b.js create mode 100644 metadata---docs-guides-networkingdfd-ce0.332c039b051021fe2724.js create mode 100644 metadata---docs-guides-nodegui-architecture-550-b82.72d9e2773d4e285ca973.js create mode 100644 metadata---docs-guides-scroll-view-9-a-9-2ac.f6039a7dd2d1fa4c6ca6.js create mode 100644 metadata---docs-guides-styling-9-ea-213.d5570c147002ef8e6bfe.js create mode 100644 metadata---docs-guides-tutorial-1-f-1-23b.4e417b24befa6a685ab5.js create mode 100644 metadata---docs-guides-using-native-node-modules-31-f-551.0accd417ae132a661bdf.js create mode 100644 metadata---docs-mdx-786-f56.e64a4ecfb244bb1efd9f.js create mode 100644 runtime~main.b0186ad8ee6d73168ac3.js create mode 100644 sitemap.xml create mode 100644 tags---blog-tags-8-d-7-36d.1243f2728e886299c73e.js diff --git a/0.821df7f17f7288aebb5e.js b/0.821df7f17f7288aebb5e.js new file mode 100644 index 000000000..c3caeee3f --- /dev/null +++ b/0.821df7f17f7288aebb5e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[0],{162:function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(13);function a(){return(a=Object.assign||function(e){for(var t=1;t0)&&(t.unobserve(n),t.disconnect(),r())}))}))).observe(n))},to:s})):o.a.createElement("a",a({},e,{href:s}))}},170:function(e,t,n){"use strict";var r=n(0),o=n.n(r),i=n(173);t.a=function(e){return o.a.createElement(i.Helmet,e)}},173:function(e,t,n){"use strict";(function(e){function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}Object.defineProperty(t,"__esModule",{value:!0});var o,i,a,c,u=r(n(7)),s=r(n(174)),f=r(n(176)),l=r(n(0)),p=r(n(17)),d="bodyAttributes",h="htmlAttributes",y="titleAttributes",m={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title"},b=(Object.keys(m).map((function(e){return m[e]})),"charset"),v="cssText",T="href",g="http-equiv",w="innerHTML",O="itemprop",C="name",A="property",E="rel",S="src",j={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},P="defaultTitle",k="defer",I="encodeSpecialCharacters",L="onChangeClientState",x="titleTemplate",M=Object.keys(j).reduce((function(e,t){return e[j[t]]=t,e}),{}),R=[m.NOSCRIPT,m.SCRIPT,m.STYLE],N="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},H=function(){function e(e,t){for(var n=0;n=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},Y=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},B=function(e){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];return!1===t?String(e):String(e).replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},U=function(e){var t=J(e,m.TITLE),n=J(e,x);if(n&&t)return n.replace(/%s/g,(function(){return Array.isArray(t)?t.join(""):t}));var r=J(e,P);return t||r||void 0},F=function(e){return J(e,L)||function(){}},K=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return _({},e,t)}),{})},W=function(e,t){return t.filter((function(e){return void 0!==e[m.BASE]})).map((function(e){return e[m.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o=0;n--){var r=e[n];if(r.hasOwnProperty(t))return r[t]}return null},$=(o=Date.now(),function(e){var t=Date.now();t-o>16?(o=t,e(t)):setTimeout((function(){$(e)}),0)}),G=function(e){return clearTimeout(e)},Q="undefined"!=typeof window?window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||$:e.requestAnimationFrame||$,V="undefined"!=typeof window?window.cancelAnimationFrame||window.webkitCancelAnimationFrame||window.mozCancelAnimationFrame||G:e.cancelAnimationFrame||G,X=function(e){return console&&"function"==typeof console.warn&&console.warn(e)},Z=null,ee=function(e,t){var n=e.baseTag,r=e.bodyAttributes,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,c=e.noscriptTags,u=e.onChangeClientState,s=e.scriptTags,f=e.styleTags,l=e.title,p=e.titleAttributes;re(m.BODY,r),re(m.HTML,o),ne(l,p);var d={baseTag:oe(m.BASE,n),linkTags:oe(m.LINK,i),metaTags:oe(m.META,a),noscriptTags:oe(m.NOSCRIPT,c),scriptTags:oe(m.SCRIPT,s),styleTags:oe(m.STYLE,f)},h={},y={};Object.keys(d).forEach((function(e){var t=d[e],n=t.newTags,r=t.oldTags;n.length&&(h[e]=n),r.length&&(y[e]=d[e].oldTags)})),t&&t(),u(e,h,y)},te=function(e){return Array.isArray(e)?e.join(""):e},ne=function(e,t){void 0!==e&&document.title!==e&&(document.title=te(e)),re(m.TITLE,t)},re=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-react-helmet"),o=r?r.split(","):[],i=[].concat(o),a=Object.keys(t),c=0;c=0;l--)n.removeAttribute(i[l]);o.length===i.length?n.removeAttribute("data-react-helmet"):n.getAttribute("data-react-helmet")!==a.join(",")&&n.setAttribute("data-react-helmet",a.join(","))}},oe=function(e,t){var n=document.head||document.querySelector(m.HEAD),r=n.querySelectorAll(e+"[data-react-helmet]"),o=Array.prototype.slice.call(r),i=[],a=void 0;return t&&t.length&&t.forEach((function(t){var n=document.createElement(e);for(var r in t)if(t.hasOwnProperty(r))if(r===w)n.innerHTML=t.innerHTML;else if(r===v)n.styleSheet?n.styleSheet.cssText=t.cssText:n.appendChild(document.createTextNode(t.cssText));else{var c=void 0===t[r]?"":t[r];n.setAttribute(r,c)}n.setAttribute("data-react-helmet","true"),o.some((function(e,t){return a=t,n.isEqualNode(e)}))?o.splice(a,1):i.push(n)})),o.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return n.appendChild(e)})),{oldTags:o,newTags:i}},ie=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},ae=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[j[n]||n]=e[n],t}),t)},ce=function(e,t,n){switch(e){case m.TITLE:return{toComponent:function(){return e=t.title,n=t.titleAttributes,(r={key:e})["data-react-helmet"]=!0,o=ae(n,r),[l.createElement(m.TITLE,o,e)];var e,n,r,o},toString:function(){return function(e,t,n,r){var o=ie(n),i=te(t);return o?"<"+e+' data-react-helmet="true" '+o+">"+B(i,r)+"":"<"+e+' data-react-helmet="true">'+B(i,r)+""}(e,t.title,t.titleAttributes,n)}};case d:case h:return{toComponent:function(){return ae(t)},toString:function(){return ie(t)}};default:return{toComponent:function(){return function(e,t){return t.map((function(t,n){var r,o=((r={key:n})["data-react-helmet"]=!0,r);return Object.keys(t).forEach((function(e){var n=j[e]||e;if(n===w||n===v){var r=t.innerHTML||t.cssText;o.dangerouslySetInnerHTML={__html:r}}else o[n]=t[e]})),l.createElement(e,o)}))}(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!(e===w||e===v)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+B(r[t],n)+'"';return e?e+" "+o:o}),""),i=r.innerHTML||r.cssText||"",a=-1===R.indexOf(e);return t+"<"+e+' data-react-helmet="true" '+o+(a?"/>":">"+i+"")}),"")}(e,t,n)}}}},ue=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,i=e.linkTags,a=e.metaTags,c=e.noscriptTags,u=e.scriptTags,s=e.styleTags,f=e.title,l=void 0===f?"":f,p=e.titleAttributes;return{base:ce(m.BASE,t,r),bodyAttributes:ce(d,n,r),htmlAttributes:ce(h,o,r),link:ce(m.LINK,i,r),meta:ce(m.META,a,r),noscript:ce(m.NOSCRIPT,c,r),script:ce(m.SCRIPT,u,r),style:ce(m.STYLE,s,r),title:ce(m.TITLE,{title:l,titleAttributes:p},r)}},se=s((function(e){return{baseTag:W([T],e),bodyAttributes:K(d,e),defer:J(e,k),encode:J(e,I),htmlAttributes:K(h,e),linkTags:z(m.LINK,[E,T],e),metaTags:z(m.META,[C,b,g,A,O],e),noscriptTags:z(m.NOSCRIPT,[w],e),onChangeClientState:F(e),scriptTags:z(m.SCRIPT,[S,w],e),styleTags:z(m.STYLE,[v],e),title:U(e),titleAttributes:K(y,e)}}),(function(e){Z&&V(Z),e.defer?Z=Q((function(){ee(e,(function(){Z=null}))})):(ee(e),Z=null)}),ue)((function(){return null})),fe=(i=se,c=a=function(e){function t(){return D(this,t),Y(this,e.apply(this,arguments))}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),t.prototype.shouldComponentUpdate=function(e){return!f(this.props,e)},t.prototype.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case m.SCRIPT:case m.NOSCRIPT:return{innerHTML:t};case m.STYLE:return{cssText:t}}throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")},t.prototype.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren,o=e.newChildProps,i=e.nestedChildren;return _({},r,((t={})[n.type]=[].concat(r[n.type]||[],[_({},o,this.mapNestedChildrenToProps(n,i))]),t))},t.prototype.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,i=e.newChildProps,a=e.nestedChildren;switch(r.type){case m.TITLE:return _({},o,((t={})[r.type]=a,t.titleAttributes=_({},i),t));case m.BODY:return _({},o,{bodyAttributes:_({},i)});case m.HTML:return _({},o,{htmlAttributes:_({},i)})}return _({},o,((n={})[r.type]=_({},i),n))},t.prototype.mapArrayTypeChildrenToProps=function(e,t){var n=_({},t);return Object.keys(e).forEach((function(t){var r;n=_({},n,((r={})[t]=e[t],r))})),n},t.prototype.warnOnInvalidChildren=function(e,t){return!0},t.prototype.mapChildrenToProps=function(e,t){var n=this,r={};return l.Children.forEach(e,(function(e){if(e&&e.props){var o=e.props,i=o.children,a=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return Object.keys(e).reduce((function(t,n){return t[M[n]||n]=e[n],t}),t)}(q(o,["children"]));switch(n.warnOnInvalidChildren(e,i),e.type){case m.LINK:case m.META:case m.NOSCRIPT:case m.SCRIPT:case m.STYLE:r=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:r,newChildProps:a,nestedChildren:i});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:a,nestedChildren:i})}}})),t=this.mapArrayTypeChildrenToProps(r,t)},t.prototype.render=function(){var e=this.props,t=e.children,n=q(e,["children"]),r=_({},n);return t&&(r=this.mapChildrenToProps(t,r)),l.createElement(i,r)},H(t,null,[{key:"canUseDOM",set:function(e){i.canUseDOM=e}}]),t}(l.Component),a.propTypes={base:u.object,bodyAttributes:u.object,children:u.oneOfType([u.arrayOf(u.node),u.node]),defaultTitle:u.string,defer:u.bool,encodeSpecialCharacters:u.bool,htmlAttributes:u.object,link:u.arrayOf(u.object),meta:u.arrayOf(u.object),noscript:u.arrayOf(u.object),onChangeClientState:u.func,script:u.arrayOf(u.object),style:u.arrayOf(u.object),title:u.string,titleAttributes:u.object,titleTemplate:u.string},a.defaultProps={defer:!0,encodeSpecialCharacters:!0},a.peek=i.peek,a.rewind=function(){var e=i.rewind();return e||(e=ue({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}})),e},c);fe.renderStatic=fe.rewind,t.Helmet=fe}).call(this,n(24))},174:function(e,t,n){"use strict";function r(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var o=n(0),i=r(o),a=r(n(175));function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var u=!("undefined"==typeof window||!window.document||!window.document.createElement);e.exports=function(e,t,n){if("function"!=typeof e)throw new Error("Expected reducePropsToState to be a function.");if("function"!=typeof t)throw new Error("Expected handleStateChangeOnClient to be a function.");if(void 0!==n&&"function"!=typeof n)throw new Error("Expected mapStateOnServer to either be undefined or a function.");return function(r){if("function"!=typeof r)throw new Error("Expected WrappedComponent to be a React component.");var s,f=[];function l(){s=e(f.map((function(e){return e.props}))),p.canUseDOM?t(s):n&&(s=n(s))}var p=function(e){var t,n;function o(){return e.apply(this,arguments)||this}n=e,(t=o).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,o.peek=function(){return s},o.rewind=function(){if(o.canUseDOM)throw new Error("You may only call rewind() on the server. Call peek() to read the current state.");var e=s;return s=void 0,f=[],e};var c=o.prototype;return c.shouldComponentUpdate=function(e){return!a(e,this.props)},c.componentWillMount=function(){f.push(this),l()},c.componentDidUpdate=function(){l()},c.componentWillUnmount=function(){var e=f.indexOf(this);f.splice(e,1),l()},c.render=function(){return i.createElement(r,this.props)},o}(o.Component);return c(p,"displayName","SideEffect("+function(e){return e.displayName||e.name||"Component"}(r)+")"),c(p,"canUseDOM",u),p}}},175:function(e,t){e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var i=Object.keys(e),a=Object.keys(t);if(i.length!==a.length)return!1;for(var c=Object.prototype.hasOwnProperty.bind(t),u=0;u0&&r.a.createElement("div",{className:"row footer__links"},c.map((function(e,t){return r.a.createElement("div",{key:t,className:"col footer__col"},null!=e.title?r.a.createElement("h4",{className:"footer__title"},e.title):null,null!=e.items&&Array.isArray(e.items)&&e.items.length>0?r.a.createElement("ul",{className:"footer__items"},e.items.map((function(e){return r.a.createElement("li",{key:e.href||e.to,className:"footer__item"},r.a.createElement(h.a,C({className:"footer__link-item"},e,e.href?{target:"_blank",rel:"noopener noreferrer",href:e.href}:{to:s()(e.to)}),e.label))}))):null)}))),(i||n)&&r.a.createElement("div",{className:"text--center"},i&&i.src&&r.a.createElement("div",{className:"margin-bottom--sm"},r.a.createElement("img",{className:"footer__logo",alt:i.alt,src:i.src})),n)))};a(182);t.a=function(e){var t=o()().siteConfig,a=void 0===t?{}:t,n=a.favicon,c=a.tagline,i=a.title,u=a.themeConfig.image,d=a.url,h=e.children,f=e.title,m=e.noFooter,v=e.description,p=e.image,g=e.keywords,b=e.permalink,k=f||"".concat(i," ยท ").concat(c),y=p||u;return r.a.createElement(r.a.Fragment,null,r.a.createElement(l.a,null,r.a.createElement("meta",{charSet:"utf-8"}),r.a.createElement("meta",{httpEquiv:"x-ua-compatible",content:"ie=edge"}),r.a.createElement("meta",{name:"viewport",content:"width=device-width"}),k&&r.a.createElement("title",null,k),k&&r.a.createElement("meta",{property:"og:title",content:k}),n&&r.a.createElement("link",{rel:"shortcut icon",href:s()(n)}),v&&r.a.createElement("meta",{name:"description",content:v}),v&&r.a.createElement("meta",{property:"og:description",content:v}),g&&g.length&&r.a.createElement("meta",{property:"keywords",content:g}),y&&r.a.createElement("meta",{property:"og:image",content:d+s()(y)}),y&&r.a.createElement("meta",{property:"twitter:image",content:d+s()(y)}),y&&r.a.createElement("meta",{name:"twitter:image:alt",content:"Image for ".concat(k)}),b&&r.a.createElement("meta",{property:"og:url",content:d+b}),r.a.createElement("meta",{name:"twitter:card",content:"summary"})),r.a.createElement(N,null),h,!m&&r.a.createElement(O,null))}},165:function(e,t,a){var n;!function(){"use strict";var a={}.hasOwnProperty;function r(){for(var e=[],t=0;tthis.startX&&(this.setState({checked:!0}),this.startX=t,this.activated=ta?this.previouslyChecked!==this.state.checked&&(this.setState({checked:!1}),this.previouslyChecked=this.state.checked,t.click()):this.startX-4=0||Object.prototype.hasOwnProperty.call(e,n)&&(a[n]=e[n]);return a}(t,["className","icons"])),l=(0,o.default)("react-toggle",{"react-toggle--checked":this.state.checked,"react-toggle--focus":this.state.hasFocus,"react-toggle--disabled":this.props.disabled},a);return c.default.createElement("div",{className:l,onClick:this.handleClick,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd},c.default.createElement("div",{className:"react-toggle-track"},c.default.createElement("div",{className:"react-toggle-track-check"},this.getIcon("checked")),c.default.createElement("div",{className:"react-toggle-track-x"},this.getIcon("unchecked"))),c.default.createElement("div",{className:"react-toggle-thumb"}),c.default.createElement("input",n({},r,{ref:function(t){e.input=t},onFocus:this.handleFocus,onBlur:this.handleBlur,className:"react-toggle-screenreader-only",type:"checkbox"})))}}]),t}(l.PureComponent);t.default=f,f.displayName="Toggle",f.defaultProps={icons:{checked:c.default.createElement(s.default,null),unchecked:c.default.createElement(u.default,null)}},f.propTypes={checked:i.default.bool,disabled:i.default.bool,defaultChecked:i.default.bool,onChange:i.default.func,onFocus:i.default.func,onBlur:i.default.func,className:i.default.string,name:i.default.string,value:i.default.string,id:i.default.string,"aria-labelledby":i.default.string,"aria-label":i.default.string,icons:i.default.oneOfType([i.default.bool,i.default.shape({checked:i.default.node,unchecked:i.default.node})])}},178:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,r=a(0),l=(n=r)&&n.__esModule?n:{default:n};t.default=function(){return l.default.createElement("svg",{width:"14",height:"11",viewBox:"0 0 14 11"},l.default.createElement("title",null,"switch-check"),l.default.createElement("path",{d:"M11.264 0L5.26 6.004 2.103 2.847 0 4.95l5.26 5.26 8.108-8.107L11.264 0",fill:"#fff",fillRule:"evenodd"}))}},179:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,r=a(0),l=(n=r)&&n.__esModule?n:{default:n};t.default=function(){return l.default.createElement("svg",{width:"10",height:"10",viewBox:"0 0 10 10"},l.default.createElement("title",null,"switch-x"),l.default.createElement("path",{d:"M9.9 2.12L7.78 0 4.95 2.828 2.12 0 0 2.12l2.83 2.83L0 7.776 2.123 9.9 4.95 7.07 7.78 9.9 9.9 7.776 7.072 4.95 9.9 2.12",fill:"#fff",fillRule:"evenodd"}))}},180:function(e,t,a){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.pointerCoord=function(e){if(e){var t=e.changedTouches;if(t&&t.length>0){var a=t[0];return{x:a.clientX,y:a.clientY}}var n=e.pageX;if(void 0!==n)return{x:n,y:e.pageY}}return{x:0,y:0}}},181:function(e,t,a){e.exports={displayOnlyInLargeViewport:"displayOnlyInLargeViewport_1gtM",toggle:"toggle_16vC",moon:"moon_1N64",sun:"sun_3CZP"}},182:function(e,t,a){}}]); \ No newline at end of file diff --git a/128.e842e81be02948779cd3.js b/128.e842e81be02948779cd3.js new file mode 100644 index 000000000..3cc2ccf2c --- /dev/null +++ b/128.e842e81be02948779cd3.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{167:function(e,t,r){"use strict";(function(e){var n=r(184),a=r.n(n),o=r(185),i=r.n(o),s=r(0),c=r.n(s),l=r(186),u=r(18),f=r(187),d=(r(7),r(198)),p=r(199),h=function(e,t){for(var r=[e[0]],n=0,a=t.length;n=0||Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r},k=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},C=function(e){return"object"===(void 0===e?"undefined":m(e))&&e.constructor===Object},A=Object.freeze([]),x=Object.freeze({});function S(e){return"function"==typeof e}function O(e){return e.displayName||e.name||"Component"}function I(e){return e&&"string"==typeof e.styledComponentId}var j=void 0!==e&&(e.env.REACT_APP_SC_ATTR||e.env.SC_ATTR)||"data-styled",T="undefined"!=typeof window&&"HTMLElement"in window,E="boolean"==typeof SC_DISABLE_SPEEDY&&SC_DISABLE_SPEEDY||void 0!==e&&(e.env.REACT_APP_SC_DISABLE_SPEEDY||e.env.SC_DISABLE_SPEEDY)||!1;var R=function(e){function t(r){g(this,t);for(var n=arguments.length,a=Array(n>1?n-1:0),o=1;o0?" Additional arguments: "+a.join(", "):"")));return k(i)}return b(t,e),t}(Error),P=/^[^\S\n]*?\/\* sc-component-id:\s*(\S+)\s+\*\//gm,N=function(e){var t=""+(e||""),r=[];return t.replace(P,(function(e,t,n){return r.push({componentId:t,matchIndex:n}),e})),r.map((function(e,n){var a=e.componentId,o=e.matchIndex,i=r[n+1];return{componentId:a,cssFromDOM:i?t.slice(o,i.matchIndex):t.slice(o)}}))},M=/^\s*\/\/.*$/gm,L=new a.a({global:!1,cascade:!0,keyframe:!1,prefix:!1,compress:!1,semicolon:!0}),D=new a.a({global:!1,cascade:!0,keyframe:!1,prefix:!0,compress:!1,semicolon:!1}),$=[],F=function(e){if(-2===e){var t=$;return $=[],t}},_=i()((function(e){$.push(e)})),H=void 0,z=void 0,B=void 0,G=function(e,t,r){return t>0&&-1!==r.slice(0,t).indexOf(z)&&r.slice(t-z.length,t)!==z?"."+H:e};D.use([function(e,t,r){2===e&&r.length&&r[0].lastIndexOf(z)>0&&(r[0]=r[0].replace(B,G))},_,F]),L.use([_,F]);var W=function(e){return L("",e)};function q(e,t,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"&",a=e.join("").replace(M,""),o=t&&r?r+" "+t+" { "+a+" }":a;return H=n,z=t,B=new RegExp("\\"+z+"\\b","g"),D(r||!t?"":t,o)}var U=function(){return r.nc},Y=function(e,t,r){r&&((e[t]||(e[t]=Object.create(null)))[r]=!0)},V=function(e,t){e[t]=Object.create(null)},X=function(e){return function(t,r){return void 0!==e[t]&&e[t][r]}},J=function(e){var t="";for(var r in e)t+=Object.keys(e[r]).join(" ")+" ";return t.trim()},Z=function(e){if(e.sheet)return e.sheet;for(var t=e.ownerDocument.styleSheets.length,r=0;r"+e()+""}},re=function(e,t){return function(){var r,n=((r={})[j]=J(t),r["data-styled-version"]="4.4.0",r),a=U();return a&&(n.nonce=a),c.a.createElement("style",y({},n,{dangerouslySetInnerHTML:{__html:e()}}))}},ne=function(e){return function(){return Object.keys(e)}},ae=function(e,t){return e.createTextNode(Q(t))},oe=function e(t,r){var n=void 0===t?Object.create(null):t,a=void 0===r?Object.create(null):r,o=function(e){var t=a[e];return void 0!==t?t:a[e]=[""]},i=function(){var e="";for(var t in a){var r=a[t][0];r&&(e+=Q(t)+r)}return e};return{clone:function(){var t=function(e){var t=Object.create(null);for(var r in e)t[r]=y({},e[r]);return t}(n),r=Object.create(null);for(var o in a)r[o]=[a[o][0]];return e(t,r)},css:i,getIds:ne(a),hasNameForId:X(n),insertMarker:o,insertRules:function(e,t,r){o(e)[0]+=t.join(" "),Y(n,e,r)},removeRules:function(e){var t=a[e];void 0!==t&&(t[0]="",V(n,e))},sealed:!1,styleTag:null,toElement:re(i,n),toHTML:te(i,n)}},ie=function(e,t,r,n,a){if(T&&!r){var o=function(e,t,r){var n=document;e?n=e.ownerDocument:t&&(n=t.ownerDocument);var a=n.createElement("style");a.setAttribute(j,""),a.setAttribute("data-styled-version","4.4.0");var o=U();if(o&&a.setAttribute("nonce",o),a.appendChild(n.createTextNode("")),e&&!t)e.appendChild(a);else{if(!t||!e||!t.parentNode)throw new R(6);t.parentNode.insertBefore(a,r?t:t.nextSibling)}return a}(e,t,n);return E?function(e,t){var r=Object.create(null),n=Object.create(null),a=void 0!==t,o=!1,i=function(t){var a=n[t];return void 0!==a?a:(n[t]=ae(e.ownerDocument,t),e.appendChild(n[t]),r[t]=Object.create(null),n[t])},s=function(){var e="";for(var t in n)e+=n[t].data;return e};return{clone:function(){throw new R(5)},css:s,getIds:ne(n),hasNameForId:X(r),insertMarker:i,insertRules:function(e,n,s){for(var c=i(e),l=[],u=n.length,f=0;f0&&(o=!0,t().insertRules(e+"-import",l))},removeRules:function(i){var s=n[i];if(void 0!==s){var c=ae(e.ownerDocument,i);e.replaceChild(c,s),n[i]=c,V(r,i),a&&o&&t().removeRules(i+"-import")}},sealed:!1,styleTag:e,toElement:re(s,r),toHTML:te(s,r)}}(o,a):function(e,t){var r=Object.create(null),n=Object.create(null),a=[],o=void 0!==t,i=!1,s=function(e){var t=n[e];return void 0!==t?t:(n[e]=a.length,a.push(0),V(r,e),n[e])},c=function(){var t=Z(e).cssRules,r="";for(var o in n){r+=Q(o);for(var i=n[o],s=ee(a,i),c=s-a[i];c0&&(i=!0,t().insertRules(n+"-import",h)),a[u]+=p,Y(r,n,l)},removeRules:function(s){var c=n[s];if(void 0!==c&&!1!==e.isConnected){var l=a[c];!function(e,t,r){for(var n=t-r,a=t;a>n;a-=1)e.deleteRule(a)}(Z(e),ee(a,c)-1,l),a[c]=0,V(r,s),o&&i&&t().removeRules(s+"-import")}},sealed:!1,styleTag:e,toElement:re(c,r),toHTML:te(c,r)}}(o,a)}return oe()},se=/\s+/,ce=void 0;ce=T?E?40:1e3:-1;var le=0,ue=void 0,fe=function(){function e(){var t=this,r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:T?document.head:null,n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];g(this,e),this.getImportRuleTag=function(){var e=t.importRuleTag;if(void 0!==e)return e;var r=t.tags[0];return t.importRuleTag=ie(t.target,r?r.styleTag:null,t.forceServer,!0)},le+=1,this.id=le,this.forceServer=n,this.target=n?null:r,this.tagMap={},this.deferred={},this.rehydratedNames={},this.ignoreRehydratedNames={},this.tags=[],this.capacity=1,this.clones=[]}return e.prototype.rehydrate=function(){if(!T||this.forceServer)return this;var e=[],t=[],r=!1,n=document.querySelectorAll("style["+j+'][data-styled-version="4.4.0"]'),a=n.length;if(!a)return this;for(var o=0;o0&&void 0!==arguments[0]&&arguments[0];ue=new e(void 0,t).rehydrate()},e.prototype.clone=function(){var t=new e(this.target,this.forceServer);return this.clones.push(t),t.tags=this.tags.map((function(e){for(var r=e.getIds(),n=e.clone(),a=0;a1?t-1:0),n=1;n=4;)t=1540483477*(65535&(t=255&e.charCodeAt(a)|(255&e.charCodeAt(++a))<<8|(255&e.charCodeAt(++a))<<16|(255&e.charCodeAt(++a))<<24))+((1540483477*(t>>>16)&65535)<<16),n=1540483477*(65535&n)+((1540483477*(n>>>16)&65535)<<16)^(t=1540483477*(65535&(t^=t>>>24))+((1540483477*(t>>>16)&65535)<<16)),r-=4,++a;switch(r){case 3:n^=(255&e.charCodeAt(a+2))<<16;case 2:n^=(255&e.charCodeAt(a+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(a)))+((1540483477*(n>>>16)&65535)<<16)}return((n=1540483477*(65535&(n^=n>>>13))+((1540483477*(n>>>16)&65535)<<16))^n>>>15)>>>0}var ke=52,Ce=function(e){return String.fromCharCode(e+(e>25?39:97))};function Ae(e){var t="",r=void 0;for(r=e;r>ke;r=Math.floor(r/ke))t=Ce(r%ke)+t;return Ce(r%ke)+t}function xe(e,t){for(var r=0;r2&&void 0!==arguments[2]?arguments[2]:x,n=!!r&&e.theme===r.theme,a=e.theme&&!n?e.theme:t||r.theme;return a},Te=/[[\].#*$><+~=|^:(),"'`-]+/g,Ee=/(^-|-$)/g;function Re(e){return e.replace(Te,"-").replace(Ee,"")}function Pe(e){return"string"==typeof e&&!0}var Ne={childContextTypes:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDerivedStateFromProps:!0,propTypes:!0,type:!0},Me={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},Le=((Se={})[u.ForwardRef]={$$typeof:!0,render:!0},Se),De=Object.defineProperty,$e=Object.getOwnPropertyNames,Fe=Object.getOwnPropertySymbols,_e=void 0===Fe?function(){return[]}:Fe,He=Object.getOwnPropertyDescriptor,ze=Object.getPrototypeOf,Be=Object.prototype,Ge=Array.prototype;function We(e,t,r){if("string"!=typeof t){var n=ze(t);n&&n!==Be&&We(e,n,r);for(var a=Ge.concat($e(t),_e(t)),o=Le[e.$$typeof]||Ne,i=Le[t.$$typeof]||Ne,s=a.length,c=void 0,l=void 0;s--;)if(l=a[s],!(Me[l]||r&&r[l]||i&&i[l]||o&&o[l])&&(c=He(t,l)))try{De(e,l,c)}catch(e){}return e}return e}var qe=Object(s.createContext)(),Ue=qe.Consumer,Ye=(function(e){function t(r){g(this,t);var n=k(this,e.call(this,r));return n.getContext=Object(f.a)(n.getContext.bind(n)),n.renderInner=n.renderInner.bind(n),n}b(t,e),t.prototype.render=function(){return this.props.children?c.a.createElement(qe.Consumer,null,this.renderInner):null},t.prototype.renderInner=function(e){var t=this.getContext(this.props.theme,e);return c.a.createElement(qe.Provider,{value:t},this.props.children)},t.prototype.getTheme=function(e,t){if(S(e))return e(t);if(null===e||Array.isArray(e)||"object"!==(void 0===e?"undefined":m(e)))throw new R(8);return y({},t,e)},t.prototype.getContext=function(e,t){return this.getTheme(e,t)}}(s.Component),function(){function e(){g(this,e),this.masterSheet=fe.master,this.instance=this.masterSheet.clone(),this.sealed=!1}e.prototype.seal=function(){if(!this.sealed){var e=this.masterSheet.clones.indexOf(this.instance);this.masterSheet.clones.splice(e,1),this.sealed=!0}},e.prototype.collectStyles=function(e){if(this.sealed)throw new R(2);return c.a.createElement(Xe,{sheet:this.instance},e)},e.prototype.getStyleTags=function(){return this.seal(),this.instance.toHTML()},e.prototype.getStyleElement=function(){return this.seal(),this.instance.toReactElements()},e.prototype.interleaveWithNodeStream=function(e){throw new R(3)}}(),Object(s.createContext)()),Ve=Ye.Consumer,Xe=function(e){function t(r){g(this,t);var n=k(this,e.call(this,r));return n.getContext=Object(f.a)(n.getContext),n}return b(t,e),t.prototype.getContext=function(e,t){if(e)return e;if(t)return new fe(t);throw new R(4)},t.prototype.render=function(){var e=this.props,t=e.children,r=e.sheet,n=e.target;return c.a.createElement(Ye.Provider,{value:this.getContext(r,n)},t)},t}(s.Component),Je={};var Ze=function(e){function t(){g(this,t);var r=k(this,e.call(this));return r.attrs={},r.renderOuter=r.renderOuter.bind(r),r.renderInner=r.renderInner.bind(r),r}return b(t,e),t.prototype.render=function(){return c.a.createElement(Ve,null,this.renderOuter)},t.prototype.renderOuter=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:fe.master;return this.styleSheet=e,this.props.forwardedComponent.componentStyle.isStatic?this.renderInner():c.a.createElement(Ue,null,this.renderInner)},t.prototype.renderInner=function(e){var t=this.props.forwardedComponent,r=t.componentStyle,n=t.defaultProps,a=(t.displayName,t.foldedComponentIds),o=t.styledComponentId,i=t.target,c=(t.usesTheme,void 0),l=void 0;r.isStatic?c=this.generateAndInjectStyles(x,this.props):(l=je(this.props,e,n),c=this.generateAndInjectStyles(l||x,this.props));var u=this.props.as||this.attrs.as||i,f=Pe(u),p={},h=y({},this.props,this.attrs),m=void 0;for(m in h)"forwardedComponent"!==m&&"as"!==m&&("forwardedRef"===m?p.ref=h[m]:"forwardedAs"===m?p.as=h[m]:f&&!Object(d.a)(m)||(p[m]=h[m]));return this.props.style&&this.attrs.style&&(p.style=y({},this.attrs.style,this.props.style)),p.className=Array.prototype.concat(a,o,c!==o?c:null,this.props.className,this.attrs.className).filter(Boolean).join(" "),Object(s.createElement)(u,p)},t.prototype.buildExecutionContext=function(e,t,r){var n=this,a=y({},t,{theme:e});return r.length?(this.attrs={},r.forEach((function(e){var t,r=e,o=!1,i=void 0,s=void 0;for(s in S(r)&&(r=r(a),o=!0),r)i=r[s],o||!S(i)||(t=i)&&t.prototype&&t.prototype.isReactComponent||I(i)||(i=i(a)),n.attrs[s]=i,a[s]=i})),a):a},t.prototype.generateAndInjectStyles=function(e,t){var r=t.forwardedComponent,n=r.attrs,a=r.componentStyle;r.warnTooManyClasses;return a.isStatic&&!n.length?a.generateAndInjectStyles(x,this.styleSheet):a.generateAndInjectStyles(this.buildExecutionContext(e,t,n),this.styleSheet)},t}(s.Component);function Ke(e,t,r){var n=I(e),a=!Pe(e),o=t.displayName,i=void 0===o?function(e){return Pe(e)?"styled."+e:"Styled("+O(e)+")"}(e):o,s=t.componentId,l=void 0===s?function(e,t,r){var n="string"!=typeof t?"sc":Re(t),a=(Je[n]||0)+1;Je[n]=a;var o=n+"-"+e.generateName(n+a);return r?r+"-"+o:o}(Ie,t.displayName,t.parentComponentId):s,u=t.ParentComponent,f=void 0===u?Ze:u,d=t.attrs,h=void 0===d?A:d,m=t.displayName&&t.componentId?Re(t.displayName)+"-"+t.componentId:t.componentId||l,g=n&&e.attrs?Array.prototype.concat(e.attrs,h).filter(Boolean):h,v=new Ie(n?e.componentStyle.rules.concat(r):r,g,m),b=void 0,k=function(e,t){return c.a.createElement(f,y({},e,{forwardedComponent:b,forwardedRef:t}))};return k.displayName=i,(b=c.a.forwardRef(k)).displayName=i,b.attrs=g,b.componentStyle=v,b.foldedComponentIds=n?Array.prototype.concat(e.foldedComponentIds,e.styledComponentId):A,b.styledComponentId=m,b.target=n?e.target:e,b.withComponent=function(e){var n=t.componentId,a=w(t,["componentId"]),o=n&&n+"-"+(Pe(e)?e:Re(O(e)));return Ke(e,y({},a,{attrs:g,componentId:o,ParentComponent:f}),r)},Object.defineProperty(b,"defaultProps",{get:function(){return this._foldedDefaultProps},set:function(t){this._foldedDefaultProps=n?Object(p.a)(e.defaultProps,t):t}}),b.toString=function(){return"."+b.styledComponentId},a&&We(b,e,{attrs:!0,componentStyle:!0,displayName:!0,foldedComponentIds:!0,styledComponentId:!0,target:!0,withComponent:!0}),b}var Qe=function(e){return function e(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:x;if(!Object(u.isValidElementType)(r))throw new R(1,String(r));var a=function(){return t(r,n,be.apply(void 0,arguments))};return a.withConfig=function(a){return e(t,r,y({},n,a))},a.attrs=function(a){return e(t,r,y({},n,{attrs:Array.prototype.concat(n.attrs,a).filter(Boolean)}))},a}(Ke,e)};["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","big","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","marquee","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","title","tr","track","u","ul","var","video","wbr","circle","clipPath","defs","ellipse","foreignObject","g","image","line","linearGradient","marker","mask","path","pattern","polygon","polyline","radialGradient","rect","stop","svg","text","tspan"].forEach((function(e){Qe[e]=Qe(e)}));!function(){function e(t,r){g(this,e),this.rules=t,this.componentId=r,this.isStatic=xe(t,A),fe.master.hasId(r)||fe.master.deferredInject(r,[])}e.prototype.createStyles=function(e,t){var r=q(ye(this.rules,e,t),"");t.inject(this.componentId,r)},e.prototype.removeStyles=function(e){var t=this.componentId;e.hasId(t)&&e.remove(t)},e.prototype.renderStyles=function(e,t){this.removeStyles(t),this.createStyles(e,t)}}();T&&(window.scCGSHMRCache={});t.a=Qe}).call(this,r(183))},183:function(e,t){var r,n,a=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function s(e){if(r===setTimeout)return setTimeout(e,0);if((r===o||!r)&&setTimeout)return r=setTimeout,setTimeout(e,0);try{return r(e,0)}catch(t){try{return r.call(null,e,0)}catch(t){return r.call(this,e,0)}}}!function(){try{r="function"==typeof setTimeout?setTimeout:o}catch(e){r=o}try{n="function"==typeof clearTimeout?clearTimeout:i}catch(e){n=i}}();var c,l=[],u=!1,f=-1;function d(){u&&c&&(u=!1,c.length?l=c.concat(l):f=-1,l.length&&p())}function p(){if(!u){var e=s(d);u=!0;for(var t=l.length;t;){for(c=l,l=[];++f1)for(var r=1;r])/g,y=/([[}=:>])\s+/g,b=/(\{[^{]+?);(?=\})/g,w=/\s{2,}/g,k=/([^\(])(:+) */g,C=/[svh]\w+-[tblr]{2}/,A=/\(\s*(.*)\s*\)/g,x=/([\s\S]*?);/g,S=/-self|flex-/g,O=/[^]*?(:[rp][el]a[\w-]+)[^]*/,I=/stretch|:\s*\w+\-(?:conte|avail)/,j=/([^-])(image-set\()/,T="-webkit-",E="-moz-",R="-ms-",P=59,N=125,M=123,L=40,D=41,$=91,F=93,_=10,H=13,z=9,B=64,G=32,W=38,q=45,U=95,Y=42,V=44,X=58,J=39,Z=34,K=47,Q=62,ee=43,te=126,re=0,ne=12,ae=11,oe=107,ie=109,se=115,ce=112,le=111,ue=105,fe=99,de=100,pe=112,he=1,me=1,ge=0,ve=1,ye=1,be=1,we=0,ke=0,Ce=0,Ae=[],xe=[],Se=0,Oe=null,Ie=-2,je=-1,Te=0,Ee=1,Re=2,Pe=3,Ne=0,Me=1,Le="",De="",$e="";function Fe(e,t,a,o,i){for(var s,c,u=0,f=0,d=0,p=0,v=0,y=0,b=0,w=0,C=0,x=0,S=0,O=0,I=0,j=0,U=0,we=0,xe=0,Oe=0,Ie=0,je=a.length,He=je-1,Ue="",Ye="",Ve="",Xe="",Je="",Ze="";U0&&(Ye=Ye.replace(n,"")),Ye.trim().length>0)){switch(b){case G:case z:case P:case H:case _:break;default:Ye+=a.charAt(U)}b=P}if(1===xe)switch(b){case M:case N:case P:case Z:case J:case L:case D:case V:xe=0;case z:case H:case _:case G:break;default:for(xe=0,Ie=U,v=b,U--,b=P;Ie0&&(++U,b=v);case M:Ie=je}}switch(b){case M:for(v=(Ye=Ye.trim()).charCodeAt(0),S=1,Ie=++U;U0&&(Ye=Ye.replace(n,"")),y=Ye.charCodeAt(1)){case de:case ie:case se:case q:s=t;break;default:s=Ae}if(Ie=(Ve=Fe(t,s,Ve,y,i+1)).length,Ce>0&&0===Ie&&(Ie=Ye.length),Se>0&&(s=_e(Ae,Ye,Oe),c=We(Pe,Ve,s,t,me,he,Ie,y,i,o),Ye=s.join(""),void 0!==c&&0===(Ie=(Ve=c.trim()).length)&&(y=0,Ve="")),Ie>0)switch(y){case se:Ye=Ye.replace(A,Ge);case de:case ie:case q:Ve=Ye+"{"+Ve+"}";break;case oe:Ve=(Ye=Ye.replace(h,"$1 $2"+(Me>0?Le:"")))+"{"+Ve+"}",Ve=1===ye||2===ye&&Be("@"+Ve,3)?"@"+T+Ve+"@"+Ve:"@"+Ve;break;default:Ve=Ye+Ve,o===pe&&(Xe+=Ve,Ve="")}else Ve="";break;default:Ve=Fe(t,_e(t,Ye,Oe),Ve,o,i+1)}Je+=Ve,O=0,xe=0,j=0,we=0,Oe=0,I=0,Ye="",Ve="",b=a.charCodeAt(++U);break;case N:case P:if((Ie=(Ye=(we>0?Ye.replace(n,""):Ye).trim()).length)>1)switch(0===j&&((v=Ye.charCodeAt(0))===q||v>96&&v<123)&&(Ie=(Ye=Ye.replace(" ",":")).length),Se>0&&void 0!==(c=We(Ee,Ye,t,e,me,he,Xe.length,o,i,o))&&0===(Ie=(Ye=c.trim()).length)&&(Ye="\0\0"),v=Ye.charCodeAt(0),y=Ye.charCodeAt(1),v){case re:break;case B:if(y===ue||y===fe){Ze+=Ye+a.charAt(U);break}default:if(Ye.charCodeAt(Ie-1)===X)break;Xe+=ze(Ye,v,y,Ye.charCodeAt(2))}O=0,xe=0,j=0,we=0,Oe=0,Ye="",b=a.charCodeAt(++U)}}switch(b){case H:case _:if(f+p+d+u+ke===0)switch(x){case D:case J:case Z:case B:case te:case Q:case Y:case ee:case K:case q:case X:case V:case P:case M:case N:break;default:j>0&&(xe=1)}f===K?f=0:ve+O===0&&o!==oe&&Ye.length>0&&(we=1,Ye+="\0"),Se*Ne>0&&We(Te,Ye,t,e,me,he,Xe.length,o,i,o),he=1,me++;break;case P:case N:if(f+p+d+u===0){he++;break}default:switch(he++,Ue=a.charAt(U),b){case z:case G:if(p+u+f===0)switch(w){case V:case X:case z:case G:Ue="";break;default:b!==G&&(Ue=" ")}break;case re:Ue="\\0";break;case ne:Ue="\\f";break;case ae:Ue="\\v";break;case W:p+f+u===0&&ve>0&&(Oe=1,we=1,Ue="\f"+Ue);break;case 108:if(p+f+u+ge===0&&j>0)switch(U-j){case 2:w===ce&&a.charCodeAt(U-3)===X&&(ge=w);case 8:C===le&&(ge=C)}break;case X:p+f+u===0&&(j=U);break;case V:f+d+p+u===0&&(we=1,Ue+="\r");break;case Z:case J:0===f&&(p=p===b?0:0===p?b:p);break;case $:p+f+d===0&&u++;break;case F:p+f+d===0&&u--;break;case D:p+f+u===0&&d--;break;case L:if(p+f+u===0){if(0===O)switch(2*w+3*C){case 533:break;default:S=0,O=1}d++}break;case B:f+d+p+u+j+I===0&&(I=1);break;case Y:case K:if(p+u+d>0)break;switch(f){case 0:switch(2*b+3*a.charCodeAt(U+1)){case 235:f=K;break;case 220:Ie=U,f=Y}break;case Y:b===K&&w===Y&&Ie+2!==U&&(33===a.charCodeAt(Ie+2)&&(Xe+=a.substring(Ie,U+1)),Ue="",f=0)}}if(0===f){if(ve+p+u+I===0&&o!==oe&&b!==P)switch(b){case V:case te:case Q:case ee:case D:case L:if(0===O){switch(w){case z:case G:case _:case H:Ue+="\0";break;default:Ue="\0"+Ue+(b===V?"":"\0")}we=1}else switch(b){case L:j+7===U&&108===w&&(j=0),O=++S;break;case D:0==(O=--S)&&(we=1,Ue+="\0")}break;case z:case G:switch(w){case re:case M:case N:case P:case V:case ne:case z:case G:case _:case H:break;default:0===O&&(we=1,Ue+="\0")}}Ye+=Ue,b!==G&&b!==z&&(x=b)}}C=w,w=b,U++}if(Ie=Xe.length,Ce>0&&0===Ie&&0===Je.length&&0===t[0].length==0&&(o!==ie||1===t.length&&(ve>0?De:$e)===t[0])&&(Ie=t.join(",").length+2),Ie>0){if(s=0===ve&&o!==oe?function(e){for(var t,r,a=0,o=e.length,i=Array(o);a1)){if(d=c.charCodeAt(c.length-1),p=r.charCodeAt(0),t="",0!==u)switch(d){case Y:case te:case Q:case ee:case G:case L:break;default:t=" "}switch(p){case W:r=t+De;case te:case Q:case ee:case G:case D:case L:break;case $:r=t+r+De;break;case X:switch(2*r.charCodeAt(1)+3*r.charCodeAt(2)){case 530:if(be>0){r=t+r.substring(8,f-1);break}default:(u<1||s[u-1].length<1)&&(r=t+De+r)}break;case V:t="";default:r=f>1&&r.indexOf(":")>0?t+r.replace(k,"$1"+De+"$2"):t+r+De}c+=r}i[a]=c.replace(n,"").trim()}return i}(t):t,Se>0&&void 0!==(c=We(Re,Xe,s,e,me,he,Ie,o,i,o))&&0===(Xe=c).length)return Ze+Xe+Je;if(Xe=s.join(",")+"{"+Xe+"}",ye*ge!=0){switch(2!==ye||Be(Xe,2)||(ge=0),ge){case le:Xe=Xe.replace(g,":"+E+"$1")+Xe;break;case ce:Xe=Xe.replace(m,"::"+T+"input-$1")+Xe.replace(m,"::"+E+"$1")+Xe.replace(m,":"+R+"input-$1")+Xe}ge=0}}return Ze+Xe+Je}function _e(e,t,r){var n=t.trim().split(u),a=n,o=n.length,i=e.length;switch(i){case 0:case 1:for(var s=0,c=0===i?"":e[0]+" ";s0&&ve>0)return a.replace(d,"$1").replace(f,"$1"+$e);break;default:return e.trim()+a.replace(f,"$1"+e.trim())}default:if(r*ve>0&&a.indexOf("\f")>0)return a.replace(f,(e.charCodeAt(0)===X?"":"$1")+e.trim())}return e+a}function ze(e,t,r,n){var l,u=0,f=e+";",d=2*t+3*r+4*n;if(944===d)return function(e){var t=e.length,r=e.indexOf(":",9)+1,n=e.substring(0,r).trim(),a=e.substring(r,t-1).trim();switch(e.charCodeAt(9)*Me){case 0:break;case q:if(110!==e.charCodeAt(10))break;default:var o=a.split((a="",s)),i=0;for(r=0,t=o.length;iB&&f<90||f>96&&f<123||f===U||f===q&&l.charCodeAt(1)!==q))switch(isNaN(parseFloat(l))+(-1!==l.indexOf("("))){case 1:switch(l){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:l+=Le}}u[r++]=l}a+=(0===i?"":",")+u.join(" ")}}return a=n+a+";",1===ye||2===ye&&Be(a,1)?T+a+a:a}(f);if(0===ye||2===ye&&!Be(f,1))return f;switch(d){case 1015:return 97===f.charCodeAt(10)?T+f+f:f;case 951:return 116===f.charCodeAt(3)?T+f+f:f;case 963:return 110===f.charCodeAt(5)?T+f+f:f;case 1009:if(100!==f.charCodeAt(4))break;case 969:case 942:return T+f+f;case 978:return T+f+E+f+f;case 1019:case 983:return T+f+E+f+R+f+f;case 883:return f.charCodeAt(8)===q?T+f+f:f.indexOf("image-set(",11)>0?f.replace(j,"$1"+T+"$2")+f:f;case 932:if(f.charCodeAt(4)===q)switch(f.charCodeAt(5)){case 103:return T+"box-"+f.replace("-grow","")+T+f+R+f.replace("grow","positive")+f;case 115:return T+f+R+f.replace("shrink","negative")+f;case 98:return T+f+R+f.replace("basis","preferred-size")+f}return T+f+R+f+f;case 964:return T+f+R+"flex-"+f+f;case 1023:if(99!==f.charCodeAt(8))break;return l=f.substring(f.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),T+"box-pack"+l+T+f+R+"flex-pack"+l+f;case 1005:return o.test(f)?f.replace(a,":"+T)+f.replace(a,":"+E)+f:f;case 1e3:switch(u=(l=f.substring(13).trim()).indexOf("-")+1,l.charCodeAt(0)+l.charCodeAt(u)){case 226:l=f.replace(C,"tb");break;case 232:l=f.replace(C,"tb-rl");break;case 220:l=f.replace(C,"lr");break;default:return f}return T+f+R+l+f;case 1017:if(-1===f.indexOf("sticky",9))return f;case 975:switch(u=(f=e).length-10,d=(l=(33===f.charCodeAt(u)?f.substring(0,u):f).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|l.charCodeAt(7))){case 203:if(l.charCodeAt(8)<111)break;case 115:f=f.replace(l,T+l)+";"+f;break;case 207:case 102:f=f.replace(l,T+(d>102?"inline-":"")+"box")+";"+f.replace(l,T+l)+";"+f.replace(l,R+l+"box")+";"+f}return f+";";case 938:if(f.charCodeAt(5)===q)switch(f.charCodeAt(6)){case 105:return l=f.replace("-items",""),T+f+T+"box-"+l+R+"flex-"+l+f;case 115:return T+f+R+"flex-item-"+f.replace(S,"")+f;default:return T+f+R+"flex-line-pack"+f.replace("align-content","").replace(S,"")+f}break;case 973:case 989:if(f.charCodeAt(3)!==q||122===f.charCodeAt(4))break;case 931:case 953:if(!0===I.test(e))return 115===(l=e.substring(e.indexOf(":")+1)).charCodeAt(0)?ze(e.replace("stretch","fill-available"),t,r,n).replace(":fill-available",":stretch"):f.replace(l,T+l)+f.replace(l,E+l.replace("fill-",""))+f;break;case 962:if(f=T+f+(102===f.charCodeAt(5)?R+f:"")+f,r+n===211&&105===f.charCodeAt(13)&&f.indexOf("transform",10)>0)return f.substring(0,f.indexOf(";",27)+1).replace(i,"$1"+T+"$2")+f}return f}function Be(e,t){var r=e.indexOf(1===t?":":"{"),n=e.substring(0,3!==t?r:10),a=e.substring(r+1,e.length-1);return Oe(2!==t?n:n.replace(O,"$1"),a,t)}function Ge(e,t){var r=ze(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return r!==t+";"?r.replace(x," or ($1)").substring(4):"("+t+")"}function We(e,t,r,n,a,o,i,s,c,l){for(var u,f=0,d=t;f0&&(Le=a.replace(p,o===$?"":"-")),o=1,1===ve?$e=a:De=a;var i,s=[$e];Se>0&&void 0!==(i=We(je,r,s,s,me,he,0,0,0,0))&&"string"==typeof i&&(r=i);var c=Fe(Ae,s,r,0,0);return Se>0&&void 0!==(i=We(Ie,c,s,s,me,he,c.length,0,0,0))&&"string"!=typeof(c=i)&&(o=0),Le="",$e="",De="",ge=0,me=1,he=1,we*o==0?c:c.replace(n,"").replace(v,"").replace(y,"$1").replace(b,"$1").replace(w," ")}return Ye.use=function e(t){switch(t){case void 0:case null:Se=xe.length=0;break;default:if("function"==typeof t)xe[Se++]=t;else if("object"==typeof t)for(var r=0,n=t.length;r/,prolog:/<\?[\s\S]+?\?>/,doctype://i,cdata://i,tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/i,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/i,inside:{punctuation:[/^=/,{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},p.a.languages.markup.tag.inside["attr-value"].inside.entity=p.a.languages.markup.entity,p.a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(p.a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:p.a.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:p.a.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[\s\S]*?>)(?:\s*|[\s\S])*?(?=<\/__>)/.source.replace(/__/g,e),"i"),lookbehind:!0,greedy:!0,inside:a},p.a.languages.insertBefore("markup","cdata",r)}}),p.a.languages.xml=p.a.languages.extend("markup",{}),p.a.languages.html=p.a.languages.markup,p.a.languages.mathml=p.a.languages.markup,p.a.languages.svg=p.a.languages.markup,function(e){var t={variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[\w#?*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)["']?(\w+?)["']?\s*\r?\n(?:[\s\S])*?\r?\n\2/,lookbehind:!0,greedy:!0,inside:t},{pattern:/(["'])(?:\\[\s\S]|\$\([^)]+\)|`[^`]+`|(?!\1)[^\\])*\1/,greedy:!0,inside:t}],variable:t.variable,function:{pattern:/(^|[\s;|&])(?:add|alias|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|hash|head|help|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logout|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tail|tar|tee|test|time|timeout|times|top|touch|tr|traceroute|trap|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zip|zypper)(?=$|[\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&])(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|[\s;|&])/,lookbehind:!0},boolean:{pattern:/(^|[\s;|&])(?:true|false)(?=$|[\s;|&])/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var n=t.variable[1].inside;n.string=e.languages.bash.string,n.function=e.languages.bash.function,n.keyword=e.languages.bash.keyword,n.boolean=e.languages.bash.boolean,n.operator=e.languages.bash.operator,n.punctuation=e.languages.bash.punctuation,e.languages.shell=e.languages.bash}(p.a),p.a.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},p.a.languages.c=p.a.languages.extend("clike",{"class-name":{pattern:/(\b(?:enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/,number:/(?:\b0x(?:[\da-f]+\.?[\da-f]*|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?)[ful]*/i}),p.a.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+(?:[^\r\n\\]|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(?:<.+?>|("|')(?:\\?.)+?\2)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(?:define|defined|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(?:__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|stdin|stdout|stderr)\b/}),delete p.a.languages.c.boolean,p.a.languages.cpp=p.a.languages.extend("c",{"class-name":{pattern:/(\b(?:class|enum|struct)\s+)\w+/,lookbehind:!0},keyword:/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|int8_t|int16_t|int32_t|int64_t|uint8_t|uint16_t|uint32_t|uint64_t|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,boolean:/\b(?:true|false)\b/,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),p.a.languages.insertBefore("cpp","string",{"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),function(e){var t=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-]+?[\s\S]*?(?:;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:RegExp("url\\((?:"+t.source+"|.*?)\\)","i"),selector:RegExp("[^{}\\s](?:[^{};\"']|"+t.source+")*?(?=\\s*\\{)"),string:{pattern:t,greedy:!0},property:/[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*(?=\s*:)/i,important:/!important\b/i,function:/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),e.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:n.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:e.languages.css}},alias:"language-css"}},n.tag))}(p.a),p.a.languages.css.selector={pattern:p.a.languages.css.selector,inside:{"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-:.\w]+/,id:/#[-:.\w]+/,attribute:{pattern:/\[(?:[^[\]"']|("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1)*\]/,greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)[-*\w\xA0-\uFFFF]*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},attribute:{pattern:/^(\s*)[-\w\xA0-\uFFFF]+/,lookbehind:!0},value:[/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,{pattern:/(=\s*)[-\w\xA0-\uFFFF]+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},punctuation:/[()]/}},p.a.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--[-_a-z\xA0-\uFFFF][-\w\xA0-\uFFFF]*/i,lookbehind:!0}}),p.a.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:/#[\da-f]{3,8}/i,entity:/\\[\da-f]{1,8}/i,unit:{pattern:/(\d)(?:%|[a-z]+)/,lookbehind:!0},number:/-?[\d.]+/}),p.a.languages.javascript=p.a.languages.extend("clike",{"class-name":[p.a.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])[_$A-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\.(?:prototype|constructor))/,lookbehind:!0}],keyword:[{pattern:/((?:^|})\s*)(?:catch|finally)\b/,lookbehind:!0},{pattern:/(^|[^.])\b(?:as|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],number:/\b(?:(?:0[xX][\dA-Fa-f]+|0[bB][01]+|0[oO][0-7]+)n?|\d+n|NaN|Infinity)\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,function:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,operator:/-[-=]?|\+[+=]?|!=?=?|<>?>?=?|=(?:==?|>)?|&[&=]?|\|[|=]?|\*\*?=?|\/=?|~|\^=?|%=?|\?|\.{3}/}),p.a.languages.javascript["class-name"][0].pattern=/(\b(?:class|interface|extends|implements|instanceof|new)\s+)[\w.\\]+/,p.a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s])\s*)\/(\[(?:[^\]\\\r\n]|\\.)*]|\\.|[^/\\\[\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})\]]))/,lookbehind:!0,greedy:!0},"function-variable":{pattern:/[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*)?\s*\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\))/,lookbehind:!0,inside:p.a.languages.javascript},{pattern:/[_$a-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*(?=\s*=>)/i,inside:p.a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*=>)/,lookbehind:!0,inside:p.a.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:[_$A-Za-z\xA0-\uFFFF][$\w\xA0-\uFFFF]*\s*)\(\s*)(?!\s)(?:[^()]|\([^()]*\))+?(?=\s*\)\s*\{)/,lookbehind:!0,inside:p.a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),p.a.languages.insertBefore("javascript","string",{"template-string":{pattern:/`(?:\\[\s\S]|\${[^}]+}|[^\\`])*`/,greedy:!0,inside:{interpolation:{pattern:/\${[^}]+}/,inside:{"interpolation-punctuation":{pattern:/^\${|}$/,alias:"punctuation"},rest:p.a.languages.javascript}},string:/[\s\S]+/}}}),p.a.languages.markup&&p.a.languages.markup.tag.addInlined("script","javascript"),p.a.languages.js=p.a.languages.javascript,function(e){var t=e.util.clone(e.languages.javascript);e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=/<\/?(?:[\w.:-]+\s*(?:\s+(?:[\w.:-]+(?:=(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s{'">=]+|\{(?:\{(?:\{[^}]*\}|[^{}])*\}|[^{}])+\}))?|\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}))*\s*\/?)?>/i,e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/i,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|[^\s'">]+)/i,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.insertBefore("inside","attr-name",{spread:{pattern:/\{\.{3}[a-z_$][\w$]*(?:\.[a-z_$][\w$]*)*\}/,inside:{punctuation:/\.{3}|[{}.]/,"attr-value":/\w+/}}},e.languages.jsx.tag),e.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{(?:\{[^}]*\}|[^}])*\}|[^}])+\})/i,inside:{"script-punctuation":{pattern:/^=(?={)/,alias:"punctuation"},rest:e.languages.jsx},alias:"language-javascript"}},e.languages.jsx.tag);var n=function e(t){return t?"string"==typeof t?t:"string"==typeof t.content?t.content:t.content.map(e).join(""):""};e.hooks.add("after-tokenize",(function(t){"jsx"!==t.language&&"tsx"!==t.language||function t(a){for(var r=[],i=0;i0&&r[r.length-1].tagName===n(o.content[0].content[1])&&r.pop():"/>"===o.content[o.content.length-1].content||r.push({tagName:n(o.content[0].content[1]),openedBraces:0}):r.length>0&&"punctuation"===o.type&&"{"===o.content?r[r.length-1].openedBraces++:r.length>0&&r[r.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?r[r.length-1].openedBraces--:s=!0),(s||"string"==typeof o)&&r.length>0&&0===r[r.length-1].openedBraces){var l=n(o);i0&&("string"==typeof a[i-1]||"plain-text"===a[i-1].type)&&(l=n(a[i-1])+l,a.splice(i-1,1),i--),a[i]=new e.Token("plain-text",l,null,l)}o.content&&"string"!=typeof o.content&&t(o.content)}}(t.tokens)}))}(p.a),a=p.a,r=a.languages.javadoclike={parameter:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*@(?:param|arg|arguments)\s+)\w+/m,lookbehind:!0},keyword:{pattern:/(^\s*(?:\/{3}|\*|\/\*\*)\s*|\{)@[a-z][a-zA-Z-]+\b/m,lookbehind:!0},punctuation:/[{}]/},Object.defineProperty(r,"addSupport",{value:function(e,t){"string"==typeof e&&(e=[e]),e.forEach((function(e){!function(e,t){var n=a.languages[e];if(n){var r=n["doc-comment"];if(!r){var i={"doc-comment":{pattern:/(^|[^\\])\/\*\*[^/][\s\S]*?(?:\*\/|$)/,alias:"comment"}};r=(n=a.languages.insertBefore(e,"comment",i))["doc-comment"]}if(r instanceof RegExp&&(r=n["doc-comment"]={pattern:r}),Array.isArray(r))for(var o=0,s=r.length;o>>?=?|->|([-+&|])\2|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0}}),e.languages.insertBefore("java","class-name",{annotation:{alias:"punctuation",pattern:/(^|[^.])@\w+/,lookbehind:!0},namespace:{pattern:/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)[a-z]\w*(\.[a-z]\w*)+/,lookbehind:!0,inside:{punctuation:/\./}},generics:{pattern:/<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<(?:[\w\s,.&?]|<[\w\s,.&?]*>)*>)*>)*>/,inside:{"class-name":n,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}}})}(p.a),function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,r,i){if(n.language===a){var o=n.tokenStack=[];n.code=n.code.replace(r,(function(e){if("function"==typeof i&&!i(e))return e;for(var r,s=o.length;-1!==n.code.indexOf(r=t(a,s));)++s;return o[s]=e,r})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var r=0,i=Object.keys(n.tokenStack);!function o(s){for(var l=0;l=i.length);l++){var c=s[l];if("string"==typeof c||c.content&&"string"==typeof c.content){var u=i[r],p=n.tokenStack[u],d="string"==typeof c?c:c.content,g=t(a,u),f=d.indexOf(g);if(f>-1){++r;var b=d.substring(0,f),m=new e.Token(a,e.tokenize(p,n.grammar),"language-"+a,p),h=d.substring(f+g.length),y=[];b&&y.push.apply(y,o([b])),y.push(m),h&&y.push.apply(y,o([h])),"string"==typeof c?s.splice.apply(s,[l,1].concat(y)):c.content=y}}else c.content&&o(c.content)}return s}(n.tokens)}}}})}(p.a),function(e){e.languages.php=e.languages.extend("clike",{keyword:/\b(?:__halt_compiler|abstract|and|array|as|break|callable|case|catch|class|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|eval|exit|extends|final|finally|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|namespace|new|or|parent|print|private|protected|public|require|require_once|return|static|switch|throw|trait|try|unset|use|var|while|xor|yield)\b/i,boolean:{pattern:/\b(?:false|true)\b/i,alias:"constant"},constant:[/\b[A-Z_][A-Z0-9_]*\b/,/\b(?:null)\b/i],comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0}}),e.languages.insertBefore("php","string",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),e.languages.insertBefore("php","comment",{delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"}}),e.languages.insertBefore("php","keyword",{variable:/\$+(?:\w+\b|(?={))/i,package:{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),e.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}});var t={pattern:/{\$(?:{(?:{[^{}]+}|[^{}]+)}|[^{}])+}|(^|[^\\{])\$+(?:\w+(?:\[.+?]|->\w+)*)/,lookbehind:!0,inside:{rest:e.languages.php}};e.languages.insertBefore("php","string",{"nowdoc-string":{pattern:/<<<'([^']+)'(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;/,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},"heredoc-string":{pattern:/<<<(?:"([^"]+)"(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\1;|([a-z_]\w*)(?:\r\n?|\n)(?:.*(?:\r\n?|\n))*?\2;)/i,greedy:!0,alias:"string",inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:t}},"single-quoted-string":{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0,alias:"string"},"double-quoted-string":{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,alias:"string",inside:{interpolation:t}}}),delete e.languages.php.string,e.hooks.add("before-tokenize",(function(t){if(/<\?/.test(t.code)){e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#)(?:[^?\n\r]|\?(?!>))*|\/\*[\s\S]*?(?:\*\/|$))*?(?:\?>|$)/gi)}})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(p.a),function(e){var t=e.languages.javascript,n=/{(?:[^{}]|{(?:[^{}]|{[^{}]*})*})+}/.source,a="(@(?:param|arg|argument|property)\\s+(?:"+n+"\\s+)?)";e.languages.jsdoc=e.languages.extend("javadoclike",{parameter:{pattern:RegExp(a+/[$\w\xA0-\uFFFF.]+(?=\s|$)/.source),lookbehind:!0,inside:{punctuation:/\./}}}),e.languages.insertBefore("jsdoc","keyword",{"optional-parameter":{pattern:RegExp(a+/\[[$\w\xA0-\uFFFF.]+(?:=[^[\]]+)?\](?=\s|$)/.source),lookbehind:!0,inside:{parameter:{pattern:/(^\[)[$\w\xA0-\uFFFF\.]+/,lookbehind:!0,inside:{punctuation:/\./}},code:{pattern:/(=)[\s\S]*(?=\]$)/,lookbehind:!0,inside:t,alias:"language-javascript"},punctuation:/[=[\]]/}},"class-name":[{pattern:RegExp("(@[a-z]+\\s+)"+n),lookbehind:!0,inside:{punctuation:/[.,:?=<>|{}()[\]]/}},{pattern:/(@(?:augments|extends|class|interface|memberof!?|this)\s+)[A-Z]\w*(?:\.[A-Z]\w*)*/,lookbehind:!0,inside:{punctuation:/\./}}],example:{pattern:/(@example\s+)[^@]+?(?=\s*(?:\*\s*)?(?:@\w|\*\/))/,lookbehind:!0,inside:{code:{pattern:/^(\s*(?:\*\s*)?).+$/m,lookbehind:!0,inside:t,alias:"language-javascript"}}}}),e.languages.javadoclike.addSupport("javascript",e.languages.jsdoc)}(p.a),p.a.languages.actionscript=p.a.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<>?>?|[!=]=?)=?|[~?@]/}),p.a.languages.actionscript["class-name"].alias="function",p.a.languages.markup&&p.a.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\[\s\S]|(?!\2)[^\\])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:p.a.languages.markup}}}),function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(p.a),function(e){e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:(?:Uint|Int)(?:8|16|32)|Uint8Clamped|Float(?:32|64))?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|(?:Weak)?(?:Set|Map)|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:/(\.\s*)[_$a-zA-Z\xA0-\uFFFF][$\w\xA0-\uFFFF]*/,lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|location|navigator|performance|(?:local|session)Storage|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var t=["function","function-variable","method","method-variable","property-access"],n=0;n))/i,delete e.languages.flow.parameter,e.languages.insertBefore("flow","operator",{"flow-punctuation":{pattern:/\{\||\|\}/,alias:"punctuation"}}),Array.isArray(e.languages.flow.keyword)||(e.languages.flow.keyword=[e.languages.flow.keyword]),e.languages.flow.keyword.unshift({pattern:/(^|[^$]\b)(?:type|opaque|declare|Class)\b(?!\$)/,lookbehind:!0},{pattern:/(^|[^$]\B)\$(?:await|Diff|Exact|Keys|ObjMap|PropertyType|Shape|Record|Supertype|Subtype|Enum)\b(?!\$)/,lookbehind:!0})}(p.a),p.a.languages.n4js=p.a.languages.extend("javascript",{keyword:/\b(?:any|Array|boolean|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|false|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|module|new|null|number|package|private|protected|public|return|set|static|string|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/}),p.a.languages.insertBefore("n4js","constant",{annotation:{pattern:/@+\w+/,alias:"operator"}}),p.a.languages.n4jsd=p.a.languages.n4js,p.a.languages.typescript=p.a.languages.extend("javascript",{keyword:/\b(?:abstract|as|async|await|break|case|catch|class|const|constructor|continue|debugger|declare|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|is|keyof|let|module|namespace|new|null|of|package|private|protected|public|readonly|return|require|set|static|super|switch|this|throw|try|type|typeof|var|void|while|with|yield)\b/,builtin:/\b(?:string|Function|any|number|boolean|Array|symbol|console|Promise|unknown|never)\b/}),p.a.languages.ts=p.a.languages.typescript,p.a.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m],deleted:/^[-<].*$/m,inserted:/^[+>].*$/m,diff:{pattern:/^!(?!!).+$/m,alias:"important"}},p.a.languages.git={comment:/^#.*/m,deleted:/^[-โ€“].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},p.a.languages.go=p.a.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete p.a.languages.go["class-name"],p.a.languages.graphql={comment:/#.*/,string:{pattern:/"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:true|false)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+)[a-zA-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:enum|fragment|implements|input|interface|mutation|on|query|scalar|schema|type|union)\b/,operator:/[!=|]|\.{3}/,punctuation:/[!(){}\[\]:=,]/,constant:/\b(?!ID\b)[A-Z][A-Z_\d]*\b/},function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/i,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:true|false)\b/,block:{pattern:/^(\s*~?\s*)[#\/]\S+?(?=\s*~?\s*$|\s)/i,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,.\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")}))}(p.a),p.a.languages.json={comment:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,property:{pattern:/"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,greedy:!0},string:{pattern:/"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,greedy:!0},number:/-?\d+\.?\d*(e[+-]?\d+)?/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},p.a.languages.less=p.a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,operator:/[+\-*\/]/}),p.a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,lookbehind:!0,alias:"function"}}),p.a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},p.a.languages.markdown=p.a.languages.extend("markup",{}),p.a.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\r?\n|\r))[\s\S]+?(?=(?:\r?\n|\r)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,greedy:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,greedy:!0,inside:{punctuation:/^[*_]|[*_]$/}},strike:{pattern:/(^|[^\\])(~~?)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,greedy:!0,inside:{punctuation:/^~~?|~~?$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),["bold","italic","strike"].forEach((function(e){["url","bold","italic","strike"].forEach((function(t){e!==t&&(p.a.languages.markdown[e].inside[t]=p.a.languages.markdown[t])}))})),p.a.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,a=t.length;n]?|\+\+?|!=?|<>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete p.a.languages.objectivec["class-name"],p.a.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,type:{pattern:/\B['`]\w*/,alias:"variable"},directive:{pattern:/\B#\w+/,alias:"function"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/,punctuation:/[(){}\[\]|_.,:;]/},p.a.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},"string-interpolation":{pattern:/(?:f|rf|fr)(?:("""|''')[\s\S]+?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:{{)*){(?!{)(?:[^{}]|{(?!{)(?:[^{}]|{(?!{)(?:[^{}])+})+})+}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|rb|br)?("""|''')[\s\S]+?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|rb|br)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^\s*)@\w+(?:\.\w+)*/i,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:and|as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:True|False|None)\b/,number:/(?:\b(?=\d)|\B(?=\.))(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},p.a.languages.python["string-interpolation"].inside.interpolation.inside.rest=p.a.languages.python,p.a.languages.py=p.a.languages.python,p.a.languages.reason=p.a.languages.extend("clike",{comment:{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/}),p.a.languages.insertBefore("reason","class-name",{character:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,alias:"string"},constructor:{pattern:/\b[A-Z]\w*\b(?!\s*\.)/,alias:"variable"},label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete p.a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,lookbehind:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,inside:{atrule:/(?:@[\w-]+|[+=])/m}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,{pattern:/(\s+)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,lookbehind:!0}})}(p.a),p.a.languages.scss=p.a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)*url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()]|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}]+[:{][^}]+))/m,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[\w-]|\$[-\w]+|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),p.a.languages.insertBefore("scss","atrule",{keyword:[/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,{pattern:/( +)(?:from|through)(?= )/,lookbehind:!0}]}),p.a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),p.a.languages.insertBefore("scss","function",{placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:true|false)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,lookbehind:!0}}),p.a.languages.scss.atrule.inside.rest=p.a.languages.scss,p.a.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b0x[\da-f]+\b|\b\d+\.?\d*|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t={url:/url\((["']?).*?\1\)/i,string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:if|else|for|return|unless)(?=\s+|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,number:/\b\d+(?:\.\d+)?%?/,boolean:/\b(?:true|false)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.+|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],punctuation:/[{}()\[\];:,]/};t.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^{|}$/,alias:"punctuation"},rest:t}},t.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:t}},e.languages.stylus={comment:{pattern:/(^|[^\\])(\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},"atrule-declaration":{pattern:/(^\s*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:t}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:(?:\{[^}]*\}|.+)|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:t}},statement:{pattern:/(^[ \t]*)(?:if|else|for|return|unless)[ \t]+.+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:t}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)[^{\r\n]*(?:;|[^{\r\n,](?=$)(?!(\r?\n|\r)(?:\{|\2[ \t]+)))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:t.interpolation}},rest:t}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\))?|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t]+)))/m,lookbehind:!0,inside:{interpolation:t.interpolation,punctuation:/[{},]/}},func:t.func,string:t.string,interpolation:t.interpolation,punctuation:/[{}()\[\];:.]/}}(p.a),p.a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^_`|~]+/i,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/},p.a.languages.yaml={scalar:{pattern:/([\-:]\s*(?:![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\2[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*(?:^|[:\-,[{\r\n?])[ \t]*(?:![^\s]+)?[ \t]*)[^\r\n{[\]},#\s]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?)(?=[ \t]*(?:$|,|]|}))/m,lookbehind:!0,alias:"number"},boolean:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},null:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)(?:null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)("|')(?:(?!\2)[^\\\r\n]|\\.)*\2(?=[ \t]*(?:$|,|]|}|\s*#))/m,lookbehind:!0,greedy:!0},number:{pattern:/([:\-,[{]\s*(?:![^\s]+)?[ \t]*)[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+\.?\d*|\.?\d+)(?:e[+-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},p.a.languages.yml=p.a.languages.yaml;var d=p.a,g=n(190),f={Prism:d,theme:n.n(g).a},b=/\r\n|\r|\n/,m=function(e){0===e.length?e.push({types:["plain"],content:"",empty:!0}):1===e.length&&""===e[0].content&&(e[0].empty=!0)},h=function(e,t){var n=e.length;return n>0&&e[n-1]===t?e:e.concat(t)},y=function(e){for(var t=[[]],n=[e],a=[0],r=[e.length],i=0,o=0,s=[],l=[s];o>-1;){for(;(i=a[o]++)0?u:["plain"],c=p):(u=h(u,p.type),p.alias&&(u=h(u,p.alias)),c=p.content),"string"==typeof c){var d=c.split(b),g=d.length;s.push({types:u,content:d[0]});for(var f=1;f=0||(r[n]=e[n]);return r}var S=function(e){var t,n;function a(){for(var t,n=arguments.length,a=new Array(n),r=0;r=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var C=function(e){return function(t){var n=t.id,a=j(t,["id"]);return o.a.createElement(e,a,o.a.createElement("a",{"aria-hidden":"true",className:"anchor",id:n}),o.a.createElement("a",{"aria-hidden":"true",className:"hash-link",href:"#".concat(n)},"#"),a.children)}},B=n(195),D=n.n(B);function P(){return(P=Object.assign||function(e){for(var t=1;te.length)return;if(!(w instanceof l)){if(b&&v!=t.length-1){if(d.lastIndex=k,!(O=d.exec(e)))break;for(var E=O.index+(f?O[1].length:0),S=O.index+O[0].length,A=v,T=k,x=t.length;A=(T+=t[A].length)&&(++v,k=T);if(t[v]instanceof l)continue;F=A-v,w=e.slice(k,T),O.index-=k}else{d.lastIndex=0;var O=d.exec(w),F=1}if(O){f&&(m=O[1]?O[1].length:0),S=(E=O.index+m)+(O=O[0].slice(m)).length;var _=w.slice(0,E),I=w.slice(S),N=[v,F];_&&(++v,k+=_.length,N.push(_));var R=new l(c,g?a.tokenize(O,g):O,h,O,b);if(N.push(R),I&&N.push(I),Array.prototype.splice.apply(t,N),1!=F&&a.matchGrammar(e,t,n,v,k,!0,c),o)break}else if(o)break}}}}},hooks:{add:function(){}},tokenize:function(e,t,n){var r=[e],i=t.rest;if(i){for(var o in i)t[o]=i[o];delete t.rest}return a.matchGrammar(e,r,t,0,0,!1),r}},(r=a.Token=function(e,t,n,a,r){this.type=e,this.content=t,this.alias=n,this.length=0|(a||"").length,this.greedy=!!r}).stringify=function(e,t,n){if("string"==typeof e)return e;if("Array"===a.util.type(e))return e.map((function(n){return r.stringify(n,t,e)})).join("");var i={type:e.type,content:r.stringify(e.content,t,n),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:n};if(e.alias){var o="Array"===a.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,o)}var s=Object.keys(i.attributes).map((function(e){return e+'="'+(i.attributes[e]||"").replace(/"/g,""")+'"'})).join(" ");return"<"+i.tag+' class="'+i.classes.join(" ")+'"'+(s?" "+s:"")+">"+i.content+""},a);e.exports=i,i.default=i},190:function(e,t){e.exports={plain:{backgroundColor:"#2a2734",color:"#9a86fd"},styles:[{types:["comment","prolog","doctype","cdata","punctuation"],style:{color:"#6c6783"}},{types:["namespace"],style:{opacity:.7}},{types:["tag","operator","number"],style:{color:"#e09142"}},{types:["property","function"],style:{color:"#9a86fd"}},{types:["tag-id","selector","atrule-id"],style:{color:"#eeebff"}},{types:["attr-name"],style:{color:"#c4b9fe"}},{types:["boolean","string","entity","url","attr-value","keyword","control","directive","unit","statement","regex","at-rule","placeholder","variable"],style:{color:"#ffcc99"}},{types:["deleted"],style:{textDecorationLine:"line-through"}},{types:["inserted"],style:{textDecorationLine:"underline"}},{types:["italic"],style:{fontStyle:"italic"}},{types:["important","bold"],style:{fontWeight:"bold"}},{types:["important"],style:{color:"#c4b9fe"}}]}},191:function(e,t){e.exports={plain:{color:"#d6deeb",backgroundColor:"#011627"},styles:[{types:["changed"],style:{color:"rgb(162, 191, 252)",fontStyle:"italic"}},{types:["deleted"],style:{color:"rgba(239, 83, 80, 0.56)",fontStyle:"italic"}},{types:["inserted","attr-name"],style:{color:"rgb(173, 219, 103)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(99, 119, 119)",fontStyle:"italic"}},{types:["string","url"],style:{color:"rgb(173, 219, 103)"}},{types:["variable"],style:{color:"rgb(214, 222, 235)"}},{types:["number"],style:{color:"rgb(247, 140, 108)"}},{types:["builtin","char","constant","function"],style:{color:"rgb(130, 170, 255)"}},{types:["punctuation"],style:{color:"rgb(199, 146, 234)"}},{types:["selector","doctype"],style:{color:"rgb(199, 146, 234)",fontStyle:"italic"}},{types:["class-name"],style:{color:"rgb(255, 203, 139)"}},{types:["tag","operator","keyword"],style:{color:"rgb(127, 219, 202)"}},{types:["boolean"],style:{color:"rgb(255, 88, 116)"}},{types:["property"],style:{color:"rgb(128, 203, 196)"}},{types:["namespace"],style:{color:"rgb(178, 204, 214)"}}]}},192:function(e,t,n){var a;a=function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var r=t[a]={i:a,l:!1,exports:{}};return e[a].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)n.d(a,r,function(t){return e[t]}.bind(null,r));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof e.action?e.action:this.defaultAction,this.target="function"==typeof e.target?e.target:this.defaultTarget,this.text="function"==typeof e.text?e.text:this.defaultText,this.container="object"===a(e.container)?e.container:document.body}},{key:"listenClick",value:function(e){var t=this;this.listener=(0,s.default)(e,"click",(function(e){return t.onClick(e)}))}},{key:"onClick",value:function(e){var t=e.delegateTarget||e.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new i.default({action:this.action(t),target:this.target(t),text:this.text(t),container:this.container,trigger:t,emitter:this})}},{key:"defaultAction",value:function(e){return u("action",e)}},{key:"defaultTarget",value:function(e){var t=u("target",e);if(t)return document.querySelector(t)}},{key:"defaultText",value:function(e){return u("text",e)}},{key:"destroy",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}],[{key:"isSupported",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:["copy","cut"],t="string"==typeof e?[e]:e,n=!!document.queryCommandSupported;return t.forEach((function(e){n=n&&!!document.queryCommandSupported(e)})),n}}]),t}(o.default);function u(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}e.exports=c},function(e,t,n){"use strict";var a,r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},i=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action=e.action,this.container=e.container,this.emitter=e.emitter,this.target=e.target,this.text=e.text,this.trigger=e.trigger,this.selectedText=""}},{key:"initSelection",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function(){var e=this,t="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return e.removeFake()},this.fakeHandler=this.container.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[t?"right":"left"]="-9999px";var n=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.style.top=n+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,this.container.appendChild(this.fakeElem),this.selectedText=(0,s.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function(){this.fakeHandler&&(this.container.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(this.container.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function(){this.selectedText=(0,s.default)(this.target),this.copyText()}},{key:"copyText",value:function(){var e=void 0;try{e=document.execCommand(this.action)}catch(t){e=!1}this.handleResult(e)}},{key:"handleResult",value:function(e){this.emitter.emit(e?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function(){this.trigger&&this.trigger.focus(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function(){this.removeFake()}},{key:"action",set:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=e,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function(){return this._action}},{key:"target",set:function(e){if(void 0!==e){if(!e||"object"!==(void 0===e?"undefined":r(e))||1!==e.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&e.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(e.hasAttribute("readonly")||e.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=e}},get:function(){return this._target}}]),e}();e.exports=l},function(e,t){e.exports=function(e){var t;if("SELECT"===e.nodeName)e.focus(),t=e.value;else if("INPUT"===e.nodeName||"TEXTAREA"===e.nodeName){var n=e.hasAttribute("readonly");n||e.setAttribute("readonly",""),e.select(),e.setSelectionRange(0,e.value.length),n||e.removeAttribute("readonly"),t=e.value}else{e.hasAttribute("contenteditable")&&e.focus();var a=window.getSelection(),r=document.createRange();r.selectNodeContents(e),a.removeAllRanges(),a.addRange(r),t=a.toString()}return t}},function(e,t){function n(){}n.prototype={on:function(e,t,n){var a=this.e||(this.e={});return(a[e]||(a[e]=[])).push({fn:t,ctx:n}),this},once:function(e,t,n){var a=this;function r(){a.off(e,r),t.apply(n,arguments)}return r._=t,this.on(e,r,n)},emit:function(e){for(var t=[].slice.call(arguments,1),n=((this.e||(this.e={}))[e]||[]).slice(),a=0,r=n.length;a.copyButton_1BYj{bottom:calc(var(--ifm-pre-padding) - 2px);visibility:visible;opacity:1}.copyButton_1BYj{position:absolute;right:var(--ifm-pre-padding);bottom:calc(var(--ifm-pre-padding) - 4px);padding:4px 8px;visibility:hidden;opacity:0;-webkit-transition:opacity .2s ease-in-out,visibility .2s ease-in-out,bottom .2s ease-in-out;transition:opacity .2s ease-in-out,visibility .2s ease-in-out,bottom .2s ease-in-out;border:1px solid #d6deeb;border-radius:var(--ifm-global-radius);outline:none;cursor:pointer;line-height:12px;background:#011627;color:#d6deeb}.anchor{display:block;position:relative;top:-5rem}@media only screen and (max-width:735px){.anchor{top:-10rem}}.hash-link{opacity:0;position:absolute;margin-left:-1.25rem;padding-right:1.25rem}:hover>.hash-link{opacity:1}.mdxCodeBlock_iHAB{background-color:transparent;border:.5px solid rgba(31,34,39,.6);border-radius:var(--ifm-global-radius);box-shadow:1px 1px 4px 1px rgba(0,0,0,.1);box-sizing:border-box;font-family:inherit;padding:0} \ No newline at end of file diff --git a/404.html b/404.html new file mode 100644 index 000000000..096181f50 --- /dev/null +++ b/404.html @@ -0,0 +1,28 @@ + + + + + + + +Page Not Found + + + + + + + + + + +
+

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

+
+ + + + + + + \ No newline at end of file diff --git a/CNAME b/CNAME new file mode 100644 index 000000000..334ded21e --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +docs.nodegui.org \ No newline at end of file diff --git a/blog/index.html b/blog/index.html new file mode 100644 index 000000000..5b7c7eb0a --- /dev/null +++ b/blog/index.html @@ -0,0 +1,46 @@ + + + + + + + +Blog + + + + + + + + + + + + + + +
+

Welcome

May 30, 2019
Atul R

Atul R

Maintainer @NodeGui

This is the new blog site for NodeGui. This will be updated soon.

+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/hello/index.html b/blog/tags/hello/index.html new file mode 100644 index 000000000..e7e2bc915 --- /dev/null +++ b/blog/tags/hello/index.html @@ -0,0 +1,46 @@ + + + + + + + +Blog | Tagged "hello" + + + + + + + + + + + + + + +
+

1 post(s) tagged with "hello"

View All Tags

Welcome

May 30, 2019
Atul R

Atul R

Maintainer @NodeGui

This is the new blog site for NodeGui. This will be updated soon.

+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html new file mode 100644 index 000000000..28c05bc13 --- /dev/null +++ b/blog/tags/index.html @@ -0,0 +1,38 @@ + + + + + + + +Blog Tags + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/tags/nodegui/index.html b/blog/tags/nodegui/index.html new file mode 100644 index 000000000..dec3ec51e --- /dev/null +++ b/blog/tags/nodegui/index.html @@ -0,0 +1,46 @@ + + + + + + + +Blog | Tagged "nodegui" + + + + + + + + + + + + + + +
+

1 post(s) tagged with "nodegui"

View All Tags

Welcome

May 30, 2019
Atul R

Atul R

Maintainer @NodeGui

This is the new blog site for NodeGui. This will be updated soon.

+
+ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/blog/welcome/index.html b/blog/welcome/index.html new file mode 100644 index 000000000..81c258cba --- /dev/null +++ b/blog/welcome/index.html @@ -0,0 +1,44 @@ + + + + + + + +Welcome + + + + + + + + + + + + + + +
+

Welcome

May 30, 2019
Atul R

Atul R

Maintainer @NodeGui

This is the new blog site for NodeGui. This will be updated soon.

+
+ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/chunk-map.json b/chunk-map.json new file mode 100644 index 000000000..98b5e2c3a --- /dev/null +++ b/chunk-map.json @@ -0,0 +1,378 @@ +{ + "main": [ + "/main.f66713773e9ba37b90fe.css", + "/main.00ae184f6d3bd0eadbce.js" + ], + "component---site-src-pages-index-jsc-4-f-f99": [ + "/component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css", + "/component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js" + ], + "component---theme-blog-post-pageccc-cab": [ + "/component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js" + ], + "content---blog-welcome-286-e55": [ + "/content---blog-welcome-286-e55.76c213cf9ce75984ae91.js" + ], + "metadata---blog-welcome-27-a-91f": [ + "/metadata---blog-welcome-27-a-91f.ef07fafa6070c2acef91.js" + ], + "component---theme-blog-list-pagea-6-a-7ba": [ + "/component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js" + ], + "content---blogaf-1-856": [ + "/content---blogaf-1-856.f79900332b57f969c09a.js" + ], + "metadata---blog-83-c-2b0": [ + "/metadata---blog-83-c-2b0.46c7be8f307d8da2c120.js" + ], + "component---theme-doc-legacy-page-9-e-7-ca5": [ + "/component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css", + "/component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js" + ], + "docsMetadata---docs-150-2d6": [ + "/docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js" + ], + "component---theme-doc-legacy-item-031-769": [ + "/component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css", + "/component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js" + ], + "content---docs-doc-1-b-2-f-e80": [ + "/content---docs-doc-1-b-2-f-e80.b11e6221286a094dd836.js" + ], + "metadata---docs-doc-12-a-3-5a1": [ + "/metadata---docs-doc-12-a-3-5a1.bb87820e31f222c12801.js" + ], + "content---docs-faq-048-db5": [ + "/content---docs-faq-048-db5.a3f7755c1443136d038e.js" + ], + "metadata---docs-faq-59-d-2b9": [ + "/metadata---docs-faq-59-d-2b9.985713e75ca070fdde14.js" + ], + "content---docs-api-component-4-ef-195": [ + "/content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js" + ], + "metadata---docs-api-component-3-e-5-43d": [ + "/metadata---docs-api-component-3-e-5-43d.b1af807c32f3d1d45a4f.js" + ], + "content---docs-mdxce-3-7d1": [ + "/content---docs-mdxce-3-7d1.389cb0d1e93efb516d5d.js" + ], + "metadata---docs-mdx-786-f56": [ + "/metadata---docs-mdx-786-f56.e64a4ecfb244bb1efd9f.js" + ], + "content---docs-api-event-widgetac-6-11b": [ + "/content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js" + ], + "metadata---docs-api-event-widget-39-a-9ea": [ + "/metadata---docs-api-event-widget-39-a-9ea.34b0ce562deb2ec0ae92.js" + ], + "content---docs-api-flex-layout-3-dc-a16": [ + "/content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js" + ], + "metadata---docs-api-flex-layoutecf-540": [ + "/metadata---docs-api-flex-layoutecf-540.7db8561c2c23b0d92b67.js" + ], + "content---docs-api-node-layoutd-28-11a": [ + "/content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js" + ], + "metadata---docs-api-node-layout-1-e-9-c15": [ + "/metadata---docs-api-node-layout-1-e-9-c15.192849fc91407c883037.js" + ], + "content---docs-api-node-widget-080-a39": [ + "/content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js" + ], + "metadata---docs-api-node-widgeta-92-a4f": [ + "/metadata---docs-api-node-widgeta-92-a4f.dc800d76f7062b65b2ed.js" + ], + "content---docs-api-q-abstract-scroll-area-3-e-6-d7f": [ + "/content---docs-api-q-abstract-scroll-area-3-e-6-d7f.ce07722700328be8dfa5.js" + ], + "metadata---docs-api-q-abstract-scroll-area-59-d-279": [ + "/metadata---docs-api-q-abstract-scroll-area-59-d-279.378868b047b4e7fc733c.js" + ], + "content---docs-api-q-abstract-slider-3-e-0-54d": [ + "/content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js" + ], + "metadata---docs-api-q-abstract-sliderdfa-ab7": [ + "/metadata---docs-api-q-abstract-sliderdfa-ab7.73efd891b1be587b529b.js" + ], + "content---docs-api-q-applicationd-3-e-0a3": [ + "/content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js" + ], + "metadata---docs-api-q-applicationc-1-d-8a4": [ + "/metadata---docs-api-q-applicationc-1-d-8a4.dba24314be49483727c4.js" + ], + "content---docs-api-q-check-boxd-9-b-c95": [ + "/content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js" + ], + "metadata---docs-api-q-check-box-132-293": [ + "/metadata---docs-api-q-check-box-132-293.363eb2c9b2bdc95e76bb.js" + ], + "content---docs-api-q-clipboard-69-d-2ef": [ + "/content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js" + ], + "metadata---docs-api-q-clipboard-486-b21": [ + "/metadata---docs-api-q-clipboard-486-b21.5efa03bad36d45e62cbe.js" + ], + "content---docs-api-q-cursor-362-d51": [ + "/content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js" + ], + "metadata---docs-api-q-cursor-887-11e": [ + "/metadata---docs-api-q-cursor-887-11e.af1b21b104f06148557b.js" + ], + "content---docs-api-q-dial-80-b-99a": [ + "/content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js" + ], + "metadata---docs-api-q-dialbfb-aef": [ + "/metadata---docs-api-q-dialbfb-aef.e5ded32011b7d6927cdc.js" + ], + "content---docs-api-q-grid-layouta-4-e-552": [ + "/content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js" + ], + "metadata---docs-api-q-grid-layout-7-db-030": [ + "/metadata---docs-api-q-grid-layout-7-db-030.f3764e551a2bc1cf18a8.js" + ], + "content---docs-api-q-icone-5-f-b0d": [ + "/content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js" + ], + "metadata---docs-api-q-icone-6-d-093": [ + "/metadata---docs-api-q-icone-6-d-093.1c4c72d6ff116744c296.js" + ], + "content---docs-api-q-label-2-f-9-04b": [ + "/content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js" + ], + "metadata---docs-api-q-label-165-210": [ + "/metadata---docs-api-q-label-165-210.1dba411adf86a92ae91f.js" + ], + "content---docs-api-q-line-editea-0-53d": [ + "/content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js" + ], + "metadata---docs-api-q-line-edit-13-f-b8a": [ + "/metadata---docs-api-q-line-edit-13-f-b8a.df4fef6cc6001cbc07a7.js" + ], + "content---docs-api-q-main-window-0-e-7-299": [ + "/content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js" + ], + "metadata---docs-api-q-main-window-04-f-efb": [ + "/metadata---docs-api-q-main-window-04-f-efb.699f6e2eb1ac78330311.js" + ], + "content---docs-api-q-pixmap-8-dd-cb2": [ + "/content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js" + ], + "metadata---docs-api-q-pixmapfdf-820": [ + "/metadata---docs-api-q-pixmapfdf-820.087e26967d50eb06140d.js" + ], + "content---docs-api-q-plain-text-edit-7-c-8-081": [ + "/content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js" + ], + "metadata---docs-api-q-plain-text-edit-161-ecc": [ + "/metadata---docs-api-q-plain-text-edit-161-ecc.e89eb96f17b29e76629e.js" + ], + "content---docs-api-q-progress-barc-46-afe": [ + "/content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js" + ], + "metadata---docs-api-q-progress-bar-43-d-07e": [ + "/metadata---docs-api-q-progress-bar-43-d-07e.a527e07318808cde454e.js" + ], + "content---docs-api-q-push-button-06-c-73e": [ + "/content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js" + ], + "metadata---docs-api-q-push-button-96-d-c92": [ + "/metadata---docs-api-q-push-button-96-d-c92.b15a45966fb25f5f9917.js" + ], + "content---docs-api-q-radio-buttone-54-746": [ + "/content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js" + ], + "metadata---docs-api-q-radio-button-367-f7c": [ + "/metadata---docs-api-q-radio-button-367-f7c.11484c432455585a7ef3.js" + ], + "content---docs-api-q-scroll-area-8-c-4-3fd": [ + "/content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js" + ], + "metadata---docs-api-q-scroll-area-46-a-96e": [ + "/metadata---docs-api-q-scroll-area-46-a-96e.a5c480374e3f8b5fcea2.js" + ], + "content---docs-api-q-spin-box-1-ce-bfd": [ + "/content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js" + ], + "metadata---docs-api-q-spin-box-809-ae0": [ + "/metadata---docs-api-q-spin-box-809-ae0.1fcda0244eebb91ff1bf.js" + ], + "content---docs-api-q-tab-widget-508-95e": [ + "/content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js" + ], + "metadata---docs-api-q-tab-widgetebc-5aa": [ + "/metadata---docs-api-q-tab-widgetebc-5aa.558f01cb9860e9184f4f.js" + ], + "content---docs-api-q-widget-04-a-59f": [ + "/content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js" + ], + "metadata---docs-api-q-widget-287-e6c": [ + "/metadata---docs-api-q-widget-287-e6c.1a1aa4d570d756d63bb4.js" + ], + "content---docs-api-qt-enumsfd-7-cf3": [ + "/content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js" + ], + "metadata---docs-api-qt-enums-423-cf9": [ + "/metadata---docs-api-qt-enums-423-cf9.fb1940e1fff15d344906.js" + ], + "content---docs-api-yoga-widgeta-42-cc7": [ + "/content---docs-api-yoga-widgeta-42-cc7.d048cabe40533b903ea2.js" + ], + "metadata---docs-api-yoga-widget-95-c-f8b": [ + "/metadata---docs-api-yoga-widget-95-c-f8b.bdbc70e8a3ba6a1d1808.js" + ], + "content---docs-api-process-5-ec-b1e": [ + "/content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js" + ], + "metadata---docs-api-process-32-d-09e": [ + "/metadata---docs-api-process-32-d-09e.9dd820231565148c88a2.js" + ], + "content---docs-api-synopsis-7-bb-e1c": [ + "/content---docs-api-synopsis-7-bb-e1c.2cede4e9cd42a20dcab1.js" + ], + "metadata---docs-api-synopsis-21-f-a62": [ + "/metadata---docs-api-synopsis-21-f-a62.a376081207def93aa340.js" + ], + "content---docs-development-readme-149-437": [ + "/content---docs-development-readme-149-437.115b92599d48666d0070.js" + ], + "metadata---docs-development-readm-ec-6-c-332": [ + "/metadata---docs-development-readm-ec-6-c-332.49158ed40eba176b8d72.js" + ], + "content---docs-development-common-errorsf-15-a5b": [ + "/content---docs-development-common-errorsf-15-a5b.e038ab8ec8bf334300fb.js" + ], + "metadata---docs-development-common-errors-402-ef4": [ + "/metadata---docs-development-common-errors-402-ef4.7ea9ca2120cf1ce1bce9.js" + ], + "content---docs-development-debuggingb-54-9ed": [ + "/content---docs-development-debuggingb-54-9ed.750c6b37dab541484a83.js" + ], + "metadata---docs-development-debuggingc-36-26a": [ + "/metadata---docs-development-debuggingc-36-26a.3bf9d58aef0157443ea5.js" + ], + "content---docs-development-getting-started-139-387": [ + "/content---docs-development-getting-started-139-387.91c824c53e601bdee051.js" + ], + "metadata---docs-development-getting-started-89-b-c7a": [ + "/metadata---docs-development-getting-started-89-b-c7a.863d1b0e22372d87282e.js" + ], + "content---docs-development-setting-up-28-c-666": [ + "/content---docs-development-setting-up-28-c-666.3ed03febaee8901fd048.js" + ], + "metadata---docs-development-setting-up-979-75f": [ + "/metadata---docs-development-setting-up-979-75f.8f9fc5a72c685e8d0e31.js" + ], + "content---docs-development-signal-and-event-handling-7-d-4-f3f": [ + "/content---docs-development-signal-and-event-handling-7-d-4-f3f.ce2b82a97ac1f368a896.js" + ], + "metadata---docs-development-signal-and-event-handling-0-b-5-692": [ + "/metadata---docs-development-signal-and-event-handling-0-b-5-692.b16a5b795c3eef3ce5dc.js" + ], + "content---docs-development-styling-293-cad": [ + "/content---docs-development-styling-293-cad.b3394daf132a97f6e2c2.js" + ], + "metadata---docs-development-styling-1-c-2-0d6": [ + "/metadata---docs-development-styling-1-c-2-0d6.c1ae40b22fc3b93cd6fc.js" + ], + "content---docs-development-wrapping-widgets-84-b-538": [ + "/content---docs-development-wrapping-widgets-84-b-538.8591cd36dcfe1c65b14a.js" + ], + "metadata---docs-development-wrapping-widgets-303-fb8": [ + "/metadata---docs-development-wrapping-widgets-303-fb8.bfc04ad3ffc9ee24e861.js" + ], + "content---docs-guides-custom-nodegui-native-plugin-632-9db": [ + "/content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js" + ], + "metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f": [ + "/metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f.184a7a6a1f10e05c6c54.js" + ], + "content---docs-guides-debugging-in-vscodebd-7-cec": [ + "/content---docs-guides-debugging-in-vscodebd-7-cec.a37b675eceeff564dcc8.js" + ], + "metadata---docs-guides-debugging-in-vscodebf-8-5b0": [ + "/metadata---docs-guides-debugging-in-vscodebf-8-5b0.d26c0a02667ed3c9416d.js" + ], + "content---docs-guides-debuggingf-3-f-cf5": [ + "/content---docs-guides-debuggingf-3-f-cf5.6a9f350b152e911795d0.js" + ], + "metadata---docs-guides-debugging-970-fb8": [ + "/metadata---docs-guides-debugging-970-fb8.4834f7c20eceaaaee536.js" + ], + "content---docs-guides-getting-startedc-9-e-20f": [ + "/content---docs-guides-getting-startedc-9-e-20f.058d1e127795274285bb.js" + ], + "metadata---docs-guides-getting-started-2-b-7-1a4": [ + "/metadata---docs-guides-getting-started-2-b-7-1a4.cfc3dec8bc5f547dfbb8.js" + ], + "content---docs-guides-handle-events-160-4b0": [ + "/content---docs-guides-handle-events-160-4b0.c02ea0616d11beafddb3.js" + ], + "metadata---docs-guides-handle-events-5-eb-540": [ + "/metadata---docs-guides-handle-events-5-eb-540.61bb8e8da8eeda4cc040.js" + ], + "content---docs-guides-images-991-065": [ + "/content---docs-guides-images-991-065.914359cdc22f4b9051ef.js" + ], + "metadata---docs-guides-images-915-5ee": [ + "/metadata---docs-guides-images-915-5ee.175b82933d61d3e5deb4.js" + ], + "content---docs-guides-layoutdf-5-a64": [ + "/content---docs-guides-layoutdf-5-a64.bbcbc44e5156b817cb02.js" + ], + "metadata---docs-guides-layoutf-65-d7d": [ + "/metadata---docs-guides-layoutf-65-d7d.3bdf6df942a2264f480b.js" + ], + "content---docs-guides-networking-374-03e": [ + "/content---docs-guides-networking-374-03e.17133e9de15be6e64aff.js" + ], + "metadata---docs-guides-networkingdfd-ce0": [ + "/metadata---docs-guides-networkingdfd-ce0.332c039b051021fe2724.js" + ], + "content---docs-guides-nodegui-architecture-262-19e": [ + "/content---docs-guides-nodegui-architecture-262-19e.245edae39f1ddac01224.js" + ], + "metadata---docs-guides-nodegui-architecture-550-b82": [ + "/metadata---docs-guides-nodegui-architecture-550-b82.72d9e2773d4e285ca973.js" + ], + "content---docs-guides-scroll-view-76-e-87c": [ + "/content---docs-guides-scroll-view-76-e-87c.73c89be82bf124b2e125.js" + ], + "metadata---docs-guides-scroll-view-9-a-9-2ac": [ + "/metadata---docs-guides-scroll-view-9-a-9-2ac.f6039a7dd2d1fa4c6ca6.js" + ], + "content---docs-guides-stylingfec-977": [ + "/content---docs-guides-stylingfec-977.c0e2691c9103260d4124.js" + ], + "metadata---docs-guides-styling-9-ea-213": [ + "/metadata---docs-guides-styling-9-ea-213.d5570c147002ef8e6bfe.js" + ], + "content---docs-guides-tutoriale-53-6ab": [ + "/content---docs-guides-tutoriale-53-6ab.3001eaf77a6eeaf068aa.js" + ], + "metadata---docs-guides-tutorial-1-f-1-23b": [ + "/metadata---docs-guides-tutorial-1-f-1-23b.4e417b24befa6a685ab5.js" + ], + "content---docs-guides-using-native-node-modules-3-ab-104": [ + "/content---docs-guides-using-native-node-modules-3-ab-104.3bc40951d03693eaff7d.js" + ], + "metadata---docs-guides-using-native-node-modules-31-f-551": [ + "/metadata---docs-guides-using-native-node-modules-31-f-551.0accd417ae132a661bdf.js" + ], + "component---theme-blog-tags-posts-page-687-b6c": [ + "/component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js" + ], + "metadata---blog-tags-nodegui-632-d46": [ + "/metadata---blog-tags-nodegui-632-d46.73df93301c6a1152b2fe.js" + ], + "metadata---blog-tags-hellob-02-3e8": [ + "/metadata---blog-tags-hellob-02-3e8.cdf356c9ee24382e453e.js" + ], + "component---theme-blog-tags-list-page-01-a-d0b": [ + "/component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js" + ], + "tags---blog-tags-8-d-7-36d": [ + "/tags---blog-tags-8-d-7-36d.1243f2728e886299c73e.js" + ] +} \ No newline at end of file diff --git a/client-manifest.json b/client-manifest.json new file mode 100644 index 000000000..25baa13b5 --- /dev/null +++ b/client-manifest.json @@ -0,0 +1,1663 @@ +{ + "entrypoints": [ + "main" + ], + "origins": { + "0": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 128, + 129, + 0 + ], + "1": [ + 0, + 2, + 3, + 4, + 5, + 6, + 7, + 9, + 128, + 129, + 1 + ], + "2": [ + 0, + 1, + 4, + 5, + 7, + 9, + 2 + ], + "128": [ + 0, + 1, + 3, + 128 + ], + "@site/src/pages/index.js": [ + 0, + 1, + 128, + 3 + ], + "@theme/BlogListPage": [ + 0, + 1, + 2, + 4 + ], + "@theme/BlogPostPage": [ + 0, + 1, + 2, + 5 + ], + "@theme/BlogTagsListPage": [ + 0, + 1, + 6 + ], + "@theme/BlogTagsPostsPage": [ + 0, + 1, + 2, + 7 + ], + "@theme/DocLegacyItem": [ + 0, + 8 + ], + "@theme/DocLegacyPage": [ + 0, + 1, + 2, + 9 + ], + "@site/blog/2019-05-30-welcome.md": [ + 10 + ], + "@site/blog/2019-05-30-welcome.md?truncated=true": [ + 11 + ], + "@site/docs/api/Component.md": [ + 12 + ], + "@site/docs/api/EventWidget.md": [ + 13 + ], + "@site/docs/api/FlexLayout.md": [ + 14 + ], + "@site/docs/api/NodeLayout.md": [ + 15 + ], + "@site/docs/api/NodeWidget.md": [ + 16 + ], + "@site/docs/api/process.md": [ + 17 + ], + "@site/docs/api/QAbstractScrollArea.md": [ + 18 + ], + "@site/docs/api/QAbstractSlider.md": [ + 19 + ], + "@site/docs/api/QApplication.md": [ + 20 + ], + "@site/docs/api/QCheckBox.md": [ + 21 + ], + "@site/docs/api/QClipboard.md": [ + 22 + ], + "@site/docs/api/QCursor.md": [ + 23 + ], + "@site/docs/api/QDial.md": [ + 24 + ], + "@site/docs/api/QGridLayout.md": [ + 25 + ], + "@site/docs/api/QIcon.md": [ + 26 + ], + "@site/docs/api/QLabel.md": [ + 27 + ], + "@site/docs/api/QLineEdit.md": [ + 28 + ], + "@site/docs/api/QMainWindow.md": [ + 29 + ], + "@site/docs/api/QPixmap.md": [ + 30 + ], + "@site/docs/api/QPlainTextEdit.md": [ + 31 + ], + "@site/docs/api/QProgressBar.md": [ + 32 + ], + "@site/docs/api/QPushButton.md": [ + 33 + ], + "@site/docs/api/QRadioButton.md": [ + 34 + ], + "@site/docs/api/QScrollArea.md": [ + 35 + ], + "@site/docs/api/QSpinBox.md": [ + 36 + ], + "@site/docs/api/QTabWidget.md": [ + 37 + ], + "@site/docs/api/QWidget.md": [ + 38 + ], + "@site/docs/api/QtEnums.md": [ + 39 + ], + "@site/docs/api/synopsis.md": [ + 40 + ], + "@site/docs/api/YogaWidget.md": [ + 41 + ], + "@site/docs/development/common_errors.md": [ + 42 + ], + "@site/docs/development/debugging.md": [ + 43 + ], + "@site/docs/development/getting-started.md": [ + 44 + ], + "@site/docs/development/README.md": [ + 45 + ], + "@site/docs/development/setting-up.md": [ + 46 + ], + "@site/docs/development/signal_and_event_handling.md": [ + 47 + ], + "@site/docs/development/styling.md": [ + 48 + ], + "@site/docs/development/wrapping_widgets.md": [ + 49 + ], + "@site/docs/doc1.md": [ + 50 + ], + "@site/docs/faq.md": [ + 51 + ], + "@site/docs/guides/custom-nodegui-native-plugin.md": [ + 52 + ], + "@site/docs/guides/debugging-in-vscode.md": [ + 53 + ], + "@site/docs/guides/debugging.md": [ + 54 + ], + "@site/docs/guides/getting-started.md": [ + 55 + ], + "@site/docs/guides/handle-events.md": [ + 56 + ], + "@site/docs/guides/images.md": [ + 57 + ], + "@site/docs/guides/layout.md": [ + 58 + ], + "@site/docs/guides/networking.md": [ + 59 + ], + "@site/docs/guides/nodegui-architecture.md": [ + 60 + ], + "@site/docs/guides/scroll-view.md": [ + 61 + ], + "@site/docs/guides/styling.md": [ + 62 + ], + "@site/docs/guides/tutorial.md": [ + 63 + ], + "@site/docs/guides/using-native-node-modules.md": [ + 64 + ], + "@site/docs/mdx.md": [ + 65 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-b5f.json": [ + 66 + ], + "main": [ + 126, + 67 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-blog/blog-c06.json": [ + 68 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-blog/blog-tags-hello-039.json": [ + 69 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-blog/blog-tags-nodegui-2a1.json": [ + 70 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-blog/blog-welcome-001.json": [ + 71 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-component-f20.json": [ + 72 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-event-widget-ae5.json": [ + 73 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-flex-layout-cbe.json": [ + 74 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-node-layout-565.json": [ + 75 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-node-widget-719.json": [ + 76 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-process-bbd.json": [ + 77 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-abstract-scroll-area-fd2.json": [ + 78 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-abstract-slider-d61.json": [ + 79 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-application-37d.json": [ + 80 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-check-box-23e.json": [ + 81 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-clipboard-c24.json": [ + 82 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-cursor-cd4.json": [ + 83 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-dial-5a0.json": [ + 84 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-grid-layout-b06.json": [ + 85 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-icon-fb3.json": [ + 86 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-label-edd.json": [ + 87 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-line-edit-72f.json": [ + 88 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-main-window-882.json": [ + 89 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-pixmap-3fb.json": [ + 90 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-plain-text-edit-b75.json": [ + 91 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-progress-bar-895.json": [ + 92 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-push-button-013.json": [ + 93 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-radio-button-9a1.json": [ + 94 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-scroll-area-ee1.json": [ + 95 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-spin-box-c7d.json": [ + 96 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-tab-widget-b7c.json": [ + 97 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-q-widget-276.json": [ + 98 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-qt-enums-a70.json": [ + 99 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-synopsis-eee.json": [ + 100 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-api-yoga-widget-aca.json": [ + 101 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-common-errors-131.json": [ + 102 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-debugging-9ae.json": [ + 103 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-getting-started-eab.json": [ + 104 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-readme-a42.json": [ + 105 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-setting-up-cae.json": [ + 106 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-signal-and-event-handling-ebf.json": [ + 107 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-styling-4d2.json": [ + 108 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-development-wrapping-widgets-270.json": [ + 109 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-doc-1-6ac.json": [ + 110 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-faq-019.json": [ + 111 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-custom-nodegui-native-plugin-c98.json": [ + 112 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-debugging-4fd.json": [ + 113 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-debugging-in-vscode-bb6.json": [ + 114 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-getting-started-ed9.json": [ + 115 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-handle-events-d0d.json": [ + 116 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-images-be2.json": [ + 117 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-layout-6c3.json": [ + 118 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-networking-682.json": [ + 119 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-nodegui-architecture-060.json": [ + 120 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-scroll-view-b95.json": [ + 121 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-styling-d4a.json": [ + 122 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-tutorial-ebb.json": [ + 123 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-guides-using-native-node-modules-a3d.json": [ + 124 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-docs/docs-mdx-04f.json": [ + 125 + ], + "runtime~main": [ + 67, + 126 + ], + "/Users/atulr/Project/nodegui/nodegui/website/.docusaurus/docusaurus-plugin-content-blog/blog-tags-tags-4c2.json": [ + 127 + ], + "@theme/NotFound": [ + 0, + 1, + 129 + ] + }, + "assets": { + "0": { + "js": [ + { + "file": "0.821df7f17f7288aebb5e.js", + "hash": "fc27b8ada21b6a6dbe7b", + "publicPath": "/0.821df7f17f7288aebb5e.js" + } + ] + }, + "1": { + "css": [ + { + "file": "1.196ce05925ea6d776920.css", + "hash": "604d250b5a34c84e5807", + "publicPath": "/1.196ce05925ea6d776920.css" + } + ], + "js": [ + { + "file": "1.9b3d421a0f44576af60f.js", + "hash": "604d250b5a34c84e5807", + "publicPath": "/1.9b3d421a0f44576af60f.js" + } + ] + }, + "2": { + "css": [ + { + "file": "2.702de9bbb01fe4f46fa1.css", + "hash": "032db50ffd4eefb39467", + "publicPath": "/2.702de9bbb01fe4f46fa1.css" + } + ], + "js": [ + { + "file": "2.27a81c22b5dfa23bfe9b.js", + "hash": "032db50ffd4eefb39467", + "publicPath": "/2.27a81c22b5dfa23bfe9b.js" + } + ] + }, + "3": { + "css": [ + { + "file": "component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css", + "hash": "96cbb5bfb07529143cee", + "publicPath": "/component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css" + } + ], + "js": [ + { + "file": "component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js", + "hash": "96cbb5bfb07529143cee", + "publicPath": "/component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js" + } + ] + }, + "4": { + "js": [ + { + "file": "component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js", + "hash": "78ac5ffc09216d76027e", + "publicPath": "/component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js" + } + ] + }, + "5": { + "js": [ + { + "file": "component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js", + "hash": "6d5214bd0a47804303dc", + "publicPath": "/component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js" + } + ] + }, + "6": { + "js": [ + { + "file": "component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js", + "hash": "5439c51753acb598c1c5", + "publicPath": "/component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js" + } + ] + }, + "7": { + "js": [ + { + "file": "component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js", + "hash": "30d47db6dec2c3eb6e86", + "publicPath": "/component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js" + } + ] + }, + "8": { + "css": [ + { + "file": "component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css", + "hash": "75e94420e018523878af", + "publicPath": "/component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css" + } + ], + "js": [ + { + "file": "component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js", + "hash": "75e94420e018523878af", + "publicPath": "/component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js" + } + ] + }, + "9": { + "css": [ + { + "file": "component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css", + "hash": "69f1327b46fbd84e3c8f", + "publicPath": "/component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css" + } + ], + "js": [ + { + "file": "component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js", + "hash": "69f1327b46fbd84e3c8f", + "publicPath": "/component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js" + } + ] + }, + "10": { + "js": [ + { + "file": "content---blog-welcome-286-e55.76c213cf9ce75984ae91.js", + "hash": "61967d76c96234c1b57b", + "publicPath": "/content---blog-welcome-286-e55.76c213cf9ce75984ae91.js" + } + ] + }, + "11": { + "js": [ + { + "file": "content---blogaf-1-856.f79900332b57f969c09a.js", + "hash": "27f7f375c7fee927f7d2", + "publicPath": "/content---blogaf-1-856.f79900332b57f969c09a.js" + } + ] + }, + "12": { + "js": [ + { + "file": "content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js", + "hash": "d8563747360e64aafd60", + "publicPath": "/content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js" + } + ] + }, + "13": { + "js": [ + { + "file": "content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js", + "hash": "04b9fbdf884b5619c109", + "publicPath": "/content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js" + } + ] + }, + "14": { + "js": [ + { + "file": "content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js", + "hash": "c4e00f13e4859537937b", + "publicPath": "/content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js" + } + ] + }, + "15": { + "js": [ + { + "file": "content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js", + "hash": "539b34062a883097a915", + "publicPath": "/content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js" + } + ] + }, + "16": { + "js": [ + { + "file": "content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js", + "hash": "68a8a3a29c88071e431d", + "publicPath": "/content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js" + } + ] + }, + "17": { + "js": [ + { + "file": "content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js", + "hash": "1b96e18de2318555ada8", + "publicPath": "/content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js" + } + ] + }, + "18": { + "js": [ + { + "file": "content---docs-api-q-abstract-scroll-area-3-e-6-d7f.ce07722700328be8dfa5.js", + "hash": "dc1cc1d2be2687e15a4b", + "publicPath": "/content---docs-api-q-abstract-scroll-area-3-e-6-d7f.ce07722700328be8dfa5.js" + } + ] + }, + "19": { + "js": [ + { + "file": "content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js", + "hash": "cfe13154ccf3e3c72276", + "publicPath": "/content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js" + } + ] + }, + "20": { + "js": [ + { + "file": "content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js", + "hash": "60338471cd7efb472ae5", + "publicPath": "/content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js" + } + ] + }, + "21": { + "js": [ + { + "file": "content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js", + "hash": "dd595e8f5cdfaaddbdd1", + "publicPath": "/content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js" + } + ] + }, + "22": { + "js": [ + { + "file": "content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js", + "hash": "be5eca279ade3bf270b1", + "publicPath": "/content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js" + } + ] + }, + "23": { + "js": [ + { + "file": "content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js", + "hash": "73a9a9197e0bb9d59040", + "publicPath": "/content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js" + } + ] + }, + "24": { + "js": [ + { + "file": "content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js", + "hash": "8a2d26d8f90b8e256862", + "publicPath": "/content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js" + } + ] + }, + "25": { + "js": [ + { + "file": "content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js", + "hash": "b12ab8abf31e1fbc04b1", + "publicPath": "/content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js" + } + ] + }, + "26": { + "js": [ + { + "file": "content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js", + "hash": "4387979d24bb651f8e82", + "publicPath": "/content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js" + } + ] + }, + "27": { + "js": [ + { + "file": "content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js", + "hash": "7c72a44417d5a715e46f", + "publicPath": "/content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js" + } + ] + }, + "28": { + "js": [ + { + "file": "content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js", + "hash": "aebc77d6e75b5bf3e72c", + "publicPath": "/content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js" + } + ] + }, + "29": { + "js": [ + { + "file": "content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js", + "hash": "199579d2a0e12cea31f8", + "publicPath": "/content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js" + } + ] + }, + "30": { + "js": [ + { + "file": "content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js", + "hash": "22a37d53f12f2596ef1d", + "publicPath": "/content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js" + } + ] + }, + "31": { + "js": [ + { + "file": "content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js", + "hash": "da2065a3c16d0f9da238", + "publicPath": "/content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js" + } + ] + }, + "32": { + "js": [ + { + "file": "content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js", + "hash": "36a53f59f5dc6cd4b3f6", + "publicPath": "/content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js" + } + ] + }, + "33": { + "js": [ + { + "file": "content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js", + "hash": "4dafff7fe26e6769d3fa", + "publicPath": "/content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js" + } + ] + }, + "34": { + "js": [ + { + "file": "content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js", + "hash": "1ca8091fce8f84360894", + "publicPath": "/content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js" + } + ] + }, + "35": { + "js": [ + { + "file": "content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js", + "hash": "a1fa287accbef3815a04", + "publicPath": "/content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js" + } + ] + }, + "36": { + "js": [ + { + "file": "content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js", + "hash": "dadcfe584e39cc2ff0b5", + "publicPath": "/content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js" + } + ] + }, + "37": { + "js": [ + { + "file": "content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js", + "hash": "24e0e0191a0c97ad85f7", + "publicPath": "/content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js" + } + ] + }, + "38": { + "js": [ + { + "file": "content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js", + "hash": "368b12e76a69777ee712", + "publicPath": "/content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js" + } + ] + }, + "39": { + "js": [ + { + "file": "content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js", + "hash": "382ce84d197bae217fea", + "publicPath": "/content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js" + } + ] + }, + "40": { + "js": [ + { + "file": "content---docs-api-synopsis-7-bb-e1c.2cede4e9cd42a20dcab1.js", + "hash": "fa7948f3c5ef4a456963", + "publicPath": "/content---docs-api-synopsis-7-bb-e1c.2cede4e9cd42a20dcab1.js" + } + ] + }, + "41": { + "js": [ + { + "file": "content---docs-api-yoga-widgeta-42-cc7.d048cabe40533b903ea2.js", + "hash": "c33be330becbbfd752c2", + "publicPath": "/content---docs-api-yoga-widgeta-42-cc7.d048cabe40533b903ea2.js" + } + ] + }, + "42": { + "js": [ + { + "file": "content---docs-development-common-errorsf-15-a5b.e038ab8ec8bf334300fb.js", + "hash": "2e56afba2aa4d4017b93", + "publicPath": "/content---docs-development-common-errorsf-15-a5b.e038ab8ec8bf334300fb.js" + } + ] + }, + "43": { + "js": [ + { + "file": "content---docs-development-debuggingb-54-9ed.750c6b37dab541484a83.js", + "hash": "307f2e55c8366343a867", + "publicPath": "/content---docs-development-debuggingb-54-9ed.750c6b37dab541484a83.js" + } + ] + }, + "44": { + "js": [ + { + "file": "content---docs-development-getting-started-139-387.91c824c53e601bdee051.js", + "hash": "0ffced67cb29e716331f", + "publicPath": "/content---docs-development-getting-started-139-387.91c824c53e601bdee051.js" + } + ] + }, + "45": { + "js": [ + { + "file": "content---docs-development-readme-149-437.115b92599d48666d0070.js", + "hash": "11ad52417c23f238e777", + "publicPath": "/content---docs-development-readme-149-437.115b92599d48666d0070.js" + } + ] + }, + "46": { + "js": [ + { + "file": "content---docs-development-setting-up-28-c-666.3ed03febaee8901fd048.js", + "hash": "45a243aeb8cb9cf2967e", + "publicPath": "/content---docs-development-setting-up-28-c-666.3ed03febaee8901fd048.js" + } + ] + }, + "47": { + "js": [ + { + "file": "content---docs-development-signal-and-event-handling-7-d-4-f3f.ce2b82a97ac1f368a896.js", + "hash": "a56e4c29697682586fda", + "publicPath": "/content---docs-development-signal-and-event-handling-7-d-4-f3f.ce2b82a97ac1f368a896.js" + } + ] + }, + "48": { + "js": [ + { + "file": "content---docs-development-styling-293-cad.b3394daf132a97f6e2c2.js", + "hash": "2dd1aa361d886237e36d", + "publicPath": "/content---docs-development-styling-293-cad.b3394daf132a97f6e2c2.js" + } + ] + }, + "49": { + "js": [ + { + "file": "content---docs-development-wrapping-widgets-84-b-538.8591cd36dcfe1c65b14a.js", + "hash": "cc4e7429d354c4f502fe", + "publicPath": "/content---docs-development-wrapping-widgets-84-b-538.8591cd36dcfe1c65b14a.js" + } + ] + }, + "50": { + "js": [ + { + "file": "content---docs-doc-1-b-2-f-e80.b11e6221286a094dd836.js", + "hash": "5f5d78e886e671a7d0e2", + "publicPath": "/content---docs-doc-1-b-2-f-e80.b11e6221286a094dd836.js" + } + ] + }, + "51": { + "js": [ + { + "file": "content---docs-faq-048-db5.a3f7755c1443136d038e.js", + "hash": "a48e2f8a871f5f05b124", + "publicPath": "/content---docs-faq-048-db5.a3f7755c1443136d038e.js" + } + ] + }, + "52": { + "js": [ + { + "file": "content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js", + "hash": "d604aea4d283c985ea2b", + "publicPath": "/content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js" + } + ] + }, + "53": { + "js": [ + { + "file": "content---docs-guides-debugging-in-vscodebd-7-cec.a37b675eceeff564dcc8.js", + "hash": "7827fb69f3aa3e2c720d", + "publicPath": "/content---docs-guides-debugging-in-vscodebd-7-cec.a37b675eceeff564dcc8.js" + } + ] + }, + "54": { + "js": [ + { + "file": "content---docs-guides-debuggingf-3-f-cf5.6a9f350b152e911795d0.js", + "hash": "97ce16f971a6cbc6ecd4", + "publicPath": "/content---docs-guides-debuggingf-3-f-cf5.6a9f350b152e911795d0.js" + } + ] + }, + "55": { + "js": [ + { + "file": "content---docs-guides-getting-startedc-9-e-20f.058d1e127795274285bb.js", + "hash": "b874712cec9d8c43f58f", + "publicPath": "/content---docs-guides-getting-startedc-9-e-20f.058d1e127795274285bb.js" + } + ] + }, + "56": { + "js": [ + { + "file": "content---docs-guides-handle-events-160-4b0.c02ea0616d11beafddb3.js", + "hash": "10d4f979771b1170e9eb", + "publicPath": "/content---docs-guides-handle-events-160-4b0.c02ea0616d11beafddb3.js" + } + ] + }, + "57": { + "js": [ + { + "file": "content---docs-guides-images-991-065.914359cdc22f4b9051ef.js", + "hash": "c9ea40c24517c7851ed4", + "publicPath": "/content---docs-guides-images-991-065.914359cdc22f4b9051ef.js" + } + ] + }, + "58": { + "js": [ + { + "file": "content---docs-guides-layoutdf-5-a64.bbcbc44e5156b817cb02.js", + "hash": "0771e8b9b49d331a3798", + "publicPath": "/content---docs-guides-layoutdf-5-a64.bbcbc44e5156b817cb02.js" + } + ] + }, + "59": { + "js": [ + { + "file": "content---docs-guides-networking-374-03e.17133e9de15be6e64aff.js", + "hash": "60896b6b12ea3c20362c", + "publicPath": "/content---docs-guides-networking-374-03e.17133e9de15be6e64aff.js" + } + ] + }, + "60": { + "js": [ + { + "file": "content---docs-guides-nodegui-architecture-262-19e.245edae39f1ddac01224.js", + "hash": "766e5de925ba1faeb771", + "publicPath": "/content---docs-guides-nodegui-architecture-262-19e.245edae39f1ddac01224.js" + } + ] + }, + "61": { + "js": [ + { + "file": "content---docs-guides-scroll-view-76-e-87c.73c89be82bf124b2e125.js", + "hash": "57f9485a515cd14a88f6", + "publicPath": "/content---docs-guides-scroll-view-76-e-87c.73c89be82bf124b2e125.js" + } + ] + }, + "62": { + "js": [ + { + "file": "content---docs-guides-stylingfec-977.c0e2691c9103260d4124.js", + "hash": "eeb89a59301c57051578", + "publicPath": "/content---docs-guides-stylingfec-977.c0e2691c9103260d4124.js" + } + ] + }, + "63": { + "js": [ + { + "file": "content---docs-guides-tutoriale-53-6ab.3001eaf77a6eeaf068aa.js", + "hash": "ec005e084fce1c3e3c38", + "publicPath": "/content---docs-guides-tutoriale-53-6ab.3001eaf77a6eeaf068aa.js" + } + ] + }, + "64": { + "js": [ + { + "file": "content---docs-guides-using-native-node-modules-3-ab-104.3bc40951d03693eaff7d.js", + "hash": "8a91eb332de23591d53a", + "publicPath": "/content---docs-guides-using-native-node-modules-3-ab-104.3bc40951d03693eaff7d.js" + } + ] + }, + "65": { + "js": [ + { + "file": "content---docs-mdxce-3-7d1.389cb0d1e93efb516d5d.js", + "hash": "ddcb7c039f51b90e6222", + "publicPath": "/content---docs-mdxce-3-7d1.389cb0d1e93efb516d5d.js" + } + ] + }, + "66": { + "js": [ + { + "file": "docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js", + "hash": "4f8205e4b279b185f006", + "publicPath": "/docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js" + } + ] + }, + "67": { + "css": [ + { + "file": "main.f66713773e9ba37b90fe.css", + "hash": "964aa60e36531c0a82ad", + "publicPath": "/main.f66713773e9ba37b90fe.css" + } + ], + "js": [ + { + "file": "main.00ae184f6d3bd0eadbce.js", + "hash": "964aa60e36531c0a82ad", + "publicPath": "/main.00ae184f6d3bd0eadbce.js" + } + ] + }, + "68": { + "js": [ + { + "file": "metadata---blog-83-c-2b0.46c7be8f307d8da2c120.js", + "hash": "9d2e0ca618f9c81c84af", + "publicPath": "/metadata---blog-83-c-2b0.46c7be8f307d8da2c120.js" + } + ] + }, + "69": { + "js": [ + { + "file": "metadata---blog-tags-hellob-02-3e8.cdf356c9ee24382e453e.js", + "hash": "1b88c6596c2f82a4ae7e", + "publicPath": "/metadata---blog-tags-hellob-02-3e8.cdf356c9ee24382e453e.js" + } + ] + }, + "70": { + "js": [ + { + "file": "metadata---blog-tags-nodegui-632-d46.73df93301c6a1152b2fe.js", + "hash": "2d52243f46565fc7116a", + "publicPath": "/metadata---blog-tags-nodegui-632-d46.73df93301c6a1152b2fe.js" + } + ] + }, + "71": { + "js": [ + { + "file": "metadata---blog-welcome-27-a-91f.ef07fafa6070c2acef91.js", + "hash": "d8079ad2fdf9796770d4", + "publicPath": "/metadata---blog-welcome-27-a-91f.ef07fafa6070c2acef91.js" + } + ] + }, + "72": { + "js": [ + { + "file": "metadata---docs-api-component-3-e-5-43d.b1af807c32f3d1d45a4f.js", + "hash": "c0d8651c0c28b00718a1", + "publicPath": "/metadata---docs-api-component-3-e-5-43d.b1af807c32f3d1d45a4f.js" + } + ] + }, + "73": { + "js": [ + { + "file": "metadata---docs-api-event-widget-39-a-9ea.34b0ce562deb2ec0ae92.js", + "hash": "99b09ce6f61c28656d8c", + "publicPath": "/metadata---docs-api-event-widget-39-a-9ea.34b0ce562deb2ec0ae92.js" + } + ] + }, + "74": { + "js": [ + { + "file": "metadata---docs-api-flex-layoutecf-540.7db8561c2c23b0d92b67.js", + "hash": "bdd7cb6bf1a307ab90e8", + "publicPath": "/metadata---docs-api-flex-layoutecf-540.7db8561c2c23b0d92b67.js" + } + ] + }, + "75": { + "js": [ + { + "file": "metadata---docs-api-node-layout-1-e-9-c15.192849fc91407c883037.js", + "hash": "2c1a3d199b66e83a9fb1", + "publicPath": "/metadata---docs-api-node-layout-1-e-9-c15.192849fc91407c883037.js" + } + ] + }, + "76": { + "js": [ + { + "file": "metadata---docs-api-node-widgeta-92-a4f.dc800d76f7062b65b2ed.js", + "hash": "5b8a775a3136bde6b52c", + "publicPath": "/metadata---docs-api-node-widgeta-92-a4f.dc800d76f7062b65b2ed.js" + } + ] + }, + "77": { + "js": [ + { + "file": "metadata---docs-api-process-32-d-09e.9dd820231565148c88a2.js", + "hash": "1d0c67b153abf86136d0", + "publicPath": "/metadata---docs-api-process-32-d-09e.9dd820231565148c88a2.js" + } + ] + }, + "78": { + "js": [ + { + "file": "metadata---docs-api-q-abstract-scroll-area-59-d-279.378868b047b4e7fc733c.js", + "hash": "aa491be2be618b86553d", + "publicPath": "/metadata---docs-api-q-abstract-scroll-area-59-d-279.378868b047b4e7fc733c.js" + } + ] + }, + "79": { + "js": [ + { + "file": "metadata---docs-api-q-abstract-sliderdfa-ab7.73efd891b1be587b529b.js", + "hash": "35fdae6eaeaf576eb1a4", + "publicPath": "/metadata---docs-api-q-abstract-sliderdfa-ab7.73efd891b1be587b529b.js" + } + ] + }, + "80": { + "js": [ + { + "file": "metadata---docs-api-q-applicationc-1-d-8a4.dba24314be49483727c4.js", + "hash": "37ff3516140ee7cb5d0f", + "publicPath": "/metadata---docs-api-q-applicationc-1-d-8a4.dba24314be49483727c4.js" + } + ] + }, + "81": { + "js": [ + { + "file": "metadata---docs-api-q-check-box-132-293.363eb2c9b2bdc95e76bb.js", + "hash": "6658073e96430434d77e", + "publicPath": "/metadata---docs-api-q-check-box-132-293.363eb2c9b2bdc95e76bb.js" + } + ] + }, + "82": { + "js": [ + { + "file": "metadata---docs-api-q-clipboard-486-b21.5efa03bad36d45e62cbe.js", + "hash": "ef64dbc87f01db84b015", + "publicPath": "/metadata---docs-api-q-clipboard-486-b21.5efa03bad36d45e62cbe.js" + } + ] + }, + "83": { + "js": [ + { + "file": "metadata---docs-api-q-cursor-887-11e.af1b21b104f06148557b.js", + "hash": "03a2ca8fe243e2e753e8", + "publicPath": "/metadata---docs-api-q-cursor-887-11e.af1b21b104f06148557b.js" + } + ] + }, + "84": { + "js": [ + { + "file": "metadata---docs-api-q-dialbfb-aef.e5ded32011b7d6927cdc.js", + "hash": "c5b9a9f743cd49f25588", + "publicPath": "/metadata---docs-api-q-dialbfb-aef.e5ded32011b7d6927cdc.js" + } + ] + }, + "85": { + "js": [ + { + "file": "metadata---docs-api-q-grid-layout-7-db-030.f3764e551a2bc1cf18a8.js", + "hash": "3268781e856778797154", + "publicPath": "/metadata---docs-api-q-grid-layout-7-db-030.f3764e551a2bc1cf18a8.js" + } + ] + }, + "86": { + "js": [ + { + "file": "metadata---docs-api-q-icone-6-d-093.1c4c72d6ff116744c296.js", + "hash": "1cea3a052884d6f13272", + "publicPath": "/metadata---docs-api-q-icone-6-d-093.1c4c72d6ff116744c296.js" + } + ] + }, + "87": { + "js": [ + { + "file": "metadata---docs-api-q-label-165-210.1dba411adf86a92ae91f.js", + "hash": "c5c4a7bab7368c933a4b", + "publicPath": "/metadata---docs-api-q-label-165-210.1dba411adf86a92ae91f.js" + } + ] + }, + "88": { + "js": [ + { + "file": "metadata---docs-api-q-line-edit-13-f-b8a.df4fef6cc6001cbc07a7.js", + "hash": "c0161e3673efdf8f7c41", + "publicPath": "/metadata---docs-api-q-line-edit-13-f-b8a.df4fef6cc6001cbc07a7.js" + } + ] + }, + "89": { + "js": [ + { + "file": "metadata---docs-api-q-main-window-04-f-efb.699f6e2eb1ac78330311.js", + "hash": "d0c1fb6ee9efbed30b16", + "publicPath": "/metadata---docs-api-q-main-window-04-f-efb.699f6e2eb1ac78330311.js" + } + ] + }, + "90": { + "js": [ + { + "file": "metadata---docs-api-q-pixmapfdf-820.087e26967d50eb06140d.js", + "hash": "cca2fcb72ef091777f47", + "publicPath": "/metadata---docs-api-q-pixmapfdf-820.087e26967d50eb06140d.js" + } + ] + }, + "91": { + "js": [ + { + "file": "metadata---docs-api-q-plain-text-edit-161-ecc.e89eb96f17b29e76629e.js", + "hash": "284b7b4ff8c02b752f58", + "publicPath": "/metadata---docs-api-q-plain-text-edit-161-ecc.e89eb96f17b29e76629e.js" + } + ] + }, + "92": { + "js": [ + { + "file": "metadata---docs-api-q-progress-bar-43-d-07e.a527e07318808cde454e.js", + "hash": "ced6e9165233a902f0ab", + "publicPath": "/metadata---docs-api-q-progress-bar-43-d-07e.a527e07318808cde454e.js" + } + ] + }, + "93": { + "js": [ + { + "file": "metadata---docs-api-q-push-button-96-d-c92.b15a45966fb25f5f9917.js", + "hash": "8afeaf91f66cabcee6e6", + "publicPath": "/metadata---docs-api-q-push-button-96-d-c92.b15a45966fb25f5f9917.js" + } + ] + }, + "94": { + "js": [ + { + "file": "metadata---docs-api-q-radio-button-367-f7c.11484c432455585a7ef3.js", + "hash": "210634f17771e46009f2", + "publicPath": "/metadata---docs-api-q-radio-button-367-f7c.11484c432455585a7ef3.js" + } + ] + }, + "95": { + "js": [ + { + "file": "metadata---docs-api-q-scroll-area-46-a-96e.a5c480374e3f8b5fcea2.js", + "hash": "23abe7fb83acb811ef1a", + "publicPath": "/metadata---docs-api-q-scroll-area-46-a-96e.a5c480374e3f8b5fcea2.js" + } + ] + }, + "96": { + "js": [ + { + "file": "metadata---docs-api-q-spin-box-809-ae0.1fcda0244eebb91ff1bf.js", + "hash": "231826b5661cb259a59f", + "publicPath": "/metadata---docs-api-q-spin-box-809-ae0.1fcda0244eebb91ff1bf.js" + } + ] + }, + "97": { + "js": [ + { + "file": "metadata---docs-api-q-tab-widgetebc-5aa.558f01cb9860e9184f4f.js", + "hash": "917587e63e93e902c730", + "publicPath": "/metadata---docs-api-q-tab-widgetebc-5aa.558f01cb9860e9184f4f.js" + } + ] + }, + "98": { + "js": [ + { + "file": "metadata---docs-api-q-widget-287-e6c.1a1aa4d570d756d63bb4.js", + "hash": "296a0301da8a2e88f9b3", + "publicPath": "/metadata---docs-api-q-widget-287-e6c.1a1aa4d570d756d63bb4.js" + } + ] + }, + "99": { + "js": [ + { + "file": "metadata---docs-api-qt-enums-423-cf9.fb1940e1fff15d344906.js", + "hash": "9af9c95d2c2fda710259", + "publicPath": "/metadata---docs-api-qt-enums-423-cf9.fb1940e1fff15d344906.js" + } + ] + }, + "100": { + "js": [ + { + "file": "metadata---docs-api-synopsis-21-f-a62.a376081207def93aa340.js", + "hash": "fd506bbc2131727266e4", + "publicPath": "/metadata---docs-api-synopsis-21-f-a62.a376081207def93aa340.js" + } + ] + }, + "101": { + "js": [ + { + "file": "metadata---docs-api-yoga-widget-95-c-f8b.bdbc70e8a3ba6a1d1808.js", + "hash": "5126ead782bb862b36c6", + "publicPath": "/metadata---docs-api-yoga-widget-95-c-f8b.bdbc70e8a3ba6a1d1808.js" + } + ] + }, + "102": { + "js": [ + { + "file": "metadata---docs-development-common-errors-402-ef4.7ea9ca2120cf1ce1bce9.js", + "hash": "7b61c1eae78a2381aa47", + "publicPath": "/metadata---docs-development-common-errors-402-ef4.7ea9ca2120cf1ce1bce9.js" + } + ] + }, + "103": { + "js": [ + { + "file": "metadata---docs-development-debuggingc-36-26a.3bf9d58aef0157443ea5.js", + "hash": "0570fb3bb0a96d791012", + "publicPath": "/metadata---docs-development-debuggingc-36-26a.3bf9d58aef0157443ea5.js" + } + ] + }, + "104": { + "js": [ + { + "file": "metadata---docs-development-getting-started-89-b-c7a.863d1b0e22372d87282e.js", + "hash": "a0f881778ba6048d9b65", + "publicPath": "/metadata---docs-development-getting-started-89-b-c7a.863d1b0e22372d87282e.js" + } + ] + }, + "105": { + "js": [ + { + "file": "metadata---docs-development-readm-ec-6-c-332.49158ed40eba176b8d72.js", + "hash": "6cdba9458d639ecaa33a", + "publicPath": "/metadata---docs-development-readm-ec-6-c-332.49158ed40eba176b8d72.js" + } + ] + }, + "106": { + "js": [ + { + "file": "metadata---docs-development-setting-up-979-75f.8f9fc5a72c685e8d0e31.js", + "hash": "40a1a83697048bb5eea7", + "publicPath": "/metadata---docs-development-setting-up-979-75f.8f9fc5a72c685e8d0e31.js" + } + ] + }, + "107": { + "js": [ + { + "file": "metadata---docs-development-signal-and-event-handling-0-b-5-692.b16a5b795c3eef3ce5dc.js", + "hash": "cfb9a7b9fa754918ecec", + "publicPath": "/metadata---docs-development-signal-and-event-handling-0-b-5-692.b16a5b795c3eef3ce5dc.js" + } + ] + }, + "108": { + "js": [ + { + "file": "metadata---docs-development-styling-1-c-2-0d6.c1ae40b22fc3b93cd6fc.js", + "hash": "1a26fa35469aa7c47e08", + "publicPath": "/metadata---docs-development-styling-1-c-2-0d6.c1ae40b22fc3b93cd6fc.js" + } + ] + }, + "109": { + "js": [ + { + "file": "metadata---docs-development-wrapping-widgets-303-fb8.bfc04ad3ffc9ee24e861.js", + "hash": "8eaa9dade4f31b691acc", + "publicPath": "/metadata---docs-development-wrapping-widgets-303-fb8.bfc04ad3ffc9ee24e861.js" + } + ] + }, + "110": { + "js": [ + { + "file": "metadata---docs-doc-12-a-3-5a1.bb87820e31f222c12801.js", + "hash": "8cf3a4110a37d02fa2c0", + "publicPath": "/metadata---docs-doc-12-a-3-5a1.bb87820e31f222c12801.js" + } + ] + }, + "111": { + "js": [ + { + "file": "metadata---docs-faq-59-d-2b9.985713e75ca070fdde14.js", + "hash": "326f9d2a7f16aed838c0", + "publicPath": "/metadata---docs-faq-59-d-2b9.985713e75ca070fdde14.js" + } + ] + }, + "112": { + "js": [ + { + "file": "metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f.184a7a6a1f10e05c6c54.js", + "hash": "80536ab8ff5827e5c9f3", + "publicPath": "/metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f.184a7a6a1f10e05c6c54.js" + } + ] + }, + "113": { + "js": [ + { + "file": "metadata---docs-guides-debugging-970-fb8.4834f7c20eceaaaee536.js", + "hash": "b2282d1a5f493b7f9dda", + "publicPath": "/metadata---docs-guides-debugging-970-fb8.4834f7c20eceaaaee536.js" + } + ] + }, + "114": { + "js": [ + { + "file": "metadata---docs-guides-debugging-in-vscodebf-8-5b0.d26c0a02667ed3c9416d.js", + "hash": "af929449097de9bef636", + "publicPath": "/metadata---docs-guides-debugging-in-vscodebf-8-5b0.d26c0a02667ed3c9416d.js" + } + ] + }, + "115": { + "js": [ + { + "file": "metadata---docs-guides-getting-started-2-b-7-1a4.cfc3dec8bc5f547dfbb8.js", + "hash": "9c9e40859c3866a56602", + "publicPath": "/metadata---docs-guides-getting-started-2-b-7-1a4.cfc3dec8bc5f547dfbb8.js" + } + ] + }, + "116": { + "js": [ + { + "file": "metadata---docs-guides-handle-events-5-eb-540.61bb8e8da8eeda4cc040.js", + "hash": "54d5128f7f207f085fed", + "publicPath": "/metadata---docs-guides-handle-events-5-eb-540.61bb8e8da8eeda4cc040.js" + } + ] + }, + "117": { + "js": [ + { + "file": "metadata---docs-guides-images-915-5ee.175b82933d61d3e5deb4.js", + "hash": "e51f418e4ee50cadd7d3", + "publicPath": "/metadata---docs-guides-images-915-5ee.175b82933d61d3e5deb4.js" + } + ] + }, + "118": { + "js": [ + { + "file": "metadata---docs-guides-layoutf-65-d7d.3bdf6df942a2264f480b.js", + "hash": "0e33f37bd528a589435e", + "publicPath": "/metadata---docs-guides-layoutf-65-d7d.3bdf6df942a2264f480b.js" + } + ] + }, + "119": { + "js": [ + { + "file": "metadata---docs-guides-networkingdfd-ce0.332c039b051021fe2724.js", + "hash": "4463ff528eb7034e71d7", + "publicPath": "/metadata---docs-guides-networkingdfd-ce0.332c039b051021fe2724.js" + } + ] + }, + "120": { + "js": [ + { + "file": "metadata---docs-guides-nodegui-architecture-550-b82.72d9e2773d4e285ca973.js", + "hash": "1bdc1dccfdc80164b158", + "publicPath": "/metadata---docs-guides-nodegui-architecture-550-b82.72d9e2773d4e285ca973.js" + } + ] + }, + "121": { + "js": [ + { + "file": "metadata---docs-guides-scroll-view-9-a-9-2ac.f6039a7dd2d1fa4c6ca6.js", + "hash": "4a389e481a1914ef0dff", + "publicPath": "/metadata---docs-guides-scroll-view-9-a-9-2ac.f6039a7dd2d1fa4c6ca6.js" + } + ] + }, + "122": { + "js": [ + { + "file": "metadata---docs-guides-styling-9-ea-213.d5570c147002ef8e6bfe.js", + "hash": "77d9df1061168430f77f", + "publicPath": "/metadata---docs-guides-styling-9-ea-213.d5570c147002ef8e6bfe.js" + } + ] + }, + "123": { + "js": [ + { + "file": "metadata---docs-guides-tutorial-1-f-1-23b.4e417b24befa6a685ab5.js", + "hash": "c11dfc404c750956f9fa", + "publicPath": "/metadata---docs-guides-tutorial-1-f-1-23b.4e417b24befa6a685ab5.js" + } + ] + }, + "124": { + "js": [ + { + "file": "metadata---docs-guides-using-native-node-modules-31-f-551.0accd417ae132a661bdf.js", + "hash": "44203c62856da7847371", + "publicPath": "/metadata---docs-guides-using-native-node-modules-31-f-551.0accd417ae132a661bdf.js" + } + ] + }, + "125": { + "js": [ + { + "file": "metadata---docs-mdx-786-f56.e64a4ecfb244bb1efd9f.js", + "hash": "e090cad8a4ac6ab6e445", + "publicPath": "/metadata---docs-mdx-786-f56.e64a4ecfb244bb1efd9f.js" + } + ] + }, + "126": { + "js": [ + { + "file": "runtime~main.b0186ad8ee6d73168ac3.js", + "hash": "d7e71319fb9d98d02611", + "publicPath": "/runtime~main.b0186ad8ee6d73168ac3.js" + } + ] + }, + "127": { + "js": [ + { + "file": "tags---blog-tags-8-d-7-36d.1243f2728e886299c73e.js", + "hash": "7c0bb245139a4b1d3755", + "publicPath": "/tags---blog-tags-8-d-7-36d.1243f2728e886299c73e.js" + } + ] + }, + "128": { + "js": [ + { + "file": "128.e842e81be02948779cd3.js", + "hash": "b187810cec4c56cee77f", + "publicPath": "/128.e842e81be02948779cd3.js" + } + ] + }, + "129": { + "js": [ + { + "file": "129.8e3566f903859d61277d.js", + "hash": "8d7cbc58ee8f3eee3d0e", + "publicPath": "/129.8e3566f903859d61277d.js" + } + ] + } + } +} \ No newline at end of file diff --git a/component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css b/component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css new file mode 100644 index 000000000..865ba1556 --- /dev/null +++ b/component---site-src-pages-index-jsc-4-f-f99.71bf8f44fd9ac59b6a50.css @@ -0,0 +1 @@ +.heroBanner_2Ftp{padding:4rem 0;text-align:center;position:relative;overflow:hidden}@media screen and (max-width:966px){.heroBanner_2Ftp{padding:2rem}}.buttons_1Wc3{justify-content:center}.buttons_1Wc3,.features_P2SU{display:flex;align-items:center}.features_P2SU{padding:2rem 0;width:100%}.featureImage_3Xqx{height:200px;width:200px}.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}} \ No newline at end of file diff --git a/component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js b/component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js new file mode 100644 index 000000000..a0786a4b9 --- /dev/null +++ b/component---site-src-pages-index-jsc-4-f-f99.c77efb7a13d4c996d6c7.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{156:function(e,n,t){"use strict";t.r(n);var a=t(0),r=t.n(a),i=t(163),l=t.n(i),c=t(164),o=t(167);function u(){var e=E(["\n font-weight: 600;\n"]);return u=function(){return e},e}function m(){var e=E([""]);return m=function(){return e},e}function s(){var e=E([""]);return s=function(){return e},e}function f(){var e=E(["\n font-size: 20px;\n"]);return f=function(){return e},e}function d(){var e=E([""]);return d=function(){return e},e}function p(){var e=E(["\n flex-direction: column;\n display: flex;\n align-items: center;\n"]);return p=function(){return e},e}function g(){var e=E(["\n margin-left: auto;\n margin-right: auto;\n max-width: 1140px;\n max-width: var(--ifm-container-width);\n padding-left: 1rem;\n padding-left: var(--ifm-spacing-horizontal);\n padding-right: 1rem;\n padding-right: var(--ifm-spacing-horizontal);\n width: 100%;\n"]);return g=function(){return e},e}function v(){var e=E(["\n display: flex;\n align-items: center;\n padding: 2rem 0 0 0;\n width: 100%;\n margin: 0 auto;\n"]);return v=function(){return e},e}function h(){var e=E([""]);return h=function(){return e},e}function E(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var b=o.a.header(h()),w=o.a.section(v()),x=o.a.div(g()),y=o.a.div(p()),O=(o.a.ol(d()),o.a.li(f()),o.a.h1(s())),k=o.a.h2(m());o.a.h4(u());function N(){var e=C(["\n width: 600px;\n max-width: 100%;\n"]);return N=function(){return e},e}function z(){var e=C(["\n font-weight: 400;\n"]);return z=function(){return e},e}function j(){var e=C(['\n background: black;\n display: flex;\n flex-direction: column;\n border: 1px solid gray;\n border-bottom: none;\n border-top-left-radius: 10px;\n border-top-right-radius: 10px;\n padding: 50px 30px 30px 30px;\n width: 600px;\n max-width: 100%;\n position: relative;\n margin-bottom: 20px;\n &::before {\n content: "โ—‹ โ—‹ โ—‹";\n color: gray;\n font-size: 14px;\n position: absolute;\n left: 15px;\n top: 5px;\n }\n']);return j=function(){return e},e}function S(){var e=C(['\n color: white !important;\n font-size: 14px;\n position: relative;\n &::before {\n content: "$";\n position: absolute;\n left: -13px;\n color: gray;\n }\n']);return S=function(){return e},e}function C(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var _=o.a.code(S()),T=o.a.div(j()),P=o.a.h4(z()),W=o.a.div(N()),F=function(){return r.a.createElement(w,{id:"quick-start"},r.a.createElement(x,null,r.a.createElement(y,null,r.a.createElement(k,null,"Give it a try"),r.a.createElement(W,null,r.a.createElement(P,null,"1. Run these commands"),r.a.createElement(T,null,r.a.createElement(_,null,"git clone https://github.com/nodegui/nodegui-starter"),r.a.createElement(_,null,"cd nodegui-starter"),r.a.createElement(_,null,"npm install"),r.a.createElement(_,null,"npm start")),r.a.createElement(P,null,"2."," ",r.a.createElement("a",{className:"LinkBasics",href:"docs/guides/getting-started"},"Learn the basics")," ","or dive deeper and take a"," ",r.a.createElement("a",{className:"LinkBasics",href:"docs/api/QApplication"},"look at the APIs."))))))},J=t(171),G=t.n(J),I=t(166),L=t.n(I);function U(){var e=M(["\n padding-bottom: 40px;\n"]);return U=function(){return e},e}function B(){var e=M(["\n max-width: 170px;\n"]);return B=function(){return e},e}function q(){var e=M(["\n font-size: 1.6em;\n text-align: center;\n"]);return q=function(){return e},e}function Q(){var e=M(["\n font-size: 3em;\n font-weight: 600;\n"]);return Q=function(){return e},e}function A(){var e=M(["\n ","\n padding: 0.7rem 1.1rem;\n font-size: 1.2em;\n"]);return A=function(){return e},e}function M(e,n){return n||(n=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}var R=o.a.a(A(),(function(e){switch(e.type){case"primary":return"\n color: white; \n background: var(--ifm-color-primary);\n &:hover {\n color: white;\n text-decoration: none;\n background: var(--ifm-color-primary-dark);\n }\n ";case"secondary":return'\n &::after {\n content: "โ€บ";\n font-size: 24px;\n margin-left: 5px;\n text-align: center;\n }\n '}})),H=Object(o.a)(O)(Q()),V=o.a.p(q()),X=o.a.img(B()),$=Object(o.a)(b)(U());function D(){return r.a.createElement("div",null,r.a.createElement(R,{type:"primary",href:"#quick-start",target:"_self"},"Quick start"),r.a.createElement(R,{type:"secondary",href:L()("docs/guides/getting-started"),target:"_self"},"Learn basics"))}var K=function(){var e=l()().siteConfig,n=void 0===e?{}:e;return r.a.createElement($,null,r.a.createElement(x,null,r.a.createElement(y,null,r.a.createElement(X,{src:"img/logox200.png"}),r.a.createElement(H,null,n.title),r.a.createElement(V,null,n.tagline),r.a.createElement("div",{className:G.a.buttons},r.a.createElement(D,null)))))},Y=t(165),Z=t.n(Y),ee=[{title:r.a.createElement(r.a.Fragment,null,"Web Technologies"),imageUrl:"img/undraw_website_setup.svg",description:r.a.createElement(r.a.Fragment,null,"With NodeGui, you can build your app with familiar web technologies like CSS and JavaScript. There is even a"," ",r.a.createElement("a",{href:"https://react.nodegui.org"},"React based version"),".")},{title:r.a.createElement(r.a.Fragment,null,"Open Source"),imageUrl:"img/undraw_code_review.svg",description:r.a.createElement(r.a.Fragment,null,"NodeGui is an open source project maintained by an active community of contributors.")},{title:r.a.createElement(r.a.Fragment,null," Cross Platform"),imageUrl:"img/undraw_windows.svg",description:r.a.createElement(r.a.Fragment,null,"Compatible with Mac, Windows, and Linux, Electron apps build and run on three platforms.")}],ne=function(){return r.a.createElement("section",{className:G.a.features},r.a.createElement("div",{className:"container"},r.a.createElement("div",{className:"row"},ee.map((function(e,n){var t=e.imageUrl,a=e.title,i=e.description;return r.a.createElement("div",{key:n,className:Z()("col col--4",G.a.feature)},t&&r.a.createElement("div",{className:"text--center"},r.a.createElement("img",{className:G.a.featureImage,src:L()(t),alt:a})),r.a.createElement("h3",{className:"text--center"},a),r.a.createElement("p",{className:"text--center"},i))})))))},te=(t(188),function(e){return r.a.createElement(w,null,r.a.createElement("div",{className:"SplitView"},r.a.createElement("div",{className:"column first left ".concat(e.columnOneClass)},e.columnOne),r.a.createElement("div",{className:"column last right ".concat(e.columnTwoClass)},e.columnTwo)))});function ae(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(["\n max-height: 300px;\n padding-bottom: 40px;\n"]);return ae=function(){return e},e}var re=o.a.img(ae()),ie=function(){return r.a.createElement(te,{columnTwoClass:"text",columnOne:r.a.createElement((function(){return r.a.createElement(re,{src:"img/demo.png"})}),null),columnTwo:r.a.createElement((function(){return r.a.createElement("div",null,r.a.createElement("h3",null,"Create native apps for Windows, MacOs and Linux using JavaScript and CSS"),r.a.createElement("p",null,"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."),r.a.createElement("p",null,"NodeGui widgets are built on top of"," ",r.a.createElement("a",{href:"https://www.qt.io/",target:"_blank"},"Qt")," ","which is a mature dekstop apps framework. NodeGui widgets are extremely customizable just like in the web but does"," ",r.a.createElement("strong",null,"NOT")," use a Web browser under the hood."))}),null)})};function le(){var e=function(e,n){n||(n=e.slice(0));return Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(n)}}))}(["\n max-height: 300px;\n padding-bottom: 40px;\n"]);return le=function(){return e},e}var ce=o.a.img(le()),oe=function(){return r.a.createElement(te,{columnOneClass:"text",columnOne:r.a.createElement((function(){return r.a.createElement("div",null,r.a.createElement("h3",null,"Written in JavaScriptโ€”rendered with native code by Qt"),r.a.createElement("p",null,"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."),r.a.createElement("p",null,"With NodeGui you get flexibility of web and perfromance of Native desktop apps."))}),null),columnTwo:r.a.createElement((function(){return r.a.createElement("div",null,r.a.createElement(ce,{src:"img/code-sample.png"}))}),null)})};n.default=function(){var e=l()().siteConfig,n=void 0===e?{}:e;return r.a.createElement(c.a,{title:"Hello from ".concat(n.title),description:"Build performant, native and cross-platform desktop applications with JavaScript and CSS ๐Ÿš€"},r.a.createElement(K,null),r.a.createElement("main",null,r.a.createElement(ne,null),r.a.createElement(ie,null),r.a.createElement(oe,null),r.a.createElement(F,null)))}},171:function(e,n,t){e.exports={heroBanner:"heroBanner_2Ftp",buttons:"buttons_1Wc3",features:"features_P2SU",featureImage:"featureImage_3Xqx"}},188:function(e,n,t){}}]); \ No newline at end of file diff --git a/component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js b/component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js new file mode 100644 index 000000000..5db12abfa --- /dev/null +++ b/component---theme-blog-list-pagea-6-a-7ba.697ec326a8cebf60b287.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{158:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(164),m=t(168),c=t(162);var i=function(e){var a=e.metadata,t=a.previousPage,n=a.nextPage;return r.a.createElement("nav",{className:"pagination-nav"},r.a.createElement("div",{className:"pagination-nav__item"},t&&r.a.createElement(c.a,{className:"pagination-nav__link",to:t},r.a.createElement("h4",{className:"pagination-nav__link--label"},"ยซ Newer Entries"))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},n&&r.a.createElement(c.a,{className:"pagination-nav__link",to:n},r.a.createElement("h4",{className:"pagination-nav__link--label"},"Older Entries ยป"))))};a.default=function(e){var a=e.metadata,t=e.items;return r.a.createElement(l.a,{title:"Blog",description:"Blog"},r.a.createElement("div",{className:"container margin-vert--xl"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--8 col--offset-2"},t.map((function(e){var a=e.content,t=e.metadata;return r.a.createElement("div",{className:"margin-bottom--xl",key:t.permalink},r.a.createElement(m.a,{frontMatter:a.frontMatter,metadata:t,truncated:!0},r.a.createElement(a,null)))})),r.a.createElement(i,{metadata:a})))))}},168:function(e,a,t){"use strict";var n=t(0),r=t.n(n),l=t(161),m=t(162),c=t(169);a.a=function(e){var a,t,n,i,s,o=e.children,u=e.frontMatter,E=e.metadata,v=e.truncated,g=E.date,p=E.permalink,d=E.tags,N=u.author,_=u.authorURL,h=u.authorTitle,b=u.authorFBID,f=u.title;return r.a.createElement("div",null,(a=g.substring(0,10).split("-"),t=a[0],n=["January","February","March","April","May","June","July","August","September","October","November","December"][parseInt(a[1],10)-1],i=parseInt(a[2],10),s=b?"https://graph.facebook.com/".concat(b,"/picture/?height=200&width=200"):u.authorImageURL,r.a.createElement("header",null,r.a.createElement("h1",{className:"margin-bottom--xs"},r.a.createElement(m.a,{to:p},f)),r.a.createElement("div",{className:"margin-bottom--sm"},r.a.createElement("small",null,n," ",i,", ",t)),r.a.createElement("div",{className:"avatar margin-bottom--md"},s&&r.a.createElement("a",{className:"avatar__photo-link",href:_,target:"_blank",rel:"noreferrer noopener"},r.a.createElement("img",{className:"avatar__photo",src:s,alt:N})),r.a.createElement("div",{className:"avatar__intro"},N&&r.a.createElement(r.a.Fragment,null,r.a.createElement("h4",{className:"avatar__name"},r.a.createElement("a",{href:_,target:"_blank",rel:"noreferrer noopener"},N)),r.a.createElement("small",{className:"avatar__subtitle"},h)))))),r.a.createElement("article",{className:"markdown"},r.a.createElement(l.a,{components:c.a},o)),r.a.createElement("div",{className:"row margin-vert--lg"},r.a.createElement("div",{className:"col"},d.length>0&&r.a.createElement(r.a.Fragment,null,r.a.createElement("strong",null,"Tags:"),d.map((function(e){var a=e.label,t=e.permalink;return r.a.createElement(m.a,{key:t,className:"margin-horiz--sm",to:t},a)})))),r.a.createElement("div",{className:"col text--right"},v&&r.a.createElement(m.a,{to:E.permalink},r.a.createElement("strong",null,"Read More")))))}}}]); \ No newline at end of file diff --git a/component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js b/component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js new file mode 100644 index 000000000..8feb69069 --- /dev/null +++ b/component---theme-blog-post-pageccc-cab.eaf730b8c654a212f785.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{157:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(164),m=t(168),c=t(162);var i=function(e){var a=e.nextItem,t=e.prevItem;return r.a.createElement("nav",{className:"pagination-nav"},r.a.createElement("div",{className:"pagination-nav__item"},t&&r.a.createElement(c.a,{className:"pagination-nav__link",to:t.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Previous Post"),r.a.createElement("h4",{className:"pagination-nav__link--label"},"ยซ ",t.title))),r.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},a&&r.a.createElement(c.a,{className:"pagination-nav__link",to:a.permalink},r.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Next Post"),r.a.createElement("h4",{className:"pagination-nav__link--label"},a.title," ยป"))))};a.default=function(e){var a=e.content,t=e.metadata,n=e.nextItem,c=e.prevItem,s=a.frontMatter;return r.a.createElement(l.a,{title:t.title,description:t.description},a&&r.a.createElement("div",{className:"container margin-vert--xl"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--8 col--offset-2"},r.a.createElement(m.a,{frontMatter:s,metadata:t},r.a.createElement(a,null)),r.a.createElement("div",{className:"margin-vert--xl"},r.a.createElement(i,{nextItem:n,prevItem:c}))))))}},168:function(e,a,t){"use strict";var n=t(0),r=t.n(n),l=t(161),m=t(162),c=t(169);a.a=function(e){var a,t,n,i,s,o=e.children,v=e.frontMatter,E=e.metadata,u=e.truncated,p=E.date,g=E.permalink,_=E.tags,d=v.author,N=v.authorURL,h=v.authorTitle,b=v.authorFBID,k=v.title;return r.a.createElement("div",null,(a=p.substring(0,10).split("-"),t=a[0],n=["January","February","March","April","May","June","July","August","September","October","November","December"][parseInt(a[1],10)-1],i=parseInt(a[2],10),s=b?"https://graph.facebook.com/".concat(b,"/picture/?height=200&width=200"):v.authorImageURL,r.a.createElement("header",null,r.a.createElement("h1",{className:"margin-bottom--xs"},r.a.createElement(m.a,{to:g},k)),r.a.createElement("div",{className:"margin-bottom--sm"},r.a.createElement("small",null,n," ",i,", ",t)),r.a.createElement("div",{className:"avatar margin-bottom--md"},s&&r.a.createElement("a",{className:"avatar__photo-link",href:N,target:"_blank",rel:"noreferrer noopener"},r.a.createElement("img",{className:"avatar__photo",src:s,alt:d})),r.a.createElement("div",{className:"avatar__intro"},d&&r.a.createElement(r.a.Fragment,null,r.a.createElement("h4",{className:"avatar__name"},r.a.createElement("a",{href:N,target:"_blank",rel:"noreferrer noopener"},d)),r.a.createElement("small",{className:"avatar__subtitle"},h)))))),r.a.createElement("article",{className:"markdown"},r.a.createElement(l.a,{components:c.a},o)),r.a.createElement("div",{className:"row margin-vert--lg"},r.a.createElement("div",{className:"col"},_.length>0&&r.a.createElement(r.a.Fragment,null,r.a.createElement("strong",null,"Tags:"),_.map((function(e){var a=e.label,t=e.permalink;return r.a.createElement(m.a,{key:t,className:"margin-horiz--sm",to:t},a)})))),r.a.createElement("div",{className:"col text--right"},u&&r.a.createElement(m.a,{to:E.permalink},r.a.createElement("strong",null,"Read More")))))}}}]); \ No newline at end of file diff --git a/component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js b/component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js new file mode 100644 index 000000000..d9f921d30 --- /dev/null +++ b/component---theme-blog-tags-list-page-01-a-d0b.f9af53c8c6b12587c378.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{154:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(164),c=t(162),i=26,o=97;a.default=function(e){var a=e.tags,t=Array(i).fill(null).map((function(){return[]}));Object.keys(a).sort().forEach((function(e){var a=e.charCodeAt(0);t[a-o].push(e)}));var n=t.map((function(e,t){if(0===e.length)return null;var n=String.fromCharCode(o+t).toUpperCase();return r.a.createElement("div",{key:n},r.a.createElement("h3",null,n),e.map((function(e){return r.a.createElement(c.a,{className:"padding-right--md",href:a[e].permalink,key:"tag"},a[e].name," (",a[e].count,")")})),r.a.createElement("hr",null))})).filter((function(e){return null!=e}));return r.a.createElement(l.a,{title:"Blog Tags",description:"Blog Tags"},r.a.createElement("div",{className:"container margin-vert--xl"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--8 col--offset-2"},r.a.createElement("h1",null,"Tags"),r.a.createElement("div",{className:"margin-vert--lg"},n)))))}}}]); \ No newline at end of file diff --git a/component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js b/component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js new file mode 100644 index 000000000..2efed32e9 --- /dev/null +++ b/component---theme-blog-tags-posts-page-687-b6c.7cbecfb8c53ab9b2f9ba.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{151:function(e,a,t){"use strict";t.r(a);var r=t(0),n=t.n(r),l=t(164),m=t(168),c=t(162);a.default=function(e){var a=e.metadata,t=e.items,r=a.allTagsPath,o=a.name,s=a.count;return n.a.createElement(l.a,{title:'Blog | Tagged "'.concat(o,'"'),description:'Blog | Tagged "'.concat(o,'"')},n.a.createElement("div",{className:"container margin-vert--xl"},n.a.createElement("div",{className:"row"},n.a.createElement("div",{className:"col col--8 col--offset-2"},n.a.createElement("h1",null,s,' post(s) tagged with "',o,'"'),n.a.createElement(c.a,{href:r},"View All Tags"),n.a.createElement("div",{className:"margin-vert--xl"},t.map((function(e){var a=e.content,t=e.metadata;return n.a.createElement("div",{key:t.permalink},n.a.createElement(m.a,{frontMatter:a.frontMatter,metadata:t,truncated:!0},n.a.createElement(a,null)))})))))))}},168:function(e,a,t){"use strict";var r=t(0),n=t.n(r),l=t(161),m=t(162),c=t(169);a.a=function(e){var a,t,r,o,s,i=e.children,u=e.frontMatter,g=e.metadata,E=e.truncated,d=g.date,v=g.permalink,h=g.tags,p=u.author,f=u.authorURL,N=u.authorTitle,b=u.authorFBID,k=u.title;return n.a.createElement("div",null,(a=d.substring(0,10).split("-"),t=a[0],r=["January","February","March","April","May","June","July","August","September","October","November","December"][parseInt(a[1],10)-1],o=parseInt(a[2],10),s=b?"https://graph.facebook.com/".concat(b,"/picture/?height=200&width=200"):u.authorImageURL,n.a.createElement("header",null,n.a.createElement("h1",{className:"margin-bottom--xs"},n.a.createElement(m.a,{to:v},k)),n.a.createElement("div",{className:"margin-bottom--sm"},n.a.createElement("small",null,r," ",o,", ",t)),n.a.createElement("div",{className:"avatar margin-bottom--md"},s&&n.a.createElement("a",{className:"avatar__photo-link",href:f,target:"_blank",rel:"noreferrer noopener"},n.a.createElement("img",{className:"avatar__photo",src:s,alt:p})),n.a.createElement("div",{className:"avatar__intro"},p&&n.a.createElement(n.a.Fragment,null,n.a.createElement("h4",{className:"avatar__name"},n.a.createElement("a",{href:f,target:"_blank",rel:"noreferrer noopener"},p)),n.a.createElement("small",{className:"avatar__subtitle"},N)))))),n.a.createElement("article",{className:"markdown"},n.a.createElement(l.a,{components:c.a},i)),n.a.createElement("div",{className:"row margin-vert--lg"},n.a.createElement("div",{className:"col"},h.length>0&&n.a.createElement(n.a.Fragment,null,n.a.createElement("strong",null,"Tags:"),h.map((function(e){var a=e.label,t=e.permalink;return n.a.createElement(m.a,{key:t,className:"margin-horiz--sm",to:t},a)})))),n.a.createElement("div",{className:"col text--right"},E&&n.a.createElement(m.a,{to:g.permalink},n.a.createElement("strong",null,"Read More")))))}}}]); \ No newline at end of file diff --git a/component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css b/component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css new file mode 100644 index 000000000..ef5d0032d --- /dev/null +++ b/component---theme-doc-legacy-item-031-769.1f1ce10374de019f5d3a.css @@ -0,0 +1 @@ +.docItemContainer_3Gws{margin:0 auto;max-width:45em}.tableOfContents_2wxO{display:inherit;max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto;position:-webkit-sticky;position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}@media only screen and (max-width:996px){.tableOfContents_2wxO{display:none}} \ No newline at end of file diff --git a/component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js b/component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js new file mode 100644 index 000000000..ce7430623 --- /dev/null +++ b/component---theme-doc-legacy-item-031-769.6e8a6ea08d218712d94a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{160:function(e,a,t){"use strict";t.r(a);var n=t(0),l=t.n(n),i=t(170),c=t(162);var r=function(e){var a=e.docsMetadata.docs,t=e.metadata;return l.a.createElement("nav",{className:"pagination-nav"},l.a.createElement("div",{className:"pagination-nav__item"},t.previous&&a[t.previous]&&l.a.createElement(c.a,{className:"pagination-nav__link",to:a[t.previous].permalink},l.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Previous"),l.a.createElement("h4",{className:"pagination-nav__link--label"},"ยซ ",t.previous_title))),l.a.createElement("div",{className:"pagination-nav__item pagination-nav__item--next"},t.next&&a[t.next]&&l.a.createElement(c.a,{className:"pagination-nav__link",to:a[t.next].permalink},l.a.createElement("h5",{className:"pagination-nav__link--sublabel"},"Next"),l.a.createElement("h4",{className:"pagination-nav__link--label"},t.next_title," ยป"))))},s=t(197),m=t.n(s);function o(e){var a=e.headings,t=e.isChild;return a.length?l.a.createElement("ul",{className:t?"":"contents contents__left-border"},a.map((function(e){return l.a.createElement("li",{key:e.id},l.a.createElement("a",{href:"#".concat(e.id),className:"contents__link"},e.value),l.a.createElement(o,{isChild:!0,headings:e.children}))}))):null}a.default=function(e){var a=e.metadata,t=e.content,n=e.docsMetadata;return l.a.createElement("div",null,l.a.createElement(i.a,null,a&&a.title&&l.a.createElement("title",null,a.title)),l.a.createElement("div",{className:"padding-vert--lg"},l.a.createElement("div",{className:"row"},l.a.createElement("div",{className:"col"},l.a.createElement("div",{className:m.a.docItemContainer},l.a.createElement("header",null,l.a.createElement("h1",{className:"margin-bottom--lg"},a.title)),l.a.createElement("article",null,l.a.createElement("div",{className:"markdown"},l.a.createElement(t,null))),l.a.createElement("div",{className:"margin-top--xl margin-bottom--lg"},l.a.createElement(r,{docsMetadata:n,metadata:a})))),t.rightToc&&l.a.createElement("div",{className:"col col--3"},l.a.createElement("div",{className:m.a.tableOfContents},l.a.createElement(o,{headings:t.rightToc}))))))}},197:function(e,a,t){e.exports={docItemContainer:"docItemContainer_3Gws",tableOfContents:"tableOfContents_2wxO"}}}]); \ No newline at end of file diff --git a/component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css b/component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css new file mode 100644 index 000000000..734e9f03d --- /dev/null +++ b/component---theme-doc-legacy-page-9-e-7-ca5.3c38a2f40a51efdd72a0.css @@ -0,0 +1 @@ +@media (min-width:997px){.sidebar_Qb2S{height:calc(100vh - var(--ifm-navbar-height));overflow-y:auto;padding:.5rem;position:-webkit-sticky;position:sticky;top:var(--ifm-navbar-height)}}.sidebar_Qb2S{border-right:1px solid var(--ifm-contents-border-color)}.sidebarMenuIcon_1uhT{vertical-align:middle}.sidebarMenuCloseIcon_3KMq{display:inline-block;height:24px;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:.9;width:24px} \ No newline at end of file diff --git a/component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js b/component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js new file mode 100644 index 000000000..edb0b9eba --- /dev/null +++ b/component---theme-doc-legacy-page-9-e-7-ca5.d31182005d6c21dd63ac.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{159:function(e,a,t){"use strict";t.r(a);var n=t(0),r=t.n(n),l=t(161),i=t(19),o=t(164),c=t(165),s=t.n(c),u=t(162),m=t(196),d=t.n(m);function b(e,a){return function(e){if(Array.isArray(e))return e}(e)||function(e,a){if(!(Symbol.iterator in Object(e)||"[object Arguments]"===Object.prototype.toString.call(e)))return;var t=[],n=!0,r=!1,l=void 0;try{for(var i,o=e[Symbol.iterator]();!(n=(i=o.next()).done)&&(t.push(i.value),!a||t.length!==a);n=!0);}catch(e){r=!0,l=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw l}}return t}(e,a)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}var f=24;var p=function(e){var a=b(Object(n.useState)(!1),2),t=a[0],l=a[1],i=e.docsMetadata,o=e.sidebar;if(!o)return null;var c=i.docsSidebars[o];if(!c)throw new Error("Can not find ".concat(o," config"));var m=function e(a){switch(a.type){case"category":return r.a.createElement("li",{className:"menu__list-item",key:a.label},r.a.createElement("a",{className:"menu__link",href:"#!"},a.label),r.a.createElement("ul",{className:"menu__list"},a.items.map(e)));case"link":return r.a.createElement("li",{className:"menu__list-item",key:a.label},r.a.createElement(u.a,{activeClassName:"menu__link--active",className:"menu__link",to:a.href,onClick:function(){l(!1)}},a.label));case"ref":default:return e(function(e){var a=e.id,t=i.docs[a];if(!t)throw new Error("Improper sidebars file, document with id '".concat(a,"' not found."));return{type:"link",label:t.sidebar_label||t.title,href:t.permalink}}(a))}};return r.a.createElement("div",{className:d.a.sidebar},r.a.createElement("div",{className:s()("menu","menu--responsive",{"menu--show":t})},r.a.createElement("button",{"aria-label":t?"Close Menu":"Open Menu",className:"button button--secondary button--sm menu__button",type:"button",onClick:function(){l(!t)}},t?r.a.createElement("span",{className:s()(d.a.sidebarMenuIcon,d.a.sidebarMenuCloseIcon)},"ร—"):r.a.createElement("svg",{className:d.a.sidebarMenuIcon,xmlns:"http://www.w3.org/2000/svg",height:f,width:f,viewBox:"0 0 32 32",role:"img",focusable:"false"},r.a.createElement("title",null,"Menu"),r.a.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))),r.a.createElement("ul",{className:"menu__list"},c.map((function(e){return m(e)})))))},h=t(169);a.default=function(e){var a=e.route,t=e.docsMetadata,n=e.location,c=t.permalinkToId,s=c[n.pathname]||c[n.pathname.replace(/\/$/,"")],u=t.docs[s]||{},m=u.sidebar,d=u.description,b=u.title,f=u.permalink,v=u.image;return r.a.createElement(o.a,{noFooter:!0,description:d,title:b,image:v,permalink:f},r.a.createElement("div",{className:"container container--fluid"},r.a.createElement("div",{className:"row"},r.a.createElement("div",{className:"col col--3"},r.a.createElement(p,{docsMetadata:t,sidebar:m})),r.a.createElement("main",{className:"col"},r.a.createElement(l.a,{components:h.a},Object(i.a)(a.routes,{docsMetadata:t}))))))}},196:function(e,a,t){e.exports={sidebar:"sidebar_Qb2S",sidebarMenuIcon:"sidebarMenuIcon_1uhT",sidebarMenuCloseIcon:"sidebarMenuCloseIcon_3KMq"}}}]); \ No newline at end of file diff --git a/content---blog-welcome-286-e55.76c213cf9ce75984ae91.js b/content---blog-welcome-286-e55.76c213cf9ce75984ae91.js new file mode 100644 index 000000000..876dedcd1 --- /dev/null +++ b/content---blog-welcome-286-e55.76c213cf9ce75984ae91.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return s}));var r=n(0),o=n.n(r),a=o.a.createContext({}),i=function(e){var t=o.a.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},u=function(e){var t=i(e.components);return o.a.createElement(a.Provider,{value:t},e.children)};var c="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,c=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),s=r,f=p[u+"."+s]||p[s]||l[s]||a;return n?o.a.createElement(f,Object.assign({},{ref:t},c,{components:n})):o.a.createElement(f,Object.assign({},{ref:t},c))}));function s(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=p;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[c]="string"==typeof e?e:r,i[1]=u;for(var s=2;s=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={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"]},u=[],c={rightToc:u},l="wrapper";function p(e){var t=e.components,n=a(e,["components"]);return Object(r.b)(l,o({},c,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("p",null,"This is the new blog site for NodeGui. This will be updated soon."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---blogaf-1-856.f79900332b57f969c09a.js b/content---blogaf-1-856.f79900332b57f969c09a.js new file mode 100644 index 000000000..d8c03c587 --- /dev/null +++ b/content---blogaf-1-856.f79900332b57f969c09a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return s}));var r=n(0),o=n.n(r),a=o.a.createContext({}),i=function(e){var t=o.a.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},u=function(e){var t=i(e.components);return o.a.createElement(a.Provider,{value:t},e.children)};var c="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,u=e.parentName,c=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),s=r,f=p[u+"."+s]||p[s]||l[s]||a;return n?o.a.createElement(f,Object.assign({},{ref:t},c,{components:n})):o.a.createElement(f,Object.assign({},{ref:t},c))}));function s(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=p;var u={};for(var l in t)hasOwnProperty.call(t,l)&&(u[l]=t[l]);u.originalType=e,u[c]="string"==typeof e?e:r,i[1]=u;for(var s=2;s=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={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"]},u=[],c={rightToc:u},l="wrapper";function p(e){var t=e.components,n=a(e,["components"]);return Object(r.b)(l,o({},c,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("p",null,"This is the new blog site for NodeGui. This will be updated soon."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js b/content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js new file mode 100644 index 000000000..fb7502f8f --- /dev/null +++ b/content---docs-api-component-4-ef-195.be17a07689811b2e54a5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return u}));var r=n(0),o=n.n(r),a=o.a.createContext({}),i=function(e){var t=o.a.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return o.a.createElement(a.Provider,{value:t},e.children)};var s="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,a=e.originalType,c=e.parentName,s=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),u=r,d=p[c+"."+u]||p[u]||l[u]||a;return n?o.a.createElement(d,Object.assign({},{ref:t},s,{components:n})):o.a.createElement(d,Object.assign({},{ref:t},s))}));function u(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var a=n.length,i=new Array(a);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:r,i[1]=c;for(var u=2;u=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={sidebar_label:"Component",title:"Component"},c=[{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[]}],s={rightToc:c},l="wrapper";function p(e){var t=e.components,n=a(e,["components"]);return Object(r.b)(l,o({},s,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("blockquote",null,Object(r.b)("p",{parentName:"blockquote"},"Abstract class that is root most base class for all widgets and layouts in the NodeGui World.")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"This class is used to add core properties to all widgets, layouts etc in NodeGui world. Currently it helps us maintain references to the native C++ instance of the widget or layout. It also helps in preventing gc of child elements of a layout or widget")),Object(r.b)("p",null,Object(r.b)("inlineCode",{parentName:"p"},"Component")," is an abstract class and hence no instances of the same should be created. It exists so that we can add core functionalities to all widgets and layouts easily. This is an internal class."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"Component is the base class for YogaWidget and NodeLayout which means all widgets and layouts inherit it aswell. Its the root base class in NodeGui world")),Object(r.b)("p",null,"To get a clearer picture you can take a look at the Component source code here: ",Object(r.b)("inlineCode",{parentName:"p"},"src/lib/core/Component/index.ts")),Object(r.b)("h2",{id:"static-methods"},"Static Methods"),Object(r.b)("p",null,"There are no public static methods for Component."),Object(r.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(r.b)("p",null,"There are no public instance properties for Component."),Object(r.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(r.b)("p",null,"There are no public instance methods for Component."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js b/content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js new file mode 100644 index 000000000..a268be15b --- /dev/null +++ b/content---docs-api-event-widgetac-6-11b.b87fa94e0cd874003d59.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return p}));var a=n(0),i=n.n(a),r=i.a.createContext({}),l=function(e){var t=i.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},o=function(e){var t=l(e.components);return i.a.createElement(r.Provider,{value:t},e.children)};var s="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,o=e.parentName,s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),d=l(n),p=a,b=d[o+"."+p]||d[p]||c[p]||r;return n?i.a.createElement(b,Object.assign({},{ref:t},s,{components:n})):i.a.createElement(b,Object.assign({},{ref:t},s))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,l=new Array(r);l[0]=d;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[s]="string"==typeof e?e:a,l[1]=o;for(var p=2;p=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l={sidebar_label:"EventWidget",title:"EventWidget"},o=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"widget.addEventListener(eventType, callback)",id:"widgetaddeventlistenereventtype-callback",children:[]},{value:"widget.removeEventListener(eventType, callback?)",id:"widgetremoveeventlistenereventtype-callback",children:[]}]}],s={rightToc:o},c="wrapper";function d(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(c,i({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Abstract class that adds event handling support to all widgets.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class implements an event emitter and merges it with Qt's event and signal system. It allows us to register and unregister event and signal listener at will from javascript")),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},"EventWidget")," is an abstract class and hence no instances of the same should be created. It exists so that we can add event handling functionalities to all widget's easily. This is an internal class."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"EventWidget is the base class for NodeWidget which means all widgets inherit it aswell. It inherits from another abstract class ",Object(a.b)("a",i({parentName:"strong"},{href:"/docs/api/YogaWidget"}),"YogaWidget"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-javascript"}),'const { QWidget, QWidgetEvents } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\n// addEventListener is a method from EventWidget\nview.addEventListener("MouseMove", () => {\n console.log("mouse moved");\n});\n\nor;\n\n// addEventListener is a method from EventWidget\nview.addEventListener(QWidgetEvents.MouseMove, () => {\n console.log("mouse moved");\n});\n')),Object(a.b)("p",null,"EventWidget will contain all methods and properties that are useful to handle events and signals of widgets in the NodeGui world."),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"EventWidget can access all the static methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/YogaWidget"}),"YogaWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"EventWidget can access all the instance properties defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/YogaWidget"}),"YogaWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"EventWidget can access all the instance methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/YogaWidget"}),"YogaWidget")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"widgetaddeventlistenereventtype-callback"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.addEventListener(eventType, callback)")),Object(a.b)("p",null,"Adds an event listener to the widget to listen to events that occur on a widget."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"eventType")," string - The event or signal you wish to listen to for the widget. Every widget exports its own enum of all possible events and signal types it can take. For example: ",Object(a.b)("inlineCode",{parentName:"p"},"QWidget")," exports ",Object(a.b)("inlineCode",{parentName:"p"},"QWidgetEvents"),", ",Object(a.b)("inlineCode",{parentName:"p"},"QPushButton")," exports ",Object(a.b)("inlineCode",{parentName:"p"},"QPushButtonEvents"),".")),Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"callback")," (payload?: NativeEvent | any) => void - A callback function to invoke when an event occurs. Usually you receive a nativeEvent or a string as argument."))),Object(a.b)("h3",{id:"widgetremoveeventlistenereventtype-callback"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.removeEventListener(eventType, callback?)")),Object(a.b)("p",null,"Removes the specified event listener from the widget."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"eventType")," string - The event or signal for which you wish to remove the listener.")),Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"callback")," Function (",Object(a.b)("em",{parentName:"p"},"Optional"),") - If specified the removeEventListener will remove the specified listener only, otherwise all eventlisteners of the eventType on the widget will be removed."))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js b/content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js new file mode 100644 index 000000000..f614dccfc --- /dev/null +++ b/content---docs-api-flex-layout-3-dc-a16.d5ab9ac7b90d9ed88203.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{161:function(e,t,l){"use strict";l.d(t,"a",(function(){return d})),l.d(t,"b",(function(){return u}));var i=l(0),n=l.n(i),a=n.a.createContext({}),o=function(e){var t=n.a.useContext(a),l=t;return e&&(l="function"==typeof e?e(t):Object.assign({},t,e)),l},d=function(e){var t=o(e.components);return n.a.createElement(a.Provider,{value:t},e.children)};var c="mdxType",r={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},b=Object(i.forwardRef)((function(e,t){var l=e.components,i=e.mdxType,a=e.originalType,d=e.parentName,c=function(e,t){var l={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(l[i]=e[i]);return l}(e,["components","mdxType","originalType","parentName"]),b=o(l),u=i,h=b[d+"."+u]||b[u]||r[u]||a;return l?n.a.createElement(h,Object.assign({},{ref:t},c,{components:l})):n.a.createElement(h,Object.assign({},{ref:t},c))}));function u(e,t){var l=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=l.length,o=new Array(a);o[0]=b;var d={};for(var r in t)hasOwnProperty.call(t,r)&&(d[r]=t[r]);d.originalType=e,d[c]="string"==typeof e?e:i,o[1]=d;for(var u=2;u=0||(n[l]=e[l]);return n}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,l)&&(n[l]=e[l])}return n}var o={sidebar_label:"FlexLayout",title:"FlexLayout"},d=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"layout.addWidget(childWidget, childFlexNode?)",id:"layoutaddwidgetchildwidget-childflexnode",children:[]},{value:"layout.insertChildBefore(childWidget, beforeChildWidget, childFlexNode?, beforeChildFlexNode?)",id:"layoutinsertchildbeforechildwidget-beforechildwidget-childflexnode-beforechildflexnode",children:[]},{value:"layout.removeWidget(childWidget, childFlexNode?)",id:"layoutremovewidgetchildwidget-childflexnode",children:[]},{value:"layout.setFlexNode(flexNode)",id:"layoutsetflexnodeflexnode",children:[]}]}],c={rightToc:d},r="wrapper";function b(e){var t=e.components,l=a(e,["components"]);return Object(i.b)(r,n({},c,l,{components:t,mdxType:"MDXLayout"}),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"Custom layout to help layout child widgets using flex layout.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"This class is a JS wrapper around custom Qt layout implemented using ",Object(i.b)("a",n({parentName:"strong"},{href:"https://github.com/facebook/yoga"}),"Yoga"))),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"FlexLayout")," can be used to layout all child NodeGui widgets using flex."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"FlexLayout inherits from ",Object(i.b)("a",n({parentName:"strong"},{href:"/docs/api/NodeLayout"}),"NodeLayout"))),Object(i.b)("h3",{id:"example"},"Example"),Object(i.b)("pre",null,Object(i.b)("code",n({parentName:"pre"},{className:"language-javascript"}),'const { FlexLayout, QWidget, QLabel } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nconst layout = new FlexLayout();\nview.setLayout(layout);\n\nconst label = new QLabel();\nlabel.setText("label1");\nconst label2 = new QLabel();\nlabel2.setText("label2");\n\nlayout.addWidget(label);\nlayout.addWidget(label2);\n')),Object(i.b)("h2",{id:"static-methods"},"Static Methods"),Object(i.b)("p",null,"FlexLayout can access all the static methods defined in ",Object(i.b)("a",n({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(i.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(i.b)("p",null,"FlexLayout can access all the instance properties defined in ",Object(i.b)("a",n({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(i.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(i.b)("p",null,"FlexLayout can access all the instance methods defined in ",Object(i.b)("a",n({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(i.b)("p",null,"Additionally it also has the following instance methods:"),Object(i.b)("h3",{id:"layoutaddwidgetchildwidget-childflexnode"},Object(i.b)("inlineCode",{parentName:"h3"},"layout.addWidget(childWidget, childFlexNode?)")),Object(i.b)("p",null,"Adds the childWidget to the layout. It calls the native method of custom FlexLayout."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - child widget that needs to be added to the layout."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childFlexNode")," flexNode ref (",Object(i.b)("em",{parentName:"li"},"Optional"),") - flexNode reference of the child widget. You can get this by calling ",Object(i.b)("inlineCode",{parentName:"li"},"childWidget.getFlexNode()"),".")),Object(i.b)("h3",{id:"layoutinsertchildbeforechildwidget-beforechildwidget-childflexnode-beforechildflexnode"},Object(i.b)("inlineCode",{parentName:"h3"},"layout.insertChildBefore(childWidget, beforeChildWidget, childFlexNode?, beforeChildFlexNode?)")),Object(i.b)("p",null,"Adds the childWidget before another already set childWidget in the layout. It calls the native method of custom FlexLayout."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - child widget that needs to be added to the layout."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"beforeChildWidget")," NodeWidget - the widget before which the ",Object(i.b)("inlineCode",{parentName:"li"},"childWidget")," needs to be added in the layout."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childFlexNode")," flexNode ref (",Object(i.b)("em",{parentName:"li"},"Optional"),") - flexNode reference of the child widget. You can get this by calling ",Object(i.b)("inlineCode",{parentName:"li"},"childWidget.getFlexNode()"),"."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"beforeChildFlexNode")," flexNode ref (",Object(i.b)("em",{parentName:"li"},"Optional"),") - flexNode reference of the before child widget. You can get this by calling ",Object(i.b)("inlineCode",{parentName:"li"},"beforeChildWidget.getFlexNode()"),".")),Object(i.b)("h3",{id:"layoutremovewidgetchildwidget-childflexnode"},Object(i.b)("inlineCode",{parentName:"h3"},"layout.removeWidget(childWidget, childFlexNode?)")),Object(i.b)("p",null,"Removes the childWidget from the layout. It calls the native method of custom FlexLayout."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - child widget that needs to be added to the layout."),Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"childFlexNode")," flexNode ref (",Object(i.b)("em",{parentName:"li"},"Optional"),") - flexNode reference of the child widget. You can get this by calling ",Object(i.b)("inlineCode",{parentName:"li"},"childWidget.getFlexNode()"),".")),Object(i.b)("h3",{id:"layoutsetflexnodeflexnode"},Object(i.b)("inlineCode",{parentName:"h3"},"layout.setFlexNode(flexNode)")),Object(i.b)("p",null,"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 ",Object(i.b)("inlineCode",{parentName:"p"},"widget.setLayout"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"flexNode")," flexNode ref - flexNode reference of the widget for which this layout is set. You can get this by calling ",Object(i.b)("inlineCode",{parentName:"li"},"widget.getFlexNode()"),".")))}b.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js b/content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js new file mode 100644 index 000000000..d81266aac --- /dev/null +++ b/content---docs-api-node-layoutd-28-11a.f1324fa8676e4bf64b44.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{161:function(e,t,a){"use strict";a.d(t,"a",(function(){return r})),a.d(t,"b",(function(){return u}));var n=a(0),o=a.n(n),i=o.a.createContext({}),l=function(e){var t=o.a.useContext(i),a=t;return e&&(a="function"==typeof e?e(t):Object.assign({},t,e)),a},r=function(e){var t=l(e.components);return o.a.createElement(i.Provider,{value:t},e.children)};var c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},s=Object(n.forwardRef)((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,r=e.parentName,c=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}(e,["components","mdxType","originalType","parentName"]),s=l(a),u=n,p=s[r+"."+u]||s[u]||d[u]||i;return a?o.a.createElement(p,Object.assign({},{ref:t},c,{components:a})):o.a.createElement(p,Object.assign({},{ref:t},c))}));function u(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,l=new Array(i);l[0]=s;var r={};for(var d in t)hasOwnProperty.call(t,d)&&(r[d]=t[d]);r.originalType=e,r[c]="string"==typeof e?e:n,l[1]=r;for(var u=2;u=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var l={sidebar_label:"NodeLayout",title:"NodeLayout"},r=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"layout.type",id:"layouttype",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"layout.addWidget(childWidget, ...args)",id:"layoutaddwidgetchildwidget-args",children:[]},{value:"layout.activate()",id:"layoutactivate",children:[]},{value:"layout.invalidate()",id:"layoutinvalidate",children:[]},{value:"layout.update()",id:"layoutupdate",children:[]}]}],c={rightToc:r},d="wrapper";function s(e){var t=e.components,a=i(e,["components"]);return Object(n.b)(d,o({},c,a,{components:t,mdxType:"MDXLayout"}),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"Abstract class to add functionalities common to all Layout.")),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"This class implements all methods, properties of Qt's ",Object(n.b)("a",o({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qlayout.html"}),"QLayout class")," so that it can be inherited by all layouts")),Object(n.b)("p",null,Object(n.b)("inlineCode",{parentName:"p"},"NodeLayout")," 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 layout's easily. Additionally it helps in typechecking process."),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"NodeLayout is the base class for all layouts. It inherits from another abstract class ",Object(n.b)("a",o({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(n.b)("h3",{id:"example"},"Example"),Object(n.b)("pre",null,Object(n.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const {\n NodeLayout,\n NodeWidget,\n FlexLayout,\n GridLayout,\n QPushButton,\n QWidget\n} = require("@nodegui/nodegui");\n\n// addChildToLayout can accept any layout since it expects NodeLayout\nconst addChildToLayout = (layout: NodeLayout, widget: NodeWidget) => {\n layout.addWidget(widget);\n};\n\naddChildToLayout(new FlexLayout(), new QPushButton());\naddChildToLayout(new GridLayout(), new QWidget());\n')),Object(n.b)("p",null,"NodeLayout will list all methods and properties that are common to all layouts in the NodeGui world."),Object(n.b)("h2",{id:"static-methods"},"Static Methods"),Object(n.b)("p",null,"NodeLayout can access all the static methods defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(n.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(n.b)("p",null,"NodeLayout can access all the instance properties defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(n.b)("p",null,"Additionally it also has the following instance properties:"),Object(n.b)("h3",{id:"layouttype"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.type")),Object(n.b)("p",null,"This will return the string ",Object(n.b)("inlineCode",{parentName:"p"},"layout")," for all layouts."),Object(n.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(n.b)("p",null,"NodeLayout can access all the instance methods defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(n.b)("p",null,"Additionally it also has the following instance methods:"),Object(n.b)("h3",{id:"layoutaddwidgetchildwidget-args"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.addWidget(childWidget, ...args)")),Object(n.b)("p",null,"This is an abstract method in NodeLayout class. All Layouts inheriting from NodeLayout should implement this method."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - Any widget in the NodeGui world."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"...args")," any[] - Additional params as required by the layout.")),Object(n.b)("h3",{id:"layoutactivate"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.activate()")),Object(n.b)("p",null,"Redoes the layout for parent widget of this layout if necessary. Returns true if the layout was redone."),Object(n.b)("h3",{id:"layoutinvalidate"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.invalidate()")),Object(n.b)("p",null,"Invalidates any cached information in this layout."),Object(n.b)("h3",{id:"layoutupdate"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.update()")),Object(n.b)("p",null,"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."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js b/content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js new file mode 100644 index 000000000..dfd986c97 --- /dev/null +++ b/content---docs-api-node-widget-080-a39.e39bcda58fa051ef8f58.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{161:function(e,t,i){"use strict";i.d(t,"a",(function(){return r})),i.d(t,"b",(function(){return c}));var n=i(0),a=i.n(n),d=a.a.createContext({}),l=function(e){var t=a.a.useContext(d),i=t;return e&&(i="function"==typeof e?e(t):Object.assign({},t,e)),i},r=function(e){var t=l(e.components);return a.a.createElement(d.Provider,{value:t},e.children)};var b="mdxType",o={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},s=Object(n.forwardRef)((function(e,t){var i=e.components,n=e.mdxType,d=e.originalType,r=e.parentName,b=function(e,t){var i={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(i[n]=e[n]);return i}(e,["components","mdxType","originalType","parentName"]),s=l(i),c=n,h=s[r+"."+c]||s[c]||o[c]||d;return i?a.a.createElement(h,Object.assign({},{ref:t},b,{components:i})):a.a.createElement(h,Object.assign({},{ref:t},b))}));function c(e,t){var i=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var d=i.length,l=new Array(d);l[0]=s;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[b]="string"==typeof e?e:n,l[1]=r;for(var c=2;c=0||(a[i]=e[i]);return a}(e,t);if(Object.getOwnPropertySymbols){var d=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}var l={sidebar_label:"NodeWidget",title:"NodeWidget"},r=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"widget.layout",id:"widgetlayout",children:[]},{value:"widget.type",id:"widgettype",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"widget.show()",id:"widgetshow",children:[]},{value:"widget.resize(width, height)",id:"widgetresizewidth-height",children:[]},{value:"widget.close()",id:"widgetclose",children:[]},{value:"widget.setLayout(layout)",id:"widgetsetlayoutlayout",children:[]},{value:"widget.setStyleSheet(styleSheet)",id:"widgetsetstylesheetstylesheet",children:[]},{value:"widget.setCursor(cursor)",id:"widgetsetcursorcursor",children:[]},{value:"widget.setWindowIcon(icon)",id:"widgetsetwindowiconicon",children:[]},{value:"widget.setWindowState(state)",id:"widgetsetwindowstatestate",children:[]},{value:"widget.setWindowTitle(title)",id:"widgetsetwindowtitletitle",children:[]},{value:"widget.styleSheet()",id:"widgetstylesheet",children:[]},{value:"widget.hide()",id:"widgethide",children:[]},{value:"widget.move(x, y)",id:"widgetmovex-y",children:[]},{value:"widget.setObjectName(objectName)",id:"widgetsetobjectnameobjectname",children:[]},{value:"widget.objectName()",id:"widgetobjectname",children:[]},{value:"widget.setMouseTracking(isMouseTracked)",id:"widgetsetmousetrackingismousetracked",children:[]},{value:"widget.setEnabled(enabled)",id:"widgetsetenabledenabled",children:[]},{value:"widget.setFixedSize(width, height)",id:"widgetsetfixedsizewidth-height",children:[]},{value:"widget.setGeometry(x, y, width, height)",id:"widgetsetgeometryx-y-width-height",children:[]},{value:"widget.setMaximumSize(width, height)",id:"widgetsetmaximumsizewidth-height",children:[]},{value:"widget.setMinimumSize(width, height)",id:"widgetsetminimumsizewidth-height",children:[]},{value:"widget.repaint()",id:"widgetrepaint",children:[]},{value:"widget.update()",id:"widgetupdate",children:[]},{value:"widget.pos()",id:"widgetpos",children:[]},{value:"widget.size()",id:"widgetsize",children:[]},{value:"widget.updateGeometry()",id:"widgetupdategeometry",children:[]},{value:"widget.setAttribute(attributeName, switchOn)",id:"widgetsetattributeattributename-switchon",children:[]},{value:"widget.testAttribute(attributeName)",id:"widgettestattributeattributename",children:[]}]}],b={rightToc:r},o="wrapper";function s(e){var t=e.components,i=d(e,["components"]);return Object(n.b)(o,a({},b,i,{components:t,mdxType:"MDXLayout"}),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"Abstract class to add functionalities common to all Widgets.")),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"This class implements all methods, properties of Qt's ",Object(n.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qwidget.html"}),"QWidget class")," so that it can be inherited by all widgets")),Object(n.b)("p",null,Object(n.b)("inlineCode",{parentName:"p"},"NodeWidget")," 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 widget's easily. Additionally it helps in typechecking process. If you wish to create a ",Object(n.b)("inlineCode",{parentName:"p"},"div")," like widget use ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/QWidget"}),"QWidget")," instead."),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"NodeWidget is the base class for all widgets. It inherits from another abstract class ",Object(n.b)("a",a({parentName:"strong"},{href:"/docs/api/EventWidget"}),"EventWidget"))),Object(n.b)("h3",{id:"example"},"Example"),Object(n.b)("pre",null,Object(n.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const {\n NodeWidget,\n QPushButton,\n QWidget,\n QRadioButton\n} = require("@nodegui/nodegui");\n\n// showWidget can accept any widget since it expects NodeWidget\nconst showWidget = (widget: NodeWidget) => {\n widget.show();\n};\n\nshowWidget(new QPushButton());\nshowWidget(new QWidget());\nshowWidget(new QRadioButton());\n')),Object(n.b)("p",null,"NodeWidget will list all methods and properties that are common to all widgets in the NodeGui world."),Object(n.b)("h2",{id:"static-methods"},"Static Methods"),Object(n.b)("p",null,"NodeWidget can access all the static methods defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/EventWidget"}),"EventWidget")),Object(n.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(n.b)("p",null,"NodeWidget can access all the instance properties defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/EventWidget"}),"EventWidget")),Object(n.b)("p",null,"Additionally it also has the following instance properties:"),Object(n.b)("h3",{id:"widgetlayout"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.layout")),Object(n.b)("p",null,"A ",Object(n.b)("inlineCode",{parentName:"p"},"NodeLayout")," representing current layout that is set on the widget."),Object(n.b)("h3",{id:"widgettype"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.type")),Object(n.b)("p",null,"This will return the string ",Object(n.b)("inlineCode",{parentName:"p"},"widget")," for all widgets."),Object(n.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(n.b)("p",null,"NodeWidget can access all the instance methods defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/EventWidget"}),"EventWidget")),Object(n.b)("p",null,"Additionally it also has the following instance methods:"),Object(n.b)("h3",{id:"widgetshow"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.show()")),Object(n.b)("p",null,"Shows the widget and its children. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#show"}),"QWidget: show"),"."),Object(n.b)("h3",{id:"widgetresizewidth-height"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.resize(width, height)")),Object(n.b)("p",null,"Resizes the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#resize-1"}),"QWidget: resize"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"width")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"height")," number - Pixels.")),Object(n.b)("h3",{id:"widgetclose"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.close()")),Object(n.b)("p",null,"Closes this widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#close"}),"QWidget: close"),".\nReturns true if the widget was closed; otherwise returns false."),Object(n.b)("h3",{id:"widgetsetlayoutlayout"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setLayout(layout)")),Object(n.b)("p",null,"Sets the layout manager for this widget to layout. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setLayout"}),"QWidget: setLayout"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"layout")," NodeLayout - Any layout that inherits from NodeLayout class.")),Object(n.b)("h3",{id:"widgetsetstylesheetstylesheet"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setStyleSheet(styleSheet)")),Object(n.b)("p",null,"Sets the property that holds the widget's style sheet. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop"}),"QWidget: styleSheet"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"styleSheet")," string - String which holds the widget's style sheet. Make sure you create this string using ",Object(n.b)("inlineCode",{parentName:"li"},"StyleSheet.create()"))),Object(n.b)("h3",{id:"widgetsetcursorcursor"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setCursor(cursor)")),Object(n.b)("p",null,"Sets the window mouse cursor. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#cursor-prop"}),"QWidget: setCursor"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"cursor")," CursorShape - Specifies current cursor for the window ",Object(n.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"CursorShape is an enum from Qt"))),Object(n.b)("h3",{id:"widgetsetwindowiconicon"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setWindowIcon(icon)")),Object(n.b)("p",null,"Sets the window icon. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#windowIcon-prop"}),"QWidget: setWindowIcon"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"icon")," QIcon - Specifies icon for the window.")),Object(n.b)("h3",{id:"widgetsetwindowstatestate"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setWindowState(state)")),Object(n.b)("p",null,"Sets the window state. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setWindowState"}),"QWidget: setWindowState"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"state")," WindowState - Specifies current state for the window ",Object(n.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"WindowState is an enum from Qt"))),Object(n.b)("h3",{id:"widgetsetwindowtitletitle"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setWindowTitle(title)")),Object(n.b)("p",null,"Sets the window title property. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#windowTitle-prop"}),"QWidget: setWindowTitle"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"title")," string - String which holds the windows title.")),Object(n.b)("h3",{id:"widgetstylesheet"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.styleSheet()")),Object(n.b)("p",null,"Gets the property that holds the widget's style sheet. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#styleSheet-prop"}),"QWidget: styleSheet"),"."),Object(n.b)("h3",{id:"widgethide"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.hide()")),Object(n.b)("p",null,"Hides the widget and its children. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#hide"}),"QWidget: hide"),"."),Object(n.b)("h3",{id:"widgetmovex-y"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.move(x, y)")),Object(n.b)("p",null,"Sets the screen position of the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#move-1"}),"QWidget: move"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"x")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"y")," number - Pixels.")),Object(n.b)("h3",{id:"widgetsetobjectnameobjectname"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setObjectName(objectName)")),Object(n.b)("p",null,"Sets the object name of the widget in Qt. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qobject.html#objectName-prop"}),"QObject: setObjectName"),". Object name can be analogous to ",Object(n.b)("inlineCode",{parentName:"p"},"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."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"objectName")," string - String which holds the widget's object name.")),Object(n.b)("h3",{id:"widgetobjectname"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.objectName()")),Object(n.b)("p",null,"Gets the property that holds the widget's object name. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qobject.html#objectName-prop"}),"QObject: setObjectName"),"."),Object(n.b)("h3",{id:"widgetsetmousetrackingismousetracked"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setMouseTracking(isMouseTracked)")),Object(n.b)("p",null,"Sets the property that tells whether mouseTracking is enabled for the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#mouseTracking-prop"}),"QWidget: mouseTracking"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"isMouseTracked")," boolean - Set it to true to enable mouse tracking.")),Object(n.b)("h3",{id:"widgetsetenabledenabled"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setEnabled(enabled)")),Object(n.b)("p",null,"Sets the property that tells whether the widget is enabled. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#enabled-prop"}),"QWidget: enabled"),". In general an enabled widget handles keyboard and mouse events; a disabled widget does not."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"enabled")," boolean - Set it to true to enable the widget.")),Object(n.b)("h3",{id:"widgetsetfixedsizewidth-height"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setFixedSize(width, height)")),Object(n.b)("p",null,"Sets both the minimum and maximum sizes of the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setFixedSize"}),"QWidget: setFixedSize"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"width")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"height")," number - Pixels.")),Object(n.b)("h3",{id:"widgetsetgeometryx-y-width-height"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setGeometry(x, y, width, height)")),Object(n.b)("p",null,"Sets the screen position as well as size of the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setGeometry-1"}),"QWidget: setGeometry"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"x")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"y")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"width")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"height")," number - Pixels.")),Object(n.b)("h3",{id:"widgetsetmaximumsizewidth-height"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setMaximumSize(width, height)")),Object(n.b)("p",null,"Sets the maximum size of the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setMaximumSize-1"}),"QWidget: setMaximumSize"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"width")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"height")," number - Pixels.")),Object(n.b)("h3",{id:"widgetsetminimumsizewidth-height"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setMinimumSize(width, height)")),Object(n.b)("p",null,"Sets the minimum size of the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setMinimumSize-1"}),"QWidget: setMinimumSize"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"width")," number - Pixels."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"height")," number - Pixels.")),Object(n.b)("h3",{id:"widgetrepaint"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.repaint()")),Object(n.b)("p",null,"Repaints the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#repaint"}),"QWidget: repaint"),"."),Object(n.b)("h3",{id:"widgetupdate"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.update()")),Object(n.b)("p",null,"Updates the widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#update"}),"QWidget: update"),"."),Object(n.b)("h3",{id:"widgetpos"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.pos()")),Object(n.b)("p",null,"returns the current widget position. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#pos-prop"}),"QWidget: pos"),". The returned size object contains x and y coordinates in pixels."),Object(n.b)("h3",{id:"widgetsize"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.size()")),Object(n.b)("p",null,"returns the current widget size. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#size-prop"}),"QWidget: size"),". The returned size object contains width and height in pixels."),Object(n.b)("h3",{id:"widgetupdategeometry"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.updateGeometry()")),Object(n.b)("p",null,"Notifies the layout system that this widget has changed and may need to change geometry."),Object(n.b)("h3",{id:"widgetsetattributeattributename-switchon"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.setAttribute(attributeName, switchOn)")),Object(n.b)("p",null,"Sets the attribute attribute on this widget if on is true; otherwise clears the attribute. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#setAttribute"}),"QWidget: setAttribute"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"attributeName")," WidgetAttribute - Enum from WidgetAttribute."),Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"switchOn")," - set it to true if you want to enable an attribute.")),Object(n.b)("h3",{id:"widgettestattributeattributename"},Object(n.b)("inlineCode",{parentName:"h3"},"widget.testAttribute(attributeName)")),Object(n.b)("p",null,"Returns true if attribute attribute is set on this widget; otherwise returns false. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#testAttribute"}),"QWidget: testAttribute"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"attributeName")," WidgetAttribute - Enum from WidgetAttribute.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js b/content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js new file mode 100644 index 000000000..48288bec1 --- /dev/null +++ b/content---docs-api-process-5-ec-b1e.81baa4658f7e9a835392.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{105:function(e,n,r){"use strict";r.r(n),r.d(n,"frontMatter",(function(){return a})),r.d(n,"rightToc",(function(){return s})),r.d(n,"default",(function(){return l}));r(0);var t=r(161);function o(){return(o=Object.assign||function(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var a={sidebar_label:"process",title:"process"},s=[{value:"Properties",id:"properties",children:[{value:"process.versions.qode Readonly",id:"processversionsqode-readonly",children:[]},{value:"process.versions.qt(compiled) Readonly",id:"processversionsqtcompiled-readonly",children:[]},{value:"process.versions.qt(runtime) Readonly",id:"processversionsqtruntime-readonly",children:[]}]}],c={rightToc:s},p="wrapper";function l(e){var n=e.components,r=i(e,["components"]);return Object(t.b)(p,o({},c,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("blockquote",null,Object(t.b)("p",{parentName:"blockquote"},"Extensions to process object.")),Object(t.b)("p",null,"Qode's ",Object(t.b)("inlineCode",{parentName:"p"},"process")," object is extended from the\n",Object(t.b)("a",o({parentName:"p"},{href:"https://nodejs.org/api/process.html"}),"Node.js ",Object(t.b)("inlineCode",{parentName:"a"},"process")," object"),".\nIt adds the following properties :"),Object(t.b)("h2",{id:"properties"},"Properties"),Object(t.b)("h3",{id:"processversionsqode-readonly"},Object(t.b)("inlineCode",{parentName:"h3"},"process.versions.qode")," ",Object(t.b)("em",{parentName:"h3"},"Readonly")),Object(t.b)("p",null,"A ",Object(t.b)("inlineCode",{parentName:"p"},"String")," representing Qode's version string. Qode is a lightly modified version of NodeJs that allows running Qt and NodeJs under a single process."),Object(t.b)("h3",{id:"processversionsqtcompiled-readonly"},Object(t.b)("inlineCode",{parentName:"h3"},"process.versions.qt(compiled)")," ",Object(t.b)("em",{parentName:"h3"},"Readonly")),Object(t.b)("p",null,"A ",Object(t.b)("inlineCode",{parentName:"p"},"String")," representing Qt version used when compile Qode binary. This can be useful to know which version of Qt is binary compatible with the version of Qode you are running. This is useful when running qode with a different version of Qt than what it was compiled with."),Object(t.b)("h3",{id:"processversionsqtruntime-readonly"},Object(t.b)("inlineCode",{parentName:"h3"},"process.versions.qt(runtime)")," ",Object(t.b)("em",{parentName:"h3"},"Readonly")),Object(t.b)("p",null,"A ",Object(t.b)("inlineCode",{parentName:"p"},"String")," representing Qt version of the Qt library loaded during runtime. This can be useful to know which version of Qt you are using at runtime as compared to the version of Qt used when Qode was compiled.This is possible since Qt is dynamically linked to Qode and you could replace the Qt dynamic libraries with any binary compatible library. Hence, this is useful when running qode with a different version of Qt than what it was compiled with."))}l.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return s})),r.d(n,"b",(function(){return d}));var t=r(0),o=r.n(t),i=o.a.createContext({}),a=function(e){var n=o.a.useContext(i),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},s=function(e){var n=a(e.components);return o.a.createElement(i.Provider,{value:n},e.children)};var c="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,i=e.originalType,s=e.parentName,c=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=a(r),d=t,u=l[s+"."+d]||l[d]||p[d]||i;return r?o.a.createElement(u,Object.assign({},{ref:n},c,{components:r})):o.a.createElement(u,Object.assign({},{ref:n},c))}));function d(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var i=r.length,a=new Array(i);a[0]=l;var s={};for(var p in n)hasOwnProperty.call(n,p)&&(s[p]=n[p]);s.originalType=e,s[c]="string"==typeof e?e:t,a[1]=s;for(var d=2;d=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var i={sidebar_label:"QAbstractScrollArea",title:"QAbstractScrollArea"},c=[{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"widget.setViewport(widget)",id:"widgetsetviewportwidget",children:[]},{value:"widget.viewport()",id:"widgetviewport",children:[]}]}],l={rightToc:c},s="wrapper";function d(e){var t=e.components,r=o(e,["components"]);return Object(a.b)(s,n({},l,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Abstract class to add functionalities common to all scrollarea based widgets.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class implements all methods, properties of Qt's ",Object(a.b)("a",n({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qabstractscrollarea.html"}),"QAbstractScrollArea class")," so that it can be inherited by all scroll based widgets")),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},"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 ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/QScrollArea"}),"QScrollArea")," instead."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QAbstractScrollArea is the base class for all widgets. It inherits from another abstract class ",Object(a.b)("a",n({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("p",null,"QAbstractScrollArea will list all methods and properties that are common to all scrollable widgets in the NodeGui world."),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QAbstractScrollArea can access all the static methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QAbstractScrollArea can access all the instance properties defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QAbstractScrollArea can access all the instance methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"widgetsetviewportwidget"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setViewport(widget)")),Object(a.b)("p",null,"Sets the viewport to be the given widget. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractscrollarea.html#setViewport"}),"QAbstractScrollArea: setViewport"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"widget")," NodeWidget.")),Object(a.b)("h3",{id:"widgetviewport"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.viewport()")),Object(a.b)("p",null,"Returns the viewport widget (NodeWidget). It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractscrollarea.html#viewport"}),"QAbstractScrollArea: viewport"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js b/content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js new file mode 100644 index 000000000..2a4656ede --- /dev/null +++ b/content---docs-api-q-abstract-slider-3-e-0-54d.b7e761ae58b36fe089f1.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{161:function(e,t,i){"use strict";i.d(t,"a",(function(){return s})),i.d(t,"b",(function(){return m}));var a=i(0),n=i.n(a),r=n.a.createContext({}),l=function(e){var t=n.a.useContext(r),i=t;return e&&(i="function"==typeof e?e(t):Object.assign({},t,e)),i},s=function(e){var t=l(e.components);return n.a.createElement(r.Provider,{value:t},e.children)};var c="mdxType",o={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var i=e.components,a=e.mdxType,r=e.originalType,s=e.parentName,c=function(e,t){var i={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(i[a]=e[a]);return i}(e,["components","mdxType","originalType","parentName"]),d=l(i),m=a,b=d[s+"."+m]||d[m]||o[m]||r;return i?n.a.createElement(b,Object.assign({},{ref:t},c,{components:i})):n.a.createElement(b,Object.assign({},{ref:t},c))}));function m(e,t){var i=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=i.length,l=new Array(r);l[0]=d;var s={};for(var o in t)hasOwnProperty.call(t,o)&&(s[o]=t[o]);s.originalType=e,s[c]="string"==typeof e?e:a,l[1]=s;for(var m=2;m=0||(n[i]=e[i]);return n}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,i)&&(n[i]=e[i])}return n}var l={sidebar_label:"QAbstractSlider",title:"QAbstractSlider"},s=[{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"widget.setSingleStep(step)",id:"widgetsetsinglestepstep",children:[]},{value:"widget.setMaximum(maximum)",id:"widgetsetmaximummaximum",children:[]},{value:"widget.setMinimum(minimum)",id:"widgetsetminimumminimum",children:[]},{value:"widget.setValue(value)",id:"widgetsetvaluevalue",children:[]},{value:"widget.setOrientation(orientation)",id:"widgetsetorientationorientation",children:[]},{value:"slider.maximum()",id:"slidermaximum",children:[]},{value:"slider.minimum()",id:"sliderminimum",children:[]},{value:"slider.value()",id:"slidervalue",children:[]}]}],c={rightToc:s},o="wrapper";function d(e){var t=e.components,i=r(e,["components"]);return Object(a.b)(o,n({},c,i,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Abstract class to add functionalities common to all slider based widgets.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class implements all methods, properties of Qt's ",Object(a.b)("a",n({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qabstractslider.html"}),"QAbstractSlider class")," so that it can be inherited by all slider based widgets")),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},"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 ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/QDial"}),"QDial")," instead."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QAbstractSlider is the base class for all widgets. It inherits from another abstract class ",Object(a.b)("a",n({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("p",null,"QAbstractSlider will list all methods and properties that are common to all slider widgets in the NodeGui world."),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QAbstractSlider can access all the static methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QAbstractSlider can access all the instance properties defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QAbstractSlider can access all the instance methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"widgetsetsinglestepstep"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setSingleStep(step)")),Object(a.b)("p",null,"Sets the step value for user arrow key slider interaction. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#singleStep-prop"}),"QAbstractSlider: setSingleStep"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"step")," number - Specified single step value.")),Object(a.b)("h3",{id:"widgetsetmaximummaximum"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setMaximum(maximum)")),Object(a.b)("p",null,"Sets the maximum value for slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop"}),"QAbstractSlider: setMaximum"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"maximum")," number - Specified maximum slider value.")),Object(a.b)("h3",{id:"widgetsetminimumminimum"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setMinimum(minimum)")),Object(a.b)("p",null,"Sets the minimum value for slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop"}),"QAbstractSlider: setMinimum"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"minimum")," number - Specified minimum slider value.")),Object(a.b)("h3",{id:"widgetsetvaluevalue"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setValue(value)")),Object(a.b)("p",null,"Sets the current value for slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#value-prop"}),"QAbstractSlider: setValue"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"value")," number - Specified current slider value.")),Object(a.b)("h3",{id:"widgetsetorientationorientation"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.setOrientation(orientation)")),Object(a.b)("p",null,"Sets the current orientation for slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#orientation-prop"}),"QAbstractSlider: setOrientation"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"orientation")," Orientation - Specifies visual orientation of the slider. ",Object(a.b)("a",n({parentName:"li"},{href:"/docs/api/QtEnums"}),"Orientation is an enum from Qt"))),Object(a.b)("h3",{id:"slidermaximum"},Object(a.b)("inlineCode",{parentName:"h3"},"slider.maximum()")),Object(a.b)("p",null,"Returns the maximum value (Number) of the slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#maximum-prop"}),"QAbstractSlider: maximum"),"."),Object(a.b)("h3",{id:"sliderminimum"},Object(a.b)("inlineCode",{parentName:"h3"},"slider.minimum()")),Object(a.b)("p",null,"Returns the minimum value (Number) of the slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#minimum-prop"}),"QAbstractSlider: minimum"),"."),Object(a.b)("h3",{id:"slidervalue"},Object(a.b)("inlineCode",{parentName:"h3"},"slider.value()")),Object(a.b)("p",null,"Returns the current value (Number) of the slider. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractslider.html#value-prop"}),"QAbstractSlider: value"),"."))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js b/content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js new file mode 100644 index 000000000..23cb3b033 --- /dev/null +++ b/content---docs-api-q-applicationd-3-e-0a3.039f8c83760f87eef546.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return b}));var a=n(0),i=n.n(a),p=i.a.createContext({}),c=function(e){var t=i.a.useContext(p),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},o=function(e){var t=c(e.components);return i.a.createElement(p.Provider,{value:t},e.children)};var r="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},s=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,p=e.originalType,o=e.parentName,r=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),s=c(n),b=a,d=s[o+"."+b]||s[b]||l[b]||p;return n?i.a.createElement(d,Object.assign({},{ref:t},r,{components:n})):i.a.createElement(d,Object.assign({},{ref:t},r))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var p=n.length,c=new Array(p);c[0]=s;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[r]="string"==typeof e?e:a,c[1]=o;for(var b=2;b=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var p=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var c={sidebar_label:"QApplication",title:"QApplication"},o=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[{value:"QApplication.instance()",id:"qapplicationinstance",children:[]},{value:"QApplication.clipboard()",id:"qapplicationclipboard",children:[]}]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"qApp.quit()",id:"qappquit",children:[]},{value:"qApp.exit(returnCode)",id:"qappexitreturncode",children:[]},{value:"qApp.processEvents()",id:"qappprocessevents",children:[]},{value:"qApp.exec()",id:"qappexec",children:[]}]}],r={rightToc:o},l="wrapper";function s(e){var t=e.components,n=p(e,["components"]);return Object(a.b)(l,i({},r,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"QApplication is the root object for the entire application. It manages app level settings.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",i({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qapplication.html"}),"QApplication class"))),Object(a.b)("p",null,"The QApplication class manages the GUI application's control flow and main settings. In NodeGui you will never create an instance of it manually. NodeGui's internal runtime ",Object(a.b)("inlineCode",{parentName:"p"},"Qode")," does it for you on app start. You can access the initialised QApplication though if needed."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QApplication inherits from ",Object(a.b)("a",i({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-js"}),'const { QApplication } = require("@nodegui/nodegui");\n\nconst qApp = QApplication.instance();\nqApp.quit();\n')),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QApplication can access all the static methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component"),". Additionally it also has the following static methods."),Object(a.b)("h3",{id:"qapplicationinstance"},Object(a.b)("inlineCode",{parentName:"h3"},"QApplication.instance()")),Object(a.b)("p",null,"Returns the already initialised QApplication instance. It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qcoreapplication.html#instance"}),"QApplication: instance"),"."),Object(a.b)("h3",{id:"qapplicationclipboard"},Object(a.b)("inlineCode",{parentName:"h3"},"QApplication.clipboard()")),Object(a.b)("p",null,"Returns the object for interacting with the clipboard. It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qguiapplication.html#clipboard"}),"QApplication: clipboard"),". See QClipboard."),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QApplication can access all the instance properties defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QApplication can access all the instance methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component"),". Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"qappquit"},Object(a.b)("inlineCode",{parentName:"h3"},"qApp.quit()")),Object(a.b)("p",null,"Quits the entire app. It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qcoreapplication.html#quit"}),"QApplication: quit"),"."),Object(a.b)("h3",{id:"qappexitreturncode"},Object(a.b)("inlineCode",{parentName:"h3"},"qApp.exit(returnCode)")),Object(a.b)("p",null,"Tells the application to exit with a return code. It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qcoreapplication.html#exit"}),"QApplication: exit"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"returnCode")," number - The exit code while quitting the app.")),Object(a.b)("h3",{id:"qappprocessevents"},Object(a.b)("inlineCode",{parentName:"h3"},"qApp.processEvents()")),Object(a.b)("p",null,"Processes all pending events for the calling thread . It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qcoreapplication.html#processEvents"}),"QApplication: processEvents"),"."),Object(a.b)("h3",{id:"qappexec"},Object(a.b)("inlineCode",{parentName:"h3"},"qApp.exec()")),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"We will never call this method in NodeGui, since Qode will execute this function for us. It exists for experiments only.")),Object(a.b)("p",null,"Enters the main event loop and waits until exit() is called. Returns the value that was passed to exit() (which is 0 if exit() is called via quit()). It calls the native method ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qcoreapplication.html#exec"}),"QApplication: exec"),"."),Object(a.b)("p",null,"Returns the exit code after app exits."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js b/content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js new file mode 100644 index 000000000..41b2e2a10 --- /dev/null +++ b/content---docs-api-q-check-boxd-9-b-c95.54af9594d82de2f1c65c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return d}));var c=n(0),a=n.n(c),r=a.a.createContext({}),o=function(e){var t=a.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},i=function(e){var t=o(e.components);return a.a.createElement(r.Provider,{value:t},e.children)};var l="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},h=Object(c.forwardRef)((function(e,t){var n=e.components,c=e.mdxType,r=e.originalType,i=e.parentName,l=function(e,t){var n={};for(var c in e)Object.prototype.hasOwnProperty.call(e,c)&&-1===t.indexOf(c)&&(n[c]=e[c]);return n}(e,["components","mdxType","originalType","parentName"]),h=o(n),d=c,p=h[i+"."+d]||h[d]||b[d]||r;return n?a.a.createElement(p,Object.assign({},{ref:t},l,{components:n})):a.a.createElement(p,Object.assign({},{ref:t},l))}));function d(e,t){var n=arguments,c=t&&t.mdxType;if("string"==typeof e||c){var r=n.length,o=new Array(r);o[0]=h;var i={};for(var b in t)hasOwnProperty.call(t,b)&&(i[b]=t[b]);i.originalType=e,i[l]="string"==typeof e?e:c,o[1]=i;for(var d=2;d=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(c=0;c=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var o={sidebar_label:"QCheckBox",title:"QCheckBox"},i=[{value:"Example",id:"example",children:[]},{value:"new QCheckBox(parent?)",id:"new-qcheckboxparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"checkbox.setText(text)",id:"checkboxsettexttext",children:[]},{value:"checkbox.isChecked()",id:"checkboxischecked",children:[]},{value:"checkbox.setChecked(check)",id:"checkboxsetcheckedcheck",children:[]}]}],l={rightToc:i},b="wrapper";function h(e){var t=e.components,n=r(e,["components"]);return Object(c.b)(b,a({},l,n,{components:t,mdxType:"MDXLayout"}),Object(c.b)("blockquote",null,Object(c.b)("p",{parentName:"blockquote"},"Create and control checkbox.")),Object(c.b)("p",null,Object(c.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(c.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qcheckbox.html"}),"QCheckBox class"))),Object(c.b)("p",null,"A ",Object(c.b)("inlineCode",{parentName:"p"},"QCheckBox")," provides ability to add and manipulate native checkbox widgets."),Object(c.b)("p",null,Object(c.b)("strong",{parentName:"p"},"QCheckBox inherits from ",Object(c.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(c.b)("h3",{id:"example"},"Example"),Object(c.b)("pre",null,Object(c.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QCheckBox } = require("@nodegui/nodegui");\n\nconst checkbox = new QCheckBox();\ncheckbox.setText("Hello");\n')),Object(c.b)("h3",{id:"new-qcheckboxparent"},Object(c.b)("inlineCode",{parentName:"h3"},"new QCheckBox(parent?)")),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},Object(c.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(c.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(c.b)("h2",{id:"static-methods"},"Static Methods"),Object(c.b)("p",null,"QCheckBox can access all the static methods defined in ",Object(c.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(c.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(c.b)("p",null,"QCheckBox can access all the instance properties defined in ",Object(c.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(c.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(c.b)("p",null,"QCheckBox can access all the instance methods defined in ",Object(c.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(c.b)("p",null,"Additionally it also has the following instance methods:"),Object(c.b)("h3",{id:"checkboxsettexttext"},Object(c.b)("inlineCode",{parentName:"h3"},"checkbox.setText(text)")),Object(c.b)("p",null,"Sets the given text to the checkbox."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},Object(c.b)("inlineCode",{parentName:"li"},"text")," string")),Object(c.b)("h3",{id:"checkboxischecked"},Object(c.b)("inlineCode",{parentName:"h3"},"checkbox.isChecked()")),Object(c.b)("p",null,"returns whether the checkbox is checked or not. It calls the native method ",Object(c.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop"}),"QAbstractButton: isChecked"),"."),Object(c.b)("h3",{id:"checkboxsetcheckedcheck"},Object(c.b)("inlineCode",{parentName:"h3"},"checkbox.setChecked(check)")),Object(c.b)("p",null,"This property holds whether the button is checked. It calls the native method ",Object(c.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qabstractbutton.html#checked-prop"}),"QAbstractButton: setChecked"),"."),Object(c.b)("ul",null,Object(c.b)("li",{parentName:"ul"},Object(c.b)("inlineCode",{parentName:"li"},"check")," boolean")))}h.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js b/content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js new file mode 100644 index 000000000..12741a79e --- /dev/null +++ b/content---docs-api-q-clipboard-69-d-2ef.2facddd2ce7d03c7d364.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return b}));var a=n(0),o=n.n(a),r=o.a.createContext({}),i=function(e){var t=o.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return o.a.createElement(r.Provider,{value:t},e.children)};var l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,l=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),d=i(n),b=a,s=d[c+"."+b]||d[b]||p[b]||r;return n?o.a.createElement(s,Object.assign({},{ref:t},l,{components:n})):o.a.createElement(s,Object.assign({},{ref:t},l))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[l]="string"==typeof e?e:a,i[1]=c;for(var b=2;b=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={sidebar_label:"QClipboard",title:"QClipboard"},c=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"clipboard.clear(mode)",id:"clipboardclearmode",children:[]},{value:"clipboard.setText(text, mode)",id:"clipboardsettexttext-mode",children:[]},{value:"clipboard.text(mode)",id:"clipboardtextmode",children:[]}]}],l={rightToc:c},p="wrapper";function d(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(p,o({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"The QClipboard class provides access to the window system clipboard.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",o({parentName:"strong"},{href:"https://doc.qt.io/qt-5/QClipboard.html"}),"QClipboard class"))),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QClipboard inherits from ",Object(a.b)("a",o({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const {\n QClipboard,\n QClipboardMode,\n QApplication\n} = require("@nodegui/nodegui");\n\nconst clipboard = QApplication.clipboard();\nconst text = clipboard.text(QClipboardMode.Clipboard);\n')),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QClipboard can access all the static methods defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QClipboard can access all the instance properties defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QClipboard can access all the instance methods defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component"),". Additionally it has:"),Object(a.b)("h3",{id:"clipboardclearmode"},Object(a.b)("inlineCode",{parentName:"h3"},"clipboard.clear(mode)")),Object(a.b)("p",null,"Clear the clipboard contents. It calls the native method ",Object(a.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qclipboard.html#clear"}),"QClipboard: clear"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"mode")," - This enum type is used to control which part of the system clipboard is used. See ",Object(a.b)("a",o({parentName:"li"},{href:"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum"}),"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum"))),Object(a.b)("h3",{id:"clipboardsettexttext-mode"},Object(a.b)("inlineCode",{parentName:"h3"},"clipboard.setText(text, mode)")),Object(a.b)("p",null,"Copies text into the clipboard as plain text. It calls the native method ",Object(a.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qclipboard.html#setText"}),"QClipboard: setText"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"text")," - The text you want to copy to clipboard.")),Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},Object(a.b)("inlineCode",{parentName:"p"},"mode")," - This enum type is used to control which part of the system clipboard is used. See ",Object(a.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum"}),"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum")))),Object(a.b)("h3",{id:"clipboardtextmode"},Object(a.b)("inlineCode",{parentName:"h3"},"clipboard.text(mode)")),Object(a.b)("p",null,"Returns the clipboard text as plain text, or an empty string if the clipboard does not contain any text. It calls the native method ",Object(a.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qclipboard.html#text"}),"QClipboard: text"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"mode")," - This enum type is used to control which part of the system clipboard is used. See ",Object(a.b)("a",o({parentName:"li"},{href:"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum"}),"https://doc.qt.io/qt-5/qclipboard.html#Mode-enum"))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js b/content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js new file mode 100644 index 000000000..957979f50 --- /dev/null +++ b/content---docs-api-q-cursor-362-d51.72e3b873d390560e1917.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{161:function(e,r,n){"use strict";n.d(r,"a",(function(){return u})),n.d(r,"b",(function(){return p}));var t=n(0),a=n.n(t),o=a.a.createContext({}),c=function(e){var r=a.a.useContext(o),n=r;return e&&(n="function"==typeof e?e(r):Object.assign({},r,e)),n},u=function(e){var r=c(e.components);return a.a.createElement(o.Provider,{value:r},e.children)};var i="mdxType",s={inlineCode:"code",wrapper:function(e){var r=e.children;return a.a.createElement(a.a.Fragment,{},r)}},l=Object(t.forwardRef)((function(e,r){var n=e.components,t=e.mdxType,o=e.originalType,u=e.parentName,i=function(e,r){var n={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===r.indexOf(t)&&(n[t]=e[t]);return n}(e,["components","mdxType","originalType","parentName"]),l=c(n),p=t,b=l[u+"."+p]||l[p]||s[p]||o;return n?a.a.createElement(b,Object.assign({},{ref:r},i,{components:n})):a.a.createElement(b,Object.assign({},{ref:r},i))}));function p(e,r){var n=arguments,t=r&&r.mdxType;if("string"==typeof e||t){var o=n.length,c=new Array(o);c[0]=l;var u={};for(var s in r)hasOwnProperty.call(r,s)&&(u[s]=r[s]);u.originalType=e,u[i]="string"==typeof e?e:t,c[1]=u;for(var p=2;p=0||(a[n]=e[n]);return a}(e,r);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var c={sidebar_label:"QCursor",title:"QCursor"},u=[{value:"Example",id:"example",children:[]},{value:"new QCursor(cursor)",id:"new-qcursorcursor",children:[]}],i={rightToc:u},s="wrapper";function l(e){var r=e.components,n=o(e,["components"]);return Object(t.b)(s,a({},i,n,{components:r,mdxType:"MDXLayout"}),Object(t.b)("blockquote",null,Object(t.b)("p",{parentName:"blockquote"},"The QCursor class provides scalable icons in different modes and states.")),Object(t.b)("p",null,Object(t.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(t.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qcursor.html"}),"QCursor class"))),Object(t.b)("h3",{id:"example"},"Example"),Object(t.b)("pre",null,Object(t.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QCursor } = require("@nodegui/nodegui");\n\nconst cursor = new QCursor();\n')),Object(t.b)("h3",{id:"new-qcursorcursor"},Object(t.b)("inlineCode",{parentName:"h3"},"new QCursor(cursor)")),Object(t.b)("ul",null,Object(t.b)("li",{parentName:"ul"},Object(t.b)("inlineCode",{parentName:"li"},"cursor")," CursorShape (",Object(t.b)("em",{parentName:"li"},"optional"),"). Defines shape for the cursor. ",Object(t.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"CursorShape is an enum from Qt"))))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js b/content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js new file mode 100644 index 000000000..8d057b1b5 --- /dev/null +++ b/content---docs-api-q-dial-80-b-99a.facd48a52570d2fd7472.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{161:function(e,t,a){"use strict";a.d(t,"a",(function(){return o})),a.d(t,"b",(function(){return d}));var n=a(0),i=a.n(n),l=i.a.createContext({}),r=function(e){var t=i.a.useContext(l),a=t;return e&&(a="function"==typeof e?e(t):Object.assign({},t,e)),a},o=function(e){var t=r(e.components);return i.a.createElement(l.Provider,{value:t},e.children)};var c="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},p=Object(n.forwardRef)((function(e,t){var a=e.components,n=e.mdxType,l=e.originalType,o=e.parentName,c=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}(e,["components","mdxType","originalType","parentName"]),p=r(a),d=n,b=p[o+"."+d]||p[d]||s[d]||l;return a?i.a.createElement(b,Object.assign({},{ref:t},c,{components:a})):i.a.createElement(b,Object.assign({},{ref:t},c))}));function d(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=a.length,r=new Array(l);r[0]=p;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[c]="string"==typeof e?e:n,r[1]=o;for(var d=2;d=0||(i[a]=e[a]);return i}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(i[a]=e[a])}return i}var r={sidebar_label:"QDial",title:"QDial"},o=[{value:"Example",id:"example",children:[]},{value:"new QDial(parent?)",id:"new-qdialparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"dial.setNotchesVisible(visible)",id:"dialsetnotchesvisiblevisible",children:[]},{value:"dial.setWrapping(on)",id:"dialsetwrappingon",children:[]},{value:"dial.setNotchTarget(target)",id:"dialsetnotchtargettarget",children:[]},{value:"dial.notchTarget()",id:"dialnotchtarget",children:[]},{value:"dial.notchesVisible()",id:"dialnotchesvisible",children:[]},{value:"dial.notchesVisible()",id:"dialnotchesvisible-1",children:[]},{value:"dial.wrapping()",id:"dialwrapping",children:[]}]}],c={rightToc:o},s="wrapper";function p(e){var t=e.components,a=l(e,["components"]);return Object(n.b)(s,i({},c,a,{components:t,mdxType:"MDXLayout"}),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"Create and control dial slider widgets.")),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(n.b)("a",i({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qdial.html"}),"QDial class"))),Object(n.b)("p",null,"A ",Object(n.b)("inlineCode",{parentName:"p"},"QDial")," provides ability to add and manipulate native dial slider widgets."),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"QDial inherits from ",Object(n.b)("a",i({parentName:"strong"},{href:"/docs/api/QAbstractSlider"}),"QAbstractSlider"))),Object(n.b)("h3",{id:"example"},"Example"),Object(n.b)("pre",null,Object(n.b)("code",i({parentName:"pre"},{className:"language-javascript"}),'const { QDial } = require("@nodegui/nodegui");\n\nconst dial = new QDial();\n')),Object(n.b)("h3",{id:"new-qdialparent"},Object(n.b)("inlineCode",{parentName:"h3"},"new QDial(parent?)")),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(n.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(n.b)("h2",{id:"static-methods"},"Static Methods"),Object(n.b)("p",null,"QDial can access all the static methods defined in ",Object(n.b)("a",i({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(n.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(n.b)("p",null,"QDial can access all the instance properties defined in ",Object(n.b)("a",i({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(n.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(n.b)("p",null,"QDial can access all the instance methods defined in ",Object(n.b)("a",i({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance methods:"),Object(n.b)("h3",{id:"dialsetnotchesvisiblevisible"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.setNotchesVisible(visible)")),Object(n.b)("p",null,"Sets the visibility of notches drawn around the dial. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#notchTarget-prop"}),"QDial: setNotchesVisible"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"visible")," boolean - Set the value as current notch visibility.")),Object(n.b)("h3",{id:"dialsetwrappingon"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.setWrapping(on)")),Object(n.b)("p",null,"Sets the ability to wrap arrow around the dial instead of limiting it to upper part of the dial. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#wrapping-prop"}),"QDial: setWrapping"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"on")," boolean - Set the value as current wrapping setting.")),Object(n.b)("h3",{id:"dialsetnotchtargettarget"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.setNotchTarget(target)")),Object(n.b)("p",null,"Sets the number of pixels between dial notches. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#notchTarget-prop"}),"QDial: setNotchTarget"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"target")," number - Specifies number of pixels between notches.")),Object(n.b)("h3",{id:"dialnotchtarget"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.notchTarget()")),Object(n.b)("p",null,"Returns the current number of pixels between dial notches. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#notchTarget-prop"}),"QDial: notchTarget"),"."),Object(n.b)("h3",{id:"dialnotchesvisible"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.notchesVisible()")),Object(n.b)("p",null,"Returns the visibility status (Boolean) of dial notches. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop"}),"QDial: notchesVisible"),"."),Object(n.b)("h3",{id:"dialnotchesvisible-1"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.notchesVisible()")),Object(n.b)("p",null,"Returns the visibility status (Boolean) of dial notches. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#notchesVisible-prop"}),"QDial: notchesVisible"),"."),Object(n.b)("h3",{id:"dialwrapping"},Object(n.b)("inlineCode",{parentName:"h3"},"dial.wrapping()")),Object(n.b)("p",null,"Returns the current wrapping (Boolean) state of the dial. It calls the native method ",Object(n.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qdial.html#wrapping-prop"}),"QDial: wrapping"),"."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js b/content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js new file mode 100644 index 000000000..c10be790e --- /dev/null +++ b/content---docs-api-q-grid-layouta-4-e-552.f8384f91986e144a1e06.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{161:function(e,t,a){"use strict";a.d(t,"a",(function(){return d})),a.d(t,"b",(function(){return s}));var n=a(0),o=a.n(n),r=o.a.createContext({}),i=function(e){var t=o.a.useContext(r),a=t;return e&&(a="function"==typeof e?e(t):Object.assign({},t,e)),a},d=function(e){var t=i(e.components);return o.a.createElement(r.Provider,{value:t},e.children)};var l="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},u=Object(n.forwardRef)((function(e,t){var a=e.components,n=e.mdxType,r=e.originalType,d=e.parentName,l=function(e,t){var a={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(a[n]=e[n]);return a}(e,["components","mdxType","originalType","parentName"]),u=i(a),s=n,p=u[d+"."+s]||u[s]||c[s]||r;return a?o.a.createElement(p,Object.assign({},{ref:t},l,{components:a})):o.a.createElement(p,Object.assign({},{ref:t},l))}));function s(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var r=a.length,i=new Array(r);i[0]=u;var d={};for(var c in t)hasOwnProperty.call(t,c)&&(d[c]=t[c]);d.originalType=e,d[l]="string"==typeof e?e:n,i[1]=d;for(var s=2;s=0||(o[a]=e[a]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(o[a]=e[a])}return o}var i={sidebar_label:"QGridLayout",title:"QGridLayout"},d=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"layout.addWidget(childWidget)",id:"layoutaddwidgetchildwidget",children:[]},{value:"layout.removeWidget(childWidget)",id:"layoutremovewidgetchildwidget",children:[]}]}],l={rightToc:d},c="wrapper";function u(e){var t=e.components,a=r(e,["components"]);return Object(n.b)(c,o({},l,a,{components:t,mdxType:"MDXLayout"}),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"The QGridLayout class lays out widgets in a grid.")),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(n.b)("a",o({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qgridlayout.html"}),"QGridLayout"))),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"QGridLayout inherits from ",Object(n.b)("a",o({parentName:"strong"},{href:"/docs/api/NodeLayout"}),"NodeLayout"))),Object(n.b)("h3",{id:"example"},"Example"),Object(n.b)("pre",null,Object(n.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const { QGridLayout, QWidget, QLabel } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nconst layout = new QGridLayout();\nview.setLayout(layout);\n\nconst label = new QLabel();\nlabel.setText("label1");\nconst label2 = new QLabel();\nlabel2.setText("label2");\n\nlayout.addWidget(label);\nlayout.addWidget(label2);\n')),Object(n.b)("h2",{id:"static-methods"},"Static Methods"),Object(n.b)("p",null,"QGridLayout can access all the static methods defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(n.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(n.b)("p",null,"QGridLayout can access all the instance properties defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(n.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(n.b)("p",null,"QGridLayout can access all the instance methods defined in ",Object(n.b)("a",o({parentName:"p"},{href:"/docs/api/NodeLayout"}),"NodeLayout")),Object(n.b)("p",null,"Additionally it also has the following instance methods:"),Object(n.b)("h3",{id:"layoutaddwidgetchildwidget"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.addWidget(childWidget)")),Object(n.b)("p",null,"Adds the childWidget to the layout. It calls the native method QGridLayout ",Object(n.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qwidget.html#show"}),"QGridLayout: addWidget"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - child widget that needs to be added to the layout.")),Object(n.b)("h3",{id:"layoutremovewidgetchildwidget"},Object(n.b)("inlineCode",{parentName:"h3"},"layout.removeWidget(childWidget)")),Object(n.b)("p",null,"Removes the childWidget from the layout. It calls the native method of custom QGridLayout. ",Object(n.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/qlayout.html#removeWidget"}),"QGridLayout: removeWidget"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"childWidget")," NodeWidget - child widget that needs to be added to the layout.")))}u.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js b/content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js new file mode 100644 index 000000000..11c07e4c5 --- /dev/null +++ b/content---docs-api-q-icone-5-f-b0d.016d00e28e5a87f3cf94.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return b}));var a=n(0),r=n.n(a),i=r.a.createContext({}),o=function(e){var t=r.a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=o(e.components);return r.a.createElement(i.Provider,{value:t},e.children)};var l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},s=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,c=e.parentName,l=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),s=o(n),b=a,m=s[c+"."+b]||s[b]||p[b]||i;return n?r.a.createElement(m,Object.assign({},{ref:t},l,{components:n})):r.a.createElement(m,Object.assign({},{ref:t},l))}));function b(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=s;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[l]="string"==typeof e?e:a,o[1]=c;for(var b=2;b=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o={sidebar_label:"QIcon",title:"QIcon"},c=[{value:"Example",id:"example",children:[]},{value:"new QIcon(imageUrl?)",id:"new-qiconimageurl",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"icon.pixmap(width, height, mode?, state?) (v0.1.10 & up)",id:"iconpixmapwidth-height-mode-state-v0110--up",children:[]}]}],l={rightToc:c},p="wrapper";function s(e){var t=e.components,n=i(e,["components"]);return Object(a.b)(p,r({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"The QIcon class provides scalable icons in different modes and states.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",r({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qicon.html"}),"QIcon class"))),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QIcon inherits from ",Object(a.b)("a",r({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",r({parentName:"pre"},{className:"language-javascript"}),'const { QIcon } = require("@nodegui/nodegui");\n\nconst imageUrl = "path/to/png";\nconst icon = new QIcon(imageUrl);\n')),Object(a.b)("h3",{id:"new-qiconimageurl"},Object(a.b)("inlineCode",{parentName:"h3"},"new QIcon(imageUrl?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"imageUrl")," string (",Object(a.b)("em",{parentName:"li"},"optional"),"). Absolute path of the image that needs to be loaded in the memory.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QIcon can access all the static methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QIcon can access all the instance properties defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QIcon can access all the instance methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/Component"}),"Component"),"\nAdditionally it also has the following instance methods:"),Object(a.b)("h3",{id:"iconpixmapwidth-height-mode-state-v0110--up"},Object(a.b)("inlineCode",{parentName:"h3"},"icon.pixmap(width, height, mode?, state?)")," (v0.1.10 & up)"),Object(a.b)("p",null,"Returns a pixmap with the requested size, mode, and state, generating one if necessary. The pixmap might be smaller than requested, but never larger.\n. It calls the native method ",Object(a.b)("a",r({parentName:"p"},{href:"https://doc.qt.io/qt-5/qicon.html#pixmap-3"}),"QIcon: pixmap"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"width"),": number,"),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"height"),": number"),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"mode?"),": QIconMode"),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"state?"),": QIconState")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js b/content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js new file mode 100644 index 000000000..41812ed95 --- /dev/null +++ b/content---docs-api-q-label-2-f-9-04b.9f8c2e203f083cedfdf8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return o})),n.d(t,"b",(function(){return s}));var a=n(0),l=n.n(a),r=l.a.createContext({}),i=function(e){var t=l.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},o=function(e){var t=i(e.components);return l.a.createElement(r.Provider,{value:t},e.children)};var b="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return l.a.createElement(l.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,o=e.parentName,b=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),s=a,d=p[o+"."+s]||p[s]||c[s]||r;return n?l.a.createElement(d,Object.assign({},{ref:t},b,{components:n})):l.a.createElement(d,Object.assign({},{ref:t},b))}));function s(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=p;var o={};for(var c in t)hasOwnProperty.call(t,c)&&(o[c]=t[c]);o.originalType=e,o[b]="string"==typeof e?e:a,i[1]=o;for(var s=2;s=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var i={sidebar_label:"QLabel",title:"QLabel"},o=[{value:"Example",id:"example",children:[]},{value:"new QLabel(parent?)",id:"new-qlabelparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"label.pixmap",id:"labelpixmap",children:[]},{value:"label.text",id:"labeltext",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"label.setText(text)",id:"labelsettexttext",children:[]},{value:"label.setWordWrap(on)",id:"labelsetwordwrapon",children:[]},{value:"label.setPixmap(pixMap)",id:"labelsetpixmappixmap",children:[]}]}],b={rightToc:o},c="wrapper";function p(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(c,l({},b,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Create and control text.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",l({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qlabel.html"}),"QLabel class"))),Object(a.b)("p",null,"A ",Object(a.b)("inlineCode",{parentName:"p"},"QLabel")," provides ability to add and manipulate text."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QLabel inherits from ",Object(a.b)("a",l({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",l({parentName:"pre"},{className:"language-javascript"}),'const { QLabel } = require("@nodegui/nodegui");\n\nconst label = new QLabel();\nlabel.setText("Hello");\n')),Object(a.b)("h3",{id:"new-qlabelparent"},Object(a.b)("inlineCode",{parentName:"h3"},"new QLabel(parent?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(a.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QLabel can access all the static methods defined in ",Object(a.b)("a",l({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QLabel can access all the instance properties defined in ",Object(a.b)("a",l({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance properties:"),Object(a.b)("h3",{id:"labelpixmap"},Object(a.b)("inlineCode",{parentName:"h3"},"label.pixmap")),Object(a.b)("p",null,"The pixmap currently set on this label."),Object(a.b)("h3",{id:"labeltext"},Object(a.b)("inlineCode",{parentName:"h3"},"label.text")),Object(a.b)("p",null,"the current text set on the label."),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QLabel can access all the instance methods defined in ",Object(a.b)("a",l({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"labelsettexttext"},Object(a.b)("inlineCode",{parentName:"h3"},"label.setText(text)")),Object(a.b)("p",null,"Sets the given text to the label."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"text")," string")),Object(a.b)("h3",{id:"labelsetwordwrapon"},Object(a.b)("inlineCode",{parentName:"h3"},"label.setWordWrap(on)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"on")," boolean - If true it sets wordwrap on the label")),Object(a.b)("h3",{id:"labelsetpixmappixmap"},Object(a.b)("inlineCode",{parentName:"h3"},"label.setPixmap(pixMap)")),Object(a.b)("p",null,"Images in the form of a pixmap can be set as the label content"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"pixMap")," ",Object(a.b)("a",l({parentName:"li"},{href:"/docs/api/QPixmap"}),"QPixmap")," - Allows to set image content in the form of a QPixmap on the label")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js b/content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js new file mode 100644 index 000000000..ea9d24088 --- /dev/null +++ b/content---docs-api-q-line-editea-0-53d.f606b13ced935ec46509.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return b}));var i=n(0),a=n.n(i),l=a.a.createContext({}),r=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},d=function(e){var t=r(e.components);return a.a.createElement(l.Provider,{value:t},e.children)};var c="mdxType",o={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},p=Object(i.forwardRef)((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,d=e.parentName,c=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(n[i]=e[i]);return n}(e,["components","mdxType","originalType","parentName"]),p=r(n),b=i,s=p[d+"."+b]||p[b]||o[b]||l;return n?a.a.createElement(s,Object.assign({},{ref:t},c,{components:n})):a.a.createElement(s,Object.assign({},{ref:t},c))}));function b(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,r=new Array(l);r[0]=p;var d={};for(var o in t)hasOwnProperty.call(t,o)&&(d[o]=t[o]);d.originalType=e,d[c]="string"==typeof e?e:i,r[1]=d;for(var b=2;b=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var r={sidebar_label:"QLineEdit",title:"QLineEdit"},d=[{value:"Example",id:"example",children:[]},{value:"new QLineEdit(parent?)",id:"new-qlineeditparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"lineEdit.placeholderText",id:"lineeditplaceholdertext",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"lineEdit.setText(text)",id:"lineeditsettexttext",children:[]},{value:"lineEdit.setPlaceholderText(text)",id:"lineeditsetplaceholdertexttext",children:[]},{value:"lineEdit.text()",id:"lineedittext",children:[]},{value:"lineEdit.setReadOnly(isReadOnly)",id:"lineeditsetreadonlyisreadonly",children:[]},{value:"lineEdit.clear()",id:"lineeditclear",children:[]}]}],c={rightToc:d},o="wrapper";function p(e){var t=e.components,n=l(e,["components"]);return Object(i.b)(o,a({},c,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"Create and control editable text field.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(i.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qlineedit.html"}),"QLineEdit class"))),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"QLineEdit")," provides ability to add and manipulate native editable text field widgets."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"QLineEdit inherits from ",Object(i.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(i.b)("h3",{id:"example"},"Example"),Object(i.b)("pre",null,Object(i.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QLineEdit } = require("@nodegui/nodegui");\n\nconst lineEdit = new QLineEdit();\n')),Object(i.b)("h3",{id:"new-qlineeditparent"},Object(i.b)("inlineCode",{parentName:"h3"},"new QLineEdit(parent?)")),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(i.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(i.b)("h2",{id:"static-methods"},"Static Methods"),Object(i.b)("p",null,"QLineEdit can access all the static methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(i.b)("p",null,"QLineEdit can access all the instance properties defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance properties:"),Object(i.b)("h3",{id:"lineeditplaceholdertext"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.placeholderText")),Object(i.b)("p",null,"The placeholder text set on the lineEdit."),Object(i.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(i.b)("p",null,"QLineEdit can access all the instance methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance methods:"),Object(i.b)("h3",{id:"lineeditsettexttext"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.setText(text)")),Object(i.b)("p",null,"Sets the given text to the lineEdit."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"text")," string")),Object(i.b)("h3",{id:"lineeditsetplaceholdertexttext"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.setPlaceholderText(text)")),Object(i.b)("p",null,"Sets the given text to the lineEdit's placeholder."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"text")," string")),Object(i.b)("h3",{id:"lineedittext"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.text()")),Object(i.b)("p",null,"Returns the currently set text from native lineEdit widget."),Object(i.b)("h3",{id:"lineeditsetreadonlyisreadonly"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.setReadOnly(isReadOnly)")),Object(i.b)("p",null,"Sets the lineEdit to be read only. lineEdit property holds whether the line edit is read only."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"isReadOnly")," boolean")),Object(i.b)("h3",{id:"lineeditclear"},Object(i.b)("inlineCode",{parentName:"h3"},"lineEdit.clear()")),Object(i.b)("p",null,"Clears the lineEdit."))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js b/content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js new file mode 100644 index 000000000..660e74832 --- /dev/null +++ b/content---docs-api-q-main-window-0-e-7-299.7a1bf20062e23ed6c510.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return p}));var i=n(0),a=n.n(i),r=a.a.createContext({}),o=function(e){var t=a.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=o(e.components);return a.a.createElement(r.Provider,{value:t},e.children)};var d="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},s=Object(i.forwardRef)((function(e,t){var n=e.components,i=e.mdxType,r=e.originalType,c=e.parentName,d=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(n[i]=e[i]);return n}(e,["components","mdxType","originalType","parentName"]),s=o(n),p=i,b=s[c+"."+p]||s[p]||l[p]||r;return n?a.a.createElement(b,Object.assign({},{ref:t},d,{components:n})):a.a.createElement(b,Object.assign({},{ref:t},d))}));function p(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var r=n.length,o=new Array(r);o[0]=s;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[d]="string"==typeof e?e:i,o[1]=c;for(var p=2;p=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var o={sidebar_label:"QMainWindow",title:"QMainWindow"},c=[{value:"Example",id:"example",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"win.layout",id:"winlayout",children:[]},{value:"win.centralWidget",id:"wincentralwidget",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"win.setCentralWidget(widget)",id:"winsetcentralwidgetwidget",children:[]}]}],d={rightToc:c},l="wrapper";function s(e){var t=e.components,n=r(e,["components"]);return Object(i.b)(l,a({},d,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"Create and control windows.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(i.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qmainwindow.html"}),"QMainWindow class"))),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"QMainWindow")," provides a main application window. Every widget in NodeGui should be a child/nested child of QMainWindow. QMainWindow in NodeGui is also responsible for FlexLayout calculations of its children."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"QMainWindow inherits from ",Object(i.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(i.b)("h3",{id:"example"},"Example"),Object(i.b)("pre",null,Object(i.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QMainWindow, QWidget } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n\nconst centralWidget = new QWidget();\nwin.setCentralWidget(centralWidget);\n\nwin.show();\n\nglobal.win = win; // prevent\'s gc of win\n')),Object(i.b)("p",null,"QMainWindow needs to have a central widget set before other widgets can be added as a children/nested children.\nOnce a central widget is set you can add children/layout to the central widget."),Object(i.b)("h2",{id:"static-methods"},"Static Methods"),Object(i.b)("p",null,"QMainWindow can access all the static methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(i.b)("p",null,"QMainWindow can access all the instance properties defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("p",null,"Additionally it also has the following instance properties:"),Object(i.b)("h3",{id:"winlayout"},Object(i.b)("inlineCode",{parentName:"h3"},"win.layout")),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"NodeLayout")," representing current layout that is set on the window. If a centralWidget is set then the layout of central widget is returned."),Object(i.b)("h3",{id:"wincentralwidget"},Object(i.b)("inlineCode",{parentName:"h3"},"win.centralWidget")),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"NodeWidget")," representing currently set central widget on the window."),Object(i.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(i.b)("p",null,"QMainWindow can access all the instance methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("p",null,"Additionally it also has the following instance methods:"),Object(i.b)("h3",{id:"winsetcentralwidgetwidget"},Object(i.b)("inlineCode",{parentName:"h3"},"win.setCentralWidget(widget)")),Object(i.b)("p",null,"Sets the given widget to be the main window's central widget."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"widget")," NodeWidget - Any widget that inherits from NodeWidget class.")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js b/content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js new file mode 100644 index 000000000..5049748a7 --- /dev/null +++ b/content---docs-api-q-pixmap-8-dd-cb2.343e5d75db3125ddfa81.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return s}));var a=n(0),i=n.n(a),r=i.a.createContext({}),o=function(e){var t=i.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},p=function(e){var t=o(e.components);return i.a.createElement(r.Provider,{value:t},e.children)};var l="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},m=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,p=e.parentName,l=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),m=o(n),s=a,b=m[p+"."+s]||m[s]||c[s]||r;return n?i.a.createElement(b,Object.assign({},{ref:t},l,{components:n})):i.a.createElement(b,Object.assign({},{ref:t},l))}));function s(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,o=new Array(r);o[0]=m;var p={};for(var c in t)hasOwnProperty.call(t,c)&&(p[c]=t[c]);p.originalType=e,p[l]="string"==typeof e?e:a,o[1]=p;for(var s=2;s=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var o={sidebar_label:"QPixmap",title:"QPixmap"},p=[{value:"Example",id:"example",children:[]},{value:"new QPixmap(imageUrl?)",id:"new-qpixmapimageurl",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"pixMap.load(imageUrl)",id:"pixmaploadimageurl",children:[]}]}],l={rightToc:p},c="wrapper";function m(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(c,i({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"The QPixmap class helps hold an image in the form of off-screen image representation.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",i({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qpixmap.html"}),"QPixmap class"))),Object(a.b)("p",null,"A ",Object(a.b)("inlineCode",{parentName:"p"},"QPixmap")," provides ability to store an image in the memory."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QPixmap inherits from ",Object(a.b)("a",i({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-javascript"}),'const { QPixmap } = require("@nodegui/nodegui");\n\nconst imageUrl = "path/to/png";\nconst pixMap = new QPixmap(imageUrl);\n')),Object(a.b)("h3",{id:"new-qpixmapimageurl"},Object(a.b)("inlineCode",{parentName:"h3"},"new QPixmap(imageUrl?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"imageUrl")," string (",Object(a.b)("em",{parentName:"li"},"optional"),"). Absolute path of the image that needs to be loaded in the memory.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QPixmap can access all the static methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QPixmap can access all the instance properties defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QPixmap can access all the instance methods defined in ",Object(a.b)("a",i({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"pixmaploadimageurl"},Object(a.b)("inlineCode",{parentName:"h3"},"pixMap.load(imageUrl)")),Object(a.b)("p",null,"loads an image from the url into memory as a Pixmap.\nreturns true if load was successful otherwise returns false."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"imageUrl")," string (",Object(a.b)("em",{parentName:"li"},"optional"),"). Absolute path of the image that needs to be loaded in the memory.")),Object(a.b)("h4",{id:"pixmapsavefilename-format"},Object(a.b)("inlineCode",{parentName:"h4"},"pixMap.save(fileName, format)")),Object(a.b)("p",null,"Saves the pixmap to the file with the given fileName using the specified image file format and quality factor. Returns ",Object(a.b)("inlineCode",{parentName:"p"},"true")," if successful; otherwise returns false."),Object(a.b)("p",null,"If format is 0, an image format will be chosen from fileName's suffix."),Object(a.b)("p",null,"See also ",Object(a.b)("a",i({parentName:"p"},{href:"https://doc.qt.io/qt-5/qpixmap.html#reading-and-writing-image-files"}),"Reading and Writing Image Files."),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"fileName")," string."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"format")," string. (",Object(a.b)("em",{parentName:"li"},"optional"),").")),Object(a.b)("h4",{id:"pixmapscaledwidth-height-aspectratiomode"},Object(a.b)("inlineCode",{parentName:"h4"},"pixMap.scaled(width, height, aspectRatioMode?)")),Object(a.b)("p",null,"Scales the pixmap to provided height and width with respect to aspectRatioMode.\nThis method doesnt mutate this pixmap and rather returns a new pixmap with new height and width."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"width")," number. Width in pixels for new pixmap."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"height")," number. Height in pixels for new pixmap."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"aspectRatioMode")," AspectRatioMode (",Object(a.b)("em",{parentName:"li"},"optional"),"). Specifies how scaling should happen. ",Object(a.b)("a",i({parentName:"li"},{href:"/docs/api/QtEnums"}),"AspectRatio is an enum from Qt"))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js b/content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js new file mode 100644 index 000000000..8479b36b7 --- /dev/null +++ b/content---docs-api-q-plain-text-edit-7-c-8-081.f6a618e75ea9b4f15f6b.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return b}));var i=n(0),a=n.n(i),l=a.a.createContext({}),d=function(e){var t=a.a.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},r=function(e){var t=d(e.components);return a.a.createElement(l.Provider,{value:t},e.children)};var p="mdxType",o={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},c=Object(i.forwardRef)((function(e,t){var n=e.components,i=e.mdxType,l=e.originalType,r=e.parentName,p=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(n[i]=e[i]);return n}(e,["components","mdxType","originalType","parentName"]),c=d(n),b=i,s=c[r+"."+b]||c[b]||o[b]||l;return n?a.a.createElement(s,Object.assign({},{ref:t},p,{components:n})):a.a.createElement(s,Object.assign({},{ref:t},p))}));function b(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var l=n.length,d=new Array(l);d[0]=c;var r={};for(var o in t)hasOwnProperty.call(t,o)&&(r[o]=t[o]);r.originalType=e,r[p]="string"==typeof e?e:i,d[1]=r;for(var b=2;b=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var d={sidebar_label:"QPlainTextEdit",title:"QPlainTextEdit"},r=[{value:"Example",id:"example",children:[]},{value:"new QPlainTextEdit(parent?)",id:"new-qplaintexteditparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[{value:"plainTextEdit.placeholderText",id:"plaintexteditplaceholdertext",children:[]}]},{value:"Instance Methods",id:"instance-methods",children:[{value:"plainTextEdit.setPlainText(text)",id:"plaintexteditsetplaintexttext",children:[]},{value:"plainTextEdit.setPlaceholderText(text)",id:"plaintexteditsetplaceholdertexttext",children:[]},{value:"plainTextEdit.toPlainText()",id:"plaintextedittoplaintext",children:[]},{value:"plainTextEdit.setReadOnly(isReadOnly)",id:"plaintexteditsetreadonlyisreadonly",children:[]},{value:"plainTextEdit.clear()",id:"plaintexteditclear",children:[]},{value:"plainTextEdit.setWordWrapMode(mode)",id:"plaintexteditsetwordwrapmodemode",children:[]},{value:"plainTextEdit.wordWrapMode()",id:"plaintexteditwordwrapmode",children:[]},{value:"plainTextEdit.setLineWrapMode(mode)",id:"plaintexteditsetlinewrapmodemode",children:[]},{value:"plainTextEdit.lineWrapMode()",id:"plaintexteditlinewrapmode",children:[]}]}],p={rightToc:r},o="wrapper";function c(e){var t=e.components,n=l(e,["components"]);return Object(i.b)(o,a({},p,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"Used to edit and display plain text.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(i.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html"}),"QPlainTextEdit class"))),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"QPlainTextEdit")," provides ability to add and manipulate native editable text field widgets."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"QPlainTextEdit inherits from ",Object(i.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(i.b)("h3",{id:"example"},"Example"),Object(i.b)("pre",null,Object(i.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QPlainTextEdit } = require("@nodegui/nodegui");\n\nconst plainTextEdit = new QPlainTextEdit();\n')),Object(i.b)("h3",{id:"new-qplaintexteditparent"},Object(i.b)("inlineCode",{parentName:"h3"},"new QPlainTextEdit(parent?)")),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(i.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(i.b)("h2",{id:"static-methods"},"Static Methods"),Object(i.b)("p",null,"QPlainTextEdit can access all the static methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(i.b)("p",null,"QPlainTextEdit can access all the instance properties defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),"."),Object(i.b)("h3",{id:"plaintexteditplaceholdertext"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.placeholderText")),Object(i.b)("p",null,"The placeholder text set on the plainTextEdit."),Object(i.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(i.b)("p",null,"QPlainTextEdit can access all the instance methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),"."),Object(i.b)("h3",{id:"plaintexteditsetplaintexttext"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.setPlainText(text)")),Object(i.b)("p",null,"Sets the given text to the plainTextEdit. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#setPlainText"}),"QPlainTextEdit: setPlainText"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"text")," string")),Object(i.b)("h3",{id:"plaintexteditsetplaceholdertexttext"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.setPlaceholderText(text)")),Object(i.b)("p",null,"Sets the given text to the plainTextEdit's placeholder."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"text")," string")),Object(i.b)("h3",{id:"plaintextedittoplaintext"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.toPlainText()")),Object(i.b)("p",null,"Returns the text of the text edit as plain text. ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#toPlainText"}),"QPlainTextEdit: toPlainText"),"."),Object(i.b)("h3",{id:"plaintexteditsetreadonlyisreadonly"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.setReadOnly(isReadOnly)")),Object(i.b)("p",null,"Sets the plainTextEdit to be read only. ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#readOnly-prop"}),"QPlainTextEdit: isReadOnly"),"."),Object(i.b)("h3",{id:"plaintexteditclear"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.clear()")),Object(i.b)("p",null,"Deletes all the text in the text edit.",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#clear"}),"QPlainTextEdit: clear"),"."),Object(i.b)("h3",{id:"plaintexteditsetwordwrapmodemode"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.setWordWrapMode(mode)")),Object(i.b)("p",null,"This property holds the mode QPlainTextEdit will use when wrapping text by words.",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop"}),"QPlainTextEdit: setWordWrapMode"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"mode: QTextOptionWrapMode")),Object(i.b)("h3",{id:"plaintexteditwordwrapmode"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.wordWrapMode()")),Object(i.b)("p",null,"returns word wrap mode. ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#wordWrapMode-prop"}),"QPlainTextEdit: wordWrapMode"),"."),Object(i.b)("h3",{id:"plaintexteditsetlinewrapmodemode"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.setLineWrapMode(mode)")),Object(i.b)("p",null,"This property holds the line wrap mode. ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop"}),"QPlainTextEdit: setLineWrapMode"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},"mode: LineWrapMode")),Object(i.b)("h3",{id:"plaintexteditlinewrapmode"},Object(i.b)("inlineCode",{parentName:"h3"},"plainTextEdit.lineWrapMode()")),Object(i.b)("p",null,"returns line wrap mode. ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qplaintextedit.html#lineWrapMode-prop"}),"QPlainTextEdit: setLineWrapMode"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js b/content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js new file mode 100644 index 000000000..a5b7b4a6a --- /dev/null +++ b/content---docs-api-q-progress-barc-46-afe.2a5c874c4e33ecb7a2b8.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{161:function(e,t,r){"use strict";r.d(t,"a",(function(){return o})),r.d(t,"b",(function(){return b}));var a=r(0),n=r.n(a),i=n.a.createContext({}),s=function(e){var t=n.a.useContext(i),r=t;return e&&(r="function"==typeof e?e(t):Object.assign({},t,e)),r},o=function(e){var t=s(e.components);return n.a.createElement(i.Provider,{value:t},e.children)};var l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.a.createElement(n.a.Fragment,{},t)}},c=Object(a.forwardRef)((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,o=e.parentName,l=function(e,t){var r={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(r[a]=e[a]);return r}(e,["components","mdxType","originalType","parentName"]),c=s(r),b=a,u=c[o+"."+b]||c[b]||p[b]||i;return r?n.a.createElement(u,Object.assign({},{ref:t},l,{components:r})):n.a.createElement(u,Object.assign({},{ref:t},l))}));function b(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,s=new Array(i);s[0]=c;var o={};for(var p in t)hasOwnProperty.call(t,p)&&(o[p]=t[p]);o.originalType=e,o[l]="string"==typeof e?e:a,s[1]=o;for(var b=2;b=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s={sidebar_label:"QProgressBar",title:"QProgressBar"},o=[{value:"Example",id:"example",children:[]},{value:"new QProgressBar(parent?)",id:"new-qprogressbarparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"progressBar.setValue(value)",id:"progressbarsetvaluevalue",children:[]},{value:"progressBar.setMaximum(max)",id:"progressbarsetmaximummax",children:[]},{value:"progressBar.setMinimum(min)",id:"progressbarsetminimummin",children:[]},{value:"progressBar.setOrientation(orientation)",id:"progressbarsetorientationorientation",children:[]},{value:"progressBar.value()",id:"progressbarvalue",children:[]}]}],l={rightToc:o},p="wrapper";function c(e){var t=e.components,r=i(e,["components"]);return Object(a.b)(p,n({},l,r,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Create and control progress bar widgets.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",n({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qprogressbar.html"}),"QProgressBar class"))),Object(a.b)("p",null,"A ",Object(a.b)("inlineCode",{parentName:"p"},"QProgressBar")," provides ability to add and manipulate native progress bar widgets."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QProgressBar inherits from ",Object(a.b)("a",n({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",n({parentName:"pre"},{className:"language-javascript"}),'const { QProgressBar } = require("@nodegui/nodegui");\n\nconst progressBar = new QProgressBar();\n')),Object(a.b)("h3",{id:"new-qprogressbarparent"},Object(a.b)("inlineCode",{parentName:"h3"},"new QProgressBar(parent?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(a.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QProgressBar can access all the static methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QProgressBar can access all the instance properties defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QProgressBar can access all the instance methods defined in ",Object(a.b)("a",n({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"progressbarsetvaluevalue"},Object(a.b)("inlineCode",{parentName:"h3"},"progressBar.setValue(value)")),Object(a.b)("p",null,"Sets the current value of the progressBar. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#value-prop"}),"QProgressBar: setValue"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"value")," number - Set the value as current value")),Object(a.b)("h3",{id:"progressbarsetmaximummax"},Object(a.b)("inlineCode",{parentName:"h3"},"progressBar.setMaximum(max)")),Object(a.b)("p",null,"Sets the max value of the progressBar. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#maximum-prop"}),"QProgressBar: setMaximum"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"max")," number - Set the value as max value of the progress bar.")),Object(a.b)("h3",{id:"progressbarsetminimummin"},Object(a.b)("inlineCode",{parentName:"h3"},"progressBar.setMinimum(min)")),Object(a.b)("p",null,"Sets the min value of the progressBar. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#minimum-prop"}),"QProgressBar: setMinimum"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"min")," number - Set the value as min value of the progress bar.")),Object(a.b)("h3",{id:"progressbarsetorientationorientation"},Object(a.b)("inlineCode",{parentName:"h3"},"progressBar.setOrientation(orientation)")),Object(a.b)("p",null,"Sets the orientation of the progressBar. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#orientation-prop"}),"QProgressBar: setOrientation"),"."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"orientation")," Orientation - Specifies visual orientation of the progress bar. ",Object(a.b)("a",n({parentName:"li"},{href:"/docs/api/QtEnums"}),"Orientation is an enum from Qt"))),Object(a.b)("h3",{id:"progressbarvalue"},Object(a.b)("inlineCode",{parentName:"h3"},"progressBar.value()")),Object(a.b)("p",null,"Returns the current value (Number) of the progressBar. It calls the native method ",Object(a.b)("a",n({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#value-prop"}),"QProgressBar: value"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js b/content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js new file mode 100644 index 000000000..4edb83fd3 --- /dev/null +++ b/content---docs-api-q-push-button-06-c-73e.9e1e6d8a0e7c17941efd.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return u}));var a=n(0),r=n.n(a),o=r.a.createContext({}),i=function(e){var t=r.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return r.a.createElement(o.Provider,{value:t},e.children)};var l="mdxType",b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},s=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,l=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),s=i(n),u=a,p=s[c+"."+u]||s[u]||b[u]||o;return n?r.a.createElement(p,Object.assign({},{ref:t},l,{components:n})):r.a.createElement(p,Object.assign({},{ref:t},l))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=s;var c={};for(var b in t)hasOwnProperty.call(t,b)&&(c[b]=t[b]);c.originalType=e,c[l]="string"==typeof e?e:a,i[1]=c;for(var u=2;u=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i={sidebar_label:"QPushButton",title:"QPushButton"},c=[{value:"Example",id:"example",children:[]},{value:"new QPushButton(parent?)",id:"new-qpushbuttonparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"button.setText(text)",id:"buttonsettexttext",children:[]},{value:"button.setFlat(isFlat)",id:"buttonsetflatisflat",children:[]},{value:"button.setIcon(icon)",id:"buttonseticonicon",children:[]}]}],l={rightToc:c},b="wrapper";function s(e){var t=e.components,n=o(e,["components"]);return Object(a.b)(b,r({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Create and control buttons.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",r({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qpushbutton.html"}),"QPushButton class"))),Object(a.b)("p",null,"A ",Object(a.b)("inlineCode",{parentName:"p"},"QPushButton")," provides ability to add and manipulate native button widgets."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QPushButton inherits from ",Object(a.b)("a",r({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",r({parentName:"pre"},{className:"language-javascript"}),'const { QPushButton } = require("@nodegui/nodegui");\n\nconst button = new QPushButton();\nbutton.setText("Hello");\n')),Object(a.b)("h3",{id:"new-qpushbuttonparent"},Object(a.b)("inlineCode",{parentName:"h3"},"new QPushButton(parent?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(a.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QPushButton can access all the static methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QPushButton can access all the instance properties defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QPushButton can access all the instance methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"buttonsettexttext"},Object(a.b)("inlineCode",{parentName:"h3"},"button.setText(text)")),Object(a.b)("p",null,"Sets the given text to the button."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"text")," string")),Object(a.b)("h3",{id:"buttonsetflatisflat"},Object(a.b)("inlineCode",{parentName:"h3"},"button.setFlat(isFlat)")),Object(a.b)("p",null,"Sets whether the button border is raised."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"isFlat")," boolean")),Object(a.b)("h3",{id:"buttonseticonicon"},Object(a.b)("inlineCode",{parentName:"h3"},"button.setIcon(icon)")),Object(a.b)("p",null,"Sets an icon in the button."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"icon")," QIcon")))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js b/content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js new file mode 100644 index 000000000..ca2057ff6 --- /dev/null +++ b/content---docs-api-q-radio-buttone-54-746.0eceb96f43e589853010.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s}));var a=n(0),r=n.n(a),o=r.a.createContext({}),i=function(e){var t=r.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return r.a.createElement(o.Provider,{value:t},e.children)};var d="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},p=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,c=e.parentName,d=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),s=a,u=p[c+"."+s]||p[s]||l[s]||o;return n?r.a.createElement(u,Object.assign({},{ref:t},d,{components:n})):r.a.createElement(u,Object.assign({},{ref:t},d))}));function s(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[d]="string"==typeof e?e:a,i[1]=c;for(var s=2;s=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var i={sidebar_label:"QRadioButton",title:"QRadioButton"},c=[{value:"Example",id:"example",children:[]},{value:"new QRadioButton(parent?)",id:"new-qradiobuttonparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"radioButton.setText(text)",id:"radiobuttonsettexttext",children:[]}]}],d={rightToc:c},l="wrapper";function p(e){var t=e.components,n=o(e,["components"]);return Object(a.b)(l,r({},d,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Create and control radio button.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(a.b)("a",r({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qradiobutton.html"}),"QRadioButton class"))),Object(a.b)("p",null,"A ",Object(a.b)("inlineCode",{parentName:"p"},"QRadioButton")," provides ability to add and manipulate native radio button widgets."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"QRadioButton inherits from ",Object(a.b)("a",r({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(a.b)("h3",{id:"example"},"Example"),Object(a.b)("pre",null,Object(a.b)("code",r({parentName:"pre"},{className:"language-javascript"}),'const { QRadioButton } = require("@nodegui/nodegui");\n\nconst radioButton = new QRadioButton();\nradioButton.setText("Hello");\n')),Object(a.b)("h3",{id:"new-qradiobuttonparent"},Object(a.b)("inlineCode",{parentName:"h3"},"new QRadioButton(parent?)")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(a.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"QRadioButton can access all the static methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"QRadioButton can access all the instance properties defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"QRadioButton can access all the instance methods defined in ",Object(a.b)("a",r({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"radiobuttonsettexttext"},Object(a.b)("inlineCode",{parentName:"h3"},"radioButton.setText(text)")),Object(a.b)("p",null,"Sets the given text to the radioButton."),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"text")," string")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js b/content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js new file mode 100644 index 000000000..77e64d743 --- /dev/null +++ b/content---docs-api-q-scroll-area-8-c-4-3fd.fd580650b1d2ac9eee33.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{161:function(e,t,r){"use strict";r.d(t,"a",(function(){return o})),r.d(t,"b",(function(){return d}));var n=r(0),a=r.n(n),l=a.a.createContext({}),c=function(e){var t=a.a.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):Object.assign({},t,e)),r},o=function(e){var t=c(e.components);return a.a.createElement(l.Provider,{value:t},e.children)};var i="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},p=Object(n.forwardRef)((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,o=e.parentName,i=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&-1===t.indexOf(n)&&(r[n]=e[n]);return r}(e,["components","mdxType","originalType","parentName"]),p=c(r),d=n,b=p[o+"."+d]||p[d]||s[d]||l;return r?a.a.createElement(b,Object.assign({},{ref:t},i,{components:r})):a.a.createElement(b,Object.assign({},{ref:t},i))}));function d(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,c=new Array(l);c[0]=p;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[i]="string"==typeof e?e:n,c[1]=o;for(var d=2;d=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c={sidebar_label:"QScrollArea",title:"QScrollArea"},o=[{value:"Example",id:"example",children:[]},{value:"new QScrollArea(parent?)",id:"new-qscrollareaparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"scrollArea.setWidget(widget)",id:"scrollareasetwidgetwidget",children:[]}]}],i={rightToc:o},s="wrapper";function p(e){var t=e.components,r=l(e,["components"]);return Object(n.b)(s,a({},i,r,{components:t,mdxType:"MDXLayout"}),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"A ",Object(n.b)("inlineCode",{parentName:"p"},"QScrollArea")," provides a scrolling view onto another widget.")),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(n.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qscrollarea.html"}),"QScrollArea class"))),Object(n.b)("p",null,Object(n.b)("strong",{parentName:"p"},"QScrollArea inherits from ",Object(n.b)("a",a({parentName:"strong"},{href:"/docs/api/QAbstractScrollArea"}),"QAbstractScrollArea"))),Object(n.b)("h3",{id:"example"},"Example"),Object(n.b)("pre",null,Object(n.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QScrollArea } = require("@nodegui/nodegui");\n\nconst scrollArea = new QScrollArea();\nscrollArea.setInlineStyle("flex: 1; width:\'100%\';");\n\nconst imageLabel = new QLabel();\nconst pixmap = new QPixmap(\n path.resolve(__dirname, "../extras/assets/kitchen.png")\n);\nimageLabel.setPixmap(pixmap);\n\nscrollArea.setWidget(imageLabel);\n')),Object(n.b)("h3",{id:"new-qscrollareaparent"},Object(n.b)("inlineCode",{parentName:"h3"},"new QScrollArea(parent?)")),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(n.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(n.b)("h2",{id:"static-methods"},"Static Methods"),Object(n.b)("p",null,"QScrollArea can access all the static methods defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/QAbstractScrollArea"}),"QAbstractScrollArea")),Object(n.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(n.b)("p",null,"QScrollArea can access all the instance properties defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/QAbstractScrollArea"}),"QAbstractScrollArea")),Object(n.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(n.b)("p",null,"QScrollArea can access all the instance methods defined in ",Object(n.b)("a",a({parentName:"p"},{href:"/docs/api/QAbstractScrollArea"}),"QAbstractScrollArea"),". Additionally it also has the following instance methods:"),Object(n.b)("h3",{id:"scrollareasetwidgetwidget"},Object(n.b)("inlineCode",{parentName:"h3"},"scrollArea.setWidget(widget)")),Object(n.b)("p",null,"Sets the scroll area's widget. It calls the native method ",Object(n.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qscrollarea.html#setWidget"}),"QScrollArea: setWidget"),"."),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},Object(n.b)("inlineCode",{parentName:"li"},"widget")," NodeWidget - Any widget you want to enclose in a scroll area.")))}p.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js b/content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js new file mode 100644 index 000000000..c109c7bd5 --- /dev/null +++ b/content---docs-api-q-spin-box-1-ce-bfd.fc03e9106b39d9c9e23c.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return b}));var i=n(0),a=n.n(i),o=a.a.createContext({}),p=function(e){var t=a.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},r=function(e){var t=p(e.components);return a.a.createElement(o.Provider,{value:t},e.children)};var l="mdxType",s={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},c=Object(i.forwardRef)((function(e,t){var n=e.components,i=e.mdxType,o=e.originalType,r=e.parentName,l=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(n[i]=e[i]);return n}(e,["components","mdxType","originalType","parentName"]),c=p(n),b=i,u=c[r+"."+b]||c[b]||s[b]||o;return n?a.a.createElement(u,Object.assign({},{ref:t},l,{components:n})):a.a.createElement(u,Object.assign({},{ref:t},l))}));function b(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var o=n.length,p=new Array(o);p[0]=c;var r={};for(var s in t)hasOwnProperty.call(t,s)&&(r[s]=t[s]);r.originalType=e,r[l]="string"==typeof e?e:i,p[1]=r;for(var b=2;b=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var p={sidebar_label:"QSpinBox",title:"QSpinBox"},r=[{value:"Example",id:"example",children:[]},{value:"new QSpinBox(parent?)",id:"new-qspinboxparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"spinBox.setValue(val)",id:"spinboxsetvalueval",children:[]},{value:"spinBox.setRange(minimum, maximum)",id:"spinboxsetrangeminimum-maximum",children:[]},{value:"spinBox.setPrefix(prefix)",id:"spinboxsetprefixprefix",children:[]},{value:"spinBox.setSuffix(suffix)",id:"spinboxsetsuffixsuffix",children:[]},{value:"spinBox.setSingleStep(val)",id:"spinboxsetsinglestepval",children:[]},{value:"spinBox.cleanText()",id:"spinboxcleantext",children:[]},{value:"spinBox.minimum()",id:"spinboxminimum",children:[]},{value:"spinBox.maximum()",id:"spinboxmaximum",children:[]},{value:"spinBox.value()",id:"spinboxvalue",children:[]}]}],l={rightToc:r},s="wrapper";function c(e){var t=e.components,n=o(e,["components"]);return Object(i.b)(s,a({},l,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},"Create and control spin box widgets.")),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(i.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qspinbox.html"}),"QSpinBox class"))),Object(i.b)("p",null,"A ",Object(i.b)("inlineCode",{parentName:"p"},"QSpinBox")," provides ability to add and manipulate native spin box widgets."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"QSpinBox inherits from ",Object(i.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(i.b)("h3",{id:"example"},"Example"),Object(i.b)("pre",null,Object(i.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QSpinBox } = require("@nodegui/nodegui");\n\nconst spinBox = new QSpinBox();\n')),Object(i.b)("h3",{id:"new-qspinboxparent"},Object(i.b)("inlineCode",{parentName:"h3"},"new QSpinBox(parent?)")),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(i.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(i.b)("h2",{id:"static-methods"},"Static Methods"),Object(i.b)("p",null,"QSpinBox can access all the static methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(i.b)("p",null,"QSpinBox can access all the instance properties defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(i.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(i.b)("p",null,"QSpinBox can access all the instance methods defined in ",Object(i.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget"),". Additionally it also has the following instance methods:"),Object(i.b)("h3",{id:"spinboxsetvalueval"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.setValue(val)")),Object(i.b)("p",null,"Sets the current value of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#value-prop"}),"QSpinBox: setValue"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"val")," number - Set the value as current value")),Object(i.b)("h3",{id:"spinboxsetrangeminimum-maximum"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.setRange(minimum, maximum)")),Object(i.b)("p",null,"Sets the min/max value of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#setRange"}),"QSpinBox: setRange"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"max")," number - Set the value as max value of the progress bar.")),Object(i.b)("h3",{id:"spinboxsetprefixprefix"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.setPrefix(prefix)")),Object(i.b)("p",null,"Sets the prefix of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#prefix-prop"}),"QSpinBox: setPrefix"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"prefix")," string - Specifies prefix content shows before the spinBox value. ",Object(i.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"Prefix is an enum from Qt"))),Object(i.b)("h3",{id:"spinboxsetsuffixsuffix"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.setSuffix(suffix)")),Object(i.b)("p",null,"Sets the suffix of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#suffix-prop"}),"QSpinBox: setSuffix"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"suffix")," string - Specifies suffix content shows after the spinBox value. ",Object(i.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"Suffix is an enum from Qt"))),Object(i.b)("h3",{id:"spinboxsetsinglestepval"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.setSingleStep(val)")),Object(i.b)("p",null,"Sets the single step value of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#singleStep-prop"}),"QSpinBox: setSingleStep"),"."),Object(i.b)("ul",null,Object(i.b)("li",{parentName:"ul"},Object(i.b)("inlineCode",{parentName:"li"},"val")," number - Specifies amount value changes with each step. ",Object(i.b)("a",a({parentName:"li"},{href:"/docs/api/QtEnums"}),"Suffix is an enum from Qt"))),Object(i.b)("h3",{id:"spinboxcleantext"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.cleanText()")),Object(i.b)("p",null,"Returns the text content (String) of the spinBox excluding any prefix, suffix, or leading or trailing whitespace. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#minimum-prop"}),"QSpinBox: value"),"."),Object(i.b)("h3",{id:"spinboxminimum"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.minimum()")),Object(i.b)("p",null,"Returns the minimum value (Number) of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#minimum-prop"}),"QSpinBox: value"),"."),Object(i.b)("h3",{id:"spinboxmaximum"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.maximum()")),Object(i.b)("p",null,"Returns the maximum value (Number) of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#maximum-prop"}),"QSpinBox: value"),"."),Object(i.b)("h3",{id:"spinboxvalue"},Object(i.b)("inlineCode",{parentName:"h3"},"spinBox.value()")),Object(i.b)("p",null,"Returns the current value (Number) of the spinBox. It calls the native method ",Object(i.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qspinbox.html#value-prop"}),"QSpinBox: value"),"."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js b/content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js new file mode 100644 index 000000000..7c5867259 --- /dev/null +++ b/content---docs-api-q-tab-widget-508-95e.b35876b3da49da08bcb5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{161:function(e,n,r){"use strict";r.d(n,"a",(function(){return c})),r.d(n,"b",(function(){return f}));var t=r(0),a=r.n(t),o=a.a.createContext({}),i=function(e){var n=a.a.useContext(o),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},c=function(e){var n=i(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,o=e.originalType,c=e.parentName,p=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=i(r),f=t,s=l[c+"."+f]||l[f]||u[f]||o;return r?a.a.createElement(s,Object.assign({},{ref:n},p,{components:r})):a.a.createElement(s,Object.assign({},{ref:n},p))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=r.length,i=new Array(o);i[0]=l;var c={};for(var u in n)hasOwnProperty.call(n,u)&&(c[u]=n[u]);c.originalType=e,c[p]="string"==typeof e?e:t,i[1]=c;for(var f=2;f=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var i={sidebar_label:"QTabWidget",title:"QTabWidget"},c=[],p={rightToc:c},u="wrapper";function l(e){var n=e.components,r=o(e,["components"]);return Object(t.b)(u,a({},p,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"Will be available from NodeGUI v0.1.10 and up"))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js b/content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js new file mode 100644 index 000000000..3b8c0f74d --- /dev/null +++ b/content---docs-api-q-widget-04-a-59f.789a0ca241a0fb6ad49d.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s}));var r=n(0),a=n.n(r),i=a.a.createContext({}),o=function(e){var t=a.a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=o(e.components);return a.a.createElement(i.Provider,{value:t},e.children)};var d="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},l=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,i=e.originalType,c=e.parentName,d=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),l=o(n),s=r,b=l[c+"."+s]||l[s]||p[s]||i;return n?a.a.createElement(b,Object.assign({},{ref:t},d,{components:n})):a.a.createElement(b,Object.assign({},{ref:t},d))}));function s(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var i=n.length,o=new Array(i);o[0]=l;var c={};for(var p in t)hasOwnProperty.call(t,p)&&(c[p]=t[p]);c.originalType=e,c[d]="string"==typeof e?e:r,o[1]=c;for(var s=2;s=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var o={sidebar_label:"QWidget",title:"QWidget"},c=[{value:"Example",id:"example",children:[]},{value:"new QWidget(parent?)",id:"new-qwidgetparent",children:[]},{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[]}],d={rightToc:c},p="wrapper";function l(e){var t=e.components,n=i(e,["components"]);return Object(r.b)(p,a({},d,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("blockquote",null,Object(r.b)("p",{parentName:"blockquote"},"Create and control views.")),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"This class is a JS wrapper around Qt's ",Object(r.b)("a",a({parentName:"strong"},{href:"https://doc.qt.io/qt-5/qwidget.html"}),"QWidget class"))),Object(r.b)("p",null,"A ",Object(r.b)("inlineCode",{parentName:"p"},"QWidget")," can be used to encapsulate other widgets and provide structure. It functions similar to a ",Object(r.b)("inlineCode",{parentName:"p"},"div")," in the web world."),Object(r.b)("p",null,Object(r.b)("strong",{parentName:"p"},"QWidget inherits from ",Object(r.b)("a",a({parentName:"strong"},{href:"/docs/api/NodeWidget"}),"NodeWidget"))),Object(r.b)("h3",{id:"example"},"Example"),Object(r.b)("pre",null,Object(r.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QWidget } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nview.setObjectName("container"); //Similar to setting `id` on the web\nview.setLayout(new FlexLayout());\n')),Object(r.b)("h3",{id:"new-qwidgetparent"},Object(r.b)("inlineCode",{parentName:"h3"},"new QWidget(parent?)")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("inlineCode",{parentName:"li"},"parent")," NodeWidget (",Object(r.b)("em",{parentName:"li"},"optional"),"). Any widget inheriting from NodeWidget can be passed as a parent. This will make this widget, the child of the parent widget.")),Object(r.b)("h2",{id:"static-methods"},"Static Methods"),Object(r.b)("p",null,"QWidget can access all the static methods defined in ",Object(r.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(r.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(r.b)("p",null,"QWidget can access all the instance properties defined in ",Object(r.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")),Object(r.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(r.b)("p",null,"QWidget can access all the instance methods defined in ",Object(r.b)("a",a({parentName:"p"},{href:"/docs/api/NodeWidget"}),"NodeWidget")))}l.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js b/content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js new file mode 100644 index 000000000..013a3b6c7 --- /dev/null +++ b/content---docs-api-qt-enumsfd-7-cf3.1eed426a340d4c937b0a.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{101:function(e,n,t){"use strict";t.r(n),t.d(n,"frontMatter",(function(){return i})),t.d(n,"rightToc",(function(){return c})),t.d(n,"default",(function(){return p}));t(0);var r=t(161);function a(){return(a=Object.assign||function(e){for(var n=1;n=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i={sidebar_label:"Qt Enums",title:"Qt Enums"},c=[{value:"Enums from Qt",id:"enums-from-qt",children:[{value:"Example",id:"example",children:[]}]}],u={rightToc:c},l="wrapper";function p(e){var n=e.components,t=o(e,["components"]);return Object(r.b)(l,a({},u,t,{components:n,mdxType:"MDXLayout"}),Object(r.b)("h2",{id:"enums-from-qt"},"Enums from Qt"),Object(r.b)("p",null,"For a complete list of Enums that we can use from Javascript see file"),Object(r.b)("p",null,"Qt enums: ",Object(r.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/nodegui/blob/master/src/lib/QtEnums/index.ts"}),Object(r.b)("inlineCode",{parentName:"a"},"src/lib/QtEnums/index.ts"))," in the NodeGui repo."),Object(r.b)("p",null,"All the enums in this file can be imported directly from ",Object(r.b)("inlineCode",{parentName:"p"},"@nodegui/@nodegui"),"."),Object(r.b)("h3",{id:"example"},"Example"),Object(r.b)("pre",null,Object(r.b)("code",a({parentName:"pre"},{className:"language-js"}),'import { AspectRatioMode } from "@nodegui/nodegui";\n')))}p.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return c})),t.d(n,"b",(function(){return s}));var r=t(0),a=t.n(r),o=a.a.createContext({}),i=function(e){var n=a.a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},c=function(e){var n=i(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var u="mdxType",l={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},p=Object(r.forwardRef)((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,u=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===n.indexOf(r)&&(t[r]=e[r]);return t}(e,["components","mdxType","originalType","parentName"]),p=i(t),s=r,m=p[c+"."+s]||p[s]||l[s]||o;return t?a.a.createElement(m,Object.assign({},{ref:n},u,{components:t})):a.a.createElement(m,Object.assign({},{ref:n},u))}));function s(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=p;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[u]="string"==typeof e?e:r,i[1]=c;for(var s=2;s=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var i={sidebar_label:"Synopsis",title:"Synopsis"},l=[{value:"Destructuring assignment",id:"destructuring-assignment",children:[]}],s={rightToc:l},c="wrapper";function u(e){var n=e.components,t=a(e,["components"]);return Object(r.b)(c,o({},s,t,{components:n,mdxType:"MDXLayout"}),Object(r.b)("blockquote",null,Object(r.b)("p",{parentName:"blockquote"},"How to use Node.js and NodeGui's APIs.")),Object(r.b)("p",null,"All of ",Object(r.b)("a",o({parentName:"p"},{href:"https://nodejs.org/api/"}),"Node.js's built-in modules")," are available in\nNodeGui. Also, third-party node modules that are known to work with Node.Js are fully supported as well (including\nthe native node modules)."),Object(r.b)("p",null,"Apart from Node.Js ecosystem, NodeGui also provides some extra built-in widget and modules for developing native\ndesktop applications. So, you can think of NodeGui as NodeJs + Gui Widgets powered by Qt."),Object(r.b)("p",null,"The app script is like a normal Node.js script:"),Object(r.b)("pre",null,Object(r.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const { QMainWindow } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n\nwin.show();\n\nglobal.win = win; // To prevent win from being garbage collected.\n')),Object(r.b)("p",null,"To run your app, read ",Object(r.b)("a",o({parentName:"p"},{href:"/docs/guides/tutorial"}),"Run your app"),"."),Object(r.b)("h2",{id:"destructuring-assignment"},"Destructuring assignment"),Object(r.b)("p",null,"You can use\n",Object(r.b)("a",o({parentName:"p"},{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment"}),"destructuring assignment")," to make it easier to use\nbuilt-in modules."),Object(r.b)("pre",null,Object(r.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const {\n QMainWindow,\n QWidget,\n QLabel,\n FlexLayout\n} = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n\nconst centralWidget = new QWidget();\ncentralWidget.setObjectName("myroot");\nconst rootLayout = new FlexLayout();\ncentralWidget.setLayout(rootLayout);\n\nconst label = new QLabel();\nlabel.setInlineStyle("font-size: 16px; font-weight: bold;");\nlabel.setText("Hello World");\n\nrootLayout.addWidget(label);\nwin.setCentralWidget(centralWidget);\nwin.setStyleSheet(\n `\n #myroot {\n background-color: #009688;\n }\n `\n);\nwin.show();\n\nglobal.win = win;\n')))}u.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return l})),t.d(n,"b",(function(){return p}));var r=t(0),o=t.n(r),a=o.a.createContext({}),i=function(e){var n=o.a.useContext(a),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},l=function(e){var n=i(e.components);return o.a.createElement(a.Provider,{value:n},e.children)};var s="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},u=Object(r.forwardRef)((function(e,n){var t=e.components,r=e.mdxType,a=e.originalType,l=e.parentName,s=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===n.indexOf(r)&&(t[r]=e[r]);return t}(e,["components","mdxType","originalType","parentName"]),u=i(t),p=r,d=u[l+"."+p]||u[p]||c[p]||a;return t?o.a.createElement(d,Object.assign({},{ref:n},s,{components:t})):o.a.createElement(d,Object.assign({},{ref:n},s))}));function p(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var a=t.length,i=new Array(a);i[0]=u;var l={};for(var c in n)hasOwnProperty.call(n,c)&&(l[c]=n[c]);l.originalType=e,l[s]="string"==typeof e?e:r,i[1]=l;for(var p=2;p=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={sidebar_label:"YogaWidget",title:"YogaWidget"},c=[{value:"Static Methods",id:"static-methods",children:[]},{value:"Instance Properties",id:"instance-properties",children:[]},{value:"Instance Methods",id:"instance-methods",children:[{value:"widget.getFlexNode()",id:"widgetgetflexnode",children:[]}]}],s={rightToc:c},l="wrapper";function d(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(l,o({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"Abstract class to add common functionality related to Flex layout to all Widgets.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"This class implements methods related to flex layout required to be present in all widgets")),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},"YogaWidget")," is an abstract class and hence no instances of the same should be created. It exists so that we can add similar functionalities related to flex layout to all widget's easily. We implement flex layout using a library called ",Object(a.b)("a",o({parentName:"p"},{href:"https://github.com/facebook/yoga"}),"Yoga"),". As part of yoga every widget needs to store its own flex properties such as alignItems, flexDirection etc. This is done with the help of YogaWidget."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"YogaWidget is the base class for EventWidget which means all widgets inherit it aswell. It inherits from another abstract class ",Object(a.b)("a",o({parentName:"strong"},{href:"/docs/api/Component"}),"Component"))),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const { QWidget } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\n// getFlexNode is a method from YogaWidget\nconst flexNode = view.getFlexNode();\n')),Object(a.b)("p",null,"YogaWidget helps in storing all flex properties of a widget."),Object(a.b)("h2",{id:"static-methods"},"Static Methods"),Object(a.b)("p",null,"YogaWidget can access all the static methods defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-properties"},"Instance Properties"),Object(a.b)("p",null,"YogaWidget can access all the instance properties defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("h2",{id:"instance-methods"},"Instance Methods"),Object(a.b)("p",null,"YogaWidget can access all the instance methods defined in ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/Component"}),"Component")),Object(a.b)("p",null,"Additionally it also has the following instance methods:"),Object(a.b)("h3",{id:"widgetgetflexnode"},Object(a.b)("inlineCode",{parentName:"h3"},"widget.getFlexNode()")),Object(a.b)("p",null,"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."))}d.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return p}));var a=n(0),o=n.n(a),r=o.a.createContext({}),i=function(e){var t=o.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return o.a.createElement(r.Provider,{value:t},e.children)};var s="mdxType",l={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,c=e.parentName,s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),d=i(n),p=a,u=d[c+"."+p]||d[p]||l[p]||r;return n?o.a.createElement(u,Object.assign({},{ref:t},s,{components:n})):o.a.createElement(u,Object.assign({},{ref:t},s))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=d;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c[s]="string"==typeof e?e:a,i[1]=c;for(var p=2;p=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i={},c=[],l={rightToc:c},u="wrapper";function p(e){var t=e.components,n=o(e,["components"]);return Object(r.b)(u,a({},l,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"common-errors"},"Common errors"),Object(r.b)("ol",null,Object(r.b)("li",{parentName:"ol"},Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"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.")),Object(r.b)("li",{parentName:"ol"},Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"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",Object(r.b)("br",{parentName:"p"}),"\n",Object(r.b)("inlineCode",{parentName:"p"},"YGNodeSetMeasureFunc(this->instance->getFlexNode(), &extrautils::measureQtWidget);"),"\nif its a leaf node widget(doesnt contain any children)."))))}p.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return c})),n.d(t,"b",(function(){return s}));var r=n(0),a=n.n(r),o=a.a.createContext({}),i=function(e){var t=a.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},c=function(e){var t=i(e.components);return a.a.createElement(o.Provider,{value:t},e.children)};var l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},p=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,l=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),p=i(n),s=r,f=p[c+"."+s]||p[s]||u[s]||o;return n?a.a.createElement(f,Object.assign({},{ref:t},l,{components:n})):a.a.createElement(f,Object.assign({},{ref:t},l))}));function s(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=p;var c={};for(var u in t)hasOwnProperty.call(t,u)&&(c[u]=t[u]);c.originalType=e,c[l]="string"==typeof e?e:r,i[1]=c;for(var s=2;s=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var c={},i=[{value:"Debugging JS",id:"debugging-js",children:[]},{value:"Debugging C++",id:"debugging-c",children:[]}],u={rightToc:i},d="wrapper";function p(e){var n=e.components,t=o(e,["components"]);return Object(r.b)(d,a({},u,t,{components:n,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"debugging"},"debugging"),Object(r.b)("h2",{id:"debugging-js"},"Debugging JS"),Object(r.b)("p",null,"// TODO"),Object(r.b)("h2",{id:"debugging-c"},"Debugging C++"),Object(r.b)("p",null,Object(r.b)("a",a({parentName:"p"},{href:"https://medium.com/@atulanand94/debugging-nodejs-c-addons-using-vs-code-27e9940fc3ad"}),"https://medium.com/@atulanand94/debugging-nodejs-c-addons-using-vs-code-27e9940fc3ad")),Object(r.b)("p",null,Object(r.b)("a",a({parentName:"p"},{href:"https://medium.com/cameron-nokes/how-to-debug-native-node-addons-in-mac-osx-66f69f81afcb"}),"https://medium.com/cameron-nokes/how-to-debug-native-node-addons-in-mac-osx-66f69f81afcb")))}p.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return i})),t.d(n,"b",(function(){return g}));var r=t(0),a=t.n(r),o=a.a.createContext({}),c=function(e){var n=a.a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},i=function(e){var n=c(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},p=Object(r.forwardRef)((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,i=e.parentName,u=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===n.indexOf(r)&&(t[r]=e[r]);return t}(e,["components","mdxType","originalType","parentName"]),p=c(t),g=r,s=p[i+"."+g]||p[g]||d[g]||o;return t?a.a.createElement(s,Object.assign({},{ref:n},u,{components:t})):a.a.createElement(s,Object.assign({},{ref:n},u))}));function g(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,c=new Array(o);c[0]=p;var i={};for(var d in n)hasOwnProperty.call(n,d)&&(i[d]=n[d]);i.originalType=e,i[u]="string"==typeof e?e:r,c[1]=i;for(var g=2;g=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var r={},l=[{value:"Getting started",id:"getting-started",children:[]},{value:"Code Structure",id:"code-structure",children:[]},{value:"Wrapping a widget",id:"wrapping-a-widget",children:[]},{value:"Learning Materials",id:"learning-materials",children:[]}],s={rightToc:l},d="wrapper";function c(e){var t=e.components,n=o(e,["components"]);return Object(a.b)(d,i({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h2",{id:"getting-started"},"Getting started"),Object(a.b)("p",null,"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."),Object(a.b)("p",null,"The library depends on ",Object(a.b)("inlineCode",{parentName:"p"},"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 ",Object(a.b)("inlineCode",{parentName:"p"},"qode your_file.js")," instead of ",Object(a.b)("inlineCode",{parentName:"p"},"node your_file.js"),"."),Object(a.b)("p",null,"Qode is inspired by this post by ",Object(a.b)("a",i({parentName:"p"},{href:"https://github.com/zcbenz"}),"Cheng Zhao"),": ",Object(a.b)("a",i({parentName:"p"},{href:"https://electronjs.org/blog/electron-internals-node-integration"}),"https://electronjs.org/blog/electron-internals-node-integration")),Object(a.b)("p",null,"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."),Object(a.b)("h2",{id:"code-structure"},"Code Structure"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{}),".\nโ”œโ”€โ”€ binding.gyp\nโ”œโ”€โ”€ config\nโ”œโ”€โ”€ demo.ts\nโ”œโ”€โ”€ package.json\nโ”œโ”€โ”€ src\nโ”‚ย ย  โ”œโ”€โ”€ cpp <-- C++ source code\nโ”‚ย ย  โ””โ”€โ”€ lib <-- Typescript source code\nโ”œโ”€โ”€ tsconfig.json\nโ””โ”€โ”€ yarn.lock\n")),Object(a.b)("p",null,"The main folder is ",Object(a.b)("inlineCode",{parentName:"p"},"src"),". It contains"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"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."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"lib")," : This folder contains all the Typescript code of the library. This is used to add additonal helper methods and types to exported addon.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Detailed version:")),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{}),".\nโ”œโ”€โ”€ binding.gyp\nโ”œโ”€โ”€ config\nโ”‚ย ย  โ”œโ”€โ”€ application.gypi\nโ”‚ย ย  โ”œโ”€โ”€ common.gypi\nโ”‚ย ย  โ””โ”€โ”€ yoga.gypi\nโ”œโ”€โ”€ demo.ts\nโ”œโ”€โ”€ package.json\nโ”œโ”€โ”€ src\nโ”‚ย ย  โ”œโ”€โ”€ cpp\nโ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Extras\nโ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ QtGui <------ All exported classes found inside Qts Gui dynamic library\nโ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ QtWidgets <------ All exported classes found inside Qts Widgets dynamic library\nโ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ core\nโ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ main.cpp\nโ”‚ย ย  โ””โ”€โ”€ lib\nโ”‚ย ย  โ”œโ”€โ”€ QtGui\nโ”‚ย ย  โ”œโ”€โ”€ QtWidgets\nโ”‚ย ย  โ””โ”€โ”€ core\nโ”œโ”€โ”€ tsconfig.json\nโ””โ”€โ”€ yarn.lock\n\n")),Object(a.b)("p",null,"First step to seeing how everything works is to take a look at ",Object(a.b)("inlineCode",{parentName:"p"},"demo.ts")," file. This file is basically like a Kitchen application showcasing all the exported widgets currently with the library."),Object(a.b)("p",null,"Make sure you have read how to write native NodeJS Addons blog first. ",Object(a.b)("a",i({parentName:"p"},{href:"https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f"}),"https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f")),Object(a.b)("p",null,"Once you have done that check out ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/main.cpp")," and ",Object(a.b)("inlineCode",{parentName:"p"},"config/application.gypi")," to see the list of exported C++ classes."),Object(a.b)("p",null,"Then maybe you can take a look at ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/QtWidgets/QLabel/qlabel_wrap.h"),". This will show you how to wrap a simple Qt Widget.\nCheck the corresponding JS file for the addon here ",Object(a.b)("inlineCode",{parentName:"p"},"src/lib/QtWidgets/QLabel/index.ts"),"."),Object(a.b)("h2",{id:"wrapping-a-widget"},"Wrapping a widget"),Object(a.b)("p",null,"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."),Object(a.b)("p",null,"Taking the example of QLabel, if you look inside the directory ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/QtWidgets/QLabel"),", you should see:"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{}),"โ”œโ”€โ”€ QLabel\nโ”‚ย ย  โ”œโ”€โ”€ nlabel.cpp\nโ”‚ย ย  โ”œโ”€โ”€ nlabel.h <---- Extended QLabel\nโ”‚ย ย  โ”œโ”€โ”€ nlabel_moc.cpp <--- Autogenerated file by qt moc.\nโ”‚ย ย  โ”œโ”€โ”€ qlabel_wrap.cpp\nโ”‚ย ย  โ””โ”€โ”€ qlabel_wrap.h <--- Wrapper file\n")),Object(a.b)("p",null,"The idea is :"),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"We will first extend QLabel class to form NLabel. NLabel is basically QLabel with some extra methods and variables. More on it below."),Object(a.b)("li",{parentName:"ol"},"Then we will use NLabel and wrap it using NAPI and export it to JS side. This is what qlabel_wrap does.")),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"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.\nSo 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"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{}),"moc headername.h -o headername_moc.cpp --include // example : ../../core/YogaWidget/yogawidget.h\n")),Object(a.b)("p",null,"So for nlabel I would run it as:"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{}),"moc nlabel.h -o nlabel_moc.cpp --include ../../core/YogaWidget/yogawidget.h\n")),Object(a.b)("p",null,"This will run moc on ",Object(a.b)("inlineCode",{parentName:"p"},"headername.h")," and generate ",Object(a.b)("inlineCode",{parentName:"p"},"headername_moc.cpp"),". We will include ",Object(a.b)("inlineCode",{parentName:"p"},"headername_moc.cpp")," in ",Object(a.b)("inlineCode",{parentName:"p"},"config/moc.gypi"),". If you dont do this. Then it will give a symbol not found error."),Object(a.b)("p",null,"I hope QLabel's example is enough for now. For more examples and inspirations we can take a look at other wrapped widgets."),Object(a.b)("h2",{id:"learning-materials"},"Learning Materials"),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Beginners guide to NodeJS Addon - ",Object(a.b)("a",i({parentName:"li"},{href:"https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f"}),"https://medium.com/@atulanand94/beginners-guide-to-writing-nodejs-addons-using-c-and-n-api-node-addon-api-9b3b718a9a7f")),Object(a.b)("li",{parentName:"ol"},"First read this: N-API in nodejs docs"),Object(a.b)("li",{parentName:"ol"},Object(a.b)("a",i({parentName:"li"},{href:"https://www.youtube.com/watch?v=-Oniup60Afs&feature=youtu.be"}),"https://www.youtube.com/watch?v=-Oniup60Afs&feature=youtu.be")),Object(a.b)("li",{parentName:"ol"},"See samples at ",Object(a.b)("a",i({parentName:"li"},{href:"https://github.com/nodejs/abi-stable-node-addon-examples/"}),"https://github.com/nodejs/abi-stable-node-addon-examples/"),"\n4.1. You can see the readme of ",Object(a.b)("a",i({parentName:"li"},{href:"https://github.com/nodejs/node-addon-api.git/"}),"https://github.com/nodejs/node-addon-api.git/")),Object(a.b)("li",{parentName:"ol"},"See node-qt implementation. It is implemented in Nan (explained in video)."),Object(a.b)("li",{parentName:"ol"},"Now try to match the implementation in node-qt and convert to N-API using examples from samples."),Object(a.b)("li",{parentName:"ol"},"Implementations not in node-qt need to be done with effort.")))}c.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return p}));var a=n(0),i=n.n(a),o=i.a.createContext({}),r=function(e){var t=i.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},l=function(e){var t=r(e.components);return i.a.createElement(o.Provider,{value:t},e.children)};var s="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},c=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),c=r(n),p=a,b=c[l+"."+p]||c[p]||d[p]||o;return n?i.a.createElement(b,Object.assign({},{ref:t},s,{components:n})):i.a.createElement(b,Object.assign({},{ref:t},s))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,r=new Array(o);r[0]=c;var l={};for(var d in t)hasOwnProperty.call(t,d)&&(l[d]=t[d]);l.originalType=e,l[s]="string"==typeof e?e:a,r[1]=l;for(var p=2;p=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i={},p=[],l={rightToc:p},u="wrapper";function c(e){var t=e.components,n=o(e,["components"]);return Object(r.b)(u,a({},l,n,{components:t,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"contributors-guide"},"Contributor's guide"),Object(r.b)("p",null,"This guide is for everyone who want's to contribute to the development of NodeGui."),Object(r.b)("p",null,"Please make sure you have read the ",Object(r.b)("a",a({parentName:"p"},{href:"/"}),"User's guides")," before reading this guide."),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/setting-up"}),"Setting up the NodeGui Contributor's Environment"),Object(r.b)("ul",{parentName:"li"},Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/setting-up#macosx"}),"Setting up macOS")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/setting-up#windows"}),"Setting up Windows")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/setting-up#linux"}),"Setting up Linux")))),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/getting-started"}),"Getting started"),Object(r.b)("ul",{parentName:"li"},Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/getting-started#Code-Structure"}),"Code Structure")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/getting-started#Wrapping-a-widget"}),"Wrapping a widget: TLDR version")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/getting-started#Learning-Materials"}),"Learning Materials")))),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/styling"}),"Styling"),Object(r.b)("ul",{parentName:"li"},Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/styling#painting"}),"Painting")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/styling#layout"}),"Layout")))),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/signal_and_event_handling"}),"Signal and Event Handling")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/debugging"}),"Debugging")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/common_errors"}),"Common Errors")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"/docs/development/wrapping_widgets"}),"Wrapping a Widget: Detailed")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("a",a({parentName:"li"},{href:"tutorial/support.md"}),"Getting Support"))),Object(r.b)("h1",{id:"where-to-start-or-how-can-you-help"},"Where to start or How can you help?"),Object(r.b)("p",null," You can follow the contributors guide above to get a gist."),Object(r.b)("p",null," It is fairly straightforward to get started. I would start with a project of my own and start adding missing functionalities."),Object(r.b)("p",null," Or simply put I would recommend you start by adding an unexported method to an existing widget."),Object(r.b)("p",null," ",Object(r.b)("strong",{parentName:"p"},"For example:")),Object(r.b)("p",null," You could add the corresponding Qt method to QProgressbar\n",Object(r.b)("a",a({parentName:"p"},{href:"https://doc.qt.io/qt-5/qprogressbar.html#textVisible-prop"}),"https://doc.qt.io/qt-5/qprogressbar.html#textVisible-prop")," to get a grip on it."),Object(r.b)("p",null," This PR can be used as a guide"),Object(r.b)("p",null," ",Object(r.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/nodegui/issues/36"}),"https://github.com/nodegui/nodegui/issues/36")),Object(r.b)("p",null," ",Object(r.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/nodegui/pull/39"}),"https://github.com/nodegui/nodegui/pull/39")),Object(r.b)("p",null," 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."),Object(r.b)("p",null," ",Object(r.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/nodegui/projects/"}),"https://github.com/nodegui/nodegui/projects/")),Object(r.b)("p",null," ",Object(r.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/react-nodegui/projects/"}),"https://github.com/nodegui/react-nodegui/projects/")))}c.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return p})),n.d(t,"b",(function(){return b}));var r=n(0),a=n.n(r),o=a.a.createContext({}),i=function(e){var t=a.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},p=function(e){var t=i(e.components);return a.a.createElement(o.Provider,{value:t},e.children)};var l="mdxType",u={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},c=Object(r.forwardRef)((function(e,t){var n=e.components,r=e.mdxType,o=e.originalType,p=e.parentName,l=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(e,["components","mdxType","originalType","parentName"]),c=i(n),b=r,s=c[p+"."+b]||c[b]||u[b]||o;return n?a.a.createElement(s,Object.assign({},{ref:t},l,{components:n})):a.a.createElement(s,Object.assign({},{ref:t},l))}));function b(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var o=n.length,i=new Array(o);i[0]=c;var p={};for(var u in t)hasOwnProperty.call(t,u)&&(p[u]=t[u]);p.originalType=e,p[l]="string"==typeof e?e:r,i[1]=p;for(var b=2;b=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var i={},l=[{value:"Development setup and getting started",id:"development-setup-and-getting-started",children:[{value:"MacOSX:",id:"macosx",children:[]},{value:"Windows:",id:"windows",children:[]},{value:"Linux:",id:"linux",children:[]},{value:"Common:",id:"common",children:[]}]}],c={rightToc:l},p="wrapper";function b(e){var t=e.components,n=r(e,["components"]);return Object(a.b)(p,o({},c,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h1",{id:"setup-project-for-development"},"Setup project for development"),Object(a.b)("h2",{id:"development-setup-and-getting-started"},"Development setup and getting started"),Object(a.b)("p",null,"Make sure you follow the setup guide of ",Object(a.b)("a",o({parentName:"p"},{href:"https://github.com/nodegui/qode"}),"Qode")," so that you have a build environment ready for Qode."),Object(a.b)("h3",{id:"macosx"},"MacOSX:"),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Requirements")),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Node version: > 11"),Object(a.b)("li",{parentName:"ol"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(a.b)("a",o({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(a.b)("li",{parentName:"ol"},"Make, GCC v7"),Object(a.b)("li",{parentName:"ol"},"Qt (",Object(a.b)("em",{parentName:"li"},"Optional"),"): Make sure you followed the setup instructions from ",Object(a.b)("a",o({parentName:"li"},{href:"https://github.com/nodegui/qode"}),"Qode"))),Object(a.b)("h3",{id:"windows"},"Windows:"),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Requirements")),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Node version: > 11"),Object(a.b)("li",{parentName:"ol"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(a.b)("a",o({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(a.b)("li",{parentName:"ol"},"Visual Studio Community 2017"),Object(a.b)("li",{parentName:"ol"},"Powershell"),Object(a.b)("li",{parentName:"ol"},"Qt (",Object(a.b)("em",{parentName:"li"},"Optional"),"): Make sure you followed the setup instructions from ",Object(a.b)("a",o({parentName:"li"},{href:"https://github.com/nodegui/qode"}),"Qode"))),Object(a.b)("h3",{id:"linux"},"Linux:"),Object(a.b)("p",null,"Supported versions: Ubuntu 17.10 and up"),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Requirements")),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Node version: > 11"),Object(a.b)("li",{parentName:"ol"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(a.b)("a",o({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(a.b)("li",{parentName:"ol"},"Make, GCC v7, pkg-config"),Object(a.b)("li",{parentName:"ol"},"Qt (",Object(a.b)("em",{parentName:"li"},"Optional"),"): Make sure you followed the setup instructions from ",Object(a.b)("a",o({parentName:"li"},{href:"https://github.com/nodegui/qode"}),"Qode"))),Object(a.b)("p",null,"On Ubuntu: ",Object(a.b)("inlineCode",{parentName:"p"},"$ sudo apt-get install pkg-config build-essentials")," should install everything except Qt5."),Object(a.b)("p",null,"Note: If you are using your own version of Qt make sure to"),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},'export PKG_CONFIG_PATH="/5.13.0/gcc_64/lib/pkgconfig"')),Object(a.b)("h3",{id:"common"},"Common:"),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Once you have setup the platform specific stuff as mentioned above, follow these:"),Object(a.b)("li",{parentName:"ol"},Object(a.b)("inlineCode",{parentName:"li"},"git clone")," this repo."),Object(a.b)("li",{parentName:"ol"},Object(a.b)("inlineCode",{parentName:"li"},"yarn install")),Object(a.b)("li",{parentName:"ol"},Object(a.b)("inlineCode",{parentName:"li"},"yarn build:addon")),Object(a.b)("li",{parentName:"ol"},Object(a.b)("inlineCode",{parentName:"li"},"yarn dev"))),Object(a.b)("p",null,"If you want to run with your own version of Qt make sure to pass qt_home_dir variable when building addon."),Object(a.b)("p",null,Object(a.b)("inlineCode",{parentName:"p"},"npm run rebuild:addon [--qt_home_dir=/path/to/qt]")))}b.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return u}));var a=n(0),o=n.n(a),r=o.a.createContext({}),i=function(e){var t=o.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},l=function(e){var t=i(e.components);return o.a.createElement(r.Provider,{value:t},e.children)};var c="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},b=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,r=e.originalType,l=e.parentName,c=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),b=i(n),u=a,s=b[l+"."+u]||b[u]||p[u]||r;return n?o.a.createElement(s,Object.assign({},{ref:t},c,{components:n})):o.a.createElement(s,Object.assign({},{ref:t},c))}));function u(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var r=n.length,i=new Array(r);i[0]=b;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[c]="string"==typeof e?e:a,i[1]=l;for(var u=2;u=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(i=0;i=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var s={},r=[],l={rightToc:r},c="wrapper";function d(e){var t=e.components,n=a(e,["components"]);return Object(i.b)(c,o({},l,n,{components:t,mdxType:"MDXLayout"}),Object(i.b)("h1",{id:"event-handling"},"Event handling"),Object(i.b)("p",null,"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: ",Object(i.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/signalsandslots.html"}),"https://doc.qt.io/qt-5/signalsandslots.html"),"). Hence we would be implementing support for both events and signals."),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Technicals:")),Object(i.b)("blockquote",null,Object(i.b)("p",{parentName:"blockquote"},'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.\nSignals 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.')),Object(i.b)("h1",{id:"implementing-signal-handling"},"Implementing Signal handling"),Object(i.b)("p",null,"In Qt signals and slots are used to communicate between different qt widgets. So they can be used to implement things like\nonClick, onHover etc."),Object(i.b)("p",null,"The way Qt Signals work is explained here:"),Object(i.b)("p",null,Object(i.b)("a",o({parentName:"p"},{href:"https://doc.qt.io/qt-5/signalsandslots.html"}),"https://doc.qt.io/qt-5/signalsandslots.html")),Object(i.b)("p",null,"The way you use them in Qt for a PushButton is explained here:\n",Object(i.b)("a",o({parentName:"p"},{href:"https://wiki.qt.io/How_to_Use_QPushButton#Signals"}),"https://wiki.qt.io/How_to_Use_QPushButton#Signals")),Object(i.b)("h1",{id:"adding-signalevent-handling-support-to-a-nodewidget"},"Adding signal/event handling support to a NodeWidget"),Object(i.b)("p",null,"We will take the example of PushButton"),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Javascript")),Object(i.b)("p",null,"Steps:"),Object(i.b)("p",null,"The widget should inherit from ",Object(i.b)("inlineCode",{parentName:"p"},"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 ",Object(i.b)("inlineCode",{parentName:"p"},"super(native)"),"."),Object(i.b)("p",null,"EventWidget adds ",Object(i.b)("inlineCode",{parentName:"p"},"addEventListener")," method to the widget which can be called\nlike this:"),Object(i.b)("pre",null,Object(i.b)("code",o({parentName:"pre"},{className:"language-js"}),'button.addEventListener("clicked", () => {\n console.log("clicked");\n});\n')),Object(i.b)("p",null,"To help the user know what all signals/events are supported, export an enum like ",Object(i.b)("inlineCode",{parentName:"p"},"QPushButtonEvents")," as shown below."),Object(i.b)("p",null,"So the user can then use it as below:"),Object(i.b)("pre",null,Object(i.b)("code",o({parentName:"pre"},{className:"language-js"}),'button.addEventListener(QPushButtonEvents.clicked, () => {\n console.log("clicked");\n});\n')),Object(i.b)("p",null,"Example:"),Object(i.b)("pre",null,Object(i.b)("code",o({parentName:"pre"},{className:"language-js"}),'import addon from "../../core/addon";\nimport { NodeWidget } from "../../QtGui/QWidget";\nimport { BaseWidgetEvents } from "../../core/EventWidget";\n\nexport const QPushButtonEvents = Object.freeze({\n ...BaseWidgetEvents,\n clicked: "clicked",\n pressed: "pressed",\n released: "released",\n toggled: "toggled"\n});\n\nexport class QPushButton extends NodeWidget {\n native: NativeElement;\n constructor(parent?: NodeWidget) {\n let native;\n if (parent) {\n native = new addon.QPushButton(parent.native);\n } else {\n native = new addon.QPushButton();\n }\n super(native);\n this.parent = parent;\n this.native = native;\n // bind member functions\n this.setText.bind(this);\n }\n\n setText(text: string | number) {\n this.native.setText(`${text}`);\n }\n}\n')),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"C++")),Object(i.b)("p",null,"Steps:"),Object(i.b)("ol",null,Object(i.b)("li",{parentName:"ol"},Object(i.b)("inlineCode",{parentName:"li"},"NPushButton"))),Object(i.b)("p",null,"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 ",Object(i.b)("inlineCode",{parentName:"p"},"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."),Object(i.b)("p",null,"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."),Object(i.b)("pre",null,Object(i.b)("code",o({parentName:"pre"},{className:"language-cpp"}),'#pragma once\n\n#include \n#include "src/cpp/core/NodeWidget/nodewidget.h"\n#include "napi.h"\n\nclass NPushButton: public QPushButton, public NodeWidget\n{\n NODEWIDGET_IMPLEMENTATIONS(QPushButton)\npublic:\n using QPushButton::QPushButton; //inherit all constructors of QPushButton\n\n // override this method and implement all signals here\n void connectWidgetSignalsToEventEmitter() {\n // Qt Connects: Implement all signal connects here\n QObject::connect(this, &QPushButton::clicked, [=](bool checked) {\n Napi::Env env = this->emitOnNode.Env();\n Napi::HandleScope scope(env);\n this->emitOnNode.Call({ Napi::String::New(env, "clicked"), Napi::Value::From(env, checked) });\n });\n QObject::connect(this, &QPushButton::released, [=]() {\n Napi::Env env = this->emitOnNode.Env();\n Napi::HandleScope scope(env);\n this->emitOnNode.Call({ Napi::String::New(env, "released") });\n });\n QObject::connect(this, &QPushButton::pressed, [=]() {\n Napi::Env env = this->emitOnNode.Env();\n Napi::HandleScope scope(env);\n this->emitOnNode.Call({ Napi::String::New(env, "pressed") });\n });\n QObject::connect(this, &QPushButton::toggled, [=](bool checked) {\n Napi::Env env = this->emitOnNode.Env();\n Napi::HandleScope scope(env);\n this->emitOnNode.Call({ Napi::String::New(env, "toggled"), Napi::Value::From(env, checked) });\n });\n }\n};\n\n')),Object(i.b)("p",null,Object(i.b)("strong",{parentName:"p"},"Additional")),Object(i.b)("p",null,"Make sure ",Object(i.b)("inlineCode",{parentName:"p"},"npushbutton.h")," is added to ",Object(i.b)("inlineCode",{parentName:"p"},"config/moc.json"),".\nAnd run ",Object(i.b)("inlineCode",{parentName:"p"},"npm run automoc")," before running ",Object(i.b)("inlineCode",{parentName:"p"},"npm run build:addon")),Object(i.b)("p",null,"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."),Object(i.b)("h1",{id:"how-does-it-work-"},"How does it work ?"),Object(i.b)("ol",null,Object(i.b)("li",{parentName:"ol"},"On JS side for each widget instance we create an instance of NodeJS's Event Emitter. This is done by the class ",Object(i.b)("inlineCode",{parentName:"li"},"EventWidget")," from which ",Object(i.b)("inlineCode",{parentName:"li"},"NodeWidget")," inherits"),Object(i.b)("li",{parentName:"ol"},"We send this event emiiter's ",Object(i.b)("inlineCode",{parentName:"li"},"emit")," function to the C++ side by calling ",Object(i.b)("inlineCode",{parentName:"li"},"initNodeEventEmitter")," method and store a pointer to the event emitter's emit function using ",Object(i.b)("inlineCode",{parentName:"li"},"emitOnNode"),". initNodeEventEmitter function is added by a macro from EventWidget (c++). You can find the initNodeEventEmitter method with the event widget macros."),Object(i.b)("li",{parentName:"ol"},"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 ",Object(i.b)("inlineCode",{parentName:"li"},"connectWidgetSignalsToEventEmitter"),". Check ",Object(i.b)("inlineCode",{parentName:"li"},"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 ",Object(i.b)("inlineCode",{parentName:"li"},"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")))}d.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return p}));var i=n(0),o=n.n(i),a=o.a.createContext({}),s=function(e){var t=o.a.useContext(a),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},r=function(e){var t=s(e.components);return o.a.createElement(a.Provider,{value:t},e.children)};var l="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},d=Object(i.forwardRef)((function(e,t){var n=e.components,i=e.mdxType,a=e.originalType,r=e.parentName,l=function(e,t){var n={};for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&-1===t.indexOf(i)&&(n[i]=e[i]);return n}(e,["components","mdxType","originalType","parentName"]),d=s(n),p=i,u=d[r+"."+p]||d[p]||c[p]||a;return n?o.a.createElement(u,Object.assign({},{ref:t},l,{components:n})):o.a.createElement(u,Object.assign({},{ref:t},l))}));function p(e,t){var n=arguments,i=t&&t.mdxType;if("string"==typeof e||i){var a=n.length,s=new Array(a);s[0]=d;var r={};for(var c in t)hasOwnProperty.call(t,c)&&(r[c]=t[c]);r.originalType=e,r[l]="string"==typeof e?e:i,s[1]=r;for(var p=2;p=0||(i[n]=e[n]);return i}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}var l={},r=[{value:"Painting",id:"painting",children:[]},{value:"Layout",id:"layout",children:[{value:"Implementation",id:"implementation",children:[]},{value:"FlexItem",id:"flexitem",children:[]},{value:"YogaWidget",id:"yogawidget",children:[]},{value:"NodeWidget",id:"nodewidget",children:[]}]}],s={rightToc:r},c="wrapper";function d(e){var t=e.components,n=o(e,["components"]);return Object(a.b)(c,i({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h1",{id:"how-styling-works"},"How styling works?"),Object(a.b)("p",null,"There are two parts to styling."),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},"Layout"),Object(a.b)("li",{parentName:"ol"},"Painting : Colors, text color, etc")),Object(a.b)("h2",{id:"painting"},"Painting"),Object(a.b)("p",null,"The regular styles such as text color, font-size, font weight etc are achieved using Qt's stylesheet.\nWe just call Qt's setStyleSheet method on the native widget and pass in the styles as a string."),Object(a.b)("p",null,"This method is implemented as part of ",Object(a.b)("inlineCode",{parentName:"p"},"QWIDGET_WRAPPED_METHODS_DECLARATION")," in ",Object(a.b)("inlineCode",{parentName:"p"},"qwidget_macro.h"),".\nSo all widgets using this macro will get the setStyleSheet method."),Object(a.b)("h2",{id:"layout"},"Layout"),Object(a.b)("p",null,"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: ",Object(a.b)("inlineCode",{parentName:"p"},"deps/yoga/doc.md")),Object(a.b)("p",null,"In case ",Object(a.b)("inlineCode",{parentName:"p"},"nodegui"),". I have implemented a custom Qt layout by extending ",Object(a.b)("inlineCode",{parentName:"p"},"QLayout"),", hence Qt is able to take over automagically when window is resized or any other layouting event occurs.\nYou can find the implementation at ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/core/FlexLayout/flexlayout.h"),"."),Object(a.b)("p",null,"The c++ api provided by this custom layout looks like this:"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-cpp"})," // FlexLayout is a custom Layout built for QT. This layout will be used to layout qt widgets using facebook's yoga library.\n // Thus giving ability to layout Qt Widgets using Flexbox.\n // Usage:\n QWidget *container = new QWidget();\n YGNodeRef root = YGNodeNew();\n YGNodeRef child1 = YGNodeNew();\n YGNodeRef child2 = YGNodeNew();\n FlexLayout * flayout = new FlexLayout(container,root);\n// or FlexLayout * flayout = new FlexLayout(container);\n// or FlexLayout *flayout = new FlexLayout();\n\n flayout->addWidget(btn1, child1);\n flayout->addWidget(btn2, child2);\n\n")),Object(a.b)("p",null,"This layout is exported to Javascript side via ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/core/FlexLayout/flexlayout_wrap.h")),Object(a.b)("p",null,"The JS Api looks like this:"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-js"}),'const view = new QWidget(rootView);\n\nconst flayout = new FlexLayout(); // Create layout\nflayout.setFlexNode(view.getFlexNode()); // Set widget\'s flex as layout\'s flex node.\n\nview.setLayout(flayout); // set layout as view\'s layout\n\nconst label = new QLabel(view);\nlabel.setText("Hello12321");\n\nconst label2 = new QLabel(view);\nlabel2.setText("SECOND LABEL");\n\nflayout.addWidget(label2, label2.getFlexNode()); // Add child to layout\nflayout.addWidget(label, label.getFlexNode()); // Add child to layout\n')),Object(a.b)("h3",{id:"implementation"},"Implementation"),Object(a.b)("ol",null,Object(a.b)("li",{parentName:"ol"},Object(a.b)("p",{parentName:"li"},"Every widget that wants to use flex layout should extend from ",Object(a.b)("inlineCode",{parentName:"p"},"flexItem")," found at ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/core/FlexLayout/flexitem.h"),".\nFor example, see ",Object(a.b)("inlineCode",{parentName:"p"},"nlabel.h")," at ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/QtWidgets/QLabel/nlabel.h")),Object(a.b)("p",{parentName:"li"},"NLabel inherits from ",Object(a.b)("inlineCode",{parentName:"p"},"NodeWidget")," which inherits from ",Object(a.b)("inlineCode",{parentName:"p"},"YogaWidget")," which inturn inherits from ",Object(a.b)("inlineCode",{parentName:"p"},"FlexItem")),Object(a.b)("ul",{parentName:"li"},Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"FlexItem")," adds a YogaNode to every widget."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"YogaWidget")," adds Yoga specific q-properties to the widget, which is useful to assign yoga properties via qstylesheet. More on this below."),Object(a.b)("li",{parentName:"ul"},Object(a.b)("inlineCode",{parentName:"li"},"NodeWidget")," adds layout support via ",Object(a.b)("inlineCode",{parentName:"li"},"YogaWidget")," and event handling support via ",Object(a.b)("inlineCode",{parentName:"li"},"EventWidget"))))),Object(a.b)("h3",{id:"flexitem"},"FlexItem"),Object(a.b)("p",null,"FlexItem : ",Object(a.b)("inlineCode",{parentName:"p"},"src/cpp/core/FlexLayout/flexitem.h")," add flexnode to each widget.\nFlexItem adds methods like getFlexNode."),Object(a.b)("h3",{id:"yogawidget"},"YogaWidget"),Object(a.b)("p",null,"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."),Object(a.b)("p",null,"So in order to enable yoga based properties like alignItems, justifyContent, flex, etc via qt's stylesheet we\ndeclare and define q properties for each of those custom properties we want.\nThis allows us to use something like:"),Object(a.b)("pre",null,Object(a.b)("code",i({parentName:"pre"},{className:"language-js"}),"view.setStyleSheet(`\n background-color:green;\n qproperty-flex: 1;\n qproperty-alignItems: 'center';\n`);\n")),Object(a.b)("p",null,"Notice ",Object(a.b)("inlineCode",{parentName:"p"},"qproperty-")," prefix? These are the custom q-properties we defined in ",Object(a.b)("inlineCode",{parentName:"p"},"YogaWidget.h"),". We do not need to prefix ",Object(a.b)("inlineCode",{parentName:"p"},"qproperty-")," if a stylehsheet string is passed through ",Object(a.b)("inlineCode",{parentName:"p"},"StyleSheet.create()"),". StyleSheet.create has an autoprefixer which will do the right thing."),Object(a.b)("h3",{id:"nodewidget"},"NodeWidget"),Object(a.b)("p",null,"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."))}d.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return p}));var a=n(0),i=n.n(a),o=i.a.createContext({}),l=function(e){var t=i.a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},r=function(e){var t=l(e.components);return i.a.createElement(o.Provider,{value:t},e.children)};var s="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return i.a.createElement(i.a.Fragment,{},t)}},d=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,r=e.parentName,s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),d=l(n),p=a,b=d[r+"."+p]||d[p]||c[p]||o;return n?i.a.createElement(b,Object.assign({},{ref:t},s,{components:n})):i.a.createElement(b,Object.assign({},{ref:t},s))}));function p(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var r={};for(var c in t)hasOwnProperty.call(t,c)&&(r[c]=t[c]);r.originalType=e,r[s]="string"==typeof e?e:a,l[1]=r;for(var p=2;p=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i={},c=[],p={rightToc:c},u="wrapper";function f(e){var n=e.components,r=a(e,["components"]);return Object(t.b)(u,o({},p,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("h1",{id:"exporting-a-new-method-from-a-widget"},"Exporting a new method from a widget"),Object(t.b)("h1",{id:"exporting-a-new-widget-from-scratch"},"Exporting a new widget from scratch"))}f.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return c})),r.d(n,"b",(function(){return l}));var t=r(0),o=r.n(t),a=o.a.createContext({}),i=function(e){var n=o.a.useContext(a),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},c=function(e){var n=i(e.components);return o.a.createElement(a.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},f=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,a=e.originalType,c=e.parentName,p=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),f=i(r),l=t,s=f[c+"."+l]||f[l]||u[l]||a;return r?o.a.createElement(s,Object.assign({},{ref:n},p,{components:r})):o.a.createElement(s,Object.assign({},{ref:n},p))}));function l(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var u in n)hasOwnProperty.call(n,u)&&(c[u]=n[u]);c.originalType=e,c[p]="string"==typeof e?e:t,i[1]=c;for(var l=2;l=0||(r[a]=e[a]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(r[a]=e[a])}return r}var b={id:"doc1",title:"Style Guide",sidebar_label:"Style Guide"},i=[{value:"Markdown Syntax",id:"markdown-syntax",children:[]},{value:"Headers",id:"headers",children:[]},{value:"H2 - Create the best documentation",id:"h2---create-the-best-documentation",children:[{value:"H3 - Create the best documentation",id:"h3---create-the-best-documentation",children:[]}]},{value:"Emphasis",id:"emphasis",children:[]},{value:"Lists",id:"lists",children:[]},{value:"Links",id:"links",children:[]},{value:"Images",id:"images",children:[]},{value:"Code",id:"code",children:[]},{value:"Tables",id:"tables",children:[]},{value:"Blockquotes",id:"blockquotes",children:[]},{value:"Inline HTML",id:"inline-html",children:[]},{value:"Line Breaks",id:"line-breaks",children:[]}],o={rightToc:i},c="wrapper";function s(e){var t=e.components,a=l(e,["components"]);return Object(n.b)(c,r({},o,a,{components:t,mdxType:"MDXLayout"}),Object(n.b)("p",null,"You can write content using ",Object(n.b)("a",r({parentName:"p"},{href:"https://github.github.com/gfm/"}),"GitHub-flavored Markdown syntax"),"."),Object(n.b)("h2",{id:"markdown-syntax"},"Markdown Syntax"),Object(n.b)("p",null,"To serve as an example page when styling markdown based Docusaurus sites."),Object(n.b)("h2",{id:"headers"},"Headers"),Object(n.b)("h1",{id:"h1---create-the-best-documentation"},"H1 - Create the best documentation"),Object(n.b)("h2",{id:"h2---create-the-best-documentation"},"H2 - Create the best documentation"),Object(n.b)("h3",{id:"h3---create-the-best-documentation"},"H3 - Create the best documentation"),Object(n.b)("h4",{id:"h4---create-the-best-documentation"},"H4 - Create the best documentation"),Object(n.b)("h5",{id:"h5---create-the-best-documentation"},"H5 - Create the best documentation"),Object(n.b)("h6",{id:"h6---create-the-best-documentation"},"H6 - Create the best documentation"),Object(n.b)("hr",null),Object(n.b)("h2",{id:"emphasis"},"Emphasis"),Object(n.b)("p",null,"Emphasis, aka italics, with ",Object(n.b)("em",{parentName:"p"},"asterisks")," or ",Object(n.b)("em",{parentName:"p"},"underscores"),"."),Object(n.b)("p",null,"Strong emphasis, aka bold, with ",Object(n.b)("strong",{parentName:"p"},"asterisks")," or ",Object(n.b)("strong",{parentName:"p"},"underscores"),"."),Object(n.b)("p",null,"Combined emphasis with ",Object(n.b)("strong",{parentName:"p"},"asterisks and ",Object(n.b)("em",{parentName:"strong"},"underscores")),"."),Object(n.b)("p",null,"Strikethrough uses two tildes. ",Object(n.b)("del",{parentName:"p"},"Scratch this.")),Object(n.b)("hr",null),Object(n.b)("h2",{id:"lists"},"Lists"),Object(n.b)("ol",null,Object(n.b)("li",{parentName:"ol"},"First ordered list item"),Object(n.b)("li",{parentName:"ol"},"Another item โ‹…โ‹…","*"," Unordered sub-list."),Object(n.b)("li",{parentName:"ol"},"Actual numbers don't matter, just that it's a number โ‹…โ‹…1. Ordered sub-list"),Object(n.b)("li",{parentName:"ol"},"And another item.")),Object(n.b)("p",null,"โ‹…โ‹…โ‹…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)."),Object(n.b)("p",null,"โ‹…โ‹…โ‹…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.)"),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},"Unordered list can use asterisks")),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},"Or minuses")),Object(n.b)("ul",null,Object(n.b)("li",{parentName:"ul"},"Or pluses")),Object(n.b)("hr",null),Object(n.b)("h2",{id:"links"},"Links"),Object(n.b)("p",null,Object(n.b)("a",r({parentName:"p"},{href:"https://www.google.com"}),"I'm an inline-style link")),Object(n.b)("p",null,Object(n.b)("a",r({parentName:"p"},{href:"https://www.google.com",title:"Google's Homepage"}),"I'm an inline-style link with title")),Object(n.b)("p",null,Object(n.b)("a",r({parentName:"p"},{href:"https://www.mozilla.org"}),"I'm a reference-style link")),Object(n.b)("p",null,Object(n.b)("a",r({parentName:"p"},{href:"../blob/master/LICENSE"}),"I'm a relative reference to a repository file")),Object(n.b)("p",null,Object(n.b)("a",r({parentName:"p"},{href:"http://slashdot.org"}),"You can use numbers for reference-style link definitions")),Object(n.b)("p",null,"Or leave it empty and use the ",Object(n.b)("a",r({parentName:"p"},{href:"http://www.reddit.com"}),"link text itself"),"."),Object(n.b)("p",null,"URLs and URLs in angle brackets will automatically get turned into links. ",Object(n.b)("a",r({parentName:"p"},{href:"http://www.example.com"}),"http://www.example.com")," or ",Object(n.b)("a",r({parentName:"p"},{href:"http://www.example.com"}),"http://www.example.com")," and sometimes example.com (but not on Github, for example)."),Object(n.b)("p",null,"Some text to show that the reference links can follow later."),Object(n.b)("hr",null),Object(n.b)("h2",{id:"images"},"Images"),Object(n.b)("p",null,"Here's our logo (hover to see the title text):"),Object(n.b)("p",null,"Inline-style: ",Object(n.b)("img",r({parentName:"p"},{src:"https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png",alt:"alt text",title:"Logo Title Text 1"}))),Object(n.b)("p",null,"Reference-style: ",Object(n.b)("img",r({parentName:"p"},{src:"https://github.com/adam-p/markdown-here/raw/master/src/common/images/icon48.png",alt:"alt text",title:"Logo Title Text 2"}))),Object(n.b)("hr",null),Object(n.b)("h2",{id:"code"},"Code"),Object(n.b)("pre",null,Object(n.b)("code",r({parentName:"pre"},{className:"language-javascript"}),"var s = 'JavaScript syntax highlighting';\nalert(s);\n")),Object(n.b)("pre",null,Object(n.b)("code",r({parentName:"pre"},{className:"language-python"}),'s = "Python syntax highlighting"\nprint s\n')),Object(n.b)("pre",null,Object(n.b)("code",r({parentName:"pre"},{}),"No language indicated, so no syntax highlighting.\nBut let's throw in a tag.\n")),Object(n.b)("hr",null),Object(n.b)("h2",{id:"tables"},"Tables"),Object(n.b)("p",null,"Colons can be used to align columns."),Object(n.b)("table",null,Object(n.b)("thead",{parentName:"table"},Object(n.b)("tr",{parentName:"thead"},Object(n.b)("th",r({parentName:"tr"},{align:null}),"Tables"),Object(n.b)("th",r({parentName:"tr"},{align:"center"}),"Are"),Object(n.b)("th",r({parentName:"tr"},{align:"right"}),"Cool"))),Object(n.b)("tbody",{parentName:"table"},Object(n.b)("tr",{parentName:"tbody"},Object(n.b)("td",r({parentName:"tr"},{align:null}),"col 3 is"),Object(n.b)("td",r({parentName:"tr"},{align:"center"}),"right-aligned"),Object(n.b)("td",r({parentName:"tr"},{align:"right"}),"$1600")),Object(n.b)("tr",{parentName:"tbody"},Object(n.b)("td",r({parentName:"tr"},{align:null}),"col 2 is"),Object(n.b)("td",r({parentName:"tr"},{align:"center"}),"centered"),Object(n.b)("td",r({parentName:"tr"},{align:"right"}),"$12")),Object(n.b)("tr",{parentName:"tbody"},Object(n.b)("td",r({parentName:"tr"},{align:null}),"zebra stripes"),Object(n.b)("td",r({parentName:"tr"},{align:"center"}),"are neat"),Object(n.b)("td",r({parentName:"tr"},{align:"right"}),"$1")))),Object(n.b)("p",null,"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."),Object(n.b)("table",null,Object(n.b)("thead",{parentName:"table"},Object(n.b)("tr",{parentName:"thead"},Object(n.b)("th",r({parentName:"tr"},{align:null}),"Markdown"),Object(n.b)("th",r({parentName:"tr"},{align:null}),"Less"),Object(n.b)("th",r({parentName:"tr"},{align:null}),"Pretty"))),Object(n.b)("tbody",{parentName:"table"},Object(n.b)("tr",{parentName:"tbody"},Object(n.b)("td",r({parentName:"tr"},{align:null}),Object(n.b)("em",{parentName:"td"},"Still")),Object(n.b)("td",r({parentName:"tr"},{align:null}),Object(n.b)("inlineCode",{parentName:"td"},"renders")),Object(n.b)("td",r({parentName:"tr"},{align:null}),Object(n.b)("strong",{parentName:"td"},"nicely"))),Object(n.b)("tr",{parentName:"tbody"},Object(n.b)("td",r({parentName:"tr"},{align:null}),"1"),Object(n.b)("td",r({parentName:"tr"},{align:null}),"2"),Object(n.b)("td",r({parentName:"tr"},{align:null}),"3")))),Object(n.b)("hr",null),Object(n.b)("h2",{id:"blockquotes"},"Blockquotes"),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"Blockquotes are very handy in email to emulate reply text. This line is part of the same quote.")),Object(n.b)("p",null,"Quote break."),Object(n.b)("blockquote",null,Object(n.b)("p",{parentName:"blockquote"},"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 ",Object(n.b)("em",{parentName:"p"},"put")," ",Object(n.b)("strong",{parentName:"p"},"Markdown")," into a blockquote.")),Object(n.b)("hr",null),Object(n.b)("h2",{id:"inline-html"},"Inline HTML"),Object(n.b)("dl",null,Object(n.b)("dt",null,"Definition list"),Object(n.b)("dd",null,"Is something people use sometimes."),Object(n.b)("dt",null,"Markdown in HTML"),Object(n.b)("dd",null,"Does *not* work **very** well. Use HTML ",Object(n.b)("em",null,"tags"),".")),Object(n.b)("hr",null),Object(n.b)("h2",{id:"line-breaks"},"Line Breaks"),Object(n.b)("p",null,"Here's a line for us to start with."),Object(n.b)("p",null,"This line is separated from the one above by two newlines, so it will be a ",Object(n.b)("em",{parentName:"p"},"separate paragraph"),"."),Object(n.b)("p",null,"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 ",Object(n.b)("em",{parentName:"p"},"same paragraph"),"."))}s.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-faq-048-db5.a3f7755c1443136d038e.js b/content---docs-faq-048-db5.a3f7755c1443136d038e.js new file mode 100644 index 000000000..b18127c87 --- /dev/null +++ b/content---docs-faq-048-db5.a3f7755c1443136d038e.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{161:function(e,t,n){"use strict";n.d(t,"a",(function(){return s})),n.d(t,"b",(function(){return d}));var a=n(0),r=n.n(a),i=r.a.createContext({}),o=function(e){var t=r.a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},s=function(e){var t=o(e.components);return r.a.createElement(i.Provider,{value:t},e.children)};var l="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},c=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,l=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),c=o(n),d=a,u=c[s+"."+d]||c[d]||p[d]||i;return n?r.a.createElement(u,Object.assign({},{ref:t},l,{components:n})):r.a.createElement(u,Object.assign({},{ref:t},l))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=c;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[l]="string"==typeof e?e:a,o[1]=s;for(var d=2;d=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o={title:"FAQ",sidebar_label:"FAQ"},s=[{value:"Why am I having trouble installing Qode?",id:"why-am-i-having-trouble-installing-qode",children:[]},{value:"Javascript widgets are missing methods and properties as compared to QT widget?",id:"javascript-widgets-are-missing-methods-and-properties-as-compared-to-qt-widget",children:[]},{value:"When will Qode upgrade to latest Node.js / Qt version?",id:"when-will-qode-upgrade-to-latest-nodejs--qt-version",children:[]},{value:"My app's window/widgets/tray disappeared after a few minutes.",id:"my-apps-windowwidgetstray-disappeared-after-a-few-minutes",children:[]}],l={rightToc:s},p="wrapper";function c(e){var t=e.components,n=i(e,["components"]);return Object(a.b)(p,r({},l,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("h2",{id:"why-am-i-having-trouble-installing-qode"},"Why am I having trouble installing Qode?"),Object(a.b)("p",null,"When running ",Object(a.b)("inlineCode",{parentName:"p"},"npm install @nodegui/qode"),", some users occasionally encounter\ninstallation errors."),Object(a.b)("p",null,"In almost all cases, these errors are the result of network problems and not\nactual issues with the ",Object(a.b)("inlineCode",{parentName:"p"},"@nodegui/qode")," npm package. Errors like ",Object(a.b)("inlineCode",{parentName:"p"},"ELIFECYCLE"),",\n",Object(a.b)("inlineCode",{parentName:"p"},"EAI_AGAIN"),", ",Object(a.b)("inlineCode",{parentName:"p"},"ECONNRESET"),", and ",Object(a.b)("inlineCode",{parentName:"p"},"ETIMEDOUT")," are all indications of such\nnetwork problems. The best resolution is to try switching networks, or\nwait a bit and try installing again."),Object(a.b)("p",null,"You can also attempt to download Qode directly from\n",Object(a.b)("a",r({parentName:"p"},{href:"https://github.com/nodegui/qode/releases"}),"nodegui/qode/releases"),"\nif installing via ",Object(a.b)("inlineCode",{parentName:"p"},"npm")," is failing."),Object(a.b)("h2",{id:"javascript-widgets-are-missing-methods-and-properties-as-compared-to-qt-widget"},"Javascript widgets are missing methods and properties as compared to QT widget?"),Object(a.b)("p",null,"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."),Object(a.b)("h2",{id:"when-will-qode-upgrade-to-latest-nodejs--qt-version"},"When will Qode upgrade to latest Node.js / Qt version?"),Object(a.b)("p",null,"When a new version of Node.js/Qt gets released, we usually wait for about a month\nbefore upgrading the one in Qode. So we can avoid getting affected by bugs\nintroduced in new Node.js/Qt versions, which happens very often."),Object(a.b)("h2",{id:"my-apps-windowwidgetstray-disappeared-after-a-few-minutes"},"My app's window/widgets/tray disappeared after a few minutes."),Object(a.b)("p",null,"This happens when the variable which is used to store the window/tray gets\ngarbage collected."),Object(a.b)("p",null,"If you encounter this problem, the following articles may prove helpful:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("a",r({parentName:"li"},{href:"https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management"}),"Memory Management")),Object(a.b)("li",{parentName:"ul"},Object(a.b)("a",r({parentName:"li"},{href:"https://msdn.microsoft.com/library/bzt2dkta(v=vs.94).aspx"}),"Variable Scope"))),Object(a.b)("p",null,"If you want a quick fix, you can make the variables global by changing your\ncode from this:"),Object(a.b)("pre",null,Object(a.b)("code",r({parentName:"pre"},{className:"language-javascript"}),'const { QWidget } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nview.setObjectName("container");\nview.setLayout(new FlexLayout());\n')),Object(a.b)("p",null,"to this:"),Object(a.b)("pre",null,Object(a.b)("code",r({parentName:"pre"},{className:"language-javascript"}),'const { QWidget } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nview.setObjectName("container");\nview.setLayout(new FlexLayout());\n\nglobal.view = view; //prevent GC\n')))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js b/content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js new file mode 100644 index 000000000..6a157e206 --- /dev/null +++ b/content---docs-guides-custom-nodegui-native-plugin-632-9db.ae1162899d532c588845.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{125:function(e,n,r){"use strict";r.r(n),r.d(n,"frontMatter",(function(){return i})),r.d(n,"rightToc",(function(){return c})),r.d(n,"default",(function(){return l}));r(0);var t=r(161);function o(){return(o=Object.assign||function(e){for(var n=1;n=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var i={sidebar_label:"Custom NodeGui Plugin",title:"Custom NodeGui Plugin"},c=[],u={rightToc:c},p="wrapper";function l(e){var n=e.components,r=a(e,["components"]);return Object(t.b)(p,o({},u,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"WIP"))}l.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return c})),r.d(n,"b",(function(){return f}));var t=r(0),o=r.n(t),a=o.a.createContext({}),i=function(e){var n=o.a.useContext(a),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},c=function(e){var n=i(e.components);return o.a.createElement(a.Provider,{value:n},e.children)};var u="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,a=e.originalType,c=e.parentName,u=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=i(r),f=t,s=l[c+"."+f]||l[f]||p[f]||a;return r?o.a.createElement(s,Object.assign({},{ref:n},u,{components:r})):o.a.createElement(s,Object.assign({},{ref:n},u))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var a=r.length,i=new Array(a);i[0]=l;var c={};for(var p in n)hasOwnProperty.call(n,p)&&(c[p]=n[p]);c.originalType=e,c[u]="string"==typeof e?e:t,i[1]=c;for(var f=2;f=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i={sidebar_label:"Debugging in VSCode",title:"Debugging in VSCode"},c=[],p={rightToc:c},u="wrapper";function l(e){var n=e.components,t=o(e,["components"]);return Object(r.b)(u,a({},p,t,{components:n,mdxType:"MDXLayout"}),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"Open a NodeGui project in VSCode.")),Object(r.b)("pre",{parentName:"li"},Object(r.b)("code",a({parentName:"pre"},{className:"language-sh"}),"$ git clone git@github.com:nodegui/nodegui-starter.git\n$ code nodegui-starter\n"))),Object(r.b)("li",{parentName:"ul"},Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"Add a file ",Object(r.b)("inlineCode",{parentName:"strong"},".vscode/launch.json")," with the following configuration:")),Object(r.b)("pre",{parentName:"li"},Object(r.b)("code",a({parentName:"pre"},{className:"language-json"}),'{\n "version": "0.2.0",\n "configurations": [\n {\n "name": "Debug Qode Process",\n "type": "node",\n "request": "launch",\n "cwd": "${workspaceRoot}",\n "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/qode",\n "windows": {\n "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/qode.exe"\n },\n "args": ["./dist/index.js"],\n "outputCapture": "std"\n }\n ]\n}\n')),Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"Tip"),": You could also configure a preLaunchTask for building typescript before launching the debugger everytime.")),Object(r.b)("li",{parentName:"ul"},Object(r.b)("p",{parentName:"li"},Object(r.b)("strong",{parentName:"p"},"Debugging")),Object(r.b)("p",{parentName:"li"},"Set some breakpoints in ",Object(r.b)("inlineCode",{parentName:"p"},"index.js"),", and start debugging in the ",Object(r.b)("a",a({parentName:"p"},{href:"https://code.visualstudio.com/docs/editor/debugging"}),"Debug View"),". You should be able to hit the breakpoints."))))}l.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return c})),t.d(n,"b",(function(){return b}));var r=t(0),a=t.n(r),o=a.a.createContext({}),i=function(e){var n=a.a.useContext(o),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},c=function(e){var n=i(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},l=Object(r.forwardRef)((function(e,n){var t=e.components,r=e.mdxType,o=e.originalType,c=e.parentName,p=function(e,n){var t={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===n.indexOf(r)&&(t[r]=e[r]);return t}(e,["components","mdxType","originalType","parentName"]),l=i(t),b=r,s=l[c+"."+b]||l[b]||u[b]||o;return t?a.a.createElement(s,Object.assign({},{ref:n},p,{components:t})):a.a.createElement(s,Object.assign({},{ref:n},p))}));function b(e,n){var t=arguments,r=n&&n.mdxType;if("string"==typeof e||r){var o=t.length,i=new Array(o);i[0]=l;var c={};for(var u in n)hasOwnProperty.call(n,u)&&(c[u]=n[u]);c.originalType=e,c[p]="string"==typeof e?e:r,i[1]=c;for(var b=2;b=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var a={sidebar_label:"Debugging",title:"Debugging"},c=[{value:"Application Debugging",id:"application-debugging",children:[]},{value:"Debugging Qode process",id:"debugging-qode-process",children:[{value:"Command Line Switches",id:"command-line-switches",children:[]},{value:"External Debuggers",id:"external-debuggers",children:[]}]}],p={rightToc:c},l="wrapper";function u(e){var n=e.components,t=i(e,["components"]);return Object(o.b)(l,r({},p,t,{components:n,mdxType:"MDXLayout"}),Object(o.b)("h2",{id:"application-debugging"},"Application Debugging"),Object(o.b)("p",null,"Whenever your NodeGui application is not behaving the way you wanted it to,\nan array of debugging tools might help you find coding errors, performance\nbottlenecks, or optimization opportunities."),Object(o.b)("p",null,"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\nOne of the most popular way of debugging a Node.Js app is by making use of the ",Object(o.b)("a",r({parentName:"p"},{href:"https://nodejs.org/en/docs/inspector/"}),"Chromium Developer Tools"),"."),Object(o.b)("p",null,"Google offers ",Object(o.b)("a",r({parentName:"p"},{href:"https://developer.chrome.com/devtools"}),"excellent documentation for their developer tools"),".\nWe recommend that you make yourself familiar with them - they are usually one\nof the most powerful utilities in any NodeGui Developer's tool belt."),Object(o.b)("h2",{id:"debugging-qode-process"},"Debugging Qode process"),Object(o.b)("p",null,"To debug JavaScript that's executed in the Qode/Node process you will need to use an external debugger and\nlaunch Qode with the ",Object(o.b)("inlineCode",{parentName:"p"},"--inspect")," or ",Object(o.b)("inlineCode",{parentName:"p"},"--inspect-brk")," switch. Once you run it you can open up Chrome and visit ",Object(o.b)("inlineCode",{parentName:"p"},"chrome://inspect")," where you should see your app listed."),Object(o.b)("h3",{id:"command-line-switches"},"Command Line Switches"),Object(o.b)("p",null,"Use one of the following command line switches to enable debugging of the process:"),Object(o.b)("h4",{id:"--inspectport"},Object(o.b)("inlineCode",{parentName:"h4"},"--inspect=[port]")),Object(o.b)("p",null,"Qode will listen for V8 inspector protocol messages on the specified ",Object(o.b)("inlineCode",{parentName:"p"},"port"),",\nan external debugger will need to connect on this port. The default ",Object(o.b)("inlineCode",{parentName:"p"},"port")," is\n",Object(o.b)("inlineCode",{parentName:"p"},"9229"),"."),Object(o.b)("pre",null,Object(o.b)("code",r({parentName:"pre"},{className:"language-shell"}),"qode --inspect=9229 your/app\n")),Object(o.b)("h4",{id:"--inspect-brkport"},Object(o.b)("inlineCode",{parentName:"h4"},"--inspect-brk=[port]")),Object(o.b)("p",null,"Like ",Object(o.b)("inlineCode",{parentName:"p"},"--inspect")," but pauses execution on the first line of JavaScript."),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Note")),Object(o.b)("p",null,"If you are using the official boilerplate ",Object(o.b)("inlineCode",{parentName:"p"},"nodegui-starter"),", then you can achieve this by running"),Object(o.b)("pre",null,Object(o.b)("code",r({parentName:"pre"},{}),"npm run debug\n")),Object(o.b)("h3",{id:"external-debuggers"},"External Debuggers"),Object(o.b)("p",null,"You will need to use a debugger that supports the V8 inspector protocol."),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Connect Chrome by visiting ",Object(o.b)("inlineCode",{parentName:"li"},"chrome://inspect")," and selecting to inspect the\nlaunched NodeGui app present there."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("a",r({parentName:"li"},{href:"/docs/guides/debugging-in-vscode"}),"Debugging the NodeGui app in VSCode"))))}u.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return c})),t.d(n,"b",(function(){return s}));var o=t(0),r=t.n(o),i=r.a.createContext({}),a=function(e){var n=r.a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},c=function(e){var n=a(e.components);return r.a.createElement(i.Provider,{value:n},e.children)};var p="mdxType",l={inlineCode:"code",wrapper:function(e){var n=e.children;return r.a.createElement(r.a.Fragment,{},n)}},u=Object(o.forwardRef)((function(e,n){var t=e.components,o=e.mdxType,i=e.originalType,c=e.parentName,p=function(e,n){var t={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===n.indexOf(o)&&(t[o]=e[o]);return t}(e,["components","mdxType","originalType","parentName"]),u=a(t),s=o,b=u[c+"."+s]||u[s]||l[s]||i;return t?r.a.createElement(b,Object.assign({},{ref:n},p,{components:t})):r.a.createElement(b,Object.assign({},{ref:n},p))}));function s(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var i=t.length,a=new Array(i);a[0]=u;var c={};for(var l in n)hasOwnProperty.call(n,l)&&(c[l]=n[l]);c.originalType=e,c[p]="string"==typeof e?e:o,a[1]=c;for(var s=2;s=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var i={sidebar_label:"Getting started",title:"Getting started"},l=[{value:"Developer environment",id:"developer-environment",children:[{value:"Setting up on macOS",id:"setting-up-on-macos",children:[]},{value:"Setting up on Windows",id:"setting-up-on-windows",children:[]},{value:"Setting up on Linux",id:"setting-up-on-linux",children:[]},{value:"A Good Editor",id:"a-good-editor",children:[]},{value:"Hello World",id:"hello-world",children:[]},{value:"Now what?",id:"now-what",children:[]}]}],s={rightToc:l},p="wrapper";function u(e){var t=e.components,n=r(e,["components"]);return Object(o.b)(p,a({},s,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"NodeGui enables you to create desktop applications with JavaScript. You could see it\nas a lightly modified variant of the Node.js runtime that is focused on desktop applications\ninstead of web servers."),Object(o.b)("p",null,"NodeGui is also an efficient JavaScript binding to a cross platform graphical user interface\n(GUI) library ",Object(o.b)("inlineCode",{parentName:"p"},"Qt"),". Qt is one of the most mature and efficient library for building desktop applications.\nThis 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."),Object(o.b)("h2",{id:"developer-environment"},"Developer environment"),Object(o.b)("p",null,"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."),Object(o.b)("p",null,"Along with these, there are a few operating system dependent instructions that are listed below."),Object(o.b)("h3",{id:"setting-up-on-macos"},"Setting up on macOS"),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Requirements:")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"NodeGui supports macOS 10.10 (Yosemite) and up. NodeGui currently only supports 64bit OS."),Object(o.b)("li",{parentName:"ul"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(o.b)("a",a({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(o.b)("li",{parentName:"ul"},"Make, GCC v7"),Object(o.b)("li",{parentName:"ul"},"Currently supported Node.Js versions are 12.x and up.")),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"nvm"),": ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/nvm-sh/nvm"}),"https://github.com/nvm-sh/nvm")),Object(o.b)("p",null,"Confirm that both ",Object(o.b)("inlineCode",{parentName:"p"},"node")," and ",Object(o.b)("inlineCode",{parentName:"p"},"npm")," are available by running:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-sh"}),"# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\n")),Object(o.b)("p",null,"If both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a ",Object(o.b)("a",a({parentName:"p"},{href:"#a-good-editor"}),"code editor")," suited\nfor JavaScript development."),Object(o.b)("h3",{id:"setting-up-on-windows"},"Setting up on Windows"),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"NodeGui supports Windows 7 and later versions โ€“ย attempting to develop NodeGui\napplications on earlier versions of Windows might not work. NodeGui currently only supports 64bit OS.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Requirements:")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Visual studio 2017 and up."),Object(o.b)("li",{parentName:"ul"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(o.b)("a",a({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(o.b)("li",{parentName:"ul"},"Currently supported Node.Js versions are 12.x and up.")),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"nvm"),": ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/nvm-sh/nvm"}),"https://github.com/nvm-sh/nvm")),Object(o.b)("p",null,"We strongly recommend Powershell as preferred terminal in Windows."),Object(o.b)("p",null,"Confirm that both ",Object(o.b)("inlineCode",{parentName:"p"},"node")," and ",Object(o.b)("inlineCode",{parentName:"p"},"npm")," are available by running:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-powershell"}),"# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\n")),Object(o.b)("p",null,"If both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a ",Object(o.b)("a",a({parentName:"p"},{href:"#a-good-editor"}),"code editor")," suited\nfor JavaScript development."),Object(o.b)("h3",{id:"setting-up-on-linux"},"Setting up on Linux"),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"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.")),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Requirements:")),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"Make, GCC v7"),Object(o.b)("li",{parentName:"ul"},"CMake 3.1 and up (Installation instructions can be found here: ",Object(o.b)("a",a({parentName:"li"},{href:"https://cmake.org/install/"}),"https://cmake.org/install/"),")"),Object(o.b)("li",{parentName:"ul"},"Currently supported Node.Js versions are 12.x and up."),Object(o.b)("li",{parentName:"ul"},"On Ubuntu and Ubuntu-based distros it is advisable to run ",Object(o.b)("inlineCode",{parentName:"li"},"sudo apt-get update"),", followed by ",Object(o.b)("inlineCode",{parentName:"li"},"sudo apt-get install pkg-config build-essential"))),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"nvm"),": ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/nvm-sh/nvm"}),"https://github.com/nvm-sh/nvm")),Object(o.b)("p",null,"Confirm that both ",Object(o.b)("inlineCode",{parentName:"p"},"node")," and ",Object(o.b)("inlineCode",{parentName:"p"},"npm")," are available by running:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-sh"}),"# This command should print the version of Node.js\nnode -v\n\n# This command should print the version of npm\nnpm -v\n")),Object(o.b)("p",null,"If both commands printed a version number, you are all set! Before you get\nstarted, you might want to install a ",Object(o.b)("a",a({parentName:"p"},{href:"#a-good-editor"}),"code editor")," suited\nfor JavaScript development."),Object(o.b)("h3",{id:"a-good-editor"},"A Good Editor"),Object(o.b)("p",null,"We might suggest two free popular editors:\nGitHub's ",Object(o.b)("a",a({parentName:"p"},{href:"https://atom.io/"}),"Atom")," and Microsoft's ",Object(o.b)("a",a({parentName:"p"},{href:"https://code.visualstudio.com/"}),"Visual Studio Code"),". Both of\nthem have excellent JavaScript support."),Object(o.b)("p",null,"If you are one of the many developers with a strong preference, know that\nvirtually all code editors and IDEs these days support JavaScript."),Object(o.b)("h3",{id:"hello-world"},"Hello World"),Object(o.b)("p",null,"Clone and run the code in this tutorial by using the\n",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/nodegui-starter"}),Object(o.b)("inlineCode",{parentName:"a"},"nodegui/nodegui-starter"))," repository."),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Note"),": Running this requires ",Object(o.b)("a",a({parentName:"p"},{href:"https://git-scm.com"}),"Git")," and ",Object(o.b)("a",a({parentName:"p"},{href:"https://www.npmjs.com/"}),"npm"),"."),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-sh"}),"# Clone the repository\n$ git clone https://github.com/nodegui/nodegui-starter\n# Go into the repository\n$ cd nodegui-starter\n# Install dependencies\n$ npm install\n# Run the app\n$ npm start\n")),Object(o.b)("p",null,"That's it!"),Object(o.b)("p",null,"Congratulations! You've successfully run and modified your first NodeGui app."),Object(o.b)("h3",{id:"now-what"},"Now what?"),Object(o.b)("p",null,"If you're curious to learn more about NodeGui, continue on to the ",Object(o.b)("a",a({parentName:"p"},{href:"/docs/guides/tutorial"}),"tutorial"),"."))}u.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return l})),n.d(t,"b",(function(){return c}));var o=n(0),a=n.n(o),r=a.a.createContext({}),i=function(e){var t=a.a.useContext(r),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},l=function(e){var t=i(e.components);return a.a.createElement(r.Provider,{value:t},e.children)};var s="mdxType",p={inlineCode:"code",wrapper:function(e){var t=e.children;return a.a.createElement(a.a.Fragment,{},t)}},u=Object(o.forwardRef)((function(e,t){var n=e.components,o=e.mdxType,r=e.originalType,l=e.parentName,s=function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}(e,["components","mdxType","originalType","parentName"]),u=i(n),c=o,d=u[l+"."+c]||u[c]||p[c]||r;return n?a.a.createElement(d,Object.assign({},{ref:t},s,{components:n})):a.a.createElement(d,Object.assign({},{ref:t},s))}));function c(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var r=n.length,i=new Array(r);i[0]=u;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[s]="string"==typeof e?e:o,i[1]=l;for(var c=2;c=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c={sidebar_label:"Handle Events",title:"Handle Events"},i=[],p={rightToc:i},u="wrapper";function l(e){var n=e.components,r=o(e,["components"]);return Object(t.b)(u,a({},p,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"WIP"))}l.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return i})),r.d(n,"b",(function(){return f}));var t=r(0),a=r.n(t),o=a.a.createContext({}),c=function(e){var n=a.a.useContext(o),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},i=function(e){var n=c(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,o=e.originalType,i=e.parentName,p=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=c(r),f=t,s=l[i+"."+f]||l[f]||u[f]||o;return r?a.a.createElement(s,Object.assign({},{ref:n},p,{components:r})):a.a.createElement(s,Object.assign({},{ref:n},p))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=r.length,c=new Array(o);c[0]=l;var i={};for(var u in n)hasOwnProperty.call(n,u)&&(i[u]=n[u]);i.originalType=e,i[p]="string"==typeof e?e:t,c[1]=i;for(var f=2;f=0||(a[r]=e[r]);return a}(e,n);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var c={sidebar_label:"Images",title:"Images"},i=[],p={rightToc:i},u="wrapper";function l(e){var n=e.components,r=o(e,["components"]);return Object(t.b)(u,a({},p,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"WIP"))}l.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return i})),r.d(n,"b",(function(){return f}));var t=r(0),a=r.n(t),o=a.a.createContext({}),c=function(e){var n=a.a.useContext(o),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},i=function(e){var n=c(e.components);return a.a.createElement(o.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,o=e.originalType,i=e.parentName,p=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=c(r),f=t,s=l[i+"."+f]||l[f]||u[f]||o;return r?a.a.createElement(s,Object.assign({},{ref:n},p,{components:r})):a.a.createElement(s,Object.assign({},{ref:n},p))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var o=r.length,c=new Array(o);c[0]=l;var i={};for(var u in n)hasOwnProperty.call(n,u)&&(i[u]=n[u]);i.originalType=e,i[p]="string"==typeof e?e:t,c[1]=i;for(var f=2;f=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l={sidebar_label:"Layout",title:"Layout"},r=[{value:"Fixed Dimensions",id:"fixed-dimensions",children:[]},{value:"Dynamic Layouts",id:"dynamic-layouts",children:[]},{value:"FlexLayout",id:"flexlayout",children:[{value:"Example:",id:"example",children:[]},{value:"TLDR",id:"tldr",children:[]}]},{value:"Conclusion",id:"conclusion",children:[]}],s={rightToc:r},c="wrapper";function u(e){var t=e.components,n=i(e,["components"]);return Object(a.b)(c,o({},s,n,{components:t,mdxType:"MDXLayout"}),Object(a.b)("p",null,"NodeGui uses a layout system to automatically arranging child widgets within a widget to ensure that they make good use of the available space."),Object(a.b)("h2",{id:"fixed-dimensions"},"Fixed Dimensions"),Object(a.b)("p",null,"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."),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'\nconst { QMainWindow, QWidget } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\nconst view = new QWidget(win);\n\nview.setInlineStyle("width:50px; height:30px; background-color: yellow;");\n\nwin.show();\n(global as any).win = win;\n\n')),Object(a.b)("h2",{id:"dynamic-layouts"},"Dynamic Layouts"),Object(a.b)("p",null,"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."),Object(a.b)("p",null,"NodeGui currently supports the following layouts at the moment:"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"FlexLayout"),Object(a.b)("li",{parentName:"ul"},"QGridLayout")),Object(a.b)("p",null,Object(a.b)("em",{parentName:"p"},"More layouts will be added as time goes on. You can also add layouts yourself by creating custom native plugins for NodeGui usng the ",Object(a.b)("a",o({parentName:"em"},{href:"/docs/guides/custom-nodegui-native-plugin"}),"Custom Native Plugin API."))),Object(a.b)("h2",{id:"flexlayout"},"FlexLayout"),Object(a.b)("p",null,"Use FlexLayout to have the children expand and shrink dynamically based on available space. Normally you will use ",Object(a.b)("inlineCode",{parentName:"p"},"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."),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"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.")),Object(a.b)("p",null,"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."),Object(a.b)("h3",{id:"example"},"Example:"),Object(a.b)("p",null,"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."),Object(a.b)("img",{src:"/img/docs/flex-layout-1.png",alt:"flex layout example 1",style:{maxWidth:700,width:"100%"}}),Object(a.b)("p",null,"The code for that would look something like this:"),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'let { QLabel, FlexLayout, QWidget, QMainWindow } = require("@nodegui/nodegui");\n\n// Create a root view and assign a flex layout to it.\nconst rootView = new QWidget();\nrootView.setLayout(new FlexLayout());\nrootView.setObjectName("rootView");\n\n// Create two widgets - one label and one view\nconst label = new QLabel();\nlabel.setText("Hello");\nlabel.setObjectName("label");\n\nconst view = new QWidget();\nview.setObjectName("view");\n\n// Now tell rootView layout that the label and the other view are its children\nrootView.layout.addWidget(label);\nrootView.layout.addWidget(view);\n\n// Tell FlexLayout how you want children of rootView to be poisitioned\nrootView.setStyleSheet(`\n #rootView{\n flex: 1;\n background-color: blue;\n }\n #label {\n flex: 1;\n color: white;\n background-color: green;\n }\n #view {\n flex: 3;\n background-color: white;\n }\n`);\n\nconst win = new QMainWindow();\nwin.setCentralWidget(rootView);\nwin.show();\nglobal.win = win;\n')),Object(a.b)("h3",{id:"tldr"},"TLDR"),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},"First step is to set a layout on the parent widget. You can do this using the widget's ",Object(a.b)("inlineCode",{parentName:"p"},"setLayout")," method. Here we are using FlexLayout.")),Object(a.b)("li",{parentName:"ul"},Object(a.b)("p",{parentName:"li"},"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 ",Object(a.b)("inlineCode",{parentName:"p"},"addWidget")," method. In the case of FlexLayout you will specify properties by setting flex properties on the parent and child widgets."))),Object(a.b)("blockquote",null,Object(a.b)("p",{parentName:"blockquote"},"To know more on how FlexBox layout works in depth you can visit: ",Object(a.b)("a",o({parentName:"p"},{href:"https://facebook.github.io/react-native/docs/0.60/flexbox"}),"https://facebook.github.io/react-native/docs/0.60/flexbox"),"."),Object(a.b)("p",{parentName:"blockquote"},"NodeGui uses the same library that React Native uses underneath for FlexBox (",Object(a.b)("a",o({parentName:"p"},{href:"https://github.com/facebook/yoga"}),"Yoga"),").")),Object(a.b)("ul",null,Object(a.b)("li",{parentName:"ul"},"You can specify layout properties via inline styles also.")),Object(a.b)("h2",{id:"conclusion"},"Conclusion"),Object(a.b)("p",null,"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."),Object(a.b)("p",null,"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 ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/guides/custom-nodegui-native-plugin"}),"native plugin for NodeGui")," 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."))}u.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return r})),n.d(t,"b",(function(){return d}));var a=n(0),o=n.n(a),i=o.a.createContext({}),l=function(e){var t=o.a.useContext(i),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},r=function(e){var t=l(e.components);return o.a.createElement(i.Provider,{value:t},e.children)};var s="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return o.a.createElement(o.a.Fragment,{},t)}},u=Object(a.forwardRef)((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,r=e.parentName,s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===t.indexOf(a)&&(n[a]=e[a]);return n}(e,["components","mdxType","originalType","parentName"]),u=l(n),d=a,b=u[r+"."+d]||u[d]||c[d]||i;return n?o.a.createElement(b,Object.assign({},{ref:t},s,{components:n})):o.a.createElement(b,Object.assign({},{ref:t},s))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,l=new Array(i);l[0]=u;var r={};for(var c in t)hasOwnProperty.call(t,c)&&(r[c]=t[c]);r.originalType=e,r[s]="string"==typeof e?e:a,l[1]=r;for(var d=2;d=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c={sidebar_label:"Networking",title:"Networking"},i=[],p={rightToc:i},u="wrapper";function l(e){var n=e.components,r=a(e,["components"]);return Object(t.b)(u,o({},p,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"WIP"))}l.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return i})),r.d(n,"b",(function(){return f}));var t=r(0),o=r.n(t),a=o.a.createContext({}),c=function(e){var n=o.a.useContext(a),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},i=function(e){var n=c(e.components);return o.a.createElement(a.Provider,{value:n},e.children)};var p="mdxType",u={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},l=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,a=e.originalType,i=e.parentName,p=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),l=c(r),f=t,s=l[i+"."+f]||l[f]||u[f]||a;return r?o.a.createElement(s,Object.assign({},{ref:n},p,{components:r})):o.a.createElement(s,Object.assign({},{ref:n},p))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var a=r.length,c=new Array(a);c[0]=l;var i={};for(var u in n)hasOwnProperty.call(n,u)&&(i[u]=n[u]);i.originalType=e,i[p]="string"==typeof e?e:t,c[1]=i;for(var f=2;f=0||(a[t]=e[t]);return a}(e,n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(a[t]=e[t])}return a}var i={sidebar_label:"Architecture",title:"Architecture"},s=[{value:"Qode",id:"qode",children:[]},{value:"Using NodeGui APIs",id:"using-nodegui-apis",children:[]},{value:"Using Nodejs APIs",id:"using-nodejs-apis",children:[]}],l={rightToc:s},c="wrapper";function d(e){var n=e.components,t=r(e,["components"]);return Object(o.b)(c,a({},l,t,{components:n,mdxType:"MDXLayout"}),Object(o.b)("p",null,"By looking at how NodeGui works internally, we would get a clear picture on why the APIs are designed the way they are."),Object(o.b)("h2",{id:"qode"},"Qode"),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"QApplication")," before creating widgets. The way we do it in C++ Qt application is (dont worry if it doesnt make sense right now):"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-cpp"}),' #include \n #include \n\n int main(int argc, char *argv[])\n {\n QApplication app(argc, argv); // Important\n\n QPushButton hello("Hello world!");\n hello.resize(100, 30);\n hello.show();\n\n return app.exec(); // Important\n }\n')),Object(o.b)("p",null,"Like many Gui libraries Qt uses an event/message loop to handle events from widgets. Hence, when we call ",Object(o.b)("inlineCode",{parentName:"p"},"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."),Object(o.b)("p",null,"Then following questions arise:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"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."),Object(o.b)("li",{parentName:"ul"},Object(o.b)("strong",{parentName:"li"},"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.")),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"Qode"),"."),Object(o.b)("p",null,"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 ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/yue"}),"other")," Gui libraries developed by ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/zcbenz"}),"zcbenz (Cheng Zhao)"),". It has been detailed in a post here: ",Object(o.b)("a",a({parentName:"p"},{href:"https://electronjs.org/blog/electron-internals-node-integration"}),"Electron internals"),". Hence, we reused the logic from electron to achieve smooth integration between Qt and NodeJs."),Object(o.b)("p",null,"The idea is to release a corresponding Qode binary for every NodeJs version that comes out after Node v12.6.\nThe source code of Qode can be found ",Object(o.b)("a",a({parentName:"p"},{href:"https://github.com/nodegui/qode"}),"here"),"."),Object(o.b)("p",null,Object(o.b)("em",{parentName:"p"},"*","PS: Qode is a fork of ",Object(o.b)("a",a({parentName:"em"},{href:"https://github.com/yue/yode"}),"Yode"))),Object(o.b)("h2",{id:"using-nodegui-apis"},"Using NodeGui APIs"),Object(o.b)("p",null,"NodeGui offers a number of APIs that support the development of a desktop\napplication. You'd access NodeGui's APIs by requiring its included module:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'require("@nodegui/nodegui");\n')),Object(o.b)("p",null,"A window in NodeGui is for instance created using the ",Object(o.b)("inlineCode",{parentName:"p"},"QMainWindow"),"\nclass."),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'const { QMainWindow } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n')),Object(o.b)("h2",{id:"using-nodejs-apis"},"Using Nodejs APIs"),Object(o.b)("p",null,"NodeGui exposes full access to Node.js. This has two important implications:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"All APIs available in Node.js are available in NodeGui. Calling the\nfollowing code from an NodeGui app works:")),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-javascript"}),"const fs = require(\"fs\");\n\nconst root = fs.readdirSync(\"/\");\n\n// This will print all files at the root-level of the disk,\n// either '/' or 'C:\\'.\nconsole.log(root);\n")),Object(o.b)("ol",{start:2},Object(o.b)("li",{parentName:"ol"},"You can use Node.js modules in your application. Pick your favorite npm\nmodule. npm offers currently the world's biggest repository of open-source\ncode โ€“ย the ability to use well-maintained and tested code that used to be\nreserved for server applications is one of the key features of NodeGui.")),Object(o.b)("p",null,"As an example, to use the official AWS SDK in your application, you'd first\ninstall it as a dependency:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-sh"}),"npm install --save aws-sdk\n")),Object(o.b)("p",null,"Then, in your NodeGui app, require and use the module as if you were\nbuilding a Node.js application:"),Object(o.b)("pre",null,Object(o.b)("code",a({parentName:"pre"},{className:"language-javascript"}),'// A ready-to-use S3 Client\nconst S3 = require("aws-sdk/clients/s3");\n')),Object(o.b)("p",null,"There is one important caveat: Native Node.js modules (that is, modules that\nrequire compilation of native code before they can be used) will need to be\ncompiled with Qode or a compatible Node version to be used with NodeGui."),Object(o.b)("p",null,"The vast majority of Node.js modules are ",Object(o.b)("em",{parentName:"p"},"not")," native. Only 400 out of the\n~650.000 modules are native. However, if you do need native modules, please\nconsult ",Object(o.b)("a",a({parentName:"p"},{href:"/docs/guides/using-native-node-modules"}),"this guide on how to recompile them for NodeGui"),"."))}d.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return s})),t.d(n,"b",(function(){return p}));var o=t(0),a=t.n(o),r=a.a.createContext({}),i=function(e){var n=a.a.useContext(r),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},s=function(e){var n=i(e.components);return a.a.createElement(r.Provider,{value:n},e.children)};var l="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return a.a.createElement(a.a.Fragment,{},n)}},d=Object(o.forwardRef)((function(e,n){var t=e.components,o=e.mdxType,r=e.originalType,s=e.parentName,l=function(e,n){var t={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===n.indexOf(o)&&(t[o]=e[o]);return t}(e,["components","mdxType","originalType","parentName"]),d=i(t),p=o,u=d[s+"."+p]||d[p]||c[p]||r;return t?a.a.createElement(u,Object.assign({},{ref:n},l,{components:t})):a.a.createElement(u,Object.assign({},{ref:n},l))}));function p(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var r=t.length,i=new Array(r);i[0]=d;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s[l]="string"==typeof e?e:o,i[1]=s;for(var p=2;p=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c={sidebar_label:"Scroll View",title:"Scroll View"},i=[],l={rightToc:i},p="wrapper";function u(e){var n=e.components,r=a(e,["components"]);return Object(t.b)(p,o({},l,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"WIP"))}u.isMDXComponent=!0},161:function(e,n,r){"use strict";r.d(n,"a",(function(){return i})),r.d(n,"b",(function(){return f}));var t=r(0),o=r.n(t),a=o.a.createContext({}),c=function(e){var n=o.a.useContext(a),r=n;return e&&(r="function"==typeof e?e(n):Object.assign({},n,e)),r},i=function(e){var n=c(e.components);return o.a.createElement(a.Provider,{value:n},e.children)};var l="mdxType",p={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},u=Object(t.forwardRef)((function(e,n){var r=e.components,t=e.mdxType,a=e.originalType,i=e.parentName,l=function(e,n){var r={};for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&-1===n.indexOf(t)&&(r[t]=e[t]);return r}(e,["components","mdxType","originalType","parentName"]),u=c(r),f=t,s=u[i+"."+f]||u[f]||p[f]||a;return r?o.a.createElement(s,Object.assign({},{ref:n},l,{components:r})):o.a.createElement(s,Object.assign({},{ref:n},l))}));function f(e,n){var r=arguments,t=n&&n.mdxType;if("string"==typeof e||t){var a=r.length,c=new Array(a);c[0]=u;var i={};for(var p in n)hasOwnProperty.call(n,p)&&(i[p]=n[p]);i.originalType=e,i[l]="string"==typeof e?e:t,c[1]=i;for(var f=2;f=0||(l[n]=e[n]);return l}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(l[n]=e[n])}return l}var a={sidebar_label:"Styling",title:"Styling"},i=[{value:"Overview",id:"overview",children:[]},{value:"Global styles",id:"global-styles",children:[]},{value:"Inline styles",id:"inline-styles",children:[]},{value:"Selectors",id:"selectors",children:[]},{value:"Pseudo states",id:"pseudo-states",children:[]},{value:"Cascading",id:"cascading",children:[]},{value:"Supported properties",id:"supported-properties",children:[]},{value:"Advanced usage (Setting QObject Properties)",id:"advanced-usage-setting-qobject-properties",children:[]}],r={rightToc:i},c="wrapper";function p(e){var t=e.components,n=s(e,["components"]);return Object(o.b)(c,l({},r,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"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 ",Object(o.b)("inlineCode",{parentName:"p"},"setInlineStyle")," for setting inline styles for the respective widget. The style names and values usually match how CSS works on the web."),Object(o.b)("p",null,"Here's an example:"),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-js"}),'const { QLabel, QMainWindow } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n\nconst label = new QLabel(win);\nlabel.setText("Hello world");\nlabel.setInlineStyle("color: green; background-color: white;");\n\nwin.show();\nglobal.win = win;\n')),Object(o.b)("h2",{id:"overview"},"Overview"),Object(o.b)("p",null,"NodeGui makes use of ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html"}),"Qt's stylesheet")," 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 ",Object(o.b)("a",l({parentName:"p"},{href:"https://github.com/facebook/yoga"}),"facebook's yoga library"),"."),Object(o.b)("p",null,"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)."),Object(o.b)("h2",{id:"global-styles"},"Global styles"),Object(o.b)("p",null,"Lets take a look at an example:"),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-js"}),'const { QLabel, FlexLayout, QWidget } = require("@nodegui/nodegui");\n\nconst view = new QWidget();\nview.setObjectName("rootView");\nview.setLayout(new FlexLayout());\n\nconst label = new QLabel();\nlabel.setObjectName("helloLabel");\nlabel.setText("Hello");\n\nconst label2 = new QLabel();\nlabel2.setObjectName("worldLabel");\nlabel2.setText("World");\n\nview.layout.addWidget(label);\nview.layout.addWidget(label2);\n\nview.setStyleSheet(`\n #helloLabel {\n color: red;\n padding: 10px;\n }\n #worldLabel {\n color: green;\n padding: 10px;\n }\n #rootView {\n background-color: black;\n }\n`);\nview.show();\n(global as any).view = view;\n\n')),Object(o.b)("p",null,"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."),Object(o.b)("p",null,"In the above example, in order to reference a widget in a stylesheet we will assign it a ",Object(o.b)("inlineCode",{parentName:"p"},"objectName")," using setObjectName instance method. Think of objectName as something similar to an ",Object(o.b)("inlineCode",{parentName:"p"},"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."),Object(o.b)("p",null,"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."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"More details on all the features and the syntax can be found here: ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html"}),"https://doc.qt.io/qt-5/stylesheet-syntax.html"))),Object(o.b)("h2",{id:"inline-styles"},"Inline styles"),Object(o.b)("p",null,"Lets look at this example again:"),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-js"}),'const { QLabel, QMainWindow } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\n\nconst label = new QLabel(win);\nlabel.setText("Hello world");\nlabel.setInlineStyle("color: green; background-color: white;");\n\nwin.show();\nglobal.win = win;\n')),Object(o.b)("p",null,"In most cases it would be easier to style the widgets inline. NodeGui supports inline styling using ",Object(o.b)("inlineCode",{parentName:"p"},"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."),Object(o.b)("h2",{id:"selectors"},"Selectors"),Object(o.b)("p",null,"NodeGui style sheets support all the selectors defined in CSS2.\nSome examples include:"),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-css"}),"* {\n color: blue;\n}\n\nQPushButton {\n padding: 10px;\n}\n\n#okButton {\n margin: 10px;\n}\n\n#mainView > QPushButton {\n margin: 10px;\n}\n")),Object(o.b)("p",null,"To see a complete list of selectors see here: ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html#selector-types"}),"https://doc.qt.io/qt-5/stylesheet-syntax.html#selector-types")),Object(o.b)("h2",{id:"pseudo-states"},"Pseudo states"),Object(o.b)("p",null,"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."),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-css"}),"#okButton:hover {\n color: red;\n}\n")),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"More details here : ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html#pseudo-states"}),"https://doc.qt.io/qt-5/stylesheet-syntax.html#pseudo-states"))),Object(o.b)("h2",{id:"cascading"},"Cascading"),Object(o.b)("p",null,"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.)."),Object(o.b)("p",null,"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."),Object(o.b)("p",null,"The behaviour is similar to what we see on the web."),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"For more in depth examples see here: ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html#cascading"}),"https://doc.qt.io/qt-5/stylesheet-syntax.html#cascading"))),Object(o.b)("h2",{id:"supported-properties"},"Supported properties"),Object(o.b)("p",null,"Since we are not running inside a web browser, there are few differences in the properties you could use in NodeGui vs in web."),Object(o.b)("p",null,"The complete list is detailed here: ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-reference.html#list-of-properties"}),"https://doc.qt.io/qt-5/stylesheet-reference.html#list-of-properties")),Object(o.b)("p",null,"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. ",Object(o.b)("a",l({parentName:"p"},{href:"/docs/guides/layout"}),"The layout styling will be coverted in more detail in the section: Layout.")),Object(o.b)("h2",{id:"advanced-usage-setting-qobject-properties"},"Advanced usage (Setting QObject Properties)"),Object(o.b)("p",null,"In Qt, every widget has certain properties set on them using something called as ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/qobject.html#Q_PROPERTY"}),"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."),Object(o.b)("p",null,"For example:"),Object(o.b)("pre",null,Object(o.b)("code",l({parentName:"pre"},{className:"language-css"}),"MyLabel {\n qproperty-alignment: AlignCenter;\n}\nMyGroupBox {\n qproperty-titlecolor: rgb(100, 200, 100);\n}\nQPushButton {\n qproperty-iconsize: 20px 20px;\n}\n")),Object(o.b)("p",null,'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.'),Object(o.b)("blockquote",null,Object(o.b)("p",{parentName:"blockquote"},"More details : ",Object(o.b)("a",l({parentName:"p"},{href:"https://doc.qt.io/qt-5/stylesheet-syntax.html#setting-qobject-properties"}),"https://doc.qt.io/qt-5/stylesheet-syntax.html#setting-qobject-properties"))),Object(o.b)("hr",null),Object(o.b)("p",null,"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."))}p.isMDXComponent=!0},161:function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return b}));var o=n(0),l=n.n(o),s=l.a.createContext({}),a=function(e){var t=l.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):Object.assign({},t,e)),n},i=function(e){var t=a(e.components);return l.a.createElement(s.Provider,{value:t},e.children)};var r="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return l.a.createElement(l.a.Fragment,{},t)}},p=Object(o.forwardRef)((function(e,t){var n=e.components,o=e.mdxType,s=e.originalType,i=e.parentName,r=function(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===t.indexOf(o)&&(n[o]=e[o]);return n}(e,["components","mdxType","originalType","parentName"]),p=a(n),b=o,d=p[i+"."+b]||p[b]||c[b]||s;return n?l.a.createElement(d,Object.assign({},{ref:t},r,{components:n})):l.a.createElement(d,Object.assign({},{ref:t},r))}));function b(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var s=n.length,a=new Array(s);a[0]=p;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i[r]="string"==typeof e?e:o,a[1]=i;for(var b=2;b=0||(o[t]=e[t]);return o}(e,n);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(o[t]=e[t])}return o}var r={sidebar_label:"Learn the Basics",title:"Learn the Basics"},s=[{value:"NodeGui development in a nutshell",id:"nodegui-development-in-a-nutshell",children:[]},{value:"What's going on here?",id:"whats-going-on-here",children:[]},{value:"Trying out the starter project",id:"trying-out-the-starter-project",children:[]},{value:"What else other than a basic window?",id:"what-else-other-than-a-basic-window",children:[]}],l={rightToc:s},c="wrapper";function u(e){var n=e.components,t=i(e,["components"]);return Object(a.b)(c,o({},l,t,{components:n,mdxType:"MDXLayout"}),Object(a.b)("p",null,"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."),Object(a.b)("h2",{id:"nodegui-development-in-a-nutshell"},"NodeGui development in a nutshell"),Object(a.b)("p",null,"As far as development is concerned, an NodeGui application is essentially a Node.js application. The starting point is a ",Object(a.b)("inlineCode",{parentName:"p"},"package.json")," that is identical to that of a Node.js module. A most basic NodeGui app would have the following\nfolder structure:"),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-text"}),"your-app/\nโ”œโ”€โ”€ package.json\nโ”œโ”€โ”€ index.js\n")),Object(a.b)("p",null,"All APIs and features found in NodeGui are accessible through the ",Object(a.b)("inlineCode",{parentName:"p"},"@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."),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'require("@nodegui/nodegui");\n')),Object(a.b)("p",null,"The ",Object(a.b)("inlineCode",{parentName:"p"},"@nodegui/nodegui")," module exports features in namespaces. As an example, a window can be created\nusing the ",Object(a.b)("inlineCode",{parentName:"p"},"QMainWindow")," class. A simple ",Object(a.b)("inlineCode",{parentName:"p"},"main.js")," file might open a window:"),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-javascript"}),'const { QMainWindow } = require("@nodegui/nodegui");\n\nconst win = new QMainWindow();\nwin.show();\n\nglobal.win = win; // To prevent win from being garbage collected.\n')),Object(a.b)("p",null,"The ",Object(a.b)("inlineCode",{parentName:"p"},"index.js")," should create windows and handle all the system events your\napplication might encounter."),Object(a.b)("h2",{id:"whats-going-on-here"},"What's going on here?"),Object(a.b)("p",null,"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"),Object(a.b)("h2",{id:"trying-out-the-starter-project"},"Trying out the starter project"),Object(a.b)("p",null,"Clone and run the code by using the\n",Object(a.b)("a",o({parentName:"p"},{href:"https://github.com/nodegui/nodegui-starter"}),Object(a.b)("inlineCode",{parentName:"a"},"nodegui/nodegui-starter"))," repository."),Object(a.b)("p",null,Object(a.b)("strong",{parentName:"p"},"Note"),": Running this requires ",Object(a.b)("a",o({parentName:"p"},{href:"https://git-scm.com"}),"Git")," and ",Object(a.b)("a",o({parentName:"p"},{href:"https://www.npmjs.com/"}),"npm"),"."),Object(a.b)("pre",null,Object(a.b)("code",o({parentName:"pre"},{className:"language-sh"}),"# Clone the repository\n$ git clone https://github.com/nodegui/nodegui-starter\n# Go into the repository\n$ cd nodegui-starter\n# Install dependencies\n$ npm install\n# Run the app\n$ npm start\n")),Object(a.b)("h2",{id:"what-else-other-than-a-basic-window"},"What else other than a basic window?"),Object(a.b)("p",null,"NodeGui has support for basic widgets like QWidget (similar to div), QCheckBox, QPushButton and many more.\nYou can take a look at the list of native widgets that NodeGui currently supports here : ",Object(a.b)("a",o({parentName:"p"},{href:"/docs/api/QWidget"}),"Native widgets in NodeGui"),".\nWith 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."),Object(a.b)("p",null,"Fine, I want something more custom and beautiful than just native looking widgets. What do I do?"),Object(a.b)("p",null,"To make things more beautiful, you will have to ",Object(a.b)("a",o({parentName:"p"},{href:"styling"}),"learn about styling"),". Lets take a look at that next."))}u.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return s})),t.d(n,"b",(function(){return d}));var a=t(0),o=t.n(a),i=o.a.createContext({}),r=function(e){var n=o.a.useContext(i),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},s=function(e){var n=r(e.components);return o.a.createElement(i.Provider,{value:n},e.children)};var l="mdxType",c={inlineCode:"code",wrapper:function(e){var n=e.children;return o.a.createElement(o.a.Fragment,{},n)}},u=Object(a.forwardRef)((function(e,n){var t=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,l=function(e,n){var t={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&-1===n.indexOf(a)&&(t[a]=e[a]);return t}(e,["components","mdxType","originalType","parentName"]),u=r(t),d=a,p=u[s+"."+d]||u[d]||c[d]||i;return t?o.a.createElement(p,Object.assign({},{ref:n},l,{components:t})):o.a.createElement(p,Object.assign({},{ref:n},l))}));function d(e,n){var t=arguments,a=n&&n.mdxType;if("string"==typeof e||a){var i=t.length,r=new Array(i);r[0]=u;var s={};for(var c in n)hasOwnProperty.call(n,c)&&(s[c]=n[c]);s.originalType=e,s[l]="string"==typeof e?e:a,r[1]=s;for(var d=2;d=0||(r[t]=e[t]);return r}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(o=0;o=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(r[t]=e[t])}return r}var i={sidebar_label:"Native Node Modules",title:"Using native Node Modules"},l=[{value:"How to install native modules",id:"how-to-install-native-modules",children:[]},{value:"Troubleshooting",id:"troubleshooting",children:[]},{value:"Modules that rely on node-pre-gyp",id:"modules-that-rely-on-node-pre-gyp",children:[]}],u={rightToc:l},d="wrapper";function s(e){var n=e.components,t=a(e,["components"]);return Object(o.b)(d,r({},u,t,{components:n,mdxType:"MDXLayout"}),Object(o.b)("p",null,"Native Node modules are supported by NodeGui, but since NodeGui is very\nlikely to use a different V8 version from the Node binary installed on your\nsystem, the modules you use will need to be recompiled for NodeGui's node/v8 version. Otherwise,\nyou will get the following class of error when you try to run your app:"),Object(o.b)("pre",null,Object(o.b)("code",r({parentName:"pre"},{className:"language-sh"}),"Error: The module '/path/to/native/module.node'\nwas compiled against a different Node.js version using\nNODE_MODULE_VERSION $XYZ. This version of Node.js requires\nNODE_MODULE_VERSION $ABC. Please try re-compiling or re-installing\nthe module (for instance, using `npm rebuild` or `npm install`).\n")),Object(o.b)("h2",{id:"how-to-install-native-modules"},"How to install native modules"),Object(o.b)("p",null,"To compile native Node modules against a build of NodeGui that doesn't\nmatch a public release, instruct ",Object(o.b)("inlineCode",{parentName:"p"},"npm")," to use the version of Qode (NodeJs) you have bundled\nwith your custom build."),Object(o.b)("pre",null,Object(o.b)("code",r({parentName:"pre"},{className:"language-sh"}),"npm rebuild --nodedir=/path/to/nodegui/vendor/qode\n")),Object(o.b)("p",null,"or"),Object(o.b)("pre",null,Object(o.b)("code",r({parentName:"pre"},{className:"language-sh"}),"qode /path/to/npm rebuild\n")),Object(o.b)("h2",{id:"troubleshooting"},"Troubleshooting"),Object(o.b)("p",null,"If you installed a native module and found it was not working, you need to check\nthe following things:"),Object(o.b)("ul",null,Object(o.b)("li",{parentName:"ul"},"When in doubt, rebuild native modules with qode first."),Object(o.b)("li",{parentName:"ul"},"Make sure the native module is compatible with the target platform and\narchitecture for your NodeGui app."),Object(o.b)("li",{parentName:"ul"},"After you upgrade NodeGui, you usually need to rebuild the modules.")),Object(o.b)("h2",{id:"modules-that-rely-on-node-pre-gyp"},"Modules that rely on ",Object(o.b)("inlineCode",{parentName:"h2"},"node-pre-gyp")),Object(o.b)("p",null,"The ",Object(o.b)("a",r({parentName:"p"},{href:"https://github.com/mapbox/node-pre-gyp"}),Object(o.b)("inlineCode",{parentName:"a"},"node-pre-gyp")," tool")," provides a way to deploy native Node\nmodules with prebuilt binaries, and many popular modules are using it."),Object(o.b)("p",null,"Usually those modules work fine under NodeGui, but sometimes when NodeGui uses\na newer version of V8 than Node and/or there are ABI changes, bad things may\nhappen. So in general, it is recommended to always build native modules from\nsource code."))}s.isMDXComponent=!0},161:function(e,n,t){"use strict";t.d(n,"a",(function(){return l})),t.d(n,"b",(function(){return p}));var o=t(0),r=t.n(o),a=r.a.createContext({}),i=function(e){var n=r.a.useContext(a),t=n;return e&&(t="function"==typeof e?e(n):Object.assign({},n,e)),t},l=function(e){var n=i(e.components);return r.a.createElement(a.Provider,{value:n},e.children)};var u="mdxType",d={inlineCode:"code",wrapper:function(e){var n=e.children;return r.a.createElement(r.a.Fragment,{},n)}},s=Object(o.forwardRef)((function(e,n){var t=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=function(e,n){var t={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&-1===n.indexOf(o)&&(t[o]=e[o]);return t}(e,["components","mdxType","originalType","parentName"]),s=i(t),p=o,c=s[l+"."+p]||s[p]||d[p]||a;return t?r.a.createElement(c,Object.assign({},{ref:n},u,{components:t})):r.a.createElement(c,Object.assign({},{ref:n},u))}));function p(e,n){var t=arguments,o=n&&n.mdxType;if("string"==typeof e||o){var a=t.length,i=new Array(a);i[0]=s;var l={};for(var d in n)hasOwnProperty.call(n,d)&&(l[d]=n[d]);l.originalType=e,l[u]="string"==typeof e?e:o,i[1]=l;for(var p=2;p=0||(o[r]=e[r]);return o}(e,n);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(t=0;t=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var c={id:"mdx",title:"Powered by MDX"},i=[],p=function(e){var n=e.children,r=e.color;return Object(t.b)("span",{style:{backgroundColor:r,borderRadius:"2px",color:"#fff",padding:"0.2rem"}},n)},u={rightToc:i,Highlight:p},l="wrapper";function f(e){var n=e.components,r=a(e,["components"]);return Object(t.b)(l,o({},u,r,{components:n,mdxType:"MDXLayout"}),Object(t.b)("p",null,"You can write JSX and use React components within your Markdown thanks to ",Object(t.b)("a",o({parentName:"p"},{href:"https://mdxjs.com/"}),"MDX"),"."),Object(t.b)(p,{color:"#25c2a0",mdxType:"Highlight"},"Docusaurus green")," and ",Object(t.b)(p,{color:"#1877F2",mdxType:"Highlight"},"Facebook blue")," are my favorite colors.",Object(t.b)("p",null,"I can write ",Object(t.b)("strong",{parentName:"p"},"Markdown")," alongside my ",Object(t.b)("em",{parentName:"p"},"JSX"),"!"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/docs/api/Component/index.html b/docs/api/Component/index.html new file mode 100644 index 000000000..b8097bdb2 --- /dev/null +++ b/docs/api/Component/index.html @@ -0,0 +1,52 @@ + + + + + + + +Component + + + + + + + + + + + + + + + + + + +
+

Component

Abstract class that is root most base class for all widgets and layouts in the NodeGui World.

This class is used to add core properties to all widgets, layouts etc in NodeGui world. Currently it helps us maintain references to the native C++ instance of the widget or layout. It also helps in preventing gc of child elements of a layout or widget

Component is an abstract class and hence no instances of the same should be created. It exists so that we can add core functionalities to all widgets and layouts easily. This is an internal class.

Component is the base class for YogaWidget and NodeLayout which means all widgets and layouts inherit it aswell. Its the root base class in NodeGui world

To get a clearer picture you can take a look at the Component source code here: src/lib/core/Component/index.ts

Static Methods

There are no public static methods for Component.

Instance Properties

There are no public instance properties for Component.

Instance Methods

There are no public instance methods for Component.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/EventWidget/index.html b/docs/api/EventWidget/index.html new file mode 100644 index 000000000..bb1ca9870 --- /dev/null +++ b/docs/api/EventWidget/index.html @@ -0,0 +1,52 @@ + + + + + + + +EventWidget + + + + + + + + + + + + + + + + + + +
+

EventWidget

Abstract class that adds event handling support to all widgets.

This class implements an event emitter and merges it with Qt's event and signal system. It allows us to register and unregister event and signal listener at will from javascript

EventWidget is an abstract class and hence no instances of the same should be created. It exists so that we can add event handling functionalities to all widget's easily. This is an internal class.

EventWidget is the base class for NodeWidget which means all widgets inherit it aswell. It inherits from another abstract class YogaWidget

Example

const { QWidget, QWidgetEvents } = require("@nodegui/nodegui");
const view = new QWidget();
// addEventListener is a method from EventWidget
view.addEventListener("MouseMove", () => {
console.log("mouse moved");
});
or;
// addEventListener is a method from EventWidget
view.addEventListener(QWidgetEvents.MouseMove, () => {
console.log("mouse moved");
});

EventWidget will contain all methods and properties that are useful to handle events and signals of widgets in the NodeGui world.

Static Methods

EventWidget can access all the static methods defined in YogaWidget

Instance Properties

EventWidget can access all the instance properties defined in YogaWidget

Instance Methods

EventWidget can access all the instance methods defined in YogaWidget

Additionally it also has the following instance methods:

widget.addEventListener(eventType, callback)

Adds an event listener to the widget to listen to events that occur on a widget.

  • eventType string - The event or signal you wish to listen to for the widget. Every widget exports its own enum of all possible events and signal types it can take. For example: QWidget exports QWidgetEvents, QPushButton exports QPushButtonEvents.

  • 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?)

Removes the specified event listener from the widget.

  • eventType string - The event or signal for which you wish to remove the listener.

  • callback Function (Optional) - If specified the removeEventListener will remove the specified listener only, otherwise all eventlisteners of the eventType on the widget will be removed.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/FlexLayout/index.html b/docs/api/FlexLayout/index.html new file mode 100644 index 000000000..d11bb49cf --- /dev/null +++ b/docs/api/FlexLayout/index.html @@ -0,0 +1,52 @@ + + + + + + + +FlexLayout + + + + + + + + + + + + + + + + + + +
+

FlexLayout

Custom layout to help layout child widgets using flex layout.

This class is a JS wrapper around custom Qt layout implemented using Yoga

A FlexLayout can be used to layout all child NodeGui widgets using flex.

FlexLayout inherits from NodeLayout

Example

const { FlexLayout, QWidget, QLabel } = require("@nodegui/nodegui");
const view = new QWidget();
const layout = new FlexLayout();
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

FlexLayout can access all the static methods defined in NodeLayout

Instance Properties

FlexLayout can access all the instance properties defined in NodeLayout

Instance Methods

FlexLayout can access all the instance methods defined in NodeLayout

Additionally it also has the following instance methods:

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?)

Adds the childWidget before another already set childWidget in the layout. It calls the native method of custom FlexLayout.

  • childWidget NodeWidget - child widget that needs to be added to the layout.
  • beforeChildWidget NodeWidget - the widget before which the childWidget needs to be added in the layout.
  • 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?)

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)

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.

  • flexNode flexNode ref - flexNode reference of the widget for which this layout is set. You can get this by calling widget.getFlexNode().
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/NodeLayout/index.html b/docs/api/NodeLayout/index.html new file mode 100644 index 000000000..a7c8b6a79 --- /dev/null +++ b/docs/api/NodeLayout/index.html @@ -0,0 +1,52 @@ + + + + + + + +NodeLayout + + + + + + + + + + + + + + + + + + +
+

NodeLayout

Abstract class to add functionalities common to all Layout.

This class implements all methods, properties of Qt's QLayout class so that it can be inherited by all layouts

NodeLayout 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 layout's easily. Additionally it helps in typechecking process.

NodeLayout is the base class for all layouts. It inherits from another abstract class Component

Example

const {
NodeLayout,
NodeWidget,
FlexLayout,
GridLayout,
QPushButton,
QWidget
} = require("@nodegui/nodegui");
// addChildToLayout can accept any layout since it expects NodeLayout
const addChildToLayout = (layout: NodeLayout, widget: NodeWidget) => {
layout.addWidget(widget);
};
addChildToLayout(new FlexLayout(), new QPushButton());
addChildToLayout(new GridLayout(), new QWidget());

NodeLayout will list all methods and properties that are common to all layouts in the NodeGui world.

Static Methods

NodeLayout can access all the static methods defined in Component

Instance Properties

NodeLayout can access all the instance properties defined in Component

Additionally it also has the following instance properties:

layout.type

This will return the string layout for all layouts.

Instance Methods

NodeLayout can access all the instance methods defined in Component

Additionally it also has the following instance methods:

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()

Redoes the layout for parent widget of this layout if necessary. Returns true if the layout was redone.

layout.invalidate()

Invalidates any cached information in this layout.

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/NodeWidget/index.html b/docs/api/NodeWidget/index.html new file mode 100644 index 000000000..39fbd3765 --- /dev/null +++ b/docs/api/NodeWidget/index.html @@ -0,0 +1,53 @@ + + + + + + + +NodeWidget + + + + + + + + + + + + + + + + + + +
+

NodeWidget

Abstract class to add functionalities common to all Widgets.

This class implements all methods, properties of Qt's QWidget class so that it can be inherited by all widgets

NodeWidget 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 widget's easily. Additionally it helps in typechecking process. If you wish to create a div like widget use QWidget instead.

NodeWidget is the base class for all widgets. It inherits from another abstract class EventWidget

Example

const {
NodeWidget,
QPushButton,
QWidget,
QRadioButton
} = require("@nodegui/nodegui");
// showWidget can accept any widget since it expects NodeWidget
const showWidget = (widget: NodeWidget) => {
widget.show();
};
showWidget(new QPushButton());
showWidget(new QWidget());
showWidget(new QRadioButton());

NodeWidget will list all methods and properties that are common to all widgets in the NodeGui world.

Static Methods

NodeWidget can access all the static methods defined in EventWidget

Instance Properties

NodeWidget can access all the instance properties defined in EventWidget

Additionally it also has the following instance properties:

widget.layout

A NodeLayout representing current layout that is set on the widget.

widget.type

This will return the string widget for all widgets.

Instance Methods

NodeWidget can access all the instance methods defined in EventWidget

Additionally it also has the following instance methods:

widget.show()

Shows the widget and its children. It calls the native method QWidget: show.

widget.resize(width, height)

Resizes the widget. It calls the native method QWidget: resize.

  • width number - Pixels.
  • height number - Pixels.

widget.close()

Closes this widget. It calls the native method QWidget: close. +Returns true if the widget was closed; otherwise returns false.

widget.setLayout(layout)

Sets the layout manager for this widget to layout. It calls the native method QWidget: setLayout.

  • layout NodeLayout - Any layout that inherits from NodeLayout class.

widget.setStyleSheet(styleSheet)

Sets the property that holds the widget's style sheet. It calls the native method QWidget: styleSheet.

  • 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.

widget.setWindowIcon(icon)

Sets the window icon. It calls the native method QWidget: setWindowIcon.

  • icon QIcon - Specifies icon for the window.

widget.setWindowState(state)

Sets the window state. It calls the native method QWidget: setWindowState.

widget.setWindowTitle(title)

Sets the window title property. It calls the native method QWidget: setWindowTitle.

  • title string - String which holds the windows title.

widget.styleSheet()

Gets the property that holds the widget's style sheet. It calls the native method QWidget: styleSheet.

widget.hide()

Hides the widget and its children. It calls the native method QWidget: hide.

widget.move(x, y)

Sets the screen position of the widget. It calls the native method QWidget: move.

  • x number - Pixels.
  • y number - Pixels.

widget.setObjectName(objectName)

Sets the object name of the widget in Qt. It calls the native method QObject: setObjectName. 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()

Gets the property that holds the widget's object name. It calls the native method QObject: setObjectName.

widget.setMouseTracking(isMouseTracked)

Sets the property that tells whether mouseTracking is enabled for the widget. It calls the native method QWidget: mouseTracking.

  • isMouseTracked boolean - Set it to true to enable mouse tracking.

widget.setEnabled(enabled)

Sets the property that tells whether the widget is enabled. It calls the native method QWidget: enabled. 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)

Sets both the minimum and maximum sizes of the widget. It calls the native method QWidget: setFixedSize.

  • width number - Pixels.
  • height number - Pixels.

widget.setGeometry(x, y, width, height)

Sets the screen position as well as size of the widget. It calls the native method QWidget: setGeometry.

  • x number - Pixels.
  • y number - Pixels.
  • width number - Pixels.
  • height number - Pixels.

widget.setMaximumSize(width, height)

Sets the maximum size of the widget. It calls the native method QWidget: setMaximumSize.

  • width number - Pixels.
  • height number - Pixels.

widget.setMinimumSize(width, height)

Sets the minimum size of the widget. It calls the native method QWidget: setMinimumSize.

  • width number - Pixels.
  • height number - Pixels.

widget.repaint()

Repaints the widget. It calls the native method QWidget: repaint.

widget.update()

Updates the widget. It calls the native method QWidget: update.

widget.pos()

returns the current widget position. It calls the native method QWidget: pos. The returned size object contains x and y coordinates in pixels.

widget.size()

returns the current widget size. It calls the native method QWidget: size. The returned size object contains width and height in pixels.

widget.updateGeometry()

Notifies the layout system that this widget has changed and may need to change geometry.

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.

  • attributeName WidgetAttribute - Enum from WidgetAttribute.
  • switchOn - set it to true if you want to enable an attribute.

widget.testAttribute(attributeName)

Returns true if attribute attribute is set on this widget; otherwise returns false. It calls the native method QWidget: testAttribute.

  • attributeName WidgetAttribute - Enum from WidgetAttribute.
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QAbstractScrollArea/index.html b/docs/api/QAbstractScrollArea/index.html new file mode 100644 index 000000000..37e6918ec --- /dev/null +++ b/docs/api/QAbstractScrollArea/index.html @@ -0,0 +1,52 @@ + + + + + + + +QAbstractScrollArea + + + + + + + + + + + + + + + + + + +
+

QAbstractScrollArea

Abstract class to add functionalities common to all scrollarea based widgets.

This class implements all methods, properties of Qt's QAbstractScrollArea class 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 scrollarea use QScrollArea instead.

QAbstractScrollArea is the base class for all widgets. It inherits from another abstract class NodeWidget

QAbstractScrollArea will list all methods and properties that are common to all scrollable widgets in the NodeGui world.

Static Methods

QAbstractScrollArea can access all the static methods defined in NodeWidget

Instance Properties

QAbstractScrollArea can access all the instance properties defined in NodeWidget

Instance Methods

QAbstractScrollArea can access all the instance methods defined in NodeWidget

Additionally it also has the following instance methods:

widget.setViewport(widget)

Sets the viewport to be the given widget. It calls the native method QAbstractScrollArea: setViewport.

  • widget NodeWidget.

widget.viewport()

Returns the viewport widget (NodeWidget). It calls the native method QAbstractScrollArea: viewport.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QAbstractSlider/index.html b/docs/api/QAbstractSlider/index.html new file mode 100644 index 000000000..a16b1bdb5 --- /dev/null +++ b/docs/api/QAbstractSlider/index.html @@ -0,0 +1,52 @@ + + + + + + + +QAbstractSlider + + + + + + + + + + + + + + + + + + +
+

QAbstractSlider

Abstract class to add functionalities common to all slider based widgets.

This class implements all methods, properties of Qt's QAbstractSlider class 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 instead.

QAbstractSlider is the base class for all widgets. It inherits from another abstract class NodeWidget

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

Instance Properties

QAbstractSlider can access all the instance properties defined in NodeWidget

Instance Methods

QAbstractSlider can access all the instance methods defined in NodeWidget

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.

  • step number - Specified single step value.

widget.setMaximum(maximum)

Sets the maximum value for slider. It calls the native method QAbstractSlider: setMaximum.

  • maximum number - Specified maximum slider value.

widget.setMinimum(minimum)

Sets the minimum value for slider. It calls the native method QAbstractSlider: setMinimum.

  • minimum number - Specified minimum slider value.

widget.setValue(value)

Sets the current value for slider. It calls the native method QAbstractSlider: setValue.

  • value number - Specified current slider value.

widget.setOrientation(orientation)

Sets the current orientation for slider. It calls the native method QAbstractSlider: setOrientation.

slider.maximum()

Returns the maximum value (Number) of the slider. It calls the native method QAbstractSlider: maximum.

slider.minimum()

Returns the minimum value (Number) of the slider. It calls the native method QAbstractSlider: minimum.

slider.value()

Returns the current value (Number) of the slider. It calls the native method QAbstractSlider: value.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QApplication/index.html b/docs/api/QApplication/index.html new file mode 100644 index 000000000..c67221f1c --- /dev/null +++ b/docs/api/QApplication/index.html @@ -0,0 +1,52 @@ + + + + + + + +QApplication + + + + + + + + + + + + + + + + + + +
+

QApplication

QApplication is the root object for the entire application. It manages app level settings.

This class is a JS wrapper around Qt's QApplication class

The QApplication class manages the GUI application's control flow and main settings. In NodeGui you will never create an instance of it manually. NodeGui's internal runtime Qode does it for you on app start. You can access the initialised QApplication though if needed.

QApplication inherits from Component

Example

const { QApplication } = require("@nodegui/nodegui");
const qApp = QApplication.instance();
qApp.quit();

Static Methods

QApplication can access all the static methods defined in Component. Additionally it also has the following static methods.

QApplication.instance()

Returns the already initialised QApplication instance. It calls the native method QApplication: instance.

QApplication.clipboard()

Returns the object for interacting with the clipboard. It calls the native method QApplication: clipboard. See QClipboard.

Instance Properties

QApplication can access all the instance properties defined in Component

Instance Methods

QApplication can access all the instance methods defined in Component. Additionally it also has the following instance methods:

qApp.quit()

Quits the entire app. It calls the native method QApplication: quit.

qApp.exit(returnCode)

Tells the application to exit with a return code. It calls the native method QApplication: exit.

  • returnCode number - The exit code while quitting the app.

qApp.processEvents()

Processes all pending events for the calling thread . It calls the native method QApplication: processEvents.

qApp.exec()

We will never call this method in NodeGui, since Qode will execute this function for us. It exists for experiments only.

Enters the main event loop and waits until exit() is called. Returns the value that was passed to exit() (which is 0 if exit() is called via quit()). It calls the native method QApplication: exec.

Returns the exit code after app exits.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QCheckBox/index.html b/docs/api/QCheckBox/index.html new file mode 100644 index 000000000..6e6e32561 --- /dev/null +++ b/docs/api/QCheckBox/index.html @@ -0,0 +1,52 @@ + + + + + + + +QCheckBox + + + + + + + + + + + + + + + + + + +
+

QCheckBox

Create and control checkbox.

This class is a JS wrapper around Qt's QCheckBox class

A QCheckBox provides ability to add and manipulate native checkbox widgets.

QCheckBox inherits from NodeWidget

Example

const { QCheckBox } = require("@nodegui/nodegui");
const checkbox = new QCheckBox();
checkbox.setText("Hello");

new QCheckBox(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

QCheckBox can access all the static methods defined in NodeWidget

Instance Properties

QCheckBox can access all the instance properties defined in NodeWidget

Instance Methods

QCheckBox can access all the instance methods defined in NodeWidget

Additionally it also has the following instance methods:

checkbox.setText(text)

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.

checkbox.setChecked(check)

This property holds whether the button is checked. It calls the native method QAbstractButton: setChecked.

  • check boolean
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QClipboard/index.html b/docs/api/QClipboard/index.html new file mode 100644 index 000000000..da5a9a9ed --- /dev/null +++ b/docs/api/QClipboard/index.html @@ -0,0 +1,52 @@ + + + + + + + +QClipboard + + + + + + + + + + + + + + + + + + +
+

QClipboard

The QClipboard class provides access to the window system clipboard.

This class is a JS wrapper around Qt's QClipboard class

QClipboard inherits from Component

Example

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

Instance Properties

QClipboard can access all the instance properties defined in Component

Instance Methods

QClipboard can access all the instance methods defined in Component. Additionally it has:

clipboard.clear(mode)

Clear the clipboard contents. It calls the native method QClipboard: clear.

clipboard.setText(text, mode)

Copies text into the clipboard as plain text. It calls the native method QClipboard: setText.

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QCursor/index.html b/docs/api/QCursor/index.html new file mode 100644 index 000000000..677b0bd8b --- /dev/null +++ b/docs/api/QCursor/index.html @@ -0,0 +1,52 @@ + + + + + + + +QCursor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QDial/index.html b/docs/api/QDial/index.html new file mode 100644 index 000000000..9737874ab --- /dev/null +++ b/docs/api/QDial/index.html @@ -0,0 +1,52 @@ + + + + + + + +QDial + + + + + + + + + + + + + + + + + + +
+

QDial

Create and control dial slider widgets.

This class is a JS wrapper around Qt's QDial class

A QDial provides ability to add and manipulate native dial slider widgets.

QDial inherits from QAbstractSlider

Example

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

Instance Properties

QDial can access all the instance properties defined in NodeWidget

Instance Methods

QDial can access all the instance methods defined in NodeWidget. 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.

  • 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.

  • 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.

  • 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.

dial.notchesVisible()

Returns the visibility status (Boolean) of dial notches. It calls the native method QDial: notchesVisible.

dial.notchesVisible()

Returns the visibility status (Boolean) of dial notches. It calls the native method QDial: notchesVisible.

dial.wrapping()

Returns the current wrapping (Boolean) state of the dial. It calls the native method QDial: wrapping.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QGridLayout/index.html b/docs/api/QGridLayout/index.html new file mode 100644 index 000000000..48f207931 --- /dev/null +++ b/docs/api/QGridLayout/index.html @@ -0,0 +1,52 @@ + + + + + + + +QGridLayout + + + + + + + + + + + + + + + + + + +
+

QGridLayout

The QGridLayout class lays out widgets in a grid.

This class is a JS wrapper around Qt's QGridLayout

QGridLayout inherits from NodeLayout

Example

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

Instance Properties

QGridLayout can access all the instance properties defined in NodeLayout

Instance Methods

QGridLayout can access all the instance methods defined in NodeLayout

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.

  • 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.

  • childWidget NodeWidget - child widget that needs to be added to the layout.
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QIcon/index.html b/docs/api/QIcon/index.html new file mode 100644 index 000000000..30199bd2f --- /dev/null +++ b/docs/api/QIcon/index.html @@ -0,0 +1,54 @@ + + + + + + + +QIcon + + + + + + + + + + + + + + + + + + +
+

QIcon

The QIcon class provides scalable icons in different modes and states.

This class is a JS wrapper around Qt's QIcon class

QIcon inherits from Component

Example

const { QIcon } = require("@nodegui/nodegui");
const imageUrl = "path/to/png";
const icon = new QIcon(imageUrl);

new QIcon(imageUrl?)

  • imageUrl string (optional). Absolute path of the image that needs to be loaded in the memory.

Static Methods

QIcon can access all the static methods defined in Component

Instance Properties

QIcon can access all the instance properties defined in Component

Instance Methods

QIcon can access all the instance methods defined in Component +Additionally it also has the following instance methods:

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.

  • width: number,
  • height: number
  • mode?: QIconMode
  • state?: QIconState
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QLabel/index.html b/docs/api/QLabel/index.html new file mode 100644 index 000000000..7b964b435 --- /dev/null +++ b/docs/api/QLabel/index.html @@ -0,0 +1,52 @@ + + + + + + + +QLabel + + + + + + + + + + + + + + + + + + +
+

QLabel

Create and control text.

This class is a JS wrapper around Qt's QLabel class

A QLabel provides ability to add and manipulate text.

QLabel inherits from NodeWidget

Example

const { QLabel } = require("@nodegui/nodegui");
const label = new QLabel();
label.setText("Hello");

new QLabel(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

QLabel can access all the static methods defined in NodeWidget

Instance Properties

QLabel can access all the instance properties defined in NodeWidget. Additionally it also has the following instance properties:

label.pixmap

The pixmap currently set on this label.

label.text

the current text set on the label.

Instance Methods

QLabel can access all the instance methods defined in NodeWidget. Additionally it also has the following instance methods:

label.setText(text)

Sets the given text to the label.

  • text string

label.setWordWrap(on)

  • on boolean - If true it sets wordwrap on the label

label.setPixmap(pixMap)

Images in the form of a pixmap can be set as the label content

  • pixMap QPixmap - Allows to set image content in the form of a QPixmap on the label
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QLineEdit/index.html b/docs/api/QLineEdit/index.html new file mode 100644 index 000000000..1885cfef6 --- /dev/null +++ b/docs/api/QLineEdit/index.html @@ -0,0 +1,52 @@ + + + + + + + +QLineEdit + + + + + + + + + + + + + + + + + + +
+

QLineEdit

Create and control editable text field.

This class is a JS wrapper around Qt's QLineEdit class

A QLineEdit provides ability to add and manipulate native editable text field widgets.

QLineEdit inherits from NodeWidget

Example

const { QLineEdit } = require("@nodegui/nodegui");
const lineEdit = new QLineEdit();

new QLineEdit(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

QLineEdit can access all the static methods defined in NodeWidget

Instance Properties

QLineEdit can access all the instance properties defined in NodeWidget. Additionally it also has the following instance properties:

lineEdit.placeholderText

The placeholder text set on the lineEdit.

Instance Methods

QLineEdit can access all the instance methods defined in NodeWidget. Additionally it also has the following instance methods:

lineEdit.setText(text)

Sets the given text to the lineEdit.

  • text string

lineEdit.setPlaceholderText(text)

Sets the given text to the lineEdit's placeholder.

  • text string

lineEdit.text()

Returns the currently set text from native lineEdit widget.

lineEdit.setReadOnly(isReadOnly)

Sets the lineEdit to be read only. lineEdit property holds whether the line edit is read only.

  • isReadOnly boolean

lineEdit.clear()

Clears the lineEdit.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QMainWindow/index.html b/docs/api/QMainWindow/index.html new file mode 100644 index 000000000..8698e10bc --- /dev/null +++ b/docs/api/QMainWindow/index.html @@ -0,0 +1,53 @@ + + + + + + + +QMainWindow + + + + + + + + + + + + + + + + + + +
+

QMainWindow

Create and control windows.

This class is a JS wrapper around Qt's QMainWindow class

A QMainWindow provides a main application window. Every widget in NodeGui should be a child/nested child of QMainWindow. QMainWindow in NodeGui is also responsible for FlexLayout calculations of its children.

QMainWindow inherits from NodeWidget

Example

const { QMainWindow, QWidget } = require("@nodegui/nodegui");
const win = new QMainWindow();
const centralWidget = new QWidget();
win.setCentralWidget(centralWidget);
win.show();
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

QMainWindow can access all the static methods defined in NodeWidget

Instance Properties

QMainWindow can access all the instance properties defined in NodeWidget

Additionally it also has the following instance properties:

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

A NodeWidget representing currently set central widget on the window.

Instance Methods

QMainWindow can access all the instance methods defined in NodeWidget

Additionally it also has the following instance methods:

win.setCentralWidget(widget)

Sets the given widget to be the main window's central widget.

  • widget NodeWidget - Any widget that inherits from NodeWidget class.
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QPixmap/index.html b/docs/api/QPixmap/index.html new file mode 100644 index 000000000..eab540c30 --- /dev/null +++ b/docs/api/QPixmap/index.html @@ -0,0 +1,54 @@ + + + + + + + +QPixmap + + + + + + + + + + + + + + + + + + +
+

QPixmap

The QPixmap class helps hold an image in the form of off-screen image representation.

This class is a JS wrapper around Qt's QPixmap class

A QPixmap provides ability to store an image in the memory.

QPixmap inherits from Component

Example

const { QPixmap } = require("@nodegui/nodegui");
const imageUrl = "path/to/png";
const pixMap = new QPixmap(imageUrl);

new QPixmap(imageUrl?)

  • imageUrl string (optional). Absolute path of the image that needs to be loaded in the memory.

Static Methods

QPixmap can access all the static methods defined in Component

Instance Properties

QPixmap can access all the instance properties defined in Component

Instance Methods

QPixmap can access all the instance methods defined in Component

Additionally it also has the following instance methods:

pixMap.load(imageUrl)

loads an image from the url into memory as a Pixmap. +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.

If format is 0, an image format will be chosen from fileName's suffix.

See also 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. +This method doesnt mutate this pixmap and rather returns a new pixmap with new height and width.

  • width number. Width in pixels for new pixmap.
  • height number. Height in pixels for new pixmap.
  • aspectRatioMode AspectRatioMode (optional). Specifies how scaling should happen. AspectRatio is an enum from Qt
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QPlainTextEdit/index.html b/docs/api/QPlainTextEdit/index.html new file mode 100644 index 000000000..9d8a5e5f6 --- /dev/null +++ b/docs/api/QPlainTextEdit/index.html @@ -0,0 +1,52 @@ + + + + + + + +QPlainTextEdit + + + + + + + + + + + + + + + + + + +
+

QPlainTextEdit

Used to edit and display plain text.

This class is a JS wrapper around Qt's QPlainTextEdit class

A QPlainTextEdit provides ability to add and manipulate native editable text field widgets.

QPlainTextEdit inherits from NodeWidget

Example

const { QPlainTextEdit } = require("@nodegui/nodegui");
const plainTextEdit = new QPlainTextEdit();

new QPlainTextEdit(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

QPlainTextEdit can access all the static methods defined in NodeWidget

Instance Properties

QPlainTextEdit can access all the instance properties defined in NodeWidget.

plainTextEdit.placeholderText

The placeholder text set on the plainTextEdit.

Instance Methods

QPlainTextEdit can access all the instance methods defined in NodeWidget.

plainTextEdit.setPlainText(text)

Sets the given text to the plainTextEdit. It calls the native method QPlainTextEdit: setPlainText.

  • 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.

plainTextEdit.setReadOnly(isReadOnly)

Sets the plainTextEdit to be read only. QPlainTextEdit: isReadOnly.

plainTextEdit.clear()

Deletes all the text in the text edit.QPlainTextEdit: clear.

plainTextEdit.setWordWrapMode(mode)

This property holds the mode QPlainTextEdit will use when wrapping text by words.QPlainTextEdit: setWordWrapMode.

  • mode: QTextOptionWrapMode

plainTextEdit.wordWrapMode()

returns word wrap mode. QPlainTextEdit: wordWrapMode.

plainTextEdit.setLineWrapMode(mode)

This property holds the line wrap mode. QPlainTextEdit: setLineWrapMode.

  • mode: LineWrapMode

plainTextEdit.lineWrapMode()

returns line wrap mode. QPlainTextEdit: setLineWrapMode.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QProgressBar/index.html b/docs/api/QProgressBar/index.html new file mode 100644 index 000000000..4a4ff558f --- /dev/null +++ b/docs/api/QProgressBar/index.html @@ -0,0 +1,52 @@ + + + + + + + +QProgressBar + + + + + + + + + + + + + + + + + + +
+

QProgressBar

Create and control progress bar widgets.

This class is a JS wrapper around Qt's QProgressBar class

A QProgressBar provides ability to add and manipulate native progress bar widgets.

QProgressBar inherits from NodeWidget

Example

const { QProgressBar } = require("@nodegui/nodegui");
const progressBar = new QProgressBar();

new QProgressBar(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

QProgressBar can access all the static methods defined in NodeWidget

Instance Properties

QProgressBar can access all the instance properties defined in NodeWidget

Instance Methods

QProgressBar can access all the instance methods defined in NodeWidget. Additionally it also has the following instance methods:

progressBar.setValue(value)

Sets the current value of the progressBar. It calls the native method QProgressBar: setValue.

  • value number - Set the value as current value

progressBar.setMaximum(max)

Sets the max value of the progressBar. It calls the native method QProgressBar: setMaximum.

  • max number - Set the value as max value of the progress bar.

progressBar.setMinimum(min)

Sets the min value of the progressBar. It calls the native method QProgressBar: setMinimum.

  • min number - Set the value as min value of the progress bar.

progressBar.setOrientation(orientation)

Sets the orientation of the progressBar. It calls the native method QProgressBar: setOrientation.

progressBar.value()

Returns the current value (Number) of the progressBar. It calls the native method QProgressBar: value.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QPushButton/index.html b/docs/api/QPushButton/index.html new file mode 100644 index 000000000..3ea06ef93 --- /dev/null +++ b/docs/api/QPushButton/index.html @@ -0,0 +1,52 @@ + + + + + + + +QPushButton + + + + + + + + + + + + + + + + + + +
+

QPushButton

Create and control buttons.

This class is a JS wrapper around Qt's QPushButton class

A QPushButton provides ability to add and manipulate native button widgets.

QPushButton inherits from NodeWidget

Example

const { QPushButton } = require("@nodegui/nodegui");
const button = new QPushButton();
button.setText("Hello");

new QPushButton(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

QPushButton can access all the static methods defined in NodeWidget

Instance Properties

QPushButton can access all the instance properties defined in NodeWidget

Instance Methods

QPushButton can access all the instance methods defined in NodeWidget

Additionally it also has the following instance methods:

button.setText(text)

Sets the given text to the button.

  • text string

button.setFlat(isFlat)

Sets whether the button border is raised.

  • isFlat boolean

button.setIcon(icon)

Sets an icon in the button.

  • icon QIcon
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QRadioButton/index.html b/docs/api/QRadioButton/index.html new file mode 100644 index 000000000..37b8c1fd9 --- /dev/null +++ b/docs/api/QRadioButton/index.html @@ -0,0 +1,52 @@ + + + + + + + +QRadioButton + + + + + + + + + + + + + + + + + + +
+

QRadioButton

Create and control radio button.

This class is a JS wrapper around Qt's QRadioButton class

A QRadioButton provides ability to add and manipulate native radio button widgets.

QRadioButton inherits from NodeWidget

Example

const { QRadioButton } = require("@nodegui/nodegui");
const radioButton = new QRadioButton();
radioButton.setText("Hello");

new QRadioButton(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

QRadioButton can access all the static methods defined in NodeWidget

Instance Properties

QRadioButton can access all the instance properties defined in NodeWidget

Instance Methods

QRadioButton can access all the instance methods defined in NodeWidget

Additionally it also has the following instance methods:

radioButton.setText(text)

Sets the given text to the radioButton.

  • text string
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QScrollArea/index.html b/docs/api/QScrollArea/index.html new file mode 100644 index 000000000..3348894db --- /dev/null +++ b/docs/api/QScrollArea/index.html @@ -0,0 +1,52 @@ + + + + + + + +QScrollArea + + + + + + + + + + + + + + + + + + +
+

QScrollArea

A QScrollArea provides a scrolling view onto another widget.

This class is a JS wrapper around Qt's QScrollArea class

QScrollArea inherits from QAbstractScrollArea

Example

const { QScrollArea } = require("@nodegui/nodegui");
const scrollArea = new QScrollArea();
scrollArea.setInlineStyle("flex: 1; width:'100%';");
const imageLabel = new QLabel();
const pixmap = new QPixmap(
path.resolve(__dirname, "../extras/assets/kitchen.png")
);
imageLabel.setPixmap(pixmap);
scrollArea.setWidget(imageLabel);

new QScrollArea(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

QScrollArea can access all the static methods defined in QAbstractScrollArea

Instance Properties

QScrollArea can access all the instance properties defined in QAbstractScrollArea

Instance Methods

QScrollArea can access all the instance methods defined in QAbstractScrollArea. Additionally it also has the following instance methods:

scrollArea.setWidget(widget)

Sets the scroll area's widget. It calls the native method QScrollArea: setWidget.

  • widget NodeWidget - Any widget you want to enclose in a scroll area.
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QSpinBox/index.html b/docs/api/QSpinBox/index.html new file mode 100644 index 000000000..13aade2d6 --- /dev/null +++ b/docs/api/QSpinBox/index.html @@ -0,0 +1,52 @@ + + + + + + + +QSpinBox + + + + + + + + + + + + + + + + + + +
+

QSpinBox

Create and control spin box widgets.

This class is a JS wrapper around Qt's QSpinBox class

A QSpinBox provides ability to add and manipulate native spin box widgets.

QSpinBox inherits from NodeWidget

Example

const { QSpinBox } = require("@nodegui/nodegui");
const spinBox = new QSpinBox();

new QSpinBox(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

QSpinBox can access all the static methods defined in NodeWidget

Instance Properties

QSpinBox can access all the instance properties defined in NodeWidget

Instance Methods

QSpinBox can access all the instance methods defined in NodeWidget. Additionally it also has the following instance methods:

spinBox.setValue(val)

Sets the current value of the spinBox. It calls the native method QSpinBox: setValue.

  • val number - Set the value as current value

spinBox.setRange(minimum, maximum)

Sets the min/max value of the spinBox. It calls the native method QSpinBox: setRange.

  • max number - Set the value as max value of the progress bar.

spinBox.setPrefix(prefix)

Sets the prefix of the spinBox. It calls the native method QSpinBox: setPrefix.

spinBox.setSuffix(suffix)

Sets the suffix of the spinBox. It calls the native method QSpinBox: setSuffix.

spinBox.setSingleStep(val)

Sets the single step value of the spinBox. It calls the native method QSpinBox: setSingleStep.

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.

spinBox.minimum()

Returns the minimum value (Number) of the spinBox. It calls the native method QSpinBox: value.

spinBox.maximum()

Returns the maximum value (Number) of the spinBox. It calls the native method QSpinBox: value.

spinBox.value()

Returns the current value (Number) of the spinBox. It calls the native method QSpinBox: value.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QTabWidget/index.html b/docs/api/QTabWidget/index.html new file mode 100644 index 000000000..272be086f --- /dev/null +++ b/docs/api/QTabWidget/index.html @@ -0,0 +1,52 @@ + + + + + + + +QTabWidget + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QWidget/index.html b/docs/api/QWidget/index.html new file mode 100644 index 000000000..f9ce59a38 --- /dev/null +++ b/docs/api/QWidget/index.html @@ -0,0 +1,52 @@ + + + + + + + +QWidget + + + + + + + + + + + + + + + + + + +
+

QWidget

Create and control views.

This class is a JS wrapper around Qt's QWidget class

A QWidget can be used to encapsulate other widgets and provide structure. It functions similar to a div in the web world.

QWidget inherits from NodeWidget

Example

const { QWidget } = require("@nodegui/nodegui");
const view = new QWidget();
view.setObjectName("container"); //Similar to setting `id` on the web
view.setLayout(new FlexLayout());

new QWidget(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

QWidget can access all the static methods defined in NodeWidget

Instance Properties

QWidget can access all the instance properties defined in NodeWidget

Instance Methods

QWidget can access all the instance methods defined in NodeWidget

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/QtEnums/index.html b/docs/api/QtEnums/index.html new file mode 100644 index 000000000..7fa858136 --- /dev/null +++ b/docs/api/QtEnums/index.html @@ -0,0 +1,52 @@ + + + + + + + +Qt Enums + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/YogaWidget/index.html b/docs/api/YogaWidget/index.html new file mode 100644 index 000000000..81bcdc951 --- /dev/null +++ b/docs/api/YogaWidget/index.html @@ -0,0 +1,52 @@ + + + + + + + +YogaWidget + + + + + + + + + + + + + + + + + + +
+

YogaWidget

Abstract class to add common functionality related to Flex layout to all Widgets.

This class implements methods related to flex layout required to be present in all widgets

YogaWidget is an abstract class and hence no instances of the same should be created. It exists so that we can add similar functionalities related to flex layout to all widget's easily. We implement flex layout using a library called Yoga. As part of yoga every widget needs to store its own flex properties such as alignItems, flexDirection etc. This is done with the help of YogaWidget.

YogaWidget is the base class for EventWidget which means all widgets inherit it aswell. It inherits from another abstract class Component

const { QWidget } = require("@nodegui/nodegui");
const view = new QWidget();
// getFlexNode is a method from YogaWidget
const flexNode = view.getFlexNode();

YogaWidget helps in storing all flex properties of a widget.

Static Methods

YogaWidget can access all the static methods defined in Component

Instance Properties

YogaWidget can access all the instance properties defined in Component

Instance Methods

YogaWidget can access all the instance methods defined in Component

Additionally it also has the following instance methods:

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/process/index.html b/docs/api/process/index.html new file mode 100644 index 000000000..fc3844005 --- /dev/null +++ b/docs/api/process/index.html @@ -0,0 +1,54 @@ + + + + + + + +process + + + + + + + + + + + + + + + + + + +
+

process

Extensions to process object.

Qode's process object is extended from the +Node.js process object. +It adds the following properties :

Properties

process.versions.qode Readonly

A String representing Qode's version string. Qode is a lightly modified version of NodeJs that allows running Qt and NodeJs under a single process.

process.versions.qt(compiled) Readonly

A String representing Qt version used when compile Qode binary. This can be useful to know which version of Qt is binary compatible with the version of Qode you are running. This is useful when running qode with a different version of Qt than what it was compiled with.

process.versions.qt(runtime) Readonly

A String representing Qt version of the Qt library loaded during runtime. This can be useful to know which version of Qt you are using at runtime as compared to the version of Qt used when Qode was compiled.This is possible since Qt is dynamically linked to Qode and you could replace the Qt dynamic libraries with any binary compatible library. Hence, this is useful when running qode with a different version of Qt than what it was compiled with.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/api/synopsis/index.html b/docs/api/synopsis/index.html new file mode 100644 index 000000000..001a404c2 --- /dev/null +++ b/docs/api/synopsis/index.html @@ -0,0 +1,57 @@ + + + + + + + +Synopsis + + + + + + + + + + + + + + + + + + +
+

Synopsis

How to use Node.js and NodeGui's APIs.

All of Node.js's built-in modules are available in +NodeGui. Also, third-party node modules that are known to work with Node.Js are fully supported as well (including +the native node modules).

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:

const { QMainWindow } = require("@nodegui/nodegui");
const win = new QMainWindow();
win.show();
global.win = win; // To prevent win from being garbage collected.

To run your app, read Run your app.

Destructuring assignment

You can use +destructuring assignment to make it easier to use +built-in modules.

const {
QMainWindow,
QWidget,
QLabel,
FlexLayout
} = require("@nodegui/nodegui");
const win = new QMainWindow();
const centralWidget = new QWidget();
centralWidget.setObjectName("myroot");
const rootLayout = new FlexLayout();
centralWidget.setLayout(rootLayout);
const label = new QLabel();
label.setInlineStyle("font-size: 16px; font-weight: bold;");
label.setText("Hello World");
rootLayout.addWidget(label);
win.setCentralWidget(centralWidget);
win.setStyleSheet(
`
#myroot {
background-color: #009688;
}
`
);
win.show();
global.win = win;
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/README/index.html b/docs/development/README/index.html new file mode 100644 index 000000000..9a52b2fb6 --- /dev/null +++ b/docs/development/README/index.html @@ -0,0 +1,53 @@ + + + + + + + +README + + + + + + + + + + + + + + + + + + +
+

README

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.

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/

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/common_errors/index.html b/docs/development/common_errors/index.html new file mode 100644 index 000000000..5f507eb2c --- /dev/null +++ b/docs/development/common_errors/index.html @@ -0,0 +1,54 @@ + + + + + + + +common_errors + + + + + + + + + + + + + + + + + + +
+

common_errors

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).

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/debugging/index.html b/docs/development/debugging/index.html new file mode 100644 index 000000000..bcea04fde --- /dev/null +++ b/docs/development/debugging/index.html @@ -0,0 +1,52 @@ + + + + + + + +debugging + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/getting-started/index.html b/docs/development/getting-started/index.html new file mode 100644 index 000000000..2b20eddc7 --- /dev/null +++ b/docs/development/getting-started/index.html @@ -0,0 +1,55 @@ + + + + + + + +getting-started + + + + + + + + + + + + + + + + + + +
+

getting-started

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://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 <any_include_file_which_contains_macro> // 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.
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/setting-up/index.html b/docs/development/setting-up/index.html new file mode 100644 index 000000000..7da4673f7 --- /dev/null +++ b/docs/development/setting-up/index.html @@ -0,0 +1,52 @@ + + + + + + + +setting-up + + + + + + + + + + + + + + + + + + +
+

setting-up

Setup project for development

Development setup and getting started

Make sure you follow the setup guide of Qode 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

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

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

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="<path to qt installation>/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]

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/signal_and_event_handling/index.html b/docs/development/signal_and_event_handling/index.html new file mode 100644 index 000000000..9e22932c1 --- /dev/null +++ b/docs/development/signal_and_event_handling/index.html @@ -0,0 +1,57 @@ + + + + + + + +signal_and_event_handling + + + + + + + + + + + + + + + + + + +
+

signal_and_event_handling

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:

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:

button.addEventListener(QPushButtonEvents.clicked, () => {
console.log("clicked");
});

Example:

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.

#pragma once
#include <QPushButton>
#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
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/styling/index.html b/docs/development/styling/index.html new file mode 100644 index 000000000..6ea03a299 --- /dev/null +++ b/docs/development/styling/index.html @@ -0,0 +1,59 @@ + + + + + + + +styling + + + + + + + + + + + + + + + + + + +
+

styling

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:

// 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:

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:

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/development/wrapping_widgets/index.html b/docs/development/wrapping_widgets/index.html new file mode 100644 index 000000000..e115a1c9f --- /dev/null +++ b/docs/development/wrapping_widgets/index.html @@ -0,0 +1,52 @@ + + + + + + + +wrapping_widgets + + + + + + + + + + + + + + + + + + +
+

wrapping_widgets

Exporting a new method from a widget

Exporting a new widget from scratch

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/doc1/index.html b/docs/doc1/index.html new file mode 100644 index 000000000..90d88cbfa --- /dev/null +++ b/docs/doc1/index.html @@ -0,0 +1,52 @@ + + + + + + + +Style Guide + + + + + + + + + + + + + + + + + + +
+

Style Guide

You can write content using GitHub-flavored Markdown syntax.

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
  2. Another item โ‹…โ‹…* Unordered sub-list.
  3. Actual numbers don't matter, just that it's a number โ‹…โ‹…1. Ordered sub-list
  4. 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

I'm an inline-style link with title

I'm a reference-style link

I'm a relative reference to a repository file

You can use numbers for reference-style link definitions

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 http://www.example.com and sometimes example.com (but not on Github, for example).

Some text to show that the reference links can follow later.


Images

Here's our logo (hover to see the title text):

Inline-style: alt text

Reference-style: alt text


Code

var s = 'JavaScript syntax highlighting';
alert(s);
s = "Python syntax highlighting"
print s
No language indicated, so no syntax highlighting.
But let's throw in a <b>tag</b>.

Tables

Colons can be used to align columns.

TablesAreCool
col 3 isright-aligned$1600
col 2 iscentered$12
zebra stripesare 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.

MarkdownLessPretty
Stillrendersnicely
123

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/faq/index.html b/docs/faq/index.html new file mode 100644 index 000000000..12a86282d --- /dev/null +++ b/docs/faq/index.html @@ -0,0 +1,63 @@ + + + + + + + +FAQ + + + + + + + + + + + + + + + + + + +
+

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 +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:

If you want a quick fix, you can make the variables global by changing your +code from this:

const { QWidget } = require("@nodegui/nodegui");
const view = new QWidget();
view.setObjectName("container");
view.setLayout(new FlexLayout());

to this:

const { QWidget } = require("@nodegui/nodegui");
const view = new QWidget();
view.setObjectName("container");
view.setLayout(new FlexLayout());
global.view = view; //prevent GC
+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/custom-nodegui-native-plugin/index.html b/docs/guides/custom-nodegui-native-plugin/index.html new file mode 100644 index 000000000..b1d7581f5 --- /dev/null +++ b/docs/guides/custom-nodegui-native-plugin/index.html @@ -0,0 +1,52 @@ + + + + + + + +Custom NodeGui Plugin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/debugging-in-vscode/index.html b/docs/guides/debugging-in-vscode/index.html new file mode 100644 index 000000000..49659d9d3 --- /dev/null +++ b/docs/guides/debugging-in-vscode/index.html @@ -0,0 +1,52 @@ + + + + + + + +Debugging in VSCode + + + + + + + + + + + + + + + + + + +
+

Debugging in VSCode

  • Open a NodeGui project in VSCode.

    $ git clone git@github.com:nodegui/nodegui-starter.git
    $ code nodegui-starter
  • Add a file .vscode/launch.json with the following configuration:

    {
    "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. You should be able to hit the breakpoints.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/debugging/index.html b/docs/guides/debugging/index.html new file mode 100644 index 000000000..68a6db6ca --- /dev/null +++ b/docs/guides/debugging/index.html @@ -0,0 +1,61 @@ + + + + + + + +Debugging + + + + + + + + + + + + + + + + + + +
+

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.

Google offers excellent documentation for their developer tools. +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.

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/getting-started/index.html b/docs/guides/getting-started/index.html new file mode 100644 index 000000000..64adca488 --- /dev/null +++ b/docs/guides/getting-started/index.html @@ -0,0 +1,67 @@ + + + + + + + +Getting started + + + + + + + + + + + + + + + + + + +
+

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:

# 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 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:

# 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 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:

# 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 suited +for JavaScript development.

A Good Editor

We might suggest two free popular editors: +GitHub's Atom and Microsoft's Visual Studio 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.

Hello World

Clone and run the code in this tutorial by using the +nodegui/nodegui-starter repository.

Note: Running this requires Git and npm.

# 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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/handle-events/index.html b/docs/guides/handle-events/index.html new file mode 100644 index 000000000..4bea41045 --- /dev/null +++ b/docs/guides/handle-events/index.html @@ -0,0 +1,52 @@ + + + + + + + +Handle Events + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/images/index.html b/docs/guides/images/index.html new file mode 100644 index 000000000..e24e9d930 --- /dev/null +++ b/docs/guides/images/index.html @@ -0,0 +1,52 @@ + + + + + + + +Images + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/layout/index.html b/docs/guides/layout/index.html new file mode 100644 index 000000000..9f47fae9d --- /dev/null +++ b/docs/guides/layout/index.html @@ -0,0 +1,52 @@ + + + + + + + +Layout + + + + + + + + + + + + + + + + + + +
+

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.

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.

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:

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).

  • 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 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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/networking/index.html b/docs/guides/networking/index.html new file mode 100644 index 000000000..81d0281ec --- /dev/null +++ b/docs/guides/networking/index.html @@ -0,0 +1,52 @@ + + + + + + + +Networking + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/nodegui-architecture/index.html b/docs/guides/nodegui-architecture/index.html new file mode 100644 index 000000000..7e94dd588 --- /dev/null +++ b/docs/guides/nodegui-architecture/index.html @@ -0,0 +1,65 @@ + + + + + + + +Architecture + + + + + + + + + + + + + + + + + + +
+

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):

#include <QApplication>
#include <QPushButton>
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 Gui libraries developed by zcbenz (Cheng Zhao). It has been detailed in a post here: Electron internals. 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.

*PS: Qode is a fork of 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:

require("@nodegui/nodegui");

A window in NodeGui is for instance created using the QMainWindow +class.

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:
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);
  1. 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:

npm install --save aws-sdk

Then, in your NodeGui app, require and use the module as if you were +building a Node.js application:

// 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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/scroll-view/index.html b/docs/guides/scroll-view/index.html new file mode 100644 index 000000000..aa9cf5aaa --- /dev/null +++ b/docs/guides/scroll-view/index.html @@ -0,0 +1,52 @@ + + + + + + + +Scroll View + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/styling/index.html b/docs/guides/styling/index.html new file mode 100644 index 000000000..97002d219 --- /dev/null +++ b/docs/guides/styling/index.html @@ -0,0 +1,53 @@ + + + + + + + +Styling + + + + + + + + + + + + + + + + + + +
+

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:

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 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.

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:

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:

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:

* {
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.

#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.

Advanced usage (Setting QObject Properties)

In Qt, every widget has certain properties set on them using something called as 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:

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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/tutorial/index.html b/docs/guides/tutorial/index.html new file mode 100644 index 000000000..df4e0e9c2 --- /dev/null +++ b/docs/guides/tutorial/index.html @@ -0,0 +1,58 @@ + + + + + + + +Learn the Basics + + + + + + + + + + + + + + + + + + +
+

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:

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.

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:

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 repository.

Note: Running this requires Git and npm.

# 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

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. +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. Lets take a look at that next.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/guides/using-native-node-modules/index.html b/docs/guides/using-native-node-modules/index.html new file mode 100644 index 000000000..a219723cd --- /dev/null +++ b/docs/guides/using-native-node-modules/index.html @@ -0,0 +1,63 @@ + + + + + + + +Using native Node Modules + + + + + + + + + + + + + + + + + + +
+

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:

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.

npm rebuild --nodedir=/path/to/nodegui/vendor/qode

or

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 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.

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/mdx/index.html b/docs/mdx/index.html new file mode 100644 index 000000000..053bb2f2a --- /dev/null +++ b/docs/mdx/index.html @@ -0,0 +1,52 @@ + + + + + + + +Powered by MDX + + + + + + + + + + + + + + + + + + +
+

Powered by MDX

You can write JSX and use React components within your Markdown thanks to MDX.

Docusaurus green and Facebook blue are my favorite colors.

I can write Markdown alongside my JSX!

+
+ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js b/docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js new file mode 100644 index 000000000..6736ff6a3 --- /dev/null +++ b/docsMetadata---docs-150-2d6.a4a03dc8ae50b1fa60b5.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{42:function(e){e.exports=JSON.parse('{"docs":{"doc1":{"id":"doc1","title":"Style Guide","sidebar_label":"Style Guide","description":"You can write content using [GitHub-flavored Markdown syntax](https://github.github.com/gfm/).","source":"@site/docs/doc1.md","permalink":"/docs/doc1"},"faq":{"title":"FAQ","sidebar_label":"FAQ","id":"faq","description":"## Why am I having trouble installing Qode?","source":"@site/docs/faq.md","permalink":"/docs/faq"},"api/Component":{"sidebar_label":"Component","title":"Component","id":"api/Component","description":"> Abstract class that is root most base class for all widgets and layouts in the NodeGui World.","source":"@site/docs/api/Component.md","permalink":"/docs/api/Component","sidebar":"api","category":"Internal Modules","next":"api/EventWidget","previous":"api/QtEnums","previous_title":"Qt Enums","next_title":"EventWidget"},"mdx":{"id":"mdx","title":"Powered by MDX","description":"You can write JSX and use React components within your Markdown thanks to [MDX](https://mdxjs.com/).","source":"@site/docs/mdx.md","permalink":"/docs/mdx"},"api/EventWidget":{"sidebar_label":"EventWidget","title":"EventWidget","id":"api/EventWidget","description":"> Abstract class that adds event handling support to all widgets.","source":"@site/docs/api/EventWidget.md","permalink":"/docs/api/EventWidget","sidebar":"api","category":"Internal Modules","next":"api/NodeLayout","previous":"api/Component","previous_title":"Component","next_title":"NodeLayout"},"api/FlexLayout":{"sidebar_label":"FlexLayout","title":"FlexLayout","id":"api/FlexLayout","description":"> Custom layout to help layout child widgets using flex layout.","source":"@site/docs/api/FlexLayout.md","permalink":"/docs/api/FlexLayout","sidebar":"api","category":"Layouts","next":"api/QGridLayout","previous":"api/QWidget","previous_title":"QWidget","next_title":"QGridLayout"},"api/NodeLayout":{"sidebar_label":"NodeLayout","title":"NodeLayout","id":"api/NodeLayout","description":"> Abstract class to add functionalities common to all Layout.","source":"@site/docs/api/NodeLayout.md","permalink":"/docs/api/NodeLayout","sidebar":"api","category":"Internal Modules","next":"api/NodeWidget","previous":"api/EventWidget","previous_title":"EventWidget","next_title":"NodeWidget"},"api/NodeWidget":{"sidebar_label":"NodeWidget","title":"NodeWidget","id":"api/NodeWidget","description":"> Abstract class to add functionalities common to all Widgets.","source":"@site/docs/api/NodeWidget.md","permalink":"/docs/api/NodeWidget","sidebar":"api","category":"Internal Modules","next":"api/YogaWidget","previous":"api/NodeLayout","previous_title":"NodeLayout","next_title":"YogaWidget"},"api/QAbstractScrollArea":{"sidebar_label":"QAbstractScrollArea","title":"QAbstractScrollArea","id":"api/QAbstractScrollArea","description":"> Abstract class to add functionalities common to all scrollarea based widgets.","source":"@site/docs/api/QAbstractScrollArea.md","permalink":"/docs/api/QAbstractScrollArea","sidebar":"api","category":"Internal Modules","next":"api/QAbstractSlider","previous":"api/YogaWidget","previous_title":"YogaWidget","next_title":"QAbstractSlider"},"api/QAbstractSlider":{"sidebar_label":"QAbstractSlider","title":"QAbstractSlider","id":"api/QAbstractSlider","description":"> Abstract class to add functionalities common to all slider based widgets.","source":"@site/docs/api/QAbstractSlider.md","permalink":"/docs/api/QAbstractSlider","sidebar":"api","category":"Internal Modules","next":"api/process","previous":"api/QAbstractScrollArea","previous_title":"QAbstractScrollArea","next_title":"process"},"api/QApplication":{"sidebar_label":"QApplication","title":"QApplication","id":"api/QApplication","description":"> QApplication is the root object for the entire application. It manages app level settings.","source":"@site/docs/api/QApplication.md","permalink":"/docs/api/QApplication","sidebar":"api","category":"Widgets","next":"api/QCheckBox","previous":"api/synopsis","previous_title":"Synopsis","next_title":"QCheckBox"},"api/QCheckBox":{"sidebar_label":"QCheckBox","title":"QCheckBox","id":"api/QCheckBox","description":"> Create and control checkbox.","source":"@site/docs/api/QCheckBox.md","permalink":"/docs/api/QCheckBox","sidebar":"api","category":"Widgets","next":"api/QDial","previous":"api/QApplication","previous_title":"QApplication","next_title":"QDial"},"api/QClipboard":{"sidebar_label":"QClipboard","title":"QClipboard","id":"api/QClipboard","description":"> The QClipboard class provides access to the window system clipboard.","source":"@site/docs/api/QClipboard.md","permalink":"/docs/api/QClipboard","sidebar":"api","category":"Modules","next":"api/QCursor","previous":"api/QGridLayout","previous_title":"QGridLayout","next_title":"QCursor"},"api/QCursor":{"sidebar_label":"QCursor","title":"QCursor","id":"api/QCursor","description":"> The QCursor class provides scalable icons in different modes and states.","source":"@site/docs/api/QCursor.md","permalink":"/docs/api/QCursor","sidebar":"api","category":"Modules","next":"api/QPixmap","previous":"api/QClipboard","previous_title":"QClipboard","next_title":"QPixmap"},"api/QDial":{"sidebar_label":"QDial","title":"QDial","id":"api/QDial","description":"> Create and control dial slider widgets.","source":"@site/docs/api/QDial.md","permalink":"/docs/api/QDial","sidebar":"api","category":"Widgets","next":"api/QIcon","previous":"api/QCheckBox","previous_title":"QCheckBox","next_title":"QIcon"},"api/QGridLayout":{"sidebar_label":"QGridLayout","title":"QGridLayout","id":"api/QGridLayout","description":"> The QGridLayout class lays out widgets in a grid.","source":"@site/docs/api/QGridLayout.md","permalink":"/docs/api/QGridLayout","sidebar":"api","category":"Layouts","next":"api/QClipboard","previous":"api/FlexLayout","previous_title":"FlexLayout","next_title":"QClipboard"},"api/QIcon":{"sidebar_label":"QIcon","title":"QIcon","id":"api/QIcon","description":"> The QIcon class provides scalable icons in different modes and states.","source":"@site/docs/api/QIcon.md","permalink":"/docs/api/QIcon","sidebar":"api","category":"Widgets","next":"api/QLabel","previous":"api/QDial","previous_title":"QDial","next_title":"QLabel"},"api/QLabel":{"sidebar_label":"QLabel","title":"QLabel","id":"api/QLabel","description":"> Create and control text.","source":"@site/docs/api/QLabel.md","permalink":"/docs/api/QLabel","sidebar":"api","category":"Widgets","next":"api/QLineEdit","previous":"api/QIcon","previous_title":"QIcon","next_title":"QLineEdit"},"api/QLineEdit":{"sidebar_label":"QLineEdit","title":"QLineEdit","id":"api/QLineEdit","description":"> Create and control editable text field.","source":"@site/docs/api/QLineEdit.md","permalink":"/docs/api/QLineEdit","sidebar":"api","category":"Widgets","next":"api/QMainWindow","previous":"api/QLabel","previous_title":"QLabel","next_title":"QMainWindow"},"api/QMainWindow":{"sidebar_label":"QMainWindow","title":"QMainWindow","id":"api/QMainWindow","description":"> Create and control windows.","source":"@site/docs/api/QMainWindow.md","permalink":"/docs/api/QMainWindow","sidebar":"api","category":"Widgets","next":"api/QPlainTextEdit","previous":"api/QLineEdit","previous_title":"QLineEdit","next_title":"QPlainTextEdit"},"api/QPixmap":{"sidebar_label":"QPixmap","title":"QPixmap","id":"api/QPixmap","description":"> The QPixmap class helps hold an image in the form of off-screen image representation.","source":"@site/docs/api/QPixmap.md","permalink":"/docs/api/QPixmap","sidebar":"api","category":"Modules","next":"api/QtEnums","previous":"api/QCursor","previous_title":"QCursor","next_title":"Qt Enums"},"api/QPlainTextEdit":{"sidebar_label":"QPlainTextEdit","title":"QPlainTextEdit","id":"api/QPlainTextEdit","description":"> Used to edit and display plain text.","source":"@site/docs/api/QPlainTextEdit.md","permalink":"/docs/api/QPlainTextEdit","sidebar":"api","category":"Widgets","next":"api/QProgressBar","previous":"api/QMainWindow","previous_title":"QMainWindow","next_title":"QProgressBar"},"api/QProgressBar":{"sidebar_label":"QProgressBar","title":"QProgressBar","id":"api/QProgressBar","description":"> Create and control progress bar widgets.","source":"@site/docs/api/QProgressBar.md","permalink":"/docs/api/QProgressBar","sidebar":"api","category":"Widgets","next":"api/QPushButton","previous":"api/QPlainTextEdit","previous_title":"QPlainTextEdit","next_title":"QPushButton"},"api/QPushButton":{"sidebar_label":"QPushButton","title":"QPushButton","id":"api/QPushButton","description":"> Create and control buttons.","source":"@site/docs/api/QPushButton.md","permalink":"/docs/api/QPushButton","sidebar":"api","category":"Widgets","next":"api/QRadioButton","previous":"api/QProgressBar","previous_title":"QProgressBar","next_title":"QRadioButton"},"api/QRadioButton":{"sidebar_label":"QRadioButton","title":"QRadioButton","id":"api/QRadioButton","description":"> Create and control radio button.","source":"@site/docs/api/QRadioButton.md","permalink":"/docs/api/QRadioButton","sidebar":"api","category":"Widgets","next":"api/QScrollArea","previous":"api/QPushButton","previous_title":"QPushButton","next_title":"QScrollArea"},"api/QScrollArea":{"sidebar_label":"QScrollArea","title":"QScrollArea","id":"api/QScrollArea","description":"> A `QScrollArea` provides a scrolling view onto another widget.","source":"@site/docs/api/QScrollArea.md","permalink":"/docs/api/QScrollArea","sidebar":"api","category":"Widgets","next":"api/QSpinBox","previous":"api/QRadioButton","previous_title":"QRadioButton","next_title":"QSpinBox"},"api/QSpinBox":{"sidebar_label":"QSpinBox","title":"QSpinBox","id":"api/QSpinBox","description":"> Create and control spin box widgets.","source":"@site/docs/api/QSpinBox.md","permalink":"/docs/api/QSpinBox","sidebar":"api","category":"Widgets","next":"api/QTabWidget","previous":"api/QScrollArea","previous_title":"QScrollArea","next_title":"QTabWidget"},"api/QTabWidget":{"sidebar_label":"QTabWidget","title":"QTabWidget","id":"api/QTabWidget","description":"Will be available from NodeGUI v0.1.10 and up","source":"@site/docs/api/QTabWidget.md","permalink":"/docs/api/QTabWidget","sidebar":"api","category":"Widgets","next":"api/QWidget","previous":"api/QSpinBox","previous_title":"QSpinBox","next_title":"QWidget"},"api/QWidget":{"sidebar_label":"QWidget","title":"QWidget","id":"api/QWidget","description":"> Create and control views.","source":"@site/docs/api/QWidget.md","permalink":"/docs/api/QWidget","sidebar":"api","category":"Widgets","next":"api/FlexLayout","previous":"api/QTabWidget","previous_title":"QTabWidget","next_title":"FlexLayout"},"api/QtEnums":{"sidebar_label":"Qt Enums","title":"Qt Enums","id":"api/QtEnums","description":"## Enums from Qt","source":"@site/docs/api/QtEnums.md","permalink":"/docs/api/QtEnums","sidebar":"api","category":"Modules","next":"api/Component","previous":"api/QPixmap","previous_title":"QPixmap","next_title":"Component"},"api/YogaWidget":{"sidebar_label":"YogaWidget","title":"YogaWidget","id":"api/YogaWidget","description":"> Abstract class to add common functionality related to Flex layout to all Widgets.","source":"@site/docs/api/YogaWidget.md","permalink":"/docs/api/YogaWidget","sidebar":"api","category":"Internal Modules","next":"api/QAbstractScrollArea","previous":"api/NodeWidget","previous_title":"NodeWidget","next_title":"QAbstractScrollArea"},"api/process":{"sidebar_label":"process","title":"process","id":"api/process","description":"> Extensions to process object.","source":"@site/docs/api/process.md","permalink":"/docs/api/process","sidebar":"api","category":"APIs","previous":"api/QAbstractSlider","previous_title":"QAbstractSlider"},"api/synopsis":{"sidebar_label":"Synopsis","title":"Synopsis","id":"api/synopsis","description":"> How to use Node.js and NodeGui\'s APIs.","source":"@site/docs/api/synopsis.md","permalink":"/docs/api/synopsis","sidebar":"api","category":"General","next":"api/QApplication","next_title":"QApplication"},"development/README":{"id":"development/README","title":"README","description":"# Contributor\'s guide","source":"@site/docs/development/README.md","permalink":"/docs/development/README"},"development/common_errors":{"id":"development/common_errors","title":"common_errors","description":"# Common errors","source":"@site/docs/development/common_errors.md","permalink":"/docs/development/common_errors"},"development/debugging":{"id":"development/debugging","title":"debugging","description":"# debugging","source":"@site/docs/development/debugging.md","permalink":"/docs/development/debugging"},"development/getting-started":{"id":"development/getting-started","title":"getting-started","description":"## Getting started","source":"@site/docs/development/getting-started.md","permalink":"/docs/development/getting-started"},"development/setting-up":{"id":"development/setting-up","title":"setting-up","description":"# Setup project for development","source":"@site/docs/development/setting-up.md","permalink":"/docs/development/setting-up"},"development/signal_and_event_handling":{"id":"development/signal_and_event_handling","title":"signal_and_event_handling","description":"# Event handling","source":"@site/docs/development/signal_and_event_handling.md","permalink":"/docs/development/signal_and_event_handling"},"development/styling":{"id":"development/styling","title":"styling","description":"# How styling works?","source":"@site/docs/development/styling.md","permalink":"/docs/development/styling"},"development/wrapping_widgets":{"id":"development/wrapping_widgets","title":"wrapping_widgets","description":"# Exporting a new method from a widget","source":"@site/docs/development/wrapping_widgets.md","permalink":"/docs/development/wrapping_widgets"},"guides/custom-nodegui-native-plugin":{"sidebar_label":"Custom NodeGui Plugin","title":"Custom NodeGui Plugin","id":"guides/custom-nodegui-native-plugin","description":"WIP","source":"@site/docs/guides/custom-nodegui-native-plugin.md","permalink":"/docs/guides/custom-nodegui-native-plugin","sidebar":"guides","category":"Guides","previous":"guides/using-native-node-modules","previous_title":"Using native Node Modules"},"guides/debugging-in-vscode":{"sidebar_label":"Debugging in VSCode","title":"Debugging in VSCode","id":"guides/debugging-in-vscode","description":"- **Open a NodeGui project in VSCode.**","source":"@site/docs/guides/debugging-in-vscode.md","permalink":"/docs/guides/debugging-in-vscode","sidebar":"guides","category":"Guides","next":"guides/using-native-node-modules","previous":"guides/debugging","previous_title":"Debugging","next_title":"Using native Node Modules"},"guides/debugging":{"sidebar_label":"Debugging","title":"Debugging","id":"guides/debugging","description":"## Application Debugging","source":"@site/docs/guides/debugging.md","permalink":"/docs/guides/debugging","sidebar":"guides","category":"Guides","next":"guides/debugging-in-vscode","previous":"guides/nodegui-architecture","previous_title":"Architecture","next_title":"Debugging in VSCode"},"guides/getting-started":{"sidebar_label":"Getting started","title":"Getting started","id":"guides/getting-started","description":"NodeGui enables you to create desktop applications with JavaScript. You could see it","source":"@site/docs/guides/getting-started.md","permalink":"/docs/guides/getting-started","sidebar":"guides","category":"The Basics","next":"guides/tutorial","next_title":"Learn the Basics"},"guides/handle-events":{"sidebar_label":"Handle Events","title":"Handle Events","id":"guides/handle-events","description":"WIP","source":"@site/docs/guides/handle-events.md","permalink":"/docs/guides/handle-events","sidebar":"guides","category":"The Basics","next":"guides/scroll-view","previous":"guides/layout","previous_title":"Layout","next_title":"Scroll View"},"guides/images":{"sidebar_label":"Images","title":"Images","id":"guides/images","description":"WIP","source":"@site/docs/guides/images.md","permalink":"/docs/guides/images","sidebar":"guides","category":"The Basics","next":"guides/networking","previous":"guides/scroll-view","previous_title":"Scroll View","next_title":"Networking"},"guides/layout":{"sidebar_label":"Layout","title":"Layout","id":"guides/layout","description":"NodeGui uses a layout system to automatically arranging child widgets within a widget to ensure that they make good use of the available space.","source":"@site/docs/guides/layout.md","permalink":"/docs/guides/layout","sidebar":"guides","category":"The Basics","next":"guides/handle-events","previous":"guides/styling","previous_title":"Styling","next_title":"Handle Events"},"guides/networking":{"sidebar_label":"Networking","title":"Networking","id":"guides/networking","description":"WIP","source":"@site/docs/guides/networking.md","permalink":"/docs/guides/networking","sidebar":"guides","category":"The Basics","next":"guides/nodegui-architecture","previous":"guides/images","previous_title":"Images","next_title":"Architecture"},"guides/nodegui-architecture":{"sidebar_label":"Architecture","title":"Architecture","id":"guides/nodegui-architecture","description":"By looking at how NodeGui works internally, we would get a clear picture on why the APIs are designed the way they are.","source":"@site/docs/guides/nodegui-architecture.md","permalink":"/docs/guides/nodegui-architecture","sidebar":"guides","category":"Guides","next":"guides/debugging","previous":"guides/networking","previous_title":"Networking","next_title":"Debugging"},"guides/scroll-view":{"sidebar_label":"Scroll View","title":"Scroll View","id":"guides/scroll-view","description":"WIP","source":"@site/docs/guides/scroll-view.md","permalink":"/docs/guides/scroll-view","sidebar":"guides","category":"The Basics","next":"guides/images","previous":"guides/handle-events","previous_title":"Handle Events","next_title":"Images"},"guides/styling":{"sidebar_label":"Styling","title":"Styling","id":"guides/styling","description":"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.","source":"@site/docs/guides/styling.md","permalink":"/docs/guides/styling","sidebar":"guides","category":"The Basics","next":"guides/layout","previous":"guides/tutorial","previous_title":"Learn the Basics","next_title":"Layout"},"guides/tutorial":{"sidebar_label":"Learn the Basics","title":"Learn the Basics","id":"guides/tutorial","description":"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.","source":"@site/docs/guides/tutorial.md","permalink":"/docs/guides/tutorial","sidebar":"guides","category":"The Basics","next":"guides/styling","previous":"guides/getting-started","previous_title":"Getting started","next_title":"Styling"},"guides/using-native-node-modules":{"sidebar_label":"Native Node Modules","title":"Using native Node Modules","id":"guides/using-native-node-modules","description":"Native Node modules are supported by NodeGui, but since NodeGui is very","source":"@site/docs/guides/using-native-node-modules.md","permalink":"/docs/guides/using-native-node-modules","sidebar":"guides","category":"Guides","next":"guides/custom-nodegui-native-plugin","previous":"guides/debugging-in-vscode","previous_title":"Debugging in VSCode","next_title":"Custom NodeGui Plugin"}},"docsDir":"/Users/atulr/Project/nodegui/nodegui/website/docs","docsSidebars":{"api":[{"type":"category","label":"General","items":[{"type":"doc","id":"api/synopsis"}]},{"type":"category","label":"Widgets","items":[{"type":"doc","id":"api/QApplication"},{"type":"doc","id":"api/QCheckBox"},{"type":"doc","id":"api/QDial"},{"type":"doc","id":"api/QIcon"},{"type":"doc","id":"api/QLabel"},{"type":"doc","id":"api/QLineEdit"},{"type":"doc","id":"api/QMainWindow"},{"type":"doc","id":"api/QPlainTextEdit"},{"type":"doc","id":"api/QProgressBar"},{"type":"doc","id":"api/QPushButton"},{"type":"doc","id":"api/QRadioButton"},{"type":"doc","id":"api/QScrollArea"},{"type":"doc","id":"api/QSpinBox"},{"type":"doc","id":"api/QTabWidget"},{"type":"doc","id":"api/QWidget"}]},{"type":"category","label":"Layouts","items":[{"type":"doc","id":"api/FlexLayout"},{"type":"doc","id":"api/QGridLayout"}]},{"type":"category","label":"Modules","items":[{"type":"doc","id":"api/QClipboard"},{"type":"doc","id":"api/QCursor"},{"type":"doc","id":"api/QPixmap"},{"type":"doc","id":"api/QtEnums"}]},{"type":"category","label":"Internal Modules","items":[{"type":"doc","id":"api/Component"},{"type":"doc","id":"api/EventWidget"},{"type":"doc","id":"api/NodeLayout"},{"type":"doc","id":"api/NodeWidget"},{"type":"doc","id":"api/YogaWidget"},{"type":"doc","id":"api/QAbstractScrollArea"},{"type":"doc","id":"api/QAbstractSlider"}]},{"type":"category","label":"APIs","items":[{"type":"doc","id":"api/process"}]}],"guides":[{"type":"category","label":"The Basics","items":[{"type":"doc","id":"guides/getting-started"},{"type":"doc","id":"guides/tutorial"},{"type":"doc","id":"guides/styling"},{"type":"doc","id":"guides/layout"},{"type":"doc","id":"guides/handle-events"},{"type":"doc","id":"guides/scroll-view"},{"type":"doc","id":"guides/images"},{"type":"doc","id":"guides/networking"}]},{"type":"category","label":"Guides","items":[{"type":"doc","id":"guides/nodegui-architecture"},{"type":"doc","id":"guides/debugging"},{"type":"doc","id":"guides/debugging-in-vscode"},{"type":"doc","id":"guides/using-native-node-modules"},{"type":"doc","id":"guides/custom-nodegui-native-plugin"}]}]},"sourceToPermalink":{"@site/docs/doc1.md":"/docs/doc1","@site/docs/faq.md":"/docs/faq","@site/docs/api/Component.md":"/docs/api/Component","@site/docs/mdx.md":"/docs/mdx","@site/docs/api/EventWidget.md":"/docs/api/EventWidget","@site/docs/api/FlexLayout.md":"/docs/api/FlexLayout","@site/docs/api/NodeLayout.md":"/docs/api/NodeLayout","@site/docs/api/NodeWidget.md":"/docs/api/NodeWidget","@site/docs/api/QAbstractScrollArea.md":"/docs/api/QAbstractScrollArea","@site/docs/api/QAbstractSlider.md":"/docs/api/QAbstractSlider","@site/docs/api/QApplication.md":"/docs/api/QApplication","@site/docs/api/QCheckBox.md":"/docs/api/QCheckBox","@site/docs/api/QClipboard.md":"/docs/api/QClipboard","@site/docs/api/QCursor.md":"/docs/api/QCursor","@site/docs/api/QDial.md":"/docs/api/QDial","@site/docs/api/QGridLayout.md":"/docs/api/QGridLayout","@site/docs/api/QIcon.md":"/docs/api/QIcon","@site/docs/api/QLabel.md":"/docs/api/QLabel","@site/docs/api/QLineEdit.md":"/docs/api/QLineEdit","@site/docs/api/QMainWindow.md":"/docs/api/QMainWindow","@site/docs/api/QPixmap.md":"/docs/api/QPixmap","@site/docs/api/QPlainTextEdit.md":"/docs/api/QPlainTextEdit","@site/docs/api/QProgressBar.md":"/docs/api/QProgressBar","@site/docs/api/QPushButton.md":"/docs/api/QPushButton","@site/docs/api/QRadioButton.md":"/docs/api/QRadioButton","@site/docs/api/QScrollArea.md":"/docs/api/QScrollArea","@site/docs/api/QSpinBox.md":"/docs/api/QSpinBox","@site/docs/api/QTabWidget.md":"/docs/api/QTabWidget","@site/docs/api/QWidget.md":"/docs/api/QWidget","@site/docs/api/QtEnums.md":"/docs/api/QtEnums","@site/docs/api/YogaWidget.md":"/docs/api/YogaWidget","@site/docs/api/process.md":"/docs/api/process","@site/docs/api/synopsis.md":"/docs/api/synopsis","@site/docs/development/README.md":"/docs/development/README","@site/docs/development/common_errors.md":"/docs/development/common_errors","@site/docs/development/debugging.md":"/docs/development/debugging","@site/docs/development/getting-started.md":"/docs/development/getting-started","@site/docs/development/setting-up.md":"/docs/development/setting-up","@site/docs/development/signal_and_event_handling.md":"/docs/development/signal_and_event_handling","@site/docs/development/styling.md":"/docs/development/styling","@site/docs/development/wrapping_widgets.md":"/docs/development/wrapping_widgets","@site/docs/guides/custom-nodegui-native-plugin.md":"/docs/guides/custom-nodegui-native-plugin","@site/docs/guides/debugging-in-vscode.md":"/docs/guides/debugging-in-vscode","@site/docs/guides/debugging.md":"/docs/guides/debugging","@site/docs/guides/getting-started.md":"/docs/guides/getting-started","@site/docs/guides/handle-events.md":"/docs/guides/handle-events","@site/docs/guides/images.md":"/docs/guides/images","@site/docs/guides/layout.md":"/docs/guides/layout","@site/docs/guides/networking.md":"/docs/guides/networking","@site/docs/guides/nodegui-architecture.md":"/docs/guides/nodegui-architecture","@site/docs/guides/scroll-view.md":"/docs/guides/scroll-view","@site/docs/guides/styling.md":"/docs/guides/styling","@site/docs/guides/tutorial.md":"/docs/guides/tutorial","@site/docs/guides/using-native-node-modules.md":"/docs/guides/using-native-node-modules"},"permalinkToId":{"/docs/doc1":"doc1","/docs/faq":"faq","/docs/api/Component":"api/Component","/docs/mdx":"mdx","/docs/api/EventWidget":"api/EventWidget","/docs/api/FlexLayout":"api/FlexLayout","/docs/api/NodeLayout":"api/NodeLayout","/docs/api/NodeWidget":"api/NodeWidget","/docs/api/QAbstractScrollArea":"api/QAbstractScrollArea","/docs/api/QAbstractSlider":"api/QAbstractSlider","/docs/api/QApplication":"api/QApplication","/docs/api/QCheckBox":"api/QCheckBox","/docs/api/QClipboard":"api/QClipboard","/docs/api/QCursor":"api/QCursor","/docs/api/QDial":"api/QDial","/docs/api/QGridLayout":"api/QGridLayout","/docs/api/QIcon":"api/QIcon","/docs/api/QLabel":"api/QLabel","/docs/api/QLineEdit":"api/QLineEdit","/docs/api/QMainWindow":"api/QMainWindow","/docs/api/QPixmap":"api/QPixmap","/docs/api/QPlainTextEdit":"api/QPlainTextEdit","/docs/api/QProgressBar":"api/QProgressBar","/docs/api/QPushButton":"api/QPushButton","/docs/api/QRadioButton":"api/QRadioButton","/docs/api/QScrollArea":"api/QScrollArea","/docs/api/QSpinBox":"api/QSpinBox","/docs/api/QTabWidget":"api/QTabWidget","/docs/api/QWidget":"api/QWidget","/docs/api/QtEnums":"api/QtEnums","/docs/api/YogaWidget":"api/YogaWidget","/docs/api/process":"api/process","/docs/api/synopsis":"api/synopsis","/docs/development/README":"development/README","/docs/development/common_errors":"development/common_errors","/docs/development/debugging":"development/debugging","/docs/development/getting-started":"development/getting-started","/docs/development/setting-up":"development/setting-up","/docs/development/signal_and_event_handling":"development/signal_and_event_handling","/docs/development/styling":"development/styling","/docs/development/wrapping_widgets":"development/wrapping_widgets","/docs/guides/custom-nodegui-native-plugin":"guides/custom-nodegui-native-plugin","/docs/guides/debugging-in-vscode":"guides/debugging-in-vscode","/docs/guides/debugging":"guides/debugging","/docs/guides/getting-started":"guides/getting-started","/docs/guides/handle-events":"guides/handle-events","/docs/guides/images":"guides/images","/docs/guides/layout":"guides/layout","/docs/guides/networking":"guides/networking","/docs/guides/nodegui-architecture":"guides/nodegui-architecture","/docs/guides/scroll-view":"guides/scroll-view","/docs/guides/styling":"guides/styling","/docs/guides/tutorial":"guides/tutorial","/docs/guides/using-native-node-modules":"guides/using-native-node-modules"}}')}}]); \ No newline at end of file diff --git a/img/code-sample.png b/img/code-sample.png new file mode 100644 index 0000000000000000000000000000000000000000..1292fcf5ef46fff2ae5fcabbd3876f786260a611 GIT binary patch literal 89159 zcmeFZWmsLyvNk$#cXvy0cXto&Zj*@wcXxLZGz5aXySoN=f?I&#BzUlIX05Ef*SUA! z^WFVC_q%`29@rS&Rc}{Uzg43~GayPuNd^Ux5D@?XpvcKessRAdE&u=|G(0T0C46CJheC&4Fqw#eNwyq?vDO~c}{pO3ot;l0NcE*^N{$Zi#^WG;PVnOTY>+@@T zUw?n$m$%;jbLS$RXLqlKrzlxolg=H-IU6OIUbH>2s`z&c2l%fqTzg}#`sCaaop1Zi zj(b0MRdvG2f4}zjd^!91;6n9MlXd&jveDlK_wwjd1q~$HE&R44N8#nqJ@H;g?8y3} zB%AH}&Res(!@sB+c+e$;(ha>3fFmHXp z^W#v<_AXWTz}d$7nNan5oI#|9)48Hw=!Mr%SdvOtp6XrMBhRO$gYwITFFTaLkG4u( zsYpVS`&|?fB+@P0f(ZDZ}{M3R5;r3tx7<-@m`cv9EY#(LO&iN@)|7w%gno zYPs<|-YgE>Cuw1ag+=n+Nn^QPhhwOy1lPkcZLL5@K>wCGJFbORl#%hK7l z;e8HdJv8~&TMVZi%eJe)q5KiFxNMOPR261m(FZLoXc+^Cv$#*Y$Exg`*Kc{ZRpe>N z1or0VltivZ;&|45PgC_B+MnVbbbTzZ4=TcxKRkfHdn_i`J{o9uTgIi?JmFKqD=F|% z0omZ#jZz>G`ROgY!ZP#Oi!<*@tr26)nbP0ahpk0w^|3r#>hOElC`2ml<(A*3!ghTKY0Cp!#Aufcdy#C?7_oPbP%cw+RDa4l z^_C_XYsnxV-6dPg&Zd5gAMX2?_|suFaeYnwZwD(UAu&C(ABO4Lb)Yo#*FIj{wd=Tc zuETrLh_+&lAAf9BiL!rnA+Z0^u3B?{%|Dr7B`9ukqMbVhqGt`bMiu*xUb|Wkm2Iu_ z#9}Fn!>65TnHm|$ydh}tNj{xVS?A8u2 z1$B-0`&r`MTviMEv>7@a`KYU_tks+W0YE2#(6zti8vQ-direiPsq+G)DL$kQ%bkq< z=KvzO7KiH!-K!(T@>gaabz%Cp&ejnna(iKQbVSgS$miRiE2+1>4-?#-at#k7hrS32 zpIiGD(}*Z-KiOcOf7ridtmf-l3wdyh4%p~Bci(z;N9tY;dRS$8w1+!$XufDCY3W}7 z-EmH$vw`-5yT0C7cg!`nIErOYUzs%#UBQ%dg?CZFcp?ex;h2KI@_HHdRDww(nRkuK>a=`I02hNud3ikf!%Y*!ZxC23W^ZC?1AkhAb zQ=(TyWh54*V!yq*GsKQkw+;A%gOHBdgjv>-ZZv-Yuk0_bepi`Q600)5PXE?}?;05>H zM#Ju%n2yFG;80FbAO^=>w1!3)-iz+iJYg{^?wnQ40jnOWF%rY3MLJK$7=}>btF0#5 zr67bN^gLVfmt}V)u4GQegIZRY9^ZGI5oFs2I?&;*{aEZJwW0@Z)E{*xifNXvC5aO+ zQw(q8xX~YIYKxjQIY2J@%ON%&tiMn;3Q4pD(dU{(-jwiQr>&OyOe2jb20RT&z53<` zgfTHOPHbTSYHJrIbG$9>07&PKq`Z|FQK^{Ag5~>ZP7ovt|ygIL!%Td^eyo9HFd;Rc*yi&e}rlz7e!&XAtLkQq?g%7>>FvON=BZ(MFJ zH-_A+CEL94t{8(R^sAoW|BwHK{~Fe;$39he&YYW-1jbuGF&RE{H76{^&kY^h71kO%D34 zdSqJ+@RVG?;8hRPt3?QX%!>uOx2|1op25K_WAjj!;?P>ODHl;TYfD$VrEl74myx4Y zbsHGS2dG(T3%3$6c3xGm%%D*-8dq3#(S?0j+<}wwn=ubs2nsLJx>yS_^U#0XBDPZ1Zq#kVxJNn}0+l+kK%LjWsMmZ%z9=Z`sys zwyu_*Y84^Z?A~?>?Rm#YmlhmKXz%kbop-3>{C#m6L^R zn54#o{`norL&o0Tw`Y>7BjGE@*WWOPsHhkys}FyqP}7+TeMtzs{*fL`X)WF?R-V!$ zWfgno8rsP8@k&o{j5}q~DbY829=&Nd$V6ZN;ceOkdtX<~hIEMnVc_DVC8o; zMM#@4dV5WZ?GG!lcT(zE(v=)C^2EZJ0_eayUxk`j9a3Y%p3m5enDPfZxu0ZcK|eY2 zP-%yu6qvA)?}p&yxCc#l-nhR1UKt`nx;~sF;`KQHM#L@cVa-TmuNq~4o2ol^AXHj3 z(xjjJNb&K2Y%aN8;$!dtjz&&pLQ}+UgLcBU9L*FYG8}P@7ug7Hq}v&N1>Ba129MMX z%esh4U}QVu0NY1sC0YO7etevEl&PYp&Y8ZS8&)~k=Gm=YHCmQ<)4A}|OezX*vK^hA{NIfI+a8tM)I0X+{J6@@wZ4#1P3KrqZ) z=Er4j{lx@t2u+crVD2+cdmgbWUh8r}PpObRg3xhuNlR}gzFyy^G8HQH2Yh?@2f&+n z;c_ptEj&yU3qrVW8|pM)k*G3EM08etB|chnV2_UFOn*4xE=~?f1aM)N=hE_L*3!Wc z5-B2C_Yn3L9BsUpxQ>Mk#h{MFB%dp^Ehke}7-UMvsd+u9@7YDK5Ay}RHB#;bNgT%w zH;SmPqG}IrxyMAtF~KzFCz8xEO*tQjZd)RmH~qIyTg=FIa-J#uNX5@n!F~S9?c}bh)&d@jHJv9k}ETAWz`KDk!IC2 zZc5Uk2fg|s-@?rp$_n>UOu^MkEb|+cGs%QzS@4nDhWr++8kOd!8%_tE zS@=!g5_6Ra`Kv>ipBU@M85kck0bm^v-609X)C{Wh)jx&MW>1-i~$`z(C0rNMq$c+gLa!R(bohZA=nM(#{FT6 z4_jM$f@-viP|MBp%0HKF-~t(6Z(*dTG2d|{AenAv8!j~1Z2(T?z6ArF9YqSqWYsqD z$y+o9|M&(!>_ZMzu+$R-*_F&d2QqGdm(r4xUH9uFPF3=gH?^l4!~A9BC>lwd>{lUm zG8TDFG`8<~X#M-b#h)lIkY1)utRv+aksrNM_i~yUZ-O}S@jh=PW3-`~LBtFn6LUDk zqK=#3NXbH|Q1pyZpSE0tg|FMIM=!ubfaoVkY09*?melj&P;`^_R+mjgF$qsXOCT01 z$xMZ=C405b$>I4z+8xlh4%nFCOIoqW0hyr%0cgT2@^R$EaB`~|kh01TYZPvSVKSfm+=ly^U31vbM=;J0Y~an7UI zmZIjQ^s@^+OqVmKv7vFS{d%iN9s8NTnNS4p(yEWUc)wzlMB>X)#lR+&Wux0vwVw#u z_Q0#5((Qw7&|^iX6foP+8%{VjN!&26Bp>INhdSy42>$S7`H&U5M8%OHiDm`&m41)1 zSIUBfnQQdjE+m=DEYy~>liYk81@RbHEhbR~8uz!Bpl>23Li?;0uRVuFIq9&YP5Ak< zC5+tL!yOwh(3Cw5&-jdr)Z2`H>e0W#2%sNU2X> zBiLb&jqtOut-sJUO+!?3%pz2)1S0&*?irE7cy~|O9#7@e6mc`zrd}swqY)C{GacfH z>gW9gd`-I!h0X@k6CSG<&*Y=PZihVmEq1KLqe3H!8^f|hn-GG?4KWzR96BiV#Cn>t zXeu8qBDRIf9Lpbupy{E6U5U?n+%t8I#OrAl2Oanxg0#I|=BtJTQ0l^bw3VgjMGfb~ zEzZ?i+ZKMWL13ZYyvvD+AC_DR4t|)00>FKG=tdl(b^(WLV^T+jB>|}hN3mCulIr=! z{ZdEz%WS%SwAvIDx@s9B!;}+L0W6Pq6>`Gctn`Rs2 z;QUFm0lDtI{R7LrjQmx-Ek4cJ>X)_+#0GLS z-UU*q3?%f->eBsez+}M&q-;+>#I#W~;*$GliE{4RMJ8e+e#0VC5^x>GHyD)Mp*eIM zV7Uv61?tq*~jb8U&dlO$MdL8_u|K%) zmZEB^HXcfGF5s;nU;%>!^|{^t8qIv5ZZVdhdnCDX(iC@aT}6Kp8C>E$tvT!-%8aa&k^|}b972RJIc6?j$qT|e@je~tjZVKN`Zz9V#hcXHYcPOGu}(ecp^*2J&3O`)5EZ~(6>_x$BA=;CBqEjeEcM8wcv zQ>v5b6s)>qc;*ha4&8R`yp=1aaT9q&qCd4I*m`*CO?;?N%75{H|Fui7q!2glEFoV{ z){UxK+`(JVA=in@8?vPjnJX?X=6l8&_kyhs}zaCpq#L^SHAqwad+= zZ_kEx0fzZLXb9eipQ6asB1BEZpim*iBtJ@`k)?EZlrRck1(d|U_69aXFMu~3jsN9N zqqU;^}A#v;n!2n}IB??S&}M+q)^rt<8lfwYd~o6&)o&R@SoK&LDMfB@Ljr z4Uo^AQbZV0(32kwUm^hldBV2M4o*vn2}~A0HnJ zD?1B2I}=!f$;Hdw)zp*8-i7KH#Ge?FAQzxB*m2el_T;}XP0bwKT!knp!TsdF!GF0` z$`jo9dw^fpf55xAnzP7(FF3*T0SmCOv$FCsv9dF<^RfJ0AKa^`_z!J+m)~9l`;*1f z)RBdanU%%P?!RcbxJtSIbG(14;i3WFTV_!Mxj48v13^;mAbVG;zYpqY>*n(JG2L81 zzncEA+t%EI1#HwGBmZ4TMov-XA3DF>XlZTd_=mAy>w1OFlC=;mzuhm1Lp1!N1d z0~_K3MrQjj@?iacDE!Om`~m)lqxdBqfNsA~T4#!B&X!mrdlqH2;VNa>3s$=T~q5 zn*NH0KZHT%zXIiVsEC_dvixx=$nxI_|KE_*tsFe;|KH*KQ}iDwV$QA}4$d~p&dO$Q zK|t649_L>P{{u-4oTOY_oxSA#HzgMZ^6#S2l|uo|3G(fuyFM-bq0x9f`bUW&fpOGW1Y!q|7026 ze>KL#3iOLYtZaN>OmOPbU}xoL1%Glfu(E?sDF0k?azU0~+3~L_3;xOLsy>`!e82S+b(z*@N~d)WWC!~YAx zKM@qHfgpPqhyTv>zl;3omcQLZz&8Kc2EI9g?{zHyxY_-t%CBhpKY0A6;Qzr9z|j90 z<3h>)-Ogza{)1cKv_mF2sL6E`#jB#h(ZGVc6!Pcnm#SLI0@W>;3%sLe!qyB>em;9XQ7BYxDn1(PEiVO7l8y50DWAN)dB#J z1LP#dG(1;M);)ZQ_O@X!4qj!YHZp$pdF8ajIJ_(XAub+RbIbgZ%qO{1dyG~^dKr6^ z8Cwq#lmsmc9~yenNo?uqpxeLl^U0~nT&fNzkO~Ytc(}iyNOhe(yxQ>0_KCO{>J}ab zS!UxyV*Ea?Z5$qtUBm!Ar0Y{!cB*b-_%sK1d_F-_AYB>y~;CGq#sf49HJ21-ix z`L&~=^a>k^_yG=-9C}YwjXWQn3rd1CvaSsBp&Z*FQUn9Th*Itjrt~;@e>QzrpGFV8 zg(vF(`l{SXiBgG9zd1&)frIdXXKsZW<)TcEksLX(&6N7Rqzcdgwh4pqgiK!*t$o7$ zNT53Qh!U4*rIr|T3>hahq*#j(sRk$au1zr+%c`$my}wHquXh6+pEV^XAMyaHg3Vy=bxe)Rg3mWdFu@nCoflfG6jj){&+>yp zL4Q)SglwhG+G`y6L_O|BqaGI|O)`tzX3wNOchbZB5eiSU6|2qP!EilNOc$}B*u5G_ zQ!xZhfB~xID~`JO(v(v@Rg8hl7K4Y_tpegL`fsB9QyZnvvHbkf@h*2L zUExi02r)pG=Nl{kdh8O%Jc54r(n~c0FoL$7)mVbWvz!_N6r5e1GgZ zsxv^;dPbaU9B_cbd`9t`>~dQ<5q#(7Wo&F?kcD3^#X=V7UsGG8f7h}&hvWZcYE-{u zN%9XU9T6C6RIKm&nw@0dcabqA};xoYBkYG}h`S!-0kqw{BL2;sf~5Ra3qQG(_gAyt>){+mzAFB*TS%;1C(_8}6(~gK6 z+PX%^sY}Od@;~Q&G>od34ora%PbW%Z*-@naJbMmDB?zSa)yM36^JhR`UIB1?zz$xk{~pXA%X&0&EdxUja{e(F{|m`(hD%f zF$5RsNXRurn6GskFP^OisMX>@xp~u<*JC$*yJ-^4SeP~bkiKGkh#Wqo>31$qD$tVf zKQ=b~*;|o+1i}ZzXZyhYWr?dwUnX)`Ahzy~upR?e;_GuS^dx&^iq}pYSrX-tbqYdc zY1GMtkn`d@S}Jot|8l|nIdL-UFe6rCncAz9Cv{EAaX9q-bT_erBh1?;b+^Dh04xFO zkvRHQ)WackC$X5&U->rgS$0TK^tU6E1ySYG=g^UJXOddjbP0w0IibBb>I!-(B=V`8 zHoIpa<^{aF4ne386h1peXlTn&iOVo&B!8{KG}sGePZTY|QAkvoz2x+0>I;hGz*9VAXpF@B99nJ1^S`JSfx42;holeb z=;Pge|0ZTN1g5GdsCrZSwI1d)PQ@TePcX_Tlt0;?9)^E&^U~7P`Hi>%mGjhJ>cwDY zUK-V-rNm8iK6hygbmA={e7TR1Ga&**HEvsH~N^ zr~0Qik8;BJP{g(vipkt2I(cRt?dqY7`JZa8#n1C$Ban@&Rr88!Zy~cXV9B}+DuXB7 zwmuqKq=^|&^r@d8HC}_W1UWMvg^Tlhj^9b*`6y>`#klFdW^O-l*kx-yY>gC6K7-hE zaM5Rbi~-5@i!MgsD%Q8K>r0@F6rh?(;jr;qJ)knUdkrRl#a5(y70Fl^X@0Y$Mf>-S z@frx%i7+IkXVS~`EPt#D^oj&=rxFEV`k9e9r`!tAp! ze|%i*Lk+W`cmsv#`e@J6@$qC@sC;vvI)UD|5kC;vVqaaE>M3O+r zM4NV=jkw|s7~@i`wr;i&ir-1Y;ppuckn|YO6cylmbRlti+q+{Qq{bX!z#O80+r6y< zrcL=^h)^TSoiY&Vto)YR_eoekH(YN!LU%V@9-BN3De-eCDws!>F=XuwLU-mLA|FJ! zU->>IchhgD`D`z)Kok-O8^GpYWUJHL(qjV|&{OQBi z#k(Z575Spkz{_jO_}S5IP1>B4&*0bt0Kh@h5-b+!FM`_uePL8ztqm)1w)nFU+GztB zZ$I`&A5kKe6iUHS!2uyj;2ab!2!hd|dca4-#s^fhdj@|Ld_lS$;!uJ1BL}_&LX4%6 z8gUsakO+Rn7kw#G<$0txKI+e;{Ij0vW9qQr;(1@@4WbmpvNME5>wI4U1-dwhJk+jB z#twTT)8HEeHSZ710xjTe-2tX<<*azx&?!lC8 z`$y^Z?UvCfy zjG-!${O(=&TBZUg=gRb#=}792SwvxAqSMN;jpy3Gsn2jau3R#iJn7F-8R<_j_IO%H zcDa$kPGp}!23(xD_86b?@s_`<4r7pbxy+EV8`?I(SLvAGjfG! zB~5^V2)k{t0Z%a>u&Ah65Yd+ty15@>seVae_{oBd56WZB-|+5ybd>P%IDhJ5vYm_y zAK5t~zot~3Mw~eb_!O>aWv_HL%_6iO{n%m4xtjH*sWMc=o@H!eiGqd(CKtWtap`Dt z!Glbg5=S}-69hs{K6k5Qt+Bl-uX|^~1?&kl;3a0ZU2Y43`GG#jO7p>=Q7l}n&DFM9 zn`HjFYNR&tss)F%Xm>DbP(x^~d`l{U&c=bJl+B|@T(RT3xT@(;;~ z3!-*+=lc$27!40tH*VsPtXofX=;n|HHW@VsJDZsL)Jjtj=7H6tPzTCxhDJ&vELhH2 z#1J3JZq9eepvDgl`n?xS06m||wfe4YB)aLi37Szu+zse6$Bt`nU$jVO4-$Vw(?2$t z6R0UlBNMR0>*^l191byW=%#y^pu#lktJx*!V+eLQ>2(k0-= zq+seD4-<8DjI@JSwK{#K7bVIU%r-jsW+6Z`YHO~SPw-(stM(l_Em$jFw9ySe2nwPA zrt5mc>uj_sOk#|CxrtLCE@7YmfU}9QUv-(Wrw6~uOD^?e^IH|fWGMCbw*#fA6bIG7 zoR6k)-fNx;)PS7BO&`_!k<|1=c_D>_aUW@E$PAc;k`_0^wW*OdhgZq>?^uWL^?~C3 z!~k^j;H!kD7n;QTydaf*o0+=h#Y$G1%TE}I$JmaK21};tSZ}+3`dt{(b`8b^4DJke z%Xc>~hu&^@kuERmwroAl5$vn9@5Wac7QSkY(8}a-K$XTz5LHwp5q`eKGc=ksSKE&F zp@sywpFUC$?;H5}vCVQcczYAMir1=e4c}){0P6AudyMQ9>{-gsGfvc`T=`)+$sCP zHrzX%G(%PT>kAO`#-I^1NRI_ck;XP#yYI#ebmuUp2_tJ`$M?<^CjlGghY>N{sSXyP zNBt=Dc*z@{kf1@mLdBxgl%ERCIUjS+qY4g^Bu#hSR102@PrOQWez)vhcnNv2a;Ugt z8gCA3)Wxa1FP7msDNXXdUgU?2D&vZ8UlWfD<{~|s%lnt^>DMlne9#dgo(a)Bdi-;8 za}kUKE~%K?uMEsBEgeHtbnNU%-r5|KCw*4Y()!e}DN(Ai^YfS)2GH?5B(i-?8oJnm z2vKiwU^Z{X5iPCD>gq`kO%Xb)CeUR2c7UkbUQ*Ew3CR!>F)Z*sCXt$={K@iyk0Hhs zuMcYjxE2mTfAO_s;Nct_g18_4NVYStzHho8OP9`VhndR!6eluG5pIg=_Qu=$)p)5x z&Gqs@S@hL5`LO!Yz!_3nguc`~r0fHbf)NiT^lc65;v2Z!pDcn9&qnE!BM5MOO%C*` zUI*bLNqK>fOVpwQ%s4+=38n+|VIG1rTF!Sj7Ll)2pj_)`OWf`Nc^ z&+2NJYRdO$MoLGZRZBsiXAfO_Ad`@KS7_brI~=5bX^CU?ToD}Bm|a?)G&HPMsv)b$ zl~+466es?r)ddeV+s$`2AOS001aVoHz_HcfZu4OC=KcULp?2%j1C80V3Gj|Bq90Bb zo7LBoJ{(PXFtfGwZY*2d?77)T_u~DuSMjZVt6KRU@55RyAn<QL-YZ(8#q5d zZ@S(0n)j@QujR4s5`UjKn3s#sErwPaR`BND*H7D2w%@v_#QuT5FWsyLPXWEY zrVt7#_63i$4a&FKK{tOy!^4^YluCd0Bbiw6lk6Lq6#366;t|Olle`dsizl@1p3}2c z+@PeQg55A}OVeo+s+*Ih-CB{#92hNjqyGq>J$ zs+(p!@jyRSl6k5)6@000mW92--P9DvRC5eDS?P#-CL{x{IOftAy%r)J?U{~`8c3U; z&bU5k;U4|!o^TZE@G)?#OoMefn}p(3AbqRP=e}U+759?=8~P-w_CNid$bRN?2B;Nvxvna<`?8S z7NJ3@gp(i?_>=oV&F1nj_}g6XJ2Bh?CE^-2j^?f{8&+P_+hisg)mBOlv8Mq z2B6{vkN5V*8ZtO$(tj*;f#T9j!yT5M`w67lnRUDT`iMcfsH1CNnDv=#>Cd#7T>Noc#?Mnc46Ka|l()YibvZ-_XQKor6Tloq2-G98Rw(CM@wF{r`?lTcDG z0|(_A_CCo+|cEE93p<6G10R0eS5 zC<}5xy=^3BNY&o0T20Mc#^qZK6{k2^u^!H9ehh9WOOH%aX6hkxAc)boH^96%oSUa5 z1c{NO54;~#OZ#@Rh8>%o7(N56w0e7GGPW=MSd)Wncz9}GTgGZ(K!}K>I5NIycFQc_ zZfn!Gvfx&;dK&;#%0*{2RpXD2o*0>w>)nrw(`n4ZEfi?yfijVgj@+rWKqg6z4hlgo zDRnkoZKAHwQ;jJadV;eL2K*W;Zw42c)J#%6AMOpV_Es~9OQn1dpGz-e+GIV0-}APW z6rW=f(JmSirP1DYov<4jg~THCwIY=A8$h|%kkM{TUf>}I&;gNaRZyq1>@09J&VYIA zQA8GWbC6B1T1VyoMlLmOgNZ1Q)?^2}G`_aHptXNd1&gLwLSs}#eF5{fS z>_$)D$NTgYUF_TY1ox+4nZ*D|2i9lJAD#Ki!{~n0M(Z~u8>{zN!n`NcUyF3|j9ij7 z;{>#yur3*v+z1h$tjCu}=5z&oCtN;u4=}9m4+}nD4aDTC4s6h6nUloIEqbH0UDrHs{W}Dm_AGr^H$Y=>1TSaex4Gs7ooWjKjMm+x@{@}eBMoA zR>_NuwezIH!a`C&`-hUuZdWz#R5{al@-zx?E}1aa8tNJ$3-&Wb8MizT3o!TgRG^SJ zCLf)+EGK`}Vhhg?ag@YM>;KiiKT=%sjHsh);%YxivA zNJh_f5)$V&na86HdLnh-rSdt)V79Wzf%=RwK1RU1+uDHzgd#8l+E6 z#@wF>EmZ^`r~Q1=j?_!@sI>0;G^Rya>LG2R9NuGHgr$bsD(AtWxi z9<2(+pOWCl$Y6Umw|e83BkbSQJe!Pujq-e~h1%*e29IX;WH*v-opFiguoAf+H#>M*L%sclmp zTaZeN57c5X`<#ck<}@~S@gN|K(0#YYPwZzaTtt?Npqkvfv=Z%l^@UUL<|`+7d5O92 zH+c_&b6d`az`Ok{hH6nhXLmSCmcuD$%PuZXQ&34cb5U$l3yUp|=Oo=`6Gv@I{iWT4 zLL|UpsrYW1PmE75wGr(bAmC^N^4iOVxz3!Kgui|g9NK2LAhFT_8q%KUw;4KKXC?dj z-GfXK?CP!tQig!?!Ikq0Zr>XjlQXt^ zS{9eB1}wANB5snnrRaB+hD;RmabpU&Fe zbslW?cpJ{L9tXh0ZkM^DViO@nVIa9d9C^lary^*MZ7n^-1y3Y`oWIHu4cv6DUL92S zEBGS+q-~OgTwQrA$h!bzqYf9Gt0bnkBi!G^WKcr6$`qLP=wsC$cYvJE$BV}s$Pc1s z60LFIe@Zw$YamUzN6fRE2O}Ki!WI~dK#vM?m65Lbj*#|9mb0Iolj(C)?n&F9wg^N$ zt_USV}yqsPeT)5 zNeP*$t0g#dQ%o$RO=Rzf43mOcS6~>&+s}XA8!_}ZP9YNW0I)X-mVHcV`vRD7l+cL$ zw#v}Rs@4=P+{Lb~VD)Wdp7@zLTI01^k&d_f`%x8&<7bTN$(p|VHzaGXm1sE@rYGb> z$VW|DD**AJI4fOJA7qULHp-U;gv8Q4cyCC@X9KibcY%3{>uIG%^7Fm#@D0%XXi2Nx z5hBnBv;3aitGOduRG>1LJk7B2b{Wy}g}j?XyX`%_MNSBCp6bgBrj&sS@LJLvwT>?Q z&Sg-JCE_2qN!B{TLx@sR_R}w1CXbd&VHUInqm&tL{DLjk>zMv<1T^+j# z=Qm*L*yQMdzC%}NM+Y&W=V;-$#^MzA&Q};42W2?+P@VPsOFnCZBde0o6Xc!ma|^}j zarF}lVH}}wHriN#e%Sl>YRE+V&{#C_{g+chGc<-7<@Dv>_p~>|UWDy84B+7$FNe&y zcWY%P`=@gywp{sZ{T`G!!S5*d1PUS(ass3!9&3lIT7R+|ct8rBz5Mkqz$p$oG=yT4 z#pBf+%a=|c7O=67U&gIvm6iM7usq{K&iMB)+eV5$#q@wc;TUDmKgWz}s@8r7~6aeKJJFM&&RY zZD1@YwD~@JT<>^m*S$4-4%DwazNXypekpMrsd)=xTC6S&<5G;Fo8xdC?!>C`dw5RJ zOf%%e)HcwB7DG3w_o}@*kUv@96_qZ6oh!1WWHO8?{`4^_;#{B9}IGZQ(yeq0=Gc<~zMrWb(#|EAeKXKr^b3r{I z477Wz&F$Sk6sPaBgWv+LJ$nNmiBC4>8hcO4{4cmOU1!+`d?g9pq*Wq)$Q@eYdA_<^gp6s^%-0;$Le)BS+4NXrqOcSNB#c#m}?)3Ka zmw~* zq}ii?D1Falv%NfD#aE6j+untq`UbYo(;1aegfYZ2<|$Dyuo3MvIExeR?Cr8+rG0Sq z5Xvbw68O=rESEo03x^o|;(+as*B!Q@na?EgY~_wlFA*ZA|be2eXBWg$pag~!5` z6*r=qo2HT4gD=2+QRcMUyQiwIBTQs6VQiMJD}E#Idlcx9cgHP#6fnGx7heRv^oQf@ ztk^I|ki+XV*}~X&J_*k+NZsg$h$UEl^2eSlRvcpDF^+NQ*2ni?B(Bto!JtBf01$Cs zRjkd=w>WMb&Rzqhq`opgyJ<58i&N)xQ9Msn#IO)Sq{s)sY@QBQWxczs5~tW&AsXJw zyo?AfX1wuy^n6risP#yIlFDbqXH~&#ei#C2<8FspE^V(jQ&w^@YT+0K_@LIgxbi+# zP8MyDs0z{XM;Otv0Fh*~syT(e)kUsfuv*O3e8~F6&Gd|a{TZ~@K zO%h^ORdipht&}(!s7=s!+^t~Xb2B#10j;)Gu$a4@UqOrYMDH!Myqp>57ildLNeccL z;8ggK5oO~*9CwbF+9JhqNs_em#yqBsESTF0%B!&i`=<$U?1 z=y;U`iADi`u8?)uoZV!jV|lwf0*xs6`)+jY+iP!X+9%m=LV#DM7rN5qM|i+pnJvzz zFL$~MiBJF{J0GXZ=w=}465V`Djp$pw_F8KP4RA-03i@sJ6M7u!A@dVge?m~;$ayw&t4Z{}sHUKxU<N1U~0iWG|Oc(0!(r!bb8LDM8}=;~WLfgFae@^In~Ei@Y?EwH|F z=o2PRp&``5R>qJ5fLKtr539a5w`lbg9e2G-je!f-mjriG@Q*+QlB+yCx_i3wlfy$+ z$no!adh};bj!O5CMiQY8J)oRkmQ!GXrl*ubzT=mYH9oCo2s06N_BM9W(SvnGv+&|x z-diZD7SQK@u~hijw5S+8KH{#K@ct}EARtv7+0E%|y!UE4--b|B7Juh|Rklwu|Qm*XGEJdwdwhqbjcZNs_*wB!Y ztU@2}hG+i(_}8x|Xz8q_-?T6Kw7)q8pPo4)CqyL`EPf>GXlFY5ZfPV)e9#ylQRiku zmHMOy(<~79@WM&3OC!rPgJbr1VcY++tz?uRFu&w=aULMIE~ZdQZ+5uph z{Y@=+8sO5y@jPoL#SKuy^KfyOt<`sc)RR%vYi)@;&>^E=jst$aNqF%BY1C|8!+!tP z-%WuIPpRAJ*A3nm_y1XY%pp=|OY9Bm-#9@c^I5s`eYZQ)WvZo}l6q!`mx*?^5^1UwvA-7^Mh*`j9?T}Dpdf``i&Mn5A2iKSI664o?jP5l$%5Zg>{IBU3FUS; zVr@5wrCixg@aC-nrjyEGDp$^p=6!x2K6!st=H}#gV z{w~wlCk8rNb(9&IIAcga_-=i{-qNxeeaq=)|91(+2%L3^usp7BNMYhxsc|<JYY9Z8Guw?xPML!qI`Zbu^H>>xD<6(fW1uY_n(UFf&tLevt?bF#xSpCB z&uj$sPpy_2*Agykz5bYNjB_@bvD#te8dd+x^Hn{|F7wM_u`x9`I+~hL z&tEQgnY)EKI7pJH-3be)_YoiNlVN>w3Lj7KL^^yrgM zB13Cs$UY`~R%hRGymNfgjB(mtzI5sb{~YaLsl6L^F0hncKNUDyxEZwkE^%OY3j1AA zIYFpcA&a@OpsLboJ1u+1gX8|_a`u8($gbLfBX0z`Udns3S|p(xl|g$xucKo3?3~~O zVQe-nj6wFZB@Ll~)r^Mf*+8n|tb?$#hAV?oxn>*&Re{ZQb=MahqfI}kSkRmDBxhp+ zp+!tmm;EREhEdaH-m5Y2pZK*JY%>?{YpAECI`L-SecOErJND^j){j#B$UCOjU5<2J zoI)r2&i$w?mHNclz5Cohp4u65)0W}*!tLWn%Bel830jxIbHur2Ue0U#L&)B|Xk%3) zL*wZDy6AUhv)liRy|;dfql>ym2X`mIJ;7arJ0!TfySuw)EoPG9Md+pT|$4h@nc)Nz{+RiQRzfK{GdU|p{?#h1PIA8g% zoue5}q{sN;#5WMos}&vb`D0_xE+|mPFX#RkpA+I8MHUZ3{3F8wEo-7~Wz9ft!K1GZ zUW{d8-B=^15@Jz?@;5#GA%{(R@SSQpSrr8y;hYh)rjLL~=AmUShgnHG(%=NG8z_1K z`fO!;Ob!oef=IS*T9WTXwvfonL{R0*=|QKRoApJP^jq>gxy8+$<;oFCSJdNhx==e_ z=Dlt2;v%c$xDrJOI#5?7<%)2yZ|-mWjS!d&n(ucFfJC2DLEo#~fWag@c>J?*)h&Hm zp%Ek#z{la0T-U^CkY@m&O>~dilt2K{&cxUA+?BXe3B~6Pd70$)O2n^CIQ^4ZWL)8g z`NHDabmJ=Q?kKkc%9131l^_omfZSDJc&J%bFV#J@f>~+CuWW$&8oiqQ+nuS+N*$5= zmMc_)7Q^JXw}DINLtO{kYTcG65x@2Bd;Pb2jXIC3sSU5U+(4!Bb=i#Op7Z;V_Q?jK zxK-3q?=f=O6}Y{_-wo_aSEG~v(SEmUraHO0=cGIiy{R*$+c_R;@v>dR0;yGM5x9Fd z+0N;b8^WdpDlyark6368hy2;dh7M> z6k1hJ$PYY6xLg!VRW6u7aBLj)A(cz*f- zD$vaMcN*P>NI;-Iq;mEh@)J#z>(6wnv^n7;0?#*YjySJmv2Rs@_xM+}HmO4%lj?xx z<)MzuTHK`cxY~oj$F)6a48+iye!b8;+4kBRCn&$NO-TKck4au_HMP(beNO_Z!ie#4 z7eY>F#Muh7j^}Hvmi@)>n!Uq)-#X&+VwU7%9&kUCb!8&Vc_bdQQg)Td^F%1~_yoMV z2`_T;z+}$Dg8RA(ivo!@4GhRM`?JU?!j#h$sRkqQd?OLRBox?fn9Lo7#O{^v_Yzyw zk$g-M-ZnX;3t3QQ7yGoptp5!iWbjedHZ>+uZIki*_^I?B$1aHPS2>FThwyvOw=$nu za(uA?)*wq=>a8)`p`>6W0@>}%is(V2=s!`8dC*jm*$6VCMbs^P%WJ&#r|)TYq32ko zebqz@oR5ymIp?C1ge)k)q@`%klC|E?MdX!s&(GToD-yuRsr1hT)3)6`3kMfm8oD@Q zaN0gLN{^kbu~N}#w;hyLgFS3Ga;D(gH!#@x)w;K`_xabdL6?8VwgP+4lAe-k%Gw$FS=o`BWNDsw^TX2yVKiALn{^JtuoG6p(`$T|gsq?F*qpW8>EWh15RF zC*|7CR>&oW54ihpr_ZK4B_$;T<<;WPjTthqKDRs8-{qVCR`FI3Us1j1$uIVAU6_#0 zx%)gwDU9~biM(WBq5nr?I^ykyJWo-GnBr_oK^SelQ+-FeY!`LdK!BJ>T(Jgbzc^2c z^ksB{pyd*CQx?~1@6FwS2x(hJYhmgO4(=uSbW6j7?7Vm0msypFvWBCo@cE>G#l^4W z{HAV(K!pE@d~9A&JeFfU2$D4k4q4I^E!<(H8Z<68Hr)bPuQOIDFG=8my zA=_a7-byWNt9C!)07>n*L3l^f8+4HT%qD^@8kn;oHi$BugQEfF-1lz3+}-eiL`nM;NK9%iq0h= zbzKUJl%8JxovQemxn8~z*?x0`26GknANb!pp@`K0D4LrUp!Ij0IWki>QnQ=vMk3&B zXNpfjihMB9%gRnX?se<$l+iJX$;kmJW4(f6!lQ8fn)>p7QEWe98q2lLOVyXo!Rzo> z2h+~$ca)kprgwMwZcB?LTIej_l=+d!IejdI`VP~C=z){r=DvGNZojG5b1ml47;+yX zwX?OPnCCaHw+Ea0{IinD@Ai0JS-8s*+$d`;m4u|&le|sB%;RdlIe(g&2H3tY0gLBD8 zizTK=hL??!PcV=WDr%|}00pb>Uk`F$e=>*@s0R|eU|1BPveAYdB!^uHUoOS77sr>N z4P?VLcS+v6TR{WxW_HdRK0bwENiAA`W|IOXKflwjX|tQW!a=kc2?*(Q{7UD;{Pk?fVOwh+{Iicq`xG`5GSLsAkbQ6Wy4`lTNN5B zD;r}SP0v)@ErFe+d?TGX4u~1_ccPF}Q;IG;rkC!gRBvmf)ti}C`6g2JTT#)f-f$%u z9v^|*{00Uwp&ihgG=X(h`{PYy?c8N?lSd&NZHj zig0M5@dP>i7i*uqBa=Ut;_bp-zDWsSaJhx>G+owZ5>!Ly!~UwSJJNLlP3#UtD1;DO z)9!T%gIrY|Mkz;=9KmL|V&Me?^7*0!#~ z3Zv?;UHo?uB%eX-U0J+9%WPIrxU}>Y8`7$*(71JQ^(o-RR@bhKHa~8EK{cUUnIT<{ z_79Q%*xBYMyy}WKT$+ut8g((+H@q~W>Tr(E8}RYfqxQqESSBY{);4$Dg+(5%&ET6= zPk&t4P?50Y&w>Ka4&FIQ%E>XlRi1o-Zo|`$wuJLm+&?8$bCO~PGQkwXX@DLwdjRj? z%TVkh-fwyI>e^{!Y`;{u? z;c&p+an&_u;E5EfJ&c-rHLdhRrCL#?@z}^0W#N~mwy1I5KYKNVQoYy3wqF*?aEcb$ zbSfyg`GMrqOk#QIwAWrhN;tpnp;i#dde&CSMR+IHEn(`l^S-O@@!q*;J!EFm^Sy4{ zKCadK4`E2koc^i<_+VF$^~6LPB7Jo0VyP(@-`bS2CR3?b0_YQ#p-Yu*$E9}H zGXh~oB=E0V%XoBR`Ze{7uo`)`vE)T&$+YS~vrL3P^c=34SmQr^2 zE!Y!`JxonyMFhu)E_V`1vd?Dxx00%l-Eri3-M({~gndR8)=FcHEHUhlO}RmU{xO5FXp!q03e?cASNFA!a3$v`pY~^KefFr? zT-qLS^d*6nG*;I_+ zQKJl{!GU2GnuGSzs#ifJ?|PS*VpwKJqFtr7s&#bIyqz8wo~%@+OId@y-@7G^jjS*4 z2HTiK$k;wwcQ^;bd)GG$hX?b}bIXeLTGEMY9!?Of zR(}u=zrUO`H{a*kJ zmCq+7ab4AtXo9{F=pL_)?U7!l!W*e_R(%4lfOvvW(-X;Zv9X~X@E2@D(r>4QO5!#x z5T(WYXCI_C8~*6qOwQt=GW=JM#_qcXzhZlL!sQ3q{C(lm(jvPl@JnvO=!RBDOBGO} ziPXtWi$0YJ&%&fT{~!{%Fz99?*b(|I!$VBVx`2N3LOEhfz$H1yi3=8BNCOIe!ssEF z?5nzn&Q^RopH0(8eU-Tz{FOt6tm|EOX|5iy=I~mxx+HIKlHi-p z;2D3}uJ@%RaF)A3$l7_JR%IVi^G40ql6Gb7{`;CePFS%I|9Jz}E~ESNF_r6c*TVTw zQ5uV})Oz&g%@l9`+E#Vt+FZepU8AArAJ7?aLSobn=z z`!`cs)t}fAGaZ~>&pn?t6K-a^=5)a8D?d?A3s2`fhYv-6vfXd48{hC`MV7A|3>JSR z1WmC`5(foA_WSv%Lr56kzC8H|zaCN?^GkfvX0epA@o*ULctsUW=d{%ghW&&apN;Xd z3W&6)&lhp_D>n{USvf`~z|Spe=2^<{z{cAx7~v1-#n={WZO)WA%L?mQJgr_8jx%rC zNe~|zY`#ccmF!fmjfdZza=Cl9dfpst7mMc@UB!J2jxq5QUzCX>JO2gCWSey~xC(#_ z3TSXhh~6cU*~IiitoLbkSUo=Lr8;S@M-Qen`@w;}D-&Ej-VDB_x>r9_)gxZ|o=Bt>Td#DZ`@LHX^yMJzU~NR^1HdbtFuvTM70b0=AVf zC!4e}l?9X4fzGWec;hYJ-zt{S0%Zt@i2wW~mnl9p*zPVOKOgFQv(sN%EpqrO@K!`N zEyp1`Jwh4*39Wdfgp>=>=p*Ig7%~GJCv**yDzSJ8=TQAH^4yNv$&;rl%zpz=|m z-t&0aSaO(+ydh1I^jDLUlEa{?_~Y5>uH$mW^42MUghShZ z@IRf&WO`haYE)VQuS~BYgY}#3FYFv{#8Gbz-x1fu6~o#uGH~q@$l-g=T0L8in`#|e z+qhCcUhN-x4v|DCf9>Q+QW}5H!}v`dOpS=nd$d_TGvavA8oIMjNB1I7VYaedY(t;? zN21pNs;a|GrG>78`j5jxV?MLF9kEZBP~VsYc?<~?hlxg`7e8Ni72JsXx|?lFIk=$| zi^Y0TMd9Q3kv-k5-7z`xw5H=?&oQpqcyF=fW|&zu5--t$!dN11#Z(A&N_e};`RUm8 z!Z+G-T*Ah*n{-$^1e1=OFmDSA_=aNt=(ZBI#hr;w^>c z!l@0nfjIcpf?wYKYwZS^DF{G>0D5`gcWG8G6M4welhENT$lxJ?UK$_?L#ewUf=E+B z-4|l;DZG-OM2Jl?ZG_OVCoNU{sb6re_O*08IcwY#~g zt|3)*J=}Ni@lb>fPOS#?7ln=YHX47t)~9= zxwLrK|H%wB|Eybhm~&O6paeB7hXlptw^yI@Ia^lCbAwktX%^>lfgXyEG|_++zELHT zr!e0lo>l5y2;D|ep^&ON(qRqF3dYAksQkQ``!{)$q`vU|PRW7_=#jDtxQl{Jotg?S zo`=~dW!Te#>G0OQT=L8%N?ASjvW`MgK$+?Hc?YFVj)%I3Lq%1L__@x{tAU^6H0yc;qjbpHz?bTna%8rG=s zt5iX7T0x(klmO4)6%cHcengkm<;qC8*{fZ=sp zjyGHAF;eY6L^1%{E|?!uV~4q|nmiq+h@`K2awsVPnGPIDT97w!W(0rx`Q?-7$kbA( z`RmCgp*DD^lI#7aWKJe*r(UEtNjmo3>$B_KhF| zpa*=${$s7+c++J%nK4QTPh7!)^u&>_B!E093aeR?Uy@&tziM|g2nh~VEbPyJo$Uci zT1Q3R)qp?i!Gq*#L+x=;6T6pxM+aki2ROr>@5jxiZ#FU| z9}+eMO#b{R>(NM2gjatNBF7{vuYx8qvuk>T2<2S&e`MqH--BbvO$X|t=zota5u9k# zPaU^g)#k7@`P^lUh@8utzK0oG@>_pKl zThj;%G99(3?WP?-Pu3KOnyKlB6F`W77?I{ukQ z2xHf#wb!PSBiGCq!>Wt!Xz7aMRWY_>4K4pzqtf*IxRB4~4o-{jOz`7XG0MT|0-q08 zA;%VW?op}nbTdx$=h6YSMujM1!Kf3aFvbp|vnIn&lpVf^;!{P!Icpw6b1rB{Y%N0O zc+WHc>7n6P=+DJhi&`f=t>Q~*J@eaCHa5Vta-B)OHL>EJBKOZS{!H@PW8nMwY-?&^ z%^_TZ-cL4*AkqpS^J8H|KRqN_ps!|e_VeDR4?2e+c8`fgumWw6kIdmq1$REGCl`rO z|G{jwV0SyRYWbEee?^m{|0kJq(N>rKbvns>N4pQBt*|oMdw6{6PQ5s)Y%f%4uorx* z=fRX_PW`|C0s7Fq!o5_L#gv}b0#gRR^YVRnM+JhupIMi1_d{T+T_>_sR7Q=hG?|+%Q{DWJ(h3V{&SRHh!}%MO@e;?!p2BoOePapYsv%yg{_F2n=aZp$m2N@O5Vo)R` z+&b4aY1hS%pSaDP>wVd&ZR+itOD?i=^&8RY(m`%%=_kxc_+BzA;6Qq=)6imq%Y{QK z2Z!$SsoCHcX~)AL+vTQK(7x$`AomQMzF8 zpb;6Q1UJy{VX(1k)A6W7F7=X1xtaX1DG+s-!yoaw{w!cVh!qW!>K)zcHkz$FIP!-itjZXT_MP=IC@&Odk7To#w$*`X4Ks zjV5cM(<+Up%ED|skl0VWmHN7OA_N=L#2sVG*i<5wsC{_XTcLniBH5wOCX1gano0Wq zjO6=lHv7+UogwCpVdzWpxzE4s{Y;IDlOD)3s|-a2*L^?YPt3tu1Ur zdf0ogNTHI^gPb$^{TkSR8z@gW+u>Jx)#lzC=`1w148Ud8t=Pb2zP zp)zpCKyAt`rK%SsX%*>Om2=&`JQC~q;n=l4Y4LsJa9!@korZVXMgU)v7>4j zh)R%=_KNH&_x}_+Liq z`3r`JhxQGM2N&$AsHh-sLZi_p&0-d%uC4;&P43(7Lm0@%XDli0Jqy$Rz%f1tjHsyF0>=fu2Lv+vw&ciJ0^AM+sS~ z!Tw0Lr7N4%eLN3t0%sKuAlPoAWYx@)&@r%kjK84N0 zRrSS+KvbL>+h}8TYG-#h6i|3TlK4Ch1~li*d^4Ujt-rjyZm;p4f}n4Ipn2~Tl$0YB zwD31Xjp3{AzPH!$=v4vr)EZMc@bP1DaJXu8`>|akA%^?<6AqQ`yj*;XAQYR%Ig0lm z-Z3O96UrhaQq}kv!-@a?rRDXH_SBR93&#!A_Er2-H9QLMAH_!pS{Ya@ChRu`7#J8* zI~#0vd=5%E+~`QGT@Yx??}1J48O+NkOrhf6Pk3@sN(COiThe7Y<074@)#|ucgUrk_ zEh)9@wf>MD3Vi#zVaD*^n7D-<=d}n*5RQIU5R&;5Ie#T0lKmzt`NLHP36r=&4VKcc zF~>t&|I6RCw#cnxhvR)nQ-ZNkQC2#h3y?=H=ARoFbXiHHQ^tqY%l&|AVCR&CYwR+j z^8gGch5dNh+Tu-|ydj7z=u2ZzBo2hhN4mrOJeNf@v;&t?3K=5FdSgh_7*o z!fJJevXY!Y*{|~VLB{yS+FBxXh5CtUz0=Bc z_vlRfohAoiw0>-EN)=G1ka4skciW8|!kDh%I*H_=N8@ZEf;_-)N#=xm)YzykJI{26 ztZ6m(DO)Ss5`gy-yMg#%A<#=RymNSn;_pvlq06pNo)w?vd?E0~^`%^)nq>xaau^{+|7FxeNHrY$aViix)}j~|BvHwhUlfT8pLMg8dk6D77FJ)oUeBOU(Q0jLY>|Jj)H4Od zHB)@h7M#+OY#7Til_&sEl-D&ey zQ4zzz%}GSomS}c%_WYz{Xec&Nj9x;*j1%AkVH>J4%8?);eP*U}`y+oU`_%ulOveYJ~r|0po@yK1w(UGYK3AlAHg815E9Yzd)-2$A-j zfYn5(vB|lg;14$HJibqDp)Bdcb`H0z6bihpA4{<{cK z&4d|!`R@G@DnvSP$HgciCnq2%_HSLC9lwVc_XyC#rw6Wynr$11eOuamo4Pe39Y{xet4`?*Yr$R0iiqAfPW^ zKd|Qe08{ON!PZZnAA$X%_y?c>1q)&XI&{>xh-LBSEku8R{Q@FEmR#mT{V6`!B&o=a z_J;@D19<2x@XgM*TZU%XVsXpjo55tNyk$ycG( zh%fklixd?t4FTd>ci`Ccc>4hIFRzWo+nZvcJOvkTK33K~+7Ucd%3lan@}~Jfn|mv_ zr|7#EfUdIfHubXK^dt+FfIK;U%G+-0#iOkTJ}F6+y1GP6Qr|w6wJ1nK_7mQOR#deg#~|>L||AMEk4kY%xw2KVOMW=eAshm1E%GK=tt5 z9`8tIH}O#=e7{_Ya%ZvAp=a!R6dCWh^s!le4WBqSG07Cu(4c1QaKK-z{@6HaWc?Ym$fLm+Aw1wn}7%`Hq>pk%a6fir> z%J(#Xqc(+y3`^e*RvbeCbDWQ@)?KOJpy#cmjGx@E7p9B{%~+hVz(3O+;SYIudEHtQ z*)ySKoX$-HP1W$g6Inn#VKLfMUf!o%>1%JEyT388v3vf{k5NguOcDAQ(vfGqp`Yx* z_!oYjkbsh#|7>Jz$Xa&mJ72~O;kc?8;czdU`il#BNUdP$6ImrE36+&M_!A}=A2CTI z_SfCuh?-gMBzYiueTNbA>I{+|s?~@XrphUS zV_6rj_ZVBkmWH8oCmyjeDW(f5f+PBmaV||%{PEkL7fr9V>5z$>OUSFO>T>R(Lev2Q z@^HRx#@$Q5#Cb&iGKSaYeUc3?V~CR$RRu^07ws;Z#?M2vzBy~>8r_W|aR>R0%m^UQ zR0`}}j`%n?G3hQ;*~kS8sj8>3Zp#f5xriC)9t&0@?_)<$K($CTLRByBA!f))GAv;^ zL(jo)iZ}dZDol8ca)gEs_4J=!nI#NjPO7L*1eI$ozXl+%8puEa1!aUPr!V?!X6fG0 z1tKih1auB{T^;C}=)cP7Mf8{CB%uE~DJvchDTwY)IyuXDjDk`p=zJKE>V|MKGghxOK3J)j9%*s+w zSC0c$lg(Bw!P8T*x2`@p#_p@7ay!4Cwsv%XB#mz~3YYp#h2oH!&6Z)6_wMOw3kCn_e2y>L@Y@R(a5GTU)lqQwWhxHIg7beZoO|A z&p0Ny6h1hxi|ZEfBO@G`wTqK?KpBEw+O~@m{O|GWVvZbPN6+?!!AO6mLUSp!cpUNh zgIBhET%c$R)(K~lRw(z$sn3p6zJBxm4OlM7&VGwah3NED$tu44i1}47F4U?`yLq2h za6;l~P1FCF>-?K7`etekIuHnJPf3P?a*s8LJx!bU-I5A+dk3awmRHwzn_d&OI-E8u zBNm|DyeF5<2DGXC`iH5SH9|$~jH#F(~atlxaNfjK>TdDxqixQecwc6P#!KS~#@*FE|dQn?=5?5cf-vmT76vfq4(rH7wKM6Orb9 zf#*lIS8&XO_qv>k3G}A#i>Zf4i#Bol@sRaDlY+HpZf{i!3+Bz&t!P}1GViHR0DG76 z{sPY9LUlGWCg0xM3)%2SjV+-${AVeNdw|SVIgX+Kbv;}t=}Dq9 zHxIIO!E?lxK0GBD-%xHdLgmFU%3C9jD@Jg_19uY<2P9%G4Gozp80pPu0R~? z0)-*#sfu2&k?lJfXl!NOnU-eA3C);zuRnR|JFtOb@aMlt*$GP|=6bu|T@HcSC@sn~ zw6T-2t>G%5RPL0QIKnc)PpH+3RpcqLeZP%#={8i&xs-E29LPmUA0R?6X`O+=D;-CX zUxgcs$xUeyjB#)l3^zO;*sT=pU*v-XDq&;aQSoIF$?Cu;$6Ek1Q)!*sr_E5$NWAbX z+f`+qQ@5v(_i}T$Ci}Oy-LK#Ky}7a-Omw2wo9l<XrWN_N{58~)f z@3vuJ7{-4eD5=i_+uzUc_>E|1rzMlk4k0WY*m9pvw{vk2#+xEw;7s7v2|>VV zSNBRN=*Xv|t2+)*b=eJzsBKn6JBxgy!2^X848&09|+b#gy` z;H771lctPSc&!f%h#AR<9UfNZQi$%>w; z@M7NVkB491zo-7>_rBlVD<$;s_S_CaDiS77*q$6js&(HYBmCyjvepJL(8l}4U=hZY zyuw15b~mu3*#S*RXei+Q;o)2_)bz00Eks{!E`KeHr(LgbdU6_8UF{fhEn~EUz!V)0>i( zmUu0HucNmQio^rD(XOwNUK%%@KfIvT^*j+k+hRjB>+J3{-Kzi6`#0VG%dHvDMh6xN6bzQ67g#m-~LAJT}{^Zc>Z3uOprh1NI(NyIf<=K<>cwGb_6Mm5NjX zD}Y>kr>K}0z2@zzOyOvd{tqD!wv*ffyp^#5uBHsa;J`nx}V_295265wCZoi^iF5oP>ud#jd9h%7l@Lp{bDtx`x!HgMmQECf*e5UykJU@bik z@1ACEeABZgCQsBzn)K}lyb-F`A(e2C3?oSvf zP)STmGQKW|bZ~PM0a96Dz?bVEKvq^(-rZyZevn(0dcpesYqOQqmB8vymS-HExTzWj zk`or=XO%JLk}6=(D-pj{Ki+1sAv%M$FWNuvEG%vI7SnY#@Z8&XzheXQB-MMa@o~HV z6EiN4H}%2(J_SAfyp=?Gs)cil0c#p5Pz1vwvP5v^5y>GW5MGtHUfcmT5KyW&a+YQ4 z?)iSCG-E4zbjo`8+Y6d@D1CX?D?GqmA=!0~nx)pCWe@&KuC1(wbRX!OwaftMC-8p6 zFjni9CD2(OPTaDlg#P>vM?5^Kn*~v%b{Z5X=!J!`lka%Sz-6?sw52VQQDrD&BV*Ft zM_8*7!eTt$tLfzQz9% z^F;j*wOJg+lt7L+GUi{R2|D9k#}xm%bXr}t13G#O7Cvw1_2;;I>wHZ%_M3LOVda2P z13t%%o6n=IbgBAk8vrK|a<*c?cTYRb9m&sx zedCbiZZl3d9|-t}b0=6$i&H9ht^_($ODsx<%QAIApcok#ees9wv)K5wOC<{sNWRF& z_TNbeRxi7E3F3A25d(z+ObxU8`7z7uAV7h%?%$*cpBrr%$RHcXtm5O?is_5AqzgJYia%t~54;MEtOz8tVrE=N7Cv zZl6Yq@#EA*pOT8_XSi}wIFOQ3tkL0Q=lRRB@Avc62xgfqOf=BreS1z@C_hc<@Z}TE z*6ni}*3htFUkH%a+jqUq{A*GMwspP*Jr`~I&xWH}NR`=RV@yYGlU`VyJlL#hi#L3Q#e zG@aoUwiPP|?Y5b~VJ(`?*hi+it7!)*b|3*LMX9h`2tokF@#`K>w{m zr7hn(FB$?A%yP{IFHl0tSnTdMni%8Y;Mn!>df4K}$8iSnrUJ|D$c0B5jR7a7P5<1d8Ia-{%MPUY#tzgRE_u2S6f(^&{kwRp{ZrAhCzLzQZ%=y%NWX& zE)A@YgS;-8WO{%Mg^y+9CryOk@kv8Z0=sW!j^$5`y?I6~7_eclG9In5&?N(4_B%yr ztlysH*f17 zA|Tz%wYC*jROXO!;kZ;O!N^DG$#%LyS@&2n2;uRB0-1RZYD_dNuw*h@#`kB&W-|iG zmr?DA)kypToNmhR0g3$DCEKC`Vo^m$1WGwRG*FH6k{&>E-FfG{zWOlJ`0?@a^Kb7T zL%@lfg9~H5_)$@>^Xv)ukxxr2j$U<6SL+c#PEHlx2hgz3{iCB8X=%j{M+&R}f6YQ^ z#6DmIjPg4Dowifhw{aT!27dPHx>+B3Ac*6~3|S@D#R`=HlY&Zql`%?BL*?i5Gb{jc zZ9e2InV>gjXN{bx)Arq^yeP?sL;CysQGn}ag;F(AqOIzBb`opIsgM1iR2>k-0`vvE zyu5p2Vj{%RS+Dc0g;uj>1xP5L6RsZ0GVV=PTN@1kjO=g7z(#fV;Tu8Xr-5c}E=kDm z2Kf&=-g2QhOK^ML;{CqGKX5rVRi2r>N!f7nJ#^kgl${EcWm-Er@}&5@e6fCOdM`JA zj~7iHBM2<=zm<{A{Xo=H@kNMT+%vSkVmYJbhX^ip-3#L$ZFI=qMe$6ekbx93fW*e) zK$i+(KG7n(Qx^JL9YCfJS6hy)#N_$nwIJFgKja0K+q`jJT-jLPoGe8DsNE6hZI!PZ zP8Ibr55XjKY?b!aPVq>F{v_{xKIe(HVWfhtE`&9OW{9jvIxY*k+2Q7ntAVtafBo9S z=7kkDA49SX?xCo=tPH=mHy;Fwjg94(^W3;I>+B-w#P|E~rL)uaU;}M8Z#CUo>#uKY zTpm$8?957=X^F&UfBz!7r40;|+w{`v*Ky1bOF>?*qYHHG(R92lbjE&>YJhPU1 zjz#}Ljok+frV&CmV6HeX; zZLZQCxwnoZ5o~jea^Os#^aHLz&rg_4p@&KN-|+dLGE362`R7$Fa%Imv>zap^flYZ1 zU_}p|Pl(NaK?XF{Q=c0$HyT}3aWM;8z*b%IqwQFc05Ka_A!PHTNK23MeWPvU^t>&Q zPcfe;>Kxgd!&%7-q3aZ-j_L{WGHr;}6rU^^*TE=(R#Bf9o_NM8)NLy%*@;St>U>!n zvocEUbqi=MOv)gtm#o;y<<$jDUR)`Q`xo-+kKCNgA%^^5qc9B*C!Ca2Q5kQD%n__W zq`ee``xCB@ozyVR&{=T`lJc1qOtsJgmW?nLmIUh=(@}pWx0e(PPt;SD*W#GX&zZW7 zZjaD=O!|^5d7pLkXp{bSy6Xu8;1;w!y<=jt)kR>szpvKcoh;aZOxBz4Mc>3*V!Mls zFS)eJrKgu2VOgE>Yh7=iljaHj-!iXdNhm4j${9{yZ4-zV&Dn6wTuGIcq`Kj-w>W!y z_+j6FlbJaVPO9Qad0q`$T^YqZ*xTF7YiolA?6QFGewUUW-W$at!;HKfE!H5T9T%7TUYuuqz6HRRR=>n3uzrO z9#0+G4s)?w0T{~(1>EHjm5p8zS%5-;7x*9W3nmPJFha%u7g}?nu!79Y@8>m0>CVjL zpI)iytM5+siQ;)UfA8aw;5zg?orxwt-qJ8!>0x5BAV!cR{RiTnUf?=n254_;l42pp z!Z;~J2>EL%!Jwv;f}P~tn}ls*!%qju_vm!F&Z#J%l7-3SpnCsaCYrhh81&_?tcDDZ`1WCP3r#eCbQkmbKIb$7a>Y*3rR_u_16)oFD$fsjf9l zNk-;NUA;2|vTtW5o2r%-s-iA?x?YO2ItZP^ zz`}~G?tbc3Qa3+ejrr!kiY?uOMMPv-g}1aAmWaK^CZejkM9MskHW^HK@coMsHTHp^ z&AiG|z`v|jq6sGO>Za`G%})v49J*Oml(E{R=6OTsD~wmV zJMZz;>yE+*n+i&FVAz1w0Z%HVT*iIo6yX>)Fa@FH4|C$K-dDi(o23>%3V|^|%ph&F ztW;36qHR2Y93AnIkEFnfMJn|FIvV!li({b@Ud;Z9GP8o!_r1#hk|DqvrjFmdbE`cn^F$Og{xRqNs=erS8w1n;|!gb zn~xa$86E8hSn!t1K1)C<^8Lc8>*VAlAt@_*J6C9Ix(vWqM8hnZ!?PSm8SIvPZs)5@ zwrRD-`3$ZWHt%wl-Pz;`@W1{J8*jZ|)DOGznWJjA;aJI8k+6Q+21h&Y8tv@w8>X@P z9ZvFlY`+(#CNtwI0Jp#SqfGUCn-7%*AZ|OI0EMb0*a1<>Gr#^l zM)x6lrW^h5?kU+q;$zc35a(L@1=Vj;_DAhza*}Aj4U)o55AqBVod28H`AM$0Gt9`+R;Fy0`Ghw;o)xD2S8DP*(%YqWT{HmduDx|_2^~B5lhg^C1L{5L_u71 z`G_IuGtgLIdm(%m5~AfQNhBi$k0T_PndBHi8HE#2KM-S5eL zKhOW&;~jg9{b7IH+pz{97c9Nj*~jslbM7%Yo(G?vpL@5o9G6x`MAq}ful4jv)&~HH zv6VH#X_}W$;0+yJ4K_=pHM(HnTz5n=U{S21rnTgrJ_*G3!5VsptVh#rr9bHeQ|NHnQt)>7Tk|uY^ z+4obwSG@fT6~nsBD?4N7o+Vsvm$CN{vkZ4>&WG}$BOzJfXklM|N|@Hf2pbhl|}n!3X6P~ak88!gDZ)cA;m_T2;;k`@92jU_bE0%q!id@IC!h@fc< zhR!8R-3Q|qtH;L1X{6WDt3LaXWT$fZkUYtqAX=k)+65k{HfuD&3rk|IO=AGlGDZqE z?{g@~hP!q#tqsvlyVeEm=#zOycW-6Ao*Bu=6(=ws zDrODanf5(lAcJ)WScA!KBoo7O@#{P0mnCc;6*Yp$yl&wjHmBlvE01^a>VY)C5u(?! zBPzb_F>12PD$T_Q2Ru_WOU9H)T2il3vtDIjYBye|=M0soD26HNcr9BJ6%}o%werSW zo0?Yg=I}Wmih|9~#Nl`(?IqZZY~rc=cARyKqt4Y4axvCFsFR7y$UJon_mI{hAO+Ob z>;M>v#h{zovla^sZPb^iQuCQi_DS_JX+Zb+dZ!{V?^#t`fd}=|?CVI5g5D_h$x9WSC84guH zn)b!Cu2w}Q&Hm~#6EYmSnk4AOWDjxl0_#%MttsUfMQ*~lD_bKT)BUo!%U(#(%I2m| zNy{xhDry91`*;d=U^taL9c#&qEwxqaZ>j)QR|XUGBR<^4P>>)RT5Yz@X0o1~ycHd+ z#t3M{-6buST`g%ID4+7MeS980;3;zC@$@!L3T(F5;J`ZEKF3i|nD*2&$wkF>HjzOp zBbT732msG7UuX-{30~X0q6v=@1*&B{V;$<5bra_7tShis{Y6&2eSJkhc0ApM+8OODK292}%*?h# zul)~zSOB=EA#P(+Q^r^#G8q?F&5F**10HYc;m^B}_j!rTdc+WrtpG+@G5>g`jA&ZR z98D%HH1wmo`qVzlL!~j*kybV0c#eFaCL`Z|nz5(nQg9@z*W=^)csEp$hK2@0Rec5g zqN^>-Osy@Ekmj@P6X;{}>o7WVDA+_%Wj(U#n5w~}_j~MTpEAZQjN(flF=`QItrvoW z3l{bdoRzDO9qFq#R6-eTqbNXm1D20WwBnd%)E!!J>%bTDpmXl2G(rE^L#|e{JZRv+ zgKe>C-Ra_gg9AJ-RZUsOPQ|CtK!5z1r-Ys-1sxy;53VxZ9Y!NX>Fscxi-saM zOvi~4D2SFVAsW;*>QfVYIeMvCOAm1?_!8aD{x*QO-+)%0}qBWzT3wl;9(MXxLCX z0pM@*ar-->_#@)diwMi7t*xxu+UJkkeh+y;AOHsKPUpe}edSrjrA_w?>5?IB1uGQ8 zzUDQVjM_8DN`h1S2+BTx!GvCGofJGTSvMweN&Md<7=GQDDJ!uRhNe6oOp z?@&@%4hNZFQ8YZ_fXFx4uqg+sLBSLiNxa5J5)&5(c{W#V^pUJIDp3eL{PnW4jcOme z=S#m{5aOf2OJ#o&laK&(%K6Kr+STrW>xZi%0jn%?`4keqD|LYy;HeDo92Kd^1*K0v z0xlm1DF7NzGumcq+Y~^xb0bO|)mHNy8ICH2_qg4RT}4#g;adoFVDcGb#)K@=r3XeO zaqBxNyoslp7=wY5c4jBgh*nbxU+_ecfgY6HDwv>L=p(x2q>`J!QU9PLNIZe{N`lX| zZK#ca5>eq-fk<<)ox-IkMZ8*ZTJw;%a_ocL3r4#b=(S5mX$A>=bB&uLV&h^~Nq^q2 zZ2-6UD*Dons6S>>fp=xCcl(}OQwsx!1K!ra;CU=UytNuGSJT|cc5!7<;Fy@u0S)CJ z76y-l6DRdvz$|akuKL%fJR@#22&m1VcJa5A7L3H;uC3wB+j!iGi7C|Gec$wJ z=k3TYR-YL2-}ZVyybtG{*P9VYE3hkHm8&dilU}0sbOC@6*|PEdqE%(r_tn3)F9B-!?uBOG3N}*sxAOh1ijN zZk8B*9{F{YD#jFjrQI0(*UzF=Qz6>CYHx z7}FIsB|rANcaPivb~sLNJ9!HMDHpGo%}2n|U-$lUp0n`LlY|N7`5(Z@ea&=mi65l) z{1@*|dEy{RvL=MKcTn6m%rCBlPR`Xv3je9`TRlr?{A%k9z%qaOBnsR?U%R-ioiQn| zg9NsI+9liXpLtC}3BW;tM**|8y9;knfVqjI#Q#s}Q_*mNXXbOKFz);JGwSCOm#LyD zL(ih=^Pm48_x%4X2ur#3CSytJ9w+*id&a%kR%f&HFo<31MMw}aO%rB)=MQ^3Mi6;I zOqpUKIPK7gW?2Q#iC^w!RjeLPN&*d$l9hgEZ$H2@8@Vr8os?kf}jzjCGglGC$rP*BaLrlYICNal10otKiYgSjV-F46KPdzrEylbq}&ce$RI6A$qH^7-|kmx?y~_peME7gcmzaaqPNT{b7LhTkWG z@;9Zo4RK(fEhQ)D>smuENV}~8J?2j-t79kc{q4Ow(_PF9og4- z?@;_4K3(SH@!$>%a(5C#7KGyavp53nw&Ekz*u~x>PxcXw|Oo?f_?L z-OG8BYA%Q$o3MUot@a9zdK((5^*u&npK^t zS=wJ7Bn5{=3Ip8<=y?x3e4Lr1{OxMw{LWOVGSdC0>+(c4;}I%)H=;772TM8E@HC(e zo@wuc|DivB>v=5BId%cq-{MBCfgRCG#_uV9I)kT)Gywg#x~EfO#=F*@^;zy05DY>r ze|aGf1kf`otEyIeG3~8Wydgrep=9Wik~oiN?c>0mZZ}Ey>UcR71UQ6&y=^AJCkU|g zQco{`eR^}G<-`YBiIr~&)GiUC?J;6a0wFz|n(Ss9mt%_NxkUi_EN(XA1aTDxAan0b z%`pZMDVW7#QguO9dv?TlCLMS#6$Z#k-L_7fbAeYm|MvQN#N=|ZH&_h^$m;R-x$YxF zkvJ!F4 znOAWigj1ZbDN{T!wl+}x%5Zia#ia^{dP3%YYO6#zqXtOR_w?QBZ*VCK(|p%0lpzNs z&FXFjP~59~|B%t(dKJc`TjqH7d>eX#g+>Z9L3 zM+AB(d1pR}_WHlYBVe;jIShY3H>#RU;-I$`(VycMOAg<3 z*>%>zQnt?`yn8GEon48lsTd>ZZMnij&Xt>YJ1T`-8grY!Wmga6-P5HS#W%h3c~eMh z%pU*unhDhYy4pQ5dvdI#6$sCKg1v`H2sBef0|6U9m8D<{uQSu5{WY# z4xhAiKm5fHu-|pR8hSo`oY#iS<#Z%ldjvBz-&Y@B6@LzOUUtRVmQU7qJ@`>j0)aH% zEz!DcFGjhw6f3Tsu009BaMc{8`*3hnxvcehX|#uAI-H7+LqWiqIS8Hhs_s5JVYuD* z#vXVC0sdzuS9gvea1)+hlNk?$Q6=&oei~SR8;5k<_+VGFsrV^M@2FAS!^(M~R<-f; z_NmQ~m4cHI3VCY;qG!0Kj(1c1XSCp{C_NR911 zBtu|4f1ENm;xIzIC-yX{m5oJdzLPI8U{ge<)l%3XwWoS8J8vhOijFif1HfUPXBQ;wN`I{9tY}ozaTiTEB?C<`d?a z#G#aY;jTj#_LDa9=c6+b*A*qy{c@zAUFc1B`78OL-=cA*MWdpGzx>VWi8iuQF|Hl? z|61`NdN@%DQQWq5v=NN-ECs_}*&Mw20A}V-E_}JRJ}TJMA}mM59+;Q$CTqe0hiSyl zL0Y~>de0J5hD1q6@t^fx^FnWcj*c&MJWES%r(vgJf2LL4<}}Bt^2*NyF!r%V0RySL zzD$a-8?B`B=a^K$V>dTWQAK6h99VQI{QsabHja~MU!ON6^zY5YZUYL*_3_)76viKDK}PcpTtG$;t{X8AaODCK{rU_Z>vmya1fnb0Eyh z+Rrxokrs=)`lTwwfg?4G=He6Y3a+0*wv$>z^f$>RC)dz;;F}STdDaS z*L8geWS6#Fm$~w?&i(&@4C(hwO7+m#UdDbZBAwnxohh}A-Q2zoSzq1Tvy+&1-u*Uj zd!-d-bD+xmNij+U#Fxxf_KlipF|5DsA@ zxg(pr&xH8H>V@5sz$wvE-*wSIQ{(?Lk65*N+Lg(6I+{qA@tu36-rL1Je$qp=tLpL8 zCjN~cGa-xh6%l8UQ^X`}tN51bS=CdL{)5WdP(@mx2&E|S9!Njj_7@YXX;ffNE^lO+ zIkthk7E7xilst%^jB~zJ)Q>k^`HIYvhr$q`iP^GZV}D#yfx|m$>Vo4IZtJ2${OKKv zGFvhFC;n6Ym6S<+`PrlG{IAR}$@&`VHy&w0+Y~%kDQ+XRHCOIuM5CL|)h?@de63G+ zV=LUYtB+#%NJqS5MjFJljH=L_(&=)d<2vyX%tF1Go;ozX`;^}M-*j`Glzbh>qB{T1 z3K~=7TsDZj7U~bo^E1Z-KP8xs3Zt_MsgV>dWK}`MO^axPgQC3Bp62@)8&P6+c{#x0 z8j@n$SEJvpM0= zCRQ4ZATe-K7CTPG&K>U6(x9u}1%1_G`%6fNNqs5YxIm^6CO6|)WcwEa5tg>}On<=x zSy^l6w+GZ>gFtcF*c#*3-r54w+3ECA%jpApvd#TtZ%GESnG~jz3=IvbR^PjxZ9AF^HBqzVXi>WzKggFkE!MX;;$PRgkV*}j(zuaOyy>7!2My)Zl54nDy^A;S$DH~F(O6iSZhOOB`y!T$^u z9mIpMMx#SBc{coQ+=bRagO&mT!b%u=dYyNX+U&fBWUGT=Aea78$Kurn#JkO~6FHCQ zV~!r@XLLzTbY*nDdam&rb?_`tJ`8(Km=hF4s3skH$HaWHh6rmbiYKsq{j`TvRzvxq z)6zSUhnnloH}D(aeRJ)~6P_c#c5o!#x5b~Z*g$7g8CNwp4kVc!I;?0uyKxWhlC#wRP_d{V85Sm!KH>-J-u-#vH&X2Vf`gSp-SqHAL`h+IBffLjB~}jt9qFr9AofS`bda^ z`@*9B`Qc1XR$V^^0rRR(6P_%6Y4P~xrYqjlA7NfevV^NuxAgI@aLN>vR(ifrQ2hE? zP4bW> z;lgpRZl$qtlZACO(B8IHw#vQ)_rXg|(>kTQ!I#cR?B|cF8?8{62)BG))*r3<739J3 zBB`_7x!qsn#R*x7q}{ZbnwoQUO3cm6EC&(?13zhQ5}=y+P}R~`$8qoPl6Oc=V?bKv z;UpVS%(Uk|`Gw!=Q*$Gzhvej#pE2|4qKI@M6}VX>+LLR`B*H*yk56)Pzq}0gP32$d ze94+@NmLw~5E>S?Q11Do9({0WV&dbVZ8N?3>-~GUv!|ve{sw`|1k38hbUVAVn3$N5 zogJwH7hcFqch`;H)xk!qTezw!$Lj4Wpb-;n$3$a<&CKk0?w2ggvI@P8d$>B=-S~Wc zcS9-2*u8gGceNNYZ?YWzT!PpAL@2&R=ycGw2qbPB;9vH-np2)X&0*ymEC8`uf6tH) ztttS6&znlhPl`8em!#zg7`fB&-#WI(0yREe`l~aihADgr;$DN#gVmS3Sd4|XH^!DM z&$LMLT}AoyMH9&e31`eJEz$%v>o@yygS(7qA0mFtV%H*4a}JD5Y#4-6;@bJVY$k1h z-M713b8+PSTt7wUTxF|jld=NcoKEGECSs#`ty_lwF<{@KtXq%ArXJ6;+ybG9gL5aN zWWxJ+9g>zanjcQq+DXGo5U!A3R8#%lz!AeKTw;fAV#Sq5cx9V;Cva4`^q@^xpVw+D5ju_3MvNkNWxDTeG4a0tzK98mwozDvoc2LAXP$lRMBkCt4eiJyD0Rjj-($IUbJQSy@&|?&n&9U z6NjLn2EJN;kkNPE)@H{u!a1Sr?Y;;acx`oc6%9Ac2+flSfApOVUn&x3!+K+R;Z|)% zDL$B=ft0i>#3E^oxj^(ari<>z;jLAj5iccGN9(5DU{an{tsW9MTw`Ek>*93QFZ$8~ z55e8SOW{wzfXWAi{T!LHTQgHr|AGQyJH9Sr2q4)<%3RN!q_XvYWv3(jJN9e?LV0{F ziArTaDkFyS`#)NXAL0qKr#@}H`sU0q<1jAK5CD~6G_QC#-w2bqm+FmQM~0OGb7K1k zI#HHpgI$@ts2Rhpf84h8FTVrL15VlKFE$(-59VH87$v+?7cI9Z0!N7*A_pz?DSR__ z?nk2ZJf^{o*Lbn1#0a!{GY@roHjI;^Jabi7ZSD z&iMnYNgVyMF2|CbYu+cZPFJ%Vujpuu`Smh>?JLHJ{=FZJ1Nrm)F8quj+9l&NtJ(%M z41@mgk4dr_t`fnAZTOj^TUcg-u7gbnjRhiLXPuld8yXq{G@J@patsVb7$L;WdiVGi zbBz&dI+nQncnCsA=4NIVBO%Rx+`XGNUl)s&dxF2YL$#<}goeua=zm4S`gf*d_mdv9 z#bhSRAjP9s`c0-BmBhZy$so2dECc=mw9J?R3u2*Xk{#&=8iOFX3BzxOK# zC?4ud-NYf|^$PhVBdaP>Utul|#|L^VtLo0yZ_=H{EIpHx*&QsG0s|Mfk1wnE;9cUS z4x;?x(shFC>%aB_1E)uvii+wbaLIi-R#ytDh)#OH1>g%=v4d?7e25qd2oE>*xTr`p zV80x(e@}x`6On-QPa9x#u9zr<@VpwTLX3BDA_)3T%WI{qbuDLlpzpUcSkpMFaybs4 zFzZ5C#^}s6wRsefEbI%r4GFhL@A+J!7kwg*80WH@+Udq@^3*RlRLGX7d#ZZ!l?Mru zF>EHb>Z{1i;k;B^7I69SZ7{|L3JsZgW@)r^Gki3&q6ejV@%>eQlcs1pzgXJ3C((46VsoSg^l59x@e^?jIf4>Rh*_ zz+wTUo-;nvKg$53{t0Vtxf%{TTN#2oF(U)Bsan{p(cj6X`yZ5g%FAUOcJ~;hBapn} z(z|5xl9`RJ3bs&<8u=k@SRG{s_JfmOEP)e|UF77XTvjKsO^ypJ`?R9H< zcj^1AFH{*JO(&JLj>Tzc7=J;=r-LpIg3#-cG2Ef~VugJ`k6rq-mHW5Tih92@N{Ss<^)bh`wZW9OiIZf1EFRoZdWiH1 z@2L-1H^kcw>ZuEI&Q;`Fd9awMT028-ICa%X!C*q*u_J2m^0As=QYXX%5>C)wm2-h`wfyu4Ob(NBffN}e`c zYUGWyeK#(+DMS_~{UNAq1-B??RtYtsZE#NyJJhY(G3<&`9gbv zds)FOGAee3*t^UM6D*VxMb$4Zsu*&otHDF3uCz?vPU#Nyd?5l-TDKVVbHpZ^jLcA{ z3=Edn>7k(-{SnN`PGxHlxWFM(_;)( zVz`nxp4!sJHXg`F;N7vRdtW=o?Q&w8eqPeZFj`s>)~IqJEi(XuU{Rf&Rm3ENF7l6d zITPM^36Y_Yk)j8*cckFnxB7HkAA6Cu`=1(M5D*wUHa2;H(V%l1mTNk&+_^E{R6)OH z!)@b$eeqTi|KAn#bcEpZCG7Gx32V==3%mZ?>x1Gd8kKh@_BZ2IH@((|e?E@+vJLM*yLOfIUg%dzgwhbf(IbGD>s%UPeWZen+e08Rl*B0fQ1x#jU4^ zwtGt=5gq!@p|(cM1TpF(s=f`GNo-um=v+Q{ zU^rSHy{WKDeIY5?BiA#S>Xvi!)bKbry*;gL$0wav?n z6_kCcDGdP>tWs0BeUd@}hi;jw>ivo@C+0RHga*e&DGuvpcN8arP_@e77iWPp0RQO- z8UHO$n8DwA1g94%nF^iHsk|42#0yWzX!lJx1u9KOPLq`X*`+eGNalUiQ^Jk?$|Jqy zmrf%XXcOWX{}NNu`=(80b^PO%bH26ji-HP}w|~L^lRL*HMej{~L~uzK@>G-tw05%8 zx!Tn6!&HKGk5FjNPiu+q6FvPL?>li;z)q2$lmiu_FsmLV!uO{%rz-o?rK4Tf-<>3z zEk3Py9<%pFLDj*S4hv62&|{`1rNlE}837lw)-Sd%cFDRHdYT0b@qr>32c{f4--rZO zFXV_(hT`ejG{vu`B!BAJxin+Iov3a({i<hN zv4l?;YO8q}um5`l(T4G_+8J)$O3VpS>D3$_vl`}jUW8LZms6XuSF)SZ-BX(B|}RdFwc+C6>+#9Y4$_kIOTu zk@&48^4}kCDGbjr=`UfUI^N0QS-t0z9?=B{qG?xJU4I#7wB?hxcFAukbZuAnH_QZ& z_ES8h^5_m~Jh^TC6Y=bDwgNN*zJj|D(Y5K9VK7|4l~^ifvEiT0`NWe6O_Ph_eu`QhN2Spd?IM}p z3h%cv)!XGdNSDmV6*_;!>o4q;H$%+qdlZN`e(Rk9AFW0Dygseo5Zi~77n)~EYfM02 zxZ-To+zRt*L0QVZtX)D|ktT4)w5%gkBGW8o5PLP9^>>lJmI2j=dFI6ujsiQ1v=yYtaP%(wm{$9kE!N3mr0)Vr5}<&G>1fqTnd0)wp`LTc z;=90_m&a}99a|Y0c}Tojm{4-X7`6e6)iDbc8MZ~gF?TQG`TGzGhC57IeHUpkQj3R< zYnlu1O*!}l7FaCjE}pX_J6S!waCE$gmVTvM(^rzv=h z8!NvxjySzM4==7x&bClj&Tg(vH#L9*1}YfBK||lKY<2TLDVL}rFfqw5u%C4^GPum$ ztPNO~ny&H_FSNYmsk;HoMVm~Us=^m`!p7@A$qEI0){jJlpIr_@OinM8nc9HQYTa^y zrS0YjhlCWGF}{zvay)NN7uo((A7pEj7)*EO3PcU-D4F-He4Ea>j<&IhGgH{GUjn1r ze4qz{BNl8rCa>?2@BDmd)8)E)W5Q)-W2kyEr!`pf50||VYleQjfV`%olLUbUT9)zO zzpw6FH~0Juu*W3B^Rv`wsd?M78{g0n?m96I(o0fs2D(~V&X!j=Us?Mhu_lRQ%M;@U zrSe_<@r(Gc5a&=01JoF%-;e$Xk%bc4$phd0nM8c;$tew&R&2R@m6TS_kiBLLt^F~d zcrH-21sVuG@NxicN2D_iD6Hy>!P&G^tEu6Z4|7qLuV`b6^ff&U-7y1!_u0nNO1}X@ zDmoW~1ltMtxDtxs8LS@f1T1|HQUVZpV6rVG3D+d~?gkvm}O93Hy7x$+3x7HS?gLU1tO*>yDVDdOT40OrPn{4p&5eAN9}w=T&bnMJC~oZgzmS7{P(9u{v zA^N7YZk2(2gQGt(MJ5r{M(Nxh1JqTDC6*3*Mr%uu0wqWUJ~H|k^jpX-UvXCBl1dh6 zBaR$MgvUgCddAlfisPn%*yIzug@Y0uhMCc}YJ-C><4Ya(dd{8`H76 zwH2EG_7y-TjNI@0wzKLfP^8V(c~4;ipttPuE_B# zC5v9p0wq0idbfi-00`hy*O**6bwNZ$mH2E}tJeGG&6|$;l9rAbD%yj+Wxiw2a6D~y z7`T8g=IR%-ml-A6@F@Rf0me*AJ$kGltr3bPyOW7dm7TN8Tl$m3F8S`$~lZKd|iGo6Gz)OmOb6 zclJJ!niL{kq$kb}k_GSlkn`=Z+2;uwr(mzS>&Zpd;EKk)&+TaFR9%BQ5&!7N6+ro8Kp@D+t^o7#oN-s?49iWDHyFdGL{} zaGyb0CEq1En(9=3z5wn}S z0Q_jppESRFsy3_uQD;G|5HCbncaYbB>cRqEmS+4_)%F3sBv6rRH5vbm4`&uOIuk^J zVFc(ykRBPOEcWGd7)okv*x$eXGDlg$k>hE1D5ZrHr!wuOs?HBqnV!!qElH9V`|CtsY5ArxfDwD zm`A}PnM)M3MACM<`0`n0T5oH}eyHsG*8x%VrJx|vM)YNmC$=RwFAfIwe@=>ce93Py{o1^HNWG>~e%_TmF?RdjT#dGB!h;Dm3Y@RP$+(bg%VJc{RZC|r=rwy` zH?^y7_hoSH#3&IK1l?!=#aR7tOUuCe?`@%cVOFxkS^&rRJB9+$cZUkFL{1M?=!}fR zfUE?#wNHDy{_D6&c5WCc^8!MUO#~v#oD|OO#(5S>64o2601J0RacDuKtmEs3(^^~a zas3#Eh>YA#=5^2|pX`|>F7c0kJ%;|7PKM7z(n|TChjkwM@qNeXMyw15@kZ1-t=ziM zlgE;=G26cf;xfuT^D4w2_y6|+v{b!2U9;xF^;kiWK= zYF{O22njz|ehm?%6%<6`XT(#(`wLPjIf$PpbwPiVaGRm0d-Fx)i>-Z>rIeAom{`AM zyir<#U;aCpFmuG=f~Ii7j+C6*+80Kzh8~u&{=iqU|ix#cZ7HH()r{6ie-yZ!;_c7UBe>4hiy6=T1f@E%7 zT*5+ktu58*EUmSOnpW5@+fe`rQ7>2urgpx*;mfR7kAS%Y7&Ry`1N(RPYqSW zeQbfyhU4#|LAYZzBkuX^3b(fTtXEjX7d`O9=oAj` zltr+t3zYpG58)h$r@tl2k^4NRlMMBnX={>{n;18edITQgUdBseE+k}f#vKzJM)dmz z3W9d86=;@C2(ejr@IoZv=1$NKI!khNN*x~`M{Tj3hv0@q%sSJHd3s`g;QpuCJ6jUZ zwt0`=Bg7fW+1VlG$8l_pbOiN?(!^@V#42eh1~s{%CkhR0vZ4^-N*3UI`?V9jJHu^r z6~mGf_zO{Y!?3^KUOkxeG>-iTEK;;!Hlj(ib5lwaFScH&FC9%2}Xb+cW$3`#ER-FBrW4JJnp!U9f1JE%1*&0XWB@bj+5%U7&Pt&Ne$e=n1| zQo5qL+ZRRsInuLd8MZ!uetmitPm*ZgGvu;%ig4PSMQ7UnpPs`EAD4JG+(4$`u~h1b zDiMkABrYf0U3aGXcgOB*``0hA!l$n|MXHds6RBG22zW>$FHyXs$a1dlRG<->BsnDK z(9OgCWjL=^jseOCzxl~v+L%`JJ(MlKK8L=;!FoqRU*G$r4{IZQ#km*1#*<3#%Q}>o zN#yIAR4h|Q3M&mc9x(iq3%0*&BF@7o=*I>3BOy@#?lwKsHj?Q9KfuXMn;CPUM zOtkj2+x(>U!8ztXGl6aP;kqdz;#$A){WbM#Y}tb!Ab?=h8;pIuyWvHMcjsyuBGTU+ zsDI~?THk9G^{o>ZP3q1bN*Wp@Qc^1$M@LYtOv2Um6&jgf;P;7h?W*n7)yR+UL!^jF zqi*4GhSP>x%hq#77c6w9zKxFR0umntSEHbzq4oCnOMrx`B_->29hf02oO-POM`;-K z_0TlJiYk7;?=>e<-v>6AZKG&dAV^A4QLbX+!y=G*ndZltzU>tky;a*$Lgm~?#L>1n zM`iZHMF{%w#1usYZyCf2Vb0a~=yfUE5*5_T1X+t#;D(3wqr(1KM~?oXZdSo)cDS*7 z&5oQb4Hj2*G=Fc*rwxg{e?J@De6=V*jPY{Yx0IP+K|uUaF7z5aDw8%BH)+wp!-d^iApLo-*>Oq%2T_DBl`4jN4&>H-#$!uv5` z%a~-w0+&W-Jz@q#+43QORGSSQ3@1ETR)P0xo3OTD+guM`4Y3LiaSW8s7TrrSOL?y> zlEtD~?PzzP%9>xWzq0qX$Fk!0daAQfRt@35(>|7cAPt*|Y?nP<{H&}k8YGHdEf~zC zF1JYuAJym1x*ZP^sSC9)1h3tjC$GT%Q1$*~{q^e|-mqXP>UR4PK_3mPB&&-1DkMa8oWGL@1qTofzAcdd?<0>u(dP+ypYA_C7Vw5loOrNpkYVL-IL%uffX|fd^y!3-}a|qZi5T=o+uZ29ZldH`c?ZLhVvK*Yxa@!1OgX(r9|t zxTI*(+92R5*MqwJ;4G@4VObFw8%xz4spngc=ExPncl@HGL&l(O+nzVhNGG?WLY`Fo zW7~>+4Jk2YSMqVBk5|So#Uy3(*8ZzcCuj0?9-d3$=so28nvshQp`~km22Rs%w>Ox< z!O;d+#rkwCK|{uRV{4{^Zsb_>xCM$$l@n%#E_<)v(y2Fi8grkW4hMmJ^XP+%ehUZi z?sbo5{{H>EBn|sfBK%M1r=Cf%yKFEg=Vu`+r-jqXa!vxI9y_f@8g#%4lZ;Aj58s_$ zn|t%pjbRHU{RcX8z{6csMs{}GQt-d4ywqTwJIH<_O7G+=k<~U^Y5$s@UIJu6qsDsi zGpjx3`}bhXkQXzho*c%@g6LIMS|;cri0EB8>5ZTQnO}?3Q^e1oSU?`pU6}cZcyiVC z2pFPS18b!7zZf`Q|H*yGPQ&8G5qm!T}1J0Ot9c_@%0_;U77kWPUX6ZoWgdUk?zwWyZ zX*|86Uj2v>6iBglY7%{at&h)GeuC8O#Uduy%)IB&>wb(%_fcv(x110;QUP)LV>n0T zo(PTl0H4WMRTdt{+K8yJ1`p`d`i}w)Zbpu*qn+IiE8`<2z6!lQ+SZ+?SvbA@g+Vz9i0`umR`&M1 zY12RW*F?P(d?c@uAMv=X#9Cdo6YHs;(UN?|PJl8?&;OGaKAi0c6Cd zC7lZ?O!_dN%YN$uRIQ?IHLd_Wa=2OrnK0O~E`|P2=i~pZti0-nF4XaRXdYy@oV7IB zLsdL!yDRCCSq(urYN=6#XDImKXhWW#|2@&`iK=&ij@ip=eZu^7c%Dg=64PL{y-xLX z!8~arDarNN&4Sy6cI zC+$$S0n%MVTWC(A;;bIgtjZ=#8x%y}Cz31REoDAhAhD`6!)c|8+pO~PQ0UJhardB0 zjy54Hc$|}mlYBCmrqRejaBeXRRU7Qnc!HbQgxMyd(II(Zh7i^`i+!y&L(#YESe{vC%_qL<>^r8?MBF^xq4} z$`>4QIKApOP6)PrL-bpp?=KMEIz5dQJW|uJGHQU(R)BXfeUY7Vj}JVaPM0j0TeB*6 zmVW^jk(ovKs1YAOm>%OK;h6`6y{XwYV~XvbyazKGzwP36An)8VX!6@6qWHQ0- zH+;o0EH;v4Z7q_5;-dZ6+Y>3CT1}esxmoN1ciKoBHe?=2w7B&oBgu@TQbDUa27Gxz zK9o;MkTYC~wTJ}y3l~txkqQ%+u|vh2we&K~o|*6iN!lbk}f+*BE}1`E!@w>!+qjYQevnz$F=uz!Y(0oH5ID0z%?`DNN|YwvYVuQ zRneqBoN8|cpFA{}nw3RmJX}kv<9l;)^>2)UD$|-zKu`%=tc5A0qo{ZqES}znN3v*HuEu)Tn#F(hXGi~w<nd*G=q z44>ua6}AS92pV=Km%UtZ6<80XwYd`8(eJjDbvO5)}7GfP&H8+o4Z>dR%Z;Ot_%_B#6rx2?a@!Q`X;f%Toq# zY-2mGbZ?y<()z1UFgW--djACn{}^hAB(qPh*W;TWX%GrBN64Y=5Uf;w?}?|arODv z*qby{%c^imJx?m|j&e&H*jZ?Wmh}k;Nl7i71tR8nBjeSJp#F1g)gR8F+2=PnTshpF zJ$#0n?oYR^l8ss{=Aj@!;lgM8`b%kckbtYQsSy-#nnTs9ZZXGOXQYaK530`yyzU8w zYcD7rXFFYJjsBV9y7O^1Hy9*M5=7YX^^vE{N zts!xDn`d&h98uuJlB~aS@tEvawwOy~%dls4g0_E}n#{L7R|ps~sJ0$xDct{^o!xct zd!IgGR_nOom`ilr7)nhouQM{WVK*Z9A0Mn2vV&O((W37ta1C=h1+@Lp~WRL*20 zbJsRg_RR91I7m#A*S9>V{TJCMSWqAmTmb2;0e6})r9{&37u$k>|B9WOfU*A`YTld4 zlfOQoMS zbyTM46NqA>m>|Mfggzk}kJmjOEV~4&#@Bc0K6Lt1W{-hYru}uyx*k}F_;^^Ua?WZ! zoI*8FJyA2b_WmMr2^aVG1S~-vdIlqz8i%|I2{r2(nmVDJDp^0w9BXwn{O;pbFWcQ`q9^aUG~(6Ariu;QO1GNCL#n@0vw znE#+-W_#Ug!eQVct5MnO++?ex=xCHo^_PtY4e|Yxnz)H=x@7ZBv*Zx6hMQfD z%DyJ5_+kD=I~5AQ^}$gBWk<+k-;?i_1_ognj`o9;%~bSWU+-L0g6bR!_$ z-QA$lEuwUH_og9Iiqy5_w z08X_$#_&JsP!sW$fgMP5`Xz0W~U9y<|ClM~BPNRVQW>g7YEc$p-v6&(F7smu97D61TX29+i zd|nrbCp>r!0qYmLAaGO`b`+JB$chD2BvJAw(lcAibhGi&m;6oj?75-xjenn1hK&59 zbH3>jf03i3#5>~&AX~IzwJn-pWZD0?(pDXQZWs(@w;_t zLHM`ujiOk9VNSfXeP3RON=njCr!k5FpIh!sKO6SiYXv>@G3)X}7aMuY$op4JvW;DI z>4nFQwP{`!M{#FD30z{#yp@33lpJYiW05%_5$cpOknCIHZz4&_9M-cCX_3ORp5|Yb z0g=p`C+p*7f*KX44LsWcJ;wSQ&sLwv1^UkSfn{XoHK55X$WQAG?jIV~m5ja~_8;WU zN^O2^X09I}B2$R6$B`C`$w!kHBqYg^4mRpbH<(p_++Q=9uA&&Ob0bSBT`rFD468>U z@Y+9at-poL|2gy<@Wx(!AZft#FZc*$*eeVB&(+yLHC8!Y8DcD6F!+5e|89vTn~SS( zd`TLlU8Ej#*9g9}Ag?$y)O+@6TmMs;#cqC8h_mxb_$EasX?u%JTc=w>a&2d4p}=$^ zQ3(l`}{ z>;PJHe7uwD76cu$W~(^-`aZe{gGFvwFe;S+8WL9&~e~18PAW+q9ga z$M<0h-cc8+S{5OK|p3LvRRC|ZY4p1ha*^qOZBm!fKkbeDQo`3zJTyWjou0Wg1OZ6WC zCxU7K5Me(qR15!yuPNF6*$B)Lv1Kh#1#;YZA@hmuCI_c#8!yO4Ip^X()iB$)W~5rX z#+-vBh2b40xsb`{dgC6M!f9gUP*|ZlAImWk@7Zj%cbe+z5)~Faa%7>uSFnk2qR19I zdh8c@)><%fy1TmKFfcMO9GV+E)&|oKXaB1A{I09VALr%yWiqP-3Yh(yhJF9w?k|Fg zq*rjF@5eRt@$!}I`3cEJIQgai4Pq=JX&|WUl6>#nBYUZSkM`_LYK|sGOU<1J0iyeY z6o3si|vwy|Ajho0KeTf!7*_izR* z%b_qf2_8&9uTKVxs>$cHiz?p#U{5O4|wuGdvhD zV`s+N_?_fsA%yNF4i*8zg9xQv18f3DfwU?SeEHU4dl)YYWzN*GzH|@8oo@xqa-i zF#(7wQL&5QJZ#d-1y(o#a0h7wKgiZ5`R+efDg>5`#P|Jww9S1 zvbSp>-kp)9|E#4){wui*G&_MJ@ELBj!l$2s+Wx*gONCsd(fxV`f8W35+>c`q_)F1qdY4u5`B(ZjD1?!5rtr$0Q{+ zcs`6qbGBGcwA}nsTjMN9lX&+KS@o2*es<;pith*F9c&7;dee`4eQY%v1X3$NSW8|E zqDs0Lww-foV_>xA$#I|jLLpQy1S6Ea-A*n%3OCjvG|3cTvywW+YU;((MgSBsq?jZh z@`S$ms9Gwa7^u&M{P-mkL*B0?o`lc6;Bu|g!865V?t8Z{6%wwiY91}6*LuIA6%xj7 zvU|H~p8LnlC@A~Z%^;qvT)G?KB9$HLc-yw=A;+Mj^^7m{##`}Dq({lXl zk$a2x*NL{X3zMCR{(iLE6=#w*od1=~R6vB<`v0I&QbltTY!J9y~U8G78oYO6WF#uV26dMhN7O!>vPb z_f!vQMM3FOJ0DVx&jo*ZIu|BK8a`{=9ln9r`FrR2Q~#sBP36+P`gWDCwvjYW4wZ+k z67E>=BfcPUXNmwFZ4_6tca69xnNP68{e>kA-)r1rM;;#fWWKb&3UsHigm*&T;Jo_c z8q1SQT5F@kAi_zZvO16+5mLrjaYy+*kawYxhXjYy;jVa40P0Lwy@F2qkkeby`bNW< zFXuCg4reNzn+MkG0#@jHvax~n?U)BqPG|ahln$=EV< zm(bl$8M>qB;$8jhN(aS&l0QiDORBRw*e;7KW+@Yq9zSlUv)`%?#=gz3c@-WzYcygw zMyD6cG-QY-ytK?5lY*h2%$*%p#wzOA^|Qu8%$UeW2+eD3cu58v&(o=ZdSZjvpGj&y zDOk+#w0NKqICo__8c>!bpElcIC>nb!N{&^e9^fuY8h>!0@%L{b4k;5t3bYScjSS|U zC{Z@$nUAihAOsfKq&<2-M-8TJRk(G0l}O2D?WO+Pt(J@sr#Qa?8XJ9RtnGn8-6qaw zLnj{V5Z-f0%BonwR9BaH#M~Ucl&o|B;7|bI7}FWs+x6bTDf;)uO9(RYCktl#NAoVj zhL!LDAtna+LIebGeMBe#dsK%1%Nr~vov0a&x{+p`GJ>&E4+Jb`KT@C>0s;{dTD*PR z+bzG20u*JjGQpDJaqG+OqV?8H01ECf#q4ehjBo=i><8Ccb_-XGIy$MTI7vw#pI-X2 z$q&JQ%jj31k+`^H7(>TL-~c6}=9}r?eU+Pjx8FjK@K?ov)3Zo4BS`I4J0wcD#Ym;3 zYv+7zj{@0IB|>|^vaD3>oHauQQ1AK=8J=y?CJp_`uZb+j|4ze#8Zj}~1o#4&_d1R^ zXtM~kb6Uf%X0v7Gi8c`jQU<9aBZ9_barV%4FszhwBvyD0wWnRl1aVe)IW!F3b=XQD z7va_Sw>A;&ihAGy4IBw9LLSgNJf z%&wt8P?bcxSqB8opQX*UYpvVc%#DvX`h1lY__47!f2u2rZ6HrAw?>CMdcY>{vwKo0 z8UBpW%+gW;rp8Csqvw)F!~U8)Ip;eQ_JUyfzYrD;vitQ#8=>m2q93EuERqT&LMk1I z_(*wlbg#7@JrT)09bN;pxAhKM^Z(4O1vYsP69|--V(U4#TDD->DhN!yXwD!cSIK!TEPAWE6uMTh}#fUcv!hV z$wsljj0859fs4O5Kw7)DCI(Eo691!0MYAcCIL)2na}sg~zPt0vtE~k#kL~78TX}z8 zotVJMr3yT|y$uGIkA1KtV$mBoPSSpY@Cib@Y@JyrzjA&3sxt3N_UV%`pYMZBis|h3 zU5mHG)+SoE6l#J}_)IZsAyhus{$N`s3=%ZngGb!~0yL@dBK5EDN5f@`TCYNfw}T+I zSmw4NpUTL;aSysVge2rpgrM4Arg9MyxI~e0Rl0Md*#trkhJM%2R_jR+p zhD(M7G;EU7Alf8?eapHXuxtt(z~!#imxVVpz*>u}25{%t@41p-Vgl>jkv212DRS#R z1K>pdlrGMH8|Rc;Pfd7|x&RgP%l}N(V=bl3FnDZtGy5@_Qdl?|F_aRKeX2mQ%eq1& z_TWHZxYd(IM~7u3$fh>}-sc+P&6krD%fKJIr517!J!3_$`>H*# zq4sH9h!{Hv-1{G3$%7SSG<{IP3aG;Y_s;f6pr;Ec1y|+&4kct33_!L7Rk|(5pIu(V zhC>50GSCu-h>7uoz#%}4r(~@F6}{h|dw`y%ERFU=?;0;Pz6Efx&0S`}uSWlc7Q(Q% z%%%Um8BJ`z_7$!ABV&b3Hq`Cy&staG9QcGO6P^Ff9??|?{%fo*ci7mVW;gc1bvqRa zK)`xR3HdMK6G4UCr2Q}c_rB@PX?X!QeZq`dY>ylL@8zHV2OyPGx(EoP{0{<>B*k_9 z?_>Vo-~WH$kKEbx74&R?O$`M~tGtEka>`?*m4{#vA#zL!s^Y}yfzi=6CR3_}4>)9R zjBA*LY49*G7qw9DdXiq(IeufN(5Jmid^HbL7vC* z8=HBZn@-}rqwN7~1yVRPzHCdU%~``V@F!04c?q$CZ7TtBx^DvLQJithi7 zF|GJKBmCbOQ&rWcJCl)*8D^IROkF@8RelFyyiyli{25d=-5&nic@m7gHR?vTsHcwn z+1x9~u!fI|v}&xwyoTvIv|#*O^5h|p8M|YI_q{DhY+{Gv)7dkxq?3r5V-F<|5C)(~ zKD_SWzsxErDS0n?#0R69_1@Vqo$PGjk$X70-kbi`n>U+%vAq^Ktte)$%=u%DvnO7D zFiPNwo1hvqHF8krU}W@R{sRo?=9E!dvCe$FoK7SsI9^k^TD$({5*<)TgI7Svu$=%q z)%w&2j5<2XaQ{_kw1?WhN$at`zY7Sjw@dA4fH-Oy6b_oQfH!*SrU!yW40-*&;o?{! z*rN2w<=05{yXcp`BD~MFU_>w-`|4Bq*~?n@LiWkLryv%>PhT-1YPelJReq={K2N|NRB5i%J1(JuV)pAiw~>= zDjCZ5hVY`5;87HS`)Vs#hR;)q?~XnE)Vf_@xA+5#Brw2xCzv&9{SM9@ON-*c%;51~ zX-G%z9f89(^9+jZ^E-dXGWs8)s*`$WATxC5)X7;rSZA1>I2H(?e-CC-9g=v3#elOU z0xF>&+jnsKLxDw1FNhIixC5IfWBDd(+B_oO&x6olH1Jv-*F?reuf$oi>x_*^;jiSnP1w?st**ZzkXqmanfy6vt;~waIH? zsepWCha*qPf`zlT{t8;hyKTO?q|2HnDsQ@h^LiloTBvBN&kV2xpbQLGGsw6Xh(8kN z_CgoCk&TseB=r94z;Hl$J0>izJKx=%I4M3lPdrv&iFf>QQ)~v1Eg^Gp55XME`VU(h zvK`J?0=Sc`bSSRqYwKo|m(rdKEtCII<+OXhnq2`BJrG75wfSMC-GDLpf64$Kw52L7Y$-yOq#1UL)sZ`LV#v_fSq?)|AZpYohM1 zc+DTwoR&4voUJ^jiB?jy1urD@hkxnNk&kjXdT9yUstXr+GDOzX1K4wi^_rx@xl1IL z7mVP;w_zJ$`)jo*_94Fi7wP4S&G_G_5b?5JuI)cbdBraJbcgouUq3(p1m<@FD`g8w z2Ez^kA*0tU2(sB@wgm=>ZLjDT)=~ijG}?=BAQ}ErFAaxZ$Gy7l&OfNogRS%b%Y*$d zX8riJp_-{^ic7uBV@-@9NAmg+3Q%6rA$MAU2G9j;y(uqeQ7M_GXRYX6@9F>cW1&Th zo}ByyoRk>RyMA71ud;qLk4`G+hdMHH1F=E@fb-$k`IghW{Nfj^wVWf`k+10|ZSGKd zl^aBHm^bjB@YPjt`h(%<>~P+wz(XRV(0Cc-=She{IX>>Mco#6*&YZ?)-c17+AgG>=6NEF zcyC_G!s@%)6OzuiP~{|hMnvoxSfot-%10ItU5V8JxCMmW=-v6A7IQMzQT;p^);{=fxDr;Knr;L7C#QAYmJZZClwvqb=tm4{z85A z>X9H|$r{a478e(v;ARFERP_R=5)GdeB88}Ip}NlRf*GURj{Cy$1D}2GgCpl7ILHuUu5H>iok36}h_CpwPs zeZuMMUx7?P-ALh{&w?AZ%nZy<=cdH(x}BCq*YafdTRPR-AB6P(E3H z+uAK1;0LFNLwo>SLL4XOgVc*t8|iRQ`E_bBE%-|xA@}_5jUfXGDx~L4eHhSw5qBZI zW}3dTJq0@hqk5x9F2I>N8^9qpQE?5UczU|>WoX4YTQJ%TX`Tl!W0M`Cv)ar4eyh1T zyzlhILO)|#nd~s&xaGWK-B@t;v zwSDY`tik7Jr~2ehZd{^>H4I(cjD_4J){XFa=WjkrQm-4Y{j4v7-*Rd{Up2;YiXpOS zADTbUgOKg0VTMD5X1lYnad+T9Cm;f!mCwH%*0agi9dO7j-cqvg;BNNEhDcBW{wHn( zXS-Uwbar2cRULa*J2z*^8&5LmoRl6N2q%1 zJs@AXs(g*8e1a4>J|0go`E^|82m?b=8$KEOKaZ)NxI)X28?8kefXd@_tZ&A2IxT(^A~4)>vz97S8y=^|tw9TgkSIlDtB9e~ovSg?rjLhTcvs004I5xm>Yky`J!=&7+>hmdq@(Lf z63!l3$&|NvA5X9qI=GSP;!@TkWigHWYy&-Bwmls9^7pInsHN$skTUb@MmjTlRG)(O^YdevzJ$>a>6;JU{K@qJNKbX_Y`zu?c6&pPGNyaeLh^r!M_@!GbAU>ufp{B-$& zc6RdEGvOalqTQ}@FLNrA2k;Ia=i6Oif$pB87U0F=$2B8&MxSxr?8fRAFMrbMDXx6I ze!B4Rc#NnrentRTlOW9%aFDJ!eCqQ_m+UV`Xm1(WiFGf%GLye8cIFoB(V|*JO17|F zgEJO-GBI>j(Bh=F$tRX#!+go^WZ0hx(HXI?Wur$~CPNr+M-)5IOg>%*L!{oHHubOC zsHVxpQ(G2dIkW9zI^Ag_XYbLaWkQ1vM!M&tz(#BX9yXq}NK?H=Nsk4|kMm>A_dH|$ zcqF^%fVyca8&z>nDk2+~%>_T!2o`jM2X@V693S&xBIU_qNCVrBRapwu*mk|%fcLN> zrD6a>Qf7w(N>kH4fXoJ|Gf2Cr^M#>D_W!(lxpSMMOBLP~QU9zRzb73MzL9rb@>7-D z^fns~;1|VQT;OHUmBj)&Sp8O>-kfB5ivmu*5k}Z-^1GcwjI(Pq4P}1s8=)Vg`XM@H zJSV0HiIK=?7=6bzCjeUCWH+VG{)JD1fZ3Q_{c{q%s2}{un{A^iZ6IOj_UxqOYixGq zD~Mdp^gPS)W(E9WItK?TzB~BpkkGZ3#(zJ7jL#C`caHJ9TsO8F&RZdv^S+5*c&@%Q zXM7oMGJ+l?28rApFIGUSxk(^hjCOv)_K3*|Nj|XpYaoPWE68#~{HeU#ae$gSI;q|=?>xXn<{y*VWBReHRV?u#LM5^0iM`RFMCb?0>p{`Mgjs3Q(ko`Xx@>G0+ z!>h12lg5>|3B@r9d&4lYm~<1W1s*h4)so%e8%a>mpR?K}G*Ibb4T{NYc+h7%(yUJii4CkCGUyn6!5I;lJDtP-T8#YS3*mRs;a$ zLs2r|hGBd1yLw!$!x6xllV?lVJh=&FzEQ~9*@{%vYgR!CErFAXx$5<%h!HdQDjV@{ zXt{mTzYQ_o=X_4H5Vz(0cV7&Yge7{+R zximr!8(QofoQG@cRK0~&2EgS7t~@H8a-z1LjxP23dIkk8F`TajF4U2#h?J$A`YpP9 zzcY06`%36lEAe@7TAz zdY>xH3lCiA0G%>vrFz^@gjgVVq-K*tEJ|G67Xc1B<5mk=r5i~6YQE0#wOif7Eqrw3 z=Q+~h$Vf+?-`dfTp9)$bc;q^`!9a!;ZFUd5hqC1D0|GL)=P6(oD^io>`i9YzIpuum;v3 zn_R2*%%J8?t-`OB+nX4ahp)N()>|g7tWBf;bx9qG0+IKweH!G^;EShtOCjt4E?+*JVIgAaD zURa!zbJO-vnyDD}(`hRbU@hR@P54%QLsnR_2+N{Z1;!a`h2Qmq!*Mx*hS^Ys7u%Its+c4BdFfG7&L@90?qXBc!SmRAyn(HMXu}D+?&uAD7V;)mhS@zC1zRI+k`EpY;&e z*7HN2_S%|Ng|*rToP$dz${Vx*E^1UbP5+Q3Lw~7}`KfW9`5T$$vx-#(ir#o(gxqjC zuIrD#%YA3_eG@4}gVvB7GOJ)*soR^6!0UiiLt4$We|a8)I~A5AHGG)lG&Zdm(Xt!P z9{V$q0od3D=AO2_y?VxyF#)n8{e@lNPt;6HD29INF|j#@K}rSox9G_xcl4JAAWjP; zl3=!s4rNF`MRvGO881qd&)GS>hnIi}aMXI-0H&RJ*^;Kq?n--Q7z6Kp`1Fi4p`q>S zv(bZfF!u}z9AYyybvH^1>#Pg$Z#>kduqZkbPK)p>FE%>h_!IR@3B#JLz4mf+*;?=PW3P38AANp}l|V^wdDc7i?6A7*eWYrq zg@^O5zgf9YjCPZTrVTNkRV1YNBUF;`Swf~ z_Y=>^5WsIDO9ZE*%)}qj?S|2us)exf`W62RhX}dvFA7XDdY&eCuk?Zfnm*-=u1Q&} zw5!sn-)**`sCZ{|^iBQ}F0JFCtyzW}M)kxsC=9qk(9s zfSIlzkWW^w1r8|19}baAXo?hgsoE-{IaMbDJRUXe%)AMfiu^B=H1aLNA56De>3-HK z4bY1)#JUfxlh--1Rs5-H>f-^LhC;@;Ds~ts)KNLlkz(9;5eE)Xe2h?+5?6>-zz3oO5Q6dMakQz?%`?^ z?ap}0jH|As<#<8YrWW4}9uTMas{RHx8J>)FUN20_;Mg*zTWmgN;N)|{$ zswBS-3|5ok>)s)2+3@`R_)c}j&~kDO38d&NJjv^WoTY=&UIUxWtN)syW0{`*t=+hc z9r&BQVhNf$d{%EL(PH=TZeuu@A#Z{29voQVA3tRjfj*cyINToH9~RHjJa5*G6T=E^ z1W-z`>c$yo_=$JCv0n3^^@;F#KF;aaP59_7TNWw;&Z>Ss%77ew39HEZ#&UY3n7D4K51k8sV>*;S1VAb;Z(Dn zyf!SGArZBv&}vcz^aH!>KE0OZ*Dd4a$6cmTTW9`1#L%3Yr8nN|Jrkf*yTb}*QRAE2 z`lsYb8l<$StC1<#H8V4h{%J7y)QYtK<&l+$_KiEJuvpy~!dQU*Mx?%~|6};<{09)A z7D?Zpa9jSZ%Rk*Yof055K>+zbe-C}|%C9a{uQxh0$a}rt(AI`POox*>944etwSNTS;{O<=p zdwiLIDG4M6Qdsk)(biBAx5nOow-o}3z4KVUFHbsNZrnZ1Bt(o1`H+XDk;83S3fBoi zOS*eNqxHW>kYlrqs#w14s}MCy#rWRhP>$P=nZkx)hUS?$W?_1=Ow|WEOAJrPmh?J z1-zby)1QL)mcR#y0xVZ5l)Z~M(eV^J` z7W`RWM+#%d!pN>9!dS&tb$Xr8a1PIPy^}Qakjb=%0rwGMG)lx#H1Vh=v;VMWvCjt$ zAGJkqwz(GntwQ3*0VmK28U5*{5AQ80oodMl9cQ?N#81pOz;Ip zKmq*u8N_0c3~7p~m2K;C9?Tbk@`GZ@Fk&H{04g3UT7$mLMgk~(UQa?gbo&Sa9raq6 z8U^_?l}d+DeM@_$HY+a;WN>{hl>>*ecU{n4?n2sC{$q*~Xc+KJY0!%(=X8 z8z0)E?QS=6JSoCBlyP>bTz_js%07w5K{WO4-aPM`Dg^0qvc5YZ2WLDtFFXI|wAkVyTGPCZlpGGP=auEEX(uB#M)}A@c?A&)p6mPZ}@cf<3fAP|`ucH8;X{`pNp<=}!+5YOZ>{ z%l=Y}*H}Zc@U~fOpHbv}-4Krw{c?M0b;_~Eg^Z3>?0QoVQi}CL4K2sQJl|EH&iprz zX3|iE8`d7$ltma3(gTYo{1={((EMfUUmd;yn4bHFyqd?@T{&rcb|_Id z)#xttGD%~Xc543$kfQ@oLR@iEiz{Z=ZVfqNcKtRwaBDylbt<}x1jtUwg7dW_{&WDW zWfDb&;WF3iiT3xPy^b%Cn|I4f14Q{fg5B;2$Wy#Jfhi6g+PYgTTp^y;%=m6Tk_7np zzp5rK9OD1h#<(Tnx+k2%!lh>Hs}7kJs*lj(-PO5KnNy@)isivi) zOZ&j$!-Z4&>^sxX*O3ifaqUfKX_`wJ*y=ANz8@5O97JDqEdXBGw?QpO^NaH8toh_J zrTFg!9KH@Sm#gdAhd*ol{MV7*(x1)m^>nNj7*>SnnwHB;iVH!z20p0NhW?G{Bq+Nu z!9WY1TPcbO1zqMf>6GR=kDI`|Am}sB z(m$S_e?7lH?7)R)Ib;H(_{Y{BE;Kv)D+5tz6|q3}FC6P|;qXQh}`H2RxxRQlPp% z0Zw@f+jrDu8dzqwXkV0I2i^oJjg=MtgyGD$kpz@|J-K2DNy$@9u0llB5k%E9W5mzN>CN_Lt_~+NcICmv7|}DAxyenzo)pa zuL$Y{4WXXeWixqf9psakus)jJW8TCo9cMAn7V$@5cQ#k zMN&C^tex6rf2Srq(Bi__?WjK~9AfX!+TXC!kavxrmK?hN?HQmWHw4DmrX$Gq$Dy(P z$Jzu}mh?dr%2*n|Us70TrCFIS(*_5ZW~2mQAuRe&WBHry2Hra$u^r7ENnBja_FJto4@2e(^<=#i>NSKHw+X#+o&3%`39n?TTo-}za(6WSIWBH-?!+Un|8$#UsC zP~Fum`7)*?C(%QRfe}71yV}?*7!3_wEOZ?9^*_RPVR&Q`WVkS1A^s>y!}bvGU(TS2 z02`P);b^-eaEBl#So-8{U}?wLQc}u9hRU|QaP1`w=y^g% z@(XkK15m8dzqb=J%yYm2do$@Z`BZ(-arvQPp0vxd^L+-9D7>d{g@)61p%1!P)qiVT z#BTk;TJmIw98CjiT1Wm$#@uE;+w?2%apa5);I_IUT}%`T88`tz`OpQ`UGmhA?LRqp z+WZ(VGQpD*1k`L;qQusY7v}O9+c&q@(>s^tE0<;aXrQDdve&Grk8glyuP^t_jjHCX zi7V08O;;4-rRU>jap^%J)2YWwRLdzweVil|>}gq;ve6lbAQ6*HV@G;`f#9Ie7LL+x@UfiZMyJ|B zdu7qb7t%Kh_fJXpKCQ7WMgkgHC4q+;ZPSml8qCK6cxMPtEVkY^M-UR`E5}U)=WPFz z55q0qJRtM?v*X2A=}(_fimex#2NZL75O|fdz98>ut!m23hm}lQ6;4~7c?b>s#@*Zn z)+Q*0HEdYb5i>K_yF%(}pLVV#KC1^zDGR{^<@`@MFeVbACJ^8M9gndQK|qh?=hK|= z?{Y(otf5-UE&jT;rb(`ao62!(?pa@vsY6%ZVd1>fzTc5I?d8oo=IYr(VM7W1*jJrB zXK5mMLRDaLJUa<-B*|~(GW)r3$gQVT4xthr3aK%r_U)j~QoX(eVqzjUViN?wLxFP1 z>te<2VzoGgK>&4X`lP0YMo0Jl_wi8v%9f3X^JlfG$+BbJT{xp5W5w_!#-xvEx!=&z z5?42OC%j0>$lyQ;4bQ6YJ9?rV6i84P1I~|cNZ?(*~Yx^l5A;cP(@jNo670;gVnd7c0mhA7oMa`%d zc~DIIwN~LFB#fVkZlIoP;&?ilB-!Sf5e*gwDWTxbbS4uUNFRUqO#A9wHUUGI<)g1# zmy$ebn!U#4fBTp|)Q-lQJ$tdQHeiy}rkw1Y-z03fr8Wrcvwt>R4T?ft9Ey@b!yAAu zUZa*2wKeamDvMw>`=GlGk!)`li)b5UiRuQPC-~slf?3|W6Hp2*p?JIR_K1oFQAsY! zDAnE!^SkG7gfT&NbF4v}RBbbT)5gpQGZpSi93NU9%5h&;msPqlU!F~30y9@%??|AA z2FB;^ru{LMW#Su5r)z<%uw!iKziUfvshP_(qBnl1dU$#n?TUJzEnQYDV_TMdnxVdg zVhlVv!I8H5P)5fDUUrJByhTUK=m|VL`}CFJz09aPi6WzrnXP{Gn9wu5`a1}vuc5uc z?9#|;xA(#^U}$u>In2E*zSL0DLVC8`Q*$b> z@+ZtQQsb{yg-{~3de=ieFB1yh;#VbG za{Ob+TVQU&3Q)qy=!022uGGd>|u6zE8MW=UTkX&^Dg1TVi5l{_v>lS;;buQxoab8f1d&4^8HT7ATZS!{F-TGJ1$3Yn|D-rHa8xK8tMi>viZt$1=gj!LRGhZC*5{RUkZ za$svzCCWtNz{_+m(p2Itx3*44Z7cU1Ff*o7qkWHmVLf@s${J5JwzT{v|KrC6hIcGv z!wKUrit3Jzc^C~S&N&Wzr7UFOOWNbctV)DEjk%X-)=|-%B`8Hf{Xyhi>r=lTG;Kg& zaJ(Z`L7|dbeQg#^Ezy)wSUgP%cuN_5vMHK^ye3bt zN6(+u4e4=pLYDEZ#;krXCNbo@W|y2dR&|(V7iaigkZBl6S&x6p>~>Vn8wUzE3Q%)!!%n zY2>EItC6~2#22oZVS$`MD6Mqy(XyPLR}ap!g0w-nykuJ9;~sK$;)jgBU$7Y$h_Z8S zsKp%I2-jg|{lc_M@V672T|16|q^sg)6t7=leMl-C=NGs(SYh|Bw#Fju^Luz$7zs%@ zZ(&0VlH^Pm4Py1^(os-8>dF4i(XNOg=nb~n_A{*tfPqVUvx8dRIJ>}08YS3>B^zTS zZ%v-FytyqSJ4*L?N7=5@0f1>)kmV_Y#mcl4MLKF&TsHo00ooRTuekb zrkPt`kI)n54fa0yV)lL{*`Of>x2G=2okm4_l|_rC{ya3+0PBkdCs5O~-D1MU=>sm$ zQjyDw(890gu1lAMERtm>3x7!^a^Xlx%f~*H+7B2h1sd1UQP{J3c)PwBu`+$>6Bpzk z1PrTI=e$_LjUW?8U62@c6?v{j%{;LCnkRa7B%M3h(j_rz^K9LecGdUsSXregeSM9x z(;1q*ch$Ifdr_rBpO`3-H<6C;qnVn68h^3DH@?i@H~O^W8CfD11B;V~WbX^LVRk0} z%gzw$p02{G#8;p@Ty2d6`Zt;mQ1%2F**o93>wU0dvCkl#oEYm+UJV#Y+8!q=FHy63 zJweh$XCxi`WvZwtUY(HLSgu!V??iHBzV(@ z_Ybo<9Dt9u6~XuHJNWE==JIzp16?MYQS!<{(^#xk7Hcs^^A3U#=;?X_o936ApgcMXcHo8Vz-ac=*#X{EDplx)rF&9!DFt*nm zRWubqAvbFC^n^P~5~j8EYV>vkDQy;yHM2zOLV8E>G-eT&`6a961f%BBb(5Z z;F7>i^?nJyX}S*Dj%#Aa(YX-dcMp;2IhxW57$EoTAvYhv$+Zy%;7t*#qA z0=0WL>(jba8u`GQasNaK$5QY_73y1X+#gr|%aw6~qrqiKWQvaRYs8X@S+MsH1cb$x zU+z;W3gqz--!^B`#Is&jlAT;G)J2c@eMoLdo5>DEh%mnIEsTzD01M}SisfJSrE%`I z)E-w`B(KeVFXMCCvlnW*qC(xd3bS2&0mft^g!gn6->!&#mBaQBA_tc9cnDn%Cnmad z-JLdQw%TMyfI+}Fv-NM_$s1qE6AT13Ss3l!-*H;+peH=H-uKBzM8}%jW!n35M57YC zNm+|#<%I#+HEq-SwE88@ui_xX1JhpMMV_~OZC;G?Fc6Xn7V9~Cgv=E>h}=ihQ0UVB zrV`Yn|49|R)$kySqoJjRO`wh4Z|$Q0ZZZ&7vF^NRQ`5(8c!EBrYZv;scdii3Fn^(# zRO5*UXzz1+m>U|Ufs3gq<}lQO8AwmNE72ii?V;4hTK$318`On|X$``D?ki}PU(kV3 zK4^s6>gal5v0N|8TeCOViD9y7KD%J>U%@oJ66twk^CsI{cD!}RDJ};HZe^q1PNog| zaN@CrS1iyPq}*EXr*d%RKFO;w`rxjA>}uxNh-}aZ4i?2y_!Z5lj{k-m+(5)RiloePXg>)i66hvl?GTv* zt2`VR#29>7Wz=LZDn82kV-!#EzRRpf^&CqGKNMiKxJ8ctw>YY%*)KX}GCB#t|A2g_O1AXJAYpM*7b6FmuAjv>8fKlP3$2 zFCN~O%k}m=DEFsc=|x02_F3DrCy>ml^O_#Mac2KwHbcA`C;A{o8dR}&%)V_dTIyk+ z%B}(jI?0Z6d(SHX6|89YfW5v3092dSdTJPsG*9exYsp|a0Dm0oAdU}NCkH%kRFrZ- z1vw-Ey7pKSigmu>Y9}vr6rN%00rAYo;Td)}oP!x?1Tsc9ODdqwNK;6oN0(2b_~$>U zDd_Sj$}QZWyafauGbNwW7l*fBlzduti%vT}AOMb($V&5NxrDy8v+vm+JNJQYKN{jm z8TuxAq{ED4ku_R*|CY{%gco3swew-$vPK;w?FMR;^mhneqIZ>pmi%PdzHnrpH+?B` zmsj43HSlEld^PI4-)dYqJ&vQ$xwH4Zo={L0i!c~!W-13eb@M@B%KLKr=p_Z^r3(14 z?Iy?)5@x`Zn?CFRr@gO?i>iCqMifvG9N zL1O4`hIkh~|L6S9`EowIU*C5=%x`A)+OyYQYwfkJ`&##XU$b#C-F*$7U~etfp)5sC z^hZM-y4@x9Q7dAa0PSv9)npc8>@~;D^bmF}NECikq@RWGg4f*ZcwhdgO;ENc!ZOwO zmfkSo?A*6&^e_k+1FiH=@z355M;xY|kF?fHZZ@@Zu-<#2Dn^fk59CWIQvr zx`g8*y>`>chTvp32zg>ZXKTi`ZMb-PH{SsHySs$j!YS_ONxb&N3BH&8OO^UIS6Gce zJ9ej1o6YCSECdKfL`A7~4YGbtr~?_B=R%)YX;0SbH{EcAkZ~Z(%d^*?ZaTW{jIV{j zcCJjZlRYjou&P|`*ml0XcsirT=WORFHRLA&977-G9x7!^%d|vEQ=Ou--AJmc1%cga ztvNkq^}ruoOgJ~c+3y^-O+olWWzwxK`r0i7<=0dD<)w`#bi=oSk`vZ^Ot%c9Uxhv3AKH z*1J+6xAeJ=E2-WKQ#4}#ET1(&>AX`1VoRN?i)wqjvw7`FSst}5&WVr@Q23%GNm}ZV z(7#i&ujJ0;aJSEC*VJto;d2wdBr8u78S$6K0Bp-W4zegca6iKj2x#Rj?q zhp4OC=}O9;u!5R9j4}M`abG;HpQfXjEb?<@Ix8;LUJ*ITzmd<0Y_58QCLns+M3Pxh zh%6LWH&;cgzHBK(?p{Xn{#mpY2FagqQ@khx$qb!g*6s~1y83RLgcJD`Uw#@e;0xk> zL&1JS+>}>f-qFjN++2&97KgpfnFWvg?ci0s`7&DYNiZnac;)gO*j(Qebg?78qTA}1 zw38zVHH0UtdA2hOH2OTPuI6>B)^SsqEkAgQ|1zXCOlUMBD&zCp-(Rw*_DAOOTLf&A z0;G*=rKOc4@hR$KKF8>hU|=geX+#*aJCsIc=PAFS9((lR6*h4wmcs2Gy`ILv6)mT% zNsL1phlB*Co2$h01sy)%{r$ZD>Jmq=>^QsI7K?(uRf;0HEluHfOQ*s}bPA@=B^9O; z5e1I|da*V+n0DPvC7!Dll6UkS9hH|2`Tpw*aH=SHboCmT-Y+QMS|pw~RA=9_R8J|Z zP1)nl_^_J$9_L}TMuQ7=Zk~!+wtCyFddQ^*SMmkyoz?k=eBGn5Pu^dqDmVxtvo2q} zk41B#sKq2As<3l@BKBtqsX{Aw{ucgzM9#-$5Vltz^_2(qC-oLdT{dw$@LS|HFgL$0 z{X*?ZB3m>iWIvxBj80)VbtCsG`STq3tAFl;d|Zp^T)tSf7N0!Z?rD=5yfKZbA0BO- zjztDc;@!;Z=!wOmznk>UJaXowGN(|9svYOSy^qVC(qPjqB=q(O(!kRs{Z910&lNWw zn7n}x1B%F%M`ZWek;(1sALt^iD?^=VF*0+7Wl*kfaFtc+l0*Z>JjQn5HQJ+NUYL z2bg0PT%X0zes@Sx@iQU=vIV3SYt9#dFR$cq(9;|IIuZ}mq9}E`xssT>ZBBbD)B90{ zQPjza`rJ!+%mUK~ac%q3WBm~)mu8_+MS1z+mzag-C8=aFAZ&*8I@M0{_NHY2@E9q$ zUChyuBaHL{J5Q~ktiXVtrKO;1u&vQMP!Z^Pua;k(Og0Tqb-n44k?ActN@+-H;!@;F zbsH2hD>Qm6gQo7v+y0yAJ|BMtvBa&F_(-q<$kVAuKc1-2x^XM?8QM_yQ#GggpFnqr z;@6TEn2MI)m58r|^T@P(c%I!BMRoO(@ffxKYez0+JI60#fH*Bi!SdduwPIlvUy2O> zx%AuKjCixI3b%oLP2U|K#rN8zUajGeMPXho@HC?+5FM}K=rBMB>4RSX0X|LZ> zXG4|4ncr9+q9lYd7@uf&ogd-!a2_kqr`{j%h# zN26NaiQ8KL8^MDv(G{atn5;QJ!hx^pLv&Y=Vnou#gt>9rt$S10=Zb|aT*wIrSCbv&?NGG|lnPY}#)~MmZeMHFxLgh!ybY;(5uzS9nQblmL{i0QX zk}@c2^rNgq>_@y-C>ngHqjCPCA-ZzaSWbh}mz6gB8aJ3?%JxhTS)DroNco_Fv+g$K zJsQZP@EEtJqXIL+$++XJ%C4zvgm$thM(p?I=6NGEutFu#q@;v_t^UNoY@jj9gwo-eq57u0ezMTou?&@DLjU*7IAqAo=^<7$==Jt?Ot<4yf8a1Q z_*;UC#uIB=2I+fv*JXayK6q_rimZ6OM6|IvriPtv!h;a z$93W=M7_V6)8%!n#Q?Xb#6S@-JaFgMYUVUmm4$RRF#je0<<_SH@4BOs!~W3@zOI!4 zto?&XO4cl_-W%5k-?Dl@YI7K6xgK`?RqG?KlM5P7?%bBu(kD--0$bbfp}0G{Z63Us zYRdYle&_}|0kEPJ6#4wYo4FH@<|Wp7n(=&Yp5C!k{O^Kx)B@g4FS{%1%zbrtbon!M zBepygztBY@v@`aNy)UuyzB1j_7rdgR-HN6Juhhp{ZANXK;ZZ-YTXib9nBQ_^v@tSS zZ&zIShun)hA=roK(M7~4n<|r3HuT2i+7FV_vf|-Qh^GyU(yxe7FNsnwX{P*c$i9co zG8G;^kt}5`#{sCTdhg#LyovD0+}au)fb|mMa;v@BB36>os;U%-`qOWp2}Qy-qAs>< zwd=~QArQVw>sjkVO(P>hn+Gp7+=_6XaIMq|YJ7TaP)e$4Y>Zc~RnQLWF;aSfhSu6S zi!Pn5bW2%B$<^p^*_kzt-pJ8OFbA zY7kL&rlx$=0e>Wb)_8V->WmZVU7iC+c>Q>JS^SL+InKqoA6=Aaky=_#{)5~lz;V8MY%bkLm^llppnwYa!pUB5=`;MfPxEQJ^Fq;!^R z(=MI+W*u}v*NV&=U4UUguYs&D@<@ddlbzinBF4~j8u&_6f>^B&kFbe0xVi=lI>!q$ z86)-=4cvlrCN~6j?tuY@gF`Q2@ckLys$AFGq6$mHLRP?5(6*F|iqGvItQp=za)lkR zvU6DM=$jl)?PGtZWPAIVJMc?TDJ=-v0>11cd5HB#q*&;UHy`pne5tRHsjF|3g*sB% z8z8$cUt5WwRO@gnv8YX#Ymq7|EK{;6BJ2A;0{-o#Wl>$-xpgM1lGs8slsI;>9@O5K z3>3qc>aV=MyED5-cz=Xn=A;!)YD6Lv+DM)zJNc{K>Q&%HyIuDW~9(< zbSkw)b9_kkd*K)nPKwm_W2TfJi$TfcdmN3L?> zLM*=fEXVPUu(F@2srLp25vaOGBZjSQs~|6ocDF6F+ie52kqIM1YVGTn@DCul|D3%k zJ(7@~hD*rEKJnAXe6c>3IGHeFqXPu)ZPeoR*?^K5Xk`t5+`0X+vinb-y=?Es&Cocw ztk~*4Y?&FXYhVs;Zv}z5hTSjDTDl=Yq59WfVYgF0Z8~(1;W%P9Fw3sNdkO7+xw*(a zE9mqB4iEc{X@0PM*7?)iDE778>-VWLCFN`6I9v*6XW|tTrii$A{&FO&`bQ8s#B-2M ziO==RbLI+EOLZEm4J#Cy9RuM6##JFQ61()Kr41eKY4Su1gn>6o(`BkZOfEILN+{ zmP!2y_@eG`h9j1@;gvDiNXg0h(B1uudPUIjN%P2qt}%|le~PEQ#-jTCeM`a|GK%TQ zvazAbv+ewAJpUop=ey(J?Goqi*8lx}O!chqzYaaz5T}n7|Mw8iNT4F#e3XS@T8-%MGY+!57NZ}%?*(@l-iDl5aJ z@Bcfryjw9T`rHu(F|XYAUjux1Ov3imq5^)~-yS8={@h|(2I=Fd3_;o}9z+0t6HrMb zID@&;fq7}Bz+j-=XYaffyR%>}mK0!`4T+A%mrdd)FM0LkNA`aW=FcR;v5`qh!96{UMkXfWdE+B^ zO`xBC`8*gi`(x3Q zsLLsFpo==VYBTGcKl)wZ3>RGT_!L z(Vj6M&y>|re;S=p9CmXLhhC=ze?L`?aX2={fAh#Rm64^?T^-pK8yKIW#7{6QO7WfJ zHnIhM9u!mQx;gNrN4&y8pouQR12S8YIaiE+fk4BV0MyYC8hmklJT#>2hD40e(h0cX z4{TBl?wG(#=yOi^YOGi1+R-b+4kM)Ifh2?nwR@E<%pZ&vAZz#Z@fXslsBsncew;17SQr~zRS8-$43<0)-NKyf}ETbK%e4IC=ZO|5&Wg^2GQpSXz|v#lfKkr z7S34+oB5lv!KRKgkt@G`5v$MP;W6E|(KoiQl70U;gKljuG=CAi6JAUsLv_4gewnaM z(I|Rjn;Uz|f{>HUVZmrke=}q4uPuz~Mwk>`igpeIco}B?{@%%tp2-*Q+Y9Ao& zyXl0G2_QG!Hul4<+doK!5D7iY!W{&8%@U=b{ri--xb_EXGDJCdb#);l9d8j>9=Vjf zdKZ9~`|&r&nrx$h*EwP3-qe>J0T(J}=Cs*P{HISpvkGgYfp}cqy3;=iatZcJzs-?8 z0==Q0D*aCy+h$eePpaKP3Pp#zkSEm~MGrfQQr~k_O_*2MRnzTjU3^Cyos#rXZ+GBM z_45M#T}*O7>yB@#6U?T3j7>-}aT%@ctWs00>Lghhcepp&pUL4fU_CPe&t9yp?Y*-< zBn11IVEo{m!99T|506b+P7x342cQ|lol-_kJ?ExtsSNFJ3=cQ;K$ul%QR_=@ML4kl zjU8vMQAe|(*Rw|kir+7D4OmKv{q<8M4CjPx1w#fKB;DCD6OgGqV5I&R9Nax7YMi*2sG1tDlJP zE1!@{R-b*wwVq%*kJ{gRran7-Xlb(Asetbkkd}bC(CmLG+Bcf)`XSN^bFo`+$RGM;H9OGo}2|`WpNkbbMv}XF}+qZnKjd#vFR2zssE!lTM{|G^|3Jk z(fVqamM0)zbkptCli8}9kP<`5SgX+)j=T0Krxh#}_fzyT z>mp{s!uaQwN(N2%$_2;)G~IL_-|NxdQzl87#mDbZMA}+2u{0ktbq(gn;nYMrS}DOT{q%;4#njVK8rSr~u^IJbssbs-D4ww5 zgJ5g&I9yJLkP2*tWR?BwSCu<*%K3en9#N(hayHw4b{D*aUGk+T@SHQ@3`)D?yDl*t zahnzI+tgH5RSztY?{4E9!Yj{~WnZh(OAVxfaaA>(#Deizff*&zjzRV^$NhLr;BXWeIMjs94Egluh=ZJyo@0EtixLt2fd^0Ozc6>#!O0>{)R4c!% zGw0=P%_K9fp2Dy3PG6T9!hU05T#%WgcEjw)*OJzeU747p6K4Bc=zJk_Udu znwv9vlOv_CRl%^%?|G11XSy?2#GveUrA?K7A5BYpNP``-OaCeHGd04$<( zXGJZ@@A@AMa`o3%QCs$W_q)v@77rQ3`K~Eg|wg5F?O+h+9vMvlrFQVbQ|S^%Kiz< zg;>)p^J95W<$UU#^z^ytZT@Chk@g@Ln1o^_RaY z`;szBg(iLm`dayUJx{BbkJbS^MRLaR<#s=WiynF|)WW5*28p92iv693yz&*<^1HzB#Kgu5tUzrhBh-EtsNsP(L3S98rlVC<{3wbwg->0GN zm{uKFguC=y?=q{U zsI?kbH$D_=m__XztP`>uRDVbeQF0!5H?IC8Wr@7Icw%)g>(l)gb*rS_US6DTia)3s zDoT7j-8?-v`gv{&$6?G9wOlezHy5Ty!GE8|b$cwlK67Go4lg%9I2~YSb$}>j|$rXB+y?Hf9ZtnS~c06~WKY|)F z-Z@WfKsc+0xv((kYLzRf`kWo21exJh-G%+4LrGm^e99B`$YGe5;J$BH^(vtD7^9kspm6hCr!pZEfd02m7yn-Sr!i zM`FSYE?UDin>g7McH)A5tum7aYkkoc`<>aCjOuDa$SIu&cS8T=R@vZIJ3+E4tg*#o z`D9Id=XP{-a06(}Z44hB9v@qsR8_?U>aOZE)Z@8Ns|M9?GmfjOtQ*N!t}H!oYI)^g zzWt&s2Lz4WY6{^)*%P8pHqoW8PWFtBkCa>Q-)5yc?yAZ8B!dCEGUH~$)ro$5JzG?z zEg>->94B{D$xV=DQ?ipM@GiTj4Q*9ms8&f+syjSkWtCzyQ*M^ie1un**E;v6Z2gGB zJBUEnEtz^_vE_xd%&f6%P3d8fny-`umf~BO0UkcyQSU!J{0fVUJu5R)&6DG7T5qNd zi`1&Z*Ex7Gtl@-%LbFo>UC`URMumQyI-}L7{L?H~~vp-rRwze%@vm z6$DzBl7jp+fPs=Fm5;vEJ8y)-TM;iQ#N?u+$7M%xvtB@@mPs5xSVB@?|DyeO4;aI6 zpw?=mlQrhMf&%rA$!4LemP zt4GEZy2pEE7KZ&-h@R#~)<~&3b86!&&nwKLs;e{W9)^K{{F5aa+l~GzVg8+3mO88W zDv&i!?Dl*%GANAv=a%Vw2CyLx{?q9Aah{ds)2AW?eWH78 zJAOHry&T~=)zvC7Ivx%3$@v=&Ae9S?)>TT?Gcuvqw{AY47TnL4M=gQ_0|O@t^pxX#w_AMqXY;j>3ke^3Ce=UygX-FF+ol%l$No ztodl7Nj)l8S6A<&ek}k~!RsUWnj}H9rjWob&Ah{rtb~L_qS{4lY|Ew1xQF*;$|{(0 zvs9&eRt{>9!lnU^IN7w^vwwGYCX!H?xmvUN{>jPk+^p$F{6>sS>3XWZNX~d3&&aF0 z0v~P07dV+D;Ye96ut5b-B{9S)+0fORo~p%+JU_}^k^M-@*!zhA^;d@R-lGlqI)8sW z?~Xts;*|rz(RVLXRL02nChRzCk zBdT)u`~QB*S8ZES1X5eHew3Xv+b|2*vQb z2x7LMzI6zoWwAXrIWyiVb@S?=G?qlA)-lkiWS=wTy^l|$v^;Sps-r)*?E(w>R$C;0&>cUAY?PWJ+Ly&fh^}-bjmD z_~`EB<5)eszE^RZ&XYpeRWp^YXYkwU;JTGEJgvj&$Fne37*{8^L+kW7sYqt+$WzUi z_~S|ROAr?%z8ZIa`(GL+!4jR}1S3>;e>EgNw~ox4=4ace)WV}b`~=JBU};sW-i?p! zZ*K{O)ciAIk>r2BmxBNPjWIm+>ID~ATx4k@m6SP-+k1+P+2c4ZR7$~e>Aa5+XMD*& zoVG*A#i;q{pd=_bI3lM|-jk!O+;dRR*u=y+CwXcrm6*q-Jb>o+#(sp=PS;ccvo^o} zLFeG0I!MhoJe2AWl$L&dMDmS_QC}ZQeW6w1kyKjdNP5(9c%u6HLn(F6OUJ6s-rj8% z5>Agqow*Qx_m>Le(}C8r4QXiIOq})o2djwFE)}&I^M-qn7pw5qg50z~)yNb&|GGf1 z>ONz82_g5s%mn}+z_Rh~t2sSHvqDn*b9DlBGJdZ&XxQYHb#wcF9zEWfRKSahnkhB* z%tP=yynd6gJUYUmqNDR+((wr&rI>^SUHJ>c7=T}&E*Wy!%$c=!wy*C;q|MYatLEeg zoL8WN_WhXYY9nPeX6;!DJrm4#h51NGro9UnJXHyo+j{tL zf09E%q%cQWd1n5$yOrh=tW-ILg@vQFyRn{SyA5ln+_UNhT3PPcxANoT<2%uw+Y#>Z z!q<#Mp*#ASw}}30t#Y@x94 zSkp-*qTJ^?Q+~^uF(o=WmBeIlT!!_kV%~K31Z8i1@Af>)`|NvO-as<@yUsAO$pscv zkfRbnU?N@}wzW@)y}PE9fre4Aj@6zdsAy=U-{CX>fUl2MFW8Agg=SDiMD&?~yz0rG zEg4EF=#WZVg%~jH(#jI%rHZ4PUltWAdU=JI^wq1Hl-0D=X6k#_1YpW2%F8E%nIRqU zoq#A&YYU_^+Z=o5ecZBD>v3rX&}%tE!gn0Hv|%|Knv9tS0cEK$qrBp54Js;cPV*&R zOmacRrut3x6ZA*J){c9w*;^X=nmL=>ZHM2;shg_b)cN!Ih%Z}-)|WQaY479-e$Vi$ zfC2P<9~tk5;AZ&@oD8oZ9VW!gV@rW&qmdW?OY8!ZG{1Qz!r|mlZCmI_1sahVfaPa3 z@Y30{_HKNA_-$9$3j(|8xlOXE%@L=^Y6zFTfw48F{F-1te}7P?>QM`IGYt`;lix3- zA#v#^TRaR~%~U7Y*yDU_vJt~(pe1d_zyws`ew5?y0)~}V{koil1lD(I@AKj3U^&6_ z*|=-^V@3cWHzrx%@XYg$UP7zslpSsA6liGrM@``iK9Re1t~TLShNt;Nm9GbSi|SKj z^z?={jSs>Vgff{}nl!p0ZBE_o1ZLBRQDhTbRvLblHZr4g0_0X)$ZI81@QvCnP>e+~ zMn_OCg;{qva~qh4m*Q<-mtBIoJV)yB?8eZ{8!I4N?~*@E4a|^UU~FF* zE^V_cPr6xos~YFMzOBWhSny*q-{@S&(kT8t`Eh*mD(moii(1rq zyWqKc?`JMIUwU+Fv$YY+o7vxLDZSoIB8F880+nHV(cD%F^Ql{f357R*-fzzGXh=x3 zCq+YKLt+vV@~9aAvpC);5gcPaykrbbA5N1>bYaW#b&JiE6Hs@wX;M$%=0dZQ43ixR z+-qVXARy>({4*o(&&R;9Z2gH8QoD3$?s1U8qpG~@_F@t=FVdnDp9=Cyf=&GZ_a^+H z^LCE$`wK`><7s6n7U}jd_xa_e*#zdKbSbK`7ODevPHL)Xlkb&6W#znkCv!oj|MmCw z55sBULgOZk>*YjxiHUTa*)~kvRe(>1pjSnYC5JD2ED81EWb{YzXO`Op zoTsDK)>8}5&tx4+z0({esj(xeRn^rkZQ(cMb+i;d$L4vj!>EDTHx|!DLJfgH+V~67 zDl<>YrIfw>iHZBJM(zySbyZReqk*v$xoGO0{<)%gPxe_Mc-f%ZdaAqYnFfhu$XjSi zN)fgBpVq+{p$?z2|RTY2E55!jCaE9l2BOb`oy4m8HLij{~4R9L(CVa3#x$>OJDR&AdU~XPch6u>e@045&%-n6l10ruUG84zvOANP{^t=pFi|F(@T*8L{sJjeI0z}- z-&cf;++3sa3&LMxhxdJ3hb7{;?k#wekxx44zj`#l?zW0>AY1&h}Oo+3H&kweJAhRZSl&oW!b_E+}+&XLLZ|G=-Jd~2gW=P|N5|MtL|}dygohR z3|pYxzTG8B#?37@eS)?3`tr;ABsMG$Ju8V$U42ryvMwu9ET!fBtcGu4VI zg2lZ_ihh2r@=-_yC+!C0wzFTLbD&2Fpiiy$i(25N7%@sw`S^fp{yho%aTzR#% z{CHgO4zMkIH>Rhp>a&#E)X!ZHC)0Hms+3M=5tJ_=-va+}KgUmzU z@3UzP8+WS{8L9&SdDdF7LN6S(!hDLWM11md+X7Yet;rxO6fp(~A5;@-RWs_?^OXxE z!=qaI<$U}D-%=tzn?Bu^LN1X_?dHaZk+sOovCn<&CSS&x zoQd~t!Fr5UY5PW@_f3as5|^lURYry9+)6iYeD4a}Sp)X_k)go6DR;u`*eg2&Kpyd| zjX8snCj$-HOMePM==LMu6>`GGXV|j>Xlmvg!#lbxlLj{H zrv3THaX#557r{R20duGNk3{5mwA0hI7vZz`kSo-b0U{H{eGE-vkhD) zNyJQVuQGTRfe6wa+wpOsBlQMxHGg(P0|8{sP-vNHfTMi#3HP zYVYflT<%YKnNi*!3NsD=f23N*o#OE4d zgd{D!XUb=uY&@J}xfM{HzGh;#w$+KVSRZPsUG#HQ)z;4I*UtZxIi5EOf!ZVrDK9K6 zOsutrMeqSTZ3arHz}t_=69DQ#Ni)SZaT5iaxoEphq5AH3qog5B9K~^>a6VfoRK^GP z>dZvwyjho+lU_?$SeW0lN7G|3$rlhOwKC2unzdrkXJmLeFrm}p*4E2zGpESm^@-gc zUeMmRUMI|ui5wN%mu{k>%nq|}Bqi79tMp3>$WIQL(D|*~9FK0zNd8c29^KTJETU-t zG;2xNt6+$1Y~#l?0n2p1=l-smwKb#2bN6cIZw?w7P4fP#<{Lyk0|OD%LY#XxcU=y= z5v;G@D->_dShA|$c8rGxV24i*`Yv3&%{i3adP~w2t5Jiv$Z)-UU zyUx14XU50NzfpsZv96MyG_5NEas3mfKBSEVvX0y?@Co_4zca{eE zP5*L%-nziiv?pTbo3pDs(HCCr>X(~LmOl-)V=olp+pPUL%Fg8Tu`3Rry-~pRgzfqN(RSdNH-iEWQ9Ln#=p(LaacyLCjQ+xTrs&YGe9>6;fL0 zGd@-rHa5w#UNqSFGavx<%je_q1l#)TG3z|*YkOd)3G65+3{JeTuWzX5XI74=Pyp-Y z&fd}(bLF5j-D5!U{oL6rq!tlA+{0E;S7RjLQO9i9u}M0)$%-%Cca+mSuX#%D@gocI zOqNzT4`I_Ek6Cb9q*u0Z%2#3kEL=#>!~IiGu*?b^o_ja$xNXjhc5W^au;kr?qul&l zi!%0!*x_y+yT4;Os13~OM~7U7aAsf>NUyhJ=N+XuDjv zY&xIBq<_3_@49!F^p#1O=9$pGw$MqZsj8+X4d91><;TFzE(TRmQOWn*LxkR3Zlfnn zRCry))OzpUXJlql2hj1uhk&m3b_uYT<+0S=WOn1oTA^JCm{pzyub9TmJy&S@&!4YD z$vBkmqe*V8bQ3omz!C9|h-jg?>V;TiVf{H%>QFgZ% zTx)|7+cG|L=|2~%3#$+Ly|4Q>T^#jJ$_+aogR1*#Tg$xty87WCNR0uV!La?NK)T0< zd3<_Wih@mT$r9$e;Gqe1n#SXZiaPO***rQric()Tdm22Q-}(zTDVm7wXVcR12NiWw zC3s{0s5I&J?rx#Ip%eofy&~d_V(8O-G~*IOqX_CRfq@qLKR-Rj!cuxS{3v5@YMQzC zO~U^T(Brzz6CfM&;X^)vQDZ|xi)?2>uP7B!)h*?19d!#fnV8&K2a6XM zDQjvpiy*qz1=77ezRV=Hh{_v%r>>rLLc*P*Hhp!4yt+o<)&q&D$UMMVmMh`Bi( zt}TzPTq(;*o9*af1|*M^^gjp00<@YaC|_oZ-;)s2$VhH3GT&T z11h9RzX%vfDR*|}qUi8r3=Bngi3}_woFH254K62@29_&^My|?QI>v4vi4qHH8OCmQMd;r0uAv_T#@`wjl*w_wE3& zQUxEv|M|rG#P2WfjD#fr*#PVBZy#}~V*l<`A}zl8|HVL){9iN(2K1%VKW+HY(ZJ|` qYu6Z4J+HRcJpbv9MpHcvgLB{7C5!Ow)%2yiUm+6mZwkc>{QeJS{m4!L literal 0 HcmV?d00001 diff --git a/img/demo.png b/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/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..dd0da4c36dc3729e89d67f24aa75f70e3467af56 GIT binary patch literal 15406 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 I|I-=xFBkz{g#Z8m literal 0 HcmV?d00001 diff --git a/img/logo-circle.png b/img/logo-circle.png new file mode 100644 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/img/logo.png b/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/img/logo.svg b/img/logo.svg new file mode 100644 index 000000000..03842124a --- /dev/null +++ b/img/logo.svg @@ -0,0 +1,5 @@ + + + + diff --git a/img/logox200.png b/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/img/undraw_code_review.svg b/img/undraw_code_review.svg new file mode 100644 index 000000000..2b60017a6 --- /dev/null +++ b/img/undraw_code_review.svg @@ -0,0 +1 @@ +code review \ No newline at end of file diff --git a/img/undraw_docusaurus_mountain.svg b/img/undraw_docusaurus_mountain.svg new file mode 100644 index 000000000..431cef2f7 --- /dev/null +++ b/img/undraw_docusaurus_mountain.svg @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_react.svg b/img/undraw_docusaurus_react.svg new file mode 100644 index 000000000..e41705043 --- /dev/null +++ b/img/undraw_docusaurus_react.svg @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/undraw_docusaurus_tree.svg b/img/undraw_docusaurus_tree.svg new file mode 100644 index 000000000..a05cc03dd --- /dev/null +++ b/img/undraw_docusaurus_tree.svg @@ -0,0 +1 @@ +docu_tree \ No newline at end of file diff --git a/img/undraw_website_setup.svg b/img/undraw_website_setup.svg new file mode 100644 index 000000000..bda916dac --- /dev/null +++ b/img/undraw_website_setup.svg @@ -0,0 +1 @@ +website setup \ No newline at end of file diff --git a/img/undraw_windows.svg b/img/undraw_windows.svg new file mode 100644 index 000000000..da5b8a5ce --- /dev/null +++ b/img/undraw_windows.svg @@ -0,0 +1,11 @@ +windows + + + + + + + X + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..a549dcef9 --- /dev/null +++ b/index.html @@ -0,0 +1,40 @@ + + + + + + + +Hello from NodeGui + + + + + + + + + + + + + + +

+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/main.00ae184f6d3bd0eadbce.js b/main.00ae184f6d3bd0eadbce.js new file mode 100644 index 000000000..9d82b9b1f --- /dev/null +++ b/main.00ae184f6d3bd0eadbce.js @@ -0,0 +1 @@ +(window.webpackJsonp=window.webpackJsonp||[]).push([[67],[function(e,t,n){"use strict";e.exports=n(25)},function(e,t,n){"use strict";function o(){return(o=Object.assign||function(e){for(var t=1;t=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!c)for(;d--;d)i.unshift("..");!c||""===i[0]||i[0]&&r(i[0])||i.unshift("");var m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};function u(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}var l=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,o){return e(t,n[o])}));if("object"==typeof t||"object"==typeof n){var o=u(t),r=u(n);return o!==t||r!==n?e(o,r):Object.keys(Object.assign({},t,n)).every((function(o){return e(t[o],n[o])}))}return!1},c=n(3);function s(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function m(e){var t=e.pathname,n=e.search,o=e.hash,r=t||"/";return n&&"?"!==n&&(r+="?"===n.charAt(0)?n:"?"+n),o&&"#"!==o&&(r+="#"===o.charAt(0)?o:"#"+o),r}function h(e,t,n,r){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",o="",r=t.indexOf("#");-1!==r&&(o=t.substr(r),t=t.substr(0,r));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===o?"":o}}(e)).state=t:(void 0===(a=Object(o.a)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(e){throw e instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):e}return n&&(a.key=n),r?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,r.pathname)):a.pathname=r.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&l(e.state,t.state)}function b(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,o,r){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof o?o(a,r):r(!0):r(!1!==a)}else r(!0)},appendListener:function(e){var n=!0;function o(){n&&e.apply(void 0,arguments)}return t.push(o),function(){n=!1,t=t.filter((function(e){return e!==o}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),o=0;ot?n.splice(t,n.length-t,o):n.push(o),d({action:"PUSH",location:o,index:t,entries:n})}}))},replace:function(e,t){var o=h(e,t,f(),w.location);s.confirmTransitionTo(o,"REPLACE",n,(function(e){e&&(w.entries[w.index]=o,d({action:"REPLACE",location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t=0||(r[n]=e[n]);return r}n.d(t,"a",(function(){return o}))},function(e,t,n){e.exports=n(29)()},function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return l}));var o=n(2),r=n(1),a=n(0),i=n.n(a);function u(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?Object(o.e)(t,e):n.length?n[n.length-1].match:o.b.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&u(e.routes,t,n)),r})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?i.a.createElement(o.c,n,e.map((function(e,n){return i.a.createElement(o.a,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render(Object(r.a)({},n,{},t,{route:e})):i.a.createElement(e.component,Object(r.a)({},n,t,{route:e}))}})}))):null}},function(e){e.exports=JSON.parse('{"/":{"component":"component---site-src-pages-index-jsc-4-f-f99"},"/blog/welcome":{"component":"component---theme-blog-post-pageccc-cab","content":"content---blog-welcome-286-e55","metadata":"metadata---blog-welcome-27-a-91f","prevItem":null,"nextItem":null},"/blog":{"component":"component---theme-blog-list-pagea-6-a-7ba","items":[{"content":"content---blogaf-1-856","metadata":"metadata---blog-welcome-27-a-91f"}],"metadata":"metadata---blog-83-c-2b0"},"/docs":{"component":"component---theme-doc-legacy-page-9-e-7-ca5","docsMetadata":"docsMetadata---docs-150-2d6"},"/docs/doc1":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-doc-1-b-2-f-e80","metadata":"metadata---docs-doc-12-a-3-5a1"},"/docs/faq":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-faq-048-db5","metadata":"metadata---docs-faq-59-d-2b9"},"/docs/api/Component":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-component-4-ef-195","metadata":"metadata---docs-api-component-3-e-5-43d"},"/docs/mdx":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-mdxce-3-7d1","metadata":"metadata---docs-mdx-786-f56"},"/docs/api/EventWidget":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-event-widgetac-6-11b","metadata":"metadata---docs-api-event-widget-39-a-9ea"},"/docs/api/FlexLayout":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-flex-layout-3-dc-a16","metadata":"metadata---docs-api-flex-layoutecf-540"},"/docs/api/NodeLayout":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-node-layoutd-28-11a","metadata":"metadata---docs-api-node-layout-1-e-9-c15"},"/docs/api/NodeWidget":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-node-widget-080-a39","metadata":"metadata---docs-api-node-widgeta-92-a4f"},"/docs/api/QAbstractScrollArea":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-abstract-scroll-area-3-e-6-d7f","metadata":"metadata---docs-api-q-abstract-scroll-area-59-d-279"},"/docs/api/QAbstractSlider":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-abstract-slider-3-e-0-54d","metadata":"metadata---docs-api-q-abstract-sliderdfa-ab7"},"/docs/api/QApplication":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-applicationd-3-e-0a3","metadata":"metadata---docs-api-q-applicationc-1-d-8a4"},"/docs/api/QCheckBox":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-check-boxd-9-b-c95","metadata":"metadata---docs-api-q-check-box-132-293"},"/docs/api/QClipboard":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-clipboard-69-d-2ef","metadata":"metadata---docs-api-q-clipboard-486-b21"},"/docs/api/QCursor":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-cursor-362-d51","metadata":"metadata---docs-api-q-cursor-887-11e"},"/docs/api/QDial":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-dial-80-b-99a","metadata":"metadata---docs-api-q-dialbfb-aef"},"/docs/api/QGridLayout":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-grid-layouta-4-e-552","metadata":"metadata---docs-api-q-grid-layout-7-db-030"},"/docs/api/QIcon":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-icone-5-f-b0d","metadata":"metadata---docs-api-q-icone-6-d-093"},"/docs/api/QLabel":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-label-2-f-9-04b","metadata":"metadata---docs-api-q-label-165-210"},"/docs/api/QLineEdit":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-line-editea-0-53d","metadata":"metadata---docs-api-q-line-edit-13-f-b8a"},"/docs/api/QMainWindow":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-main-window-0-e-7-299","metadata":"metadata---docs-api-q-main-window-04-f-efb"},"/docs/api/QPixmap":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-pixmap-8-dd-cb2","metadata":"metadata---docs-api-q-pixmapfdf-820"},"/docs/api/QPlainTextEdit":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-plain-text-edit-7-c-8-081","metadata":"metadata---docs-api-q-plain-text-edit-161-ecc"},"/docs/api/QProgressBar":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-progress-barc-46-afe","metadata":"metadata---docs-api-q-progress-bar-43-d-07e"},"/docs/api/QPushButton":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-push-button-06-c-73e","metadata":"metadata---docs-api-q-push-button-96-d-c92"},"/docs/api/QRadioButton":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-radio-buttone-54-746","metadata":"metadata---docs-api-q-radio-button-367-f7c"},"/docs/api/QScrollArea":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-scroll-area-8-c-4-3fd","metadata":"metadata---docs-api-q-scroll-area-46-a-96e"},"/docs/api/QSpinBox":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-spin-box-1-ce-bfd","metadata":"metadata---docs-api-q-spin-box-809-ae0"},"/docs/api/QTabWidget":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-tab-widget-508-95e","metadata":"metadata---docs-api-q-tab-widgetebc-5aa"},"/docs/api/QWidget":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-q-widget-04-a-59f","metadata":"metadata---docs-api-q-widget-287-e6c"},"/docs/api/QtEnums":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-qt-enumsfd-7-cf3","metadata":"metadata---docs-api-qt-enums-423-cf9"},"/docs/api/YogaWidget":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-yoga-widgeta-42-cc7","metadata":"metadata---docs-api-yoga-widget-95-c-f8b"},"/docs/api/process":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-process-5-ec-b1e","metadata":"metadata---docs-api-process-32-d-09e"},"/docs/api/synopsis":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-api-synopsis-7-bb-e1c","metadata":"metadata---docs-api-synopsis-21-f-a62"},"/docs/development/README":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-readme-149-437","metadata":"metadata---docs-development-readm-ec-6-c-332"},"/docs/development/common_errors":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-common-errorsf-15-a5b","metadata":"metadata---docs-development-common-errors-402-ef4"},"/docs/development/debugging":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-debuggingb-54-9ed","metadata":"metadata---docs-development-debuggingc-36-26a"},"/docs/development/getting-started":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-getting-started-139-387","metadata":"metadata---docs-development-getting-started-89-b-c7a"},"/docs/development/setting-up":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-setting-up-28-c-666","metadata":"metadata---docs-development-setting-up-979-75f"},"/docs/development/signal_and_event_handling":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-signal-and-event-handling-7-d-4-f3f","metadata":"metadata---docs-development-signal-and-event-handling-0-b-5-692"},"/docs/development/styling":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-styling-293-cad","metadata":"metadata---docs-development-styling-1-c-2-0d6"},"/docs/development/wrapping_widgets":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-development-wrapping-widgets-84-b-538","metadata":"metadata---docs-development-wrapping-widgets-303-fb8"},"/docs/guides/custom-nodegui-native-plugin":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-custom-nodegui-native-plugin-632-9db","metadata":"metadata---docs-guides-custom-nodegui-native-plugin-92-b-12f"},"/docs/guides/debugging-in-vscode":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-debugging-in-vscodebd-7-cec","metadata":"metadata---docs-guides-debugging-in-vscodebf-8-5b0"},"/docs/guides/debugging":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-debuggingf-3-f-cf5","metadata":"metadata---docs-guides-debugging-970-fb8"},"/docs/guides/getting-started":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-getting-startedc-9-e-20f","metadata":"metadata---docs-guides-getting-started-2-b-7-1a4"},"/docs/guides/handle-events":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-handle-events-160-4b0","metadata":"metadata---docs-guides-handle-events-5-eb-540"},"/docs/guides/images":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-images-991-065","metadata":"metadata---docs-guides-images-915-5ee"},"/docs/guides/layout":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-layoutdf-5-a64","metadata":"metadata---docs-guides-layoutf-65-d7d"},"/docs/guides/networking":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-networking-374-03e","metadata":"metadata---docs-guides-networkingdfd-ce0"},"/docs/guides/nodegui-architecture":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-nodegui-architecture-262-19e","metadata":"metadata---docs-guides-nodegui-architecture-550-b82"},"/docs/guides/scroll-view":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-scroll-view-76-e-87c","metadata":"metadata---docs-guides-scroll-view-9-a-9-2ac"},"/docs/guides/styling":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-stylingfec-977","metadata":"metadata---docs-guides-styling-9-ea-213"},"/docs/guides/tutorial":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-tutoriale-53-6ab","metadata":"metadata---docs-guides-tutorial-1-f-1-23b"},"/docs/guides/using-native-node-modules":{"component":"component---theme-doc-legacy-item-031-769","content":"content---docs-guides-using-native-node-modules-3-ab-104","metadata":"metadata---docs-guides-using-native-node-modules-31-f-551"},"/blog/tags/nodegui":{"component":"component---theme-blog-tags-posts-page-687-b6c","items":[{"content":"content---blogaf-1-856","metadata":"metadata---blog-welcome-27-a-91f"}],"metadata":"metadata---blog-tags-nodegui-632-d46"},"/blog/tags/hello":{"component":"component---theme-blog-tags-posts-page-687-b6c","items":[{"content":"content---blogaf-1-856","metadata":"metadata---blog-welcome-27-a-91f"}],"metadata":"metadata---blog-tags-hellob-02-3e8"},"/blog/tags":{"component":"component---theme-blog-tags-list-page-01-a-d0b","tags":"tags---blog-tags-8-d-7-36d"}}')},function(e,t,n){"use strict";t.a={plugins:[],themes:[],customFields:{},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 ยฉ 2019 NodeGui"},googleAnalytics:{trackingID:"UA-145065218-1"}},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",projectName:"nodegui",presets:[["@docusaurus/preset-classic",{docs:{sidebarPath:"/Users/atulr/Project/nodegui/nodegui/website/sidebars.js"},theme:{customCss:"/Users/atulr/Project/nodegui/nodegui/website/src/css/custom.css"}}]]}},function(e,t,n){var o,r;void 0===(r="function"==typeof(o=function(){var e,t,n={version:"0.2.0"},o=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'
'};function r(e,t,n){return en?n:e}function a(e){return 100*(-1+e)}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(o[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=r(e,o.minimum,1),n.status=1===e?null:e;var l=n.render(!t),c=l.querySelector(o.barSelector),s=o.speed,d=o.easing;return l.offsetWidth,i((function(t){""===o.positionUsing&&(o.positionUsing=n.getPositioningCSS()),u(c,function(e,t,n){var r;return(r="translate3d"===o.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===o.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,r}(e,s,d)),1===e?(u(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){u(l,{transition:"all "+s+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),s)}),s)):setTimeout(t,s)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),o.trickleSpeed)};return o.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*r(Math.random()*t,.1,.95)),t=r(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*o.trickleRate)},e=0,t=0,n.promise=function(o){return o&&"resolved"!==o.state()?(0===t&&n.start(),e++,t++,o.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=o.template;var r,i=t.querySelector(o.barSelector),l=e?"-100":a(n.status||0),s=document.querySelector(o.parent);return u(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),o.showSpinner||(r=t.querySelector(o.spinnerSelector))&&f(r),s!=document.body&&c(s,"nprogress-custom-parent"),s.appendChild(t),t},n.remove=function(){s(document.documentElement,"nprogress-busy"),s(document.querySelector(o.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&f(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var i=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),u=function(){var e=["Webkit","O","Moz","ms"],t={};function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()})),t[n]||(t[n]=function(t){var n=document.body.style;if(t in n)return t;for(var o,r=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);r--;)if((o=e[r]+a)in n)return o;return t}(n))}function o(e,t,o){t=n(t),e.style[t]=o}return function(e,t){var n,r,a=arguments;if(2==a.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&o(e,n,r);else o(e,a[1],a[2])}}();function l(e,t){return("string"==typeof e?e:d(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=d(e),o=n+t;l(n,t)||(e.className=o.substring(1))}function s(e,t){var n,o=d(e);l(e,t)&&(n=o.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function d(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function f(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n})?o.call(t,n,t,e):o)||(e.exports=r)},,function(e,t,n){"use strict";n.d(t,"a",(function(){return d})),n.d(t,"b",(function(){return w}));var o=n(2),r=n(5),a=n(0),i=n.n(a),u=n(4),l=(n(7),n(1)),c=n(6),s=n(3),d=function(e){function t(){for(var t,n=arguments.length,o=new Array(n),r=0;rR.length&&R.push(e)}function A(e,t,n){return null==e?0:function e(t,n,o,r){var u=typeof t;"undefined"!==u&&"boolean"!==u||(t=null);var l=!1;if(null===t)l=!0;else switch(u){case"string":case"number":l=!0;break;case"object":switch(t.$$typeof){case a:case i:l=!0}}if(l)return o(r,t,""===n?"."+z(t,0):n),1;if(l=0,n=""===n?".":n+":",Array.isArray(t))for(var c=0;c
+

NodeGui

Build performant, native, cross platform desktop apps with JavaScript and CSS ๐Ÿš€

[object Object]

Web Technologies

With NodeGui, you can build your app with familiar web technologies like CSS and JavaScript. There is even a React based version.

[object Object]

Open Source

NodeGui is an open source project maintained by an active community of contributors.

[object Object]

Cross Platform

Compatible with Mac, Windows, and Linux, Electron apps build and run on three platforms.

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.

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.

Give it a try

1. Run these commands

git clone https://github.com/nodegui/nodegui-startercd nodegui-starternpm installnpm start

2. Learn the basics or dive deeper and take a look at the APIs.

+