@astralyn/sash 0.1.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 (339) hide show
  1. package/CHANGELOG.md +184 -0
  2. package/LICENSE +21 -0
  3. package/README.md +71 -0
  4. package/THIRD_PARTY_NOTICES.md +54 -0
  5. package/dist/api.js +103 -0
  6. package/dist/browser.js +25 -0
  7. package/dist/cli-errors.js +15 -0
  8. package/dist/cli.js +122 -0
  9. package/dist/commands/lifecycle.js +50 -0
  10. package/dist/commands/logs.js +54 -0
  11. package/dist/commands/shared.js +8 -0
  12. package/dist/commands/status.js +39 -0
  13. package/dist/commands/update.js +5 -0
  14. package/dist/commands/upgrade.js +43 -0
  15. package/dist/commands/web.js +33 -0
  16. package/dist/contracts.js +412 -0
  17. package/dist/core-config-validation.js +72 -0
  18. package/dist/core-install-record.js +55 -0
  19. package/dist/core-install-transaction.js +114 -0
  20. package/dist/core-update-coordination.js +105 -0
  21. package/dist/core-update-service.js +245 -0
  22. package/dist/core-update.js +804 -0
  23. package/dist/core-version.js +18 -0
  24. package/dist/core.js +206 -0
  25. package/dist/daemon/app.js +157 -0
  26. package/dist/daemon/context.js +40 -0
  27. package/dist/daemon/entry.js +67 -0
  28. package/dist/daemon/errors.js +47 -0
  29. package/dist/daemon/handlers/core.js +17 -0
  30. package/dist/daemon/handlers/daemon.js +66 -0
  31. package/dist/daemon/handlers/profiles.js +57 -0
  32. package/dist/daemon/handlers/proxy.js +12 -0
  33. package/dist/daemon/handlers/settings.js +48 -0
  34. package/dist/daemon/router.js +312 -0
  35. package/dist/daemon/scheduler.js +33 -0
  36. package/dist/daemon/server.js +121 -0
  37. package/dist/daemon-auth.js +71 -0
  38. package/dist/daemon-client.js +55 -0
  39. package/dist/daemon-entry.js +13 -0
  40. package/dist/daemon-http.js +93 -0
  41. package/dist/daemon-lifecycle.js +378 -0
  42. package/dist/daemon-proxy.js +176 -0
  43. package/dist/daemon-static.js +106 -0
  44. package/dist/daemon.js +3 -0
  45. package/dist/error-utils.js +14 -0
  46. package/dist/fs-atomic.js +123 -0
  47. package/dist/github.js +187 -0
  48. package/dist/http.js +282 -0
  49. package/dist/json-shape.js +17 -0
  50. package/dist/log-follow.js +280 -0
  51. package/dist/log.js +17 -0
  52. package/dist/managed-state-transaction.js +377 -0
  53. package/dist/mihomo-config.js +334 -0
  54. package/dist/node-version-guard.js +8 -0
  55. package/dist/offline-mutation.js +58 -0
  56. package/dist/paths.js +57 -0
  57. package/dist/process.js +572 -0
  58. package/dist/profile-migration.js +101 -0
  59. package/dist/profile-service.js +667 -0
  60. package/dist/profiles.js +182 -0
  61. package/dist/runtime-lifecycle.js +205 -0
  62. package/dist/runtime-owner.js +87 -0
  63. package/dist/runtime-recovery.js +31 -0
  64. package/dist/sash-client.js +163 -0
  65. package/dist/settings-service.js +242 -0
  66. package/dist/settings.js +314 -0
  67. package/dist/state-lock.js +331 -0
  68. package/dist/status.js +279 -0
  69. package/dist/supervisor.js +301 -0
  70. package/dist/sysproxy/common.js +99 -0
  71. package/dist/sysproxy/darwin.js +287 -0
  72. package/dist/sysproxy/factory.js +71 -0
  73. package/dist/sysproxy/gnome.js +181 -0
  74. package/dist/sysproxy/legacy.js +58 -0
  75. package/dist/sysproxy/snapshot.js +284 -0
  76. package/dist/sysproxy/types.js +24 -0
  77. package/dist/sysproxy/windows.js +216 -0
  78. package/dist/sysproxy.js +8 -0
  79. package/dist/system-proxy-manager.js +460 -0
  80. package/dist/tun-guidance.js +11 -0
  81. package/dist/ui/assets/05129d5ad91a6181d272cc3d031363d6-DJkDXMrK.woff2 +0 -0
  82. package/dist/ui/assets/0526ebf94418638dfd5b6cd9b06c07d4-BzWe4Lji.woff2 +0 -0
  83. package/dist/ui/assets/053f2647a78f659f6f8a3ae8436bd265-BocXYDl5.woff2 +0 -0
  84. package/dist/ui/assets/078f666863424d3fd2d98e3ea528704c-DQ_QCvOt.woff2 +0 -0
  85. package/dist/ui/assets/07f3ff379663ffa0222c12f241421dd9-Cma7oDlr.woff2 +0 -0
  86. package/dist/ui/assets/08427b8d865853bbd7c439321b26495f-CJmC8fWx.woff2 +0 -0
  87. package/dist/ui/assets/095224e4db29d40c54098da02b266b0a-DjsP0nQn.woff2 +0 -0
  88. package/dist/ui/assets/0ada18ca45940b08accde5c61ee871e3-E1BZD3RX.woff2 +0 -0
  89. package/dist/ui/assets/0be242294f7d791af850c6df38ac78a0-2cL6Ntwf.woff2 +0 -0
  90. package/dist/ui/assets/0bf18c938d0c27cce06c39f855405fdb-CruLZZZJ.woff2 +0 -0
  91. package/dist/ui/assets/0cfb3e9f4edf60839c37dc83e6f75ea3-DzAtRHvi.woff2 +0 -0
  92. package/dist/ui/assets/0fbbd340d0467dfe3101d58846f30cb0-gtFcO250.woff2 +0 -0
  93. package/dist/ui/assets/1063fa2dc7334d1f383e30824e016eae-B7U-kD-0.woff2 +0 -0
  94. package/dist/ui/assets/109e26e62ddc85d946e699464afbece7-BLnUjAEV.woff2 +0 -0
  95. package/dist/ui/assets/12a443b0ae9748a993b5395f8fad412b-Btjff2Lz.woff2 +0 -0
  96. package/dist/ui/assets/135c4621de7a4d85d852e03d416f13ee-DdSuW36e.woff2 +0 -0
  97. package/dist/ui/assets/13aa415469ee761c968749b1c0c56ec6-Dwe-Wa_w.woff2 +0 -0
  98. package/dist/ui/assets/1435b1ad447bd9c0e8bc52035c9dcfa8-C05ldXtw.woff2 +0 -0
  99. package/dist/ui/assets/175e0915aa874e7446b79b6bc9b00721-Dp0-l77L.woff2 +0 -0
  100. package/dist/ui/assets/1876e7d02187f006e2b7f769391c3089-CNjpRdap.woff2 +0 -0
  101. package/dist/ui/assets/1886dc284b3b845e3b5fe04aa2107276-Bh_wHwL1.woff2 +0 -0
  102. package/dist/ui/assets/19a3dda6611aaf5d787403bd1159fe15-zoEBvdpA.woff2 +0 -0
  103. package/dist/ui/assets/1afa74e14da193125e45d4783d358a4f-BgjSTENX.woff2 +0 -0
  104. package/dist/ui/assets/1cd26a6a6d784720b4a43053e9058bcf-TAP3dvNi.woff2 +0 -0
  105. package/dist/ui/assets/1ce19bddc3beab385a863b1e05685678-BCdXitZw.woff2 +0 -0
  106. package/dist/ui/assets/1d3459ac6578c80502bdb876a4824a93-CSwdnEGP.woff2 +0 -0
  107. package/dist/ui/assets/1d479e364dab4af01c539f0a6a7ac036-ZFI-djGt.woff2 +0 -0
  108. package/dist/ui/assets/1dcea2408d17fcec4197adce50f8b32d-CnK2xXR-.woff2 +0 -0
  109. package/dist/ui/assets/1e855385699999e24a33f7df8aed0489-DGFHkDVQ.woff2 +0 -0
  110. package/dist/ui/assets/1f55944b8f7972580e3029694462a6b0-CB7ogVJ9.woff2 +0 -0
  111. package/dist/ui/assets/1f96eda70929089762dc3c4feb33f9c8-DtSQ6YOf.woff2 +0 -0
  112. package/dist/ui/assets/1fb275532caadc746455881b31da27c4-BHFTsg74.woff2 +0 -0
  113. package/dist/ui/assets/20e679bdc00d06f802ea71fd9154b284-D9gRjq_v.woff2 +0 -0
  114. package/dist/ui/assets/25aff66c4a9f8cb801cbd525f4a923e4-Dgi87hP7.woff2 +0 -0
  115. package/dist/ui/assets/28e6700380b023b23e77f2d75aee624f-b19D855Q.woff2 +0 -0
  116. package/dist/ui/assets/2a1c50aa9cd99ce3a0197f5d49948e63-DrztdXCB.woff2 +0 -0
  117. package/dist/ui/assets/2b4e0ae0bf3af610b97717dfd66a012d-CBoapvha.woff2 +0 -0
  118. package/dist/ui/assets/2be2b7a672b616bc2f07059a67bfaad8-BUR0aNML.woff2 +0 -0
  119. package/dist/ui/assets/2e0a358ada78ea98ec8ba86002a27eac-DvgbSr9v.woff2 +0 -0
  120. package/dist/ui/assets/2e1cf63a2a22a50516c49b1dc521ea8a-CmltIxig.woff2 +0 -0
  121. package/dist/ui/assets/2e4481801925fcb6573c4337c73f15d7-DYOoCk-m.woff2 +0 -0
  122. package/dist/ui/assets/2fe5e634c568cd874f94d24b8f02bfd1-DcEHY35G.woff2 +0 -0
  123. package/dist/ui/assets/309c33f63f29887fb557115aa24d4bb5-CUgqrXIj.woff2 +0 -0
  124. package/dist/ui/assets/3158f45c959e1b346b0bbd6f3193dbf0-kimcClqp.woff2 +0 -0
  125. package/dist/ui/assets/316adbc8037a36f8d804637b053bbe5e-CjbZmJf9.woff2 +0 -0
  126. package/dist/ui/assets/319e9631bc29fc7235b70fc9aac43cd9-IV6yZuHZ.woff2 +0 -0
  127. package/dist/ui/assets/32054f9bb88d9431b1cdf023f770e614-CYrpCgqK.woff2 +0 -0
  128. package/dist/ui/assets/3245fa1aac6338c1d9d04befb7c346f8-CzvPhVPA.woff2 +0 -0
  129. package/dist/ui/assets/326c730f98afa476057957f2743c81e2-GPHJ3Fpu.woff2 +0 -0
  130. package/dist/ui/assets/33885558dc783bf9bae6c5d4668fef07-D33us0yR.woff2 +0 -0
  131. package/dist/ui/assets/33cd11f5e61556e4618801c8231f2744-CoR_Tv3X.woff2 +0 -0
  132. package/dist/ui/assets/34a170749cb7e6c5851acc510882af6b-BCZwsihk.woff2 +0 -0
  133. package/dist/ui/assets/3538de2d387591258d7e9908aad803b9-CewOkERZ.woff2 +0 -0
  134. package/dist/ui/assets/38d7b029c036080067a2e94211098171-CettR5Qv.woff2 +0 -0
  135. package/dist/ui/assets/393f47efeefc9f9e9cca83eb10a82c69-Brhz4z1y.woff2 +0 -0
  136. package/dist/ui/assets/396a51f2b274d01f6ba606a94f3e5fe2-DgRk-jtI.woff2 +0 -0
  137. package/dist/ui/assets/3991bf955d4c925e84b4a6542760d4d5-II4HtRkQ.woff2 +0 -0
  138. package/dist/ui/assets/39b6cb6ae8d1ea0e9832b88d2c21ef99-CbJm-q6b.woff2 +0 -0
  139. package/dist/ui/assets/3a1133157fbd259f1a51aaa9f8418a26-3FmUjjvi.woff2 +0 -0
  140. package/dist/ui/assets/3a34cff07dca7a65ed2486be19229290-B7ml2yBN.woff2 +0 -0
  141. package/dist/ui/assets/3c339dd7c27e6b8a06eea431733e076f-dGQqXaEj.woff2 +0 -0
  142. package/dist/ui/assets/3d074ea67f60953b816ce7cf5d87a980-B5VkPOmg.woff2 +0 -0
  143. package/dist/ui/assets/3d38f54dcf4a9f4a50165d5849becf71-CVDtFSZn.woff2 +0 -0
  144. package/dist/ui/assets/3e3fc9a19a27f94e4ff1b815b55b2671-Ci736GLi.woff2 +0 -0
  145. package/dist/ui/assets/3e8abb1f606f29e2f0a8a8a6b702d263-C5sOSf5L.woff2 +0 -0
  146. package/dist/ui/assets/3f0ab4e1cd99bdbfdf9acbc8f4bcb9ce-0DcdTLxV.woff2 +0 -0
  147. package/dist/ui/assets/3f30c0482650345c981d66920f56ab61-CTD2CsZI.woff2 +0 -0
  148. package/dist/ui/assets/41a9aa12ad9a60758b304c1a998fb781-BTQUDLf1.woff2 +0 -0
  149. package/dist/ui/assets/424010b2bc5cee540b92b28da49b61bf-DT8upW2M.woff2 +0 -0
  150. package/dist/ui/assets/42fbdafff2d44b76c6665d51bb2cee9d-_UrojhXD.woff2 +0 -0
  151. package/dist/ui/assets/4341db13c311b3cb0eaaf6b4c71b89e5-CzjA7MzG.woff2 +0 -0
  152. package/dist/ui/assets/434db5a796128131fde78d4389d14b71-AeNdWKua.woff2 +0 -0
  153. package/dist/ui/assets/43cb51fc70a15274d49e2d956c5ec3b4-BQbufd96.woff2 +0 -0
  154. package/dist/ui/assets/43e79de1c7815f21efbc966ff96fcbd6-DlCQvOsQ.woff2 +0 -0
  155. package/dist/ui/assets/43faf6a8a3cde1088bd5f7c830890a89-SvDzF3nA.woff2 +0 -0
  156. package/dist/ui/assets/44731ae21d7690ce538d0f8242755833-CEmu9Z88.woff2 +0 -0
  157. package/dist/ui/assets/45324b2a64cc0c0db797d5c09e239d34-BuFudtvM.woff2 +0 -0
  158. package/dist/ui/assets/4584df05d00aa75ae6e1f850fdc9df1d-GNHt6xwM.woff2 +0 -0
  159. package/dist/ui/assets/48d539539e98481fb511a761031c59fd-Cd9gdi8B.woff2 +0 -0
  160. package/dist/ui/assets/49a1fb9fc6a35796b2e0d3539088ede8-CD1cRDOy.woff2 +0 -0
  161. package/dist/ui/assets/4bec02eb0c2371e59bfb7d41a141ea1e-CmBnNPo0.woff2 +0 -0
  162. package/dist/ui/assets/4c5a81ef5683f6fbf9935e640de804e7-B4wQxzVs.woff2 +0 -0
  163. package/dist/ui/assets/4f11c9c75e86214b7f69ddee3a9f8076-DHsQ2xpE.woff2 +0 -0
  164. package/dist/ui/assets/50434b8ff88e27101d1c67ba953ee873-PH_hIqxu.woff2 +0 -0
  165. package/dist/ui/assets/5107fd5153d52c6a3f8d43ff214dd6c2-ls3eo5Qd.woff2 +0 -0
  166. package/dist/ui/assets/520cb7d3683dee99e767650efc0aa5b1-Lkd4z-9S.woff2 +0 -0
  167. package/dist/ui/assets/5455087df2f091b7bf3d38c5a102a2e7-QNkiOxwe.woff2 +0 -0
  168. package/dist/ui/assets/556450fdf0978d329cf8277e3b71dcdb-CtypGAPw.woff2 +0 -0
  169. package/dist/ui/assets/5a1b5c1b71cad50c51a79a7f4825e6e6-DQA407Ec.woff2 +0 -0
  170. package/dist/ui/assets/5ba02e809d2ef4f7639178e7a7d654c0-Dty0omtl.woff2 +0 -0
  171. package/dist/ui/assets/5bd654afe48e094f95e5142e4eaadc75-D9pUq71R.woff2 +0 -0
  172. package/dist/ui/assets/5c4c3ca0a3f4115879a61a96d02e3efc-RcVLBj31.woff2 +0 -0
  173. package/dist/ui/assets/5c737d740638e8d764f12c1e5c1cd144-D2Npjq-N.woff2 +0 -0
  174. package/dist/ui/assets/5e78019102102aa5741aa591313fd5b5-V7Azrw-2.woff2 +0 -0
  175. package/dist/ui/assets/6287cacac64e1849941f7b7d7e6316c5-DzkbPOID.woff2 +0 -0
  176. package/dist/ui/assets/643df7194160d54edc48d16d76e5ba74-BKmmIRjw.woff2 +0 -0
  177. package/dist/ui/assets/65d3b214c69ff6786fd1cab06f8394b7-B0cRUJAr.woff2 +0 -0
  178. package/dist/ui/assets/6698103c11bfe260d44fcf00c6d8b623-DVWYOeyb.woff2 +0 -0
  179. package/dist/ui/assets/692e07b3a609a8f1a21c15c45631f348-DJW5LcZH.woff2 +0 -0
  180. package/dist/ui/assets/694e87456af181279c2bfd551aa3c6e3-Cu7kRuJB.woff2 +0 -0
  181. package/dist/ui/assets/6b88066bdc7a6e8bc823128dbd0f6f3b-BG38UZSq.woff2 +0 -0
  182. package/dist/ui/assets/6d6f36f15381826d113832bfdd41b021-Bgh7YPiq.woff2 +0 -0
  183. package/dist/ui/assets/6e22361162bd0a5cd189ca3c98d23d52-DqnptHqF.woff2 +0 -0
  184. package/dist/ui/assets/6e884dd501b8da24ecd37425a9b3d51d-BVNqra8s.woff2 +0 -0
  185. package/dist/ui/assets/71200dbc7497fbafa28db5cfeae74acb-B6xMqoC6.woff2 +0 -0
  186. package/dist/ui/assets/72a85441a9757146440e3985f3b02075-CzTSlCPZ.woff2 +0 -0
  187. package/dist/ui/assets/7472d7e02045dea3ff288eac850e38eb-CboJEy4X.woff2 +0 -0
  188. package/dist/ui/assets/795ffa953bea666763ae79ac88aa7e5a-C6UsoDmi.woff2 +0 -0
  189. package/dist/ui/assets/7aa8647d6c52d249169b73417aa8e444-kJejhQ0-.woff2 +0 -0
  190. package/dist/ui/assets/7be6b794fc233ccd8b5769496301313a-Ba2iZC0a.woff2 +0 -0
  191. package/dist/ui/assets/7c0748f04d52086809c9f551c5aaded7-DSzO_ybF.woff2 +0 -0
  192. package/dist/ui/assets/7c858bb53a7652227fab8cf9753d3e1f-Bi9fbvIF.woff2 +0 -0
  193. package/dist/ui/assets/7e7026091b4e6061b05963bdb3a7f944-CrmRDJpc.woff2 +0 -0
  194. package/dist/ui/assets/7f80369a7479d568ab8bf492000282bd-CqcI5ZOp.woff2 +0 -0
  195. package/dist/ui/assets/834ce2f2571aaa26e47a618c4ad55e58-DZfWJrxo.woff2 +0 -0
  196. package/dist/ui/assets/834faab602d9c795341bc7dfd6578fe5-B1VeBVWh.woff2 +0 -0
  197. package/dist/ui/assets/8513a8eea35b460a047a16a87c36f8bb-H259w_6b.woff2 +0 -0
  198. package/dist/ui/assets/8699e8a36465bf46671dc28ce24e188c-YlkPpQ6h.woff2 +0 -0
  199. package/dist/ui/assets/86ae8881eae9eac7e9c0182c8ce6c627-Ch2r3LNs.woff2 +0 -0
  200. package/dist/ui/assets/86b3ae1be58d76f7147793f09264451b-CpgTfcn-.woff2 +0 -0
  201. package/dist/ui/assets/8769f8d7d45adcfcbd3f80460d22720d-DV_yqcTo.woff2 +0 -0
  202. package/dist/ui/assets/87bb0ceea9f5515490c832bdf6ebf641-CJpxd8e6.woff2 +0 -0
  203. package/dist/ui/assets/8928b9a50b5efbaaafa039674a3c7301-C-42WRD6.woff2 +0 -0
  204. package/dist/ui/assets/899f2c2a36cbeac473a7caeeaabc46b1-xrIcXJXU.woff2 +0 -0
  205. package/dist/ui/assets/8a075d4043e6bf66740808b492186438-Dq0346Qm.woff2 +0 -0
  206. package/dist/ui/assets/8b86676936792154c53205ab5d90b797-BGH_CGsg.woff2 +0 -0
  207. package/dist/ui/assets/8c63ca479653200a0e12f428242e1171-CsBTcPwY.woff2 +0 -0
  208. package/dist/ui/assets/8c9c7ff8342f5fed60e73c4a7ad67325-CGSYpt52.woff2 +0 -0
  209. package/dist/ui/assets/8ca655fcc5d9cf33d49815e231f3f356-b8PyEeZg.woff2 +0 -0
  210. package/dist/ui/assets/8e96f0f9385ef826f900587d0fc18b3d-D7GIG6Uq.woff2 +0 -0
  211. package/dist/ui/assets/8ea917252cf2c1e664f06ee5badffeea-CDZ1AFr0.woff2 +0 -0
  212. package/dist/ui/assets/8f42f890fc37e292017446af85af2745-Qx6oGI0z.woff2 +0 -0
  213. package/dist/ui/assets/8f9589e71c53bb753749a9c412f15c01-BVR5mPJl.woff2 +0 -0
  214. package/dist/ui/assets/90e70b52a3cc2491bbb2b4c0caf0ae7e-BdwPu67j.woff2 +0 -0
  215. package/dist/ui/assets/92ac4ca42fe050c1e680c585551abd9c-CXLyuj7l.woff2 +0 -0
  216. package/dist/ui/assets/92c12bb794c491930fd06f3f97299807-u_0ognJ0.woff2 +0 -0
  217. package/dist/ui/assets/92f0b4d2bb274a801aac10fc34c1e0cc-DFHB6dyu.woff2 +0 -0
  218. package/dist/ui/assets/93247aebd628367f5518eafdb2770ce9-o1N4zvTO.woff2 +0 -0
  219. package/dist/ui/assets/940446ea160995af66a9ee223cc3d4d1-C-_7aPYO.woff2 +0 -0
  220. package/dist/ui/assets/94be430de618453b6ae27bd366827ba2-1YYf1n5N.woff2 +0 -0
  221. package/dist/ui/assets/98cd7d62095e466e55885b34f63c86f1-z33YCk0X.woff2 +0 -0
  222. package/dist/ui/assets/99049fd5cec5894cafe2a1e5e13d1e03-DNrg8nIk.woff2 +0 -0
  223. package/dist/ui/assets/99e2752b7351aaa7681b4d91db80e89a-b3hi7miY.woff2 +0 -0
  224. package/dist/ui/assets/9d1b670cbfd64716ac685dea26237d95-DAZ9U6es.woff2 +0 -0
  225. package/dist/ui/assets/CodeEditorModal-6m0TJWyF.css +1 -0
  226. package/dist/ui/assets/CodeEditorModal-CFEnWsyh.js +14 -0
  227. package/dist/ui/assets/ConnectionsView-DHo6yvU6.css +1 -0
  228. package/dist/ui/assets/ConnectionsView-DNGmZBSU.js +1 -0
  229. package/dist/ui/assets/LogsView-BoeE92VF.css +1 -0
  230. package/dist/ui/assets/LogsView-fSiaxQ13.js +1 -0
  231. package/dist/ui/assets/PaginationFooter-B3kHzRfB.js +1 -0
  232. package/dist/ui/assets/PaginationFooter-BNkpcNoB.css +1 -0
  233. package/dist/ui/assets/ProfileEditorDialog-BydoZthX.js +1 -0
  234. package/dist/ui/assets/ProfilesView-Btc1DOxE.js +2 -0
  235. package/dist/ui/assets/ProfilesView-ByqdFNHN.css +1 -0
  236. package/dist/ui/assets/RulesView-CHyynVqA.css +1 -0
  237. package/dist/ui/assets/RulesView-D9vZBiJ1.js +1 -0
  238. package/dist/ui/assets/SettingsFileDialog-CNFEAVs4.js +1 -0
  239. package/dist/ui/assets/SettingsView-BlDhZkXQ.js +2 -0
  240. package/dist/ui/assets/SettingsView-CngS3vBM.css +1 -0
  241. package/dist/ui/assets/a0f2d41645a113d821e7ff0891daad1e-XK0rDAci.woff2 +0 -0
  242. package/dist/ui/assets/a1d1345d8407dd6169f39c28ff6b1708-Bn7hMmv8.woff2 +0 -0
  243. package/dist/ui/assets/a29f51b4ebb6776e43e7492a036be28e-CrAKKz8u.woff2 +0 -0
  244. package/dist/ui/assets/a3252ac86b2c4e88bfb9baecabcad817-qnA_3LNE.woff2 +0 -0
  245. package/dist/ui/assets/a3d63a61e7eb2bb497dbc2da65bd0873-BRMJAm0m.woff2 +0 -0
  246. package/dist/ui/assets/a45eea933252dbe3529f30a0323c2661-D4kBOrXR.woff2 +0 -0
  247. package/dist/ui/assets/a4886c4ebed8c8b1f8a87b5b491a39aa-CBQdRqpF.woff2 +0 -0
  248. package/dist/ui/assets/a50b4ab745c7676d9d3ceb3c0a023a3d-CW990pgI.woff2 +0 -0
  249. package/dist/ui/assets/a5851ae4d7e58996d8bd681f80d4727c-BBytdb0t.woff2 +0 -0
  250. package/dist/ui/assets/a5cdaa96bf7d1db6c671432f9ab7bccb-slKJjgfX.woff2 +0 -0
  251. package/dist/ui/assets/a640dd2e962cf72c7fcf76234c973303-CUCWUDBY.woff2 +0 -0
  252. package/dist/ui/assets/a67e457bbd366aef5104ce743a2cf6d4-DkE8fLlE.woff2 +0 -0
  253. package/dist/ui/assets/a6c3f2257315d45aa212bd2e86a02852-CxDbXnZV.woff2 +0 -0
  254. package/dist/ui/assets/a73399a40a5f81fb7314b8b9a10cd221-DRAvJPKI.woff2 +0 -0
  255. package/dist/ui/assets/a73a64b0941803d9d807b9ec082df641-BbPpPyy5.woff2 +0 -0
  256. package/dist/ui/assets/a73d1a0a1dfd4f4234f7a0649ece4da4-BHeqktY9.woff2 +0 -0
  257. package/dist/ui/assets/a740044e77a400a450e71fcdea55523f-Co5hpBNK.woff2 +0 -0
  258. package/dist/ui/assets/a7669b29f404662c179c71b87e67c8d2-CVnuBgHy.woff2 +0 -0
  259. package/dist/ui/assets/a964a4def15811e91b05a91740a1cf37-CzcDfCRn.woff2 +0 -0
  260. package/dist/ui/assets/aac3f69132da164921fda75d2d90bfb7-B6rUZQ4_.woff2 +0 -0
  261. package/dist/ui/assets/aacd263c3bb4ba163a4d5079c159680a-DtrDLFlk.woff2 +0 -0
  262. package/dist/ui/assets/ac62ec881ded2cdb450e542b396e24d0-CRlVJvPa.woff2 +0 -0
  263. package/dist/ui/assets/aebcb9b7d4b174ab5a4b911206f24036-BuleSpgP.woff2 +0 -0
  264. package/dist/ui/assets/af70712dadc05c7b18d248996a5ab0a9-gCZSZGzb.woff2 +0 -0
  265. package/dist/ui/assets/afbd3a8a4cfaa4561b7848c28bc6c4f8-DgnqceEw.woff2 +0 -0
  266. package/dist/ui/assets/b02d3867e6e2ea921d2845b44c4a5a31-C9v4FrqD.woff2 +0 -0
  267. package/dist/ui/assets/b1b22825b930688403337d4fd7bbba62-vmMs2pJf.woff2 +0 -0
  268. package/dist/ui/assets/b3206c979bfb28d12d7ad6df58e74b9f-X1PqLaCR.woff2 +0 -0
  269. package/dist/ui/assets/b6280e42d4f11dcab70594f9d6774936-CtezImLG.woff2 +0 -0
  270. package/dist/ui/assets/b71b8cd1a70405c3dbc0e7a44055ca9a-Cd6cIOEr.woff2 +0 -0
  271. package/dist/ui/assets/b9198c4f220a4ca075f8daa4db529e50-Bgc7zlEt.woff2 +0 -0
  272. package/dist/ui/assets/baad304a58d7d42d0af29235c5e9490b-BQZYwARB.woff2 +0 -0
  273. package/dist/ui/assets/bb99e34f8784cc44f0eeadbe735dd238-UHFYI827.woff2 +0 -0
  274. package/dist/ui/assets/bc1cb0f523c8a2ff566a047aeddf90fd-BSlXQn97.woff2 +0 -0
  275. package/dist/ui/assets/bd3171e975d62612e50148bf38b2158f-CtZKzCzQ.woff2 +0 -0
  276. package/dist/ui/assets/be10640c403263dd5917ad65c4d453a6-B-rbuuja.woff2 +0 -0
  277. package/dist/ui/assets/be764e101e78b50b749aa1414d4810a7-yIPaQQih.woff2 +0 -0
  278. package/dist/ui/assets/bfa682a7f5f12945b41230c35eb859f6-CzagcI5f.woff2 +0 -0
  279. package/dist/ui/assets/bfa9753ed26f2e1f81ab7020167bd1a0-C6ZNQQ2p.woff2 +0 -0
  280. package/dist/ui/assets/branding/sash-cat.png +0 -0
  281. package/dist/ui/assets/c0e78c6ad709b19ce437677c91033489-BtwtlApg.woff2 +0 -0
  282. package/dist/ui/assets/c5a59409c610cc8c265d1691eb3f71eb-DmI_ky2X.woff2 +0 -0
  283. package/dist/ui/assets/c5ff66a1a57f2a29424e8de5d4ef3756-C9pOsaV1.woff2 +0 -0
  284. package/dist/ui/assets/c607bdee84a0e5b69721367ccc0c9c31-eoHbdXeg.woff2 +0 -0
  285. package/dist/ui/assets/c8095033941d18db730496eb4c863757-DoexTYks.woff2 +0 -0
  286. package/dist/ui/assets/c8295519e16f4cf3a350e9729f07653a-C8bAtIO_.woff2 +0 -0
  287. package/dist/ui/assets/c91f9c9f4db81afeba37c8e73afb0bfd-BGIl2iKW.woff2 +0 -0
  288. package/dist/ui/assets/c9ad9caa4afdd40766add91d321b0350-HfuiRq1k.woff2 +0 -0
  289. package/dist/ui/assets/cc4f271c90f9ea5157db9c0a4edc976b-MAjuDvHE.woff2 +0 -0
  290. package/dist/ui/assets/cdf7c3d96ba172214d7e1e9fe5e6ba8b-CUx4fWQE.woff2 +0 -0
  291. package/dist/ui/assets/cf70d5821ea7c3ca34653169ac763606-CE0T0Svc.woff2 +0 -0
  292. package/dist/ui/assets/d0d5efe92496b1ceea38e180b0ac97d3-7G71Z6v3.woff2 +0 -0
  293. package/dist/ui/assets/d1977142eceb878b06440375e64c4372-mr-7LWm-.woff2 +0 -0
  294. package/dist/ui/assets/d42feb13392b4dd9214c61b61a6e5ae8-DjnKADf_.woff2 +0 -0
  295. package/dist/ui/assets/d46a696ec6a077c6873fc39043c3c082-C62E-13k.woff2 +0 -0
  296. package/dist/ui/assets/d4c0bbf1605a8a9c36fff5a2ead81bb5-C2F6tzOj.woff2 +0 -0
  297. package/dist/ui/assets/d918d4e47697b7c752ea223e0d0d4c81-twovU2ty.woff2 +0 -0
  298. package/dist/ui/assets/d988c05da0b5624267dd825fedd133d1-Bgbc9SVH.woff2 +0 -0
  299. package/dist/ui/assets/da3a071df79531f4f033b7c8499651d0-0tgZJL_N.woff2 +0 -0
  300. package/dist/ui/assets/da8eba4acbf93048645043006de1c5f0-Ce0dmHn_.woff2 +0 -0
  301. package/dist/ui/assets/dc3f16892e20a85a8fcad2d3097e622b-8PRrFPJt.woff2 +0 -0
  302. package/dist/ui/assets/dd5f808ec691f911483a2eb60b5049bd-BhVupSbT.woff2 +0 -0
  303. package/dist/ui/assets/e2b04534cc697a76afd70e885119cb8c-DO303iCb.woff2 +0 -0
  304. package/dist/ui/assets/e307280eb2fb7809adee14ff0d247d32-DHMLXvSs.woff2 +0 -0
  305. package/dist/ui/assets/e3b484bec850c669094f713570870b3a-BI_9kRw8.woff2 +0 -0
  306. package/dist/ui/assets/e7b1d196949b7530cbda0ad956fbb2cc-i2m2Id0q.woff2 +0 -0
  307. package/dist/ui/assets/e7c2e5fb387880508811cadc2926e13a-BfROXX4U.woff2 +0 -0
  308. package/dist/ui/assets/e8a5fe283c8b9e173097bee0b5757ab6-BvfjDjYP.woff2 +0 -0
  309. package/dist/ui/assets/e8e3465d48435612e9c3509be3984188-BeUPU5-9.woff2 +0 -0
  310. package/dist/ui/assets/e93903f4604b007fc1b7134a74f5c534-B1M4h46T.woff2 +0 -0
  311. package/dist/ui/assets/eb0994906efd969102d522b6d8b3aff2-i9SHU5CJ.woff2 +0 -0
  312. package/dist/ui/assets/eb32eee23ceadd3fc4eb5763d3573f57-B3h9kgf3.woff2 +0 -0
  313. package/dist/ui/assets/ebadbc005027fb3e2b1c2d15be38c66b-qVQSBwBu.woff2 +0 -0
  314. package/dist/ui/assets/ecbbb464ff6934b5012cf33c80c7a907-CBEPqZfS.woff2 +0 -0
  315. package/dist/ui/assets/ed79ac25c014b6434f22fe1e2549bc26-mWhz7hkU.woff2 +0 -0
  316. package/dist/ui/assets/eed64f40443554cb9f65edaca176abb0-Cqw29XTm.woff2 +0 -0
  317. package/dist/ui/assets/efc749471476cce09e12e7038c757950-BhSWPf1Q.woff2 +0 -0
  318. package/dist/ui/assets/f2a7c2cb375662aa93d8f31116d39c20-D1zsMYCW.woff2 +0 -0
  319. package/dist/ui/assets/f5ba0fb4332ccceadc481e47134023d3-CAKMPiu5.woff2 +0 -0
  320. package/dist/ui/assets/f6326eb5031e18478aa4588598f96965-Dj3uu55n.woff2 +0 -0
  321. package/dist/ui/assets/f8678cbaab9caef95e1986731dcbd92f-CnIuR3EN.woff2 +0 -0
  322. package/dist/ui/assets/f8d9d55e2a811e9839c9af5f8f2d62ac-DIUQRBsH.woff2 +0 -0
  323. package/dist/ui/assets/f98b117e363eb51f4d7c7d1056da7688-O9MtqjIW.woff2 +0 -0
  324. package/dist/ui/assets/f9ab5d9163148ceb211e5b4f15a3d8e0-Dtqse-AT.woff2 +0 -0
  325. package/dist/ui/assets/fa69ce224ff0a6c0ff97b10a829779c2-pX45dCNY.woff2 +0 -0
  326. package/dist/ui/assets/fc38d1da3930d39dd8e286f708105765-DmbOHwTI.woff2 +0 -0
  327. package/dist/ui/assets/fe03c1dfaffc1cad3521fe55f1541d6b-BW8aEqCj.woff2 +0 -0
  328. package/dist/ui/assets/fe0b2421eb4d1f4f8949c602871a317c-BsBLV6jH.woff2 +0 -0
  329. package/dist/ui/assets/fe9c75d0cb3d808023412d26dfc9d388-eXjcgUPI.woff2 +0 -0
  330. package/dist/ui/assets/index-B61V60w_.js +19 -0
  331. package/dist/ui/assets/index-bkyxJG8J.css +1 -0
  332. package/dist/ui/assets/theme-BNq4FkXS.js +1 -0
  333. package/dist/ui/index.html +52 -0
  334. package/dist/webui.js +21 -0
  335. package/docs/backend.md +260 -0
  336. package/docs/frontend.md +125 -0
  337. package/docs/remix-icon-license.txt +186 -0
  338. package/docs/usage.md +227 -0
  339. package/package.json +82 -0
@@ -0,0 +1 @@
1
+ .connections-view[data-v-12653872]{min-height:100%}.connections-view>.page-head[data-v-12653872]{margin-bottom:0}.connection-search[data-v-12653872]{min-width:0;flex:1}.connection-totals[data-v-12653872]{color:var(--text-primary);font-size:16px;white-space:nowrap}.connections-control[data-v-12653872]{display:flex;min-height:44px;align-items:center;justify-content:space-between;gap:12px;padding:6px 20px;border-bottom:1px solid var(--border);background:var(--bg-app)}.sort-labels[data-v-12653872]{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.sort-label-btn[data-v-12653872]{display:inline-flex;align-items:center;gap:4px;height:28px;padding:0 9px;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-inset);color:var(--text-secondary);cursor:pointer;font-size:14px;font-weight:500;line-height:1;transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast) var(--ease-standard),color var(--motion-fast) var(--ease-standard)}.sort-label-btn[data-v-12653872]:hover{background:var(--bg-hover);color:var(--text-primary)}.sort-label-btn.active[data-v-12653872]{background:var(--selection);border-color:var(--selection);color:var(--text-inverse)}.sort-label-btn.active.reverse[data-v-12653872]{background:var(--accent);border-color:var(--accent);color:var(--text-inverse)}.control-actions[data-v-12653872]{display:flex;align-items:center;gap:8px}.btn-pause[data-v-12653872]{background:var(--pause-bg);color:var(--text-inverse)}.btn-pause[data-v-12653872]:hover:not(:disabled){background:var(--pause-bg-hover)}.btn-pause.btn-paused[data-v-12653872]{background:var(--selection)}.btn-pause.btn-paused[data-v-12653872]:hover:not(:disabled){background:var(--selection);filter:brightness(.92)}.connection-list[data-v-12653872]{min-height:180px}.connection-row[data-v-12653872]{position:relative;display:flex;min-height:49px;align-items:center;padding:5px 46px 5px 20px;border-bottom:1px solid var(--border)}.connection-row[data-v-12653872]:hover{background:var(--general-row-hover)}.connection-main[data-v-12653872]{min-width:0;flex:1}.connection-host[data-v-12653872]{overflow:hidden;color:var(--text-primary);font-size:16px;text-overflow:ellipsis;white-space:nowrap}.connection-tags[data-v-12653872]{display:flex;min-width:0;flex-wrap:wrap;gap:4px;margin-top:3px}.connection-tag[data-v-12653872]{display:inline-flex;max-width:320px;min-height:18px;align-items:center;padding:1px 5px;overflow:hidden;border-radius:3px;color:var(--text-inverse);font-size:12px;line-height:1.2;text-overflow:ellipsis;white-space:nowrap}.tag-network[data-v-12653872]{background:var(--tag-network)}.tag-process[data-v-12653872]{background:var(--tag-process)}.tag-chain[data-v-12653872]{background:var(--tag-chain)}.tag-rule[data-v-12653872]{background:var(--tag-rule)}.tag-time[data-v-12653872]{background:var(--tag-time)}.tag-traffic[data-v-12653872]{background:var(--tag-traffic)}.connection-close[data-v-12653872]{position:absolute;top:50%;right:20px;display:flex;width:28px;height:28px;align-items:center;justify-content:center;padding:0;border:0;border-radius:3px;background:transparent;color:var(--text-primary);cursor:pointer;transform:translateY(-50%)}.connection-close[data-v-12653872]:hover{background:var(--danger-soft);color:var(--danger)}@media(max-width:760px){.connections-control[data-v-12653872]{flex-direction:column;align-items:stretch;gap:8px;padding:8px 6px}.control-actions[data-v-12653872]{justify-content:flex-end}.connection-row[data-v-12653872]{padding-right:40px;padding-left:8px}.connection-close[data-v-12653872]{right:8px}}@media(max-width:480px){.connection-tag[data-v-12653872]{max-width:220px}}
@@ -0,0 +1 @@
1
+ import{d as Q,w as M,o as u,c as p,a as c,b as Z,e as o,I as m,f as J,u as a,t as s,v as R,g as i,h as x,s as T,P as W,n as y,F as B,r as N,i as D,j as F,k as X,l as Y,m as tt,E as et,p as h,q as _,x as at,y as A,z as H,A as st,B as ot,_ as nt}from"./index-B61V60w_.js";import{P as lt}from"./PaginationFooter-B3kHzRfB.js";const it={class:"connections-view"},ct={class:"search-box connection-search"},rt=["aria-label","placeholder"],ut={class:"connection-totals mono"},dt={class:"connections-control"},pt=["aria-label"],mt=["title"],vt=["title"],ht=["title"],_t=["title"],ft={class:"control-actions"},gt=["disabled"],bt={class:"connection-list"},yt={class:"connection-main"},wt=["title"],Ct={class:"connection-tags"},kt={class:"connection-tag tag-network"},Pt=["title"],xt=["title"],Tt={class:"connection-tag tag-time"},At={class:"connection-tag tag-traffic mono"},zt=["aria-label","title","onClick"],I=80,Bt=Q({__name:"ConnectionsView",setup(Dt){const w=h(""),v=h(1),d=h("time"),f=h(!0),r=h(!1),g=h([]);function L(){r.value||(g.value=[...T.connections]),r.value=!r.value}function C(e){d.value===e?f.value=!f.value:(d.value=e,f.value=!0)}function k(e){return{active:d.value===e,reverse:d.value===e&&!f.value}}const b=_(()=>r.value?g.value:T.connections);function O(e,n){const t=l=>!!l?.toLowerCase().includes(n);return t(e.metadata.host)||t(e.metadata.destinationIP)||t(e.metadata.sourceIP)||t(e.metadata.processPath)||t(e.metadata.network)||t(e.rule)||t(e.rulePayload)||e.chains.some(l=>t(l))}const P=_(()=>{const e=w.value.trim().toLowerCase(),n=e?b.value.filter(l=>O(l,e)):[...b.value],t=l=>d.value==="upload"?l.upload:d.value==="download"?l.download:d.value==="host"?z(l):l.start;return n.map(l=>({connection:l,key:t(l)})).sort((l,E)=>{const U=l.key<E.key?-1:l.key>E.key?1:0;return f.value?-U:U}).map(l=>l.connection)}),S=_(()=>Math.max(1,Math.ceil(P.value.length/I))),V=_(()=>(v.value-1)*I),q=_(()=>Math.min(V.value+I,P.value.length)),j=_(()=>P.value.slice(V.value,q.value));M(w,()=>{v.value=1}),M(S,e=>{v.value=Math.min(v.value,e)},{immediate:!0});function z(e){return e.metadata.host?e.metadata.host:`${e.metadata.destinationIP}:${e.metadata.destinationPort}`}function $(e){const n=e.metadata.processPath;return n?n.split(/[\\/]/).pop()??n:"-"}async function G(e){try{await at(e),r.value&&(g.value=g.value.filter(n=>n.id!==e)),A.success(s("toast.connClosed"))}catch(n){A.error(s("toast.failed",{msg:H(n)}))}}async function K(){const e=b.value.length;if(await st({title:s("connections.closeAll"),message:s("connections.closeAllConfirm",{n:e}),confirmText:s("common.confirm"),cancelText:s("common.cancel"),danger:!0}))try{await ot(),g.value=[],A.success(s("toast.connAllClosed"))}catch(t){A.error(s("toast.failed",{msg:H(t)}))}}return(e,n)=>(u(),p("div",it,[c(W,{title:a(s)("page.connections.title")},{default:Z(()=>[o("div",ct,[c(m,{name:"search",size:13}),J(o("input",{"onUpdate:modelValue":n[0]||(n[0]=t=>w.value=t),type:"search","aria-label":a(s)("connections.searchPlaceholder"),placeholder:a(s)("connections.searchPlaceholder")},null,8,rt),[[R,w.value]])]),o("div",ut,i(a(s)("connections.totalShort",{up:a(x)(a(T).connectionsUploadTotal),down:a(x)(a(T).connectionsDownloadTotal)})),1)]),_:1},8,["title"]),o("div",dt,[o("div",{class:"sort-labels",role:"toolbar","aria-label":a(s)("connections.colAction")},[o("button",{type:"button",class:y(["sort-label-btn",k("time")]),title:a(s)("connections.sortTime"),onClick:n[1]||(n[1]=t=>C("time"))},[c(m,{name:"timer",size:13}),o("span",null,i(a(s)("connections.sortTime")),1)],10,mt),o("button",{type:"button",class:y(["sort-label-btn",k("upload")]),title:a(s)("connections.sortUpload"),onClick:n[2]||(n[2]=t=>C("upload"))},[c(m,{name:"upload",size:13}),o("span",null,i(a(s)("connections.sortUpload")),1)],10,vt),o("button",{type:"button",class:y(["sort-label-btn",k("download")]),title:a(s)("connections.sortDownload"),onClick:n[3]||(n[3]=t=>C("download"))},[c(m,{name:"download",size:13}),o("span",null,i(a(s)("connections.sortDownload")),1)],10,ht),o("button",{type:"button",class:y(["sort-label-btn",k("host")]),title:a(s)("connections.sortHost"),onClick:n[4]||(n[4]=t=>C("host"))},[c(m,{name:"monitor",size:13}),o("span",null,i(a(s)("connections.sortHost")),1)],10,_t)],8,pt),o("div",ft,[o("button",{type:"button",class:y(["btn btn-sm btn-pause",{"btn-paused":r.value}]),onClick:L},[c(m,{name:r.value?"play":"pause",size:13},null,8,["name"]),o("span",null,i(r.value?a(s)("connections.resume"):a(s)("connections.pause")),1)],2),o("button",{type:"button",class:"btn btn-sm btn-danger",disabled:b.value.length===0,onClick:K},i(a(s)("connections.closeAll"))+" ("+i(b.value.length)+") ",9,gt)])]),o("div",bt,[(u(!0),p(B,null,N(j.value,t=>(u(),p("article",{key:t.id,class:"connection-row"},[o("div",yt,[o("div",{class:"connection-host mono",title:z(t)},i(z(t)),9,wt),o("div",Ct,[o("span",kt,i(t.metadata.network.toUpperCase()),1),$(t)!=="-"?(u(),p("span",{key:0,class:"connection-tag tag-process",title:t.metadata.processPath},i($(t)),9,Pt)):D("",!0),(u(!0),p(B,null,N(t.chains,l=>(u(),p("span",{key:l,class:"connection-tag tag-chain"},i(l),1))),128)),o("span",{class:"connection-tag tag-rule",title:t.rulePayload},[F(i(t.rule||"-"),1),t.rulePayload?(u(),p(B,{key:0},[F(","+i(t.rulePayload),1)],64)):D("",!0)],8,xt),o("span",Tt,i(a(X)(t.start,a(Y))),1),o("span",At," ↑"+i(a(x)(t.upload))+" ↓"+i(a(x)(t.download)),1)])]),o("button",{type:"button",class:"connection-close","aria-label":a(s)("connections.closeTitle"),title:a(s)("connections.closeTitle"),onClick:l=>G(t.id)},[c(m,{name:"x",size:18})],8,zt)]))),128)),P.value.length===0?(u(),tt(et,{key:0,icon:"swap",title:a(s)("connections.empty")},null,8,["title"])):D("",!0)]),c(lt,{page:v.value,"onUpdate:page":n[5]||(n[5]=t=>v.value=t),pages:S.value},null,8,["page","pages"])]))}}),Vt=nt(Bt,[["__scopeId","data-v-12653872"]]);export{Vt as default};
@@ -0,0 +1 @@
1
+ .logs-view[data-v-a97e5fe8]{display:flex;height:100%;min-height:0;flex-direction:column}.logs-search[data-v-a97e5fe8]{min-width:0;flex:1}.level-select[data-v-a97e5fe8]{width:100px;min-height:34px;flex-shrink:0}.log-clear[data-v-a97e5fe8]{min-width:70px;background:var(--success);color:var(--text-inverse)}.log-clear[data-v-a97e5fe8]:hover:not(:disabled){background:var(--success-strong)}.log-pause[data-v-a97e5fe8]{min-width:70px;background:var(--danger);color:var(--text-inverse)}.log-pause[data-v-a97e5fe8]:hover:not(:disabled){background:var(--danger-hover)}.log-pane[data-v-a97e5fe8]{min-width:0;min-height:0;flex:1;overflow-y:auto;contain:layout paint;background:var(--bg-app);font-size:16px}.log-pane[data-v-a97e5fe8]:focus-visible{outline:none;box-shadow:inset 0 0 0 2px var(--accent)}.log-empty[data-v-a97e5fe8]{padding:14px 20px;font-size:16px}.log-line[data-v-a97e5fe8]{display:grid;min-height:27px;grid-template-columns:14px minmax(0,1fr) max-content;align-items:center;gap:5px;padding:3px 10px 3px 20px;border-bottom:1px solid var(--border);contain:layout paint style;content-visibility:auto;contain-intrinsic-size:auto 27px;line-height:1.35}.log-line[data-v-a97e5fe8]:hover{background:var(--general-row-hover)}.log-icon[data-v-a97e5fe8]{flex-shrink:0}.log-time[data-v-a97e5fe8]{color:var(--text-muted);font-size:14px}.log-payload[data-v-a97e5fe8]{min-width:0;overflow-wrap:anywhere;font-family:var(--font-sans);font-size:14px}.lv-info[data-v-a97e5fe8]{color:var(--success)}.lv-warning[data-v-a97e5fe8],.lv-error[data-v-a97e5fe8]{color:var(--danger)}.lv-debug[data-v-a97e5fe8]{color:var(--log-debug)}@media(max-width:899px){.logs-view[data-v-a97e5fe8]{height:calc(100dvh - 110px - env(safe-area-inset-bottom,0px))}}@media(max-width:760px){.log-line[data-v-a97e5fe8]{padding-left:8px}}@media(max-width:480px){.log-line[data-v-a97e5fe8]{grid-template-columns:14px minmax(0,1fr)}.log-time[data-v-a97e5fe8]{grid-column:2}}
@@ -0,0 +1 @@
1
+ import{d as A,w as D,s as i,C as I,D as N,o as c,c as u,a as b,b as U,e as n,I as w,f as L,u as a,t as s,v as q,F as C,r as k,g as d,G as z,H as x,P as R,i as V,n as S,q as B,p as v,J as G,_ as E}from"./index-B61V60w_.js";const J={class:"logs-view"},Q={class:"search-box logs-search"},$=["aria-label","placeholder"],j=["aria-label"],K=["value"],O=["disabled"],W=["aria-pressed"],X=["aria-label"],Y={key:0,class:"log-empty text-muted"},Z={class:"log-payload"},ee={key:0,class:"log-time mono"},le=A({__name:"LogsView",setup(ae){const F=["all","info","warning","error","debug"],T=B(()=>{const l={rule:s("overview.modeRule"),global:s("overview.modeGlobal"),direct:s("overview.modeDirect")};return s("logs.modeLabel",{mode:l[i.mode]??i.mode})}),m=v("all"),g=v(""),t=v(!1),f=v(null),p=v(!0);let r=null,_=!1;const y=B(()=>{const l=g.value.trim().toLowerCase();return i.logs.filter(o=>(m.value==="all"||o.type.toLowerCase()===m.value)&&(!l||o.payload.toLowerCase().includes(l)))});function H(l){const o=l.toLowerCase();return o==="error"?"alert":o==="warning"?"info":o==="debug"?"terminal":"check-circle"}function M(){const l=f.value;l&&(p.value=l.scrollHeight-l.scrollTop-l.clientHeight<40)}async function h(){await G(),!(_||t.value||!p.value)&&(r!==null&&cancelAnimationFrame(r),r=requestAnimationFrame(()=>{r=null;const l=f.value;l&&!_&&!t.value&&p.value&&(l.scrollTop=l.scrollHeight)}))}function P(){t.value=!t.value,t.value||h()}return D(()=>i.logs.at(-1)?.id,()=>{!t.value&&p.value&&h()}),I(()=>{h()}),N(()=>{_=!0,r!==null&&cancelAnimationFrame(r)}),(l,o)=>(c(),u("div",J,[b(R,{title:a(s)("page.logs.title"),desc:T.value},{default:U(()=>[n("div",Q,[b(w,{name:"search",size:13}),L(n("input",{"onUpdate:modelValue":o[0]||(o[0]=e=>g.value=e),type:"search","aria-label":a(s)("logs.searchPlaceholder"),placeholder:a(s)("logs.searchPlaceholder")},null,8,$),[[q,g.value]])]),L(n("select",{"onUpdate:modelValue":o[1]||(o[1]=e=>m.value=e),class:"input input-sm level-select","aria-label":a(s)("logs.levelLabel")},[(c(),u(C,null,k(F,e=>n("option",{key:e,value:e},d(e==="all"?a(s)("logs.levelAll"):e.toUpperCase()),9,K)),64))],8,j),[[z,m.value]]),n("button",{type:"button",class:"btn btn-sm log-clear",disabled:a(i).logs.length===0,onClick:o[2]||(o[2]=(...e)=>a(x)&&a(x)(...e))},d(a(s)("common.clear")),9,O),n("button",{type:"button",class:"btn btn-sm log-pause","aria-pressed":t.value,onClick:P},d(t.value?a(s)("logs.resume"):a(s)("logs.pause")),9,W)]),_:1},8,["title","desc"]),n("div",{ref_key:"paneRef",ref:f,class:"log-pane",role:"log",tabindex:"0","aria-live":"off","aria-atomic":"false","aria-label":a(s)("page.logs.title"),onScroll:M},[y.value.length===0?(c(),u("div",Y,d(a(i).logs.length===0?a(s)("logs.listening"):a(s)("logs.empty")),1)):V("",!0),(c(!0),u(C,null,k(y.value,e=>(c(),u("div",{key:e.id,class:S(["log-line",`lv-${e.type.toLowerCase()}`])},[b(w,{name:H(e.type),size:13,class:"log-icon"},null,8,["name"]),n("span",Z,d(e.payload),1),e.time?(c(),u("span",ee,d(e.time),1)):V("",!0)],2))),128))],40,X)]))}}),oe=E(le,[["__scopeId","data-v-a97e5fe8"]]);export{oe as default};
@@ -0,0 +1 @@
1
+ import{d as c,a5 as r,o as l,c as p,e as o,g as s,u as n,t as i,i as m,a6 as u,_ as g}from"./index-B61V60w_.js";const b={key:0,class:"pagination-footer"},_={class:"pagination-summary"},v={class:"pagination-actions"},f=["disabled"],y=["disabled"],k=c({__name:"PaginationFooter",props:u({pages:{}},{page:{required:!0},pageModifiers:{}}),emits:["update:page"],setup(t){const e=r(t,"page");return(x,a)=>t.pages>1?(l(),p("footer",b,[o("span",_,s(n(i)("common.pageSummary",{page:e.value,total:t.pages})),1),o("div",v,[o("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:e.value===1,onClick:a[0]||(a[0]=d=>e.value-=1)},s(n(i)("common.previous")),9,f),o("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:e.value===t.pages,onClick:a[1]||(a[1]=d=>e.value+=1)},s(n(i)("common.next")),9,y)])])):m("",!0)}}),B=g(k,[["__scopeId","data-v-c2140dca"]]);export{B as P};
@@ -0,0 +1 @@
1
+ .pagination-footer[data-v-c2140dca]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 20px;border-top:1px solid var(--border)}.pagination-summary[data-v-c2140dca]{color:var(--text-muted);font-size:14px}.pagination-actions[data-v-c2140dca]{display:flex;gap:8px}@media(max-width:480px){.pagination-footer[data-v-c2140dca]{align-items:stretch;flex-direction:column}.pagination-actions .btn[data-v-c2140dca]{flex:1}}
@@ -0,0 +1 @@
1
+ import{d as g,C as y,af as C,z as u,o as h,m as w,u as d,t,p as r,ai as x,y as m}from"./index-B61V60w_.js";import{C as B}from"./CodeEditorModal-CFEnWsyh.js";import"./theme-BNq4FkXS.js";const b=g({__name:"ProfileEditorDialog",props:{profileId:{},profileName:{},isRemote:{type:Boolean}},emits:["close"],setup(l,{emit:v}){const n=l,i=v,s=r(""),c=r(!0),a=r(!1),f=r(null);y(async()=>{try{const e=await C.getProfileContent(n.profileId);s.value=e.content}catch(e){f.value=u(e)}finally{c.value=!1}});async function p(e){if(!a.value){a.value=!0;try{await x(n.profileId,e),m.success(t("toast.profileSaved",{name:n.profileName})),i("close")}catch(o){m.error(t("toast.failed",{msg:u(o)}))}finally{a.value=!1}}}return(e,o)=>(h(),w(B,{title:l.profileName,"aria-label":d(t)("editor.title"),hint:l.isRemote?d(t)("editor.remoteWarning"):void 0,content:s.value,language:"yaml",loading:c.value,"load-error":f.value,saving:a.value,onSave:p,onClose:o[0]||(o[0]=E=>i("close"))},null,8,["title","aria-label","hint","content","loading","load-error","saving"]))}});export{b as default};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ProfileEditorDialog-BydoZthX.js","./index-B61V60w_.js","./index-bkyxJG8J.css","./CodeEditorModal-CFEnWsyh.js","./theme-BNq4FkXS.js","./CodeEditorModal-6m0TJWyF.css"])))=>i.map(i=>d[i]);
2
+ import{d as R,K as ae,L as te,C as O,M as le,N as se,O as oe,o as u,m as K,T as ie,a as m,b as ne,e as s,Q as P,g as r,u as l,t as e,f as q,R as F,v as H,S as re,p as f,U as de,y as n,z as A,_ as Q,V as ce,c as _,I as h,n as L,E as ue,F as fe,r as me,s as C,h as N,W as pe,i as T,X as ve,Y as be,Z as ye,q as B,k as _e,l as he,$ as ge,a0 as ke,a1 as we,a2 as $e,A as Ce,a3 as Pe,a4 as Ie}from"./index-B61V60w_.js";const xe=["disabled","onKeydown"],Ae={class:"rename-actions"},Ee=["disabled"],Te=["disabled"],ze=R({__name:"ProfileRenameDialog",props:{profile:{}},emits:["close"],setup(S,{emit:V}){const b=S,d=V,y=ae(),g=`${y}-title`,I=`${y}-input`,z=f(null),p=f(null),k=b.profile.name,w=f(k),$=f(!1),{open:i,close:U}=te({container:z,initialFocus:()=>(p.value?.select(),p.value),onEscape:()=>d("close")});O(()=>{le(),i()}),se(()=>{U(),oe()});async function D(){const x=w.value.trim();if(!(!x||x===k||$.value)){$.value=!0;try{await de(b.profile.id,x),n.success(e("toast.settingSaved")),d("close")}catch(c){n.error(e("toast.failed",{msg:A(c)}))}finally{$.value=!1}}}return(x,c)=>(u(),K(ie,{to:"body"},[m(re,{name:"fade",appear:""},{default:ne(()=>[s("div",{class:"rename-overlay",onClick:c[2]||(c[2]=P(E=>d("close"),["self"]))},[s("div",{ref_key:"dialogElement",ref:z,class:"rename-dialog card",role:"dialog","aria-modal":"true","aria-labelledby":g},[s("h3",{id:g,class:"rename-title"},r(l(e)("profiles.renameTitle")),1),s("label",{class:"rename-label",for:I},r(l(e)("profiles.nameLabel")),1),q(s("input",{id:I,ref_key:"inputElement",ref:p,"onUpdate:modelValue":c[0]||(c[0]=E=>w.value=E),class:"input rename-input",type:"text",maxlength:"120",disabled:$.value,onKeydown:F(P(D,["prevent"]),["enter"])},null,40,xe),[[H,w.value]]),s("div",Ae,[s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:$.value,onClick:c[1]||(c[1]=E=>d("close"))},r(l(e)("common.cancel")),9,Ee),s("button",{type:"button",class:"btn btn-primary btn-sm",disabled:$.value||!w.value.trim()||w.value.trim()===l(k),onClick:D},r(l(e)("common.save")),9,Te)])],512)])]),_:1})]))}}),De=Q(ze,[["__scopeId","data-v-67fe66f9"]]),Ue={class:"profiles-view"},Le=["aria-busy"],Fe={class:"dl-input-wrap"},Ve=["placeholder","aria-label","disabled"],Me=["title","aria-label","disabled"],Be={class:"dl-actions"},Ke=["disabled"],Se=["disabled"],Ne=["disabled"],Re=["aria-label"],Oe={key:0,class:"empty-panel"},qe=["aria-busy"],He=["aria-current","aria-disabled","title","onClick","onKeydown"],Qe={class:"profile-name-row"},We=["title"],Xe=["title"],Ye={key:0,class:"profile-usage"},Ze={class:"usage-nums"},je={class:"mono"},Ge={key:0,class:"mono usage-expire"},Je=["aria-label","aria-valuenow"],ea=["title"],aa={class:"profile-error-text"},ta={class:"profile-actions"},la=["title","aria-label","disabled","onClick"],sa=["title","aria-label","disabled","onClick"],oa=["title","aria-label","disabled","onClick"],ia=["title","aria-label","disabled","onClick"],na=R({__name:"ProfilesView",setup(S){const V=be(()=>ye(()=>import("./ProfileEditorDialog-BydoZthX.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),b=f(""),d=f(!1),y=f(!1),g=f(!1),I=f(""),z=f(null),p=f(null),k=f(null),w=B(()=>C.profiles),$=B(()=>C.profiles.some(t=>t.url!=="")),i=B(()=>C.operations.profileMutation);function U(t){if(!t.url)return e("profiles.localFile");try{return new URL(t.url).hostname||t.url}catch{return t.url}}function D(t){const o=new Date(t.updatedAt).getTime();return!Number.isFinite(o)||o<=0?e("profiles.neverUpdated"):_e(t.updatedAt,he.value)}function x(t){return(t.subInfo?.upload??0)+(t.subInfo?.download??0)}function c(t){const o=t.subInfo?.total??0;return o<=0?0:Math.min(100,Math.round(x(t)/o*100))}O(()=>{ce().catch(()=>{})});async function E(){const t=b.value.trim();if(!(!t||d.value)){d.value=!0;try{const o=await ge(t);b.value="",o.activated?n.success(e("toast.profileActivated",{name:o.profile.name,n:o.proxyCount??0})):n.success(e("toast.profileAdded",{name:o.profile.name}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}finally{d.value=!1}}}async function W(t){if(!I.value){I.value=t.id;try{await ke(t.id),n.success(e("toast.profileUpdated",{name:t.name}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}finally{I.value=""}}}async function X(){if(!y.value){y.value=!0;try{const t=await we();t.failed.length===0?n.success(e("toast.profilesUpdateAllOk",{n:t.updated})):n.error(e("toast.profilesUpdateAllPartial",{n:t.updated,f:t.failed.length}))}catch(t){n.error(e("toast.failed",{msg:A(t)}))}finally{y.value=!1}}}async function M(t){if(!(i.value||t.id===C.activeProfileId))try{const o=await $e(t.id);n.success(e("toast.profileActivated",{name:t.name,n:o.proxyCount}))}catch(o){n.error(e("toast.failed",{msg:A(o)}))}}function Y(t){i.value||(p.value=t)}async function Z(t){if(!(i.value||!await Ce({title:e("profiles.deleteConfirmTitle"),message:e("profiles.deleteConfirmMsg",{name:t.name}),confirmText:e("common.confirm"),cancelText:e("common.cancel"),danger:!0})))try{await Pe(t.id),n.success(e("toast.profileDeleted",{name:t.name}))}catch(a){n.error(e("toast.failed",{msg:A(a)}))}}function j(t){const o=t.target,a=o.files?.[0];o.value="",!(!a||g.value)&&(g.value=!0,(async()=>{try{const v=await a.text(),J=a.name.replace(/\.(ya?ml)$/i,"")||"imported",ee=await Ie(J,v);n.success(e("toast.profileImported",{name:ee.profile.name}))}catch(v){n.error(e("toast.failed",{msg:A(v)}))}finally{g.value=!1}})())}async function G(){try{const t=await navigator.clipboard.readText();t.trim()&&(b.value=t.trim())}catch{n.error(e("toast.pasteFailed"))}}return(t,o)=>(u(),_("div",Ue,[s("div",{class:"dl-panel","aria-busy":d.value||y.value||g.value||i.value},[s("div",Fe,[q(s("input",{"onUpdate:modelValue":o[0]||(o[0]=a=>b.value=a),type:"url",class:"input dl-input",placeholder:l(e)("profiles.downloadPlaceholder"),"aria-label":l(e)("profiles.downloadPlaceholder"),disabled:d.value||i.value,spellcheck:"false",onKeyup:F(E,["enter"])},null,40,Ve),[[H,b.value]]),s("button",{type:"button",class:"icon-btn dl-paste",title:l(e)("profiles.paste"),"aria-label":l(e)("profiles.paste"),disabled:d.value||i.value,onClick:G},[m(h,{name:"clipboard",size:15})],8,Me)]),s("div",Be,[s("button",{type:"button",class:"btn btn-secondary dl-action-primary",disabled:d.value||i.value||!b.value.trim(),onClick:E},[m(h,{name:"download",size:14}),s("span",null,r(d.value?l(e)("profiles.downloading"):l(e)("profiles.download")),1)],8,Ke),s("button",{type:"button",class:"btn btn-secondary",disabled:y.value||i.value||!$.value,onClick:X},[m(h,{name:"refresh",size:14,class:L({spin:y.value})},null,8,["class"]),s("span",null,r(l(e)("profiles.updateAll")),1)],8,Se),s("button",{type:"button",class:"btn btn-secondary",disabled:g.value||i.value,onClick:o[1]||(o[1]=a=>z.value?.click())},[m(h,{name:"upload",size:14}),s("span",null,r(l(e)("profiles.import")),1)],8,Ne)]),s("input",{ref_key:"fileInput",ref:z,type:"file",accept:".yaml,.yml",class:"hidden-file","aria-label":l(e)("profiles.import"),onChange:j},null,40,Re)],8,Le),w.value.length===0?(u(),_("div",Oe,[m(ue,{icon:"layers",title:l(e)("profiles.emptyTitle"),hint:l(e)("profiles.emptyHint")},null,8,["title","hint"])])):(u(),_("div",{key:1,class:"profiles-grid","aria-busy":i.value},[(u(!0),_(fe,null,me(w.value,a=>(u(),_("article",{key:a.id,class:L(["profile-card",{active:a.id===l(C).activeProfileId,busy:i.value}])},[s("div",{class:"profile-card-main",role:"button",tabindex:"0","aria-current":a.id===l(C).activeProfileId?"true":void 0,"aria-disabled":i.value||a.id===l(C).activeProfileId,title:a.id===l(C).activeProfileId?void 0:l(e)("profiles.clickToUse"),onClick:v=>M(a),onKeydown:[F(P(v=>M(a),["prevent"]),["enter"]),F(P(v=>M(a),["prevent"]),["space"])]},[s("div",Qe,[s("span",{class:"profile-name",title:a.name},r(a.name),9,We)]),s("div",{class:"profile-source",title:`${U(a)} · ${D(a)}`},r(U(a))+" · "+r(D(a)),9,Xe),a.subInfo?(u(),_("div",Ye,[s("div",Ze,[s("span",je,r(l(N)(x(a)))+" / "+r(l(N)(a.subInfo.total)),1),a.subInfo.expire?(u(),_("span",Ge,r(l(pe)(a.subInfo.expire)),1)):T("",!0)]),s("div",{class:"usage-bar",role:"progressbar","aria-label":l(e)("profiles.usageLabel"),"aria-valuemin":"0","aria-valuemax":"100","aria-valuenow":c(a)},[s("div",{class:L(["usage-fill",{"usage-fill-hot":c(a)>=90}]),style:ve({width:`${c(a)}%`})},null,6)],8,Je)])):T("",!0),a.lastError?(u(),_("div",{key:1,class:"profile-error",title:a.lastError,role:"status"},[m(h,{name:"alert",size:13}),s("span",aa,r(a.lastError),1)],8,ea)):T("",!0)],40,He),s("div",ta,[s("button",{type:"button",class:"icon-btn",title:l(e)("profiles.rename"),"aria-label":`${l(e)("profiles.rename")}: ${a.name}`,disabled:i.value,onClick:P(v=>k.value=a,["stop"])},[m(h,{name:"pencil",size:14})],8,la),s("button",{type:"button",class:"icon-btn",title:l(e)("profiles.edit"),"aria-label":`${l(e)("profiles.edit")}: ${a.name}`,disabled:i.value,onClick:P(v=>Y(a),["stop"])},[m(h,{name:"code",size:14})],8,sa),a.url?(u(),_("button",{key:0,type:"button",class:"icon-btn",title:l(e)("profiles.update"),"aria-label":`${l(e)("profiles.update")}: ${a.name}`,disabled:i.value,onClick:P(v=>W(a),["stop"])},[m(h,{name:"refresh",size:14,class:L({spin:I.value===a.id})},null,8,["class"])],8,oa)):T("",!0),s("button",{type:"button",class:"icon-btn danger-hover",title:l(e)("profiles.delete"),"aria-label":`${l(e)("profiles.delete")}: ${a.name}`,disabled:i.value,onClick:P(v=>Z(a),["stop"])},[m(h,{name:"trash",size:14})],8,ia)])],2))),128))],8,qe)),k.value?(u(),K(De,{key:2,profile:k.value,onClose:o[2]||(o[2]=a=>k.value=null)},null,8,["profile"])):T("",!0),p.value?(u(),K(l(V),{key:3,"profile-id":p.value.id,"profile-name":p.value.name,"is-remote":p.value.url!=="",onClose:o[3]||(o[3]=a=>p.value=null)},null,8,["profile-id","profile-name","is-remote"])):T("",!0)]))}}),da=Q(na,[["__scopeId","data-v-77f96f8d"]]);export{da as default};
@@ -0,0 +1 @@
1
+ .rename-overlay[data-v-67fe66f9]{position:fixed;z-index:var(--z-rename);display:flex;align-items:center;justify-content:center;background:var(--bg-scrim);inset:0}.rename-dialog[data-v-67fe66f9]{width:min(360px,calc(100vw - 32px));padding:18px}.rename-title[data-v-67fe66f9]{margin:0 0 12px;font-size:16px}.rename-label[data-v-67fe66f9]{display:block;margin-bottom:6px;color:var(--text-secondary);font-size:14px}.rename-input[data-v-67fe66f9]{width:100%;margin-bottom:14px}.rename-actions[data-v-67fe66f9]{display:flex;gap:10px;justify-content:flex-end}.profiles-view[data-v-77f96f8d]{min-height:100%}.dl-panel[data-v-77f96f8d]{display:grid;min-height:80px;grid-template-columns:minmax(260px,1fr) auto;align-items:center;gap:8px;margin-bottom:15px;padding:12px 34px;background:var(--bg-app);border-bottom:1px solid var(--border)}.dl-input-wrap[data-v-77f96f8d]{position:relative;min-width:0}.dl-input[data-v-77f96f8d]{width:100%;min-height:46px;padding-right:42px;font-family:var(--font-mono);font-size:16px}.dl-paste[data-v-77f96f8d]{position:absolute;top:50%;right:4px;width:31px;height:30px;transform:translateY(-50%)}.dl-actions[data-v-77f96f8d]{display:flex;align-items:center;gap:7px}.dl-actions .btn[data-v-77f96f8d]{min-height:46px;padding-inline:12px}.hidden-file[data-v-77f96f8d]{display:none}.empty-panel[data-v-77f96f8d]{margin:0 34px;overflow:hidden;border:1px solid var(--border);border-radius:var(--radius-md)}.profiles-grid[data-v-77f96f8d]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:10px 12px;padding:0 34px 44px}.profile-card[data-v-77f96f8d]{position:relative;display:block;min-width:0;min-height:72px;padding:10px 8px 10px 15px;overflow:hidden;cursor:pointer;background:var(--bg-panel);border:1px solid transparent;border-radius:var(--radius-sm);transition:background var(--motion-fast) var(--ease-standard),border-color var(--motion-fast) var(--ease-standard)}.profile-card[data-v-77f96f8d]:before{position:absolute;inset:2px auto 2px 0;width:4px;border-radius:0 var(--radius-full) var(--radius-full) 0;content:"";background:var(--border-strong)}.profile-card[data-v-77f96f8d]:hover{background:var(--bg-hover);border-color:var(--border)}.profile-card.active[data-v-77f96f8d]{cursor:default;background:var(--bg-panel);border-color:transparent}.profile-card.active[data-v-77f96f8d]:before{background:var(--selection)}.profile-card.busy[data-v-77f96f8d]{cursor:wait}.profile-card-main[data-v-77f96f8d]{min-width:0;border-radius:var(--radius-sm);outline:none}.profile-card-main[data-v-77f96f8d]:focus-visible{box-shadow:0 0 0 3px var(--accent-ring)}.profile-name-row[data-v-77f96f8d]{display:flex;align-items:center;gap:8px;min-width:0;margin-right:140px}.profile-name[data-v-77f96f8d]{overflow:hidden;color:var(--text-primary);font-size:16px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}.profile-source[data-v-77f96f8d]{margin-top:4px;overflow:hidden;color:var(--text-muted);font-size:14px;text-overflow:ellipsis;white-space:nowrap}.profile-usage[data-v-77f96f8d]{margin-top:7px}.usage-nums[data-v-77f96f8d]{display:flex;justify-content:space-between;gap:10px;color:var(--text-secondary);font-size:14px}.usage-expire[data-v-77f96f8d]{color:var(--text-muted)}.usage-bar[data-v-77f96f8d]{height:4px;margin-top:6px;overflow:hidden;background:var(--border);border-radius:var(--radius-full)}.usage-fill[data-v-77f96f8d]{height:100%;background:var(--selection);border-radius:var(--radius-full);transition:width var(--motion-normal) var(--ease-standard)}.usage-fill-hot[data-v-77f96f8d]{background:var(--danger)}.profile-error[data-v-77f96f8d]{display:flex;align-items:center;gap:6px;min-width:0;margin-top:10px;color:var(--danger);font-size:14px}.profile-error-text[data-v-77f96f8d]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-actions[data-v-77f96f8d]{position:absolute;top:8px;right:8px;display:flex;flex-shrink:0;gap:3px}.profile-actions .icon-btn[data-v-77f96f8d]{width:31px;height:31px}.danger-hover[data-v-77f96f8d]:hover:not(:disabled){color:var(--danger);background:var(--danger-soft)}.spin[data-v-77f96f8d]{animation:rotate .9s linear infinite}@media(max-width:820px){.dl-panel[data-v-77f96f8d]{grid-template-columns:1fr;padding-right:16px;padding-left:16px}.profiles-grid[data-v-77f96f8d]{padding-right:16px;padding-left:16px}.empty-panel[data-v-77f96f8d]{margin-right:16px;margin-left:16px}.dl-actions[data-v-77f96f8d]{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}.dl-actions .btn[data-v-77f96f8d]{min-width:0}}@media(max-width:760px){.profiles-grid[data-v-77f96f8d]{grid-template-columns:1fr}.profile-name-row[data-v-77f96f8d]{margin-right:172px}.profile-actions .icon-btn[data-v-77f96f8d]{width:40px;height:40px}}@media(max-width:480px){.dl-panel[data-v-77f96f8d]{gap:8px;padding:10px}.dl-actions[data-v-77f96f8d]{grid-template-columns:repeat(2,minmax(0,1fr))}.dl-action-primary[data-v-77f96f8d]{grid-column:1 / -1}.dl-actions .btn[data-v-77f96f8d],.dl-input[data-v-77f96f8d]{min-height:44px}.dl-paste[data-v-77f96f8d]{width:38px;height:38px}.profile-card[data-v-77f96f8d]{padding:14px 8px 14px 15px}.profile-name-row[data-v-77f96f8d]{margin-right:164px}.usage-nums[data-v-77f96f8d]{flex-direction:column;gap:2px}.profile-actions .icon-btn[data-v-77f96f8d]{width:38px;height:38px}}
@@ -0,0 +1 @@
1
+ .rule-search[data-v-6cf63293]{width:260px}.rule-list[data-v-6cf63293]{border-right:0;border-left:0;border-radius:0}.data-table th[data-v-6cf63293],.data-table td[data-v-6cf63293]{padding-top:7px;padding-bottom:7px;text-align:center}.data-table th[data-v-6cf63293]:not(:last-child),.data-table td[data-v-6cf63293]:not(:last-child){border-right:1px solid var(--border)}.data-table .cell-truncate[data-v-6cf63293]{text-align:center}.idx[data-v-6cf63293]{width:56px}@media(max-width:760px){[data-v-6cf63293] .page-head-actions{flex-wrap:wrap;justify-content:flex-end}.rule-search[data-v-6cf63293]{width:min(260px,100%)}.rule-list[data-v-6cf63293]{overflow:visible;border:0;background:transparent;box-shadow:none}.data-table[data-v-6cf63293],.data-table tbody[data-v-6cf63293],.data-table tr[data-v-6cf63293],.data-table td[data-v-6cf63293]{display:block;width:100%}.data-table thead[data-v-6cf63293]{display:none}.data-table tbody[data-v-6cf63293]{display:grid;gap:10px}.data-table tbody tr[data-v-6cf63293]{padding:10px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);box-shadow:none}.data-table td[data-v-6cf63293]{display:grid;grid-template-columns:minmax(70px,.3fr) minmax(0,1fr);align-items:baseline;gap:10px;max-width:none;padding:4px 0;border:0;text-align:left;white-space:normal;overflow-wrap:anywhere}.data-table td[data-v-6cf63293]:before{content:attr(data-label);color:var(--text-muted);font-family:var(--font-sans);font-size:12px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.data-table .idx[data-v-6cf63293]{width:100%}}@media(max-width:480px){[data-v-6cf63293] .page-head{flex-direction:column}[data-v-6cf63293] .page-head-actions{width:100%;justify-content:flex-start}.rule-search[data-v-6cf63293]{width:100%;flex-basis:100%}}
@@ -0,0 +1 @@
1
+ import{d as f,w as p,s as b,o as u,c as h,a as _,b as P,e,I as w,f as k,u as l,t,v as $,g as r,P as C,F as I,r as V,m as E,E as R,i as T,p as y,q as i,_ as B}from"./index-B61V60w_.js";import{P as M}from"./PaginationFooter-B3kHzRfB.js";const F={class:"search-box rule-search"},L=["aria-label","placeholder"],N={class:"badge badge-neutral"},S={class:"table-wrap rule-list"},q={class:"data-table"},D={class:"idx"},U=["data-label"],z=["data-label"],A={class:"badge badge-neutral"},G=["data-label","title"],H=["data-label"],K={class:"badge badge-accent"},m=80,Q=f({__name:"RulesView",setup(Z){const d=y(""),c=y(1),g=i(()=>b.rules.map((a,o)=>({rule:a,originalIndex:o,key:`${a.type}\0${a.payload}\0${a.proxy}\0${o}`,searchKey:`${a.type??""}\0${a.payload??""}\0${a.proxy??""}`.toLowerCase()}))),n=i(()=>{const a=d.value.trim().toLowerCase();return a?g.value.filter(({searchKey:o})=>o.includes(a)):g.value}),v=i(()=>Math.max(1,Math.ceil(n.value.length/m))),x=i(()=>{const a=(c.value-1)*m;return n.value.slice(a,a+m)});return p(d,()=>{c.value=1}),p(()=>b.rules,()=>{c.value=1}),p(v,a=>{c.value=Math.min(c.value,a)},{immediate:!0}),(a,o)=>(u(),h("div",null,[_(C,{title:l(t)("page.rules.title"),desc:l(t)("page.rules.desc")},{default:P(()=>[e("div",F,[_(w,{name:"search",size:13}),k(e("input",{"onUpdate:modelValue":o[0]||(o[0]=s=>d.value=s),type:"search","aria-label":l(t)("rules.searchPlaceholder"),placeholder:l(t)("rules.searchPlaceholder")},null,8,L),[[$,d.value]])]),e("span",N,r(l(t)("common.rulesCount",{n:n.value.length})),1)]),_:1},8,["title","desc"]),e("div",S,[e("table",q,[e("thead",null,[e("tr",null,[e("th",D,r(l(t)("rules.colIndex")),1),e("th",null,r(l(t)("rules.colType")),1),e("th",null,r(l(t)("rules.colPayload")),1),e("th",null,r(l(t)("rules.colTarget")),1)])]),e("tbody",null,[(u(!0),h(I,null,V(x.value,s=>(u(),h("tr",{key:s.key},[e("td",{class:"cell-mono text-muted idx","data-label":l(t)("rules.colIndex")},r(s.originalIndex+1),9,U),e("td",{"data-label":l(t)("rules.colType")},[e("span",A,r(s.rule.type),1)],8,z),e("td",{class:"cell-mono cell-truncate","data-label":l(t)("rules.colPayload"),title:s.rule.payload||"-"},r(s.rule.payload||"-"),9,G),e("td",{"data-label":l(t)("rules.colTarget")},[e("span",K,r(s.rule.proxy),1)],8,H)]))),128))])]),n.value.length===0?(u(),E(R,{key:0,icon:"list-filter",title:l(t)("rules.empty")},null,8,["title"])):T("",!0)]),_(M,{page:c.value,"onUpdate:page":o[1]||(o[1]=s=>c.value=s),pages:v.value},null,8,["page","pages"])]))}}),O=B(Q,[["__scopeId","data-v-6cf63293"]]);export{O as default};
@@ -0,0 +1 @@
1
+ import{d as m,C as p,af as c,z as f,o as y,m as S,u as v,t as a,p as n,aj as _,y as o}from"./index-B61V60w_.js";import{C}from"./CodeEditorModal-CFEnWsyh.js";import"./theme-BNq4FkXS.js";const k=m({__name:"SettingsFileDialog",emits:["close"],setup(h,{emit:d}){const r=d,l=n(""),i=n(!0),s=n(!1),u=n(null);p(async()=>{try{const e=await c.getSettingsFile();l.value=e.content}catch(e){u.value=f(e)}finally{i.value=!1}});async function g(e){if(!s.value){s.value=!0;try{const t=await c.saveSettingsFile(e);await _(),t.restartRequired?o.success(a("toast.settingsSavedRestart")):o.success(a("toast.settingSaved")),r("close")}catch(t){o.error(a("toast.failed",{msg:f(t)}))}finally{s.value=!1}}}return(e,t)=>(y(),S(C,{title:v(a)("settings.fileTitle"),hint:v(a)("settings.fileHint"),content:l.value,language:"json",layout:"constrained",loading:i.value,"load-error":u.value,saving:s.value,onSave:g,onClose:t[0]||(t[0]=w=>r("close"))},null,8,["title","hint","content","loading","load-error","saving"]))}});export{k as default};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./SettingsFileDialog-CNFEAVs4.js","./index-B61V60w_.js","./index-bkyxJG8J.css","./CodeEditorModal-CFEnWsyh.js","./theme-BNq4FkXS.js","./CodeEditorModal-6m0TJWyF.css"])))=>i.map(i=>d[i]);
2
+ import{d as B,o as u,c as m,e as s,g as a,i as f,a7 as M,_ as U,n as _,u as t,t as e,p as k,s as o,w as J,a8 as K,a as r,b as C,I as x,j as Q,P as W,m as X,l as T,f as tt,v as st,a9 as $,aa as et,Y as at,Z as nt,ab as it,q as P,ac as ot,ad as lt,ae as dt,y as h,af as A,ag as F,z as S,ah as ct}from"./index-B61V60w_.js";import{t as b,s as rt}from"./theme-BNq4FkXS.js";const ut={class:"ui-card"},gt={key:0,class:"ui-card-head"},_t={class:"ui-card-heading"},mt={key:0,class:"ui-card-title"},vt={key:1,class:"ui-card-desc"},pt={key:0,class:"ui-card-actions"},ht={class:"ui-card-body"},bt=B({__name:"UiCard",props:{title:{},desc:{}},setup(l){return(v,g)=>(u(),m("section",ut,[l.title||l.desc||v.$slots.actions?(u(),m("header",gt,[s("div",_t,[l.title?(u(),m("h2",mt,a(l.title),1)):f("",!0),l.desc?(u(),m("p",vt,a(l.desc),1)):f("",!0)]),v.$slots.actions?(u(),m("div",pt,[M(v.$slots,"actions",{},void 0)])):f("",!0)])):f("",!0),s("div",ht,[M(v.$slots,"default",{},void 0)])]))}}),D=U(bt,[["__scopeId","data-v-042826e5"]]),ft=["aria-checked","aria-label","disabled"],yt=B({__name:"UiSwitch",props:{modelValue:{type:Boolean},disabled:{type:Boolean},label:{}},emits:["update:modelValue"],setup(l){return(v,g)=>(u(),m("button",{type:"button",role:"switch","aria-checked":l.modelValue,"aria-label":l.label??t(e)("common.toggle"),class:_(["switch",{on:l.modelValue}]),disabled:l.disabled,onClick:g[0]||(g[0]=y=>v.$emit("update:modelValue",!l.modelValue))},[...g[1]||(g[1]=[s("span",{class:"knob","aria-hidden":"true"},null,-1)])],10,ft))}}),O=U(yt,[["__scopeId","data-v-306af9c5"]]),wt={class:"settings-grid"},kt={class:"setting-row"},Ct={class:"setting-info"},Tt={class:"setting-name"},$t={class:"setting-desc"},Dt=["aria-label"],Vt=["aria-pressed"],xt=["aria-pressed"],Pt=["aria-pressed"],St={class:"setting-row"},Bt={class:"setting-info"},Ut={class:"setting-name"},zt={class:"setting-desc"},It=["aria-label"],Lt=["aria-pressed"],Nt=["aria-pressed"],Et={class:"setting-row interrupt-row"},Rt={class:"setting-info"},Mt={class:"setting-name",for:"mixed-port"},At={class:"setting-desc"},Ft={class:"setting-action port-action"},Ot=["aria-label","disabled"],jt=["disabled"],qt=["disabled"],Ht={class:"setting-row"},Yt={class:"setting-info"},Zt={class:"setting-name"},Gt={class:"setting-desc"},Jt={class:"setting-action"},Kt={class:"setting-row caution-row"},Qt={class:"setting-info"},Wt={class:"setting-name"},Xt={class:"setting-desc"},ts={class:"setting-action"},ss=["title"],es={class:"setting-row danger-row"},as={class:"setting-info"},ns={class:"setting-name"},is={class:"setting-desc"},os={class:"setting-action"},ls=["disabled"],ds={class:"setting-row"},cs={class:"setting-info"},rs={class:"setting-name"},us={class:"setting-desc"},gs={class:"setting-action"},_s=["disabled"],ms={class:"info-grid"},vs={class:"info-item"},ps={class:"mono"},hs={class:"info-item"},bs={class:"mono"},fs={class:"info-item"},ys={class:"mono"},ws=B({__name:"SettingsView",setup(l){const v=at(()=>nt(()=>import("./SettingsFileDialog-CNFEAVs4.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url)),g=k(!1),y=k(o.status?.settings.mixedPort??7890),c=k(y.value),p=k(!1),{restarting:z,restartCore:I}=it(),w=k(!1);J(()=>o.status?.settings.mixedPort,n=>{if(n===void 0)return;const i=y.value;y.value=n,c.value=K(c.value,i,n,p.value)});const L=P(()=>ot(c.value,y.value)),N=P(()=>Number.isInteger(c.value)&&c.value>=1&&c.value<=65535&&L.value),j=P(()=>{switch(lt.value){case"inactive":return e("settings.tunInactiveDesc");case"unverified":return e("settings.tunUnverifiedDesc");case"unexpected-active":return e("settings.tunUnexpectedDesc");default:return e("settings.tunDesc")}});function V(n){n!==b.value&&rt(n)}function E(n){n!==T.value&&(dt(n),h.success(e("toast.langSwitched")))}function q(){c.value=y.value}async function H(){if(!(!N.value||p.value)){p.value=!0;try{const n=await A.patchSettings({mixedPort:c.value});o.status&&(o.status={...o.status,settings:n.settings}),await F(),h.success(e("toast.portSaved"))}catch(n){h.error(e("toast.failed",{msg:S(n)}))}finally{p.value=!1}}}async function R(n,i){try{await ct(n,i),h.success(e("toast.settingSaved"))}catch(d){h.error(e("toast.failed",{msg:S(d)}))}}function Y(n){R("allow-lan",n)}function Z(n){R("tun",n)}async function G(){if(!w.value){w.value=!0;try{const n=await A.reloadCoreConfig();await F(),h.success(e("toast.configReloaded",{n:n.proxyCount}))}catch(n){h.error(e("toast.failed",{msg:S(n)}))}finally{w.value=!1}}}return(n,i)=>(u(),m("div",null,[r(W,{title:t(e)("page.settings.title"),desc:t(e)("page.settings.desc")},{default:C(()=>[s("button",{type:"button",class:"btn btn-secondary btn-sm",onClick:i[0]||(i[0]=d=>g.value=!0)},[r(x,{name:"code",size:14}),Q(" "+a(t(e)("settings.editFile")),1)])]),_:1},8,["title","desc"]),g.value?(u(),X(t(v),{key:0,onClose:i[1]||(i[1]=d=>g.value=!1)})):f("",!0),s("div",wt,[r(D,{title:t(e)("settings.appearanceTitle"),class:"settings-card"},{default:C(()=>[s("div",kt,[s("div",Ct,[s("span",Tt,a(t(e)("settings.themeTitle")),1),s("span",$t,a(t(e)("settings.appearanceDesc")),1)]),s("div",{class:"segmented preference-control",role:"group","aria-label":t(e)("settings.appearanceTitle")},[s("button",{type:"button",class:_(["segmented-item",{active:t(b)==="system"}]),"aria-pressed":t(b)==="system",onClick:i[2]||(i[2]=d=>V("system"))},a(t(e)("theme.system")),11,Vt),s("button",{type:"button",class:_(["segmented-item",{active:t(b)==="light"}]),"aria-pressed":t(b)==="light",onClick:i[3]||(i[3]=d=>V("light"))},a(t(e)("theme.light")),11,xt),s("button",{type:"button",class:_(["segmented-item",{active:t(b)==="dark"}]),"aria-pressed":t(b)==="dark",onClick:i[4]||(i[4]=d=>V("dark"))},a(t(e)("theme.dark")),11,Pt)],8,Dt)]),s("div",St,[s("div",Bt,[s("span",Ut,a(t(e)("settings.langTitle")),1),s("span",zt,a(t(e)("settings.langDesc")),1)]),s("div",{class:"segmented preference-control language-control",role:"group","aria-label":t(e)("settings.langTitle")},[s("button",{type:"button",class:_(["segmented-item",{active:t(T)==="zh"}]),"aria-pressed":t(T)==="zh",onClick:i[5]||(i[5]=d=>E("zh"))}," 中文 ",10,Lt),s("button",{type:"button",class:_(["segmented-item",{active:t(T)==="en"}]),"aria-pressed":t(T)==="en",onClick:i[6]||(i[6]=d=>E("en"))}," English ",10,Nt)],8,It)])]),_:1},8,["title"]),r(D,{title:t(e)("settings.networkTitle"),class:"settings-card"},{default:C(()=>[s("div",Et,[s("div",Rt,[s("label",Mt,a(t(e)("settings.mixedPortTitle")),1),s("span",At,a(t(e)("settings.mixedPortDesc")),1)]),s("div",Ft,[tt(s("input",{id:"mixed-port","onUpdate:modelValue":i[7]||(i[7]=d=>c.value=d),type:"number",min:"1",max:"65535",class:"input input-sm port-input","aria-label":t(e)("settings.mixedPortTitle"),disabled:p.value||!t(o).status},null,8,Ot),[[st,c.value,void 0,{number:!0}]]),L.value?(u(),m("button",{key:0,type:"button",class:"btn btn-secondary btn-sm",disabled:p.value||!t(o).status,onClick:q},a(t(e)("common.reset")),9,jt)):f("",!0),s("button",{type:"button",class:"btn btn-secondary btn-sm interrupt-save",disabled:p.value||!N.value||!t(o).status,onClick:H},a(p.value?t(e)("common.loading"):t(e)("common.save")),9,qt)])]),s("div",Ht,[s("div",Yt,[s("span",Zt,a(t(e)("settings.allowLanTitle")),1),s("span",Gt,a(t(e)("settings.allowLanDesc")),1)]),s("div",Jt,[r(O,{"model-value":t(o).status?.settings.allowLan??!1,label:t(e)("settings.allowLanTitle"),disabled:t(o).operations.networkSetting||!t(o).status,"onUpdate:modelValue":Y},null,8,["model-value","label","disabled"])])]),s("div",Kt,[s("div",Qt,[s("span",Wt,a(t(e)("settings.tunTitle")),1),s("span",Xt,a(j.value),1)]),s("div",ts,[t($)?(u(),m("span",{key:0,class:_(["badge",t($).className]),title:t($).title},a(t($).text),11,ss)):f("",!0),r(O,{"model-value":t(o).status?.settings.tun??!1,label:t(e)("settings.tunTitle"),disabled:t(o).operations.networkSetting||!t(o).status,"onUpdate:modelValue":Z},null,8,["model-value","label","disabled"])])])]),_:1},8,["title"]),r(D,{title:t(e)("settings.coreTitle"),class:"settings-card"},{default:C(()=>[s("div",es,[s("div",as,[s("span",ns,a(t(e)("settings.restartTitle")),1),s("span",is,a(t(e)("settings.restartDesc")),1)]),s("div",os,[s("button",{type:"button",class:"btn btn-sm danger-action",disabled:t(z),onClick:i[8]||(i[8]=(...d)=>t(I)&&t(I)(...d))},[r(x,{name:"power",size:13,class:_({spin:t(z)})},null,8,["class"]),s("span",null,a(t(e)("settings.restartBtn")),1)],8,ls)])]),s("div",ds,[s("div",cs,[s("span",rs,a(t(e)("settings.reloadTitle")),1),s("span",us,a(t(e)("settings.reloadDesc")),1)]),s("div",gs,[s("button",{type:"button",class:"btn btn-secondary btn-sm",disabled:w.value,onClick:G},[r(x,{name:"refresh",size:13,class:_({spin:w.value})},null,8,["class"]),s("span",null,a(t(e)("settings.reloadBtn")),1)],8,_s)])])]),_:1},8,["title"]),r(D,{title:t(e)("settings.aboutTitle"),class:"settings-card runtime-card"},{default:C(()=>[s("dl",ms,[s("div",vs,[s("dt",null,a(t(e)("overview.daemonPort")),1),s("dd",ps,"127.0.0.1:"+a(t(o).status?.settings.daemonPort??19090),1)]),s("div",hs,[s("dt",null,a(t(e)("overview.controller")),1),s("dd",bs,a(t(o).status?.settings.controller||"-"),1)]),s("div",fs,[s("dt",null,a(t(e)("settings.coreVersion")),1),s("dd",ys,a(t(et)||"-"),1)])])]),_:1},8,["title"])])]))}}),Ts=U(ws,[["__scopeId","data-v-34dbfd82"]]);export{Ts as default};
@@ -0,0 +1 @@
1
+ .ui-card[data-v-042826e5]{min-width:0}.ui-card-head[data-v-042826e5]{display:flex;min-height:28px;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:5px}.ui-card-heading[data-v-042826e5]{min-width:0}.ui-card-title[data-v-042826e5]{color:var(--text-primary);font-size:18px;font-weight:400;line-height:1.4}.ui-card-desc[data-v-042826e5]{margin-top:1px;color:var(--text-muted);font-size:14px;line-height:1.35}.ui-card-actions[data-v-042826e5]{display:flex;align-items:center;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;gap:7px}.ui-card-body[data-v-042826e5]{padding:6px 10px;background:var(--bg-panel);border-radius:3px}@media(max-width:520px){.ui-card-head[data-v-042826e5]{flex-wrap:wrap}.ui-card-body[data-v-042826e5]{padding:6px 8px}}.switch[data-v-306af9c5]{position:relative;width:34px;height:20px;flex-shrink:0;padding:0;border:0;border-radius:var(--radius-full);background:var(--switch-off);cursor:pointer;transition:background var(--motion-normal) var(--ease-standard),opacity var(--motion-fast) var(--ease-standard)}.switch[data-v-306af9c5]:hover:not(:disabled){background:color-mix(in srgb,var(--switch-off) 84%,var(--text-primary))}.switch.on[data-v-306af9c5]{background:var(--switch-on)}.switch.on[data-v-306af9c5]:hover:not(:disabled){background:color-mix(in srgb,var(--switch-on) 84%,#000000)}.switch[data-v-306af9c5]:disabled{cursor:not-allowed;opacity:.48}.knob[data-v-306af9c5]{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:var(--radius-full);background:var(--switch-knob);box-shadow:var(--shadow-switch);transition:background var(--motion-normal) var(--ease-standard),transform var(--motion-normal) var(--ease-spring)}.switch.on .knob[data-v-306af9c5]{transform:translate(14px)}.settings-grid[data-v-34dbfd82]{display:grid;width:min(1046px,100%);grid-template-columns:1fr;gap:12px;margin:0 auto}.settings-card[data-v-34dbfd82]{min-width:0}.preference-control[data-v-34dbfd82]{display:grid;width:min(360px,48%);grid-template-columns:repeat(3,minmax(0,1fr));flex-shrink:0;gap:0}.language-control[data-v-34dbfd82]{grid-template-columns:repeat(2,minmax(0,1fr))}.preference-control .segmented-item[data-v-34dbfd82]{min-height:27px;border:0;border-radius:0;font-size:14px}.preference-control .segmented-item[data-v-34dbfd82]:first-child{border-radius:5px 0 0 5px}.preference-control .segmented-item[data-v-34dbfd82]:last-child{border-radius:0 5px 5px 0}.setting-row[data-v-34dbfd82]{display:flex;min-height:43px;align-items:center;justify-content:space-between;gap:24px;padding:6px 5px;border-bottom:0;transition:background var(--motion-fast) var(--ease-standard)}.setting-row[data-v-34dbfd82]:first-child{margin-top:-2px}.setting-row[data-v-34dbfd82]:last-child{border-bottom:0}.setting-row[data-v-34dbfd82]:hover{background:var(--general-row-hover);border-radius:3px}.caution-row .setting-name[data-v-34dbfd82]{color:var(--warning)}.danger-row .setting-name[data-v-34dbfd82]{color:var(--danger)}.setting-info[data-v-34dbfd82]{display:flex;min-width:0;flex-direction:column;gap:2px}.setting-name[data-v-34dbfd82]{color:var(--text-primary);font-size:16px;font-weight:400}.setting-desc[data-v-34dbfd82]{max-width:630px;color:var(--text-muted);font-size:14px;line-height:1.35}.setting-action[data-v-34dbfd82]{display:flex;align-items:center;flex-shrink:0;gap:8px}.port-input[data-v-34dbfd82]{width:96px;font-family:var(--font-mono);appearance:textfield;-moz-appearance:textfield}.port-input[data-v-34dbfd82]::-webkit-outer-spin-button,.port-input[data-v-34dbfd82]::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.interrupt-save[data-v-34dbfd82]{color:var(--warning);background:transparent;border-color:var(--warning-border)}.danger-action[data-v-34dbfd82]{color:var(--danger);background:transparent;border-color:var(--danger-border)}.interrupt-save[data-v-34dbfd82]:hover:not(:disabled){background:var(--warning-soft)}.danger-action[data-v-34dbfd82]:hover:not(:disabled){background:var(--danger-soft)}.info-grid[data-v-34dbfd82]{display:grid;grid-template-columns:1fr}.info-item[data-v-34dbfd82]{display:flex;min-width:0;min-height:39px;align-items:center;justify-content:space-between;gap:12px;padding:6px 5px;border-bottom:0}.info-item[data-v-34dbfd82]:last-child{border-bottom:0}.info-item dt[data-v-34dbfd82]{flex-shrink:0;color:var(--text-secondary);font-size:16px}.info-item dd[data-v-34dbfd82]{min-width:0;overflow:hidden;color:var(--text-primary);font-size:16px;font-weight:400;text-overflow:ellipsis;white-space:nowrap}@media(max-width:760px){.preference-control .segmented-item[data-v-34dbfd82],.setting-action .btn[data-v-34dbfd82]{min-height:40px}}@media(max-width:480px){.settings-grid[data-v-34dbfd82]{gap:12px}.preference-control[data-v-34dbfd82]{width:100%}.preference-control .segmented-item[data-v-34dbfd82]{min-height:40px;font-size:14px}.setting-row[data-v-34dbfd82]{min-height:0;align-items:stretch;flex-direction:column;gap:11px;padding:13px 8px}.setting-action[data-v-34dbfd82]{align-self:stretch;justify-content:flex-end}.port-action[data-v-34dbfd82]{display:grid;grid-template-columns:minmax(0,1fr) auto auto}.port-input[data-v-34dbfd82]{width:100%;min-height:44px;text-align:left}.setting-action .btn[data-v-34dbfd82]{min-height:44px}.info-item[data-v-34dbfd82]{min-height:0;align-items:flex-start;flex-direction:column;gap:3px;padding:10px 8px}.info-item dd[data-v-34dbfd82]{width:100%}}