synthos 0.8.0 → 0.10.0

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 (368) hide show
  1. package/README.md +1 -1
  2. package/default-pages/application/page.html +42 -0
  3. package/default-pages/application/page.json +10 -0
  4. package/default-pages/elevenlabs_effects_studio/page.html +1363 -0
  5. package/default-pages/elevenlabs_effects_studio/page.json +11 -0
  6. package/default-pages/elevenlabs_voice_studio/page.html +801 -0
  7. package/default-pages/elevenlabs_voice_studio/page.json +11 -0
  8. package/default-pages/{json_tools.html → json_tools/page.html} +13 -11
  9. package/default-pages/json_tools/page.json +10 -0
  10. package/default-pages/my_notes/notes/a1b2c3d4-e5f6-7890-abcd-ef1234567890.json +5 -0
  11. package/default-pages/my_notes/page.html +132 -0
  12. package/default-pages/{my_notes.json → my_notes/page.json} +2 -2
  13. package/default-pages/neon_asteroids/files/Ambient_Space.mp3 +0 -0
  14. package/default-pages/neon_asteroids/files/Ambient_Space2.mp3 +0 -0
  15. package/default-pages/neon_asteroids/files/Ambient_Space3.mp3 +0 -0
  16. package/default-pages/neon_asteroids/files/Asteroid_Explosion.mp3 +0 -0
  17. package/default-pages/neon_asteroids/files/Hyperspace_Jump.mp3 +0 -0
  18. package/default-pages/neon_asteroids/files/Laser_Fire.mp3 +0 -0
  19. package/default-pages/neon_asteroids/files/Menu_Navigate.mp3 +0 -0
  20. package/default-pages/neon_asteroids/files/Power_Up_Collect.mp3 +0 -0
  21. package/default-pages/neon_asteroids/files/Saucer_Alert.mp3 +0 -0
  22. package/default-pages/neon_asteroids/files/Ship_Thrust.mp3 +0 -0
  23. package/default-pages/neon_asteroids/files/effects.json +74 -0
  24. package/default-pages/neon_asteroids/page.html +1803 -0
  25. package/default-pages/{neon_asteroids.json → neon_asteroids/page.json} +3 -3
  26. package/default-pages/{oregon_trail.html → oregon_trail/page.html} +16 -30
  27. package/default-pages/{oregon_trail.json → oregon_trail/page.json} +2 -2
  28. package/default-pages/retro_game_starter/page.html +1308 -0
  29. package/default-pages/retro_game_starter/page.json +12 -0
  30. package/default-pages/{sidebar_page.html → sidebar_page/page.html} +12 -10
  31. package/default-pages/sidebar_page/page.json +10 -0
  32. package/default-pages/{solar_explorer.html → solar_explorer/page.html} +15 -12
  33. package/default-pages/{solar_explorer.json → solar_explorer/page.json} +2 -2
  34. package/default-pages/{solar_tutorial.html → solar_tutorial/page.html} +12 -10
  35. package/default-pages/solar_tutorial/page.json +10 -0
  36. package/default-pages/{two-panel_page.html → two-panel_page/page.html} +13 -11
  37. package/default-pages/two-panel_page/page.json +10 -0
  38. package/default-pages/{us_map.html → us_map/page.html} +193 -192
  39. package/default-pages/{us_map.json → us_map/page.json} +12 -12
  40. package/default-pages/{us_map_1850.html → us_map_1850/page.html} +326 -325
  41. package/default-pages/{us_map_1850.json → us_map_1850/page.json} +12 -12
  42. package/default-pages/{western_cities_1850.html → western_cities_1850/page.html} +527 -526
  43. package/default-pages/{western_cities_1850.json → western_cities_1850/page.json} +12 -12
  44. package/default-themes/aurora-dawn.json +19 -0
  45. package/default-themes/aurora-dawn.v3.css +198 -0
  46. package/default-themes/aurora-dusk.json +19 -0
  47. package/default-themes/aurora-dusk.v3.css +200 -0
  48. package/default-themes/cosmos-dawn.json +19 -0
  49. package/default-themes/cosmos-dawn.v3.css +198 -0
  50. package/default-themes/cosmos-dusk.json +19 -0
  51. package/default-themes/cosmos-dusk.v3.css +200 -0
  52. package/default-themes/high-contrast-dark.json +19 -0
  53. package/default-themes/high-contrast-dark.v3.css +200 -0
  54. package/default-themes/high-contrast-light.json +19 -0
  55. package/default-themes/high-contrast-light.v3.css +198 -0
  56. package/default-themes/nebula-dawn.v2.css +110 -0
  57. package/default-themes/nebula-dawn.v3.css +199 -0
  58. package/default-themes/nebula-dusk.v2.css +104 -0
  59. package/default-themes/nebula-dusk.v3.css +201 -0
  60. package/default-themes/solar-flare-dawn.json +19 -0
  61. package/default-themes/solar-flare-dawn.v3.css +198 -0
  62. package/default-themes/solar-flare-dusk.json +19 -0
  63. package/default-themes/solar-flare-dusk.v3.css +200 -0
  64. package/dist/agents/index.d.ts +1 -1
  65. package/dist/agents/index.d.ts.map +1 -1
  66. package/dist/agents/index.js +2 -1
  67. package/dist/agents/index.js.map +1 -1
  68. package/dist/agents/openclaw/gatewayManager.d.ts +4 -0
  69. package/dist/agents/openclaw/gatewayManager.d.ts.map +1 -1
  70. package/dist/agents/openclaw/gatewayManager.js +27 -11
  71. package/dist/agents/openclaw/gatewayManager.js.map +1 -1
  72. package/dist/agents/openclaw/openclawProvider.d.ts.map +1 -1
  73. package/dist/agents/openclaw/openclawProvider.js +2 -4
  74. package/dist/agents/openclaw/openclawProvider.js.map +1 -1
  75. package/dist/agents/openclaw/sshTunnelManager.d.ts +2 -0
  76. package/dist/agents/openclaw/sshTunnelManager.d.ts.map +1 -1
  77. package/dist/agents/openclaw/sshTunnelManager.js +31 -12
  78. package/dist/agents/openclaw/sshTunnelManager.js.map +1 -1
  79. package/dist/builders/anthropic.d.ts +31 -0
  80. package/dist/builders/anthropic.d.ts.map +1 -0
  81. package/dist/builders/anthropic.js +227 -0
  82. package/dist/builders/anthropic.js.map +1 -0
  83. package/dist/builders/fireworksai.d.ts +9 -0
  84. package/dist/builders/fireworksai.d.ts.map +1 -0
  85. package/dist/builders/fireworksai.js +57 -0
  86. package/dist/builders/fireworksai.js.map +1 -0
  87. package/dist/builders/index.d.ts +13 -0
  88. package/dist/builders/index.d.ts.map +1 -0
  89. package/dist/builders/index.js +31 -0
  90. package/dist/builders/index.js.map +1 -0
  91. package/dist/builders/openai.d.ts +8 -0
  92. package/dist/builders/openai.d.ts.map +1 -0
  93. package/dist/builders/openai.js +87 -0
  94. package/dist/builders/openai.js.map +1 -0
  95. package/dist/builders/types.d.ts +54 -0
  96. package/dist/builders/types.d.ts.map +1 -0
  97. package/dist/builders/types.js +211 -0
  98. package/dist/builders/types.js.map +1 -0
  99. package/dist/connectors/index.d.ts +1 -1
  100. package/dist/connectors/index.d.ts.map +1 -1
  101. package/dist/connectors/index.js +3 -2
  102. package/dist/connectors/index.js.map +1 -1
  103. package/dist/connectors/registry.d.ts +2 -1
  104. package/dist/connectors/registry.d.ts.map +1 -1
  105. package/dist/connectors/registry.js +31 -8
  106. package/dist/connectors/registry.js.map +1 -1
  107. package/dist/customizer/Customizer.d.ts +62 -0
  108. package/dist/customizer/Customizer.d.ts.map +1 -0
  109. package/dist/customizer/Customizer.js +134 -0
  110. package/dist/customizer/Customizer.js.map +1 -0
  111. package/dist/customizer/index.d.ts +4 -0
  112. package/dist/customizer/index.d.ts.map +1 -0
  113. package/dist/customizer/index.js +9 -0
  114. package/dist/customizer/index.js.map +1 -0
  115. package/dist/files.d.ts +16 -0
  116. package/dist/files.d.ts.map +1 -1
  117. package/dist/files.js +60 -1
  118. package/dist/files.js.map +1 -1
  119. package/dist/index.d.ts +2 -0
  120. package/dist/index.d.ts.map +1 -1
  121. package/dist/index.js +2 -0
  122. package/dist/index.js.map +1 -1
  123. package/dist/init.d.ts +12 -6
  124. package/dist/init.d.ts.map +1 -1
  125. package/dist/init.js +150 -133
  126. package/dist/init.js.map +1 -1
  127. package/dist/migrations.d.ts.map +1 -1
  128. package/dist/migrations.js +23 -10
  129. package/dist/migrations.js.map +1 -1
  130. package/dist/models/anthropic.d.ts +4 -2
  131. package/dist/models/anthropic.d.ts.map +1 -1
  132. package/dist/models/anthropic.js +33 -6
  133. package/dist/models/anthropic.js.map +1 -1
  134. package/dist/models/fireworksai.d.ts.map +1 -1
  135. package/dist/models/fireworksai.js +9 -1
  136. package/dist/models/fireworksai.js.map +1 -1
  137. package/dist/models/index.d.ts +1 -1
  138. package/dist/models/index.d.ts.map +1 -1
  139. package/dist/models/index.js +2 -1
  140. package/dist/models/index.js.map +1 -1
  141. package/dist/models/openai.d.ts +1 -1
  142. package/dist/models/openai.d.ts.map +1 -1
  143. package/dist/models/openai.js +24 -3
  144. package/dist/models/openai.js.map +1 -1
  145. package/dist/models/types.d.ts +20 -1
  146. package/dist/models/types.d.ts.map +1 -1
  147. package/dist/models/types.js +6 -1
  148. package/dist/models/types.js.map +1 -1
  149. package/dist/pages.d.ts +34 -10
  150. package/dist/pages.d.ts.map +1 -1
  151. package/dist/pages.js +229 -79
  152. package/dist/pages.js.map +1 -1
  153. package/dist/service/createCompletePrompt.d.ts +2 -1
  154. package/dist/service/createCompletePrompt.d.ts.map +1 -1
  155. package/dist/service/createCompletePrompt.js +2 -2
  156. package/dist/service/createCompletePrompt.js.map +1 -1
  157. package/dist/service/requiresSettings.d.ts +2 -1
  158. package/dist/service/requiresSettings.d.ts.map +1 -1
  159. package/dist/service/requiresSettings.js +3 -3
  160. package/dist/service/requiresSettings.js.map +1 -1
  161. package/dist/service/server.d.ts +2 -1
  162. package/dist/service/server.d.ts.map +1 -1
  163. package/dist/service/server.js +37 -8
  164. package/dist/service/server.js.map +1 -1
  165. package/dist/service/transformPage.d.ts +47 -20
  166. package/dist/service/transformPage.d.ts.map +1 -1
  167. package/dist/service/transformPage.js +514 -293
  168. package/dist/service/transformPage.js.map +1 -1
  169. package/dist/service/useAgentRoutes.d.ts +2 -1
  170. package/dist/service/useAgentRoutes.d.ts.map +1 -1
  171. package/dist/service/useAgentRoutes.js +17 -14
  172. package/dist/service/useAgentRoutes.js.map +1 -1
  173. package/dist/service/useApiRoutes.d.ts +2 -1
  174. package/dist/service/useApiRoutes.d.ts.map +1 -1
  175. package/dist/service/useApiRoutes.js +287 -172
  176. package/dist/service/useApiRoutes.js.map +1 -1
  177. package/dist/service/useConnectorRoutes.js +17 -17
  178. package/dist/service/useConnectorRoutes.js.map +1 -1
  179. package/dist/service/useDataRoutes.d.ts.map +1 -1
  180. package/dist/service/useDataRoutes.js +13 -10
  181. package/dist/service/useDataRoutes.js.map +1 -1
  182. package/dist/service/useFileRoutes.d.ts +4 -0
  183. package/dist/service/useFileRoutes.d.ts.map +1 -0
  184. package/dist/service/useFileRoutes.js +122 -0
  185. package/dist/service/useFileRoutes.js.map +1 -0
  186. package/dist/service/usePageRoutes.d.ts +2 -1
  187. package/dist/service/usePageRoutes.d.ts.map +1 -1
  188. package/dist/service/usePageRoutes.js +671 -74
  189. package/dist/service/usePageRoutes.js.map +1 -1
  190. package/dist/service/useSharedDataRoutes.d.ts +4 -0
  191. package/dist/service/useSharedDataRoutes.d.ts.map +1 -0
  192. package/dist/service/useSharedDataRoutes.js +107 -0
  193. package/dist/service/useSharedDataRoutes.js.map +1 -0
  194. package/dist/service/useSharedFileRoutes.d.ts +4 -0
  195. package/dist/service/useSharedFileRoutes.d.ts.map +1 -0
  196. package/dist/service/useSharedFileRoutes.js +121 -0
  197. package/dist/service/useSharedFileRoutes.js.map +1 -0
  198. package/dist/settings.d.ts +5 -3
  199. package/dist/settings.d.ts.map +1 -1
  200. package/dist/settings.js +12 -10
  201. package/dist/settings.js.map +1 -1
  202. package/dist/storage/FsStorageProvider.d.ts +25 -0
  203. package/dist/storage/FsStorageProvider.d.ts.map +1 -0
  204. package/dist/storage/FsStorageProvider.js +103 -0
  205. package/dist/storage/FsStorageProvider.js.map +1 -0
  206. package/dist/storage/StorageProvider.d.ts +31 -0
  207. package/dist/storage/StorageProvider.d.ts.map +1 -0
  208. package/dist/storage/StorageProvider.js +3 -0
  209. package/dist/storage/StorageProvider.js.map +1 -0
  210. package/dist/storage/index.d.ts +3 -0
  211. package/dist/storage/index.d.ts.map +1 -0
  212. package/dist/storage/index.js +6 -0
  213. package/dist/storage/index.js.map +1 -0
  214. package/dist/synthos-cli.d.ts.map +1 -1
  215. package/dist/synthos-cli.js +4 -3
  216. package/dist/synthos-cli.js.map +1 -1
  217. package/dist/themes.d.ts +1 -0
  218. package/dist/themes.d.ts.map +1 -1
  219. package/dist/themes.js +65 -28
  220. package/dist/themes.js.map +1 -1
  221. package/migration-rules/v1-to-v2.md +193 -0
  222. package/migration-rules/v2-to-v3.md +481 -0
  223. package/package.json +11 -10
  224. package/required-pages/builder/page.html +43 -0
  225. package/required-pages/builder/page.json +10 -0
  226. package/required-pages/{pages.html → pages/page.html} +238 -233
  227. package/required-pages/pages/page.json +10 -0
  228. package/required-pages/{settings.html → settings/page.html} +389 -275
  229. package/required-pages/settings/page.json +10 -0
  230. package/required-pages/synthos_apis/page.html +846 -0
  231. package/required-pages/synthos_apis/page.json +10 -0
  232. package/required-pages/{synthos_scripts.html → synthos_scripts/page.html} +13 -11
  233. package/required-pages/synthos_scripts/page.json +10 -0
  234. package/src/agents/index.ts +1 -1
  235. package/src/agents/openclaw/gatewayManager.ts +22 -11
  236. package/src/agents/openclaw/openclawProvider.ts +2 -4
  237. package/src/agents/openclaw/sshTunnelManager.ts +19 -11
  238. package/src/builders/anthropic.ts +283 -0
  239. package/src/builders/fireworksai.ts +59 -0
  240. package/src/builders/index.ts +33 -0
  241. package/src/builders/openai.ts +89 -0
  242. package/src/builders/types.ts +261 -0
  243. package/src/connectors/index.ts +1 -1
  244. package/src/connectors/registry.ts +28 -8
  245. package/src/customizer/Customizer.ts +163 -0
  246. package/src/customizer/index.ts +5 -0
  247. package/src/files.ts +57 -0
  248. package/src/index.ts +3 -1
  249. package/src/init.ts +195 -145
  250. package/src/migrations.ts +30 -10
  251. package/src/models/anthropic.ts +40 -10
  252. package/src/models/fireworksai.ts +9 -2
  253. package/src/models/index.ts +1 -1
  254. package/src/models/openai.ts +26 -6
  255. package/src/models/types.ts +31 -1
  256. package/src/pages.ts +230 -77
  257. package/src/service/createCompletePrompt.ts +3 -2
  258. package/src/service/requiresSettings.ts +4 -3
  259. package/src/service/server.ts +36 -9
  260. package/src/service/transformPage.ts +557 -326
  261. package/src/service/useAgentRoutes.ts +19 -14
  262. package/src/service/useApiRoutes.ts +208 -84
  263. package/src/service/useConnectorRoutes.ts +18 -18
  264. package/src/service/useDataRoutes.ts +13 -10
  265. package/src/service/useFileRoutes.ts +128 -0
  266. package/src/service/usePageRoutes.ts +730 -81
  267. package/src/service/useSharedDataRoutes.ts +109 -0
  268. package/src/service/useSharedFileRoutes.ts +127 -0
  269. package/src/settings.ts +14 -10
  270. package/src/storage/FsStorageProvider.ts +87 -0
  271. package/src/storage/StorageProvider.ts +34 -0
  272. package/src/storage/index.ts +2 -0
  273. package/src/synthos-cli.ts +4 -3
  274. package/src/themes.ts +64 -27
  275. package/static-files/favicon.svg +12 -0
  276. package/static-files/fluentlm-instructions.llmd +868 -0
  277. package/static-files/fluentlm-instructions.md +1595 -0
  278. package/static-files/fluentlm.css +4844 -0
  279. package/static-files/fluentlm.js +3602 -0
  280. package/static-files/fluentlm.min.css +1 -0
  281. package/static-files/fluentlm.min.js +1 -0
  282. package/{page-scripts/helpers-v2.js → static-files/helpers.v3.js} +82 -0
  283. package/static-files/page.v3.js +1290 -0
  284. package/static-files/recommended-frameworks.llmd +81 -0
  285. package/static-files/recommended-frameworks.md +137 -0
  286. package/static-files/retro-game.js +877 -0
  287. package/static-files/shell.css +797 -0
  288. package/static-files/theme-dark.css +169 -0
  289. package/static-files/theme-light.css +169 -0
  290. package/tests/builders.spec.ts +139 -0
  291. package/tests/pages.spec.ts +54 -84
  292. package/tests/transformPage.spec.ts +299 -360
  293. package/default-pages/application.html +0 -40
  294. package/default-pages/application.json +0 -1
  295. package/default-pages/json_tools.json +0 -1
  296. package/default-pages/my_notes.html +0 -33
  297. package/default-pages/neon_asteroids.html +0 -77
  298. package/default-pages/sidebar_page.json +0 -1
  299. package/default-pages/solar_tutorial.json +0 -1
  300. package/default-pages/two-panel_page.json +0 -1
  301. package/dist/service/useGatewayRoutes.d.ts +0 -4
  302. package/dist/service/useGatewayRoutes.d.ts.map +0 -1
  303. package/dist/service/useGatewayRoutes.js +0 -168
  304. package/dist/service/useGatewayRoutes.js.map +0 -1
  305. package/page-scripts/page-v2.js +0 -656
  306. package/required-pages/builder.html +0 -48
  307. package/required-pages/builder.json +0 -1
  308. package/required-pages/pages.json +0 -1
  309. package/required-pages/settings.json +0 -1
  310. package/required-pages/synthos_apis.html +0 -327
  311. package/required-pages/synthos_apis.json +0 -1
  312. package/required-pages/synthos_scripts.json +0 -1
  313. package/src/connectors/airtable/connector.json +0 -27
  314. package/src/connectors/alpha-vantage/connector.json +0 -26
  315. package/src/connectors/brave-search/connector.json +0 -26
  316. package/src/connectors/cloudinary/connector.json +0 -27
  317. package/src/connectors/deepl/connector.json +0 -28
  318. package/src/connectors/elevenlabs/connector.json +0 -30
  319. package/src/connectors/giphy/connector.json +0 -27
  320. package/src/connectors/github/connector.json +0 -29
  321. package/src/connectors/huggingface/connector.json +0 -27
  322. package/src/connectors/imgur/connector.json +0 -29
  323. package/src/connectors/instagram/connector.json +0 -43
  324. package/src/connectors/jira/connector.json +0 -28
  325. package/src/connectors/mapbox/connector.json +0 -26
  326. package/src/connectors/nasa/connector.json +0 -27
  327. package/src/connectors/newsapi/connector.json +0 -27
  328. package/src/connectors/notion/connector.json +0 -28
  329. package/src/connectors/open-exchange-rates/connector.json +0 -27
  330. package/src/connectors/openweathermap/connector.json +0 -26
  331. package/src/connectors/pexels/connector.json +0 -27
  332. package/src/connectors/resend/connector.json +0 -29
  333. package/src/connectors/rss2json/connector.json +0 -27
  334. package/src/connectors/sendgrid/connector.json +0 -27
  335. package/src/connectors/spoonacular/connector.json +0 -28
  336. package/src/connectors/stability-ai/connector.json +0 -27
  337. package/src/connectors/twilio/connector.json +0 -28
  338. package/src/connectors/unsplash/connector.json +0 -27
  339. package/src/connectors/wolfram-alpha/connector.json +0 -26
  340. package/src/connectors/youtube-data/connector.json +0 -30
  341. /package/{dist/connectors → service-connectors}/airtable/connector.json +0 -0
  342. /package/{dist/connectors → service-connectors}/alpha-vantage/connector.json +0 -0
  343. /package/{dist/connectors → service-connectors}/brave-search/connector.json +0 -0
  344. /package/{dist/connectors → service-connectors}/cloudinary/connector.json +0 -0
  345. /package/{dist/connectors → service-connectors}/deepl/connector.json +0 -0
  346. /package/{dist/connectors → service-connectors}/elevenlabs/connector.json +0 -0
  347. /package/{dist/connectors → service-connectors}/giphy/connector.json +0 -0
  348. /package/{dist/connectors → service-connectors}/github/connector.json +0 -0
  349. /package/{dist/connectors → service-connectors}/huggingface/connector.json +0 -0
  350. /package/{dist/connectors → service-connectors}/imgur/connector.json +0 -0
  351. /package/{dist/connectors → service-connectors}/instagram/connector.json +0 -0
  352. /package/{dist/connectors → service-connectors}/jira/connector.json +0 -0
  353. /package/{dist/connectors → service-connectors}/mapbox/connector.json +0 -0
  354. /package/{dist/connectors → service-connectors}/nasa/connector.json +0 -0
  355. /package/{dist/connectors → service-connectors}/newsapi/connector.json +0 -0
  356. /package/{dist/connectors → service-connectors}/notion/connector.json +0 -0
  357. /package/{dist/connectors → service-connectors}/open-exchange-rates/connector.json +0 -0
  358. /package/{dist/connectors → service-connectors}/openweathermap/connector.json +0 -0
  359. /package/{dist/connectors → service-connectors}/pexels/connector.json +0 -0
  360. /package/{dist/connectors → service-connectors}/resend/connector.json +0 -0
  361. /package/{dist/connectors → service-connectors}/rss2json/connector.json +0 -0
  362. /package/{dist/connectors → service-connectors}/sendgrid/connector.json +0 -0
  363. /package/{dist/connectors → service-connectors}/spoonacular/connector.json +0 -0
  364. /package/{dist/connectors → service-connectors}/stability-ai/connector.json +0 -0
  365. /package/{dist/connectors → service-connectors}/twilio/connector.json +0 -0
  366. /package/{dist/connectors → service-connectors}/unsplash/connector.json +0 -0
  367. /package/{dist/connectors → service-connectors}/wolfram-alpha/connector.json +0 -0
  368. /package/{dist/connectors → service-connectors}/youtube-data/connector.json +0 -0
@@ -0,0 +1,11 @@
1
+ {
2
+ "title": "ElevenLabs Voice Studio",
3
+ "categories": [
4
+ "Tools",
5
+ "Audio"
6
+ ],
7
+ "pinned": false,
8
+ "showInAll": false,
9
+ "pageVersion": 3,
10
+ "mode": "locked"
11
+ }
@@ -7,25 +7,27 @@
7
7
  <style>.dialog-title{font-size:22px;font-weight:700;min-height:var(--header-min-height);padding:var(--header-padding-vertical) var(--header-padding-horizontal);line-height:var(--header-line-height);display:flex;align-items:center;justify-content:center;box-sizing:border-box;background:linear-gradient(135deg,var(--accent-primary),var(--accent-secondary));color:#fff;border-radius:12px;width:100%;max-width:800px;box-shadow:0 6px 25px var(--accent-glow);position:relative;z-index:1}.dialog-content{font-size:14px;color:rgba(224,224,224,.8);padding:15px 0;flex-grow:1;width:100%;max-width:800px;position:relative;z-index:1;overflow-y:auto;display:flex;flex-direction:column;gap:15px}.conversion-select{width:100%;padding:12px 15px;border-radius:10px;border:1px solid var(--border-color);background:rgba(15,15,35,.8);color:var(--text-primary);font-size:14px;cursor:pointer;transition:.3s}.conversion-select:focus{outline:0;border-color:var(--text-secondary);box-shadow:0 0 15px var(--accent-glow)}.conversion-select option{background:var(--bg-tertiary);color:var(--text-primary)}.multi-line-input{width:100%;min-height:220px;padding:15px;border-radius:10px;border:1px solid var(--border-color);background:rgba(15,15,35,.8);color:var(--text-primary);font-size:14px;font-family:'Courier New',monospace;resize:vertical;transition:.3s}.multi-line-input:focus{outline:0;border-color:var(--text-secondary);box-shadow:0 0 15px var(--accent-glow)}.button-group{display:flex;justify-content:space-between;align-items:center;gap:10px}.button-group div{display:flex;gap:10px}.action-btn{padding:12px 24px;border:none;border-radius:25px;font-size:14px;font-weight:600;cursor:pointer;transition:.3s;letter-spacing:1px}.convert-btn{background:linear-gradient(135deg,var(--accent-primary) 0,var(--accent-secondary) 100%);color:#fff;box-shadow:0 4px 20px var(--accent-glow)}.convert-btn:hover{transform:translateY(-2px);box-shadow:0 6px 25px rgba(102,126,234,.6)}.reset-btn{background:rgba(102,126,234,.2);color:var(--text-secondary);border:1px solid var(--border-color)}.reset-btn:hover{background:rgba(102,126,234,.3);color:var(--accent-tertiary)}.copy-btn{background:linear-gradient(135deg,rgba(240,147,251,.3) 0,rgba(118,75,162,.3) 100%);color:var(--text-secondary);border:1px solid var(--border-color)}.copy-btn:hover:not(:disabled){background:linear-gradient(135deg,rgba(240,147,251,.5) 0,rgba(118,75,162,.5) 100%);color:var(--accent-tertiary)}.copy-btn:disabled{opacity:.5;cursor:not-allowed}.result-panel{width:100%;min-height:220px;max-height:350px;padding:15px;border-radius:10px;border:1px solid var(--border-color);background:rgba(15,15,35,.8);color:var(--accent-tertiary);font-size:13px;font-family:'Courier New',monospace;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.light-mode .dialog-content{color:rgba(45,38,64,.8)}.light-mode .conversion-select,.light-mode .multi-line-input,.light-mode .result-panel{background:rgba(255,255,255,.8)}</style>
8
8
  <script src="https://cdnjs.cloudflare.com/ajax/libs/js-yaml/4.1.0/js-yaml.min.js"></script>
9
9
  <script src="https://cdnjs.cloudflare.com/ajax/libs/marked/14.1.1/marked.min.js"></script>
10
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
10
11
  </head>
11
12
 
12
13
  <body>
14
+ <div class="shell-toolbar" data-locked="true">
15
+ <button class="shell-toolbar-btn" id="builderToggle" aria-label="Page Builder" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M7 18.5H6.2c-1.77 0-3.2-1.43-3.2-3.2V7.7C3 5.93 4.43 4.5 6.2 4.5h11.6c1.77 0 3.2 1.43 3.2 3.2v7.6c0 1.77-1.43 3.2-3.2 3.2H12l-4.2 3.2c-.5.38-1.2.02-1.2-.6V18.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><circle cx="8.5" cy="11.5" r="1" fill="currentColor"/><circle cx="12" cy="11.5" r="1" fill="currentColor"/><circle cx="15.5" cy="11.5" r="1" fill="currentColor"/></svg></button>
16
+ <button class="shell-toolbar-btn" id="pagesBtn" aria-label="View All Pages" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none"><rect x="3" y="3" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M6 7.5h5M6 10h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="18" y="3" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M21 7.5h5M21 10h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="3" y="18" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M6 22.5h5M6 25h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="18" y="18" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M21 22.5h5M21 25h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg></button>
17
+ <button class="shell-toolbar-btn" id="saveBtn" aria-label="Save Page" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M17 21v-8H7v8" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M7 3v5h8" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg></button>
18
+ <div class="shell-toolbar-spacer" data-locked="true"></div>
19
+ <button class="shell-toolbar-btn" id="settingsBtn" aria-label="Settings" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" stroke="currentColor" stroke-width="1.8"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></button>
20
+ </div>
13
21
  <div class="chat-panel" data-locked="true">
14
- <div class="chat-header" data-locked="true">SynthOS</div>
22
+ <div class="chat-header" data-locked="true"><span>Page Builder</span><button class="chat-header-close" id="builderClose" aria-label="Close builder" data-locked="true">&times;</button></div>
15
23
  <div class="chat-messages" id="chatMessages" data-locked="true">
16
24
  <div class="chat-message">
17
25
  <p><strong>SynthOS:</strong> You can use the dropdown to select a conversion type, enter your text, and click
18
26
  "Convert" to see the result.</p>
19
27
  </div>
20
- </div>
21
- <div class="link-group" data-locked="true">
22
- <a href="#" id="saveLink" data-locked="true">Save</a>
23
- <a href="/pages" id="pagesLink" data-locked="true">Pages</a>
24
- <a href="#" id="resetLink" data-locked="true">Reset</a>
25
- </div>
28
+ </div>
26
29
  <form action="/" method="POST" id="chatForm" data-locked="true">
27
- <input type="text" class="chat-input" id="chatInput" name="message" placeholder="Type a message..." data-locked="true">
28
- <button type="submit" class="chat-submit" data-locked="true">Send</button>
30
+ <textarea class="chat-input" id="chatInput" name="message" rows="2" placeholder="Type a message..." data-locked="true"></textarea>
29
31
  </form>
30
32
  </div>
31
33
  <div class="viewer-panel" id="viewerPanel" style="display: flex; flex-direction: column;">
@@ -84,6 +86,6 @@ settings:
84
86
  <div id="instructions" style="display: none;" data-locked="true"></div>
85
87
  <div id="thoughts" style="display: none;" data-locked="true"></div>
86
88
  <script id="json-tools-logic">document.getElementById("copyButton").addEventListener("click",function(){const resultPanel=document.getElementById("resultPanel");navigator.clipboard.writeText(resultPanel.innerText).then(()=>alert("Text copied to clipboard!"),err=>console.error("Could not copy text: ",err))}),document.getElementById("convertButton").addEventListener("click",function(){const userInput=document.getElementById("userInput").value,conversionType=document.getElementById("conversionType").value;let result="";try{"escape"===conversionType?result=JSON.stringify(userInput):"unescape"===conversionType?result=JSON.parse(userInput):"format"===conversionType?result=JSON.stringify(JSON.parse(userInput),null,2):"unformat"===conversionType?result=JSON.stringify(JSON.parse(userInput)):"toYaml"===conversionType?result=jsyaml.dump(JSON.parse(userInput),{indent:2}):"fromYaml"===conversionType&&(result=JSON.stringify(jsyaml.load(userInput),null,2))}catch(e){result="Invalid input: "+e.message}document.getElementById("resultPanel").innerText=result,document.getElementById("copyButton").disabled=!1}),document.getElementById("resetButton").addEventListener("click",function(){document.getElementById("userInput").value="",document.getElementById("resultPanel").innerText="",document.getElementById("copyButton").disabled=!0});</script>
87
- <script id="page-helpers" src="/api/page-helpers.js?v=2" data-locked="true"></script>
88
- <script id="page-script" src="/api/page-script.js?v=2" data-locked="true"></script>
89
+ <script id="page-helpers" src="/api/page-helpers.js?v=3" data-locked="true"></script>
90
+ <script id="page-script" src="/api/page-script.js?v=3" data-locked="true"></script>
89
91
  </body></html>
@@ -0,0 +1,10 @@
1
+ {
2
+ "title": "JSON Tools",
3
+ "categories": [
4
+ "Tools"
5
+ ],
6
+ "pinned": false,
7
+ "showInAll": false,
8
+ "pageVersion": 3,
9
+ "mode": "unlocked"
10
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
3
+ "title": "Getting Started with My Notes",
4
+ "content": "# Getting Started with My Notes\n\nWelcome to **My Notes** — your personal note-taking space inside SynthOS.\n\n$$toc\n$$\n\n## Creating Notes\n\nClick the **+ New Note** button in the sidebar to create a fresh note. Give it a title in the field at the top, then start writing in the editor below.\n\n## Rich Text Editing\n\nThe editor supports full Markdown formatting:\n\n* **Bold**, *italic*, and ~~strikethrough~~\n* Headings (H1–H6)\n* Bullet lists, numbered lists, and task lists\n* Code blocks, block quotes, and horizontal rules\n* Tables, links, and images\n\nSwitch between the visual (WYSIWYG) editor and the Markdown source using the tabs at the top of the editor.\n\n## Searching and Filtering\n\nUse the **Search** box at the top of the sidebar to filter notes by title. As you type, the list narrows to matching notes.\n\n## Saving and Deleting\n\nAfter editing, click **Save** to persist your changes. To remove a note, click **Delete** — you'll be asked to confirm before anything is removed.\n\n## Table of Contents\n\nFor longer notes, click the **Table of Contents** icon (the indented list icon at the end of the toolbar) to insert an auto-updating TOC. The TOC is scoped to the section where you place it — if inserted under an H1, it lists all H2/H3/etc. children; under an H2, it lists H3/H4/etc. children of that section. The list updates automatically as you add, edit, or remove headings.\n\n***\n\n*Feel free to edit or delete this note — it's here to help you get started!*"
5
+ }
@@ -0,0 +1,132 @@
1
+ <!DOCTYPE html><html lang="en"><head>
2
+ <meta charset="UTF-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
4
+ <title>SynthOS - Notes</title>
5
+ <script id="theme-info" src="/api/theme-info.js" data-locked="true"></script>
6
+ <link id="theme-css" rel="stylesheet" href="/api/theme.css" data-locked="true">
7
+ <link rel="stylesheet" href="https://uicdn.toast.com/editor/latest/toastui-editor.min.css">
8
+ <link rel="stylesheet" href="https://uicdn.toast.com/editor/latest/theme/toastui-editor-dark.min.css">
9
+ <script src="https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js"></script>
10
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script>
11
+ <style id="notes-layout">
12
+ /* Layout-only styles — all component styling comes from FluentLM */
13
+ .notes-app {
14
+ display: flex;
15
+ height: 100%;
16
+ width: 100%;
17
+ overflow: hidden;
18
+ }
19
+ .notes-sidebar {
20
+ width: 280px;
21
+ min-width: 280px;
22
+ background: var(--defaultStateBackground);
23
+ border-right: 2px solid var(--neutralLight);
24
+ display: flex;
25
+ flex-direction: column;
26
+ }
27
+ .notes-sidebar-header {
28
+ padding: 16px;
29
+ border-bottom: 1px solid var(--neutralLight);
30
+ display: flex;
31
+ flex-wrap: wrap;
32
+ justify-content: space-between;
33
+ align-items: center;
34
+ gap: 10px;
35
+ }
36
+ .notes-main {
37
+ flex: 1;
38
+ display: flex;
39
+ flex-direction: column;
40
+ min-width: 0;
41
+ overflow: hidden;
42
+ background: var(--bodyBackground);
43
+ }
44
+ .notes-list {
45
+ flex: 1;
46
+ overflow-y: auto;
47
+ padding: 8px;
48
+ }
49
+ .notes-editor {
50
+ flex: 1;
51
+ display: flex;
52
+ flex-direction: column;
53
+ padding: 20px;
54
+ min-width: 0;
55
+ overflow: hidden;
56
+ }
57
+ .notes-instructions {
58
+ flex: 1;
59
+ display: flex;
60
+ flex-direction: column;
61
+ align-items: center;
62
+ justify-content: center;
63
+ text-align: center;
64
+ padding: 40px;
65
+ }
66
+ .notes-instructions .instructions-icon {
67
+ font-size: 64px;
68
+ margin-bottom: 20px;
69
+ opacity: 0.6;
70
+ }
71
+ .note-actions {
72
+ display: flex;
73
+ gap: 12px;
74
+ margin-top: 16px;
75
+ justify-content: flex-end;
76
+ }
77
+ #editor-container {
78
+ flex: 1;
79
+ display: flex;
80
+ flex-direction: column;
81
+ min-height: 0;
82
+ }
83
+ #editor-container .toastui-editor-defaultUI {
84
+ border: none !important;
85
+ border-radius: 10px !important;
86
+ overflow: hidden;
87
+ flex: 1;
88
+ display: flex;
89
+ flex-direction: column;
90
+ }
91
+ #editor-container .toastui-editor-main {
92
+ flex: 1;
93
+ }
94
+ .toastui-editor-mode-switch {
95
+ display: none !important;
96
+ }
97
+ .save-toast {
98
+ opacity: 0;
99
+ transform: translateY(4px);
100
+ transition: opacity .3s, transform .3s;
101
+ pointer-events: none;
102
+ }
103
+ .save-toast.show {
104
+ opacity: 1;
105
+ transform: translateY(0);
106
+ pointer-events: auto;
107
+ }
108
+ </style></head>
109
+
110
+
111
+ <body>
112
+ <div class="shell-toolbar" data-locked="true">
113
+ <button class="shell-toolbar-btn" id="builderToggle" aria-label="Page Builder" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M7 18.5H6.2c-1.77 0-3.2-1.43-3.2-3.2V7.7C3 5.93 4.43 4.5 6.2 4.5h11.6c1.77 0 3.2 1.43 3.2 3.2v7.6c0 1.77-1.43 3.2-3.2 3.2H12l-4.2 3.2c-.5.38-1.2.02-1.2-.6V18.5Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><circle cx="8.5" cy="11.5" r="1" fill="currentColor"/><circle cx="12" cy="11.5" r="1" fill="currentColor"/><circle cx="15.5" cy="11.5" r="1" fill="currentColor"/></svg></button>
114
+ <button class="shell-toolbar-btn" id="pagesBtn" aria-label="View All Pages" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" fill="none"><rect x="3" y="3" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M6 7.5h5M6 10h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="18" y="3" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M21 7.5h5M21 10h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="3" y="18" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M6 22.5h5M6 25h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/><rect x="18" y="18" width="11" height="12" rx="1.5" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M21 22.5h5M21 25h3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg></button>
115
+ <button class="shell-toolbar-btn" id="saveBtn" aria-label="Save Page" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2Z" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M17 21v-8H7v8" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/><path d="M7 3v5h8" stroke="currentColor" stroke-width="1.8" stroke-linejoin="round"/></svg></button>
116
+ <div class="shell-toolbar-spacer" data-locked="true"></div>
117
+ <button class="shell-toolbar-btn" id="settingsBtn" aria-label="Settings" data-locked="true"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"><path d="M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z" stroke="currentColor" stroke-width="1.8"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1Z" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round"/></svg></button>
118
+ </div>
119
+ <div class="chat-panel" data-locked="true">
120
+ <div class="chat-header" data-locked="true"><span>Page Builder</span><button class="chat-header-close" id="builderClose" aria-label="Close builder" data-locked="true">&times;</button></div>
121
+ <div class="chat-messages" id="chatMessages" data-locked="true"><div class="chat-message"><p><strong>SynthOS:</strong> Welcome to <strong>My Notes</strong> — a simple note-taking app! Your notes are listed in the sidebar on the left. Click any note to view or edit it, or tap "+ New Note" to create a fresh one. Each note has a rich text editor with formatting tools, and you can save or delete notes using the buttons below the editor. Use the search box to filter notes by title or content. What would you like to do?</p></div></div>
122
+ <form action="/" method="POST" id="chatForm" data-locked="true">
123
+ <textarea class="chat-input" id="chatInput" name="message" rows="2" placeholder="Type a message..." data-locked="true"></textarea>
124
+ </form>
125
+ </div>
126
+ <div class="viewer-panel" id="viewerPanel" style="justify-content: flex-start; align-items: stretch;"><div class="notes-app"><div class="notes-sidebar"><div class="notes-sidebar-header"><span class="flm-text flm-text--large flm-text--bold">My Notes</span><button class="flm-button flm-button--primary" id="addNoteBtn" data-icon="Add">New Note</button><div class="flm-searchbox" style="width:100%;margin-top:8px;"><input class="flm-searchbox-input" id="notesFilterInput" type="text" placeholder="Search notes..."></div></div><div class="notes-list flm-list flm-list--bordered" id="notesList"></div></div><div class="notes-main"><div class="notes-instructions" id="notesInstructions"><div class="instructions-icon"><i class="flm-icon flm-icon--large" data-icon="Edit" style="font-size:64px;opacity:0.6;"></i></div><span class="flm-text flm-text--xLarge flm-text--bold flm-text--block" style="margin-bottom:12px;">Welcome to Notes</span><span class="flm-text flm-text--secondary flm-text--block" style="max-width:300px;line-height:1.5;">Select a note from the sidebar to view or edit it, or click "+ New Note" to create a new one.</span></div><div class="notes-editor" id="notesEditor" style="display: none;"><div class="flm-textfield" style="margin-bottom:12px;"><input class="flm-textfield-input" id="noteTitleInput" placeholder="Note title..." style="font-size:24px;font-weight:600;"></div><div id="editor-container"></div><div id="saveToast" class="flm-messagebar flm-messagebar--success save-toast"></div><div class="note-actions"><button class="flm-button" id="noteDeleteBtn" data-icon="Delete" style="color:var(--errorText);">Delete</button><button class="flm-button" id="noteSaveBtn" data-icon="Save">Save</button></div></div></div></div><div id="deleteConfirmDialog" class="flm-dialog-overlay" data-light-dismiss><div class="flm-dialog" style="max-width:400px;width:90%;"><div class="flm-dialog-header"><h2 class="flm-dialog-title">Delete Note</h2></div><div class="flm-dialog-body"><p class="flm-text">Are you sure you want to delete this note? This action cannot be undone.</p></div><div class="flm-dialog-footer"><div style="flex:1;"></div><button class="flm-button" id="deleteConfirmCancel">Cancel</button><button class="flm-button" id="deleteConfirmOk" style="color:var(--errorText);">Delete</button></div></div></div><div id="unsavedDialog" class="flm-dialog-overlay" data-light-dismiss><div class="flm-dialog" style="max-width:400px;width:90%;"><div class="flm-dialog-header"><h2 class="flm-dialog-title">Unsaved Changes</h2></div><div class="flm-dialog-body"><p class="flm-text">You have unsaved changes. Do you want to discard them?</p></div><div class="flm-dialog-footer"><div style="flex:1;"></div><button class="flm-button" id="unsavedStayBtn">Stay</button><button class="flm-button" id="unsavedDiscardBtn" style="color:var(--errorText);">Discard</button></div></div></div><div id="loadingOverlay" class="loading-overlay"><div class="spinner"></div></div></div>
127
+ <div id="instructions" style="display: none;" data-locked="true"></div>
128
+ <div id="thoughts" style="display: none;" data-locked="true"></div>
129
+ <script id="notes-app-logic">var currentNoteId=null,notes=[],editor=null;var isDirty=false,_loadingNote=false,_pendingNoteId=null;function updateSaveBtn(){var btn=document.getElementById("noteSaveBtn");if(isDirty)btn.classList.add("flm-button--primary");else btn.classList.remove("flm-button--primary")}function showSaveToast(){var t=document.getElementById("saveToast");t.textContent="Note saved";t.classList.add("show");setTimeout(function(){t.classList.remove("show")},2500)}var _tocViews=[];function tocPlugin(ctx){ctx.eventEmitter.listen("change",function(){setTimeout(function(){_tocViews.forEach(function(v){v.rebuild()})},0)});return{toHTMLRenderers:{toc:function(node){return[{type:"openTag",tagName:"div",outerNewLine:true,attributes:{"data-toc":"true"}},{type:"html",content:"<em>Table of Contents</em>"},{type:"closeTag",tagName:"div",outerNewLine:true}]}},wysiwygNodeViews:{customBlock:function(node,view,getPos){if(node.attrs.info!=="toc"){var pre=document.createElement("pre");pre.textContent=node.textContent;return{dom:pre,contentDOM:null,update:function(n){if(n.type.name==="customBlock"&&n.attrs.info!=="toc"){pre.textContent=n.textContent;return true}return false},destroy:function(){},stopEvent:function(){return false}}}var tocDiv=document.createElement("div");tocDiv.setAttribute("data-toc","true");tocDiv.contentEditable="false";tocDiv.style.cssText="padding:4px 0;user-select:none;";var tocView={dom:tocDiv,contentDOM:null,rebuild:function(){var pm=tocDiv.closest(".ProseMirror");if(!pm)return;var blocks=Array.from(pm.children);var idx=blocks.indexOf(tocDiv);if(idx<0)return;var parentLevel=0;for(var i=idx-1;i>=0;i--){var tag=blocks[i].tagName;if(/^H[1-6]$/.test(tag)){parentLevel=parseInt(tag.charAt(1));break}}var items=[];for(var i=idx+1;i<blocks.length;i++){var tag=blocks[i].tagName;if(/^H[1-6]$/.test(tag)){var lvl=parseInt(tag.charAt(1));if(parentLevel>0&&lvl<=parentLevel)break;var txt=blocks[i].textContent.trim();if(txt)items.push({level:lvl,text:txt})}}tocDiv.innerHTML="";if(items.length===0){var p=document.createElement("p");p.style.cssText="color:var(--bodySubtext);font-style:italic;margin:0;font-size:13px;";p.textContent="No headings found in this section";tocDiv.appendChild(p);return}var minLvl=Math.min.apply(null,items.map(function(it){return it.level}));var ul=document.createElement("ul");ul.style.cssText="list-style:none;padding:0;margin:0;";items.forEach(function(it){var li=document.createElement("li");var indent=it.level-minLvl;li.style.cssText="padding:2px 0;"+(indent>0?"margin-left:"+(indent*20)+"px;":"");var slug=it.text.toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-");var a=document.createElement("a");a.href="#"+slug;a.textContent=it.text;a.style.cssText="color:var(--themePrimary);text-decoration:none;";li.appendChild(a);ul.appendChild(li)});tocDiv.appendChild(ul)},update:function(n){if(n.type.name!=="customBlock"||n.attrs.info!=="toc")return false;tocView.rebuild();return true},destroy:function(){var i=_tocViews.indexOf(tocView);if(i>=0)_tocViews.splice(i,1)},stopEvent:function(e){return e.type==="mousedown"||e.type==="click"}};_tocViews.push(tocView);setTimeout(function(){tocView.rebuild()},0);return tocView}}}}function initEditor(){var tocBtn=document.createElement("button");tocBtn.className="toastui-editor-toolbar-icons";tocBtn.style.cssText="background-image:none;width:32px;height:32px;padding:0;display:flex;align-items:center;justify-content:center;margin:0;border:none;cursor:pointer;";tocBtn.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none" width="18" height="18" style="display:block;flex-shrink:0;"><rect x="2" y="3" width="2" height="2" rx="0.5" fill="currentColor"/><line x1="6" y1="4" x2="18" y2="4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round"/><rect x="4" y="8" width="2" height="2" rx="0.5" fill="currentColor"/><line x1="8" y1="9" x2="18" y2="9" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/><rect x="4" y="13" width="2" height="2" rx="0.5" fill="currentColor"/><line x1="8" y1="14" x2="18" y2="14" stroke="currentColor" stroke-width="1.4" stroke-linecap="round"/></svg>';tocBtn.title="Insert Table of Contents";tocBtn.type="button";tocBtn.addEventListener("click",function(){if(!editor)return;var wasWysiwyg=!editor.isMarkdownMode();if(wasWysiwyg)editor.changeMode("markdown");editor.replaceSelection("\n$$toc\n$$\n\n");if(wasWysiwyg)editor.changeMode("wysiwyg")});editor=new toastui.Editor({el:document.querySelector("#editor-container"),height:"100%",initialEditType:"wysiwyg",previewStyle:"vertical",theme:"light"===window.themeInfo.mode?"light":"dark",placeholder:"Start writing your note...",plugins:[[tocPlugin]],toolbarItems:[["heading","bold","italic","strike"],["hr","quote"],["ul","ol","task","indent","outdent"],["table","link","image"],["code","codeblock"],[{el:tocBtn,tooltip:"Insert Table of Contents",name:"toc"}]]});editor.on("change",function(){if(!_loadingNote){isDirty=true;updateSaveBtn()}});var wwEl=document.querySelector(".toastui-editor-ww-container .ProseMirror");if(wwEl)wwEl.addEventListener("click",function(e){var a=e.target.closest("a");if(!a)return;var href=a.getAttribute("href");if(!href||href.charAt(0)!=="#")return;e.preventDefault();e.stopPropagation();var slug=href.slice(1),headings=wwEl.querySelectorAll("h1,h2,h3,h4,h5,h6");for(var i=0;i<headings.length;i++){var hSlug=headings[i].textContent.toLowerCase().replace(/[^\w\s-]/g,"").replace(/\s+/g,"-");if(hSlug===slug){headings[i].scrollIntoView({behavior:"smooth",block:"start"});break}}})}async function loadNotes(){try{notes=await synthos.data.list("notes"),renderNotesList()}catch(e){console.error("Failed to load notes:",e),notes=[],renderNotesList()}}function renderNotesList(){var list=document.getElementById("notesList"),filter=(document.getElementById("notesFilterInput").value||"").toLowerCase();list.innerHTML="";var filtered=filter?notes.filter(function(n){return(n.title||"").toLowerCase().includes(filter)}):notes;if(filtered.length===0){list.innerHTML='<div style="padding:20px;text-align:center;color:var(--bodySubtext);font-size:13px;">'+(filter?"No matching notes.":'No notes yet.<br>Click "+ New Note" to create one.')+"</div>"}else{filtered.forEach(function(note){var item=document.createElement("div");item.className="flm-list-item"+(currentNoteId===note.id?" flm-list-item--selected":"");item.style.cssText="cursor:pointer;padding:12px 14px;";item.innerHTML='<div class="flm-list-item-content"><span class="flm-list-item-primary flm-text--semibold flm-text--nowrap">'+escapeHtml(note.title||"Untitled")+"</span></div>";item.onclick=function(){selectNote(note.id)};list.appendChild(item)})}}function escapeHtml(text){var div=document.createElement("div");return div.textContent=text,div.innerHTML}function selectNote(id){if(isDirty&&id!==currentNoteId){_pendingNoteId=id;document.getElementById("unsavedDialog").classList.add("flm-dialog-overlay--open");return}currentNoteId=id;var note=notes.find(function(n){return n.id===id});if(note){document.getElementById("notesInstructions").style.display="none";document.getElementById("notesEditor").style.display="flex";document.getElementById("noteTitleInput").value=note.title||"";if(editor){_loadingNote=true;editor.setMarkdown(note.content||"");_loadingNote=false;setTimeout(function(){var ww=document.querySelector(".toastui-editor-ww-container .ProseMirror");if(ww)ww.scrollTop=0;var sc=document.querySelector(".toastui-editor-ww-container");if(sc)sc.scrollTop=0},0)}isDirty=false;updateSaveBtn();renderNotesList()}}function showInstructions(){currentNoteId=null;document.getElementById("notesInstructions").style.display="flex";document.getElementById("notesEditor").style.display="none";renderNotesList()}document.getElementById("addNoteBtn").onclick=async function(){var newNote={id:crypto.randomUUID(),title:"",content:""};try{var saved=await synthos.data.save("notes",newNote);notes.unshift(saved);selectNote(saved.id)}catch(e){console.error("Failed to create note:",e)}};document.getElementById("noteSaveBtn").onclick=async function(){if(!currentNoteId)return;var title=document.getElementById("noteTitleInput").value,content=editor?editor.getMarkdown():"";try{var updated=await synthos.data.save("notes",{id:currentNoteId,title:title,content:content}),idx=notes.findIndex(function(n){return n.id===currentNoteId});if(idx>=0)notes[idx]=updated;isDirty=false;updateSaveBtn();showSaveToast();renderNotesList()}catch(e){console.error("Failed to save note:",e)}};document.getElementById("noteDeleteBtn").onclick=function(){if(currentNoteId){document.getElementById("deleteConfirmDialog").classList.add("flm-dialog-overlay--open")}};document.getElementById("deleteConfirmCancel").onclick=function(){document.getElementById("deleteConfirmDialog").classList.remove("flm-dialog-overlay--open")};document.getElementById("deleteConfirmOk").onclick=async function(){document.getElementById("deleteConfirmDialog").classList.remove("flm-dialog-overlay--open");if(currentNoteId){try{await synthos.data.remove("notes",currentNoteId);notes=notes.filter(function(n){return n.id!==currentNoteId});showInstructions()}catch(e){console.error("Failed to delete note:",e)}}};document.getElementById("notesFilterInput").addEventListener("input",renderNotesList);document.getElementById("unsavedStayBtn").onclick=function(){document.getElementById("unsavedDialog").classList.remove("flm-dialog-overlay--open");_pendingNoteId=null};document.getElementById("unsavedDiscardBtn").onclick=function(){document.getElementById("unsavedDialog").classList.remove("flm-dialog-overlay--open");isDirty=false;var target=_pendingNoteId;_pendingNoteId=null;selectNote(target)};document.getElementById("noteTitleInput").addEventListener("input",function(){if(!_loadingNote){isDirty=true;updateSaveBtn()}});initEditor();loadNotes();</script>
130
+ <script id="page-helpers" src="/api/page-helpers.js?v=3" data-locked="true"></script>
131
+ <script id="page-script" src="/api/page-script.js?v=3" data-locked="true"></script>
132
+ </body></html>
@@ -7,6 +7,6 @@
7
7
  "showInAll": true,
8
8
  "createdDate": "2026-02-13T04:35:31.170Z",
9
9
  "lastModified": "2026-02-14T23:52:47.462Z",
10
- "pageVersion": 2,
10
+ "pageVersion": 3,
11
11
  "mode": "locked"
12
- }
12
+ }
@@ -0,0 +1,74 @@
1
+ {
2
+ "effects": [
3
+ {
4
+ "name": "Laser_Fire",
5
+ "file": "Laser_Fire.mp3",
6
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
7
+ "duration": 0.5,
8
+ "influence": 35
9
+ },
10
+ {
11
+ "name": "Asteroid_Explosion",
12
+ "file": "Asteroid_Explosion.mp3",
13
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
14
+ "duration": 1.2,
15
+ "influence": 40
16
+ },
17
+ {
18
+ "name": "Ship_Thrust",
19
+ "file": "Ship_Thrust.mp3",
20
+ "loop": { "enabled": true, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
21
+ "duration": 15,
22
+ "influence": 30
23
+ },
24
+ {
25
+ "name": "Hyperspace_Jump",
26
+ "file": "Hyperspace_Jump.mp3",
27
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
28
+ "duration": 1.5,
29
+ "influence": 45
30
+ },
31
+ {
32
+ "name": "Power_Up_Collect",
33
+ "file": "Power_Up_Collect.mp3",
34
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
35
+ "duration": 0.8,
36
+ "influence": 35
37
+ },
38
+ {
39
+ "name": "Saucer_Alert",
40
+ "file": "Saucer_Alert.mp3",
41
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
42
+ "duration": 1,
43
+ "influence": 40
44
+ },
45
+ {
46
+ "name": "Menu_Navigate",
47
+ "file": "Menu_Navigate.mp3",
48
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
49
+ "duration": 0,
50
+ "influence": 30
51
+ },
52
+ {
53
+ "name": "Ambient_Space",
54
+ "file": "Ambient_Space.mp3",
55
+ "loop": { "enabled": true, "ambient": true, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
56
+ "duration": 15,
57
+ "influence": 25
58
+ },
59
+ {
60
+ "name": "Ambient_Space2",
61
+ "file": "Ambient_Space2.mp3",
62
+ "loop": { "enabled": false, "ambient": false, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
63
+ "duration": 15,
64
+ "influence": 30
65
+ },
66
+ {
67
+ "name": "Ambient_Space3",
68
+ "file": "Ambient_Space3.mp3",
69
+ "loop": { "enabled": true, "ambient": true, "minDelay": 0, "maxDelay": 0, "repeat": 0 },
70
+ "duration": 15,
71
+ "influence": 30
72
+ }
73
+ ]
74
+ }