plusui-native-core 0.1.105 → 0.1.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/Core/.cache/clangd/index/api.hpp.016B34C8046EF490.idx +0 -0
  2. package/Core/.cache/clangd/index/app.cpp.1E6FAF043D496421.idx +0 -0
  3. package/Core/.cache/clangd/index/app.hpp.FA0E5D412C4E6148.idx +0 -0
  4. package/Core/.cache/clangd/index/browser.cpp.9461A2CAF129F1D9.idx +0 -0
  5. package/Core/.cache/clangd/index/browser.hpp.BE40AE80881B3107.idx +0 -0
  6. package/Core/.cache/clangd/index/clipboard.cpp.2399913537B2A7AD.idx +0 -0
  7. package/Core/.cache/clangd/index/clipboard.hpp.C1095DDACD7149E9.idx +0 -0
  8. package/Core/.cache/clangd/index/connect.cpp.518C66C7C28B30A9.idx +0 -0
  9. package/Core/.cache/clangd/index/connect.hpp.08E2F7CD13B78601.idx +0 -0
  10. package/Core/.cache/clangd/index/connection.hpp.849FAEF1523BF2C3.idx +0 -0
  11. package/Core/.cache/clangd/index/display.cpp.F6F6D932BF9F8D8E.idx +0 -0
  12. package/Core/.cache/clangd/index/display.hpp.0C1A9CAD11EE4404.idx +0 -0
  13. package/Core/.cache/clangd/index/filedrop.cpp.669B524B3C501C52.idx +0 -0
  14. package/Core/.cache/clangd/index/filedrop.hpp.48460099C3F35F2D.idx +0 -0
  15. package/Core/.cache/clangd/index/keyboard.cpp.DC6D34E4A4F798DD.idx +0 -0
  16. package/Core/.cache/clangd/index/keyboard.hpp.F016CB68D7DE5A46.idx +0 -0
  17. package/Core/.cache/clangd/index/keyboard_linux.cpp.B403FDCEA7A6CA53.idx +0 -0
  18. package/Core/.cache/clangd/index/menu.cpp.3059F08D8D2DF265.idx +0 -0
  19. package/Core/.cache/clangd/index/menu.hpp.8716DCCC573910D4.idx +0 -0
  20. package/Core/.cache/clangd/index/plusui.hpp.8CFCDFDC2E3F41DD.idx +0 -0
  21. package/Core/.cache/clangd/index/router.cpp.EAC9EAD34C59E573.idx +0 -0
  22. package/Core/.cache/clangd/index/router.hpp.2B06E2EE9998468D.idx +0 -0
  23. package/Core/.cache/clangd/index/stb_image.h.E26CF48FE089A0D3.idx +0 -0
  24. package/Core/.cache/clangd/index/tray.cpp.92F244E7E1D7F0EC.idx +0 -0
  25. package/Core/.cache/clangd/index/tray.hpp.0D881B0601BBBD25.idx +0 -0
  26. package/Core/.cache/clangd/index/webgpu.cpp.FC656FA8BE10FE15.idx +0 -0
  27. package/Core/.cache/clangd/index/webgpu.hpp.5AF1A5E9DF9E5AE0.idx +0 -0
  28. package/Core/.cache/clangd/index/window.cpp.191D8C9ADF874B22.idx +0 -0
  29. package/Core/.cache/clangd/index/window.hpp.B9811B43AA295697.idx +0 -0
  30. package/Core/.claude/settings.local.json +7 -0
  31. package/Core/CMakeLists.txt +1 -1
  32. package/Core/Features/API/app-api.ts +28 -28
  33. package/Core/Features/API/browser-api.ts +38 -38
  34. package/Core/Features/API/clipboard-api.ts +21 -21
  35. package/Core/Features/API/display-api.ts +33 -33
  36. package/Core/Features/API/keyboard-api.ts +33 -33
  37. package/Core/Features/API/menu-api.ts +39 -39
  38. package/Core/Features/API/router-api.ts +23 -23
  39. package/Core/Features/API/tray-api.ts +22 -22
  40. package/Core/Features/API/webgpu-api.ts +55 -55
  41. package/Core/Features/App/app.cpp +135 -102
  42. package/Core/Features/Browser/browser.cpp +227 -227
  43. package/Core/Features/Browser/browser.ts +161 -161
  44. package/Core/Features/Clipboard/clipboard.cpp +235 -235
  45. package/Core/Features/Display/display.cpp +212 -212
  46. package/Core/Features/FileDrop/filedrop.cpp +448 -324
  47. package/Core/Features/FileDrop/filedrop.css +421 -421
  48. package/Core/Features/FileDrop/filedrop.ts +0 -7
  49. package/Core/Features/Keyboard/keyboard_linux.cpp +4 -0
  50. package/Core/Features/Router/router.cpp +62 -62
  51. package/Core/Features/Router/router.ts +113 -113
  52. package/Core/Features/Tray/tray.cpp +437 -324
  53. package/Core/Features/WebGPU/webgpu.cpp +948 -948
  54. package/Core/Features/Window/webview.cpp +1009 -1009
  55. package/Core/Features/Window/webview.ts +516 -516
  56. package/Core/Features/Window/window.cpp +2240 -1986
  57. package/Core/include/plusui/api.hpp +237 -237
  58. package/Core/include/plusui/app.hpp +36 -34
  59. package/Core/include/plusui/browser.hpp +67 -67
  60. package/Core/include/plusui/clipboard.hpp +41 -41
  61. package/Core/include/plusui/connect.hpp +340 -340
  62. package/Core/include/plusui/connection.hpp +3 -3
  63. package/Core/include/plusui/display.hpp +90 -90
  64. package/Core/include/plusui/filedrop.hpp +92 -77
  65. package/Core/include/plusui/keyboard.hpp +112 -112
  66. package/Core/include/plusui/menu.hpp +153 -153
  67. package/Core/include/plusui/plusui +18 -18
  68. package/Core/include/plusui/router.hpp +42 -42
  69. package/Core/include/plusui/tray.hpp +94 -94
  70. package/Core/include/plusui/webgpu.hpp +434 -434
  71. package/Core/include/plusui/window.hpp +180 -177
  72. package/Core/scripts/generate-umbrella-header.mjs +77 -77
  73. package/Core/vendor/WebView2EnvironmentOptions.h +406 -406
  74. package/Core/vendor/webview.h +487 -487
  75. package/Core/vendor/webview2.h +52079 -52079
  76. package/README.md +19 -19
  77. package/package.json +1 -1
@@ -1,237 +1,237 @@
1
- #pragma once
2
-
3
- /**
4
- * PlusUI C++ API
5
- *
6
- * Mirrors: Core/Features/API/index.ts
7
- *
8
- * ONE INCLUDE. ALL FEATURES.
9
- *
10
- * #include <plusui/plusui> // get everything
11
- * using namespace plusui;
12
- *
13
- * ─────────────────────────────────────────────────────────────────────────────
14
- * FEATURE MAP (C++ class ↔ TypeScript object)
15
- * ─────────────────────────────────────────────────────────────────────────────
16
- *
17
- * TypeScript C++ class / accessor Header
18
- * ─────────────────── ────────────────────────── ──────────────────
19
- * window Window window.hpp
20
- * app / createApp() App, App::Builder app.hpp
21
- * browser Browser browser.hpp
22
- * clipboard Clipboard clipboard.hpp
23
- * keyboard Keyboard keyboard.hpp
24
- * tray TrayManager tray.hpp
25
- * display DisplayManager display.hpp
26
- * menu MenuManager menu.hpp
27
- * router Router router.hpp
28
- * fileDrop FileDrop filedrop.hpp
29
- * gpu WebGPU webgpu.hpp
30
- * connect Connect connect.hpp
31
- *
32
- * ─────────────────────────────────────────────────────────────────────────────
33
- * FRONTEND ↔ BACKEND MIRROR
34
- * ─────────────────────────────────────────────────────────────────────────────
35
- *
36
- * IMPORT / INCLUDE
37
- * TS: import plusui from 'plusui'
38
- * C++: #include <plusui/plusui>
39
- * using namespace plusui;
40
- *
41
- * ── WINDOW ───────────────────────────────────────────────────────────────────
42
- * Actions
43
- * TS: window.show() C++: win.show()
44
- * TS: window.hide() C++: win.hide()
45
- * TS: window.minimize() C++: win.minimize()
46
- * TS: window.maximize() C++: win.maximize()
47
- * TS: window.restore() C++: win.restore()
48
- * TS: window.close() C++: win.close()
49
- * TS: window.center() C++: win.center()
50
- * TS: window.focus() C++: win.focus()
51
- * TS: window.setTitle("My App") C++: win.setTitle("My App")
52
- * TS: window.setSize(800, 600) C++: win.setSize(800, 600)
53
- * TS: window.setPosition(100, 100) C++: win.setPosition(100, 100)
54
- * TS: window.setFullscreen(true) C++: win.setFullscreen(true)
55
- * TS: window.setAlwaysOnTop(true) C++: win.setAlwaysOnTop(true)
56
- * TS: window.setResizable(false) C++: win.setResizable(false)
57
- * TS: window.setDecorations(false) C++: win.setDecorations(false)
58
- * TS: window.setTransparency(0.5) C++: win.setOpacity(0.5)
59
- * TS: window.setIcon(path) C++: win.setIconFromMemory(data, size)
60
- * TS: window.isMaximized() C++: win.isMaximized()
61
- * TS: window.isMinimized() C++: win.isMinimized()
62
- * TS: window.isVisible() C++: win.isVisible()
63
- * Events
64
- * TS: window.onResize(cb) C++: win.onResize(cb)
65
- * TS: window.onMove(cb) C++: win.onMove(cb)
66
- * TS: window.onClose(cb) C++: win.onClose(cb)
67
- * TS: window.onFocus(cb) C++: win.onFocus(cb)
68
- * TS: window.onStateChange(cb) C++: win.onStateChange(cb)
69
- * TS: window.onFileDrop(cb) C++: win.onFileDrop(cb)
70
- *
71
- * ── APP ──────────────────────────────────────────────────────────────────────
72
- * TS: createApp() C++: createApp()
73
- * .title("My App") .title("My App")
74
- * .width(1200) .width(1200)
75
- * .height(800) .height(800)
76
- * .devtools(true) .devtools(true)
77
- * .fileDrop(true); .fileDrop(true)
78
- * .build() ← returns Window
79
- * TS: app.quit() C++: app.quit()
80
- * TS: app.onReady(cb) C++: (start after build())
81
- * TS: app.onQuit(cb) C++: app.run() ← blocks until quit
82
- *
83
- * ── ROUTER ───────────────────────────────────────────────────────────────────
84
- * TS: router.setRoutes({'/': url}) C++: Router::instance().setRoutes({...})
85
- * TS: router.push("/settings") C++: Router::instance().push("/settings")
86
- * TS: router.replace("/settings") C++: Router::instance().replace("/settings")
87
- * TS: router.getCurrentRoute() C++: Router::instance().getCurrentRoute()
88
- * TS: router.setInitialRoute("/") C++: Router::instance().setInitialRoute("/")
89
- * TS: router.onRouteChange(cb) C++: Router::instance().onRouteChange(cb)
90
- *
91
- * ── BROWSER (WebView navigation) ─────────────────────────────────────────────
92
- * TS: browser.navigate(url) C++: browser.navigate(url)
93
- * TS: browser.open(url) C++: browser.navigate(url)
94
- * TS: browser.openExternal(url) C++: browser.openExternal(url)
95
- * TS: browser.openNewWindow(url) C++: browser.openNewWindow(url)
96
- * TS: browser.goBack() C++: browser.goBack()
97
- * TS: browser.goForward() C++: browser.goForward()
98
- * TS: browser.reload() C++: browser.reload()
99
- * TS: browser.stop() C++: browser.stop()
100
- * TS: browser.getUrl() C++: browser.getURL()
101
- * TS: browser.getTitle() C++: browser.getTitle()
102
- * TS: browser.getState() C++: browser.getState()
103
- * TS: browser.canGoBack() C++: browser.canGoBack()
104
- * TS: browser.canGoForward() C++: browser.canGoForward()
105
- * TS: browser.isLoading() C++: browser.isLoading()
106
- * Events
107
- * TS: browser.onNavigate(cb) C++: browser.onNavigate(cb)
108
- * TS: browser.onStateChange(cb) C++: browser.onStateChange(cb)
109
- * TS: browser.onLoadStart(cb) C++: browser.onLoadStart(cb)
110
- * TS: browser.onLoadEnd(cb) C++: browser.onLoadEnd(cb)
111
- * TS: browser.onLoadError(cb) C++: browser.onLoadError(cb)
112
- *
113
- * ── CLIPBOARD ────────────────────────────────────────────────────────────────
114
- * TS: clipboard.getText() C++: Clipboard::getText()
115
- * TS: clipboard.setText("hello") C++: Clipboard::setText("hello")
116
- * TS: clipboard.hasText() C++: Clipboard::hasText()
117
- * TS: clipboard.getImage() C++: Clipboard::getImage()
118
- * TS: clipboard.setImage(b64) C++: Clipboard::setImage(b64)
119
- * TS: clipboard.hasImage() C++: Clipboard::hasImage()
120
- * TS: clipboard.clear() C++: Clipboard::clear()
121
- * TS: clipboard.onChange(cb) C++: Clipboard::instance().onChange(cb)
122
- *
123
- * ── KEYBOARD ─────────────────────────────────────────────────────────────────
124
- * TS: keyboard.isKeyPressed(key) C++: Keyboard::instance().isKeyPressed(key)
125
- * TS: keyboard.registerShortcut(...) C++: Keyboard::instance().registerShortcut(...)
126
- * TS: keyboard.unregisterShortcut(id) C++: Keyboard::instance().unregisterShortcut(id)
127
- * TS: keyboard.clearShortcuts() C++: Keyboard::instance().clearShortcuts()
128
- * TS: keyboard.onKeyDown(cb) C++: Keyboard::instance().onKeyDown(cb)
129
- * TS: keyboard.onKeyUp(cb) C++: Keyboard::instance().onKeyUp(cb)
130
- * TS: keyboard.onShortcut(cb) C++: Keyboard::instance().onShortcut(cb)
131
- *
132
- * ── TRAY ─────────────────────────────────────────────────────────────────────
133
- * TS: tray.setIcon(path) C++: win.tray().setIcon(path)
134
- * TS: tray.setTooltip(text) C++: win.tray().setTooltip(text)
135
- * TS: tray.setVisible(true) C++: win.tray().setVisible(true)
136
- * TS: tray.setMenu(items) C++: win.tray().setMenu(items)
137
- * TS: tray.setContextMenu(items) C++: win.tray().setContextMenu(items)
138
- * TS: tray.onClick(cb) C++: win.tray().onClick(cb)
139
- * TS: tray.onDoubleClick(cb) C++: win.tray().onDoubleClick(cb)
140
- * TS: tray.onRightClick(cb) C++: win.tray().onRightClick(cb)
141
- * TS: tray.onMenuItemClick(cb) C++: win.tray().onMenuItemClick(cb)
142
- *
143
- * ── DISPLAY ──────────────────────────────────────────────────────────────────
144
- * TS: display.getAllDisplays() C++: DisplayManager::instance().getAllDisplays()
145
- * TS: display.getPrimaryDisplay() C++: DisplayManager::instance().getPrimary()
146
- * TS: display.getDisplayAt(x, y) C++: DisplayManager::instance().getAt(x, y)
147
- * TS: display.getScreenWidth() C++: DisplayManager::instance().getScreenWidth()
148
- * TS: display.getScreenHeight() C++: DisplayManager::instance().getScreenHeight()
149
- * TS: display.onConnected(cb) C++: DisplayManager::instance().onConnected(cb)
150
- * TS: display.onDisconnected(cb) C++: DisplayManager::instance().onDisconnected(cb)
151
- * TS: display.onChanged(cb) C++: DisplayManager::instance().onChanged(cb)
152
- *
153
- * ── MENU ─────────────────────────────────────────────────────────────────────
154
- * TS: menu.create(items) C++: MenuManager::instance().create(items)
155
- * TS: menu.popup(id, x, y) C++: MenuManager::instance().popup(id, x, y)
156
- * TS: menu.setApplicationMenu(items) C++: MenuManager::instance().setApplicationMenu(items)
157
- * TS: menu.showContextMenu(items) C++: MenuManager::instance().showContextMenu(items)
158
- * TS: menu.onItemClick(cb) C++: MenuManager::instance().onItemClick(cb)
159
- * TS: menu.onContextOpen(cb) C++: MenuManager::instance().onContextOpen(cb)
160
- *
161
- * ── FILEDROP ─────────────────────────────────────────────────────────────────
162
- * TS: fileDrop.setEnabled(true) C++: FileDrop::instance().setEnabled(true)
163
- * TS: fileDrop.startDrag(paths) C++: FileDrop::instance().startDrag(paths)
164
- * TS: fileDrop.onFilesDropped(cb) C++: FileDrop::instance().onFilesDropped(cb)
165
- * TS: fileDrop.onDragEnter(cb) C++: FileDrop::instance().onDragEnter(cb)
166
- * TS: fileDrop.onDragLeave(cb) C++: FileDrop::instance().onDragLeave(cb)
167
- *
168
- * ── GPU (WebGPU) ──────────────────────────────────────────────────────────────
169
- * TS: gpu.requestAdapter() C++: WebGPU::instance().requestAdapter()
170
- * TS: gpu.getPreferredCanvasFormat() C++: WebGPU::instance().getPreferredCanvasFormat()
171
- * TS: gpu.onAdapterLost(cb) C++: WebGPU::instance().onAdapterLost(cb)
172
- * TS: gpu.onDeviceLost(cb) C++: WebGPU::instance().onDeviceLost(cb)
173
- * TS: gpu.onError(cb) C++: WebGPU::instance().onError(cb)
174
- *
175
- * ── CONNECT (custom bidirectional channels) ───────────────────────────────────
176
- * TS: connect.emit("name", data) C++: connect.emit("name", {{"key", val}})
177
- * TS: connect.on("name", cb) C++: connect.on("name", cb)
178
- * TS: connect.on("name", cb) C++: connect.on("name", [](const json& d){ ... })
179
- * TS: createChannel("name") C++: connect.channel("name")
180
- * TS: createFeatureConnect("scope") C++: connect.feature("scope")
181
- * TS: handleMessage override C++: override handleMessage(name, data)
182
- *
183
- * ─────────────────────────────────────────────────────────────────────────────
184
- * USAGE EXAMPLE
185
- * ─────────────────────────────────────────────────────────────────────────────
186
- *
187
- * #include <plusui/plusui>
188
- * using namespace plusui;
189
- *
190
- * class MyApp : public Connect {
191
- * protected:
192
- * void handleMessage(const std::string& name, const nlohmann::json& data) override {
193
- * if (name == "greet") {
194
- * emit("greeting", {{"message", "Hello " + data["name"].get<std::string>()}});
195
- * }
196
- * }
197
- * };
198
- *
199
- * int main() {
200
- * auto win = createApp()
201
- * .title("My App")
202
- * .width(1200)
203
- * .height(800)
204
- * .fileDrop(true)
205
- * .build();
206
- *
207
- * MyApp connect;
208
- * bindConnect(win, connect);
209
- *
210
- * win.loadURL("http://localhost:5173");
211
- *
212
- * win.onClose([]{ app.quit(); });
213
- * win.tray().setIcon("icon.png");
214
- * win.tray().onClick([&](int, int){ win.show(); });
215
- *
216
- * Router::instance().setRoutes({{"/", "http://localhost:5173"}});
217
- * Router::instance().push("/");
218
- *
219
- * app.run();
220
- * }
221
- */
222
-
223
- // ─── Feature Headers ──────────────────────────────────────────────────────────
224
-
225
- #include <plusui/app.hpp>
226
- #include <plusui/browser.hpp>
227
- #include <plusui/clipboard.hpp>
228
- #include <plusui/connect.hpp>
229
- #include <plusui/connection.hpp>
230
- #include <plusui/display.hpp>
231
- #include <plusui/filedrop.hpp>
232
- #include <plusui/keyboard.hpp>
233
- #include <plusui/menu.hpp>
234
- #include <plusui/router.hpp>
235
- #include <plusui/tray.hpp>
236
- #include <plusui/webgpu.hpp>
237
- #include <plusui/window.hpp>
1
+ #pragma once
2
+
3
+ /**
4
+ * PlusUI C++ API
5
+ *
6
+ * Mirrors: Core/Features/API/index.ts
7
+ *
8
+ * ONE INCLUDE. ALL FEATURES.
9
+ *
10
+ * #include <plusui/plusui> // get everything
11
+ * using namespace plusui;
12
+ *
13
+ * ─────────────────────────────────────────────────────────────────────────────
14
+ * FEATURE MAP (C++ class ↔ TypeScript object)
15
+ * ─────────────────────────────────────────────────────────────────────────────
16
+ *
17
+ * TypeScript C++ class / accessor Header
18
+ * ─────────────────── ────────────────────────── ──────────────────
19
+ * window Window window.hpp
20
+ * app / createApp() App, App::Builder app.hpp
21
+ * browser Browser browser.hpp
22
+ * clipboard Clipboard clipboard.hpp
23
+ * keyboard Keyboard keyboard.hpp
24
+ * tray TrayManager tray.hpp
25
+ * display DisplayManager display.hpp
26
+ * menu MenuManager menu.hpp
27
+ * router Router router.hpp
28
+ * fileDrop FileDrop filedrop.hpp
29
+ * gpu WebGPU webgpu.hpp
30
+ * connect Connect connect.hpp
31
+ *
32
+ * ─────────────────────────────────────────────────────────────────────────────
33
+ * FRONTEND ↔ BACKEND MIRROR
34
+ * ─────────────────────────────────────────────────────────────────────────────
35
+ *
36
+ * IMPORT / INCLUDE
37
+ * TS: import plusui from 'plusui'
38
+ * C++: #include <plusui/plusui>
39
+ * using namespace plusui;
40
+ *
41
+ * ── WINDOW ───────────────────────────────────────────────────────────────────
42
+ * Actions
43
+ * TS: window.show() C++: win.show()
44
+ * TS: window.hide() C++: win.hide()
45
+ * TS: window.minimize() C++: win.minimize()
46
+ * TS: window.maximize() C++: win.maximize()
47
+ * TS: window.restore() C++: win.restore()
48
+ * TS: window.close() C++: win.close()
49
+ * TS: window.center() C++: win.center()
50
+ * TS: window.focus() C++: win.focus()
51
+ * TS: window.setTitle("My App") C++: win.setTitle("My App")
52
+ * TS: window.setSize(800, 600) C++: win.setSize(800, 600)
53
+ * TS: window.setPosition(100, 100) C++: win.setPosition(100, 100)
54
+ * TS: window.setFullscreen(true) C++: win.setFullscreen(true)
55
+ * TS: window.setAlwaysOnTop(true) C++: win.setAlwaysOnTop(true)
56
+ * TS: window.setResizable(false) C++: win.setResizable(false)
57
+ * TS: window.setDecorations(false) C++: win.setDecorations(false)
58
+ * TS: window.setTransparency(0.5) C++: win.setOpacity(0.5)
59
+ * TS: window.setIcon(path) C++: win.setIconFromMemory(data, size)
60
+ * TS: window.isMaximized() C++: win.isMaximized()
61
+ * TS: window.isMinimized() C++: win.isMinimized()
62
+ * TS: window.isVisible() C++: win.isVisible()
63
+ * Events
64
+ * TS: window.onResize(cb) C++: win.onResize(cb)
65
+ * TS: window.onMove(cb) C++: win.onMove(cb)
66
+ * TS: window.onClose(cb) C++: win.onClose(cb)
67
+ * TS: window.onFocus(cb) C++: win.onFocus(cb)
68
+ * TS: window.onStateChange(cb) C++: win.onStateChange(cb)
69
+ * TS: window.onFileDrop(cb) C++: win.onFileDrop(cb)
70
+ *
71
+ * ── APP ──────────────────────────────────────────────────────────────────────
72
+ * TS: createApp() C++: createApp()
73
+ * .title("My App") .title("My App")
74
+ * .width(1200) .width(1200)
75
+ * .height(800) .height(800)
76
+ * .devtools(true) .devtools(true)
77
+ * .fileDrop(true); .fileDrop(true)
78
+ * .build() ← returns Window
79
+ * TS: app.quit() C++: app.quit()
80
+ * TS: app.onReady(cb) C++: (start after build())
81
+ * TS: app.onQuit(cb) C++: app.run() ← blocks until quit
82
+ *
83
+ * ── ROUTER ───────────────────────────────────────────────────────────────────
84
+ * TS: router.setRoutes({'/': url}) C++: Router::instance().setRoutes({...})
85
+ * TS: router.push("/settings") C++: Router::instance().push("/settings")
86
+ * TS: router.replace("/settings") C++: Router::instance().replace("/settings")
87
+ * TS: router.getCurrentRoute() C++: Router::instance().getCurrentRoute()
88
+ * TS: router.setInitialRoute("/") C++: Router::instance().setInitialRoute("/")
89
+ * TS: router.onRouteChange(cb) C++: Router::instance().onRouteChange(cb)
90
+ *
91
+ * ── BROWSER (WebView navigation) ─────────────────────────────────────────────
92
+ * TS: browser.navigate(url) C++: browser.navigate(url)
93
+ * TS: browser.open(url) C++: browser.navigate(url)
94
+ * TS: browser.openExternal(url) C++: browser.openExternal(url)
95
+ * TS: browser.openNewWindow(url) C++: browser.openNewWindow(url)
96
+ * TS: browser.goBack() C++: browser.goBack()
97
+ * TS: browser.goForward() C++: browser.goForward()
98
+ * TS: browser.reload() C++: browser.reload()
99
+ * TS: browser.stop() C++: browser.stop()
100
+ * TS: browser.getUrl() C++: browser.getURL()
101
+ * TS: browser.getTitle() C++: browser.getTitle()
102
+ * TS: browser.getState() C++: browser.getState()
103
+ * TS: browser.canGoBack() C++: browser.canGoBack()
104
+ * TS: browser.canGoForward() C++: browser.canGoForward()
105
+ * TS: browser.isLoading() C++: browser.isLoading()
106
+ * Events
107
+ * TS: browser.onNavigate(cb) C++: browser.onNavigate(cb)
108
+ * TS: browser.onStateChange(cb) C++: browser.onStateChange(cb)
109
+ * TS: browser.onLoadStart(cb) C++: browser.onLoadStart(cb)
110
+ * TS: browser.onLoadEnd(cb) C++: browser.onLoadEnd(cb)
111
+ * TS: browser.onLoadError(cb) C++: browser.onLoadError(cb)
112
+ *
113
+ * ── CLIPBOARD ────────────────────────────────────────────────────────────────
114
+ * TS: clipboard.getText() C++: Clipboard::getText()
115
+ * TS: clipboard.setText("hello") C++: Clipboard::setText("hello")
116
+ * TS: clipboard.hasText() C++: Clipboard::hasText()
117
+ * TS: clipboard.getImage() C++: Clipboard::getImage()
118
+ * TS: clipboard.setImage(b64) C++: Clipboard::setImage(b64)
119
+ * TS: clipboard.hasImage() C++: Clipboard::hasImage()
120
+ * TS: clipboard.clear() C++: Clipboard::clear()
121
+ * TS: clipboard.onChange(cb) C++: Clipboard::instance().onChange(cb)
122
+ *
123
+ * ── KEYBOARD ─────────────────────────────────────────────────────────────────
124
+ * TS: keyboard.isKeyPressed(key) C++: Keyboard::instance().isKeyPressed(key)
125
+ * TS: keyboard.registerShortcut(...) C++: Keyboard::instance().registerShortcut(...)
126
+ * TS: keyboard.unregisterShortcut(id) C++: Keyboard::instance().unregisterShortcut(id)
127
+ * TS: keyboard.clearShortcuts() C++: Keyboard::instance().clearShortcuts()
128
+ * TS: keyboard.onKeyDown(cb) C++: Keyboard::instance().onKeyDown(cb)
129
+ * TS: keyboard.onKeyUp(cb) C++: Keyboard::instance().onKeyUp(cb)
130
+ * TS: keyboard.onShortcut(cb) C++: Keyboard::instance().onShortcut(cb)
131
+ *
132
+ * ── TRAY ─────────────────────────────────────────────────────────────────────
133
+ * TS: tray.setIcon(path) C++: win.tray().setIcon(path)
134
+ * TS: tray.setTooltip(text) C++: win.tray().setTooltip(text)
135
+ * TS: tray.setVisible(true) C++: win.tray().setVisible(true)
136
+ * TS: tray.setMenu(items) C++: win.tray().setMenu(items)
137
+ * TS: tray.setContextMenu(items) C++: win.tray().setContextMenu(items)
138
+ * TS: tray.onClick(cb) C++: win.tray().onClick(cb)
139
+ * TS: tray.onDoubleClick(cb) C++: win.tray().onDoubleClick(cb)
140
+ * TS: tray.onRightClick(cb) C++: win.tray().onRightClick(cb)
141
+ * TS: tray.onMenuItemClick(cb) C++: win.tray().onMenuItemClick(cb)
142
+ *
143
+ * ── DISPLAY ──────────────────────────────────────────────────────────────────
144
+ * TS: display.getAllDisplays() C++: DisplayManager::instance().getAllDisplays()
145
+ * TS: display.getPrimaryDisplay() C++: DisplayManager::instance().getPrimary()
146
+ * TS: display.getDisplayAt(x, y) C++: DisplayManager::instance().getAt(x, y)
147
+ * TS: display.getScreenWidth() C++: DisplayManager::instance().getScreenWidth()
148
+ * TS: display.getScreenHeight() C++: DisplayManager::instance().getScreenHeight()
149
+ * TS: display.onConnected(cb) C++: DisplayManager::instance().onConnected(cb)
150
+ * TS: display.onDisconnected(cb) C++: DisplayManager::instance().onDisconnected(cb)
151
+ * TS: display.onChanged(cb) C++: DisplayManager::instance().onChanged(cb)
152
+ *
153
+ * ── MENU ─────────────────────────────────────────────────────────────────────
154
+ * TS: menu.create(items) C++: MenuManager::instance().create(items)
155
+ * TS: menu.popup(id, x, y) C++: MenuManager::instance().popup(id, x, y)
156
+ * TS: menu.setApplicationMenu(items) C++: MenuManager::instance().setApplicationMenu(items)
157
+ * TS: menu.showContextMenu(items) C++: MenuManager::instance().showContextMenu(items)
158
+ * TS: menu.onItemClick(cb) C++: MenuManager::instance().onItemClick(cb)
159
+ * TS: menu.onContextOpen(cb) C++: MenuManager::instance().onContextOpen(cb)
160
+ *
161
+ * ── FILEDROP ─────────────────────────────────────────────────────────────────
162
+ * TS: fileDrop.setEnabled(true) C++: FileDrop::instance().setEnabled(true)
163
+ * TS: fileDrop.startDrag(paths) C++: FileDrop::instance().startDrag(paths)
164
+ * TS: fileDrop.onFilesDropped(cb) C++: FileDrop::instance().onFilesDropped(cb)
165
+ * TS: fileDrop.onDragEnter(cb) C++: FileDrop::instance().onDragEnter(cb)
166
+ * TS: fileDrop.onDragLeave(cb) C++: FileDrop::instance().onDragLeave(cb)
167
+ *
168
+ * ── GPU (WebGPU) ──────────────────────────────────────────────────────────────
169
+ * TS: gpu.requestAdapter() C++: WebGPU::instance().requestAdapter()
170
+ * TS: gpu.getPreferredCanvasFormat() C++: WebGPU::instance().getPreferredCanvasFormat()
171
+ * TS: gpu.onAdapterLost(cb) C++: WebGPU::instance().onAdapterLost(cb)
172
+ * TS: gpu.onDeviceLost(cb) C++: WebGPU::instance().onDeviceLost(cb)
173
+ * TS: gpu.onError(cb) C++: WebGPU::instance().onError(cb)
174
+ *
175
+ * ── CONNECT (custom bidirectional channels) ───────────────────────────────────
176
+ * TS: connect.emit("name", data) C++: connect.emit("name", {{"key", val}})
177
+ * TS: connect.on("name", cb) C++: connect.on("name", cb)
178
+ * TS: connect.on("name", cb) C++: connect.on("name", [](const json& d){ ... })
179
+ * TS: createChannel("name") C++: connect.channel("name")
180
+ * TS: createFeatureConnect("scope") C++: connect.feature("scope")
181
+ * TS: handleMessage override C++: override handleMessage(name, data)
182
+ *
183
+ * ─────────────────────────────────────────────────────────────────────────────
184
+ * USAGE EXAMPLE
185
+ * ─────────────────────────────────────────────────────────────────────────────
186
+ *
187
+ * #include <plusui/plusui>
188
+ * using namespace plusui;
189
+ *
190
+ * class MyApp : public Connect {
191
+ * protected:
192
+ * void handleMessage(const std::string& name, const nlohmann::json& data) override {
193
+ * if (name == "greet") {
194
+ * emit("greeting", {{"message", "Hello " + data["name"].get<std::string>()}});
195
+ * }
196
+ * }
197
+ * };
198
+ *
199
+ * int main() {
200
+ * auto win = createApp()
201
+ * .title("My App")
202
+ * .width(1200)
203
+ * .height(800)
204
+ * .fileDrop(true)
205
+ * .build();
206
+ *
207
+ * MyApp connect;
208
+ * bindConnect(win, connect);
209
+ *
210
+ * win.loadURL("http://localhost:5173");
211
+ *
212
+ * win.onClose([]{ app.quit(); });
213
+ * win.tray().setIcon("icon.png");
214
+ * win.tray().onClick([&](int, int){ win.show(); });
215
+ *
216
+ * Router::instance().setRoutes({{"/", "http://localhost:5173"}});
217
+ * Router::instance().push("/");
218
+ *
219
+ * app.run();
220
+ * }
221
+ */
222
+
223
+ // ─── Feature Headers ──────────────────────────────────────────────────────────
224
+
225
+ #include <plusui/app.hpp>
226
+ #include <plusui/browser.hpp>
227
+ #include <plusui/clipboard.hpp>
228
+ #include <plusui/connect.hpp>
229
+ #include <plusui/connection.hpp>
230
+ #include <plusui/display.hpp>
231
+ #include <plusui/filedrop.hpp>
232
+ #include <plusui/keyboard.hpp>
233
+ #include <plusui/menu.hpp>
234
+ #include <plusui/router.hpp>
235
+ #include <plusui/tray.hpp>
236
+ #include <plusui/webgpu.hpp>
237
+ #include <plusui/window.hpp>
@@ -1,30 +1,30 @@
1
- #ifndef PLUSUI_APP_H
2
- #define PLUSUI_APP_H
3
-
4
- #include "tray.hpp"
5
- #include "window.hpp"
6
- #include <functional>
7
- #include <future>
8
- #include <memory>
9
- #include <string>
10
-
11
- namespace plusui {
12
-
13
- class App {
14
- public:
15
- App();
16
- ~App();
17
-
18
- class Builder;
19
-
20
- void run();
21
- void quit();
22
-
23
- private:
24
- struct Impl;
25
- std::unique_ptr<Impl> pImpl;
26
- };
27
-
1
+ #ifndef PLUSUI_APP_H
2
+ #define PLUSUI_APP_H
3
+
4
+ #include "tray.hpp"
5
+ #include "window.hpp"
6
+ #include <functional>
7
+ #include <future>
8
+ #include <memory>
9
+ #include <string>
10
+
11
+ namespace plusui {
12
+
13
+ class App {
14
+ public:
15
+ App();
16
+ ~App();
17
+
18
+ class Builder;
19
+
20
+ void run();
21
+ void quit();
22
+
23
+ private:
24
+ struct Impl;
25
+ std::unique_ptr<Impl> pImpl;
26
+ };
27
+
28
28
  class App::Builder {
29
29
  public:
30
30
  struct Config {
@@ -35,13 +35,14 @@ public:
35
35
  bool devtools = true;
36
36
  std::string trayIconPath;
37
37
  std::string trayTooltip;
38
+ bool tray = false;
38
39
  bool alwaysOnTop = false;
39
40
  bool centered = true;
40
41
  bool transparent = false;
41
42
  bool decorations = true;
42
43
  bool skipTaskbar = false;
43
44
  bool scrollbars = true;
44
- bool fileDrop = true; // Enable OS file drop
45
+ bool fileDrop = true;
45
46
  };
46
47
 
47
48
  Builder();
@@ -53,6 +54,7 @@ public:
53
54
  Builder &devtools(bool d);
54
55
  Builder &trayIcon(const std::string &icon);
55
56
  Builder &trayTooltip(const std::string &tooltip);
57
+ Builder &tray(bool enable);
56
58
  Builder &alwaysOnTop(bool top);
57
59
  Builder &centered(bool center);
58
60
  Builder &transparent(bool transparent);
@@ -66,9 +68,9 @@ public:
66
68
  private:
67
69
  Config config;
68
70
  };
69
-
70
- App::Builder createApp();
71
-
72
- } // namespace plusui
73
-
74
- #endif
71
+
72
+ App::Builder createApp();
73
+
74
+ } // namespace plusui
75
+
76
+ #endif