├── .all-contributorsrc ├── .gitignore ├── .vscode └── launch.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── demo ├── .editorconfig ├── .gitignore ├── .vscode │ └── extensions.json ├── livereload.js ├── package-lock.json ├── package.json ├── src │ ├── App.svelte │ └── app.ts ├── tsconfig.json └── webpack.config.js ├── extras ├── assets │ ├── kitchen.png │ ├── nodegui.png │ ├── nodegui_white.png │ └── start_icon.png ├── legal │ ├── logo │ │ └── thanks.md │ ├── yode │ │ └── LICENSE │ └── yoga │ │ └── LICENSE └── logo │ ├── nodegui-circle.png │ ├── nodegui.png │ └── nodegui.svg ├── nativescript-svelte-todo.gif ├── package-lock.json ├── package.json ├── repl-workers ├── bundler │ ├── commonjs.js │ └── index.js ├── package-lock.json ├── package.json └── rollup.config.js ├── rollup.config.js ├── scripts └── create-pkg.js ├── src ├── components │ ├── AsComponent.svelte │ ├── SlotComponent.svelte │ ├── Template.svelte │ ├── Template.svelte.d.ts │ └── index.ts ├── dom │ ├── index.ts │ ├── nativescript-vue-next │ │ ├── LICENCE │ │ ├── index.ts │ │ └── runtime │ │ │ ├── index.ts │ │ │ ├── nodes.ts │ │ │ ├── registry.ts │ │ │ └── runtimeHelpers.ts │ ├── react-nodegui │ │ ├── LICENSE │ │ └── src │ │ │ ├── components │ │ │ ├── AbstractComponents │ │ │ │ └── RNAbstractButton.ts │ │ │ ├── Action │ │ │ │ ├── RNAction.ts │ │ │ │ └── index.ts │ │ │ ├── AnimatedImage │ │ │ │ ├── RNAnimatedImage.ts │ │ │ │ └── index.ts │ │ │ ├── BoxView │ │ │ │ ├── RNBoxView.ts │ │ │ │ └── index.ts │ │ │ ├── Button │ │ │ │ ├── RNButton.ts │ │ │ │ └── index.ts │ │ │ ├── CheckBox │ │ │ │ ├── RNCheckBox.ts │ │ │ │ └── index.ts │ │ │ ├── ComboBox │ │ │ │ ├── RNComboBox.ts │ │ │ │ └── index.ts │ │ │ ├── Dial │ │ │ │ ├── RNDial.ts │ │ │ │ └── index.ts │ │ │ ├── GridView │ │ │ │ ├── GridColumn │ │ │ │ │ ├── RNGridColumn.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── GridRow │ │ │ │ │ ├── RNGridRow.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── RNGridView.ts │ │ │ │ ├── index.ts │ │ │ │ └── utils.ts │ │ │ ├── Image │ │ │ │ ├── RNImage.ts │ │ │ │ └── index.ts │ │ │ ├── LineEdit │ │ │ │ ├── RNLineEdit.ts │ │ │ │ └── index.ts │ │ │ ├── Menu │ │ │ │ ├── RNMenu.ts │ │ │ │ └── index.ts │ │ │ ├── MenuBar │ │ │ │ ├── RNMenuBar.ts │ │ │ │ └── index.ts │ │ │ ├── PlainTextEdit │ │ │ │ ├── RNPlainTextEdit.ts │ │ │ │ └── index.ts │ │ │ ├── ProgressBar │ │ │ │ ├── RNProgressBar.ts │ │ │ │ └── index.ts │ │ │ ├── RadioButton │ │ │ │ ├── RNRadioButton.ts │ │ │ │ └── index.ts │ │ │ ├── ScrollArea │ │ │ │ ├── RNScrollArea.ts │ │ │ │ └── index.ts │ │ │ ├── Slider │ │ │ │ ├── RNSlider.ts │ │ │ │ └── index.ts │ │ │ ├── SpinBox │ │ │ │ ├── RNSpinBox.ts │ │ │ │ └── index.ts │ │ │ ├── Svg │ │ │ │ ├── RNSvg.ts │ │ │ │ └── index.ts │ │ │ ├── SystemTrayIcon │ │ │ │ ├── RNSystemTrayIcon.ts │ │ │ │ └── index.ts │ │ │ ├── Tab │ │ │ │ ├── RNTab.ts │ │ │ │ └── index.ts │ │ │ ├── TabItem │ │ │ │ ├── RNTabItem.ts │ │ │ │ └── index.ts │ │ │ ├── Text │ │ │ │ ├── RNText.ts │ │ │ │ └── index.ts │ │ │ ├── View │ │ │ │ ├── RNView.ts │ │ │ │ └── index.ts │ │ │ ├── Window │ │ │ │ ├── RNWindow.ts │ │ │ │ └── index.ts │ │ │ └── config.ts │ │ │ ├── index.ts │ │ │ ├── reconciler │ │ │ └── index.ts │ │ │ └── utils │ │ │ ├── decoupleFromReact.ts │ │ │ └── helpers.ts │ ├── shared │ │ ├── Logger.ts │ │ └── index.ts │ ├── svelte-elements.ts │ └── svelte │ │ ├── HeadElement.ts │ │ ├── RNObject.ts │ │ ├── StyleElement.ts │ │ ├── SvelteNodeGUIDocument.ts │ │ └── TemplateElement.ts ├── index.ts ├── svelte-nodegui.ts └── transitions │ ├── bezier.ts │ └── index.ts ├── tsconfig.json └── website ├── .gitignore ├── README.md ├── blog └── 2019-05-30-welcome.md ├── docs ├── api │ ├── classes │ │ ├── renderer.md │ │ ├── rnaction.md │ │ ├── rngridcolumn.md │ │ ├── rngridrow.md │ │ ├── rnmenu.md │ │ └── rnmenubar.md │ ├── globals.md │ ├── index.md │ ├── interfaces │ │ ├── _react_proxy_.reactproxycomponent.md │ │ ├── abstractbuttonprops.md │ │ ├── actionprops.md │ │ ├── animatedimageprops.md │ │ ├── boxviewprops.md │ │ ├── buttonprops.md │ │ ├── checkboxprops.md │ │ ├── comboboxprops.md │ │ ├── datawithoffset.md │ │ ├── dialprops.md │ │ ├── gridviewprops.md │ │ ├── imageprops.md │ │ ├── lineeditprops.md │ │ ├── menubarprops.md │ │ ├── menuprops.md │ │ ├── plaintexteditprops.md │ │ ├── progressbarprops.md │ │ ├── radiobuttonprops.md │ │ ├── scrollareaprops.md │ │ ├── sliderprops.md │ │ ├── spinboxprops.md │ │ ├── systemtrayiconprops.md │ │ ├── tabitemprops.md │ │ ├── tabprops.md │ │ ├── textprops.md │ │ ├── viewprops.md │ │ └── windowprops.md │ └── modules │ │ └── _react_proxy_.md ├── doc1.md ├── guides │ ├── custom-nodegui-native-plugin.md │ ├── debugging-in-vscode.md │ ├── debugging.md │ ├── getting-started.md │ ├── handle-events.md │ ├── images.md │ ├── layout.md │ ├── networking.md │ ├── packaging.md │ ├── scroll-view.md │ ├── styling.md │ ├── tutorial.md │ └── using-native-node-modules.md ├── mdx.md └── scripts │ └── fixdocs.js ├── docusaurus.config.js ├── package.json ├── sidebars.js ├── src ├── components │ ├── CodeExample.js │ ├── CreateNativeApps.js │ ├── Features.js │ ├── Hero.js │ ├── SplitView.js │ ├── Talks.js │ ├── Try.js │ ├── common.js │ └── styles.css ├── css │ └── custom.css └── pages │ ├── index.js │ └── styles.module.css ├── static ├── CNAME └── img │ ├── box-layout-1.png │ ├── box-layout-2.png │ ├── code-sample.png │ ├── demo.png │ ├── favicon.ico │ ├── flex-layout-1.png │ ├── grid-layout-1.png │ ├── logo-circle.png │ ├── logo.png │ ├── logo.svg │ ├── logox200.png │ ├── undraw_building_websites.svg │ ├── undraw_code_review.svg │ ├── undraw_docusaurus_mountain.svg │ ├── undraw_docusaurus_react.svg │ ├── undraw_docusaurus_tree.svg │ ├── undraw_react.svg │ ├── undraw_website_setup.svg │ └── undraw_windows.svg ├── website └── sidebars.js └── yarn.lock /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | "README.md" 4 | ], 5 | "imageSize": 100, 6 | "commit": false, 7 | "contributors": [ 8 | { 9 | "login": "shirakaba", 10 | "name": "Jamie Birch", 11 | "avatar_url": "https://avatars.githubusercontent.com/u/14055146?v=4", 12 | "profile": "https://twitter.com/LinguaBrowse", 13 | "contributions": [ 14 | "code" 15 | ] 16 | }, 17 | { 18 | "login": "mrsauravsahu", 19 | "name": "Saurav Sahu", 20 | "avatar_url": "https://avatars.githubusercontent.com/u/9134050?v=4", 21 | "profile": "https://mrsauravsahu.github.io", 22 | "contributions": [ 23 | "code" 24 | ] 25 | }, 26 | { 27 | "login": "mperreir", 28 | "name": "Matthieu PERREIRA DA SILVA", 29 | "avatar_url": "https://avatars.githubusercontent.com/u/4592373?v=4", 30 | "profile": "http://matthieu.perreira.net", 31 | "contributions": [ 32 | "code" 33 | ] 34 | }, 35 | { 36 | "login": "jonasgrunert", 37 | "name": "Jonas Grunert", 38 | "avatar_url": "https://avatars.githubusercontent.com/u/22677197?v=4", 39 | "profile": "https://github.com/jonasgrunert", 40 | "contributions": [ 41 | "code" 42 | ] 43 | }, 44 | { 45 | "login": "LukeyBeachBoy", 46 | "name": "LukeyBeachBoy", 47 | "avatar_url": "https://avatars.githubusercontent.com/u/26151787?v=4", 48 | "profile": "https://github.com/LukeyBeachBoy", 49 | "contributions": [ 50 | "code" 51 | ] 52 | } 53 | ], 54 | "contributorsPerLine": 7, 55 | "projectName": "svelte-nodegui", 56 | "projectOwner": "nodegui", 57 | "repoType": "github", 58 | "repoHost": "https://github.com", 59 | "skipCi": true 60 | } 61 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .rpt2_cache 2 | node_modules 3 | dist 4 | docs_src/.sessions/ 5 | 6 | # Visual Studio Code 7 | .vscode/* 8 | !.vscode/settings.json 9 | !.vscode/tasks.json 10 | !.vscode/launch.json 11 | !.vscode/extensions.json 12 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Debug Qode Process", 9 | "type": "node", 10 | "request": "launch", 11 | "cwd": "${workspaceRoot}/demo", 12 | "runtimeExecutable": "${workspaceRoot}/demo/node_modules/.bin/qode", 13 | "windows": { 14 | "runtimeExecutable": "${workspaceRoot}/demo/node_modules/.bin/qode.exe" 15 | }, 16 | "args": [ 17 | "--inspect", 18 | "./dist/index.js" 19 | ], 20 | "skipFiles": [ 21 | "/**/*.js" 22 | ], 23 | "outFiles": [ 24 | "${workspaceFolder}/demo/node_modules/svelte-desktop/**/*.js" 25 | ], 26 | "outputCapture": "std" 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 David Pershouse 4 | Copyright (c) 2020 Jamie Birch 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /demo/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | charset = utf-8 8 | 9 | [*.json] 10 | indent_style = space 11 | indent_size = 2 12 | 13 | [*.ts] 14 | indent_style = space 15 | indent_size = 4 16 | -------------------------------------------------------------------------------- /demo/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | *.js.map 3 | 4 | # Logs 5 | logs 6 | *.log 7 | npm-debug.log* 8 | yarn-debug.log* 9 | yarn-error.log* 10 | 11 | # General 12 | .DS_Store 13 | .AppleDouble 14 | .LSOverride 15 | .idea 16 | .cloud 17 | .project 18 | tmp/ 19 | typings/ 20 | 21 | # Visual Studio Code 22 | .vscode/* 23 | !.vscode/settings.json 24 | !.vscode/tasks.json 25 | !.vscode/launch.json 26 | !.vscode/extensions.json 27 | -------------------------------------------------------------------------------- /demo/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["svelte.svelte-vscode"] 3 | } 4 | -------------------------------------------------------------------------------- /demo/livereload.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | const { spawn } = require("child_process"); 3 | const { normalize } = require("path"); 4 | 5 | // 'disconnect' is not needed as it will only be raised, when either the child process or this process calss disconnect explicitly. 6 | // We are abel to ensure, that this will never happen, as we do not need communication with the spawned subprocess 7 | const terminationSignals = ["close", "exit"]; 8 | 9 | function startSubprocess() { 10 | return new Promise((res, rej) => { 11 | const [command, ...args] = process.argv.slice(2); 12 | const proc = spawn(normalize(command), args, { 13 | // use parents stdio 14 | stdio: "inherit", 15 | shell: 16 | process.platform === "win32" || 17 | /^(msys|cygwin)$/.test(process.env.OSTYPE), 18 | }); 19 | terminationSignals.forEach((event) => proc.on(event, res)); 20 | proc.on("error", rej); 21 | }); 22 | } 23 | 24 | async function loop() { 25 | let code = 64; 26 | while (code === 64) code = await startSubprocess(); 27 | } 28 | 29 | loop(); -------------------------------------------------------------------------------- /demo/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "description": "Svelte NodeGUI playground for feature development", 3 | "version": "1.0.0", 4 | "author": "Jamie Birch", 5 | "license": "MIT", 6 | "private": true, 7 | "scripts": { 8 | "build": "webpack --mode production", 9 | "dev": "webpack --mode=development", 10 | "start": "node livereload.js node_modules/.bin/qode ./dist/index.js", 11 | "debug": "qode --inspect ./dist/index.js" 12 | }, 13 | "dependencies": { 14 | "@nodegui/nodegui": "file:../node_modules/@nodegui/nodegui", 15 | "@nodegui/svelte-nodegui": "file:../dist", 16 | "phin": "^3.5.1" 17 | }, 18 | "devDependencies": { 19 | "@nodegui/packer": "^1.4.1", 20 | "@nodegui/svelte-nodegui-preprocessor": "^0.1.0", 21 | "@tsconfig/svelte": "^1.0.10", 22 | "@types/node": "^14.14.37", 23 | "clean-webpack-plugin": "^3.0.0", 24 | "file-loader": "^6.2.0", 25 | "fork-ts-checker-webpack-plugin": "^5.2.1", 26 | "native-addon-loader": "^2.0.1", 27 | "svelte": "^3.35.0", 28 | "svelte-loader": "^2.13.6", 29 | "svelte-preprocess": "^4.7.0", 30 | "ts-loader": "^8.0.18", 31 | "typescript": "^4.2.3", 32 | "webpack": "^5.28.0", 33 | "webpack-cli": "^4.5.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /demo/src/App.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 16 | Some text with actual children 17 |