@pheem49/mint 1.5.5 → 1.6.1

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 (222) hide show
  1. package/.codex +0 -0
  2. package/.github/FUNDING.yml +2 -0
  3. package/.github/workflows/ci.yml +45 -0
  4. package/.github/workflows/release.yml +79 -0
  5. package/Cargo.lock +5792 -0
  6. package/Cargo.toml +32 -0
  7. package/README.md +387 -353
  8. package/assets/icon.png +0 -0
  9. package/bin/mint +0 -0
  10. package/crates/mint-cli/Cargo.toml +23 -0
  11. package/crates/mint-cli/src/agent.rs +851 -0
  12. package/crates/mint-cli/src/gmail.rs +216 -0
  13. package/crates/mint-cli/src/image.rs +142 -0
  14. package/crates/mint-cli/src/main.rs +2837 -0
  15. package/crates/mint-cli/src/mcp.rs +63 -0
  16. package/crates/mint-cli/src/onboard.rs +1149 -0
  17. package/crates/mint-cli/src/setup.rs +390 -0
  18. package/crates/mint-cli/src/skills.rs +8 -0
  19. package/crates/mint-cli/src/updater.rs +279 -0
  20. package/crates/mint-core/Cargo.toml +22 -0
  21. package/crates/mint-core/src/agent_loop.rs +94 -0
  22. package/crates/mint-core/src/api_server.rs +991 -0
  23. package/crates/mint-core/src/channels.rs +248 -0
  24. package/crates/mint-core/src/chat.rs +895 -0
  25. package/crates/mint-core/src/code_tools.rs +729 -0
  26. package/crates/mint-core/src/config.rs +368 -0
  27. package/crates/mint-core/src/files.rs +159 -0
  28. package/crates/mint-core/src/knowledge.rs +541 -0
  29. package/crates/mint-core/src/lib.rs +84 -0
  30. package/crates/mint-core/src/mcp.rs +273 -0
  31. package/crates/mint-core/src/memory.rs +673 -0
  32. package/crates/mint-core/src/orchestration.rs +2157 -0
  33. package/crates/mint-core/src/pictures.rs +314 -0
  34. package/crates/mint-core/src/plugins.rs +727 -0
  35. package/crates/mint-core/src/safety.rs +416 -0
  36. package/crates/mint-core/src/semantic.rs +254 -0
  37. package/crates/mint-core/src/shell.rs +317 -0
  38. package/crates/mint-core/src/skills.rs +71 -0
  39. package/crates/mint-core/src/symbols.rs +157 -0
  40. package/crates/mint-core/src/tasks.rs +308 -0
  41. package/crates/mint-core/src/tts.rs +92 -0
  42. package/crates/mint-core/src/weather.rs +93 -0
  43. package/crates/mint-core/src/web_search.rs +200 -0
  44. package/crates/mint-core/src/workflows.rs +81 -0
  45. package/crates/mint-core/tests/mcp_stdio.rs +45 -0
  46. package/crates/mint-core/tests/memory_persistence.rs +172 -0
  47. package/crates/mint-core/tests/pictures_storage.rs +14 -0
  48. package/crates/mint-core/tests/task_lifecycle.rs +87 -0
  49. package/package.json +35 -99
  50. package/src/bin/index.js +16 -0
  51. package/src/renderer/index-web.html +17 -0
  52. package/src/renderer/index.html +17 -0
  53. package/src/renderer/public/Live2DCubismCore.js +9 -0
  54. package/src/renderer/public/assets/icon.png +0 -0
  55. package/src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.model3.json +36 -0
  56. package/src/renderer/src/App.tsx +33 -0
  57. package/src/renderer/src/calculator.ts +47 -0
  58. package/src/renderer/src/components/ChatPanel.tsx +1598 -0
  59. package/src/renderer/src/components/DashboardSidebar.tsx +358 -0
  60. package/src/renderer/src/components/Live2DStage.tsx +374 -0
  61. package/src/renderer/src/components/MintDashboard.tsx +950 -0
  62. package/src/renderer/src/components/ModelPanel.tsx +154 -0
  63. package/src/renderer/src/components/PicturesLibrary.tsx +46 -0
  64. package/src/renderer/src/components/ProactiveGlow.tsx +19 -0
  65. package/src/renderer/src/components/ScreenPicker.tsx +579 -0
  66. package/src/renderer/src/components/SettingsWindow.tsx +1467 -0
  67. package/src/renderer/src/components/SpotlightWindow.tsx +280 -0
  68. package/src/renderer/src/components/WidgetWindow.tsx +36 -0
  69. package/src/renderer/src/components/WorkspacePanel.tsx +268 -0
  70. package/src/{UI → renderer/src/css}/settings.css +69 -16
  71. package/src/renderer/src/css/spotlight.css +113 -0
  72. package/src/renderer/src/css/styles.css +3722 -0
  73. package/src/renderer/src/css/widget.css +185 -0
  74. package/src/renderer/src/env.d.ts +116 -0
  75. package/src/renderer/src/index.css +379 -0
  76. package/src/renderer/src/main.tsx +13 -0
  77. package/src/renderer/src/tauri.ts +996 -0
  78. package/src/renderer/src-web/App.tsx +25 -0
  79. package/src/renderer/src-web/calculator.ts +47 -0
  80. package/src/renderer/src-web/components/ChatPanel.tsx +1662 -0
  81. package/src/renderer/src-web/components/DashboardSidebar.tsx +242 -0
  82. package/src/renderer/src-web/components/MintDashboard.tsx +763 -0
  83. package/src/renderer/src-web/components/PicturesLibrary.tsx +73 -0
  84. package/src/renderer/src-web/components/SettingsWindow.tsx +1500 -0
  85. package/src/renderer/src-web/css/settings.css +1100 -0
  86. package/src/{UI → renderer/src-web/css}/spotlight.css +4 -4
  87. package/src/{UI → renderer/src-web/css}/styles.css +1055 -159
  88. package/src/{UI → renderer/src-web/css}/widget.css +2 -2
  89. package/src/renderer/src-web/env.d.ts +107 -0
  90. package/src/renderer/src-web/index.css +379 -0
  91. package/src/renderer/src-web/main.tsx +13 -0
  92. package/src/renderer/src-web/tauri.ts +983 -0
  93. package/tsconfig.json +30 -0
  94. package/vite.config.ts +33 -0
  95. package/vite.config.web.ts +51 -0
  96. package/GUIDE_TH.md +0 -125
  97. package/assets/Agent_Mint.png +0 -0
  98. package/assets/CLI_Screen.png +0 -0
  99. package/assets/Settings.png +0 -0
  100. package/benchmark_ai.js +0 -71
  101. package/install.ps1 +0 -64
  102. package/install.sh +0 -54
  103. package/main.js +0 -139
  104. package/mint-cli-logic.js +0 -3
  105. package/mint-cli.js +0 -410
  106. package/models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.model3.json +0 -47
  107. package/models/Shiroko_Model/Shiroko//342/232/241/351/253/230/344/272/256/342/232/241/344/275/277/347/224/250/346/225/231/347/250/213/344/270/216/346/263/250/346/204/217/344/272/213/351/241/271.txt +0 -23
  108. package/preload-picker.js +0 -11
  109. package/preload-settings.js +0 -11
  110. package/preload.js +0 -41
  111. package/scripts/install_linux_desktop_entry.js +0 -48
  112. package/src/AI_Brain/Gemini_API.js +0 -813
  113. package/src/AI_Brain/agent_orchestrator.js +0 -73
  114. package/src/AI_Brain/autonomous_brain.js +0 -179
  115. package/src/AI_Brain/behavior_memory.js +0 -135
  116. package/src/AI_Brain/headless_agent.js +0 -143
  117. package/src/AI_Brain/knowledge_base.js +0 -349
  118. package/src/AI_Brain/memory_store.js +0 -662
  119. package/src/AI_Brain/proactive_engine.js +0 -172
  120. package/src/AI_Brain/provider_adapter.js +0 -365
  121. package/src/Automation_Layer/browser_automation.js +0 -149
  122. package/src/Automation_Layer/file_operations.js +0 -286
  123. package/src/Automation_Layer/open_app.js +0 -85
  124. package/src/Automation_Layer/open_website.js +0 -38
  125. package/src/CLI/approval_handler.js +0 -47
  126. package/src/CLI/chat_router.js +0 -247
  127. package/src/CLI/chat_ui.js +0 -1159
  128. package/src/CLI/cli_colors.js +0 -115
  129. package/src/CLI/cli_formatters.js +0 -94
  130. package/src/CLI/code_agent.js +0 -1667
  131. package/src/CLI/code_session_memory.js +0 -62
  132. package/src/CLI/gmail_auth.js +0 -210
  133. package/src/CLI/image_input.js +0 -90
  134. package/src/CLI/intent_detectors.js +0 -181
  135. package/src/CLI/interactive_chat.js +0 -658
  136. package/src/CLI/list_features.js +0 -64
  137. package/src/CLI/onboarding.js +0 -416
  138. package/src/CLI/repo_summarizer.js +0 -282
  139. package/src/CLI/semantic_code_search.js +0 -312
  140. package/src/CLI/skill_manager.js +0 -41
  141. package/src/CLI/slash_command_handler.js +0 -418
  142. package/src/CLI/symbol_indexer.js +0 -231
  143. package/src/CLI/updater.js +0 -230
  144. package/src/CLI/workspace_manager.js +0 -90
  145. package/src/Channels/brave_search_bridge.js +0 -35
  146. package/src/Channels/discord_bridge.js +0 -66
  147. package/src/Channels/google_search_bridge.js +0 -38
  148. package/src/Channels/line_bridge.js +0 -60
  149. package/src/Channels/slack_bridge.js +0 -48
  150. package/src/Channels/telegram_bridge.js +0 -41
  151. package/src/Channels/whatsapp_bridge.js +0 -57
  152. package/src/Command_Parser/parser.js +0 -45
  153. package/src/Plugins/dev_tools.js +0 -41
  154. package/src/Plugins/discord.js +0 -20
  155. package/src/Plugins/docker.js +0 -47
  156. package/src/Plugins/gmail.js +0 -251
  157. package/src/Plugins/google_calendar.js +0 -252
  158. package/src/Plugins/mcp_manager.js +0 -95
  159. package/src/Plugins/notion.js +0 -256
  160. package/src/Plugins/obsidian.js +0 -54
  161. package/src/Plugins/plugin_manager.js +0 -81
  162. package/src/Plugins/spotify.js +0 -173
  163. package/src/Plugins/system_metrics.js +0 -31
  164. package/src/Plugins/system_monitor.js +0 -72
  165. package/src/System/action_executor.js +0 -178
  166. package/src/System/bridge_manager.js +0 -76
  167. package/src/System/chat_history_manager.js +0 -83
  168. package/src/System/config_manager.js +0 -194
  169. package/src/System/custom_workflows.js +0 -163
  170. package/src/System/daemon_manager.js +0 -67
  171. package/src/System/google_tts_urls.js +0 -51
  172. package/src/System/granular_automation.js +0 -157
  173. package/src/System/ipc_handlers.js +0 -332
  174. package/src/System/notifications.js +0 -23
  175. package/src/System/optional_require.js +0 -23
  176. package/src/System/picture_store.js +0 -109
  177. package/src/System/proactive_loop.js +0 -153
  178. package/src/System/safety_manager.js +0 -273
  179. package/src/System/sandbox_runner.js +0 -182
  180. package/src/System/screen_capture.js +0 -175
  181. package/src/System/smart_context.js +0 -227
  182. package/src/System/system_automation.js +0 -162
  183. package/src/System/system_events.js +0 -79
  184. package/src/System/system_info.js +0 -125
  185. package/src/System/task_manager.js +0 -222
  186. package/src/System/tool_registry.js +0 -293
  187. package/src/System/window_manager.js +0 -220
  188. package/src/UI/floating.css +0 -80
  189. package/src/UI/floating.html +0 -17
  190. package/src/UI/floating.js +0 -67
  191. package/src/UI/live2d_manager.js +0 -600
  192. package/src/UI/preload-floating.js +0 -7
  193. package/src/UI/preload-spotlight.js +0 -11
  194. package/src/UI/preload-widget.js +0 -5
  195. package/src/UI/proactive-glow.html +0 -42
  196. package/src/UI/renderer.js +0 -2127
  197. package/src/UI/screenPicker.html +0 -214
  198. package/src/UI/screenPicker.js +0 -262
  199. package/src/UI/settings.html +0 -577
  200. package/src/UI/settings.js +0 -770
  201. package/src/UI/spotlight.html +0 -23
  202. package/src/UI/spotlight.js +0 -185
  203. package/src/UI/widget.html +0 -29
  204. package/src/UI/widget.js +0 -10
  205. /package/{models → src/renderer/public/models}/Shiroko_Model/Shiroko/Shiroko_Core/72d86db84cfa9730b894c241fd24c0db.png +0 -0
  206. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/233/264/350/243/231.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/apron.exp3.json} +0 -0
  207. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/214/253/345/222/252/346/273/244/351/225/234.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/catfilter.exp3.json} +0 -0
  208. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/202/271/344/270/200/344/270/213.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/click.exp3.json} +0 -0
  209. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/dazed.exp3.json} +0 -0
  210. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//345/221/206/347/214/253/347/234/274/347/217/240/346/221/207/346/231/203.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/dazedeyes.exp3.json} +0 -0
  211. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//347/234/274/351/225/234.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/glasses.exp3.json} +0 -0
  212. /package/{models → src/renderer/public/models}/Shiroko_Model/Shiroko/Shiroko_Core/items_pinned_to_model.json +0 -0
  213. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/277/347/254/224.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/pen.exp3.json} +0 -0
  214. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//346/213/215/347/205/247.exp3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/photo.exp3.json} +0 -0
  215. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_00.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_00.png} +0 -0
  216. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_01.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_01.png} +0 -0
  217. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_02.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_02.png} +0 -0
  218. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.4096/texture_03.png" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.4096/texture_03.png} +0 -0
  219. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.cdi3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.cdi3.json} +0 -0
  220. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.moc3" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.moc3} +0 -0
  221. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.physics3.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.physics3.json} +0 -0
  222. /package/{models/Shiroko_Model/Shiroko/Shiroko_Core//351/235/242/351/245/2740.vtube.json" → src/renderer/public/models/Shiroko_Model/Shiroko/Shiroko_Core/shiroko.vtube.json} +0 -0
@@ -1,220 +0,0 @@
1
- const { app, BrowserWindow, Tray, Menu, nativeImage, screen } = require('electron');
2
- const path = require('path');
3
-
4
- function createWindowManager(projectRoot) {
5
- let mainWindow = null;
6
- let settingsWindow = null;
7
- let spotlightWindow = null;
8
- let widgetWindow = null;
9
- let tray = null;
10
-
11
- function createMainWindow() {
12
- const iconPath = path.join(projectRoot, 'assets', 'icon.png');
13
- const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize;
14
- const windowWidth = Math.min(1360, Math.max(1180, screenWidth - 40));
15
- const windowHeight = Math.min(920, Math.max(860, screenHeight - 40));
16
-
17
- mainWindow = new BrowserWindow({
18
- width: windowWidth,
19
- height: windowHeight,
20
- minWidth: 900,
21
- minHeight: 680,
22
- x: Math.floor((screenWidth - windowWidth) / 2),
23
- y: Math.floor((screenHeight - windowHeight) / 2),
24
- icon: nativeImage.createFromPath(iconPath),
25
- webPreferences: {
26
- preload: path.join(projectRoot, 'preload.js'),
27
- nodeIntegration: false,
28
- contextIsolation: true,
29
- },
30
- frame: false,
31
- transparent: true,
32
- resizable: true,
33
- show: false
34
- });
35
-
36
- mainWindow.loadFile(path.join(projectRoot, 'src/UI/index.html'));
37
- mainWindow.on('ready-to-show', () => mainWindow.show());
38
- mainWindow.on('close', (event) => {
39
- if (!app.isQuiting) {
40
- event.preventDefault();
41
- mainWindow.hide();
42
- }
43
- return false;
44
- });
45
- mainWindow.on('focus', () => {
46
- // clearFloatingUnread(); // Disabled
47
- });
48
- mainWindow.on('closed', () => {
49
- mainWindow = null;
50
- });
51
-
52
- return mainWindow;
53
- }
54
-
55
- function createTray() {
56
- const iconPath = path.join(projectRoot, 'assets', 'icon.png');
57
- let icon = nativeImage.createFromPath(iconPath);
58
- icon = icon.resize({ width: 16, height: 16 });
59
-
60
- tray = new Tray(icon);
61
- tray.setToolTip('Mint AI Assistant');
62
- tray.setContextMenu(Menu.buildFromTemplate([
63
- { label: 'Show App', click: () => { if (mainWindow) mainWindow.show(); } },
64
- { label: 'Settings', click: () => { createSettingsWindow(); } },
65
- { type: 'separator' },
66
- {
67
- label: 'Quit',
68
- click: () => {
69
- app.isQuiting = true;
70
- app.quit();
71
- }
72
- }
73
- ]));
74
-
75
- tray.on('click', toggleMainWindow);
76
- return tray;
77
- }
78
-
79
- function createSettingsWindow() {
80
- if (settingsWindow) {
81
- settingsWindow.focus();
82
- return settingsWindow;
83
- }
84
-
85
- const iconPath = path.join(projectRoot, 'assets', 'icon.png');
86
- settingsWindow = new BrowserWindow({
87
- width: 1020,
88
- height: 720,
89
- minWidth: 860,
90
- minHeight: 620,
91
- icon: nativeImage.createFromPath(iconPath),
92
- webPreferences: {
93
- preload: path.join(projectRoot, 'preload-settings.js'),
94
- nodeIntegration: false,
95
- contextIsolation: true,
96
- },
97
- frame: false,
98
- transparent: true,
99
- resizable: true,
100
- parent: mainWindow,
101
- });
102
- settingsWindow.loadFile(path.join(projectRoot, 'src/UI/settings.html'));
103
- settingsWindow.on('closed', () => { settingsWindow = null; });
104
- return settingsWindow;
105
- }
106
-
107
- function createSpotlightWindow() {
108
- if (spotlightWindow) {
109
- spotlightWindow.show();
110
- return spotlightWindow;
111
- }
112
-
113
- const { width: screenWidth, height: screenHeight } = screen.getPrimaryDisplay().workAreaSize;
114
- const windowWidth = 600;
115
- const windowHeight = 80;
116
-
117
- spotlightWindow = new BrowserWindow({
118
- width: windowWidth,
119
- height: windowHeight,
120
- x: Math.floor((screenWidth - windowWidth) / 2),
121
- y: Math.floor(screenHeight * 0.25),
122
- frame: false,
123
- transparent: true,
124
- alwaysOnTop: true,
125
- skipTaskbar: true,
126
- show: false,
127
- webPreferences: {
128
- preload: path.join(projectRoot, 'src/UI/preload-spotlight.js'),
129
- nodeIntegration: false,
130
- contextIsolation: true,
131
- }
132
- });
133
-
134
- spotlightWindow.loadFile(path.join(projectRoot, 'src/UI/spotlight.html'));
135
- spotlightWindow.on('blur', () => spotlightWindow.hide());
136
- spotlightWindow.on('closed', () => { spotlightWindow = null; });
137
- return spotlightWindow;
138
- }
139
-
140
- function createWidgetWindow() {
141
- if (widgetWindow) return widgetWindow;
142
-
143
- widgetWindow = new BrowserWindow({
144
- width: 150,
145
- height: 150,
146
- frame: false,
147
- transparent: true,
148
- resizable: false,
149
- alwaysOnTop: true,
150
- skipTaskbar: true,
151
- show: true,
152
- webPreferences: {
153
- preload: path.join(projectRoot, 'src/UI/preload-widget.js'),
154
- nodeIntegration: false,
155
- contextIsolation: true
156
- }
157
- });
158
-
159
- widgetWindow.setVisibleOnAllWorkspaces(true, { visibleOnFullScreen: true });
160
- widgetWindow.setAlwaysOnTop(true, 'floating');
161
-
162
- try {
163
- const primaryDisplay = screen.getPrimaryDisplay();
164
- const { width, x, y } = primaryDisplay.workArea;
165
- widgetWindow.setPosition(x + width - 150 - 40, y + 40);
166
- } catch (_) {}
167
-
168
- widgetWindow.loadFile(path.join(projectRoot, 'src/UI/widget.html'));
169
- widgetWindow.on('closed', () => { widgetWindow = null; });
170
- return widgetWindow;
171
- }
172
-
173
- function toggleMainWindow() {
174
- if (!mainWindow) return;
175
- if (mainWindow.isVisible()) {
176
- mainWindow.hide();
177
- } else {
178
- mainWindow.show();
179
- }
180
- }
181
-
182
- function toggleSpotlightWindow() {
183
- if (spotlightWindow && spotlightWindow.isVisible()) {
184
- spotlightWindow.hide();
185
- return;
186
- }
187
- createSpotlightWindow().show();
188
- }
189
-
190
- function closeWidgetWindow() {
191
- if (widgetWindow && !widgetWindow.isDestroyed()) {
192
- widgetWindow.close();
193
- widgetWindow = null;
194
- }
195
- }
196
-
197
- function ensureWidgetWindow() {
198
- if (!widgetWindow || widgetWindow.isDestroyed()) {
199
- createWidgetWindow();
200
- }
201
- }
202
-
203
- return {
204
- createMainWindow,
205
- createTray,
206
- createSettingsWindow,
207
- createSpotlightWindow,
208
- createWidgetWindow,
209
- toggleMainWindow,
210
- toggleSpotlightWindow,
211
- closeWidgetWindow,
212
- ensureWidgetWindow,
213
- getMainWindow: () => mainWindow,
214
- getSettingsWindow: () => settingsWindow,
215
- getSpotlightWindow: () => spotlightWindow,
216
- getWidgetWindow: () => widgetWindow
217
- };
218
- }
219
-
220
- module.exports = { createWindowManager };
@@ -1,80 +0,0 @@
1
- :root {
2
- --badge: #ff4d6d;
3
- --badge-border: rgba(0, 0, 0, 0.5);
4
- --ring: rgba(139, 92, 246, 0.5);
5
- }
6
-
7
- * {
8
- box-sizing: border-box;
9
- }
10
-
11
- body {
12
- margin: 0;
13
- width: 100vw;
14
- height: 100vh;
15
- background: transparent;
16
- display: grid;
17
- overflow: hidden;
18
- place-items: center;
19
- -webkit-app-region: drag;
20
- font-family: system-ui, sans-serif;
21
- }
22
-
23
- body.dragging {
24
- cursor: grabbing;
25
- }
26
-
27
- #floating-btn {
28
- width: 64px;
29
- height: 64px;
30
- border: 0;
31
- border-radius: 50%;
32
- background: rgba(20, 16, 32, 0.85);
33
- box-shadow: 0 10px 24px rgba(0, 0, 0, 0.35), 0 0 0 2px rgba(255, 255, 255, 0.05) inset;
34
- display: grid;
35
- place-items: center;
36
- position: relative;
37
- cursor: pointer;
38
- -webkit-app-region: no-drag;
39
- transition: transform 120ms ease, box-shadow 120ms ease;
40
- }
41
-
42
- #floating-btn:hover {
43
- transform: translateY(-1px);
44
- box-shadow: 0 14px 28px rgba(0, 0, 0, 0.4), 0 0 0 2px rgba(255, 255, 255, 0.08) inset;
45
- }
46
-
47
- #floating-btn img {
48
- width: 36px;
49
- height: 36px;
50
- -webkit-user-drag: none;
51
- user-select: none;
52
- }
53
-
54
- .badge {
55
- position: absolute;
56
- top: -4px;
57
- right: -4px;
58
- min-width: 20px;
59
- height: 20px;
60
- padding: 0 6px;
61
- border-radius: 999px;
62
- background: var(--badge);
63
- color: white;
64
- font-size: 12px;
65
- line-height: 20px;
66
- text-align: center;
67
- border: 2px solid var(--badge-border);
68
- display: none;
69
- }
70
-
71
- body.has-unread #floating-btn {
72
- box-shadow: 0 0 0 3px var(--ring), 0 10px 24px rgba(0, 0, 0, 0.35), 0 0 0 2px rgba(255, 255, 255, 0.05) inset;
73
- animation: pulse 1.6s ease-in-out infinite;
74
- }
75
-
76
- @keyframes pulse {
77
- 0% { transform: scale(1); }
78
- 50% { transform: scale(1.03); }
79
- 100% { transform: scale(1); }
80
- }
@@ -1,17 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self';">
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>Mint Floating</title>
8
- <link rel="stylesheet" href="floating.css" />
9
- </head>
10
- <body>
11
- <button id="floating-btn" aria-label="Open Mint">
12
- <img src="../../assets/icon.png" alt="Mint" draggable="false" />
13
- <span id="badge" class="badge" aria-hidden="true">1</span>
14
- </button>
15
- <script src="floating.js"></script>
16
- </body>
17
- </html>
@@ -1,67 +0,0 @@
1
- const floatingBtn = document.getElementById('floating-btn');
2
- const badge = document.getElementById('badge');
3
- let isDragging = false;
4
- let didDrag = false;
5
- let dragStart = null;
6
-
7
- function startDrag() {
8
- isDragging = true;
9
- document.body.classList.add('dragging');
10
- }
11
-
12
- function stopDrag() {
13
- isDragging = false;
14
- document.body.classList.remove('dragging');
15
- }
16
-
17
- function setBadge(count) {
18
- const value = Number(count) || 0;
19
- if (value <= 0) {
20
- badge.style.display = 'none';
21
- document.body.classList.remove('has-unread');
22
- return;
23
- }
24
- badge.textContent = value > 9 ? '9+' : String(value);
25
- badge.style.display = 'inline-block';
26
- document.body.classList.add('has-unread');
27
- }
28
-
29
- floatingBtn.addEventListener('click', () => {
30
- if (didDrag) return;
31
- if (window.floating) window.floating.openMain();
32
- });
33
-
34
- if (window.floating) {
35
- window.floating.onNotify((count) => {
36
- setBadge(count);
37
- });
38
- }
39
-
40
- window.addEventListener('mousedown', (e) => {
41
- if (e.button !== 0) return;
42
- e.preventDefault();
43
- startDrag();
44
- didDrag = false;
45
- dragStart = { x: e.screenX, y: e.screenY };
46
- });
47
-
48
- window.addEventListener('mousemove', (e) => {
49
- if (!isDragging) return;
50
- if (dragStart) {
51
- const dx = e.screenX - dragStart.x;
52
- const dy = e.screenY - dragStart.y;
53
- if (!didDrag && Math.hypot(dx, dy) < 4) return;
54
- didDrag = true;
55
- }
56
- if (window.floating) window.floating.dragMove(e.screenX, e.screenY);
57
- });
58
-
59
- window.addEventListener('mouseup', () => {
60
- stopDrag();
61
- dragStart = null;
62
- });
63
-
64
- window.addEventListener('mouseleave', () => {
65
- stopDrag();
66
- dragStart = null;
67
- });