@adminiumjs/adminium 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (875) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +94 -0
  3. package/dashboard/assets/DeltaPill-dxlsGh-1.js +2 -0
  4. package/dashboard/assets/DeltaPill-dxlsGh-1.js.map +1 -0
  5. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js +2 -0
  6. package/dashboard/assets/DistributionCorrelationWidgets-ztVy_W_R.js.map +1 -0
  7. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js +2 -0
  8. package/dashboard/assets/PartWholeWidgets-BDn0i0jt.js.map +1 -0
  9. package/dashboard/assets/RemapEditor-z3vRY12e.js +2 -0
  10. package/dashboard/assets/RemapEditor-z3vRY12e.js.map +1 -0
  11. package/dashboard/assets/ReviewScreen-COkLQ3T7.js +2 -0
  12. package/dashboard/assets/ReviewScreen-COkLQ3T7.js.map +1 -0
  13. package/dashboard/assets/Sparkline-Cvwo368J.js +2 -0
  14. package/dashboard/assets/Sparkline-Cvwo368J.js.map +1 -0
  15. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js +2 -0
  16. package/dashboard/assets/WidgetMissingCard-D0bPJKIs.js.map +1 -0
  17. package/dashboard/assets/arc-CPxb74pf.js +2 -0
  18. package/dashboard/assets/arc-CPxb74pf.js.map +1 -0
  19. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js +2 -0
  20. package/dashboard/assets/bars-ranking-components-9Asn_0gR.js.map +1 -0
  21. package/dashboard/assets/blocks-track-components-BST-NjK2.js +2 -0
  22. package/dashboard/assets/blocks-track-components-BST-NjK2.js.map +1 -0
  23. package/dashboard/assets/calendar-track-components-RgNtGtZR.js +2 -0
  24. package/dashboard/assets/calendar-track-components-RgNtGtZR.js.map +1 -0
  25. package/dashboard/assets/chrome-track-components-ClNsentC.js +2 -0
  26. package/dashboard/assets/chrome-track-components-ClNsentC.js.map +1 -0
  27. package/dashboard/assets/common-BY1j__bD.js +2 -0
  28. package/dashboard/assets/common-BY1j__bD.js.map +1 -0
  29. package/dashboard/assets/common-BdlXKpcB.js +2 -0
  30. package/dashboard/assets/common-BdlXKpcB.js.map +1 -0
  31. package/dashboard/assets/common-BqqhgMgB.js +2 -0
  32. package/dashboard/assets/common-BqqhgMgB.js.map +1 -0
  33. package/dashboard/assets/common-BribWmIo.js +2 -0
  34. package/dashboard/assets/common-BribWmIo.js.map +1 -0
  35. package/dashboard/assets/common-Cmf0_lKV.js +2 -0
  36. package/dashboard/assets/common-Cmf0_lKV.js.map +1 -0
  37. package/dashboard/assets/common-i0r48qY9.js +2 -0
  38. package/dashboard/assets/common-i0r48qY9.js.map +1 -0
  39. package/dashboard/assets/common-x8cfkwpc.js +2 -0
  40. package/dashboard/assets/common-x8cfkwpc.js.map +1 -0
  41. package/dashboard/assets/communication-track-components-CNLZXOH_.js +2 -0
  42. package/dashboard/assets/communication-track-components-CNLZXOH_.js.map +1 -0
  43. package/dashboard/assets/components-Bp5cFm2d.js +2 -0
  44. package/dashboard/assets/components-Bp5cFm2d.js.map +1 -0
  45. package/dashboard/assets/components-C4-O3_gD.js +2 -0
  46. package/dashboard/assets/components-C4-O3_gD.js.map +1 -0
  47. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js +2 -0
  48. package/dashboard/assets/domain-ops-track-components-BPa41AU7.js.map +1 -0
  49. package/dashboard/assets/domain-track-components-CQ1i1X1t.js +2 -0
  50. package/dashboard/assets/domain-track-components-CQ1i1X1t.js.map +1 -0
  51. package/dashboard/assets/errors-BHUWiAQ3.js +2 -0
  52. package/dashboard/assets/errors-BHUWiAQ3.js.map +1 -0
  53. package/dashboard/assets/errors-BbyKweDG.js +2 -0
  54. package/dashboard/assets/errors-BbyKweDG.js.map +1 -0
  55. package/dashboard/assets/errors-CMQ6JC31.js +2 -0
  56. package/dashboard/assets/errors-CMQ6JC31.js.map +1 -0
  57. package/dashboard/assets/errors-D3nVgTmf.js +2 -0
  58. package/dashboard/assets/errors-D3nVgTmf.js.map +1 -0
  59. package/dashboard/assets/errors-IqJSoANC.js +2 -0
  60. package/dashboard/assets/errors-IqJSoANC.js.map +1 -0
  61. package/dashboard/assets/errors-gmIkO9F6.js +2 -0
  62. package/dashboard/assets/errors-gmIkO9F6.js.map +1 -0
  63. package/dashboard/assets/errors-vFk058Vh.js +2 -0
  64. package/dashboard/assets/errors-vFk058Vh.js.map +1 -0
  65. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js +2 -0
  66. package/dashboard/assets/feeds-track-f-components-Cl_8SkGs.js.map +1 -0
  67. package/dashboard/assets/format-Lx4cQ8k-.js +2 -0
  68. package/dashboard/assets/format-Lx4cQ8k-.js.map +1 -0
  69. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js +2 -0
  70. package/dashboard/assets/forms-track-components-Bc2Hoxdh.js.map +1 -0
  71. package/dashboard/assets/generated-1EfWhCMA.js +2 -0
  72. package/dashboard/assets/generated-1EfWhCMA.js.map +1 -0
  73. package/dashboard/assets/generated-BB3ZMxvx.js +2 -0
  74. package/dashboard/assets/generated-BB3ZMxvx.js.map +1 -0
  75. package/dashboard/assets/generated-C0JVNBRX.js +2 -0
  76. package/dashboard/assets/generated-C0JVNBRX.js.map +1 -0
  77. package/dashboard/assets/generated-C1W48_-3.js +2 -0
  78. package/dashboard/assets/generated-C1W48_-3.js.map +1 -0
  79. package/dashboard/assets/generated-CluiB_xY.js +2 -0
  80. package/dashboard/assets/generated-CluiB_xY.js.map +1 -0
  81. package/dashboard/assets/generated-DDGtlf-4.js +2 -0
  82. package/dashboard/assets/generated-DDGtlf-4.js.map +1 -0
  83. package/dashboard/assets/generated-DPCHvNto.js +2 -0
  84. package/dashboard/assets/generated-DPCHvNto.js.map +1 -0
  85. package/dashboard/assets/geo-track-components-Ct4-MSRw.js +3 -0
  86. package/dashboard/assets/geo-track-components-Ct4-MSRw.js.map +1 -0
  87. package/dashboard/assets/ibm-plex-sans-arabic-arabic-400-normal-CyU-ddYS.woff2 +0 -0
  88. package/dashboard/assets/ibm-plex-sans-arabic-arabic-500-normal-C4MQITzh.woff2 +0 -0
  89. package/dashboard/assets/ibm-plex-sans-arabic-arabic-600-normal-0pRdybE_.woff2 +0 -0
  90. package/dashboard/assets/ibm-plex-sans-arabic-arabic-700-normal-DrtBj6UE.woff2 +0 -0
  91. package/dashboard/assets/index-DPi4cduu.css +1 -0
  92. package/dashboard/assets/index-PB1II0WV.js +137 -0
  93. package/dashboard/assets/index-PB1II0WV.js.map +1 -0
  94. package/dashboard/assets/jetbrains-mono-latin-ext-wght-italic-BrDczivE.woff2 +0 -0
  95. package/dashboard/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2 +0 -0
  96. package/dashboard/assets/jetbrains-mono-latin-wght-italic-B2M6KQje.woff2 +0 -0
  97. package/dashboard/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2 +0 -0
  98. package/dashboard/assets/leaflet-CIGW-MKW.css +1 -0
  99. package/dashboard/assets/leaflet-src-D12shr04.js +2 -0
  100. package/dashboard/assets/leaflet-src-D12shr04.js.map +1 -0
  101. package/dashboard/assets/manrope-latin-ext-wght-normal-Ch3YOpNY.woff2 +0 -0
  102. package/dashboard/assets/manrope-latin-wght-normal-DHIcAJRg.woff2 +0 -0
  103. package/dashboard/assets/media-track-components-CpeII-tT.js +2 -0
  104. package/dashboard/assets/media-track-components-CpeII-tT.js.map +1 -0
  105. package/dashboard/assets/scales-e0tkfEy1.js +2 -0
  106. package/dashboard/assets/scales-e0tkfEy1.js.map +1 -0
  107. package/dashboard/assets/sparkline-2JUGDrMW.js +2 -0
  108. package/dashboard/assets/sparkline-2JUGDrMW.js.map +1 -0
  109. package/dashboard/assets/stats-BNgXz5BD.js +2 -0
  110. package/dashboard/assets/stats-BNgXz5BD.js.map +1 -0
  111. package/dashboard/assets/studio-B7hMOwAF.js +2 -0
  112. package/dashboard/assets/studio-B7hMOwAF.js.map +1 -0
  113. package/dashboard/assets/studio-BN_9xHY3.js +2 -0
  114. package/dashboard/assets/studio-BN_9xHY3.js.map +1 -0
  115. package/dashboard/assets/studio-Cn2MObe8.js +2 -0
  116. package/dashboard/assets/studio-Cn2MObe8.js.map +1 -0
  117. package/dashboard/assets/studio-DZEZCCkw.js +2 -0
  118. package/dashboard/assets/studio-DZEZCCkw.js.map +1 -0
  119. package/dashboard/assets/studio-DzatTvLl.js +2 -0
  120. package/dashboard/assets/studio-DzatTvLl.js.map +1 -0
  121. package/dashboard/assets/studio-cBlD8x90.js +2 -0
  122. package/dashboard/assets/studio-cBlD8x90.js.map +1 -0
  123. package/dashboard/assets/studio-cglZPbJK.js +2 -0
  124. package/dashboard/assets/studio-cglZPbJK.js.map +1 -0
  125. package/dashboard/assets/system-track-components-GTYYpnfB.js +2 -0
  126. package/dashboard/assets/system-track-components-GTYYpnfB.js.map +1 -0
  127. package/dashboard/assets/tables-tail-components-DiA5GeHB.js +2 -0
  128. package/dashboard/assets/tables-tail-components-DiA5GeHB.js.map +1 -0
  129. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js +2 -0
  130. package/dashboard/assets/tables-track-f-components-CVNPd7rq.js.map +1 -0
  131. package/dashboard/assets/time-flow-components-nKsaryry.js +2 -0
  132. package/dashboard/assets/time-flow-components-nKsaryry.js.map +1 -0
  133. package/dashboard/assets/ui-B-kZetor.js +2 -0
  134. package/dashboard/assets/ui-B-kZetor.js.map +1 -0
  135. package/dashboard/assets/ui-BEStJ5Pw.js +2 -0
  136. package/dashboard/assets/ui-BEStJ5Pw.js.map +1 -0
  137. package/dashboard/assets/ui-BS5_eDN4.js +2 -0
  138. package/dashboard/assets/ui-BS5_eDN4.js.map +1 -0
  139. package/dashboard/assets/ui-BZ0EyxRH.js +2 -0
  140. package/dashboard/assets/ui-BZ0EyxRH.js.map +1 -0
  141. package/dashboard/assets/ui-BloJDdt6.js +2 -0
  142. package/dashboard/assets/ui-BloJDdt6.js.map +1 -0
  143. package/dashboard/assets/ui-CpdrplJH.js +2 -0
  144. package/dashboard/assets/ui-CpdrplJH.js.map +1 -0
  145. package/dashboard/assets/ui-YJfT644k.js +2 -0
  146. package/dashboard/assets/ui-YJfT644k.js.map +1 -0
  147. package/dashboard/assets/widgets-uDqZWw4A.js +2 -0
  148. package/dashboard/assets/widgets-uDqZWw4A.js.map +1 -0
  149. package/dashboard/index.html +41 -0
  150. package/dist/app.d.ts +48 -0
  151. package/dist/app.d.ts.map +1 -0
  152. package/dist/app.js +250 -0
  153. package/dist/app.js.map +1 -0
  154. package/dist/auth/audit.d.ts +22 -0
  155. package/dist/auth/audit.d.ts.map +1 -0
  156. package/dist/auth/audit.js +17 -0
  157. package/dist/auth/audit.js.map +1 -0
  158. package/dist/auth/desktop-session.d.ts +53 -0
  159. package/dist/auth/desktop-session.d.ts.map +1 -0
  160. package/dist/auth/desktop-session.js +111 -0
  161. package/dist/auth/desktop-session.js.map +1 -0
  162. package/dist/auth/passwords.d.ts +17 -0
  163. package/dist/auth/passwords.d.ts.map +1 -0
  164. package/dist/auth/passwords.js +40 -0
  165. package/dist/auth/passwords.js.map +1 -0
  166. package/dist/auth/sessions.d.ts +77 -0
  167. package/dist/auth/sessions.d.ts.map +1 -0
  168. package/dist/auth/sessions.js +137 -0
  169. package/dist/auth/sessions.js.map +1 -0
  170. package/dist/auth/totp.d.ts +30 -0
  171. package/dist/auth/totp.d.ts.map +1 -0
  172. package/dist/auth/totp.js +97 -0
  173. package/dist/auth/totp.js.map +1 -0
  174. package/dist/backup/backup-service.d.ts +157 -0
  175. package/dist/backup/backup-service.d.ts.map +1 -0
  176. package/dist/backup/backup-service.js +354 -0
  177. package/dist/backup/backup-service.js.map +1 -0
  178. package/dist/backup/format.d.ts +300 -0
  179. package/dist/backup/format.d.ts.map +1 -0
  180. package/dist/backup/format.js +304 -0
  181. package/dist/backup/format.js.map +1 -0
  182. package/dist/backup/notify.d.ts +55 -0
  183. package/dist/backup/notify.d.ts.map +1 -0
  184. package/dist/backup/notify.js +60 -0
  185. package/dist/backup/notify.js.map +1 -0
  186. package/dist/backup/snapshot.d.ts +78 -0
  187. package/dist/backup/snapshot.d.ts.map +1 -0
  188. package/dist/backup/snapshot.js +142 -0
  189. package/dist/backup/snapshot.js.map +1 -0
  190. package/dist/capabilities/catalog.d.ts +33 -0
  191. package/dist/capabilities/catalog.d.ts.map +1 -0
  192. package/dist/capabilities/catalog.js +32 -0
  193. package/dist/capabilities/catalog.js.map +1 -0
  194. package/dist/capabilities/grants.d.ts +44 -0
  195. package/dist/capabilities/grants.d.ts.map +1 -0
  196. package/dist/capabilities/grants.js +65 -0
  197. package/dist/capabilities/grants.js.map +1 -0
  198. package/dist/cli/allowlist.d.ts +46 -0
  199. package/dist/cli/allowlist.d.ts.map +1 -0
  200. package/dist/cli/allowlist.js +99 -0
  201. package/dist/cli/allowlist.js.map +1 -0
  202. package/dist/cli/args.d.ts +63 -0
  203. package/dist/cli/args.d.ts.map +1 -0
  204. package/dist/cli/args.js +92 -0
  205. package/dist/cli/args.js.map +1 -0
  206. package/dist/cli/command.d.ts +32 -0
  207. package/dist/cli/command.d.ts.map +1 -0
  208. package/dist/cli/command.js +64 -0
  209. package/dist/cli/command.js.map +1 -0
  210. package/dist/cli/commands/apply-llm-response.d.ts +32 -0
  211. package/dist/cli/commands/apply-llm-response.d.ts.map +1 -0
  212. package/dist/cli/commands/apply-llm-response.js +209 -0
  213. package/dist/cli/commands/apply-llm-response.js.map +1 -0
  214. package/dist/cli/commands/export-zip.d.ts +17 -0
  215. package/dist/cli/commands/export-zip.d.ts.map +1 -0
  216. package/dist/cli/commands/export-zip.js +111 -0
  217. package/dist/cli/commands/export-zip.js.map +1 -0
  218. package/dist/cli/commands/generate-prompt.d.ts +29 -0
  219. package/dist/cli/commands/generate-prompt.d.ts.map +1 -0
  220. package/dist/cli/commands/generate-prompt.js +154 -0
  221. package/dist/cli/commands/generate-prompt.js.map +1 -0
  222. package/dist/cli/commands/import-zip.d.ts +13 -0
  223. package/dist/cli/commands/import-zip.d.ts.map +1 -0
  224. package/dist/cli/commands/import-zip.js +95 -0
  225. package/dist/cli/commands/import-zip.js.map +1 -0
  226. package/dist/cli/commands/init.d.ts +47 -0
  227. package/dist/cli/commands/init.d.ts.map +1 -0
  228. package/dist/cli/commands/init.js +372 -0
  229. package/dist/cli/commands/init.js.map +1 -0
  230. package/dist/cli/commands/introspect.d.ts +11 -0
  231. package/dist/cli/commands/introspect.d.ts.map +1 -0
  232. package/dist/cli/commands/introspect.js +100 -0
  233. package/dist/cli/commands/introspect.js.map +1 -0
  234. package/dist/cli/commands/migrate.d.ts +11 -0
  235. package/dist/cli/commands/migrate.d.ts.map +1 -0
  236. package/dist/cli/commands/migrate.js +80 -0
  237. package/dist/cli/commands/migrate.js.map +1 -0
  238. package/dist/cli/commands/start.d.ts +22 -0
  239. package/dist/cli/commands/start.d.ts.map +1 -0
  240. package/dist/cli/commands/start.js +101 -0
  241. package/dist/cli/commands/start.js.map +1 -0
  242. package/dist/cli/exit.d.ts +37 -0
  243. package/dist/cli/exit.d.ts.map +1 -0
  244. package/dist/cli/exit.js +39 -0
  245. package/dist/cli/exit.js.map +1 -0
  246. package/dist/cli/index.d.ts +10 -0
  247. package/dist/cli/index.d.ts.map +1 -0
  248. package/dist/cli/index.js +17 -0
  249. package/dist/cli/index.js.map +1 -0
  250. package/dist/cli/io.d.ts +49 -0
  251. package/dist/cli/io.d.ts.map +1 -0
  252. package/dist/cli/io.js +77 -0
  253. package/dist/cli/io.js.map +1 -0
  254. package/dist/cli/run.d.ts +35 -0
  255. package/dist/cli/run.d.ts.map +1 -0
  256. package/dist/cli/run.js +139 -0
  257. package/dist/cli/run.js.map +1 -0
  258. package/dist/cli/runtime.d.ts +116 -0
  259. package/dist/cli/runtime.d.ts.map +1 -0
  260. package/dist/cli/runtime.js +181 -0
  261. package/dist/cli/runtime.js.map +1 -0
  262. package/dist/cli/static-root.d.ts +42 -0
  263. package/dist/cli/static-root.d.ts.map +1 -0
  264. package/dist/cli/static-root.js +58 -0
  265. package/dist/cli/static-root.js.map +1 -0
  266. package/dist/compose.d.ts +135 -0
  267. package/dist/compose.d.ts.map +1 -0
  268. package/dist/compose.js +383 -0
  269. package/dist/compose.js.map +1 -0
  270. package/dist/config/bootstrap.d.ts +33 -0
  271. package/dist/config/bootstrap.d.ts.map +1 -0
  272. package/dist/config/bootstrap.js +81 -0
  273. package/dist/config/bootstrap.js.map +1 -0
  274. package/dist/config/env.d.ts +95 -0
  275. package/dist/config/env.d.ts.map +1 -0
  276. package/dist/config/env.js +236 -0
  277. package/dist/config/env.js.map +1 -0
  278. package/dist/config/secrets.d.ts +24 -0
  279. package/dist/config/secrets.d.ts.map +1 -0
  280. package/dist/config/secrets.js +74 -0
  281. package/dist/config/secrets.js.map +1 -0
  282. package/dist/connections/crypto.d.ts +9 -0
  283. package/dist/connections/crypto.d.ts.map +1 -0
  284. package/dist/connections/crypto.js +16 -0
  285. package/dist/connections/crypto.js.map +1 -0
  286. package/dist/connections/dsn.d.ts +42 -0
  287. package/dist/connections/dsn.d.ts.map +1 -0
  288. package/dist/connections/dsn.js +131 -0
  289. package/dist/connections/dsn.js.map +1 -0
  290. package/dist/connections/effective-schema.d.ts +65 -0
  291. package/dist/connections/effective-schema.d.ts.map +1 -0
  292. package/dist/connections/effective-schema.js +249 -0
  293. package/dist/connections/effective-schema.js.map +1 -0
  294. package/dist/connections/introspect.d.ts +52 -0
  295. package/dist/connections/introspect.d.ts.map +1 -0
  296. package/dist/connections/introspect.js +111 -0
  297. package/dist/connections/introspect.js.map +1 -0
  298. package/dist/connections/manager.d.ts +97 -0
  299. package/dist/connections/manager.d.ts.map +1 -0
  300. package/dist/connections/manager.js +224 -0
  301. package/dist/connections/manager.js.map +1 -0
  302. package/dist/connections/register-adapters.d.ts +42 -0
  303. package/dist/connections/register-adapters.d.ts.map +1 -0
  304. package/dist/connections/register-adapters.js +92 -0
  305. package/dist/connections/register-adapters.js.map +1 -0
  306. package/dist/crud/filters.d.ts +57 -0
  307. package/dist/crud/filters.d.ts.map +1 -0
  308. package/dist/crud/filters.js +177 -0
  309. package/dist/crud/filters.js.map +1 -0
  310. package/dist/crud/identifiers.d.ts +58 -0
  311. package/dist/crud/identifiers.d.ts.map +1 -0
  312. package/dist/crud/identifiers.js +99 -0
  313. package/dist/crud/identifiers.js.map +1 -0
  314. package/dist/crud/list.d.ts +51 -0
  315. package/dist/crud/list.d.ts.map +1 -0
  316. package/dist/crud/list.js +126 -0
  317. package/dist/crud/list.js.map +1 -0
  318. package/dist/crud/mask.d.ts +23 -0
  319. package/dist/crud/mask.d.ts.map +1 -0
  320. package/dist/crud/mask.js +41 -0
  321. package/dist/crud/mask.js.map +1 -0
  322. package/dist/crud/records.d.ts +33 -0
  323. package/dist/crud/records.d.ts.map +1 -0
  324. package/dist/crud/records.js +126 -0
  325. package/dist/crud/records.js.map +1 -0
  326. package/dist/crud/undo.d.ts +55 -0
  327. package/dist/crud/undo.d.ts.map +1 -0
  328. package/dist/crud/undo.js +74 -0
  329. package/dist/crud/undo.js.map +1 -0
  330. package/dist/data-io/coerce.d.ts +28 -0
  331. package/dist/data-io/coerce.d.ts.map +1 -0
  332. package/dist/data-io/coerce.js +123 -0
  333. package/dist/data-io/coerce.js.map +1 -0
  334. package/dist/data-io/csv.d.ts +38 -0
  335. package/dist/data-io/csv.d.ts.map +1 -0
  336. package/dist/data-io/csv.js +138 -0
  337. package/dist/data-io/csv.js.map +1 -0
  338. package/dist/data-io/snapshot-view.d.ts +10 -0
  339. package/dist/data-io/snapshot-view.d.ts.map +1 -0
  340. package/dist/data-io/snapshot-view.js +19 -0
  341. package/dist/data-io/snapshot-view.js.map +1 -0
  342. package/dist/desktop/demo-seed.d.ts +23 -0
  343. package/dist/desktop/demo-seed.d.ts.map +1 -0
  344. package/dist/desktop/demo-seed.js +28 -0
  345. package/dist/desktop/demo-seed.js.map +1 -0
  346. package/dist/desktop/lan-share.d.ts +94 -0
  347. package/dist/desktop/lan-share.d.ts.map +1 -0
  348. package/dist/desktop/lan-share.js +150 -0
  349. package/dist/desktop/lan-share.js.map +1 -0
  350. package/dist/errors.d.ts +72 -0
  351. package/dist/errors.d.ts.map +1 -0
  352. package/dist/errors.js +82 -0
  353. package/dist/errors.js.map +1 -0
  354. package/dist/export/bundle.d.ts +235 -0
  355. package/dist/export/bundle.d.ts.map +1 -0
  356. package/dist/export/bundle.js +172 -0
  357. package/dist/export/bundle.js.map +1 -0
  358. package/dist/export/import-service.d.ts +99 -0
  359. package/dist/export/import-service.d.ts.map +1 -0
  360. package/dist/export/import-service.js +515 -0
  361. package/dist/export/import-service.js.map +1 -0
  362. package/dist/export/readme.d.ts +25 -0
  363. package/dist/export/readme.d.ts.map +1 -0
  364. package/dist/export/readme.js +154 -0
  365. package/dist/export/readme.js.map +1 -0
  366. package/dist/export/redaction.d.ts +118 -0
  367. package/dist/export/redaction.d.ts.map +1 -0
  368. package/dist/export/redaction.js +233 -0
  369. package/dist/export/redaction.js.map +1 -0
  370. package/dist/export/zip-service.d.ts +66 -0
  371. package/dist/export/zip-service.d.ts.map +1 -0
  372. package/dist/export/zip-service.js +306 -0
  373. package/dist/export/zip-service.js.map +1 -0
  374. package/dist/files/storage.d.ts +50 -0
  375. package/dist/files/storage.d.ts.map +1 -0
  376. package/dist/files/storage.js +100 -0
  377. package/dist/files/storage.js.map +1 -0
  378. package/dist/generate/materialize-llm.d.ts +45 -0
  379. package/dist/generate/materialize-llm.d.ts.map +1 -0
  380. package/dist/generate/materialize-llm.js +167 -0
  381. package/dist/generate/materialize-llm.js.map +1 -0
  382. package/dist/generate/run.d.ts +48 -0
  383. package/dist/generate/run.d.ts.map +1 -0
  384. package/dist/generate/run.js +123 -0
  385. package/dist/generate/run.js.map +1 -0
  386. package/dist/index.d.ts +89 -0
  387. package/dist/index.d.ts.map +1 -0
  388. package/dist/index.js +116 -0
  389. package/dist/index.js.map +1 -0
  390. package/dist/jobs/export-run.d.ts +38 -0
  391. package/dist/jobs/export-run.d.ts.map +1 -0
  392. package/dist/jobs/export-run.js +172 -0
  393. package/dist/jobs/export-run.js.map +1 -0
  394. package/dist/jobs/import-run.d.ts +43 -0
  395. package/dist/jobs/import-run.d.ts.map +1 -0
  396. package/dist/jobs/import-run.js +290 -0
  397. package/dist/jobs/import-run.js.map +1 -0
  398. package/dist/jobs/llm-run.d.ts +73 -0
  399. package/dist/jobs/llm-run.d.ts.map +1 -0
  400. package/dist/jobs/llm-run.js +225 -0
  401. package/dist/jobs/llm-run.js.map +1 -0
  402. package/dist/jobs/register.d.ts +90 -0
  403. package/dist/jobs/register.d.ts.map +1 -0
  404. package/dist/jobs/register.js +121 -0
  405. package/dist/jobs/register.js.map +1 -0
  406. package/dist/jobs/registry.d.ts +74 -0
  407. package/dist/jobs/registry.d.ts.map +1 -0
  408. package/dist/jobs/registry.js +78 -0
  409. package/dist/jobs/registry.js.map +1 -0
  410. package/dist/jobs/report-run.d.ts +64 -0
  411. package/dist/jobs/report-run.d.ts.map +1 -0
  412. package/dist/jobs/report-run.js +221 -0
  413. package/dist/jobs/report-run.js.map +1 -0
  414. package/dist/jobs/scheduler.d.ts +72 -0
  415. package/dist/jobs/scheduler.d.ts.map +1 -0
  416. package/dist/jobs/scheduler.js +121 -0
  417. package/dist/jobs/scheduler.js.map +1 -0
  418. package/dist/jobs/worker.d.ts +110 -0
  419. package/dist/jobs/worker.d.ts.map +1 -0
  420. package/dist/jobs/worker.js +282 -0
  421. package/dist/jobs/worker.js.map +1 -0
  422. package/dist/llm/apply-service.d.ts +150 -0
  423. package/dist/llm/apply-service.d.ts.map +1 -0
  424. package/dist/llm/apply-service.js +463 -0
  425. package/dist/llm/apply-service.js.map +1 -0
  426. package/dist/llm/apply-undo-store.d.ts +50 -0
  427. package/dist/llm/apply-undo-store.d.ts.map +1 -0
  428. package/dist/llm/apply-undo-store.js +60 -0
  429. package/dist/llm/apply-undo-store.js.map +1 -0
  430. package/dist/llm/direct-runner.d.ts +146 -0
  431. package/dist/llm/direct-runner.d.ts.map +1 -0
  432. package/dist/llm/direct-runner.js +204 -0
  433. package/dist/llm/direct-runner.js.map +1 -0
  434. package/dist/llm/prompt-service.d.ts +90 -0
  435. package/dist/llm/prompt-service.d.ts.map +1 -0
  436. package/dist/llm/prompt-service.js +93 -0
  437. package/dist/llm/prompt-service.js.map +1 -0
  438. package/dist/llm/provider-resolver.d.ts +25 -0
  439. package/dist/llm/provider-resolver.d.ts.map +1 -0
  440. package/dist/llm/provider-resolver.js +81 -0
  441. package/dist/llm/provider-resolver.js.map +1 -0
  442. package/dist/llm/run-service.d.ts +215 -0
  443. package/dist/llm/run-service.d.ts.map +1 -0
  444. package/dist/llm/run-service.js +343 -0
  445. package/dist/llm/run-service.js.map +1 -0
  446. package/dist/llm/stats-collector.d.ts +40 -0
  447. package/dist/llm/stats-collector.d.ts.map +1 -0
  448. package/dist/llm/stats-collector.js +74 -0
  449. package/dist/llm/stats-collector.js.map +1 -0
  450. package/dist/log-scrub.d.ts +58 -0
  451. package/dist/log-scrub.d.ts.map +1 -0
  452. package/dist/log-scrub.js +103 -0
  453. package/dist/log-scrub.js.map +1 -0
  454. package/dist/meta/store.d.ts +96 -0
  455. package/dist/meta/store.d.ts.map +1 -0
  456. package/dist/meta/store.js +192 -0
  457. package/dist/meta/store.js.map +1 -0
  458. package/dist/notifications/notify.d.ts +43 -0
  459. package/dist/notifications/notify.d.ts.map +1 -0
  460. package/dist/notifications/notify.js +42 -0
  461. package/dist/notifications/notify.js.map +1 -0
  462. package/dist/plugins/auth.d.ts +42 -0
  463. package/dist/plugins/auth.d.ts.map +1 -0
  464. package/dist/plugins/auth.js +84 -0
  465. package/dist/plugins/auth.js.map +1 -0
  466. package/dist/plugins/core.d.ts +48 -0
  467. package/dist/plugins/core.d.ts.map +1 -0
  468. package/dist/plugins/core.js +248 -0
  469. package/dist/plugins/core.js.map +1 -0
  470. package/dist/plugins/rbac.d.ts +54 -0
  471. package/dist/plugins/rbac.d.ts.map +1 -0
  472. package/dist/plugins/rbac.js +103 -0
  473. package/dist/plugins/rbac.js.map +1 -0
  474. package/dist/plugins/static.d.ts +12 -0
  475. package/dist/plugins/static.d.ts.map +1 -0
  476. package/dist/plugins/static.js +36 -0
  477. package/dist/plugins/static.js.map +1 -0
  478. package/dist/rbac/api-keys.d.ts +30 -0
  479. package/dist/rbac/api-keys.d.ts.map +1 -0
  480. package/dist/rbac/api-keys.js +41 -0
  481. package/dist/rbac/api-keys.js.map +1 -0
  482. package/dist/rbac/index.d.ts +6 -0
  483. package/dist/rbac/index.d.ts.map +1 -0
  484. package/dist/rbac/index.js +6 -0
  485. package/dist/rbac/index.js.map +1 -0
  486. package/dist/rbac/permissions.d.ts +107 -0
  487. package/dist/rbac/permissions.d.ts.map +1 -0
  488. package/dist/rbac/permissions.js +250 -0
  489. package/dist/rbac/permissions.js.map +1 -0
  490. package/dist/rbac/principal.d.ts +33 -0
  491. package/dist/rbac/principal.d.ts.map +1 -0
  492. package/dist/rbac/principal.js +31 -0
  493. package/dist/rbac/principal.js.map +1 -0
  494. package/dist/rbac/resolver.d.ts +26 -0
  495. package/dist/rbac/resolver.d.ts.map +1 -0
  496. package/dist/rbac/resolver.js +46 -0
  497. package/dist/rbac/resolver.js.map +1 -0
  498. package/dist/realtime/hub.d.ts +90 -0
  499. package/dist/realtime/hub.d.ts.map +1 -0
  500. package/dist/realtime/hub.js +146 -0
  501. package/dist/realtime/hub.js.map +1 -0
  502. package/dist/realtime/sse.d.ts +35 -0
  503. package/dist/realtime/sse.d.ts.map +1 -0
  504. package/dist/realtime/sse.js +88 -0
  505. package/dist/realtime/sse.js.map +1 -0
  506. package/dist/realtime/ws.d.ts +38 -0
  507. package/dist/realtime/ws.d.ts.map +1 -0
  508. package/dist/realtime/ws.js +124 -0
  509. package/dist/realtime/ws.js.map +1 -0
  510. package/dist/reports/schedule.d.ts +14 -0
  511. package/dist/reports/schedule.d.ts.map +1 -0
  512. package/dist/reports/schedule.js +63 -0
  513. package/dist/reports/schedule.js.map +1 -0
  514. package/dist/routes/about/index.d.ts +39 -0
  515. package/dist/routes/about/index.d.ts.map +1 -0
  516. package/dist/routes/about/index.js +73 -0
  517. package/dist/routes/about/index.js.map +1 -0
  518. package/dist/routes/about/schema.d.ts +50 -0
  519. package/dist/routes/about/schema.d.ts.map +1 -0
  520. package/dist/routes/about/schema.js +53 -0
  521. package/dist/routes/about/schema.js.map +1 -0
  522. package/dist/routes/api-keys/index.d.ts +11 -0
  523. package/dist/routes/api-keys/index.d.ts.map +1 -0
  524. package/dist/routes/api-keys/index.js +79 -0
  525. package/dist/routes/api-keys/index.js.map +1 -0
  526. package/dist/routes/api-keys/schema.d.ts +62 -0
  527. package/dist/routes/api-keys/schema.d.ts.map +1 -0
  528. package/dist/routes/api-keys/schema.js +37 -0
  529. package/dist/routes/api-keys/schema.js.map +1 -0
  530. package/dist/routes/audit/index.d.ts +11 -0
  531. package/dist/routes/audit/index.d.ts.map +1 -0
  532. package/dist/routes/audit/index.js +107 -0
  533. package/dist/routes/audit/index.js.map +1 -0
  534. package/dist/routes/audit/schema.d.ts +129 -0
  535. package/dist/routes/audit/schema.d.ts.map +1 -0
  536. package/dist/routes/audit/schema.js +43 -0
  537. package/dist/routes/audit/schema.js.map +1 -0
  538. package/dist/routes/auth/desktop-session.d.ts +48 -0
  539. package/dist/routes/auth/desktop-session.d.ts.map +1 -0
  540. package/dist/routes/auth/desktop-session.js +132 -0
  541. package/dist/routes/auth/desktop-session.js.map +1 -0
  542. package/dist/routes/auth/handlers.d.ts +21 -0
  543. package/dist/routes/auth/handlers.d.ts.map +1 -0
  544. package/dist/routes/auth/handlers.js +256 -0
  545. package/dist/routes/auth/handlers.js.map +1 -0
  546. package/dist/routes/auth/index.d.ts +27 -0
  547. package/dist/routes/auth/index.d.ts.map +1 -0
  548. package/dist/routes/auth/index.js +67 -0
  549. package/dist/routes/auth/index.js.map +1 -0
  550. package/dist/routes/auth/schema.d.ts +129 -0
  551. package/dist/routes/auth/schema.d.ts.map +1 -0
  552. package/dist/routes/auth/schema.js +84 -0
  553. package/dist/routes/auth/schema.js.map +1 -0
  554. package/dist/routes/bootstrap/handlers.d.ts +34 -0
  555. package/dist/routes/bootstrap/handlers.d.ts.map +1 -0
  556. package/dist/routes/bootstrap/handlers.js +96 -0
  557. package/dist/routes/bootstrap/handlers.js.map +1 -0
  558. package/dist/routes/bootstrap/index.d.ts +9 -0
  559. package/dist/routes/bootstrap/index.d.ts.map +1 -0
  560. package/dist/routes/bootstrap/index.js +16 -0
  561. package/dist/routes/bootstrap/index.js.map +1 -0
  562. package/dist/routes/bootstrap/schema.d.ts +177 -0
  563. package/dist/routes/bootstrap/schema.d.ts.map +1 -0
  564. package/dist/routes/bootstrap/schema.js +55 -0
  565. package/dist/routes/bootstrap/schema.js.map +1 -0
  566. package/dist/routes/connections/index.d.ts +21 -0
  567. package/dist/routes/connections/index.d.ts.map +1 -0
  568. package/dist/routes/connections/index.js +260 -0
  569. package/dist/routes/connections/index.js.map +1 -0
  570. package/dist/routes/connections/schema.d.ts +161 -0
  571. package/dist/routes/connections/schema.d.ts.map +1 -0
  572. package/dist/routes/connections/schema.js +91 -0
  573. package/dist/routes/connections/schema.js.map +1 -0
  574. package/dist/routes/data/index.d.ts +46 -0
  575. package/dist/routes/data/index.d.ts.map +1 -0
  576. package/dist/routes/data/index.js +508 -0
  577. package/dist/routes/data/index.js.map +1 -0
  578. package/dist/routes/data/schema.d.ts +128 -0
  579. package/dist/routes/data/schema.d.ts.map +1 -0
  580. package/dist/routes/data/schema.js +83 -0
  581. package/dist/routes/data/schema.js.map +1 -0
  582. package/dist/routes/desktop/index.d.ts +61 -0
  583. package/dist/routes/desktop/index.d.ts.map +1 -0
  584. package/dist/routes/desktop/index.js +91 -0
  585. package/dist/routes/desktop/index.js.map +1 -0
  586. package/dist/routes/desktop/schema.d.ts +71 -0
  587. package/dist/routes/desktop/schema.d.ts.map +1 -0
  588. package/dist/routes/desktop/schema.js +58 -0
  589. package/dist/routes/desktop/schema.js.map +1 -0
  590. package/dist/routes/desktop-capabilities/index.d.ts +9 -0
  591. package/dist/routes/desktop-capabilities/index.d.ts.map +1 -0
  592. package/dist/routes/desktop-capabilities/index.js +62 -0
  593. package/dist/routes/desktop-capabilities/index.js.map +1 -0
  594. package/dist/routes/desktop-capabilities/schema.d.ts +46 -0
  595. package/dist/routes/desktop-capabilities/schema.d.ts.map +1 -0
  596. package/dist/routes/desktop-capabilities/schema.js +30 -0
  597. package/dist/routes/desktop-capabilities/schema.js.map +1 -0
  598. package/dist/routes/desktop-demo/handlers.d.ts +94 -0
  599. package/dist/routes/desktop-demo/handlers.d.ts.map +1 -0
  600. package/dist/routes/desktop-demo/handlers.js +182 -0
  601. package/dist/routes/desktop-demo/handlers.js.map +1 -0
  602. package/dist/routes/desktop-demo/index.d.ts +39 -0
  603. package/dist/routes/desktop-demo/index.d.ts.map +1 -0
  604. package/dist/routes/desktop-demo/index.js +73 -0
  605. package/dist/routes/desktop-demo/index.js.map +1 -0
  606. package/dist/routes/desktop-demo/schema.d.ts +17 -0
  607. package/dist/routes/desktop-demo/schema.d.ts.map +1 -0
  608. package/dist/routes/desktop-demo/schema.js +30 -0
  609. package/dist/routes/desktop-demo/schema.js.map +1 -0
  610. package/dist/routes/desktop-lan/index.d.ts +54 -0
  611. package/dist/routes/desktop-lan/index.d.ts.map +1 -0
  612. package/dist/routes/desktop-lan/index.js +33 -0
  613. package/dist/routes/desktop-lan/index.js.map +1 -0
  614. package/dist/routes/desktop-lan/schema.d.ts +24 -0
  615. package/dist/routes/desktop-lan/schema.d.ts.map +1 -0
  616. package/dist/routes/desktop-lan/schema.js +40 -0
  617. package/dist/routes/desktop-lan/schema.js.map +1 -0
  618. package/dist/routes/desktop-local-db/handlers.d.ts +92 -0
  619. package/dist/routes/desktop-local-db/handlers.d.ts.map +1 -0
  620. package/dist/routes/desktop-local-db/handlers.js +300 -0
  621. package/dist/routes/desktop-local-db/handlers.js.map +1 -0
  622. package/dist/routes/desktop-local-db/index.d.ts +39 -0
  623. package/dist/routes/desktop-local-db/index.d.ts.map +1 -0
  624. package/dist/routes/desktop-local-db/index.js +83 -0
  625. package/dist/routes/desktop-local-db/index.js.map +1 -0
  626. package/dist/routes/desktop-local-db/placeholder.d.ts +75 -0
  627. package/dist/routes/desktop-local-db/placeholder.d.ts.map +1 -0
  628. package/dist/routes/desktop-local-db/placeholder.js +420 -0
  629. package/dist/routes/desktop-local-db/placeholder.js.map +1 -0
  630. package/dist/routes/desktop-local-db/schema.d.ts +50 -0
  631. package/dist/routes/desktop-local-db/schema.d.ts.map +1 -0
  632. package/dist/routes/desktop-local-db/schema.js +71 -0
  633. package/dist/routes/desktop-local-db/schema.js.map +1 -0
  634. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts +104 -0
  635. package/dist/routes/desktop-local-db/sqlite-ddl.d.ts.map +1 -0
  636. package/dist/routes/desktop-local-db/sqlite-ddl.js +419 -0
  637. package/dist/routes/desktop-local-db/sqlite-ddl.js.map +1 -0
  638. package/dist/routes/email-templates/index.d.ts +7 -0
  639. package/dist/routes/email-templates/index.d.ts.map +1 -0
  640. package/dist/routes/email-templates/index.js +70 -0
  641. package/dist/routes/email-templates/index.js.map +1 -0
  642. package/dist/routes/email-templates/schema.d.ts +54 -0
  643. package/dist/routes/email-templates/schema.d.ts.map +1 -0
  644. package/dist/routes/email-templates/schema.js +35 -0
  645. package/dist/routes/email-templates/schema.js.map +1 -0
  646. package/dist/routes/exports/index.d.ts +19 -0
  647. package/dist/routes/exports/index.d.ts.map +1 -0
  648. package/dist/routes/exports/index.js +145 -0
  649. package/dist/routes/exports/index.js.map +1 -0
  650. package/dist/routes/exports/schema.d.ts +183 -0
  651. package/dist/routes/exports/schema.d.ts.map +1 -0
  652. package/dist/routes/exports/schema.js +37 -0
  653. package/dist/routes/exports/schema.js.map +1 -0
  654. package/dist/routes/generate/index.d.ts +23 -0
  655. package/dist/routes/generate/index.d.ts.map +1 -0
  656. package/dist/routes/generate/index.js +80 -0
  657. package/dist/routes/generate/index.js.map +1 -0
  658. package/dist/routes/generate/schema.d.ts +43 -0
  659. package/dist/routes/generate/schema.d.ts.map +1 -0
  660. package/dist/routes/generate/schema.js +37 -0
  661. package/dist/routes/generate/schema.js.map +1 -0
  662. package/dist/routes/imports/index.d.ts +21 -0
  663. package/dist/routes/imports/index.d.ts.map +1 -0
  664. package/dist/routes/imports/index.js +288 -0
  665. package/dist/routes/imports/index.js.map +1 -0
  666. package/dist/routes/imports/schema.d.ts +292 -0
  667. package/dist/routes/imports/schema.d.ts.map +1 -0
  668. package/dist/routes/imports/schema.js +78 -0
  669. package/dist/routes/imports/schema.js.map +1 -0
  670. package/dist/routes/index.d.ts +11 -0
  671. package/dist/routes/index.d.ts.map +1 -0
  672. package/dist/routes/index.js +8 -0
  673. package/dist/routes/index.js.map +1 -0
  674. package/dist/routes/jobs/index.d.ts +29 -0
  675. package/dist/routes/jobs/index.d.ts.map +1 -0
  676. package/dist/routes/jobs/index.js +175 -0
  677. package/dist/routes/jobs/index.js.map +1 -0
  678. package/dist/routes/jobs/schema.d.ts +170 -0
  679. package/dist/routes/jobs/schema.d.ts.map +1 -0
  680. package/dist/routes/jobs/schema.js +57 -0
  681. package/dist/routes/jobs/schema.js.map +1 -0
  682. package/dist/routes/llm/config-service.d.ts +48 -0
  683. package/dist/routes/llm/config-service.d.ts.map +1 -0
  684. package/dist/routes/llm/config-service.js +102 -0
  685. package/dist/routes/llm/config-service.js.map +1 -0
  686. package/dist/routes/llm/index.d.ts +69 -0
  687. package/dist/routes/llm/index.d.ts.map +1 -0
  688. package/dist/routes/llm/index.js +412 -0
  689. package/dist/routes/llm/index.js.map +1 -0
  690. package/dist/routes/llm/schema.d.ts +605 -0
  691. package/dist/routes/llm/schema.d.ts.map +1 -0
  692. package/dist/routes/llm/schema.js +238 -0
  693. package/dist/routes/llm/schema.js.map +1 -0
  694. package/dist/routes/me/handlers.d.ts +14 -0
  695. package/dist/routes/me/handlers.d.ts.map +1 -0
  696. package/dist/routes/me/handlers.js +88 -0
  697. package/dist/routes/me/handlers.js.map +1 -0
  698. package/dist/routes/me/index.d.ts +8 -0
  699. package/dist/routes/me/index.d.ts.map +1 -0
  700. package/dist/routes/me/index.js +17 -0
  701. package/dist/routes/me/index.js.map +1 -0
  702. package/dist/routes/me/schema.d.ts +270 -0
  703. package/dist/routes/me/schema.d.ts.map +1 -0
  704. package/dist/routes/me/schema.js +59 -0
  705. package/dist/routes/me/schema.js.map +1 -0
  706. package/dist/routes/me-views/index.d.ts +23 -0
  707. package/dist/routes/me-views/index.d.ts.map +1 -0
  708. package/dist/routes/me-views/index.js +76 -0
  709. package/dist/routes/me-views/index.js.map +1 -0
  710. package/dist/routes/me-views/schema.d.ts +44 -0
  711. package/dist/routes/me-views/schema.d.ts.map +1 -0
  712. package/dist/routes/me-views/schema.js +13 -0
  713. package/dist/routes/me-views/schema.js.map +1 -0
  714. package/dist/routes/notifications/index.d.ts +19 -0
  715. package/dist/routes/notifications/index.d.ts.map +1 -0
  716. package/dist/routes/notifications/index.js +123 -0
  717. package/dist/routes/notifications/index.js.map +1 -0
  718. package/dist/routes/notifications/schema.d.ts +122 -0
  719. package/dist/routes/notifications/schema.d.ts.map +1 -0
  720. package/dist/routes/notifications/schema.js +83 -0
  721. package/dist/routes/notifications/schema.js.map +1 -0
  722. package/dist/routes/onboarding/derive.d.ts +41 -0
  723. package/dist/routes/onboarding/derive.d.ts.map +1 -0
  724. package/dist/routes/onboarding/derive.js +30 -0
  725. package/dist/routes/onboarding/derive.js.map +1 -0
  726. package/dist/routes/onboarding/index.d.ts +26 -0
  727. package/dist/routes/onboarding/index.d.ts.map +1 -0
  728. package/dist/routes/onboarding/index.js +95 -0
  729. package/dist/routes/onboarding/index.js.map +1 -0
  730. package/dist/routes/onboarding/schema.d.ts +22 -0
  731. package/dist/routes/onboarding/schema.d.ts.map +1 -0
  732. package/dist/routes/onboarding/schema.js +22 -0
  733. package/dist/routes/onboarding/schema.js.map +1 -0
  734. package/dist/routes/pages/index.d.ts +26 -0
  735. package/dist/routes/pages/index.d.ts.map +1 -0
  736. package/dist/routes/pages/index.js +119 -0
  737. package/dist/routes/pages/index.js.map +1 -0
  738. package/dist/routes/pages/layout-schema.d.ts +19 -0
  739. package/dist/routes/pages/layout-schema.d.ts.map +1 -0
  740. package/dist/routes/pages/layout-schema.js +19 -0
  741. package/dist/routes/pages/layout-schema.js.map +1 -0
  742. package/dist/routes/pages/schema.d.ts +52 -0
  743. package/dist/routes/pages/schema.d.ts.map +1 -0
  744. package/dist/routes/pages/schema.js +35 -0
  745. package/dist/routes/pages/schema.js.map +1 -0
  746. package/dist/routes/roles/index.d.ts +17 -0
  747. package/dist/routes/roles/index.d.ts.map +1 -0
  748. package/dist/routes/roles/index.js +255 -0
  749. package/dist/routes/roles/index.js.map +1 -0
  750. package/dist/routes/roles/schema.d.ts +94 -0
  751. package/dist/routes/roles/schema.d.ts.map +1 -0
  752. package/dist/routes/roles/schema.js +57 -0
  753. package/dist/routes/roles/schema.js.map +1 -0
  754. package/dist/routes/scheduled-reports/index.d.ts +15 -0
  755. package/dist/routes/scheduled-reports/index.d.ts.map +1 -0
  756. package/dist/routes/scheduled-reports/index.js +195 -0
  757. package/dist/routes/scheduled-reports/index.js.map +1 -0
  758. package/dist/routes/scheduled-reports/schema.d.ts +154 -0
  759. package/dist/routes/scheduled-reports/schema.d.ts.map +1 -0
  760. package/dist/routes/scheduled-reports/schema.js +49 -0
  761. package/dist/routes/scheduled-reports/schema.js.map +1 -0
  762. package/dist/routes/schema/index.d.ts +24 -0
  763. package/dist/routes/schema/index.d.ts.map +1 -0
  764. package/dist/routes/schema/index.js +224 -0
  765. package/dist/routes/schema/index.js.map +1 -0
  766. package/dist/routes/schema/schema.d.ts +92 -0
  767. package/dist/routes/schema/schema.d.ts.map +1 -0
  768. package/dist/routes/schema/schema.js +64 -0
  769. package/dist/routes/schema/schema.js.map +1 -0
  770. package/dist/routes/schema-import/fallback-parser.d.ts +35 -0
  771. package/dist/routes/schema-import/fallback-parser.d.ts.map +1 -0
  772. package/dist/routes/schema-import/fallback-parser.js +349 -0
  773. package/dist/routes/schema-import/fallback-parser.js.map +1 -0
  774. package/dist/routes/schema-import/index.d.ts +43 -0
  775. package/dist/routes/schema-import/index.d.ts.map +1 -0
  776. package/dist/routes/schema-import/index.js +167 -0
  777. package/dist/routes/schema-import/index.js.map +1 -0
  778. package/dist/routes/schema-import/schema.d.ts +65 -0
  779. package/dist/routes/schema-import/schema.d.ts.map +1 -0
  780. package/dist/routes/schema-import/schema.js +40 -0
  781. package/dist/routes/schema-import/schema.js.map +1 -0
  782. package/dist/routes/search/index.d.ts +71 -0
  783. package/dist/routes/search/index.d.ts.map +1 -0
  784. package/dist/routes/search/index.js +361 -0
  785. package/dist/routes/search/index.js.map +1 -0
  786. package/dist/routes/search/schema.d.ts +125 -0
  787. package/dist/routes/search/schema.d.ts.map +1 -0
  788. package/dist/routes/search/schema.js +70 -0
  789. package/dist/routes/search/schema.js.map +1 -0
  790. package/dist/routes/settings/index.d.ts +24 -0
  791. package/dist/routes/settings/index.d.ts.map +1 -0
  792. package/dist/routes/settings/index.js +164 -0
  793. package/dist/routes/settings/index.js.map +1 -0
  794. package/dist/routes/settings/schema.d.ts +110 -0
  795. package/dist/routes/settings/schema.d.ts.map +1 -0
  796. package/dist/routes/settings/schema.js +71 -0
  797. package/dist/routes/settings/schema.js.map +1 -0
  798. package/dist/routes/setup/index.d.ts +29 -0
  799. package/dist/routes/setup/index.d.ts.map +1 -0
  800. package/dist/routes/setup/index.js +68 -0
  801. package/dist/routes/setup/index.js.map +1 -0
  802. package/dist/routes/setup/schema.d.ts +61 -0
  803. package/dist/routes/setup/schema.d.ts.map +1 -0
  804. package/dist/routes/setup/schema.js +47 -0
  805. package/dist/routes/setup/schema.js.map +1 -0
  806. package/dist/routes/system/handlers.d.ts +63 -0
  807. package/dist/routes/system/handlers.d.ts.map +1 -0
  808. package/dist/routes/system/handlers.js +121 -0
  809. package/dist/routes/system/handlers.js.map +1 -0
  810. package/dist/routes/system/index.d.ts +34 -0
  811. package/dist/routes/system/index.d.ts.map +1 -0
  812. package/dist/routes/system/index.js +18 -0
  813. package/dist/routes/system/index.js.map +1 -0
  814. package/dist/routes/system/schema.d.ts +93 -0
  815. package/dist/routes/system/schema.d.ts.map +1 -0
  816. package/dist/routes/system/schema.js +109 -0
  817. package/dist/routes/system/schema.js.map +1 -0
  818. package/dist/routes/views/index.d.ts +21 -0
  819. package/dist/routes/views/index.d.ts.map +1 -0
  820. package/dist/routes/views/index.js +155 -0
  821. package/dist/routes/views/index.js.map +1 -0
  822. package/dist/routes/views/schema.d.ts +127 -0
  823. package/dist/routes/views/schema.d.ts.map +1 -0
  824. package/dist/routes/views/schema.js +56 -0
  825. package/dist/routes/views/schema.js.map +1 -0
  826. package/dist/routes/widget-data/index.d.ts +29 -0
  827. package/dist/routes/widget-data/index.d.ts.map +1 -0
  828. package/dist/routes/widget-data/index.js +152 -0
  829. package/dist/routes/widget-data/index.js.map +1 -0
  830. package/dist/routes/widget-data/schema.d.ts +252 -0
  831. package/dist/routes/widget-data/schema.d.ts.map +1 -0
  832. package/dist/routes/widget-data/schema.js +44 -0
  833. package/dist/routes/widget-data/schema.js.map +1 -0
  834. package/dist/setup/service.d.ts +63 -0
  835. package/dist/setup/service.d.ts.map +1 -0
  836. package/dist/setup/service.js +103 -0
  837. package/dist/setup/service.js.map +1 -0
  838. package/dist/start.d.ts +12 -0
  839. package/dist/start.d.ts.map +1 -0
  840. package/dist/start.js +28 -0
  841. package/dist/start.js.map +1 -0
  842. package/dist/telemetry/payload.d.ts +66 -0
  843. package/dist/telemetry/payload.d.ts.map +1 -0
  844. package/dist/telemetry/payload.js +69 -0
  845. package/dist/telemetry/payload.js.map +1 -0
  846. package/dist/telemetry/service.d.ts +67 -0
  847. package/dist/telemetry/service.d.ts.map +1 -0
  848. package/dist/telemetry/service.js +103 -0
  849. package/dist/telemetry/service.js.map +1 -0
  850. package/dist/telemetry/update-check.d.ts +79 -0
  851. package/dist/telemetry/update-check.d.ts.map +1 -0
  852. package/dist/telemetry/update-check.js +103 -0
  853. package/dist/telemetry/update-check.js.map +1 -0
  854. package/dist/version.d.ts +14 -0
  855. package/dist/version.d.ts.map +1 -0
  856. package/dist/version.js +21 -0
  857. package/dist/version.js.map +1 -0
  858. package/dist/widget-data/cache.d.ts +35 -0
  859. package/dist/widget-data/cache.d.ts.map +1 -0
  860. package/dist/widget-data/cache.js +67 -0
  861. package/dist/widget-data/cache.js.map +1 -0
  862. package/dist/widget-data/compiler.d.ts +107 -0
  863. package/dist/widget-data/compiler.d.ts.map +1 -0
  864. package/dist/widget-data/compiler.js +362 -0
  865. package/dist/widget-data/compiler.js.map +1 -0
  866. package/dist/widget-data/shapers.d.ts +75 -0
  867. package/dist/widget-data/shapers.d.ts.map +1 -0
  868. package/dist/widget-data/shapers.js +128 -0
  869. package/dist/widget-data/shapers.js.map +1 -0
  870. package/dist/widget-data/stream-publisher.d.ts +42 -0
  871. package/dist/widget-data/stream-publisher.d.ts.map +1 -0
  872. package/dist/widget-data/stream-publisher.js +34 -0
  873. package/dist/widget-data/stream-publisher.js.map +1 -0
  874. package/package.json +79 -0
  875. package/vocabulary/llm-allowlist.json +76 -0
@@ -0,0 +1,2 @@
1
+ const e={common:{dismiss:"关闭",notifications:"通知",retry:"重试",undo:"撤销",close:"关闭",cancel:"取消",back:"返回",loading:"加载中",clearSearch:"清除搜索",clear:"清除",save:"保存"},auth:{headline:"把任何数据库变成仪表盘。",trust:"AGPL 核心 · 自托管 · 数据始终归你所有",signIn:{title:"欢迎回来",subtitle:"登录你的 Adminium 工作区。",email:"邮箱",emailInvalid:"请输入有效的邮箱地址。",password:"密码",passwordRequired:"请输入密码。",showPassword:"显示密码",hidePassword:"隐藏密码",remember:"保持登录状态",forgot:"忘记了?",submit:"登录",invalid:"邮箱或密码不正确。",rateLimited:"尝试次数过多——请一分钟后再试。",failed:"登录失败。请检查网络连接后重试。"},forgot:{title:"重置密码",email:"邮箱",emailInvalid:"请输入有效的邮箱地址。",submit:"发送重置链接",sentTitle:"请查收邮件",resend:"再发一次",back:"返回登录",done:"返回登录",rateLimited:"请求过多——请稍后再试。",failed:"出错了。请重试。",smtpUnconfigured:"此 Adminium 未配置邮件服务器,无法发送重置链接。请让管理员为你重置密码。"},reset:{title:"设置新密码",subtitle:"至少 8 个字符。",password:"新密码",confirm:"确认密码",showPassword:"显示密码",hidePassword:"隐藏密码",strength:"密码强度",weak:"弱",fair:"一般",good:"良好",strong:"强",tooShort:"请至少使用 8 个字符。",submit:"重置密码",failed:"重置失败。请重试。"},otp:{title:"双重验证",subtitle:"请输入验证器应用中的 6 位数字验证码。",code:"一次性验证码",recoveryCode:"恢复代码",useRecovery:"设备丢失?使用恢复代码",useAuthenticator:"改用验证器应用",submit:"验证",invalid:"验证码不正确。请重试。",failed:"验证失败。请检查网络连接后重试。"}},nav:{home:"首页",primary:"主要",account:"账户",signOut:"退出登录",empty:"连接数据库后,页面会显示在这里。",connection:{shared:"共享",unnamed:"连接"},imports:"导入数据",exports:"数据导出",emailTemplates:"邮件模板",notificationSettings:"通知设置",scheduledReports:"定时报告",group:{workspace:"工作区",library:"资源库",planning:"规划",people:"人员",account:"账户"}},topbar:{search:"搜索…",notifications:"通知",notificationsLoading:"正在加载通知",notificationsError:"无法加载通知。",notificationsEmpty:"没有新通知。",theme:"切换浅色 / 深色",userMenu:"账户菜单",profile:"个人资料",preferences:"偏好设置",signOut:"退出登录"},palette:{dialog:"命令面板",placeholder:"输入命令或搜索…",navigate:"导航",actions:"操作",askAi:"询问 AI",shortcuts:"键盘快捷键",signOut:"退出登录",themeDark:"切换到深色主题",themeLight:"切换到浅色主题",footerNavigate:"导航",footerOpen:"选择",footerClose:"关闭"},shortcuts:{title:"键盘快捷键",subtitle:"在 Adminium 中更高效地工作",close:"关闭",dismiss:"关闭或取消",palette:"打开命令面板",panel:"显示快捷键面板",search:"聚焦搜索框",sidebar:"切换侧边栏",theme:"切换浅色 / 深色",then:"然后",footerPre:"随时按",footerPost:"即可打开此面板。"},states:{checked:"8 秒前检查过",diagnostics:"诊断"},notFound:{title:"页面不见了",errorLine:"错误 404",searchPlaceholder:"搜索页面…",matches:"匹配的页面",popular:"常用页面",goBack:"返回",backToDashboard:"回到仪表盘"},page:{invalid:{title:"此页面的配置无效",body:"存储的页面文档未通过校验,无法渲染。"},renderError:{title:"此页面渲染失败"},tooNew:{title:"此页面需要更新版本的 Adminium"},unknownTemplate:{title:"未知的页面模板"}},mutation:{created:"记录已创建",updated:"记录已更新",deleted:"记录已删除"},undo:{done:"更改已撤销",failed:"无法撤销此更改"},prefs:{theme:{label:"主题",light:"浅色",dark:"深色",system:"跟随系统"},accent:{label:"强调色",indigo:"靛蓝",blue:"蓝色",teal:"青色",violet:"紫色",rose:"玫红",red:"红色",orange:"橙色",black:"黑色"},density:{label:"密度",comfortable:"舒适",compact:"紧凑"},locale:{label:"语言",directionNote:"文字方向:从右到左(由语言自动设定)"}},account:{title:"账户",subtitle:"当前会话的身份信息。显示偏好和通知设置请在各自的专属页面中管理。",preferencesLink:"偏好设置",notificationsLink:"通知设置",name:"姓名",email:"邮箱",roles:"角色",twoFactor:"双重验证",on:"已启用",off:"未启用",preferences:{title:"偏好设置",subtitle:"Adminium 在你这里的外观与语言——在这台设备和你登录的每台设备上生效。",workspaceDefault:"工作区默认",personal:"个人",usingDefault:"正在使用工作区默认值({value})",reset:"恢复为工作区默认值",resetFailed:"无法重置此偏好。请重试。",appliesInstantly:"更改会立即生效,并保存到你的个人资料。"}},settings:{defaults:{title:"全局默认值",subtitle:"适用于整个工作区的外观与语言默认值。",explainer:"这些默认值适用于所有未自行覆盖的用户。任何人都可以在「个人资料 → 偏好设置」中设置自己的偏好——对该用户而言,个人偏好始终优先。",appearanceHeading:"外观默认值",languageHeading:"语言与区域默认值",adoption:"共 {total, plural, other {# 位用户}},其中 {following, number} 位遵循此默认值。",weekStartNote:"每周起始日与数字格式跟随所选语言。",save:"保存默认值",saved:"工作区默认值已更新",saveFailed:"无法保存工作区默认值。请重试。",liveNote:"保存后更改会实时推送——遵循默认值的在线用户无需刷新即可看到。"},notifications:{subtitle:"选择通知内容与方式",matrixLabel:"通知我",rowHeader:"事件",saving:"保存中…",saved:"已保存",unavailable:"暂不可用",loading:"正在加载偏好设置",errorTitle:"无法加载这些设置",emptyTitle:"暂无可配置项",emptyBody:"随着功能上线,通知事件将显示在这里。",saveFailed:"无法保存此更改。"}},studio:{source:{engine:{label:"数据库引擎",postgres:"PostgreSQL",mysql:"MySQL / MariaDB",sqlite:"SQLite"},format:{label:"架构格式",helper:"除非自动检测出错,否则保持自动检测即可。",auto:"自动检测",sql:"SQL DDL / pg_dump",prisma:"Prisma 架构",drizzle:"Drizzle ORM",typeorm:"TypeORM 实体",sequelize:"Sequelize 模型",rails:"Rails schema.rb",django:"Django models.py",json:"Adminium JSON"},sqlite:{file:"数据库文件路径",helper:"SQLite 是文件而非服务器——请填写运行 Adminium 的机器上的绝对路径。"},file:{detectedAs:"检测到:{format}",moreWarnings:"另有 {count} 条警告——完整列表将在分析步骤中显示。",dropTitle:"将架构文件拖放到此处,或浏览选择",dropHint:"SQL DDL / pg_dump、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型、Adminium JSON",pitch:"无需数据库连接——我们解析你的架构文件并构建相同的仪表板。",parsing:"正在读取上传的架构文件…",tables:"个表",columns:"列",warnings:"警告",errorTitle:"无法解析该文件",parseFailed:"我们无法解析该文件。如果自动检测判断有误,请明确选择格式后重试。",unsupported:"无法识别该格式——支持 SQL DDL、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型和 Adminium JSON。请明确选择一种后重试。",requestFailed:"上传失败——请检查网络连接后重试。"},title:"连接你的数据库",subtitle:"将 Adminium 指向一个数据库,我们会根据其架构生成管理仪表板。",name:"连接名称",namePlaceholder:"生产环境 Postgres",modeLabel:"来源输入方式",mode:{dsn:"连接字符串",fields:"逐项填写",file:"架构文件"},dsn:{label:"连接字符串",helper:"postgres://user:password@host:5432/database——mysql:// 和 sqlite: 也可用。",incomplete:"请补全主机和数据库,例如 postgres://user@host:5432/db",invalidScheme:"无法识别的协议——应为 postgres://、mysql://、mariadb:// 或 sqlite:",quickFill:"快速填充:"},fields:{host:"主机",port:"端口",database:"数据库",user:"用户",password:"密码",ssl:"SSL 模式",preview:"连接字符串预览:"},readOnlyRole:{title:"使用只读角色",body:"Adminium 绝不会写入你的数据库——设置过程仅使用架构元数据。建议使用仅有 SELECT 权限的专用用户;Adminium 自己的表放在哪里,可在元数据存储步骤中决定。"}},capability:{mysqlApproxRows:"MySQL 的行数来自存储引擎估算(偏差可达 ±40%),以 ≈ 显示。",mysqlFkEnum:"MySQL 的外键/枚举元数据较弱:MyISAM 表不声明外键,枚举是按列的 enum(…) 类型,CHECK 约束需要 MySQL 8.0.16+ / MariaDB 10.2+。",sqliteCheckEnums:"SQLite 没有原生枚举类型——枚举由 CHECK (col IN (…)) 约束合成。",sqliteNoComments:"SQLite 不支持列注释——请在架构重映射编辑器中添加标签。",importNoRowCounts:"架构文件不包含行数——表格列表显示 — 而不是编造的数字。",importNoLiveHealth:"没有实时数据库连接——此来源无法进行健康检查和架构漂移检测。",rowsUnavailable:"架构文件没有实时数据库——在连接数据库之前行数未知。",rowsRunAnalyze:"尚无估算——请在数据库上运行 ANALYZE 以获取行数。",rowsNoEstimate:"引擎未报告此表的行数估算。",rowsApproximate:"存储引擎估算——在 InnoDB 上偏差可达 ±40%。"},test:{log:{moreWarnings:"另有 {count} 条解析器警告",connecting:"正在建立安全连接…",connected:"已连接({latency} 毫秒)· 只读自省",connectFailed:"连接失败。",readingSchema:"正在读取架构:public",readingFile:"正在读取上传的架构文件…",parsingFile:"正在解析 {file}…",detected:"检测到 {tables} 个表 · {columns} 列",found:"共发现 {tables} 个表 · {columns} 列",mapping:"正在映射列类型 → 输入组件",relations:"正在检测关系…",piiScan:"正在扫描 PII 列…",piiDone:"PII 扫描完成——默认屏蔽 {count} 列",piiDoneUnknown:"PII 扫描完成",jobFailed:"自省失败。",networkFailed:"请求失败——请检查网络连接后重试。",ready:"就绪"},title:"正在分析你的架构",subtitle:"正在自省表、列和关系。这需要几秒钟。",trust:"我们只读取你的架构和数据,不会做任何修改。",errorTitle:"连接失败",retry:"重试",logLabel:"自省日志",hint:{auth:"身份验证失败——请检查 DSN 中的用户名和密码。",hostUnreachable:"主机不可达——请检查主机名和端口,并确认数据库接受来自本机的连接(将我们的 IP 加入允许列表)。",metaPlacement:"该数据源无法承载 Adminium 的元数据表——请改用单独的元数据库继续。",permission:"该角色已连接,但缺少读取架构的权限——请为自省角色授予该架构的 USAGE 权限。",timeout:"数据库未及时响应——请检查网络路径和负载后重试。",tls:"TLS 协商失败——请尝试 sslmode=require,或上传服务器所需的 CA 证书。",unknown:"连接失败——请核对 DSN 后重试。"}},tables:{importNoCounts:"架构文件不包含行数——在连接实时数据库之前,该列显示 —。",title:"选择数据表",subtitle:"选择要包含的表。之后可随时更改。",search:"筛选表…",listLabel:"可包含的表",emptyFilter:"没有匹配筛选条件的表。",pii:"PII",highVolume:"高数据量",highVolumeNote:"超过 100,000 行的表默认不勾选——运维类表很少适合放进仪表板。",joinHidden:"{count} 个关联/系统表已预先隐藏——它们仍支撑多对多关系。"},hub:{title:"数据连接",subtitle:"{total, plural, other {# 个连接中 {healthy, number} 个}}状态正常",connectNew:"新建连接",stats:{connections:"连接",healthy:"正常",tables:"已包含的表",pages:"已生成的页面"},status:{connected:"已连接",error:"错误",unconfigured:"草稿",testing:"测试中…"},card:{readOnly:"只读",tables:"表",pages:"页面",latency:"延迟",latencyMs:"{latency, number} 毫秒",lastIntrospected:"上次内省",never:"从未"},action:{test:"测试",reintrospect:"重新内省",reintrospectFile:"架构文件来源没有在线数据库——请改为重新上传文件。",remap:"重映射架构",delete:"删除"},test:{ok:"连接正常 · {latency, number} 毫秒",failed:"连接测试失败"},introspect:{noChanges:"架构无变化——未创建新快照。",updated:"已重新内省架构",masksProposed:"{count, plural, other {建议对 # 列进行脱敏}}——请在重映射编辑器中查看。",failed:"内省失败,请重试。"},delete:{title:"删除连接",body:"此操作将删除“{name}”及其生成的页面。您的数据库本身不会被改动。",prompt:"输入 {name} 以确认",confirm:"删除连接",cancel:"取消",close:"关闭",success:"连接“{name}”已删除",failed:"无法删除连接,请重试。"},empty:{title:"还没有数据源",body:"连接数据库后,Adminium 会根据其架构生成您的管理面板。",cta:"连接数据库"}},settingsHub:{title:"工作区设置",subtitle:"此工作区的标识、安全与危险操作。",save:"保存更改",saved:"工作区设置已更新",saveFailed:"无法保存工作区设置,请重试。",superAdminOnlyTitle:"需要超级管理员",superAdminOnly:"只有超级管理员才能更改工作区标识和安全设置。",identity:{heading:"工作区标识",appName:{label:"应用名称",helper:"显示在侧边栏、浏览器标题和邮件中。",error:"请输入不超过 60 个字符的名称。"}},security:{heading:"安全",require2fa:{label:"强制双重验证",desc:"每位成员都必须启用双重验证才能登录。"},allowSignup:{label:"允许自助注册",desc:"任何人都可以创建账户——关闭后此工作区仅限邀请。"},sessionTtl:{label:"会话有效期(小时)",error:"介于 {min, number} 到 {max, number} 小时之间。"},passwordMin:{label:"密码最小长度",error:"介于 {min, number} 到 {max, number} 个字符之间。"}},review:{title:"保存工作区设置",subtitle:"保存前请确认您的更改。",confirm:"保存更改",cancel:"取消",close:"关闭",on:"开",off:"关",change:"{before} → {after}"},defaultsCard:{heading:"外观与语言默认值",body:"工作区级的主题、强调色、密度和语言设置位于全局默认值中。",cta:"打开全局默认值"},danger:{heading:"危险区域",subtitle:"不可逆的操作。",empty:"没有可删除的内容——还没有连接。",deleteDesc:"删除该连接及其生成的页面。您的数据库不会被改动。此操作无法撤销。",deleteCta:"删除连接"},aiCard:{heading:"AI 增强",body:"配置 AI 提供方(或复制粘贴往返)来增强标签、分组和关系。",cta:"打开 AI 设置"}},settingsAi:{title:"AI 增强",subtitle:"连接一个模型,让 Adminium 建议标签、分组、关系等——在应用之前始终以差异形式审阅。",saved:"AI 提供方已保存",saveFailed:"无法保存 AI 提供方。请重试。",save:"保存提供方",test:"测试连接",testHintDirty:"测试前请先保存更改。",testing:"正在连接提供方…",testError:"测试失败",testErrorBody:"无法连接到提供方。请检查密钥和基础 URL。",testOk:"已连接到 {model},用时 {latency} 毫秒",testUnknownModel:"提供方",provider:{heading:"AI 提供方",subtitle:"选择 Adminium 如何访问模型来增强你的架构。密钥将加密存储且不再显示。",active:"使用中",anthropic:{label:"Anthropic",desc:"通过 Anthropic API 使用 Claude 模型。"},openai:{label:"OpenAI",desc:"通过 OpenAI API 使用 GPT 模型。"},openaiCompatible:{label:"兼容 OpenAI",desc:"任何使用 OpenAI 协议的端点——Groq、Together、vLLM、LM Studio。"},ollama:{label:"Ollama(本地)",desc:"通过 Ollama 在本地运行模型——无需密钥,无需云端。"},requiresNetwork:"需要联网和 API 密钥",networkDisabledTitle:"此安装已关闭直连 AI 服务商",networkDisabledBody:"此 Adminium 配置为无出站网络访问,无法连接服务商 API。请使用下方的复制粘贴往返方式——无需密钥,也无需联网。"},configure:{heading:"配置 {provider}"},field:{baseUrl:"基础 URL",baseUrlOptional:"除非 Ollama 运行在其他主机上,否则保持不变。",baseUrlHelper:"提供 /chat/completions 的端点根地址。",model:"模型",modelFreeText:"输入你的端点所提供的确切模型 ID。",modelLive:"已从提供方实时加载。",modelStatic:"一份经过验证的列表;保存后输入自定义 ID 可刷新它。",modelLoading:"加载中…",modelPlaceholder:"选择一个模型…",key:"API 密钥",keyStored:"已加密存储。替换它以使用其他密钥。",keyMask:"sk-…{last4}",keyReplace:"替换密钥",keyOptional:"可选——某些端点无需密钥。",keyWriteOnly:"仅写入:保存后将不再显示。",noKeyTitle:"无需 API 密钥",noKeyBody:"Ollama 在本地运行,因此没有任何内容离开这台机器。"},runStatus:{draft:"草稿",running:"运行中",awaitingResponse:"等待响应",validated:"已验证",applied:"已应用",partiallyApplied:"部分应用",failed:"失败",discarded:"已丢弃"},byo:{heading:"没有密钥?使用你自己的 AI 工具",subtitle:"复制粘贴往返——没有任何内容离开这台机器。",body:"Studio 可以根据你的架构生成一个自包含的提示词。在 Claude Code、ChatGPT 或任意工具中运行它,然后将返回的 JSON 粘贴回连接向导。验证、审阅和结果都与直连方式相同。",guaranteeTitle:"无遥测保证",guarantee1:"提示词仅包含你的架构和聚合统计——默认绝不包含行数据。",guarantee2:"不嵌入任何凭据、实例 URL 或标识符。",guarantee3:"BYO 运行不进行任何网络调用。",promptVersion:"提示词 {version}",schemaVersion:"架构 {version}",headingRecommended:"使用你自己的 AI 工具——无需密钥",recommended:"推荐"},history:{heading:"运行历史",subtitle:"过往的增强运行。打开其中一个以审阅其建议。",tableLabel:"增强运行",colDate:"日期",colSource:"来源",colStatus:"状态",colChunks:"分块",openReview:"打开 {date} 的运行审阅",connection:"连接",empty:"暂无增强运行。在连接向导中增强架构后,历史将显示在这里。",errorTitle:"无法加载运行",errorBody:"刷新页面以重试。",noConnections:"请先连接数据库——增强运行按连接记录。",byo:"BYO",directPath:"直连"}},enrich:{title:"使用 AI 丰富",subtitle:"可选择使用 LLM 优化生成的标签、分组、枚举和仪表板。启发式基线无需它即可工作——这仅添加供你在应用前审阅的建议。",intentLabel:"你希望如何丰富?",sectionsLegend:"应由 AI 决定哪些内容?",localesLegend:"将标签翻译为",localeLocked:"(必填)",samplingTitle:"包含示例值",samplingHint:"在提示中为每个非 PII 列最多包含 20 个真实值。",samplingPreviewTitle:"离开此机器的内容",samplingPreviewBody:"每个非 PII 列最多 20 个最常见值,以及数值和日期列的最小/最大值。标记为 PII 的列永不采样。其余所有内容仅保留聚合值。复制前请审阅确切的提示(BYO)——未经你的操作不会发送任何内容。",noSections:"请至少选择一个要丰富的决策组。",generatePrompt:"生成提示",startProvider:"开始丰富",startOver:"重新开始",copied:"已复制",createFailed:"无法构建丰富提示——请重试。",createFailedTitle:"无法启动",providerFallback:"你的 AI 提供商",fileTitle:"AI 丰富需要一个在线数据库",fileBody:"架构文件来源尚无可丰富的快照。连接一个在线数据库以使用 AI 丰富,或继续——启发式基线仍会生成完整的应用。",section:{labels:"标签与描述",groups:"导航分组",enums:"枚举语义",relations:"关系",keys:"关键列",templates:"页面模板",widgets:"仪表板小组件",pii:"PII 与脱敏",icons:"图标",microcopy:"微文案"},provider:{title:"使用我的 AI 提供商",description:"立即使用已配置的提供商运行丰富。你将以差异形式审阅每条建议。",unconfigured:"尚未配置 AI 提供商——请在下方将提示复制到你自己的工具,或先配置一个提供商。",settingsHint:"想直接运行吗?",settingsLink:"在“设置 → AI”中配置提供商",networkDisabled:"此 Adminium 无出站网络访问,无法连接服务商 API。请改用复制粘贴往返方式——同样的提示词,同样的审阅。"},byo:{cardTitle:"复制提示到我自己的 AI 工具",cardDescription:"将一个自包含的提示复制到 Claude Code、ChatGPT 或任何工具——然后将 JSON 粘贴回来。无需密钥,不会自动将任何内容传出此机器。",guidance:"在任意 AI 工具中运行——Claude Code、ChatGPT,皆可。将其返回的 JSON 粘贴到下方。",promptLabel:"丰富提示",promptLabelN:"丰富提示 第 {index} 个,共 {total} 个",tokenChip:"≈ {tokens} 个 token",copyPrompt:"复制提示",copyPromptDone:"提示已复制",download:"下载 .md",chunkTabs:"提示分块",chunkTab:"提示 {index}",chunkValid:"分块 {index} 已验证",pasteLabel:"粘贴 JSON 响应",pastePlaceholder:"在此粘贴 JSON 响应…",validate:"验证",valid:"响应已验证",mergedTitle:"全部 {count} 个分块已验证并合并",mergedTitleSingle:"响应已验证",mergedBody:"建议已准备好,可对照启发式基线进行审阅。",errorsTitle:"验证发现 {count} 个问题",copyErrors:"为你的 AI 工具复制错误",copyErrorsDone:"错误已复制",copyErrorsHint:"将其粘贴回你的 AI 工具以获取更正后的响应。",droppedItems:"有 {count} 条建议在验证时被丢弃——审阅中显示其余内容。",pendingTitle:"验证每个提示以继续",pendingBody:"在上方粘贴 JSON 响应并验证,以继续进行审阅。",pendingBodyChunked:"每个分块都必须先验证,建议才会合并。请粘贴并验证上方的每个提示。",requestFailed:"无法连接服务器进行验证——请重试。",continueReview:"继续审阅",wholeDocument:"整个文档",cardTitleRecommended:"把提示词复制到我自己的 AI 工具——推荐"},direct:{title:"正在使用 AI 丰富",subtitle:"正在将你的架构发送至",building:"正在构建提示…",logLabel:"丰富日志",cancel:"取消",back:"返回选项",retry:"重试",done:"丰富完成——请审阅建议。",continueReview:"继续审阅",failed:"提供商运行失败。请检查你的 AI 设置并重试。",jobFailed:"丰富运行未完成。",startFailed:"无法启动运行——请重试。",errorTitle:"丰富失败"},skip:{title:"跳过——仅使用启发式",description:"从启发式基线生成。你之后可在“设置 → AI”中丰富——跳过绝不会受到惩罚。",confirmTitle:"继续使用启发式",confirmBody:"生成的应用将使用启发式的标签、分组和仪表板。继续生成——你可随时在“设置 → AI”中运行 AI 丰富。"}},review:{unavailableTitle:"审阅界面不可用",unavailableBody:"此版本尚未包含增强审阅界面(06-T14)。它将随差异与应用流程一起推出。"},llmRuns:{review:{header:{title:"审查 AI 建议",model:"模型",snapshot:"快照",byo:"自带",pathDirect:"直接 API",pathByo:"复制粘贴",agree:"{n} 项一致",conflict:"{n} 项冲突",new:"{n} 项新增",rejects:"{n} 项拒绝",countsAria:"建议数量"},bulk:{thresholdLabel:"置信度阈值",thresholdAria:"“全部接受”的置信度阈值",acceptAll:"接受所有 ≥ {pct}%",clear:"清除选择"},section:{selectAllAria:"全选 {group}",acceptedCount:"已接受 {n} 项"},group:{labels:"标签与翻译",navigation:"导航与领域",enums:"枚举语义",relations:"关系",keys:"键列",templates:"页面模板",dashboards:"仪表盘与小组件",pii:"个人信息与脱敏",icons:"图标",microcopy:"微文案"},status:{agree:"一致",conflict:"冲突",new:"新增",heuristicOnly:"仅启发式",rejects:"拒绝启发式",locked:"已锁定"},row:{acceptAria:"接受 {target} 的{noun}建议",keptEdited:"已保留——由您编辑",rejectsCallout:"AI 拒绝了某项启发式决策——接受前请确认。",showTranslations:"显示翻译",hideTranslations:"隐藏翻译",confidenceAria:"置信度 {pct}%",noAi:"无 AI 建议"},value:{none:"无值",absent:"无",dash:"—",display:"显示",key:"键",rank:"排名 {n}",span:"跨度 {n}",tableCount:"{n} 张表",widgetCount:"{n} 个小组件",enumWorkflow:"工作流",enumCategory:"分类",notPii:"非个人信息",label:"标签",description:"描述",subtitle:"页面副标题",headline:"空状态标题",guidance:"空状态提示"},apply:{title:"应用 {n} 项建议",subtitle:"这些更改将在一个事务中写入,并可撤销。",empty:"未选择任何要应用的内容。",confirm:"应用更改"},footer:{count:"已选择 {n} 项建议",apply:"应用 {n} 项已接受的建议",failed:"应用失败"},toast:{applied:"已应用 {n} 项建议",appliedPartial:"已应用 {n} 项建议(部分已跳过)",applyFailed:"无法应用建议",undoFailed:"无法撤销此更改"},error:{title:"无法加载此运行"},notReady:{title:"此运行尚无可审查的建议",body:"运行必须先通过验证,才能审查其建议。请先生成或粘贴响应。"},applied:{title:"此运行已应用",body:"下方已接受的建议为只读。"},empty:{title:"无建议",body:"此运行未生成可审查的建议。"},cat:{label:"标签",key:"键列",enum:"枚举",relation:"关系",pii:"个人信息",template:"页面模板",group:"导航分组",dashboard:"仪表盘",widget:"小组件",copy:"微文案"}}},wizard:{title:"新建连接",back:"返回",continue:"继续",progress:"设置进度",persistFailed:"无法保存你的表选择——请重试。",persistFailedTitle:"保存失败",step:{source:"来源",test:"分析",tables:"数据表",meta:"元数据存储",intent:"意图",enrich:"丰富",generate:"生成"}},meta:{title:"Adminium 应把自己的表放在哪里?",subtitle:"页面、角色、审计日志和设置存放在以 adminium_ 为前缀的表中——绝不混入你的数据。",sameDb:{title:"同一数据库",description:"adminium_* 表将创建在你的源表旁边。这是最简单的设置——需要具有写入和 CREATE TABLE 权限的角色。",disabledReadOnly:"你的角色是只读的——Adminium 绝不会写入此数据库。请为 Adminium 自己的表选择单独的数据库。",disabledNoDdl:"该角色无法执行 DDL——Adminium 迁移需要 CREATE TABLE 权限。请为 Adminium 自己的表选择单独的数据库。",disabledFile:"架构文件没有实时数据库——请为 Adminium 自己的表选择单独的数据库。"},separate:{title:"单独的数据库",description:"Adminium 将其表保存在另一个数据库中。你的源保持不变——只读源必须如此。",dsn:"元数据库连接字符串",helper:"需要写入和 DDL 权限——Adminium 会在那里运行自己的迁移。",test:"测试连接",ok:"兼容——写入 ✓ · DDL ✓",insufficient:"该角色无法承载元数据存储——Adminium 在那里需要写入和 CREATE TABLE 权限。",errorTitle:"元数据存储不兼容"},testFailed:"连接失败。",v1Note:{title:"关于此安装",body:"此服务器在首次启动时选择了元数据存储。此步骤验证你的选择与此连接兼容并记录下来——服务器会独立执行同一规则(409 META_PLACEMENT_INVALID)。迁移现有元数据存储属于运维任务(M10)。"}},intent:{title:"你需要什么?",subtitle:"意图决定生成哪些页面。之后可以更改——更改会提议重新生成,绝不会静默重写。",trust:"我们只读取你的架构——设置期间绝不读取行数据。",fullAdmin:{title:"完整管理面板",description:"仪表板、CRUD 页面、搜索、导入与导出——你的架构支持的一切。"},analytics:{title:"只读分析",description:"仪表板、图表和只读网格。没有表单、没有写入——所有角色上限为查看者。"},crud:{title:"CRUD 数据表",description:"每个表一个编辑页面,外加搜索和导入/导出——极简主页,没有仪表板。"},support:{title:"客服控制台",description:"优先生成队列、工单和客户详情页面。默认关闭删除。(队列模板在 M7 提供——v1 页面集与完整管理面板相同。)"}},generate:{title:"生成你的应用",subtitle:"每个已包含的表一个页面,外加按领域生成的仪表板——意图:",run:"生成仪表板",openApp:"打开你的应用",logLabel:"生成日志",log:{classifying:"正在对架构分类…",composing:"正在组合模板…",writing:"正在写入页面…",done:"已生成 {pages} 个页面,分布于 {groups} 个导航组"},successTitle:"你的仪表板已就绪",successBody:"{pages} 个页面,分布于 {groups} 个导航组——由你的架构生成,可在 Studio 中编辑。",errorTitle:"生成失败",failed:"生成失败——请重试,或先重新运行自省。",fileTitle:"架构文件已解析——生成需要实时数据库",fileBody:"你的架构解析顺利,上方预览是真实的。直接从架构文件生成可运行的应用(含占位行)尚不可用——请连接实时数据库立即生成。"},remap:{column:{nullable:"可为空",labelOverride:"显示标签",labelHelper:"推断:{name}",logicalType:"逻辑类型",logicalTypeHelper:"推断:{type}(来自 {dbType})——由适配器映射;v1 中不可覆盖。",semantic:"语义类型",unclassified:"尚未分类。",semanticHelper:"分类器:{tag} · 置信度 {confidence}% · 来源:{source}",semanticInferred:"推断:{tag}",currency:"货币",currencyHelper:"应用于金额格式化的 ISO 4217 代码。",pii:"默认脱敏",piiHelper:"脱敏值以遮盖形式显示;取消脱敏需要 data.unmask_pii 权限,并会记录到审计日志。",enum:"枚举语义",enumKind:"枚举种类",enumWorkflow:"工作流",enumCategory:"分类",enumLabelFor:"{value} 的标签",enumToneFor:"{value} 的色调",enumToneAuto:"自动",enumHelper:"工作流枚举驱动状态徽章和看板列;色调将各值映射到语义色阶上。"},diff:{one:"1 项更改",count:"{count} 项更改",saved:"覆盖已保存。",revertOne:"还原 {change}",regenerate:"重新生成页面",revertAll:"全部还原",save:"保存覆盖"},table:{iconPicker:"表图标",system:"系统",labelOverride:"显示标签",labelHelper:"推断:{name}",icon:"图标",navGroup:"导航组",navGroupHelper:"导航位置由生成器决定——table.navGroup 覆盖不在 v1 词汇表中。",include:"包含在生成的应用中",includeHelper:"被排除的表不会生成页面,也不会出现在导航中。",shape:"表形态(已分类)",role:"角色",unclassified:"未分类",kind:"种类",hierarchy:"层级",selfFk:"通过 {column} 自引用",polymorphic:"多态列对",rows:"行数估算",shapeHelper:"每次自省都会重新计算分类;覆盖叠加在其上,并在重新生成后保留。"},relations:{declared:"已声明的外键",noneDeclared:"没有已声明的外键涉及此表。",inferred:"推断的关系",noneInferred:"此表没有推断结果。",confidence:"推断 · {pct}%",accepted:"已接受",suppressed:"已屏蔽",accept:"接受",suppress:"屏蔽",overrides:"覆盖关系(已应用)",overrideBadge:"覆盖",add:"添加虚拟关系",fromColumn:"源列",noColumns:"没有匹配的列",fromPlaceholder:"customer_id",toTable:"目标表",noTables:"没有匹配的表",toColumn:"目标列",cardinality:"基数",addButton:"添加关系"},toast:{saved:"架构覆盖已保存",savedDetail:"下方已应用的架构反映了你的更改。",regenerated:"已创建 {created} · 已更新 {updated} · 未变化 {unchanged}",regeneratedDetail:"你手动编辑过的页面会被保留——只有 generated_hash 未被改动的页面才会原地重新生成。",regenerateFailed:"重新生成失败"},title:"架构重映射",subtitle:"{tables} 张表 · 已应用 {applied} 项覆盖",saveFailed:"保存失败:{message}",loadFailed:"无法加载此连接的架构。",inspector:"检查器",empty:{title:"选择一个表或列",description:"在架构树中选择一项,以重映射其标签、类型、关系或脱敏设置。"},tabs:{details:"详情",relations:"关系"},tree:{label:"架构",search:"搜索表和列",searchPlaceholder:"搜索表…",noMatches:"没有与搜索匹配的表。",collapse:"折叠表",expand:"展开表",unsaved:"未保存的更改",excluded:"已排除"},badge:{pk:"主键",fk:"外键",unique:"唯一",pii:"PII",masked:"已脱敏"}}},onboarding:{title:"开始使用",subtitle:"几个步骤,让你的工作区准备就绪。",loading:"正在加载设置清单…",welcome:"欢迎使用 Adminium,{name} 👋",progressBody:"你已完成 {total} 个设置步骤中的 {done} 个。完成其余步骤以解锁完整工作区。",completeBody:"全部就绪 — 你的工作区已完全配置。",ringLabel:"已完成 {total} 个步骤中的 {done} 个",done:"完成",skip:"暂时跳过",goToWorkspace:"前往工作区",help:{title:"需要帮助?",body:"我们随时帮助你快速完成设置。"},steps:{connectDatabase:{title:"连接数据库",desc:"将 Adminium 指向你的 Postgres、MySQL 或 SQLite — 只读角色也可以。",time:"5 分钟",action:"连接"},chooseTables:{title:"选择你的表",desc:"选择哪些表成为页面 — 个人信息默认已脱敏。",time:"2 分钟",action:"选择"},inviteTeammates:{title:"邀请团队成员",desc:"邀请团队一起探索和协作。",time:"2 分钟",action:"邀请"},workspaceDefaults:{title:"设置工作区默认值",desc:"为所有人设置主题、强调色、密度和语言。",time:"1 分钟",action:"设置"}},entry:{wayBack:"开始使用 · {done}/{total}",dismiss:"隐藏设置清单",continue:"继续设置",banner:"完成工作区设置 — 已完成 {total} 个步骤中的 {done} 个。"}},views:{baseView:"全部记录",menuLabel:"已保存视图",saveAs:"将当前保存为视图…",updateActive:"更新“{name}”",rename:"重命名…",setDefault:"设为默认",delete:"删除…",saveTitle:"保存视图",save:"保存视图",renameTitle:"重命名视图",saveName:"保存名称",nameLabel:"视图名称",namePlaceholder:"例如:本月活跃",nameRequired:"请输入此视图的名称。",saveFailed:"无法保存视图。",deleteTitle:"删除视图",deleteBody:"这将移除已保存的视图。你的数据不受影响。",deletePrompt:"输入视图名称以确认",deleteConfirm:"删除视图",savedToast:"视图“{name}”已保存。",updatedToast:"视图“{name}”已更新。",defaultToast:"“{name}”现在是默认视图。",deletedToast:"视图“{name}”已删除。"},builder:{view:"查看",edit:"编辑",done:"完成",addWidget:"添加小组件",saveLayout:"保存布局",saving:"正在保存…",savedShort:"已保存",options:"仪表盘选项",resetLayout:"重置布局",resetTitle:"重置为共享布局?",resetBody:"这将移除你的个人更改并恢复所有人看到的仪表盘。你的数据不受影响。",resetConfirm:"重置布局",resetDone:"布局已重置为共享默认值。",sharedNote:"你正在编辑所有人都能看到的共享仪表盘。",personalNote:"你正在编辑个人布局——只有你能看到这些更改。",savedShared:"仪表盘已为所有有权限的人保存。",empty:"此仪表盘尚无任何小组件。",emptyAction:"添加小组件",palette:{title:"添加小组件",count:"{count} 个小组件",searchLabel:"搜索小组件",searchPlaceholder:"搜索小组件…",clear:"清除搜索",noResults:"没有小组件匹配“{query}”。",add:"添加 {name}",added:"已添加 {name}。"},inspector:{title:"配置小组件",empty:"此小组件没有可配置的选项。",locked:"已锁定",lockedHint:"此字段由数据源设置,无法在此处编辑。",selectPlaceholder:"选择…",increment:"增加",decrement:"减少",done:"完成"},item:{configure:"配置 {name}",duplicate:"复制 {name}",remove:"移除 {name}",removed:"已移除 {name}。",duplicated:"已复制 {name}。"},families:{kpi:"关键指标",charts:"图表",tables:"表格",feeds:"动态",calendar:"日历",boards:"看板",geo:"地图",media:"媒体",communication:"沟通",forms:"表单",chrome:"导航",system:"系统",domain:"领域"},versions:"版本",versionsEmpty:"还没有保存的版本",saveAsVersion:"保存为版本",saveVersionTitle:"保存版本",saveVersionBody:"为当前文档创建快照。可随时从“版本”中恢复。",versionName:"版本名称",versionNamePlaceholder:"例如:Q3 费率调整前"},setup:{title:"设置 Adminium",subtitle:"创建第一位管理员。此操作只进行一次。",progress:"设置进度",steps:{account:"管理员账户",consent:"隐私"},account:{name:"你的姓名",email:"邮箱",emailInvalid:"请输入有效的邮箱地址。",password:"密码",passwordHelper:"至少 {min} 个字符。",passwordTooShort:"请至少使用 {min} 个字符。",confirm:"确认密码",passwordMismatch:"两次输入的密码不一致。",continue:"继续",strength:"密码强度",strengthLevels:{weak:"弱",fair:"一般",good:"良好",strong:"强"}},consent:{telemetry:{title:"共享匿名使用数据",description:"帮助我们了解应优先支持哪些数据库引擎。默认关闭,除非你主动开启。"},updates:{title:"检查新版本",description:"当有新版本(包括安全修复)可用时显示提示。这会向 GitHub 查询最新发行版,因而会向 GitHub 暴露本实例的 IP 地址和版本。除此之外不会发送任何内容。"},sentTitle:"发送的内容仅限于:",sent:{instanceId:"一个随机实例 ID(在本地生成的 UUID;不由你的姓名、主机或数据库推导而来)",version:"本实例运行的 Adminium 版本",engines:"已连接的数据库引擎类型(例如 “postgres”)——仅类型"},neverTitle:"绝不发送:",never:{schema:"你的表结构——不含任何表名、列名或枚举名",rows:"你的数据——从不发送任何一行",connections:"连接字符串、主机名或凭据",people:"用户的邮箱、姓名或 ID",llm:"AI 提示词或运行内容"},reversible:"两项默认均为关闭,之后你可以随时在“设置”中更改。",back:"返回",finish:"创建管理员账户"},error:{alreadyCompleted:"本实例已完成设置。请使用现有的管理员账户登录。",rejected:"服务器拒绝了这些信息。请检查邮箱和密码后重试。",failed:"设置失败。请检查网络连接后重试。"}},about:{title:"关于 Adminium",subtitle:"版本、许可证,以及本实例源代码的位置。",version:"版本",license:"许可证",metaStore:"元数据存储",node:"Node.js",engine:{postgres:"PostgreSQL",mysql:"MySQL / MariaDB",sqlite:"SQLite"},licenseCard:{title:"自由与开源",body:"Adminium 基于 GNU Affero 通用公共许可证 v3.0 授权。你可以自由地运行、研究、修改和分享它。如果你通过网络向他人提供修改后的版本,AGPL 要求你同样向他们提供其源代码。"},viewLicense:"阅读许可证",viewSource:"获取源代码",updates:{title:"更新",description:"本实例是否检查新版本。"},update:{disabled:"更新检查已关闭,因此本实例从不联系 GitHub。可在“设置”中开启以获知新版本。",current:"你正在使用最新版本。",available:"Adminium {version} 已发布",availableBody:"你当前运行的是 {version}。",viewRelease:"查看发行说明"},desktop:{unknown:"未知",appVersion:"应用版本",serverVersion:"服务器版本",migration:"元数据库迁移",electron:"Electron",chromium:"Chromium",runtimeNode:"Node 运行时",system:{title:"系统"},dataDir:"数据目录",reveal:"在文件夹中显示",secret:{title:"密钥存储",safe:"由操作系统加密",plainWarning:"此电脑没有可用的系统钥匙串,因此你的 Adminium 密钥以未加密方式存储在磁盘上。任何能读取本机文件的人都能读取它。请设置登录钥匙串(或 Linux 密钥服务)并重启 Adminium 以保护它。"},updates:{title:"更新",mode:{notify:"有新版本时通知我",manual:"仅在我检查时",disabled:"关闭(离线)"},disabledBody:"自动更新已关闭(离线)。请手动安装新版本。",check:"检查更新",checking:"正在检查…",lastChecked:"上次检查 {when}",available:"版本 {version} 可用",none:"你已是最新版本。",unavailable:"此安装已关闭更新。",error:"无法检查更新。",download:"下载更新",downloading:"正在下载… {percent}%",downloaded:"版本 {version} 已可安装",restart:"重启以安装",downloadError:"下载未完成。你可以重试。",toast:{available:"有新版本的 Adminium 可用",view:"查看",downloaded:"更新已可安装",restart:"立即重启"}},legal:{title:"许可证",agpl:"Adminium Desktop 是遵循 GNU Affero General Public License v3.0 的自由软件。",viewLicense:"查看许可证",licenseTitle:"GNU Affero General Public License v3.0",licenseUnavailable:"此构建中没有随附的许可证文件。",viewNotices:"第三方许可证",noticesTitle:"第三方声明",noticesUnavailable:"第三方声明在应用打包时生成,此构建中不可用。",source:"源代码",close:"关闭"},telemetry:{title:"匿名使用数据",label:"共享匿名使用数据",description:"帮助我们决定优先支持哪些数据库引擎。除非你开启,否则默认关闭;绝不会发送架构、数据或个人信息。",saveFailed:"无法保存该设置。请重试。"},diagnostics:{title:"诊断",description:"有助于你报告问题的详细信息。不包含任何架构或数据。",copy:"复制诊断信息",copied:"已复制",showLogs:"显示日志",dataSize:"数据大小:{size}"}}},apiKeys:{title:"API 密钥与令牌",subtitle:"管理对工作区的程序化访问。",createButton:"创建密钥",copy:"复制",copied:"已复制",revoke:"吊销密钥",neverUsed:"从未使用",lastUsed:"上次使用于 {since}",scopesOverflow:"另有 {count} 项",status:{active:"有效",revoked:"已吊销",expired:"已过期"},list:{title:"密钥",activeCount:"{count, plural, other {# 个有效密钥}}"},empty:{title:"尚无 API 密钥",body:"创建一个,即可在自己的代码中调用 Adminium API。"},revealed:{title:"新密钥已创建",body:"请立即复制 —— 之后将无法再次查看。"},rolesUnavailable:{title:"你无权查看角色",body:"创建密钥需要选择它所代表的角色,而你的账号无法读取角色列表。请向管理员申请“管理角色”权限。"},quickStart:{title:"快速开始",body:"在 Authorization 请求头中携带密钥完成鉴权。"},create:{title:"创建 API 密钥",description:"该密钥将以你所选角色的权限运行。",name:"名称",namePlaceholder:"例如:分析数据管道",role:"角色",roleHelper:"选择能完成任务的最小权限角色。",expires:"过期时间",expiresHelper:"留空表示密钥永不过期。",submit:"创建密钥",failed:"无法创建密钥"},revokeConfirm:{title:"吊销 API 密钥",body:"任何仍在使用“{name}”调用 API 的代码将立即失败。此操作无法撤销。",prompt:"输入“{name}”以确认",confirm:"吊销密钥"}},changelog:{title:"更新日志",subtitle:"产品更新与版本发布。",allReleases:"全部版本",tag:{new:"新增",improved:"改进",fixed:"修复",security:"安全"},filter:{all:"全部",label:"按类型筛选变更"},empty:{title:"该筛选下暂无内容",body:"还没有版本包含此类变更。",clear:"显示全部变更"}},kb:{title:"知识库",subtitle:"{count, plural, other {# 篇指南}} · 完整文档见 docs.adminium.dev",openDocs:"打开文档",browse:"按主题浏览",hero:{title:"需要什么帮助?",subtitle:"搜索指南、API 文档与故障排查。",placeholder:"搜索知识库…",label:"搜索知识库",clear:"清除搜索"},category:{start:"入门",connect:"连接数据",api:"API 与开发",security:"安全与访问",selfhost:"自托管",trouble:"故障排查",count:"{count, plural, other {# 篇文章}}",selected:"筛选中"},list:{all:"全部指南",clear:"清除筛选"},empty:{title:"没有匹配的指南",body:"换个关键词,或前往 docs.adminium.dev 搜索完整文档。",openDocs:"打开文档"},article:{install:{title:"安装 Adminium",excerpt:"从源码检出运行,或使用 docker run,一分钟内进入首次运行向导。"},firstAdmin:{title:"创建第一位超级管理员",excerpt:"首次运行向导会询问什么,以及它为何只能运行一次。"},connectDb:{title:"连接你的第一个数据库",excerpt:"将 Adminium 指向 PostgreSQL、MySQL 或 SQLite,生成后台管理应用。"},schemaFile:{title:"从模式文件生成",excerpt:"上传 Prisma schema、Django models.py、Rails schema.rb 或 .sql 转储 —— 无需数据库连接。"},readOnly:{title:"使用只读角色",excerpt:"内省仅读取模式元数据。请只授予 Adminium 必需的最小权限。"},apiKeys:{title:"使用 API 密钥鉴权",excerpt:"创建与吊销密钥,以及密钥为何只向你展示一次。"},rest:{title:"REST API 参考",excerpt:"生成应用暴露的每个端点,含请求与响应结构。"},manifest:{title:"页面清单",excerpt:"页面如何以配置描述,以及如何手工编辑。"},roles:{title:"角色与权限",excerpt:"分配查看者、编辑者与管理员,并用权限矩阵自建角色。"},audit:{title:"阅读审计日志",excerpt:"谁在何时、从何处更改了什么。"},secrets:{title:"Adminium 如何保存你的机密",excerpt:"连接凭据使用 ADMINIUM_SECRET 加密存储,API 密钥则以哈希保存。"},docker:{title:"使用 Docker 自托管",excerpt:"官方镜像、docker-compose,以及独立元数据库的运行方式。"},backup:{title:"备份与迁移实例",excerpt:"export-zip 打包服务器配置;导入后可在别处重放同一套设置。"},telemetry:{title:"遥测与更新检查",excerpt:"两者均为选择性开启,默认关闭。开启后会发送哪些内容。"},connectionFails:{title:"数据库连接失败",excerpt:"查看诊断卡片:主机、端口、TLS,以及数据库需放行的 IP。"},missingTables:{title:"内省后缺少表",excerpt:"模式可见性、被排除的表,以及重新运行生成。"}}},desktop:{menu:{file:"文件",fileNewDatabase:"新建本地数据库…",fileOpenSqlite:"打开 SQLite 文件…",fileBackupNow:"立即备份…",fileRestore:"从备份恢复…",edit:"编辑",view:"视图",window:"窗口",help:"帮助",helpDocs:"Adminium 文档",helpShortcuts:"键盘快捷键",helpLogs:"显示日志",helpCheckForUpdates:"检查更新…",helpAbout:"关于 Adminium"},settings:{explainer:"这些设置仅适用于这台电脑上的 Adminium 应用,保存在本机,不会保存到你的工作区。"},security:{heading:"登录"},requireLogin:{label:"在此设备上要求登录",description:"Adminium 通常会在这台电脑上自动登录。开启后,每次启动都会要求输入密码——如果其他人也能使用这台电脑,建议开启。该设置将在下次打开 Adminium 时生效。",savedOn:"下次启动时需要登录",savedOff:"Adminium 将在这台电脑上跳过登录",saveFailed:"无法保存该设置,请重试。"},chip:{local:"本地",lanShare:"本地 · 已在局域网共享",remoteDb:"本地 + 远程数据库",remoteDbOffline:"远程数据库离线",remoteDbOfflineDetail:"无法连接 {names}。这些连接的页面会显示重新连接状态。"},lan:{heading:"在局域网中共享",label:"允许此网络中的其他设备使用 Adminium",description:"同一网络中的其他电脑、平板和手机可以在浏览器中打开 Adminium,并用各自的账户登录。Adminium 必须在这台电脑上保持打开,他们才能访问。",savedOn:"正在局域网中共享",savedOff:"已停止共享 — Adminium 恢复为仅限这台电脑",saveFailed:"无法更改网络共享",noUsers:"目前只有你拥有账户,因此还没有其他人能登录。共享仍然可用 — 只是需要先邀请其他人才能使用。",usersUnknown:"Adminium 无法检查这台电脑上还有谁拥有账户。共享仍然有效,任何拥有账户的人都可以登录——只有这项检查失败了。",acknowledge:"我知道了 — 我接下来会邀请其他人",port:"端口",portHelper:"默认 {port}",portInvalid:"请输入 1024 到 65535 之间的数字。",applyPort:"更改端口",portInUse:"端口 {port} 已被其他程序占用。",portInUseHint:"未做任何更改 — 共享仍处于关闭状态。",portInUseNoSuggestion:"未做任何更改。请尝试其他端口。",tryPort:"尝试 {port}",urlsHeading:"在其他设备上打开",noUrls:"这台电脑当前未连接到网络,因此没有可共享的地址。连接 Wi-Fi 或插入网线后,此列表会自动填充。",copyUrl:"复制",sessions:"{count, plural, =0 {没有来自此网络的设备登录} other {已有 # 台设备从此网络登录}}",sessionsUnknown:"正在检查已连接的设备…",pending:"正在开始共享…",mismatch:"Adminium 在此网络中仍可访问",mismatchBody:"共享已关闭,但服务器尚未释放网络。请重启 Adminium 以关闭它。",transportTitle:"局域网中的流量未加密。",transportBody:"仅在你信任的网络中共享。如需远程访问,请使用置于 HTTPS 之后的 Adminium 自托管版本。",firewall:'首次共享时,操作系统会询问是否允许传入连接 — 请选择"允许",否则其他设备将无法访问 Adminium。'},setup:{title:"欢迎使用 Adminium",subtitle:"只需四个简短步骤,Adminium 就能从你的数据库生成一个管理应用。所有内容都保留在这台电脑上。",progress:"设置进度",back:"上一步",continue:"继续",createAccount:"创建账户并继续",step:{location:"欢迎",database:"你的第一个数据库",account:"你的账户",generate:"生成"},dataDir:{heading:"Adminium 应该把你的数据保存在哪里?",description:"你的数据库、设置和备份都存放在这个文件夹中。所有内容都保留在这台电脑上——不会上传到任何地方。",label:"数据文件夹",loading:"正在读取当前位置…",pending:"继续时 Adminium 会重启,以便切换到这个文件夹。",change:"更改…",revert:"撤销",dialogTitle:"选择 Adminium 保存数据的位置",cloudSyncTitle:"该文件夹会同步到云端",cloudSyncWarning:"Adminium 将数据存储在 SQLite 文件中。{provider} 会在后台复制“{folder}”中的文件进行同步,这可能损坏正在打开的数据库——并在毫无提示的情况下丢失数据。请选择 {provider} 之外的文件夹。",chooseAnother:"选择其他文件夹",useAnyway:"仍然使用——我接受风险",unusableTitle:"Adminium 无法使用该文件夹",failed:"Adminium 无法使用该文件夹。"},source:{heading:"Adminium 应该基于什么来构建?",description:"Adminium 会读取数据库的结构并据此生成管理应用。你之后可以添加更多数据库。",groupLabel:"数据库来源",local:{title:"创建新的本地数据库",description:"从零开始,或使用你已有的结构文件。数据库会创建在你的数据文件夹中。",name:"数据库名称",namePlaceholder:"运营",nameUnusable:"请至少使用一个字母或数字——文件名由此生成。",fileHelper:"将创建 {file}",schemaLabel:"起始方式",blank:"空白",fromFile:"结构文件",schemaFile:"结构文件",schemaFileHelper:".sql、pg_dump、Prisma、Drizzle、TypeORM、Sequelize、schema.rb、Django 或 Adminium JSON。Adminium 会将其转换为 SQLite。",placeholder:"自动生成占位数据",placeholderHelper:"你导入的结构没有数据行。为每个表填充逼真的示例数据,让仪表板和图表立刻能够呈现。"},openSqlite:{title:"打开现有的 SQLite 文件",description:"让 Adminium 指向这台电脑上的 .sqlite 文件。文件会在原位打开——不会复制或移动。",browse:"选择一个 .sqlite 文件…",change:"选择其他文件…",networkTitle:"该文件位于网络共享上",networkBody:"SQLite 的锁机制在网络文件共享上并不可靠,写入过程中断开连接可能损坏数据库。复制到这台电脑本地磁盘上更安全。"},remote:{title:"连接到服务器数据库",description:"PostgreSQL 或 MySQL。需要一个可访问的网络数据库;Adminium 自身的数据表仍然保留在这台电脑上。",networkNote:"需要一个可访问的网络数据库",metaNote:"无论如何,Adminium 自身的数据表——你的页面、设置和登录信息——都保留在这台电脑的数据文件夹中。",engine:"引擎",name:"连接名称",namePlaceholder:"生产环境",dsn:"连接字符串",dsnHelper:"Adminium 会在连接时测试它。如果你只需要仪表板,请使用只读角色。"},demo:{title:"体验演示数据库",description:"一个现成的团队运营数据库,让你在指向自己的数据之前先看看 Adminium 会构建出什么。你可以随时删除它。",unavailable:"此版本不包含演示数据,因此没有可加载的内容。请选择上面的某个选项。"}},account:{heading:"创建你的账户",description:"这是这份 Adminium 的管理员账户。密码用于保护你的备份以及你在网络上共享的对象——每次启动时不会向你索取密码。",name:"你的姓名",email:"邮箱",password:"密码",passwordHelper:"至少 {min} 个字符。",confirm:"确认密码",strength:"密码强度",strengthLevels:{weak:"弱",fair:"一般",good:"良好",strong:"强"},singleUser:"在这台电脑上跳过登录",singleUserHelper:"在这里打开时,Adminium 会自动为你登录。如果其他人也使用这台机器,请关闭此项。你之后可以在 设置 → 桌面 中更改。",locale:"语言",theme:"外观",alreadyExists:"这份 Adminium 已经有一个账户。请改用该账户登录。",failed:"Adminium 无法创建该账户。"},generate:{creating:"正在设置你的数据库…",introspecting:"正在读取你的结构——表、列和关系…",working:"处理中…",offlineNote:"这一切都在这台电脑上完成。",failedTitle:"Adminium 无法设置该数据库",failedBody:"出了点问题。请重试。",retry:"重试"}}},capabilities:{heading:"应用权限",description:"您安装的应用可以请求使用本计算机的硬件。您需逐一批准,并可随时撤销访问权限。",grantedTo:"已允许 {app}",status:{available:"可用",stub:"尚不可用",unavailable:"不可用"},allow:{action:"允许…"},revoke:{action:"撤销",saved:"已撤销访问权限",failed:"无法撤销访问权限,请重试。"},grant:{saved:"已允许访问",failed:"无法允许访问,请重试。"},catalog:{printerEscpos:{name:"小票打印机 (ESC/POS)",scope:"在小票打印机上打印并打开连接的钱箱"}},consent:{title:"允许 {app}?",subtitle:"{app} 请求使用本计算机的硬件。",willAllow:"这将允许 {app}:",revokeNote:"您可以随时在“设置 → 桌面”中撤销。仅允许您信任的应用。",deny:"暂不",approve:"允许"}},emailTemplates:{title:"邮件模板",subtitle:"工作区发送的事务性和生命周期邮件。",search:"搜索模板…",loadFailed:"无法加载模板",empty:"还没有邮件模板",emptyBody:"服务器初始化模板或您创建模板后,将显示在这里。",noMatches:"没有匹配的模板",noMatchesBody:"试试其他搜索词。",live:"已启用",disabled:"已禁用",name:"模板名称",subject:"主题",enabled:"已启用"},board:{addCard:"添加卡片",compose:{placeholder:"卡片标题…",add:"添加",cancel:"取消"},empty:{title:"没有看板列",body:"添加状态字段以将卡片分组到列中。"}},calendar:{dateRange:"日期范围",compose:{placeholder:"事件标题…",add:"添加",cancel:"取消",open:"添加事件"},agenda:{empty:"暂无安排"}},scheduler:{prevWeek:"上一周",nextWeek:"下一周",week:"周",month:"月",resource:"资源",coverage:"覆盖",addShift:"添加班次",shiftCount:"{n} 个班次"},planning:{drawer:{close:"关闭",loading:"正在加载记录",error:"无法加载此记录。"}},files:{uploadsUnavailable:"此页面暂不支持上传。"},chat:{messageSent:"消息已发送",sendFailed:"消息发送失败。"},templates:{crud:{title:"记录"},dashboard:{title:"仪表盘"},board:{title:"看板"},calendar:{title:"日历"},scheduler:{title:"排班"},logViewer:{title:"日志"},files:{title:"文件"},chat:{title:"聊天"},builder:{title:"构建器"},wizard:{title:"向导"},settings:{title:"设置"},directory:{title:"通讯录",searchPlaceholder:"搜索人员…",allFilter:"全部",clearFilters:"清除筛选",detailTitle:"人员",emptyTitle:"还没有人员",emptyBody:"表中有数据后,人员将显示在这里。",noMatchesTitle:"没有匹配的人员",noMatchesBody:"试试其他搜索词或移除筛选。",errorTitle:"无法加载此通讯录",loading:"正在加载人员",memberCount:"{count} 人"},masterDetail:{title:"列表与详情",allFilter:"全部",clearFilters:"清除筛选",emptyTitle:"这里还没有内容",emptyBody:"表中有数据后,记录将显示在这里。",noMatchesTitle:"没有匹配的记录",noMatchesBody:"试试移除筛选。",errorTitle:"无法加载此列表",loading:"正在加载记录",selectPrompt:"选择一条记录"},queueInbox:{title:"队列",approve:"批准",reject:"拒绝",allSegment:"全部",approvedToast:"已批准 {count} 项。",rejectedToast:"已拒绝 {count} 项。",undoneToast:"已撤销该决定。",failedToast:"操作失败。",bulkFailed:"所选行中有 {failed}/{total} 行未能更新。",undoFailedToast:"无法撤销该决定。",rejectTitle:"拒绝请求",rejectCount:"已选 · {count}",rejectNote:"请求者将收到通知及您的备注。",rejectPlaceholder:"为请求者添加备注…",rejectConfirm:"拒绝",emptyTitle:"队列为空",emptyBody:"新请求到达后将显示在这里。",caughtUpTitle:"全部处理完毕",caughtUpBody:"此标签页当前没有请求。",errorTitle:"无法加载此队列",loading:"正在加载队列",selectPrompt:"选择一个请求",daysUnit:"{count} 天"}},dataio:{back:"返回",import:{title:"导入数据",stepUpload:"上传",stepMap:"映射列",stepValidate:"校验",stepRun:"导入并核查",targetLabel:"目标表",targetPlaceholder:"选择一个表页面…",notATable:"该页面不是数据表——请选择要导入的表页面。",dropTitle:"拖放 CSV 文件以导入",dropHint:"CSV 最大 32 MB——第一行必须是表头",skipTarget:"不导入",mapHint:"{file} 中有 {count} 行数据——请为每一列选择目标。",validating:"正在校验…",toValidate:"校验",validateFailed:"校验失败。",validationSummary:"{total} 行中有 {valid} 行可导入——将跳过 {invalid} 行。",allValid:"所有行均通过校验",run:"运行导入",runSkipping:"导入 {valid} 行(跳过 {invalid} 行)",progressLabel:"导入进度",running:"正在导入…",kpiTotal:"文件中的行数",kpiCreated:"已创建",kpiUpdated:"已更新",kpiSkipped:"已跳过",inconsistent:"导入数字不一致——总数必须等于已创建 + 已更新 + 已跳过。",downloadErrors:"下载跳过行报告(CSV)",runFailed:"导入失败。"},exports:{title:"数据导出",tableLabel:"数据表",tablePlaceholder:"选择数据表…",notATable:"该页面不是数据表——请选择要导出的表页面。",formatLabel:"格式",create:"导出",createFailed:"无法发起导出。",retention:"导出文件保留 30 天后过期。",statusProcessing:"处理中…",statusReady:"已就绪——{rows} 行·点击下载",statusFailed:"失败——{error}",statusCancelled:"已取消",statusExpired:"已过期",emptyTitle:"还没有导出",emptyBody:"在上方发起导出——生成的文件将连同状态显示在这里。"}},reports:{title:"定时报告",subtitle:"页面的定期数据快照,以应用内通知送达。",new:"新建报告",loadFailed:"无法加载定时报告。",saveFailed:"无法保存此报告。",nextRun:"下次运行",emptyTitle:"还没有定时报告",emptyBody:"创建一个,即可定期获取任意表页面的数据快照。",createTitle:"新建定时报告",editTitle:"编辑定时报告",nameLabel:"名称",namePlaceholder:"例如:每周营收",pageLabel:"页面",pagePlaceholder:"选择页面…",frequencyLabel:"频率",frequency:{daily:"每天",weekly:"每周",monthly:"每月"},dayOfWeekLabel:"星期",dayOfMonthLabel:"每月日期",timeLabel:"时间",timezoneLabel:"时区",formatLabel:"送达方式",formatHint:"数据快照(PDF/PNG 渲染将在后续版本推出)——每次运行都会生成 CSV 快照和应用内通知。",recipientsLabel:"收件人",recipientsHint:"与报告一起保存。邮件送达将在后续版本推出——目前运行结果以应用内通知提醒您。",deliveryBadge:"CSV 快照",delete:"删除",create:"创建",cadence:{daily:"每天 {time}({zone})",weekly:"每周 · {day} {time}({zone})",monthly:"每月 · {day} 日 {time}({zone})"}},notifications:{channel:{inApp:"应用内",email:"邮件",push:"推送"},event:{reportReady:"定时报告已就绪",reportFailed:"定时报告失败",backupCompleted:"备份完成"}}};export{e as default};
2
+ //# sourceMappingURL=common-x8cfkwpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common-x8cfkwpc.js","sources":["../../../../packages/i18n/dist/resources/zh-cn/common.js"],"sourcesContent":["/**\n * GENERATED MIRROR of ../../../locales/zh-CN/common.json — do not edit by hand.\n * The JSON file is the canonical hand-authored bundle (10-i18n-theming.md §3.1);\n * this TS mirror exists so the runtime bundles en-US resources (and chunk-splits\n * the other locales) without JSON import attributes (browser + NodeNext safe).\n * Parity is enforced by src/resources/parity.test.ts. Regenerate with\n * scripts/gen-resources.mjs.\n */\nexport default {\n \"common\": {\n \"dismiss\": \"关闭\",\n \"notifications\": \"通知\",\n \"retry\": \"重试\",\n \"undo\": \"撤销\",\n \"close\": \"关闭\",\n \"cancel\": \"取消\",\n \"back\": \"返回\",\n \"loading\": \"加载中\",\n \"clearSearch\": \"清除搜索\",\n \"clear\": \"清除\",\n \"save\": \"保存\"\n },\n \"auth\": {\n \"headline\": \"把任何数据库变成仪表盘。\",\n \"trust\": \"AGPL 核心 · 自托管 · 数据始终归你所有\",\n \"signIn\": {\n \"title\": \"欢迎回来\",\n \"subtitle\": \"登录你的 Adminium 工作区。\",\n \"email\": \"邮箱\",\n \"emailInvalid\": \"请输入有效的邮箱地址。\",\n \"password\": \"密码\",\n \"passwordRequired\": \"请输入密码。\",\n \"showPassword\": \"显示密码\",\n \"hidePassword\": \"隐藏密码\",\n \"remember\": \"保持登录状态\",\n \"forgot\": \"忘记了?\",\n \"submit\": \"登录\",\n \"invalid\": \"邮箱或密码不正确。\",\n \"rateLimited\": \"尝试次数过多——请一分钟后再试。\",\n \"failed\": \"登录失败。请检查网络连接后重试。\"\n },\n \"forgot\": {\n \"title\": \"重置密码\",\n \"email\": \"邮箱\",\n \"emailInvalid\": \"请输入有效的邮箱地址。\",\n \"submit\": \"发送重置链接\",\n \"sentTitle\": \"请查收邮件\",\n \"resend\": \"再发一次\",\n \"back\": \"返回登录\",\n \"done\": \"返回登录\",\n \"rateLimited\": \"请求过多——请稍后再试。\",\n \"failed\": \"出错了。请重试。\",\n \"smtpUnconfigured\": \"此 Adminium 未配置邮件服务器,无法发送重置链接。请让管理员为你重置密码。\"\n },\n \"reset\": {\n \"title\": \"设置新密码\",\n \"subtitle\": \"至少 8 个字符。\",\n \"password\": \"新密码\",\n \"confirm\": \"确认密码\",\n \"showPassword\": \"显示密码\",\n \"hidePassword\": \"隐藏密码\",\n \"strength\": \"密码强度\",\n \"weak\": \"弱\",\n \"fair\": \"一般\",\n \"good\": \"良好\",\n \"strong\": \"强\",\n \"tooShort\": \"请至少使用 8 个字符。\",\n \"submit\": \"重置密码\",\n \"failed\": \"重置失败。请重试。\"\n },\n \"otp\": {\n \"title\": \"双重验证\",\n \"subtitle\": \"请输入验证器应用中的 6 位数字验证码。\",\n \"code\": \"一次性验证码\",\n \"recoveryCode\": \"恢复代码\",\n \"useRecovery\": \"设备丢失?使用恢复代码\",\n \"useAuthenticator\": \"改用验证器应用\",\n \"submit\": \"验证\",\n \"invalid\": \"验证码不正确。请重试。\",\n \"failed\": \"验证失败。请检查网络连接后重试。\"\n }\n },\n \"nav\": {\n \"home\": \"首页\",\n \"primary\": \"主要\",\n \"account\": \"账户\",\n \"signOut\": \"退出登录\",\n \"empty\": \"连接数据库后,页面会显示在这里。\",\n \"connection\": {\n \"shared\": \"共享\",\n \"unnamed\": \"连接\"\n },\n \"imports\": \"导入数据\",\n \"exports\": \"数据导出\",\n \"emailTemplates\": \"邮件模板\",\n \"notificationSettings\": \"通知设置\",\n \"scheduledReports\": \"定时报告\",\n \"group\": {\n \"workspace\": \"工作区\",\n \"library\": \"资源库\",\n \"planning\": \"规划\",\n \"people\": \"人员\",\n \"account\": \"账户\"\n }\n },\n \"topbar\": {\n \"search\": \"搜索…\",\n \"notifications\": \"通知\",\n \"notificationsLoading\": \"正在加载通知\",\n \"notificationsError\": \"无法加载通知。\",\n \"notificationsEmpty\": \"没有新通知。\",\n \"theme\": \"切换浅色 / 深色\",\n \"userMenu\": \"账户菜单\",\n \"profile\": \"个人资料\",\n \"preferences\": \"偏好设置\",\n \"signOut\": \"退出登录\"\n },\n \"palette\": {\n \"dialog\": \"命令面板\",\n \"placeholder\": \"输入命令或搜索…\",\n \"navigate\": \"导航\",\n \"actions\": \"操作\",\n \"askAi\": \"询问 AI\",\n \"shortcuts\": \"键盘快捷键\",\n \"signOut\": \"退出登录\",\n \"themeDark\": \"切换到深色主题\",\n \"themeLight\": \"切换到浅色主题\",\n \"footerNavigate\": \"导航\",\n \"footerOpen\": \"选择\",\n \"footerClose\": \"关闭\"\n },\n \"shortcuts\": {\n \"title\": \"键盘快捷键\",\n \"subtitle\": \"在 Adminium 中更高效地工作\",\n \"close\": \"关闭\",\n \"dismiss\": \"关闭或取消\",\n \"palette\": \"打开命令面板\",\n \"panel\": \"显示快捷键面板\",\n \"search\": \"聚焦搜索框\",\n \"sidebar\": \"切换侧边栏\",\n \"theme\": \"切换浅色 / 深色\",\n \"then\": \"然后\",\n \"footerPre\": \"随时按\",\n \"footerPost\": \"即可打开此面板。\"\n },\n \"states\": {\n \"checked\": \"8 秒前检查过\",\n \"diagnostics\": \"诊断\"\n },\n \"notFound\": {\n \"title\": \"页面不见了\",\n \"errorLine\": \"错误 404\",\n \"searchPlaceholder\": \"搜索页面…\",\n \"matches\": \"匹配的页面\",\n \"popular\": \"常用页面\",\n \"goBack\": \"返回\",\n \"backToDashboard\": \"回到仪表盘\"\n },\n \"page\": {\n \"invalid\": {\n \"title\": \"此页面的配置无效\",\n \"body\": \"存储的页面文档未通过校验,无法渲染。\"\n },\n \"renderError\": {\n \"title\": \"此页面渲染失败\"\n },\n \"tooNew\": {\n \"title\": \"此页面需要更新版本的 Adminium\"\n },\n \"unknownTemplate\": {\n \"title\": \"未知的页面模板\"\n }\n },\n \"mutation\": {\n \"created\": \"记录已创建\",\n \"updated\": \"记录已更新\",\n \"deleted\": \"记录已删除\"\n },\n \"undo\": {\n \"done\": \"更改已撤销\",\n \"failed\": \"无法撤销此更改\"\n },\n \"prefs\": {\n \"theme\": {\n \"label\": \"主题\",\n \"light\": \"浅色\",\n \"dark\": \"深色\",\n \"system\": \"跟随系统\"\n },\n \"accent\": {\n \"label\": \"强调色\",\n \"indigo\": \"靛蓝\",\n \"blue\": \"蓝色\",\n \"teal\": \"青色\",\n \"violet\": \"紫色\",\n \"rose\": \"玫红\",\n \"red\": \"红色\",\n \"orange\": \"橙色\",\n \"black\": \"黑色\"\n },\n \"density\": {\n \"label\": \"密度\",\n \"comfortable\": \"舒适\",\n \"compact\": \"紧凑\"\n },\n \"locale\": {\n \"label\": \"语言\",\n \"directionNote\": \"文字方向:从右到左(由语言自动设定)\"\n }\n },\n \"account\": {\n \"title\": \"账户\",\n \"subtitle\": \"当前会话的身份信息。显示偏好和通知设置请在各自的专属页面中管理。\",\n \"preferencesLink\": \"偏好设置\",\n \"notificationsLink\": \"通知设置\",\n \"name\": \"姓名\",\n \"email\": \"邮箱\",\n \"roles\": \"角色\",\n \"twoFactor\": \"双重验证\",\n \"on\": \"已启用\",\n \"off\": \"未启用\",\n \"preferences\": {\n \"title\": \"偏好设置\",\n \"subtitle\": \"Adminium 在你这里的外观与语言——在这台设备和你登录的每台设备上生效。\",\n \"workspaceDefault\": \"工作区默认\",\n \"personal\": \"个人\",\n \"usingDefault\": \"正在使用工作区默认值({value})\",\n \"reset\": \"恢复为工作区默认值\",\n \"resetFailed\": \"无法重置此偏好。请重试。\",\n \"appliesInstantly\": \"更改会立即生效,并保存到你的个人资料。\"\n }\n },\n \"settings\": {\n \"defaults\": {\n \"title\": \"全局默认值\",\n \"subtitle\": \"适用于整个工作区的外观与语言默认值。\",\n \"explainer\": \"这些默认值适用于所有未自行覆盖的用户。任何人都可以在「个人资料 → 偏好设置」中设置自己的偏好——对该用户而言,个人偏好始终优先。\",\n \"appearanceHeading\": \"外观默认值\",\n \"languageHeading\": \"语言与区域默认值\",\n \"adoption\": \"共 {total, plural, other {# 位用户}},其中 {following, number} 位遵循此默认值。\",\n \"weekStartNote\": \"每周起始日与数字格式跟随所选语言。\",\n \"save\": \"保存默认值\",\n \"saved\": \"工作区默认值已更新\",\n \"saveFailed\": \"无法保存工作区默认值。请重试。\",\n \"liveNote\": \"保存后更改会实时推送——遵循默认值的在线用户无需刷新即可看到。\"\n },\n \"notifications\": {\n \"subtitle\": \"选择通知内容与方式\",\n \"matrixLabel\": \"通知我\",\n \"rowHeader\": \"事件\",\n \"saving\": \"保存中…\",\n \"saved\": \"已保存\",\n \"unavailable\": \"暂不可用\",\n \"loading\": \"正在加载偏好设置\",\n \"errorTitle\": \"无法加载这些设置\",\n \"emptyTitle\": \"暂无可配置项\",\n \"emptyBody\": \"随着功能上线,通知事件将显示在这里。\",\n \"saveFailed\": \"无法保存此更改。\"\n }\n },\n \"studio\": {\n \"source\": {\n \"engine\": {\n \"label\": \"数据库引擎\",\n \"postgres\": \"PostgreSQL\",\n \"mysql\": \"MySQL / MariaDB\",\n \"sqlite\": \"SQLite\"\n },\n \"format\": {\n \"label\": \"架构格式\",\n \"helper\": \"除非自动检测出错,否则保持自动检测即可。\",\n \"auto\": \"自动检测\",\n \"sql\": \"SQL DDL / pg_dump\",\n \"prisma\": \"Prisma 架构\",\n \"drizzle\": \"Drizzle ORM\",\n \"typeorm\": \"TypeORM 实体\",\n \"sequelize\": \"Sequelize 模型\",\n \"rails\": \"Rails schema.rb\",\n \"django\": \"Django models.py\",\n \"json\": \"Adminium JSON\"\n },\n \"sqlite\": {\n \"file\": \"数据库文件路径\",\n \"helper\": \"SQLite 是文件而非服务器——请填写运行 Adminium 的机器上的绝对路径。\"\n },\n \"file\": {\n \"detectedAs\": \"检测到:{format}\",\n \"moreWarnings\": \"另有 {count} 条警告——完整列表将在分析步骤中显示。\",\n \"dropTitle\": \"将架构文件拖放到此处,或浏览选择\",\n \"dropHint\": \"SQL DDL / pg_dump、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型、Adminium JSON\",\n \"pitch\": \"无需数据库连接——我们解析你的架构文件并构建相同的仪表板。\",\n \"parsing\": \"正在读取上传的架构文件…\",\n \"tables\": \"个表\",\n \"columns\": \"列\",\n \"warnings\": \"警告\",\n \"errorTitle\": \"无法解析该文件\",\n \"parseFailed\": \"我们无法解析该文件。如果自动检测判断有误,请明确选择格式后重试。\",\n \"unsupported\": \"无法识别该格式——支持 SQL DDL、Prisma、Drizzle、TypeORM、Sequelize、Rails schema.rb、Django 模型和 Adminium JSON。请明确选择一种后重试。\",\n \"requestFailed\": \"上传失败——请检查网络连接后重试。\"\n },\n \"title\": \"连接你的数据库\",\n \"subtitle\": \"将 Adminium 指向一个数据库,我们会根据其架构生成管理仪表板。\",\n \"name\": \"连接名称\",\n \"namePlaceholder\": \"生产环境 Postgres\",\n \"modeLabel\": \"来源输入方式\",\n \"mode\": {\n \"dsn\": \"连接字符串\",\n \"fields\": \"逐项填写\",\n \"file\": \"架构文件\"\n },\n \"dsn\": {\n \"label\": \"连接字符串\",\n \"helper\": \"postgres://user:password@host:5432/database——mysql:// 和 sqlite: 也可用。\",\n \"incomplete\": \"请补全主机和数据库,例如 postgres://user@host:5432/db\",\n \"invalidScheme\": \"无法识别的协议——应为 postgres://、mysql://、mariadb:// 或 sqlite:\",\n \"quickFill\": \"快速填充:\"\n },\n \"fields\": {\n \"host\": \"主机\",\n \"port\": \"端口\",\n \"database\": \"数据库\",\n \"user\": \"用户\",\n \"password\": \"密码\",\n \"ssl\": \"SSL 模式\",\n \"preview\": \"连接字符串预览:\"\n },\n \"readOnlyRole\": {\n \"title\": \"使用只读角色\",\n \"body\": \"Adminium 绝不会写入你的数据库——设置过程仅使用架构元数据。建议使用仅有 SELECT 权限的专用用户;Adminium 自己的表放在哪里,可在元数据存储步骤中决定。\"\n }\n },\n \"capability\": {\n \"mysqlApproxRows\": \"MySQL 的行数来自存储引擎估算(偏差可达 ±40%),以 ≈ 显示。\",\n \"mysqlFkEnum\": \"MySQL 的外键/枚举元数据较弱:MyISAM 表不声明外键,枚举是按列的 enum(…) 类型,CHECK 约束需要 MySQL 8.0.16+ / MariaDB 10.2+。\",\n \"sqliteCheckEnums\": \"SQLite 没有原生枚举类型——枚举由 CHECK (col IN (…)) 约束合成。\",\n \"sqliteNoComments\": \"SQLite 不支持列注释——请在架构重映射编辑器中添加标签。\",\n \"importNoRowCounts\": \"架构文件不包含行数——表格列表显示 — 而不是编造的数字。\",\n \"importNoLiveHealth\": \"没有实时数据库连接——此来源无法进行健康检查和架构漂移检测。\",\n \"rowsUnavailable\": \"架构文件没有实时数据库——在连接数据库之前行数未知。\",\n \"rowsRunAnalyze\": \"尚无估算——请在数据库上运行 ANALYZE 以获取行数。\",\n \"rowsNoEstimate\": \"引擎未报告此表的行数估算。\",\n \"rowsApproximate\": \"存储引擎估算——在 InnoDB 上偏差可达 ±40%。\"\n },\n \"test\": {\n \"log\": {\n \"moreWarnings\": \"另有 {count} 条解析器警告\",\n \"connecting\": \"正在建立安全连接…\",\n \"connected\": \"已连接({latency} 毫秒)· 只读自省\",\n \"connectFailed\": \"连接失败。\",\n \"readingSchema\": \"正在读取架构:public\",\n \"readingFile\": \"正在读取上传的架构文件…\",\n \"parsingFile\": \"正在解析 {file}…\",\n \"detected\": \"检测到 {tables} 个表 · {columns} 列\",\n \"found\": \"共发现 {tables} 个表 · {columns} 列\",\n \"mapping\": \"正在映射列类型 → 输入组件\",\n \"relations\": \"正在检测关系…\",\n \"piiScan\": \"正在扫描 PII 列…\",\n \"piiDone\": \"PII 扫描完成——默认屏蔽 {count} 列\",\n \"piiDoneUnknown\": \"PII 扫描完成\",\n \"jobFailed\": \"自省失败。\",\n \"networkFailed\": \"请求失败——请检查网络连接后重试。\",\n \"ready\": \"就绪\"\n },\n \"title\": \"正在分析你的架构\",\n \"subtitle\": \"正在自省表、列和关系。这需要几秒钟。\",\n \"trust\": \"我们只读取你的架构和数据,不会做任何修改。\",\n \"errorTitle\": \"连接失败\",\n \"retry\": \"重试\",\n \"logLabel\": \"自省日志\",\n \"hint\": {\n \"auth\": \"身份验证失败——请检查 DSN 中的用户名和密码。\",\n \"hostUnreachable\": \"主机不可达——请检查主机名和端口,并确认数据库接受来自本机的连接(将我们的 IP 加入允许列表)。\",\n \"metaPlacement\": \"该数据源无法承载 Adminium 的元数据表——请改用单独的元数据库继续。\",\n \"permission\": \"该角色已连接,但缺少读取架构的权限——请为自省角色授予该架构的 USAGE 权限。\",\n \"timeout\": \"数据库未及时响应——请检查网络路径和负载后重试。\",\n \"tls\": \"TLS 协商失败——请尝试 sslmode=require,或上传服务器所需的 CA 证书。\",\n \"unknown\": \"连接失败——请核对 DSN 后重试。\"\n }\n },\n \"tables\": {\n \"importNoCounts\": \"架构文件不包含行数——在连接实时数据库之前,该列显示 —。\",\n \"title\": \"选择数据表\",\n \"subtitle\": \"选择要包含的表。之后可随时更改。\",\n \"search\": \"筛选表…\",\n \"listLabel\": \"可包含的表\",\n \"emptyFilter\": \"没有匹配筛选条件的表。\",\n \"pii\": \"PII\",\n \"highVolume\": \"高数据量\",\n \"highVolumeNote\": \"超过 100,000 行的表默认不勾选——运维类表很少适合放进仪表板。\",\n \"joinHidden\": \"{count} 个关联/系统表已预先隐藏——它们仍支撑多对多关系。\"\n },\n \"hub\": {\n \"title\": \"数据连接\",\n \"subtitle\": \"{total, plural, other {# 个连接中 {healthy, number} 个}}状态正常\",\n \"connectNew\": \"新建连接\",\n \"stats\": {\n \"connections\": \"连接\",\n \"healthy\": \"正常\",\n \"tables\": \"已包含的表\",\n \"pages\": \"已生成的页面\"\n },\n \"status\": {\n \"connected\": \"已连接\",\n \"error\": \"错误\",\n \"unconfigured\": \"草稿\",\n \"testing\": \"测试中…\"\n },\n \"card\": {\n \"readOnly\": \"只读\",\n \"tables\": \"表\",\n \"pages\": \"页面\",\n \"latency\": \"延迟\",\n \"latencyMs\": \"{latency, number} 毫秒\",\n \"lastIntrospected\": \"上次内省\",\n \"never\": \"从未\"\n },\n \"action\": {\n \"test\": \"测试\",\n \"reintrospect\": \"重新内省\",\n \"reintrospectFile\": \"架构文件来源没有在线数据库——请改为重新上传文件。\",\n \"remap\": \"重映射架构\",\n \"delete\": \"删除\"\n },\n \"test\": {\n \"ok\": \"连接正常 · {latency, number} 毫秒\",\n \"failed\": \"连接测试失败\"\n },\n \"introspect\": {\n \"noChanges\": \"架构无变化——未创建新快照。\",\n \"updated\": \"已重新内省架构\",\n \"masksProposed\": \"{count, plural, other {建议对 # 列进行脱敏}}——请在重映射编辑器中查看。\",\n \"failed\": \"内省失败,请重试。\"\n },\n \"delete\": {\n \"title\": \"删除连接\",\n \"body\": \"此操作将删除“{name}”及其生成的页面。您的数据库本身不会被改动。\",\n \"prompt\": \"输入 {name} 以确认\",\n \"confirm\": \"删除连接\",\n \"cancel\": \"取消\",\n \"close\": \"关闭\",\n \"success\": \"连接“{name}”已删除\",\n \"failed\": \"无法删除连接,请重试。\"\n },\n \"empty\": {\n \"title\": \"还没有数据源\",\n \"body\": \"连接数据库后,Adminium 会根据其架构生成您的管理面板。\",\n \"cta\": \"连接数据库\"\n }\n },\n \"settingsHub\": {\n \"title\": \"工作区设置\",\n \"subtitle\": \"此工作区的标识、安全与危险操作。\",\n \"save\": \"保存更改\",\n \"saved\": \"工作区设置已更新\",\n \"saveFailed\": \"无法保存工作区设置,请重试。\",\n \"superAdminOnlyTitle\": \"需要超级管理员\",\n \"superAdminOnly\": \"只有超级管理员才能更改工作区标识和安全设置。\",\n \"identity\": {\n \"heading\": \"工作区标识\",\n \"appName\": {\n \"label\": \"应用名称\",\n \"helper\": \"显示在侧边栏、浏览器标题和邮件中。\",\n \"error\": \"请输入不超过 60 个字符的名称。\"\n }\n },\n \"security\": {\n \"heading\": \"安全\",\n \"require2fa\": {\n \"label\": \"强制双重验证\",\n \"desc\": \"每位成员都必须启用双重验证才能登录。\"\n },\n \"allowSignup\": {\n \"label\": \"允许自助注册\",\n \"desc\": \"任何人都可以创建账户——关闭后此工作区仅限邀请。\"\n },\n \"sessionTtl\": {\n \"label\": \"会话有效期(小时)\",\n \"error\": \"介于 {min, number} 到 {max, number} 小时之间。\"\n },\n \"passwordMin\": {\n \"label\": \"密码最小长度\",\n \"error\": \"介于 {min, number} 到 {max, number} 个字符之间。\"\n }\n },\n \"review\": {\n \"title\": \"保存工作区设置\",\n \"subtitle\": \"保存前请确认您的更改。\",\n \"confirm\": \"保存更改\",\n \"cancel\": \"取消\",\n \"close\": \"关闭\",\n \"on\": \"开\",\n \"off\": \"关\",\n \"change\": \"{before} → {after}\"\n },\n \"defaultsCard\": {\n \"heading\": \"外观与语言默认值\",\n \"body\": \"工作区级的主题、强调色、密度和语言设置位于全局默认值中。\",\n \"cta\": \"打开全局默认值\"\n },\n \"danger\": {\n \"heading\": \"危险区域\",\n \"subtitle\": \"不可逆的操作。\",\n \"empty\": \"没有可删除的内容——还没有连接。\",\n \"deleteDesc\": \"删除该连接及其生成的页面。您的数据库不会被改动。此操作无法撤销。\",\n \"deleteCta\": \"删除连接\"\n },\n \"aiCard\": {\n \"heading\": \"AI 增强\",\n \"body\": \"配置 AI 提供方(或复制粘贴往返)来增强标签、分组和关系。\",\n \"cta\": \"打开 AI 设置\"\n }\n },\n \"settingsAi\": {\n \"title\": \"AI 增强\",\n \"subtitle\": \"连接一个模型,让 Adminium 建议标签、分组、关系等——在应用之前始终以差异形式审阅。\",\n \"saved\": \"AI 提供方已保存\",\n \"saveFailed\": \"无法保存 AI 提供方。请重试。\",\n \"save\": \"保存提供方\",\n \"test\": \"测试连接\",\n \"testHintDirty\": \"测试前请先保存更改。\",\n \"testing\": \"正在连接提供方…\",\n \"testError\": \"测试失败\",\n \"testErrorBody\": \"无法连接到提供方。请检查密钥和基础 URL。\",\n \"testOk\": \"已连接到 {model},用时 {latency} 毫秒\",\n \"testUnknownModel\": \"提供方\",\n \"provider\": {\n \"heading\": \"AI 提供方\",\n \"subtitle\": \"选择 Adminium 如何访问模型来增强你的架构。密钥将加密存储且不再显示。\",\n \"active\": \"使用中\",\n \"anthropic\": {\n \"label\": \"Anthropic\",\n \"desc\": \"通过 Anthropic API 使用 Claude 模型。\"\n },\n \"openai\": {\n \"label\": \"OpenAI\",\n \"desc\": \"通过 OpenAI API 使用 GPT 模型。\"\n },\n \"openaiCompatible\": {\n \"label\": \"兼容 OpenAI\",\n \"desc\": \"任何使用 OpenAI 协议的端点——Groq、Together、vLLM、LM Studio。\"\n },\n \"ollama\": {\n \"label\": \"Ollama(本地)\",\n \"desc\": \"通过 Ollama 在本地运行模型——无需密钥,无需云端。\"\n },\n \"requiresNetwork\": \"需要联网和 API 密钥\",\n \"networkDisabledTitle\": \"此安装已关闭直连 AI 服务商\",\n \"networkDisabledBody\": \"此 Adminium 配置为无出站网络访问,无法连接服务商 API。请使用下方的复制粘贴往返方式——无需密钥,也无需联网。\"\n },\n \"configure\": {\n \"heading\": \"配置 {provider}\"\n },\n \"field\": {\n \"baseUrl\": \"基础 URL\",\n \"baseUrlOptional\": \"除非 Ollama 运行在其他主机上,否则保持不变。\",\n \"baseUrlHelper\": \"提供 /chat/completions 的端点根地址。\",\n \"model\": \"模型\",\n \"modelFreeText\": \"输入你的端点所提供的确切模型 ID。\",\n \"modelLive\": \"已从提供方实时加载。\",\n \"modelStatic\": \"一份经过验证的列表;保存后输入自定义 ID 可刷新它。\",\n \"modelLoading\": \"加载中…\",\n \"modelPlaceholder\": \"选择一个模型…\",\n \"key\": \"API 密钥\",\n \"keyStored\": \"已加密存储。替换它以使用其他密钥。\",\n \"keyMask\": \"sk-…{last4}\",\n \"keyReplace\": \"替换密钥\",\n \"keyOptional\": \"可选——某些端点无需密钥。\",\n \"keyWriteOnly\": \"仅写入:保存后将不再显示。\",\n \"noKeyTitle\": \"无需 API 密钥\",\n \"noKeyBody\": \"Ollama 在本地运行,因此没有任何内容离开这台机器。\"\n },\n \"runStatus\": {\n \"draft\": \"草稿\",\n \"running\": \"运行中\",\n \"awaitingResponse\": \"等待响应\",\n \"validated\": \"已验证\",\n \"applied\": \"已应用\",\n \"partiallyApplied\": \"部分应用\",\n \"failed\": \"失败\",\n \"discarded\": \"已丢弃\"\n },\n \"byo\": {\n \"heading\": \"没有密钥?使用你自己的 AI 工具\",\n \"subtitle\": \"复制粘贴往返——没有任何内容离开这台机器。\",\n \"body\": \"Studio 可以根据你的架构生成一个自包含的提示词。在 Claude Code、ChatGPT 或任意工具中运行它,然后将返回的 JSON 粘贴回连接向导。验证、审阅和结果都与直连方式相同。\",\n \"guaranteeTitle\": \"无遥测保证\",\n \"guarantee1\": \"提示词仅包含你的架构和聚合统计——默认绝不包含行数据。\",\n \"guarantee2\": \"不嵌入任何凭据、实例 URL 或标识符。\",\n \"guarantee3\": \"BYO 运行不进行任何网络调用。\",\n \"promptVersion\": \"提示词 {version}\",\n \"schemaVersion\": \"架构 {version}\",\n \"headingRecommended\": \"使用你自己的 AI 工具——无需密钥\",\n \"recommended\": \"推荐\"\n },\n \"history\": {\n \"heading\": \"运行历史\",\n \"subtitle\": \"过往的增强运行。打开其中一个以审阅其建议。\",\n \"tableLabel\": \"增强运行\",\n \"colDate\": \"日期\",\n \"colSource\": \"来源\",\n \"colStatus\": \"状态\",\n \"colChunks\": \"分块\",\n \"openReview\": \"打开 {date} 的运行审阅\",\n \"connection\": \"连接\",\n \"empty\": \"暂无增强运行。在连接向导中增强架构后,历史将显示在这里。\",\n \"errorTitle\": \"无法加载运行\",\n \"errorBody\": \"刷新页面以重试。\",\n \"noConnections\": \"请先连接数据库——增强运行按连接记录。\",\n \"byo\": \"BYO\",\n \"directPath\": \"直连\"\n }\n },\n \"enrich\": {\n \"title\": \"使用 AI 丰富\",\n \"subtitle\": \"可选择使用 LLM 优化生成的标签、分组、枚举和仪表板。启发式基线无需它即可工作——这仅添加供你在应用前审阅的建议。\",\n \"intentLabel\": \"你希望如何丰富?\",\n \"sectionsLegend\": \"应由 AI 决定哪些内容?\",\n \"localesLegend\": \"将标签翻译为\",\n \"localeLocked\": \"(必填)\",\n \"samplingTitle\": \"包含示例值\",\n \"samplingHint\": \"在提示中为每个非 PII 列最多包含 20 个真实值。\",\n \"samplingPreviewTitle\": \"离开此机器的内容\",\n \"samplingPreviewBody\": \"每个非 PII 列最多 20 个最常见值,以及数值和日期列的最小/最大值。标记为 PII 的列永不采样。其余所有内容仅保留聚合值。复制前请审阅确切的提示(BYO)——未经你的操作不会发送任何内容。\",\n \"noSections\": \"请至少选择一个要丰富的决策组。\",\n \"generatePrompt\": \"生成提示\",\n \"startProvider\": \"开始丰富\",\n \"startOver\": \"重新开始\",\n \"copied\": \"已复制\",\n \"createFailed\": \"无法构建丰富提示——请重试。\",\n \"createFailedTitle\": \"无法启动\",\n \"providerFallback\": \"你的 AI 提供商\",\n \"fileTitle\": \"AI 丰富需要一个在线数据库\",\n \"fileBody\": \"架构文件来源尚无可丰富的快照。连接一个在线数据库以使用 AI 丰富,或继续——启发式基线仍会生成完整的应用。\",\n \"section\": {\n \"labels\": \"标签与描述\",\n \"groups\": \"导航分组\",\n \"enums\": \"枚举语义\",\n \"relations\": \"关系\",\n \"keys\": \"关键列\",\n \"templates\": \"页面模板\",\n \"widgets\": \"仪表板小组件\",\n \"pii\": \"PII 与脱敏\",\n \"icons\": \"图标\",\n \"microcopy\": \"微文案\"\n },\n \"provider\": {\n \"title\": \"使用我的 AI 提供商\",\n \"description\": \"立即使用已配置的提供商运行丰富。你将以差异形式审阅每条建议。\",\n \"unconfigured\": \"尚未配置 AI 提供商——请在下方将提示复制到你自己的工具,或先配置一个提供商。\",\n \"settingsHint\": \"想直接运行吗?\",\n \"settingsLink\": \"在“设置 → AI”中配置提供商\",\n \"networkDisabled\": \"此 Adminium 无出站网络访问,无法连接服务商 API。请改用复制粘贴往返方式——同样的提示词,同样的审阅。\"\n },\n \"byo\": {\n \"cardTitle\": \"复制提示到我自己的 AI 工具\",\n \"cardDescription\": \"将一个自包含的提示复制到 Claude Code、ChatGPT 或任何工具——然后将 JSON 粘贴回来。无需密钥,不会自动将任何内容传出此机器。\",\n \"guidance\": \"在任意 AI 工具中运行——Claude Code、ChatGPT,皆可。将其返回的 JSON 粘贴到下方。\",\n \"promptLabel\": \"丰富提示\",\n \"promptLabelN\": \"丰富提示 第 {index} 个,共 {total} 个\",\n \"tokenChip\": \"≈ {tokens} 个 token\",\n \"copyPrompt\": \"复制提示\",\n \"copyPromptDone\": \"提示已复制\",\n \"download\": \"下载 .md\",\n \"chunkTabs\": \"提示分块\",\n \"chunkTab\": \"提示 {index}\",\n \"chunkValid\": \"分块 {index} 已验证\",\n \"pasteLabel\": \"粘贴 JSON 响应\",\n \"pastePlaceholder\": \"在此粘贴 JSON 响应…\",\n \"validate\": \"验证\",\n \"valid\": \"响应已验证\",\n \"mergedTitle\": \"全部 {count} 个分块已验证并合并\",\n \"mergedTitleSingle\": \"响应已验证\",\n \"mergedBody\": \"建议已准备好,可对照启发式基线进行审阅。\",\n \"errorsTitle\": \"验证发现 {count} 个问题\",\n \"copyErrors\": \"为你的 AI 工具复制错误\",\n \"copyErrorsDone\": \"错误已复制\",\n \"copyErrorsHint\": \"将其粘贴回你的 AI 工具以获取更正后的响应。\",\n \"droppedItems\": \"有 {count} 条建议在验证时被丢弃——审阅中显示其余内容。\",\n \"pendingTitle\": \"验证每个提示以继续\",\n \"pendingBody\": \"在上方粘贴 JSON 响应并验证,以继续进行审阅。\",\n \"pendingBodyChunked\": \"每个分块都必须先验证,建议才会合并。请粘贴并验证上方的每个提示。\",\n \"requestFailed\": \"无法连接服务器进行验证——请重试。\",\n \"continueReview\": \"继续审阅\",\n \"wholeDocument\": \"整个文档\",\n \"cardTitleRecommended\": \"把提示词复制到我自己的 AI 工具——推荐\"\n },\n \"direct\": {\n \"title\": \"正在使用 AI 丰富\",\n \"subtitle\": \"正在将你的架构发送至\",\n \"building\": \"正在构建提示…\",\n \"logLabel\": \"丰富日志\",\n \"cancel\": \"取消\",\n \"back\": \"返回选项\",\n \"retry\": \"重试\",\n \"done\": \"丰富完成——请审阅建议。\",\n \"continueReview\": \"继续审阅\",\n \"failed\": \"提供商运行失败。请检查你的 AI 设置并重试。\",\n \"jobFailed\": \"丰富运行未完成。\",\n \"startFailed\": \"无法启动运行——请重试。\",\n \"errorTitle\": \"丰富失败\"\n },\n \"skip\": {\n \"title\": \"跳过——仅使用启发式\",\n \"description\": \"从启发式基线生成。你之后可在“设置 → AI”中丰富——跳过绝不会受到惩罚。\",\n \"confirmTitle\": \"继续使用启发式\",\n \"confirmBody\": \"生成的应用将使用启发式的标签、分组和仪表板。继续生成——你可随时在“设置 → AI”中运行 AI 丰富。\"\n }\n },\n \"review\": {\n \"unavailableTitle\": \"审阅界面不可用\",\n \"unavailableBody\": \"此版本尚未包含增强审阅界面(06-T14)。它将随差异与应用流程一起推出。\"\n },\n \"llmRuns\": {\n \"review\": {\n \"header\": {\n \"title\": \"审查 AI 建议\",\n \"model\": \"模型\",\n \"snapshot\": \"快照\",\n \"byo\": \"自带\",\n \"pathDirect\": \"直接 API\",\n \"pathByo\": \"复制粘贴\",\n \"agree\": \"{n} 项一致\",\n \"conflict\": \"{n} 项冲突\",\n \"new\": \"{n} 项新增\",\n \"rejects\": \"{n} 项拒绝\",\n \"countsAria\": \"建议数量\"\n },\n \"bulk\": {\n \"thresholdLabel\": \"置信度阈值\",\n \"thresholdAria\": \"“全部接受”的置信度阈值\",\n \"acceptAll\": \"接受所有 ≥ {pct}%\",\n \"clear\": \"清除选择\"\n },\n \"section\": {\n \"selectAllAria\": \"全选 {group}\",\n \"acceptedCount\": \"已接受 {n} 项\"\n },\n \"group\": {\n \"labels\": \"标签与翻译\",\n \"navigation\": \"导航与领域\",\n \"enums\": \"枚举语义\",\n \"relations\": \"关系\",\n \"keys\": \"键列\",\n \"templates\": \"页面模板\",\n \"dashboards\": \"仪表盘与小组件\",\n \"pii\": \"个人信息与脱敏\",\n \"icons\": \"图标\",\n \"microcopy\": \"微文案\"\n },\n \"status\": {\n \"agree\": \"一致\",\n \"conflict\": \"冲突\",\n \"new\": \"新增\",\n \"heuristicOnly\": \"仅启发式\",\n \"rejects\": \"拒绝启发式\",\n \"locked\": \"已锁定\"\n },\n \"row\": {\n \"acceptAria\": \"接受 {target} 的{noun}建议\",\n \"keptEdited\": \"已保留——由您编辑\",\n \"rejectsCallout\": \"AI 拒绝了某项启发式决策——接受前请确认。\",\n \"showTranslations\": \"显示翻译\",\n \"hideTranslations\": \"隐藏翻译\",\n \"confidenceAria\": \"置信度 {pct}%\",\n \"noAi\": \"无 AI 建议\"\n },\n \"value\": {\n \"none\": \"无值\",\n \"absent\": \"无\",\n \"dash\": \"—\",\n \"display\": \"显示\",\n \"key\": \"键\",\n \"rank\": \"排名 {n}\",\n \"span\": \"跨度 {n}\",\n \"tableCount\": \"{n} 张表\",\n \"widgetCount\": \"{n} 个小组件\",\n \"enumWorkflow\": \"工作流\",\n \"enumCategory\": \"分类\",\n \"notPii\": \"非个人信息\",\n \"label\": \"标签\",\n \"description\": \"描述\",\n \"subtitle\": \"页面副标题\",\n \"headline\": \"空状态标题\",\n \"guidance\": \"空状态提示\"\n },\n \"apply\": {\n \"title\": \"应用 {n} 项建议\",\n \"subtitle\": \"这些更改将在一个事务中写入,并可撤销。\",\n \"empty\": \"未选择任何要应用的内容。\",\n \"confirm\": \"应用更改\"\n },\n \"footer\": {\n \"count\": \"已选择 {n} 项建议\",\n \"apply\": \"应用 {n} 项已接受的建议\",\n \"failed\": \"应用失败\"\n },\n \"toast\": {\n \"applied\": \"已应用 {n} 项建议\",\n \"appliedPartial\": \"已应用 {n} 项建议(部分已跳过)\",\n \"applyFailed\": \"无法应用建议\",\n \"undoFailed\": \"无法撤销此更改\"\n },\n \"error\": {\n \"title\": \"无法加载此运行\"\n },\n \"notReady\": {\n \"title\": \"此运行尚无可审查的建议\",\n \"body\": \"运行必须先通过验证,才能审查其建议。请先生成或粘贴响应。\"\n },\n \"applied\": {\n \"title\": \"此运行已应用\",\n \"body\": \"下方已接受的建议为只读。\"\n },\n \"empty\": {\n \"title\": \"无建议\",\n \"body\": \"此运行未生成可审查的建议。\"\n },\n \"cat\": {\n \"label\": \"标签\",\n \"key\": \"键列\",\n \"enum\": \"枚举\",\n \"relation\": \"关系\",\n \"pii\": \"个人信息\",\n \"template\": \"页面模板\",\n \"group\": \"导航分组\",\n \"dashboard\": \"仪表盘\",\n \"widget\": \"小组件\",\n \"copy\": \"微文案\"\n }\n }\n },\n \"wizard\": {\n \"title\": \"新建连接\",\n \"back\": \"返回\",\n \"continue\": \"继续\",\n \"progress\": \"设置进度\",\n \"persistFailed\": \"无法保存你的表选择——请重试。\",\n \"persistFailedTitle\": \"保存失败\",\n \"step\": {\n \"source\": \"来源\",\n \"test\": \"分析\",\n \"tables\": \"数据表\",\n \"meta\": \"元数据存储\",\n \"intent\": \"意图\",\n \"enrich\": \"丰富\",\n \"generate\": \"生成\"\n }\n },\n \"meta\": {\n \"title\": \"Adminium 应把自己的表放在哪里?\",\n \"subtitle\": \"页面、角色、审计日志和设置存放在以 adminium_ 为前缀的表中——绝不混入你的数据。\",\n \"sameDb\": {\n \"title\": \"同一数据库\",\n \"description\": \"adminium_* 表将创建在你的源表旁边。这是最简单的设置——需要具有写入和 CREATE TABLE 权限的角色。\",\n \"disabledReadOnly\": \"你的角色是只读的——Adminium 绝不会写入此数据库。请为 Adminium 自己的表选择单独的数据库。\",\n \"disabledNoDdl\": \"该角色无法执行 DDL——Adminium 迁移需要 CREATE TABLE 权限。请为 Adminium 自己的表选择单独的数据库。\",\n \"disabledFile\": \"架构文件没有实时数据库——请为 Adminium 自己的表选择单独的数据库。\"\n },\n \"separate\": {\n \"title\": \"单独的数据库\",\n \"description\": \"Adminium 将其表保存在另一个数据库中。你的源保持不变——只读源必须如此。\",\n \"dsn\": \"元数据库连接字符串\",\n \"helper\": \"需要写入和 DDL 权限——Adminium 会在那里运行自己的迁移。\",\n \"test\": \"测试连接\",\n \"ok\": \"兼容——写入 ✓ · DDL ✓\",\n \"insufficient\": \"该角色无法承载元数据存储——Adminium 在那里需要写入和 CREATE TABLE 权限。\",\n \"errorTitle\": \"元数据存储不兼容\"\n },\n \"testFailed\": \"连接失败。\",\n \"v1Note\": {\n \"title\": \"关于此安装\",\n \"body\": \"此服务器在首次启动时选择了元数据存储。此步骤验证你的选择与此连接兼容并记录下来——服务器会独立执行同一规则(409 META_PLACEMENT_INVALID)。迁移现有元数据存储属于运维任务(M10)。\"\n }\n },\n \"intent\": {\n \"title\": \"你需要什么?\",\n \"subtitle\": \"意图决定生成哪些页面。之后可以更改——更改会提议重新生成,绝不会静默重写。\",\n \"trust\": \"我们只读取你的架构——设置期间绝不读取行数据。\",\n \"fullAdmin\": {\n \"title\": \"完整管理面板\",\n \"description\": \"仪表板、CRUD 页面、搜索、导入与导出——你的架构支持的一切。\"\n },\n \"analytics\": {\n \"title\": \"只读分析\",\n \"description\": \"仪表板、图表和只读网格。没有表单、没有写入——所有角色上限为查看者。\"\n },\n \"crud\": {\n \"title\": \"CRUD 数据表\",\n \"description\": \"每个表一个编辑页面,外加搜索和导入/导出——极简主页,没有仪表板。\"\n },\n \"support\": {\n \"title\": \"客服控制台\",\n \"description\": \"优先生成队列、工单和客户详情页面。默认关闭删除。(队列模板在 M7 提供——v1 页面集与完整管理面板相同。)\"\n }\n },\n \"generate\": {\n \"title\": \"生成你的应用\",\n \"subtitle\": \"每个已包含的表一个页面,外加按领域生成的仪表板——意图:\",\n \"run\": \"生成仪表板\",\n \"openApp\": \"打开你的应用\",\n \"logLabel\": \"生成日志\",\n \"log\": {\n \"classifying\": \"正在对架构分类…\",\n \"composing\": \"正在组合模板…\",\n \"writing\": \"正在写入页面…\",\n \"done\": \"已生成 {pages} 个页面,分布于 {groups} 个导航组\"\n },\n \"successTitle\": \"你的仪表板已就绪\",\n \"successBody\": \"{pages} 个页面,分布于 {groups} 个导航组——由你的架构生成,可在 Studio 中编辑。\",\n \"errorTitle\": \"生成失败\",\n \"failed\": \"生成失败——请重试,或先重新运行自省。\",\n \"fileTitle\": \"架构文件已解析——生成需要实时数据库\",\n \"fileBody\": \"你的架构解析顺利,上方预览是真实的。直接从架构文件生成可运行的应用(含占位行)尚不可用——请连接实时数据库立即生成。\"\n },\n \"remap\": {\n \"column\": {\n \"nullable\": \"可为空\",\n \"labelOverride\": \"显示标签\",\n \"labelHelper\": \"推断:{name}\",\n \"logicalType\": \"逻辑类型\",\n \"logicalTypeHelper\": \"推断:{type}(来自 {dbType})——由适配器映射;v1 中不可覆盖。\",\n \"semantic\": \"语义类型\",\n \"unclassified\": \"尚未分类。\",\n \"semanticHelper\": \"分类器:{tag} · 置信度 {confidence}% · 来源:{source}\",\n \"semanticInferred\": \"推断:{tag}\",\n \"currency\": \"货币\",\n \"currencyHelper\": \"应用于金额格式化的 ISO 4217 代码。\",\n \"pii\": \"默认脱敏\",\n \"piiHelper\": \"脱敏值以遮盖形式显示;取消脱敏需要 data.unmask_pii 权限,并会记录到审计日志。\",\n \"enum\": \"枚举语义\",\n \"enumKind\": \"枚举种类\",\n \"enumWorkflow\": \"工作流\",\n \"enumCategory\": \"分类\",\n \"enumLabelFor\": \"{value} 的标签\",\n \"enumToneFor\": \"{value} 的色调\",\n \"enumToneAuto\": \"自动\",\n \"enumHelper\": \"工作流枚举驱动状态徽章和看板列;色调将各值映射到语义色阶上。\"\n },\n \"diff\": {\n \"one\": \"1 项更改\",\n \"count\": \"{count} 项更改\",\n \"saved\": \"覆盖已保存。\",\n \"revertOne\": \"还原 {change}\",\n \"regenerate\": \"重新生成页面\",\n \"revertAll\": \"全部还原\",\n \"save\": \"保存覆盖\"\n },\n \"table\": {\n \"iconPicker\": \"表图标\",\n \"system\": \"系统\",\n \"labelOverride\": \"显示标签\",\n \"labelHelper\": \"推断:{name}\",\n \"icon\": \"图标\",\n \"navGroup\": \"导航组\",\n \"navGroupHelper\": \"导航位置由生成器决定——table.navGroup 覆盖不在 v1 词汇表中。\",\n \"include\": \"包含在生成的应用中\",\n \"includeHelper\": \"被排除的表不会生成页面,也不会出现在导航中。\",\n \"shape\": \"表形态(已分类)\",\n \"role\": \"角色\",\n \"unclassified\": \"未分类\",\n \"kind\": \"种类\",\n \"hierarchy\": \"层级\",\n \"selfFk\": \"通过 {column} 自引用\",\n \"polymorphic\": \"多态列对\",\n \"rows\": \"行数估算\",\n \"shapeHelper\": \"每次自省都会重新计算分类;覆盖叠加在其上,并在重新生成后保留。\"\n },\n \"relations\": {\n \"declared\": \"已声明的外键\",\n \"noneDeclared\": \"没有已声明的外键涉及此表。\",\n \"inferred\": \"推断的关系\",\n \"noneInferred\": \"此表没有推断结果。\",\n \"confidence\": \"推断 · {pct}%\",\n \"accepted\": \"已接受\",\n \"suppressed\": \"已屏蔽\",\n \"accept\": \"接受\",\n \"suppress\": \"屏蔽\",\n \"overrides\": \"覆盖关系(已应用)\",\n \"overrideBadge\": \"覆盖\",\n \"add\": \"添加虚拟关系\",\n \"fromColumn\": \"源列\",\n \"noColumns\": \"没有匹配的列\",\n \"fromPlaceholder\": \"customer_id\",\n \"toTable\": \"目标表\",\n \"noTables\": \"没有匹配的表\",\n \"toColumn\": \"目标列\",\n \"cardinality\": \"基数\",\n \"addButton\": \"添加关系\"\n },\n \"toast\": {\n \"saved\": \"架构覆盖已保存\",\n \"savedDetail\": \"下方已应用的架构反映了你的更改。\",\n \"regenerated\": \"已创建 {created} · 已更新 {updated} · 未变化 {unchanged}\",\n \"regeneratedDetail\": \"你手动编辑过的页面会被保留——只有 generated_hash 未被改动的页面才会原地重新生成。\",\n \"regenerateFailed\": \"重新生成失败\"\n },\n \"title\": \"架构重映射\",\n \"subtitle\": \"{tables} 张表 · 已应用 {applied} 项覆盖\",\n \"saveFailed\": \"保存失败:{message}\",\n \"loadFailed\": \"无法加载此连接的架构。\",\n \"inspector\": \"检查器\",\n \"empty\": {\n \"title\": \"选择一个表或列\",\n \"description\": \"在架构树中选择一项,以重映射其标签、类型、关系或脱敏设置。\"\n },\n \"tabs\": {\n \"details\": \"详情\",\n \"relations\": \"关系\"\n },\n \"tree\": {\n \"label\": \"架构\",\n \"search\": \"搜索表和列\",\n \"searchPlaceholder\": \"搜索表…\",\n \"noMatches\": \"没有与搜索匹配的表。\",\n \"collapse\": \"折叠表\",\n \"expand\": \"展开表\",\n \"unsaved\": \"未保存的更改\",\n \"excluded\": \"已排除\"\n },\n \"badge\": {\n \"pk\": \"主键\",\n \"fk\": \"外键\",\n \"unique\": \"唯一\",\n \"pii\": \"PII\",\n \"masked\": \"已脱敏\"\n }\n }\n },\n \"onboarding\": {\n \"title\": \"开始使用\",\n \"subtitle\": \"几个步骤,让你的工作区准备就绪。\",\n \"loading\": \"正在加载设置清单…\",\n \"welcome\": \"欢迎使用 Adminium,{name} 👋\",\n \"progressBody\": \"你已完成 {total} 个设置步骤中的 {done} 个。完成其余步骤以解锁完整工作区。\",\n \"completeBody\": \"全部就绪 — 你的工作区已完全配置。\",\n \"ringLabel\": \"已完成 {total} 个步骤中的 {done} 个\",\n \"done\": \"完成\",\n \"skip\": \"暂时跳过\",\n \"goToWorkspace\": \"前往工作区\",\n \"help\": {\n \"title\": \"需要帮助?\",\n \"body\": \"我们随时帮助你快速完成设置。\"\n },\n \"steps\": {\n \"connectDatabase\": {\n \"title\": \"连接数据库\",\n \"desc\": \"将 Adminium 指向你的 Postgres、MySQL 或 SQLite — 只读角色也可以。\",\n \"time\": \"5 分钟\",\n \"action\": \"连接\"\n },\n \"chooseTables\": {\n \"title\": \"选择你的表\",\n \"desc\": \"选择哪些表成为页面 — 个人信息默认已脱敏。\",\n \"time\": \"2 分钟\",\n \"action\": \"选择\"\n },\n \"inviteTeammates\": {\n \"title\": \"邀请团队成员\",\n \"desc\": \"邀请团队一起探索和协作。\",\n \"time\": \"2 分钟\",\n \"action\": \"邀请\"\n },\n \"workspaceDefaults\": {\n \"title\": \"设置工作区默认值\",\n \"desc\": \"为所有人设置主题、强调色、密度和语言。\",\n \"time\": \"1 分钟\",\n \"action\": \"设置\"\n }\n },\n \"entry\": {\n \"wayBack\": \"开始使用 · {done}/{total}\",\n \"dismiss\": \"隐藏设置清单\",\n \"continue\": \"继续设置\",\n \"banner\": \"完成工作区设置 — 已完成 {total} 个步骤中的 {done} 个。\"\n }\n },\n \"views\": {\n \"baseView\": \"全部记录\",\n \"menuLabel\": \"已保存视图\",\n \"saveAs\": \"将当前保存为视图…\",\n \"updateActive\": \"更新“{name}”\",\n \"rename\": \"重命名…\",\n \"setDefault\": \"设为默认\",\n \"delete\": \"删除…\",\n \"saveTitle\": \"保存视图\",\n \"save\": \"保存视图\",\n \"renameTitle\": \"重命名视图\",\n \"saveName\": \"保存名称\",\n \"nameLabel\": \"视图名称\",\n \"namePlaceholder\": \"例如:本月活跃\",\n \"nameRequired\": \"请输入此视图的名称。\",\n \"saveFailed\": \"无法保存视图。\",\n \"deleteTitle\": \"删除视图\",\n \"deleteBody\": \"这将移除已保存的视图。你的数据不受影响。\",\n \"deletePrompt\": \"输入视图名称以确认\",\n \"deleteConfirm\": \"删除视图\",\n \"savedToast\": \"视图“{name}”已保存。\",\n \"updatedToast\": \"视图“{name}”已更新。\",\n \"defaultToast\": \"“{name}”现在是默认视图。\",\n \"deletedToast\": \"视图“{name}”已删除。\"\n },\n \"builder\": {\n \"view\": \"查看\",\n \"edit\": \"编辑\",\n \"done\": \"完成\",\n \"addWidget\": \"添加小组件\",\n \"saveLayout\": \"保存布局\",\n \"saving\": \"正在保存…\",\n \"savedShort\": \"已保存\",\n \"options\": \"仪表盘选项\",\n \"resetLayout\": \"重置布局\",\n \"resetTitle\": \"重置为共享布局?\",\n \"resetBody\": \"这将移除你的个人更改并恢复所有人看到的仪表盘。你的数据不受影响。\",\n \"resetConfirm\": \"重置布局\",\n \"resetDone\": \"布局已重置为共享默认值。\",\n \"sharedNote\": \"你正在编辑所有人都能看到的共享仪表盘。\",\n \"personalNote\": \"你正在编辑个人布局——只有你能看到这些更改。\",\n \"savedShared\": \"仪表盘已为所有有权限的人保存。\",\n \"empty\": \"此仪表盘尚无任何小组件。\",\n \"emptyAction\": \"添加小组件\",\n \"palette\": {\n \"title\": \"添加小组件\",\n \"count\": \"{count} 个小组件\",\n \"searchLabel\": \"搜索小组件\",\n \"searchPlaceholder\": \"搜索小组件…\",\n \"clear\": \"清除搜索\",\n \"noResults\": \"没有小组件匹配“{query}”。\",\n \"add\": \"添加 {name}\",\n \"added\": \"已添加 {name}。\"\n },\n \"inspector\": {\n \"title\": \"配置小组件\",\n \"empty\": \"此小组件没有可配置的选项。\",\n \"locked\": \"已锁定\",\n \"lockedHint\": \"此字段由数据源设置,无法在此处编辑。\",\n \"selectPlaceholder\": \"选择…\",\n \"increment\": \"增加\",\n \"decrement\": \"减少\",\n \"done\": \"完成\"\n },\n \"item\": {\n \"configure\": \"配置 {name}\",\n \"duplicate\": \"复制 {name}\",\n \"remove\": \"移除 {name}\",\n \"removed\": \"已移除 {name}。\",\n \"duplicated\": \"已复制 {name}。\"\n },\n \"families\": {\n \"kpi\": \"关键指标\",\n \"charts\": \"图表\",\n \"tables\": \"表格\",\n \"feeds\": \"动态\",\n \"calendar\": \"日历\",\n \"boards\": \"看板\",\n \"geo\": \"地图\",\n \"media\": \"媒体\",\n \"communication\": \"沟通\",\n \"forms\": \"表单\",\n \"chrome\": \"导航\",\n \"system\": \"系统\",\n \"domain\": \"领域\"\n },\n \"versions\": \"版本\",\n \"versionsEmpty\": \"还没有保存的版本\",\n \"saveAsVersion\": \"保存为版本\",\n \"saveVersionTitle\": \"保存版本\",\n \"saveVersionBody\": \"为当前文档创建快照。可随时从“版本”中恢复。\",\n \"versionName\": \"版本名称\",\n \"versionNamePlaceholder\": \"例如:Q3 费率调整前\"\n },\n \"setup\": {\n \"title\": \"设置 Adminium\",\n \"subtitle\": \"创建第一位管理员。此操作只进行一次。\",\n \"progress\": \"设置进度\",\n \"steps\": {\n \"account\": \"管理员账户\",\n \"consent\": \"隐私\"\n },\n \"account\": {\n \"name\": \"你的姓名\",\n \"email\": \"邮箱\",\n \"emailInvalid\": \"请输入有效的邮箱地址。\",\n \"password\": \"密码\",\n \"passwordHelper\": \"至少 {min} 个字符。\",\n \"passwordTooShort\": \"请至少使用 {min} 个字符。\",\n \"confirm\": \"确认密码\",\n \"passwordMismatch\": \"两次输入的密码不一致。\",\n \"continue\": \"继续\",\n \"strength\": \"密码强度\",\n \"strengthLevels\": {\n \"weak\": \"弱\",\n \"fair\": \"一般\",\n \"good\": \"良好\",\n \"strong\": \"强\"\n }\n },\n \"consent\": {\n \"telemetry\": {\n \"title\": \"共享匿名使用数据\",\n \"description\": \"帮助我们了解应优先支持哪些数据库引擎。默认关闭,除非你主动开启。\"\n },\n \"updates\": {\n \"title\": \"检查新版本\",\n \"description\": \"当有新版本(包括安全修复)可用时显示提示。这会向 GitHub 查询最新发行版,因而会向 GitHub 暴露本实例的 IP 地址和版本。除此之外不会发送任何内容。\"\n },\n \"sentTitle\": \"发送的内容仅限于:\",\n \"sent\": {\n \"instanceId\": \"一个随机实例 ID(在本地生成的 UUID;不由你的姓名、主机或数据库推导而来)\",\n \"version\": \"本实例运行的 Adminium 版本\",\n \"engines\": \"已连接的数据库引擎类型(例如 “postgres”)——仅类型\"\n },\n \"neverTitle\": \"绝不发送:\",\n \"never\": {\n \"schema\": \"你的表结构——不含任何表名、列名或枚举名\",\n \"rows\": \"你的数据——从不发送任何一行\",\n \"connections\": \"连接字符串、主机名或凭据\",\n \"people\": \"用户的邮箱、姓名或 ID\",\n \"llm\": \"AI 提示词或运行内容\"\n },\n \"reversible\": \"两项默认均为关闭,之后你可以随时在“设置”中更改。\",\n \"back\": \"返回\",\n \"finish\": \"创建管理员账户\"\n },\n \"error\": {\n \"alreadyCompleted\": \"本实例已完成设置。请使用现有的管理员账户登录。\",\n \"rejected\": \"服务器拒绝了这些信息。请检查邮箱和密码后重试。\",\n \"failed\": \"设置失败。请检查网络连接后重试。\"\n }\n },\n \"about\": {\n \"title\": \"关于 Adminium\",\n \"subtitle\": \"版本、许可证,以及本实例源代码的位置。\",\n \"version\": \"版本\",\n \"license\": \"许可证\",\n \"metaStore\": \"元数据存储\",\n \"node\": \"Node.js\",\n \"engine\": {\n \"postgres\": \"PostgreSQL\",\n \"mysql\": \"MySQL / MariaDB\",\n \"sqlite\": \"SQLite\"\n },\n \"licenseCard\": {\n \"title\": \"自由与开源\",\n \"body\": \"Adminium 基于 GNU Affero 通用公共许可证 v3.0 授权。你可以自由地运行、研究、修改和分享它。如果你通过网络向他人提供修改后的版本,AGPL 要求你同样向他们提供其源代码。\"\n },\n \"viewLicense\": \"阅读许可证\",\n \"viewSource\": \"获取源代码\",\n \"updates\": {\n \"title\": \"更新\",\n \"description\": \"本实例是否检查新版本。\"\n },\n \"update\": {\n \"disabled\": \"更新检查已关闭,因此本实例从不联系 GitHub。可在“设置”中开启以获知新版本。\",\n \"current\": \"你正在使用最新版本。\",\n \"available\": \"Adminium {version} 已发布\",\n \"availableBody\": \"你当前运行的是 {version}。\",\n \"viewRelease\": \"查看发行说明\"\n },\n \"desktop\": {\n \"unknown\": \"未知\",\n \"appVersion\": \"应用版本\",\n \"serverVersion\": \"服务器版本\",\n \"migration\": \"元数据库迁移\",\n \"electron\": \"Electron\",\n \"chromium\": \"Chromium\",\n \"runtimeNode\": \"Node 运行时\",\n \"system\": {\n \"title\": \"系统\"\n },\n \"dataDir\": \"数据目录\",\n \"reveal\": \"在文件夹中显示\",\n \"secret\": {\n \"title\": \"密钥存储\",\n \"safe\": \"由操作系统加密\",\n \"plainWarning\": \"此电脑没有可用的系统钥匙串,因此你的 Adminium 密钥以未加密方式存储在磁盘上。任何能读取本机文件的人都能读取它。请设置登录钥匙串(或 Linux 密钥服务)并重启 Adminium 以保护它。\"\n },\n \"updates\": {\n \"title\": \"更新\",\n \"mode\": {\n \"notify\": \"有新版本时通知我\",\n \"manual\": \"仅在我检查时\",\n \"disabled\": \"关闭(离线)\"\n },\n \"disabledBody\": \"自动更新已关闭(离线)。请手动安装新版本。\",\n \"check\": \"检查更新\",\n \"checking\": \"正在检查…\",\n \"lastChecked\": \"上次检查 {when}\",\n \"available\": \"版本 {version} 可用\",\n \"none\": \"你已是最新版本。\",\n \"unavailable\": \"此安装已关闭更新。\",\n \"error\": \"无法检查更新。\",\n \"download\": \"下载更新\",\n \"downloading\": \"正在下载… {percent}%\",\n \"downloaded\": \"版本 {version} 已可安装\",\n \"restart\": \"重启以安装\",\n \"downloadError\": \"下载未完成。你可以重试。\",\n \"toast\": {\n \"available\": \"有新版本的 Adminium 可用\",\n \"view\": \"查看\",\n \"downloaded\": \"更新已可安装\",\n \"restart\": \"立即重启\"\n }\n },\n \"legal\": {\n \"title\": \"许可证\",\n \"agpl\": \"Adminium Desktop 是遵循 GNU Affero General Public License v3.0 的自由软件。\",\n \"viewLicense\": \"查看许可证\",\n \"licenseTitle\": \"GNU Affero General Public License v3.0\",\n \"licenseUnavailable\": \"此构建中没有随附的许可证文件。\",\n \"viewNotices\": \"第三方许可证\",\n \"noticesTitle\": \"第三方声明\",\n \"noticesUnavailable\": \"第三方声明在应用打包时生成,此构建中不可用。\",\n \"source\": \"源代码\",\n \"close\": \"关闭\"\n },\n \"telemetry\": {\n \"title\": \"匿名使用数据\",\n \"label\": \"共享匿名使用数据\",\n \"description\": \"帮助我们决定优先支持哪些数据库引擎。除非你开启,否则默认关闭;绝不会发送架构、数据或个人信息。\",\n \"saveFailed\": \"无法保存该设置。请重试。\"\n },\n \"diagnostics\": {\n \"title\": \"诊断\",\n \"description\": \"有助于你报告问题的详细信息。不包含任何架构或数据。\",\n \"copy\": \"复制诊断信息\",\n \"copied\": \"已复制\",\n \"showLogs\": \"显示日志\",\n \"dataSize\": \"数据大小:{size}\"\n }\n }\n },\n \"apiKeys\": {\n \"title\": \"API 密钥与令牌\",\n \"subtitle\": \"管理对工作区的程序化访问。\",\n \"createButton\": \"创建密钥\",\n \"copy\": \"复制\",\n \"copied\": \"已复制\",\n \"revoke\": \"吊销密钥\",\n \"neverUsed\": \"从未使用\",\n \"lastUsed\": \"上次使用于 {since}\",\n \"scopesOverflow\": \"另有 {count} 项\",\n \"status\": {\n \"active\": \"有效\",\n \"revoked\": \"已吊销\",\n \"expired\": \"已过期\"\n },\n \"list\": {\n \"title\": \"密钥\",\n \"activeCount\": \"{count, plural, other {# 个有效密钥}}\"\n },\n \"empty\": {\n \"title\": \"尚无 API 密钥\",\n \"body\": \"创建一个,即可在自己的代码中调用 Adminium API。\"\n },\n \"revealed\": {\n \"title\": \"新密钥已创建\",\n \"body\": \"请立即复制 —— 之后将无法再次查看。\"\n },\n \"rolesUnavailable\": {\n \"title\": \"你无权查看角色\",\n \"body\": \"创建密钥需要选择它所代表的角色,而你的账号无法读取角色列表。请向管理员申请“管理角色”权限。\"\n },\n \"quickStart\": {\n \"title\": \"快速开始\",\n \"body\": \"在 Authorization 请求头中携带密钥完成鉴权。\"\n },\n \"create\": {\n \"title\": \"创建 API 密钥\",\n \"description\": \"该密钥将以你所选角色的权限运行。\",\n \"name\": \"名称\",\n \"namePlaceholder\": \"例如:分析数据管道\",\n \"role\": \"角色\",\n \"roleHelper\": \"选择能完成任务的最小权限角色。\",\n \"expires\": \"过期时间\",\n \"expiresHelper\": \"留空表示密钥永不过期。\",\n \"submit\": \"创建密钥\",\n \"failed\": \"无法创建密钥\"\n },\n \"revokeConfirm\": {\n \"title\": \"吊销 API 密钥\",\n \"body\": \"任何仍在使用“{name}”调用 API 的代码将立即失败。此操作无法撤销。\",\n \"prompt\": \"输入“{name}”以确认\",\n \"confirm\": \"吊销密钥\"\n }\n },\n \"changelog\": {\n \"title\": \"更新日志\",\n \"subtitle\": \"产品更新与版本发布。\",\n \"allReleases\": \"全部版本\",\n \"tag\": {\n \"new\": \"新增\",\n \"improved\": \"改进\",\n \"fixed\": \"修复\",\n \"security\": \"安全\"\n },\n \"filter\": {\n \"all\": \"全部\",\n \"label\": \"按类型筛选变更\"\n },\n \"empty\": {\n \"title\": \"该筛选下暂无内容\",\n \"body\": \"还没有版本包含此类变更。\",\n \"clear\": \"显示全部变更\"\n }\n },\n \"kb\": {\n \"title\": \"知识库\",\n \"subtitle\": \"{count, plural, other {# 篇指南}} · 完整文档见 docs.adminium.dev\",\n \"openDocs\": \"打开文档\",\n \"browse\": \"按主题浏览\",\n \"hero\": {\n \"title\": \"需要什么帮助?\",\n \"subtitle\": \"搜索指南、API 文档与故障排查。\",\n \"placeholder\": \"搜索知识库…\",\n \"label\": \"搜索知识库\",\n \"clear\": \"清除搜索\"\n },\n \"category\": {\n \"start\": \"入门\",\n \"connect\": \"连接数据\",\n \"api\": \"API 与开发\",\n \"security\": \"安全与访问\",\n \"selfhost\": \"自托管\",\n \"trouble\": \"故障排查\",\n \"count\": \"{count, plural, other {# 篇文章}}\",\n \"selected\": \"筛选中\"\n },\n \"list\": {\n \"all\": \"全部指南\",\n \"clear\": \"清除筛选\"\n },\n \"empty\": {\n \"title\": \"没有匹配的指南\",\n \"body\": \"换个关键词,或前往 docs.adminium.dev 搜索完整文档。\",\n \"openDocs\": \"打开文档\"\n },\n \"article\": {\n \"install\": {\n \"title\": \"安装 Adminium\",\n \"excerpt\": \"从源码检出运行,或使用 docker run,一分钟内进入首次运行向导。\"\n },\n \"firstAdmin\": {\n \"title\": \"创建第一位超级管理员\",\n \"excerpt\": \"首次运行向导会询问什么,以及它为何只能运行一次。\"\n },\n \"connectDb\": {\n \"title\": \"连接你的第一个数据库\",\n \"excerpt\": \"将 Adminium 指向 PostgreSQL、MySQL 或 SQLite,生成后台管理应用。\"\n },\n \"schemaFile\": {\n \"title\": \"从模式文件生成\",\n \"excerpt\": \"上传 Prisma schema、Django models.py、Rails schema.rb 或 .sql 转储 —— 无需数据库连接。\"\n },\n \"readOnly\": {\n \"title\": \"使用只读角色\",\n \"excerpt\": \"内省仅读取模式元数据。请只授予 Adminium 必需的最小权限。\"\n },\n \"apiKeys\": {\n \"title\": \"使用 API 密钥鉴权\",\n \"excerpt\": \"创建与吊销密钥,以及密钥为何只向你展示一次。\"\n },\n \"rest\": {\n \"title\": \"REST API 参考\",\n \"excerpt\": \"生成应用暴露的每个端点,含请求与响应结构。\"\n },\n \"manifest\": {\n \"title\": \"页面清单\",\n \"excerpt\": \"页面如何以配置描述,以及如何手工编辑。\"\n },\n \"roles\": {\n \"title\": \"角色与权限\",\n \"excerpt\": \"分配查看者、编辑者与管理员,并用权限矩阵自建角色。\"\n },\n \"audit\": {\n \"title\": \"阅读审计日志\",\n \"excerpt\": \"谁在何时、从何处更改了什么。\"\n },\n \"secrets\": {\n \"title\": \"Adminium 如何保存你的机密\",\n \"excerpt\": \"连接凭据使用 ADMINIUM_SECRET 加密存储,API 密钥则以哈希保存。\"\n },\n \"docker\": {\n \"title\": \"使用 Docker 自托管\",\n \"excerpt\": \"官方镜像、docker-compose,以及独立元数据库的运行方式。\"\n },\n \"backup\": {\n \"title\": \"备份与迁移实例\",\n \"excerpt\": \"export-zip 打包服务器配置;导入后可在别处重放同一套设置。\"\n },\n \"telemetry\": {\n \"title\": \"遥测与更新检查\",\n \"excerpt\": \"两者均为选择性开启,默认关闭。开启后会发送哪些内容。\"\n },\n \"connectionFails\": {\n \"title\": \"数据库连接失败\",\n \"excerpt\": \"查看诊断卡片:主机、端口、TLS,以及数据库需放行的 IP。\"\n },\n \"missingTables\": {\n \"title\": \"内省后缺少表\",\n \"excerpt\": \"模式可见性、被排除的表,以及重新运行生成。\"\n }\n }\n },\n \"desktop\": {\n \"menu\": {\n \"file\": \"文件\",\n \"fileNewDatabase\": \"新建本地数据库…\",\n \"fileOpenSqlite\": \"打开 SQLite 文件…\",\n \"fileBackupNow\": \"立即备份…\",\n \"fileRestore\": \"从备份恢复…\",\n \"edit\": \"编辑\",\n \"view\": \"视图\",\n \"window\": \"窗口\",\n \"help\": \"帮助\",\n \"helpDocs\": \"Adminium 文档\",\n \"helpShortcuts\": \"键盘快捷键\",\n \"helpLogs\": \"显示日志\",\n \"helpCheckForUpdates\": \"检查更新…\",\n \"helpAbout\": \"关于 Adminium\"\n },\n \"settings\": {\n \"explainer\": \"这些设置仅适用于这台电脑上的 Adminium 应用,保存在本机,不会保存到你的工作区。\"\n },\n \"security\": {\n \"heading\": \"登录\"\n },\n \"requireLogin\": {\n \"label\": \"在此设备上要求登录\",\n \"description\": \"Adminium 通常会在这台电脑上自动登录。开启后,每次启动都会要求输入密码——如果其他人也能使用这台电脑,建议开启。该设置将在下次打开 Adminium 时生效。\",\n \"savedOn\": \"下次启动时需要登录\",\n \"savedOff\": \"Adminium 将在这台电脑上跳过登录\",\n \"saveFailed\": \"无法保存该设置,请重试。\"\n },\n \"chip\": {\n \"local\": \"本地\",\n \"lanShare\": \"本地 · 已在局域网共享\",\n \"remoteDb\": \"本地 + 远程数据库\",\n \"remoteDbOffline\": \"远程数据库离线\",\n \"remoteDbOfflineDetail\": \"无法连接 {names}。这些连接的页面会显示重新连接状态。\"\n },\n \"lan\": {\n \"heading\": \"在局域网中共享\",\n \"label\": \"允许此网络中的其他设备使用 Adminium\",\n \"description\": \"同一网络中的其他电脑、平板和手机可以在浏览器中打开 Adminium,并用各自的账户登录。Adminium 必须在这台电脑上保持打开,他们才能访问。\",\n \"savedOn\": \"正在局域网中共享\",\n \"savedOff\": \"已停止共享 — Adminium 恢复为仅限这台电脑\",\n \"saveFailed\": \"无法更改网络共享\",\n \"noUsers\": \"目前只有你拥有账户,因此还没有其他人能登录。共享仍然可用 — 只是需要先邀请其他人才能使用。\",\n \"usersUnknown\": \"Adminium 无法检查这台电脑上还有谁拥有账户。共享仍然有效,任何拥有账户的人都可以登录——只有这项检查失败了。\",\n \"acknowledge\": \"我知道了 — 我接下来会邀请其他人\",\n \"port\": \"端口\",\n \"portHelper\": \"默认 {port}\",\n \"portInvalid\": \"请输入 1024 到 65535 之间的数字。\",\n \"applyPort\": \"更改端口\",\n \"portInUse\": \"端口 {port} 已被其他程序占用。\",\n \"portInUseHint\": \"未做任何更改 — 共享仍处于关闭状态。\",\n \"portInUseNoSuggestion\": \"未做任何更改。请尝试其他端口。\",\n \"tryPort\": \"尝试 {port}\",\n \"urlsHeading\": \"在其他设备上打开\",\n \"noUrls\": \"这台电脑当前未连接到网络,因此没有可共享的地址。连接 Wi-Fi 或插入网线后,此列表会自动填充。\",\n \"copyUrl\": \"复制\",\n \"sessions\": \"{count, plural, =0 {没有来自此网络的设备登录} other {已有 # 台设备从此网络登录}}\",\n \"sessionsUnknown\": \"正在检查已连接的设备…\",\n \"pending\": \"正在开始共享…\",\n \"mismatch\": \"Adminium 在此网络中仍可访问\",\n \"mismatchBody\": \"共享已关闭,但服务器尚未释放网络。请重启 Adminium 以关闭它。\",\n \"transportTitle\": \"局域网中的流量未加密。\",\n \"transportBody\": \"仅在你信任的网络中共享。如需远程访问,请使用置于 HTTPS 之后的 Adminium 自托管版本。\",\n \"firewall\": \"首次共享时,操作系统会询问是否允许传入连接 — 请选择\\\"允许\\\",否则其他设备将无法访问 Adminium。\"\n },\n \"setup\": {\n \"title\": \"欢迎使用 Adminium\",\n \"subtitle\": \"只需四个简短步骤,Adminium 就能从你的数据库生成一个管理应用。所有内容都保留在这台电脑上。\",\n \"progress\": \"设置进度\",\n \"back\": \"上一步\",\n \"continue\": \"继续\",\n \"createAccount\": \"创建账户并继续\",\n \"step\": {\n \"location\": \"欢迎\",\n \"database\": \"你的第一个数据库\",\n \"account\": \"你的账户\",\n \"generate\": \"生成\"\n },\n \"dataDir\": {\n \"heading\": \"Adminium 应该把你的数据保存在哪里?\",\n \"description\": \"你的数据库、设置和备份都存放在这个文件夹中。所有内容都保留在这台电脑上——不会上传到任何地方。\",\n \"label\": \"数据文件夹\",\n \"loading\": \"正在读取当前位置…\",\n \"pending\": \"继续时 Adminium 会重启,以便切换到这个文件夹。\",\n \"change\": \"更改…\",\n \"revert\": \"撤销\",\n \"dialogTitle\": \"选择 Adminium 保存数据的位置\",\n \"cloudSyncTitle\": \"该文件夹会同步到云端\",\n \"cloudSyncWarning\": \"Adminium 将数据存储在 SQLite 文件中。{provider} 会在后台复制“{folder}”中的文件进行同步,这可能损坏正在打开的数据库——并在毫无提示的情况下丢失数据。请选择 {provider} 之外的文件夹。\",\n \"chooseAnother\": \"选择其他文件夹\",\n \"useAnyway\": \"仍然使用——我接受风险\",\n \"unusableTitle\": \"Adminium 无法使用该文件夹\",\n \"failed\": \"Adminium 无法使用该文件夹。\"\n },\n \"source\": {\n \"heading\": \"Adminium 应该基于什么来构建?\",\n \"description\": \"Adminium 会读取数据库的结构并据此生成管理应用。你之后可以添加更多数据库。\",\n \"groupLabel\": \"数据库来源\",\n \"local\": {\n \"title\": \"创建新的本地数据库\",\n \"description\": \"从零开始,或使用你已有的结构文件。数据库会创建在你的数据文件夹中。\",\n \"name\": \"数据库名称\",\n \"namePlaceholder\": \"运营\",\n \"nameUnusable\": \"请至少使用一个字母或数字——文件名由此生成。\",\n \"fileHelper\": \"将创建 {file}\",\n \"schemaLabel\": \"起始方式\",\n \"blank\": \"空白\",\n \"fromFile\": \"结构文件\",\n \"schemaFile\": \"结构文件\",\n \"schemaFileHelper\": \".sql、pg_dump、Prisma、Drizzle、TypeORM、Sequelize、schema.rb、Django 或 Adminium JSON。Adminium 会将其转换为 SQLite。\",\n \"placeholder\": \"自动生成占位数据\",\n \"placeholderHelper\": \"你导入的结构没有数据行。为每个表填充逼真的示例数据,让仪表板和图表立刻能够呈现。\"\n },\n \"openSqlite\": {\n \"title\": \"打开现有的 SQLite 文件\",\n \"description\": \"让 Adminium 指向这台电脑上的 .sqlite 文件。文件会在原位打开——不会复制或移动。\",\n \"browse\": \"选择一个 .sqlite 文件…\",\n \"change\": \"选择其他文件…\",\n \"networkTitle\": \"该文件位于网络共享上\",\n \"networkBody\": \"SQLite 的锁机制在网络文件共享上并不可靠,写入过程中断开连接可能损坏数据库。复制到这台电脑本地磁盘上更安全。\"\n },\n \"remote\": {\n \"title\": \"连接到服务器数据库\",\n \"description\": \"PostgreSQL 或 MySQL。需要一个可访问的网络数据库;Adminium 自身的数据表仍然保留在这台电脑上。\",\n \"networkNote\": \"需要一个可访问的网络数据库\",\n \"metaNote\": \"无论如何,Adminium 自身的数据表——你的页面、设置和登录信息——都保留在这台电脑的数据文件夹中。\",\n \"engine\": \"引擎\",\n \"name\": \"连接名称\",\n \"namePlaceholder\": \"生产环境\",\n \"dsn\": \"连接字符串\",\n \"dsnHelper\": \"Adminium 会在连接时测试它。如果你只需要仪表板,请使用只读角色。\"\n },\n \"demo\": {\n \"title\": \"体验演示数据库\",\n \"description\": \"一个现成的团队运营数据库,让你在指向自己的数据之前先看看 Adminium 会构建出什么。你可以随时删除它。\",\n \"unavailable\": \"此版本不包含演示数据,因此没有可加载的内容。请选择上面的某个选项。\"\n }\n },\n \"account\": {\n \"heading\": \"创建你的账户\",\n \"description\": \"这是这份 Adminium 的管理员账户。密码用于保护你的备份以及你在网络上共享的对象——每次启动时不会向你索取密码。\",\n \"name\": \"你的姓名\",\n \"email\": \"邮箱\",\n \"password\": \"密码\",\n \"passwordHelper\": \"至少 {min} 个字符。\",\n \"confirm\": \"确认密码\",\n \"strength\": \"密码强度\",\n \"strengthLevels\": {\n \"weak\": \"弱\",\n \"fair\": \"一般\",\n \"good\": \"良好\",\n \"strong\": \"强\"\n },\n \"singleUser\": \"在这台电脑上跳过登录\",\n \"singleUserHelper\": \"在这里打开时,Adminium 会自动为你登录。如果其他人也使用这台机器,请关闭此项。你之后可以在 设置 → 桌面 中更改。\",\n \"locale\": \"语言\",\n \"theme\": \"外观\",\n \"alreadyExists\": \"这份 Adminium 已经有一个账户。请改用该账户登录。\",\n \"failed\": \"Adminium 无法创建该账户。\"\n },\n \"generate\": {\n \"creating\": \"正在设置你的数据库…\",\n \"introspecting\": \"正在读取你的结构——表、列和关系…\",\n \"working\": \"处理中…\",\n \"offlineNote\": \"这一切都在这台电脑上完成。\",\n \"failedTitle\": \"Adminium 无法设置该数据库\",\n \"failedBody\": \"出了点问题。请重试。\",\n \"retry\": \"重试\"\n }\n }\n },\n \"capabilities\": {\n \"heading\": \"应用权限\",\n \"description\": \"您安装的应用可以请求使用本计算机的硬件。您需逐一批准,并可随时撤销访问权限。\",\n \"grantedTo\": \"已允许 {app}\",\n \"status\": {\n \"available\": \"可用\",\n \"stub\": \"尚不可用\",\n \"unavailable\": \"不可用\"\n },\n \"allow\": {\n \"action\": \"允许…\"\n },\n \"revoke\": {\n \"action\": \"撤销\",\n \"saved\": \"已撤销访问权限\",\n \"failed\": \"无法撤销访问权限,请重试。\"\n },\n \"grant\": {\n \"saved\": \"已允许访问\",\n \"failed\": \"无法允许访问,请重试。\"\n },\n \"catalog\": {\n \"printerEscpos\": {\n \"name\": \"小票打印机 (ESC/POS)\",\n \"scope\": \"在小票打印机上打印并打开连接的钱箱\"\n }\n },\n \"consent\": {\n \"title\": \"允许 {app}?\",\n \"subtitle\": \"{app} 请求使用本计算机的硬件。\",\n \"willAllow\": \"这将允许 {app}:\",\n \"revokeNote\": \"您可以随时在“设置 → 桌面”中撤销。仅允许您信任的应用。\",\n \"deny\": \"暂不\",\n \"approve\": \"允许\"\n }\n },\n \"emailTemplates\": {\n \"title\": \"邮件模板\",\n \"subtitle\": \"工作区发送的事务性和生命周期邮件。\",\n \"search\": \"搜索模板…\",\n \"loadFailed\": \"无法加载模板\",\n \"empty\": \"还没有邮件模板\",\n \"emptyBody\": \"服务器初始化模板或您创建模板后,将显示在这里。\",\n \"noMatches\": \"没有匹配的模板\",\n \"noMatchesBody\": \"试试其他搜索词。\",\n \"live\": \"已启用\",\n \"disabled\": \"已禁用\",\n \"name\": \"模板名称\",\n \"subject\": \"主题\",\n \"enabled\": \"已启用\"\n },\n \"board\": {\n \"addCard\": \"添加卡片\",\n \"compose\": {\n \"placeholder\": \"卡片标题…\",\n \"add\": \"添加\",\n \"cancel\": \"取消\"\n },\n \"empty\": {\n \"title\": \"没有看板列\",\n \"body\": \"添加状态字段以将卡片分组到列中。\"\n }\n },\n \"calendar\": {\n \"dateRange\": \"日期范围\",\n \"compose\": {\n \"placeholder\": \"事件标题…\",\n \"add\": \"添加\",\n \"cancel\": \"取消\",\n \"open\": \"添加事件\"\n },\n \"agenda\": {\n \"empty\": \"暂无安排\"\n }\n },\n \"scheduler\": {\n \"prevWeek\": \"上一周\",\n \"nextWeek\": \"下一周\",\n \"week\": \"周\",\n \"month\": \"月\",\n \"resource\": \"资源\",\n \"coverage\": \"覆盖\",\n \"addShift\": \"添加班次\",\n \"shiftCount\": \"{n} 个班次\"\n },\n \"planning\": {\n \"drawer\": {\n \"close\": \"关闭\",\n \"loading\": \"正在加载记录\",\n \"error\": \"无法加载此记录。\"\n }\n },\n \"files\": {\n \"uploadsUnavailable\": \"此页面暂不支持上传。\"\n },\n \"chat\": {\n \"messageSent\": \"消息已发送\",\n \"sendFailed\": \"消息发送失败。\"\n },\n \"templates\": {\n \"crud\": {\n \"title\": \"记录\"\n },\n \"dashboard\": {\n \"title\": \"仪表盘\"\n },\n \"board\": {\n \"title\": \"看板\"\n },\n \"calendar\": {\n \"title\": \"日历\"\n },\n \"scheduler\": {\n \"title\": \"排班\"\n },\n \"logViewer\": {\n \"title\": \"日志\"\n },\n \"files\": {\n \"title\": \"文件\"\n },\n \"chat\": {\n \"title\": \"聊天\"\n },\n \"builder\": {\n \"title\": \"构建器\"\n },\n \"wizard\": {\n \"title\": \"向导\"\n },\n \"settings\": {\n \"title\": \"设置\"\n },\n \"directory\": {\n \"title\": \"通讯录\",\n \"searchPlaceholder\": \"搜索人员…\",\n \"allFilter\": \"全部\",\n \"clearFilters\": \"清除筛选\",\n \"detailTitle\": \"人员\",\n \"emptyTitle\": \"还没有人员\",\n \"emptyBody\": \"表中有数据后,人员将显示在这里。\",\n \"noMatchesTitle\": \"没有匹配的人员\",\n \"noMatchesBody\": \"试试其他搜索词或移除筛选。\",\n \"errorTitle\": \"无法加载此通讯录\",\n \"loading\": \"正在加载人员\",\n \"memberCount\": \"{count} 人\"\n },\n \"masterDetail\": {\n \"title\": \"列表与详情\",\n \"allFilter\": \"全部\",\n \"clearFilters\": \"清除筛选\",\n \"emptyTitle\": \"这里还没有内容\",\n \"emptyBody\": \"表中有数据后,记录将显示在这里。\",\n \"noMatchesTitle\": \"没有匹配的记录\",\n \"noMatchesBody\": \"试试移除筛选。\",\n \"errorTitle\": \"无法加载此列表\",\n \"loading\": \"正在加载记录\",\n \"selectPrompt\": \"选择一条记录\"\n },\n \"queueInbox\": {\n \"title\": \"队列\",\n \"approve\": \"批准\",\n \"reject\": \"拒绝\",\n \"allSegment\": \"全部\",\n \"approvedToast\": \"已批准 {count} 项。\",\n \"rejectedToast\": \"已拒绝 {count} 项。\",\n \"undoneToast\": \"已撤销该决定。\",\n \"failedToast\": \"操作失败。\",\n \"bulkFailed\": \"所选行中有 {failed}/{total} 行未能更新。\",\n \"undoFailedToast\": \"无法撤销该决定。\",\n \"rejectTitle\": \"拒绝请求\",\n \"rejectCount\": \"已选 · {count}\",\n \"rejectNote\": \"请求者将收到通知及您的备注。\",\n \"rejectPlaceholder\": \"为请求者添加备注…\",\n \"rejectConfirm\": \"拒绝\",\n \"emptyTitle\": \"队列为空\",\n \"emptyBody\": \"新请求到达后将显示在这里。\",\n \"caughtUpTitle\": \"全部处理完毕\",\n \"caughtUpBody\": \"此标签页当前没有请求。\",\n \"errorTitle\": \"无法加载此队列\",\n \"loading\": \"正在加载队列\",\n \"selectPrompt\": \"选择一个请求\",\n \"daysUnit\": \"{count} 天\"\n }\n },\n \"dataio\": {\n \"back\": \"返回\",\n \"import\": {\n \"title\": \"导入数据\",\n \"stepUpload\": \"上传\",\n \"stepMap\": \"映射列\",\n \"stepValidate\": \"校验\",\n \"stepRun\": \"导入并核查\",\n \"targetLabel\": \"目标表\",\n \"targetPlaceholder\": \"选择一个表页面…\",\n \"notATable\": \"该页面不是数据表——请选择要导入的表页面。\",\n \"dropTitle\": \"拖放 CSV 文件以导入\",\n \"dropHint\": \"CSV 最大 32 MB——第一行必须是表头\",\n \"skipTarget\": \"不导入\",\n \"mapHint\": \"{file} 中有 {count} 行数据——请为每一列选择目标。\",\n \"validating\": \"正在校验…\",\n \"toValidate\": \"校验\",\n \"validateFailed\": \"校验失败。\",\n \"validationSummary\": \"{total} 行中有 {valid} 行可导入——将跳过 {invalid} 行。\",\n \"allValid\": \"所有行均通过校验\",\n \"run\": \"运行导入\",\n \"runSkipping\": \"导入 {valid} 行(跳过 {invalid} 行)\",\n \"progressLabel\": \"导入进度\",\n \"running\": \"正在导入…\",\n \"kpiTotal\": \"文件中的行数\",\n \"kpiCreated\": \"已创建\",\n \"kpiUpdated\": \"已更新\",\n \"kpiSkipped\": \"已跳过\",\n \"inconsistent\": \"导入数字不一致——总数必须等于已创建 + 已更新 + 已跳过。\",\n \"downloadErrors\": \"下载跳过行报告(CSV)\",\n \"runFailed\": \"导入失败。\"\n },\n \"exports\": {\n \"title\": \"数据导出\",\n \"tableLabel\": \"数据表\",\n \"tablePlaceholder\": \"选择数据表…\",\n \"notATable\": \"该页面不是数据表——请选择要导出的表页面。\",\n \"formatLabel\": \"格式\",\n \"create\": \"导出\",\n \"createFailed\": \"无法发起导出。\",\n \"retention\": \"导出文件保留 30 天后过期。\",\n \"statusProcessing\": \"处理中…\",\n \"statusReady\": \"已就绪——{rows} 行·点击下载\",\n \"statusFailed\": \"失败——{error}\",\n \"statusCancelled\": \"已取消\",\n \"statusExpired\": \"已过期\",\n \"emptyTitle\": \"还没有导出\",\n \"emptyBody\": \"在上方发起导出——生成的文件将连同状态显示在这里。\"\n }\n },\n \"reports\": {\n \"title\": \"定时报告\",\n \"subtitle\": \"页面的定期数据快照,以应用内通知送达。\",\n \"new\": \"新建报告\",\n \"loadFailed\": \"无法加载定时报告。\",\n \"saveFailed\": \"无法保存此报告。\",\n \"nextRun\": \"下次运行\",\n \"emptyTitle\": \"还没有定时报告\",\n \"emptyBody\": \"创建一个,即可定期获取任意表页面的数据快照。\",\n \"createTitle\": \"新建定时报告\",\n \"editTitle\": \"编辑定时报告\",\n \"nameLabel\": \"名称\",\n \"namePlaceholder\": \"例如:每周营收\",\n \"pageLabel\": \"页面\",\n \"pagePlaceholder\": \"选择页面…\",\n \"frequencyLabel\": \"频率\",\n \"frequency\": {\n \"daily\": \"每天\",\n \"weekly\": \"每周\",\n \"monthly\": \"每月\"\n },\n \"dayOfWeekLabel\": \"星期\",\n \"dayOfMonthLabel\": \"每月日期\",\n \"timeLabel\": \"时间\",\n \"timezoneLabel\": \"时区\",\n \"formatLabel\": \"送达方式\",\n \"formatHint\": \"数据快照(PDF/PNG 渲染将在后续版本推出)——每次运行都会生成 CSV 快照和应用内通知。\",\n \"recipientsLabel\": \"收件人\",\n \"recipientsHint\": \"与报告一起保存。邮件送达将在后续版本推出——目前运行结果以应用内通知提醒您。\",\n \"deliveryBadge\": \"CSV 快照\",\n \"delete\": \"删除\",\n \"create\": \"创建\",\n \"cadence\": {\n \"daily\": \"每天 {time}({zone})\",\n \"weekly\": \"每周 · {day} {time}({zone})\",\n \"monthly\": \"每月 · {day} 日 {time}({zone})\"\n }\n },\n \"notifications\": {\n \"channel\": {\n \"inApp\": \"应用内\",\n \"email\": \"邮件\",\n \"push\": \"推送\"\n },\n \"event\": {\n \"reportReady\": \"定时报告已就绪\",\n \"reportFailed\": \"定时报告失败\",\n \"backupCompleted\": \"备份完成\"\n }\n }\n};\n//# sourceMappingURL=common.js.map"],"names":["common"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{al as S,j as t,am as P,an as f,ao as W,ap as F,r as q,aq as H,ar as z,as as g,E as A,at as I,au as R,av as V,aw as K,ax as $,ay as G,az as _,aA as M,aB as J,aC as Q,V as U,aD as X,aE as B,aF as Y}from"./index-PB1II0WV.js";import{aG as oe,aH as ce,aI as ue}from"./index-PB1II0WV.js";function Z({turns:e,suggestions:n=[],providerConfigured:a=!0,providerLabel:s,assistantName:i,composerPlaceholder:l,sendLabel:p,pending:r=!1,pendingLabel:o,configureTitle:c,configureBody:u,configureCtaLabel:m,emptyTitle:h,emptyBody:y,onSend:v,onConfigure:b,locale:j,dir:x,testId:N}){const D=F(j),[L,k]=q.useState(""),w=H(e.map(d=>({...d,own:d.role==="user",sentAt:d.sentAt??""}))),C=d=>{const T=d.trim();T!==""&&(v?.(T),k(""))},E=d=>{d.preventDefault(),C(L)};return t.jsxs("div",{"data-widget":"ai-chat-panel","data-testid":N,"data-provider-configured":a?"":void 0,...x===void 0?{}:{dir:x},className:"flex h-full flex-col",children:[t.jsxs("div",{className:"flex items-center gap-2.5 border-b border-border/60 px-4 py-3",children:[t.jsx(z,{size:"sm",tone:"accent",icon:t.jsx(g,{})}),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("div",{className:"truncate text-body-sm font-bold text-fg",children:i??"Assistant"}),s!==void 0&&t.jsx("div",{className:"truncate font-mono text-caption text-fg-subtle",children:s})]})]}),a?t.jsxs(t.Fragment,{children:[w.length===0?t.jsx("div",{className:"flex-1",children:t.jsx(A,{compact:!0,icon:t.jsx(g,{}),tone:"accent",title:h??"Ask about your data",body:y??"Ask a question about your schema, tables, or metrics to get started."})}):t.jsxs("div",{"data-part":"ai-transcript",className:"flex flex-1 flex-col gap-2 overflow-auto p-4",children:[w.map(d=>t.jsx(ee,{turn:d,locale:D},d.id)),r&&t.jsxs("div",{"data-part":"ai-pending",className:"flex items-center gap-2 py-1",children:[t.jsx(V,{size:"sm"}),t.jsx("span",{className:"text-caption italic text-fg-subtle",children:o??"Thinking…"})]})]}),n.length>0&&t.jsx("ul",{"data-part":"suggestion-chips",className:"flex flex-wrap gap-1.5 px-4 pb-2",children:n.map(d=>t.jsx("li",{children:t.jsx("button",{type:"button","data-part":"suggestion-chip",disabled:r,onClick:()=>C(d),className:"rounded-full border border-border bg-surface-2 px-2.5 py-1 text-caption font-semibold text-fg-muted hover:border-accent hover:text-accent focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40",children:d})},d))}),t.jsxs("form",{"data-part":"composer",onSubmit:E,className:"flex items-center gap-2 border-t border-border/60 p-3",children:[t.jsx(K,{"aria-label":l??"Ask a question",placeholder:l??"Ask a question…",value:L,disabled:r,onChange:d=>k(d.currentTarget.value)}),t.jsx("button",{type:"submit","data-part":"send-button","aria-label":p??"Send",disabled:r||L.trim()==="",className:"grid size-9 shrink-0 place-items-center rounded-md bg-accent text-accent-fg hover:opacity-90 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-40",children:t.jsx($,{className:"size-4 rtl:-scale-x-100","aria-hidden":"true"})})]})]}):t.jsx("div",{"data-part":"configure-provider",className:"flex-1",children:t.jsx(A,{compact:!0,icon:t.jsx(R,{}),tone:"warn",title:c??"No AI provider configured",body:u??"Add an Anthropic or OpenAI key — or point Adminium at your own endpoint — to ask questions about your schema.",actions:b===void 0?void 0:t.jsx(I,{variant:"primary",size:"sm",onClick:b,children:m??"Configure a provider"})})})]})}function ee({turn:e,locale:n}){const a=e.own,s=e.sentAt!==void 0&&e.sentAt!==""?e.sentAt:void 0;return t.jsxs("div",{"data-part":"ai-turn","data-role":e.role,className:`flex items-start gap-2 ${a?"justify-end":"justify-start"}`,children:[!a&&t.jsx(z,{size:"sm",tone:"accent",icon:t.jsx(g,{}),className:"mt-0.5 shrink-0"}),t.jsxs("div",{"data-part":"ai-bubble",className:`max-w-[80%] rounded-2xl px-3 py-2 text-body-sm leading-relaxed ${a?"rounded-ee-sm bg-accent text-accent-fg":"rounded-es-sm border border-border bg-surface text-fg"}`,children:[t.jsx("p",{className:"whitespace-pre-wrap break-words",children:e.body}),s!==void 0&&t.jsx("time",{dateTime:s,title:_(s,n),"data-part":"ai-time",className:`mt-1 block font-mono text-[9.5px] tabular-nums ${a?"text-end text-accent-fg/70":"text-start text-fg-subtle"}`,children:G(n,s)})]})]})}function te(e,n){return P(e).map((a,s)=>{const i=f(a,n.sentAtField);return{id:a.id??s,role:f(a,n.roleField)==="user"?"user":"assistant",body:f(a,n.bodyField)??"",sentAt:i??new Date(W).toISOString()}})}function de({config:e,data:n,onEvent:a}){const s=te(n,e),i=S(e.binding);return t.jsx(Z,{turns:s,suggestions:e.suggestions,providerConfigured:e.providerConfigured,pending:e.pending,...e.providerLabel===void 0?{}:{providerLabel:e.providerLabel},...e.assistantName===void 0?{}:{assistantName:e.assistantName},...e.composerPlaceholder===void 0?{}:{composerPlaceholder:e.composerPlaceholder},...e.sendLabel===void 0?{}:{sendLabel:e.sendLabel},...e.pendingLabel===void 0?{}:{pendingLabel:e.pendingLabel},...e.configureTitle===void 0?{}:{configureTitle:e.configureTitle},...e.configureBody===void 0?{}:{configureBody:e.configureBody},...e.configureCtaLabel===void 0?{}:{configureCtaLabel:e.configureCtaLabel},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId},onSend:l=>{a({type:"mutate",intent:"insert",...i.connectionId===void 0?{}:{connectionId:i.connectionId},table:i.table,values:{[e.roleField]:"user",[e.bodyField]:l}})},...e.configureHref===void 0?{}:{onConfigure:()=>{a({type:"drill-through",href:e.configureHref})}}})}const ae={ringing:!0,connecting:!0,active:!1,ended:!1};function ne({peer:e,kind:n,state:a,actions:s=!0,kindLabel:i,stateLabel:l,acceptLabel:p,declineLabel:r,endLabel:o,emptyTitle:c,emptyBody:u,onAccept:m,onDecline:h,locale:y,testId:v}){const b=F(y);if(e.trim()==="")return t.jsx(A,{compact:!0,preset:"all-caught-up",title:c??"No active call",body:u??"An incoming call will appear here."});const j=ae[a],x=a==="ended",N=n==="video"?X:B;return t.jsxs("div",{"data-widget":"call-widget","data-testid":v,"data-call-state":a,"data-call-kind":n,className:"flex h-full flex-col items-center justify-center gap-4 p-6 text-center compact:gap-3 compact:p-4",children:[t.jsxs("div",{className:"relative flex items-center justify-center",children:[j&&t.jsx("span",{"aria-hidden":"true","data-part":"call-ring",className:"absolute inset-0 rounded-full border-2 border-accent motion-safe:animate-ping"}),t.jsx(U,{name:e,size:"2xl",locale:b})]}),t.jsxs("div",{className:"flex flex-col items-center gap-1",children:[t.jsx("p",{className:"text-body font-bold text-fg",children:e}),t.jsxs("p",{"data-part":"call-kind",className:"flex items-center gap-1.5 text-caption font-medium text-fg-muted",children:[t.jsx(N,{"aria-hidden":"true",className:"size-3.5"}),i??(n==="video"?"Video call":"Voice call")]}),t.jsx("p",{"data-part":"call-state",className:"text-caption text-fg-subtle",children:l??a})]}),s&&!x&&t.jsxs("div",{className:"flex items-center gap-3",children:[a==="ringing"&&t.jsx(I,{size:"sm",variant:"primary",iconLeft:t.jsx(B,{}),onClick:m,children:p??"Accept"}),t.jsx(I,{size:"sm",variant:"destructive",iconLeft:t.jsx(Y,{}),onClick:h,children:a==="active"?o??"End call":r??"Decline"})]})]})}function O(e,n){switch(e){case"ringing":return n.ringingLabel;case"connecting":return n.connectingLabel;case"active":return n.activeLabel;case"ended":return n.endedLabel}}function ie({config:e,data:n,onEvent:a}){const s=M(n),i=J(s?.[e.kindField]),l=Q(s?.[e.stateField]),p=s===null?"":f(s,e.peerField)??"",r=S(e.binding),o=s?.id,c=typeof o=="string"||typeof o=="number"?o:void 0,u=m=>{a({type:"mutate",intent:"update",...r.connectionId===void 0?{}:{connectionId:r.connectionId},table:r.table,...c===void 0?{}:{recordId:c},values:{[e.stateField]:m}})};return t.jsx(ne,{peer:p,kind:i,state:l,actions:e.actions,...i==="video"?e.videoLabel===void 0?{}:{kindLabel:e.videoLabel}:e.voiceLabel===void 0?{}:{kindLabel:e.voiceLabel},...O(l,e)===void 0?{}:{stateLabel:O(l,e)},...e.acceptLabel===void 0?{}:{acceptLabel:e.acceptLabel},...e.declineLabel===void 0?{}:{declineLabel:e.declineLabel},...e.endLabel===void 0?{}:{endLabel:e.endLabel},...e.emptyTitle===void 0?{}:{emptyTitle:e.emptyTitle},...e.emptyBody===void 0?{}:{emptyBody:e.emptyBody},...e.format?.locale===void 0?{}:{locale:e.format.locale},...e.testId===void 0?{}:{testId:e.testId},onAccept:()=>u("active"),onDecline:()=>u("ended")})}export{de as AiChatPanelWidget,ie as CallWidgetWidget,oe as ChatThreadWidget,ce as ConversationInboxWidget,ue as TypingIndicatorWidget};
2
+ //# sourceMappingURL=communication-track-components-CNLZXOH_.js.map