@awiki/dsh-plugin 0.3.6 → 0.3.7-dsh-test.20260831.2

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 (95) hide show
  1. package/README.md +58 -60
  2. package/README.zh.md +45 -51
  3. package/THIRD_PARTY_NOTICES.md +1 -1
  4. package/cordis.patch.yml +7 -8
  5. package/lib/client.js +1389 -1152
  6. package/lib/client.js.map +1 -1
  7. package/lib/index.js +1084 -792
  8. package/lib/provider.js +70 -17
  9. package/lib/{sdk-adapter--trNlr-T.mjs → sdk-adapter-FGaOi8It.mjs} +168 -84
  10. package/lib/typert.host.js +406 -178
  11. package/lib/typert.remote-client.d.ts +19 -7
  12. package/lib/typert.remote-client.d.ts.map +1 -1
  13. package/lib/typert.remote-client.js +406 -178
  14. package/lib/types/client/AwikiDevices.d.ts +28 -0
  15. package/lib/types/client/AwikiDevices.d.ts.map +1 -0
  16. package/lib/types/client/AwikiDevices.js +85 -0
  17. package/lib/types/client/AwikiDevices.js.map +1 -0
  18. package/lib/types/client/AwikiIdentityAccess.d.ts +6 -5
  19. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
  20. package/lib/types/client/AwikiIdentityAccess.js +88 -27
  21. package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
  22. package/lib/types/client/AwikiMail.d.ts +1 -1
  23. package/lib/types/client/AwikiMail.d.ts.map +1 -1
  24. package/lib/types/client/AwikiMail.js +6 -130
  25. package/lib/types/client/AwikiMail.js.map +1 -1
  26. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  27. package/lib/types/client/AwikiOverlay.js +5 -12
  28. package/lib/types/client/AwikiOverlay.js.map +1 -1
  29. package/lib/types/client/AwikiRecoveryForm.d.ts.map +1 -1
  30. package/lib/types/client/AwikiRecoveryForm.js +1 -1
  31. package/lib/types/client/AwikiRecoveryForm.js.map +1 -1
  32. package/lib/types/client/controller.d.ts +20 -34
  33. package/lib/types/client/controller.d.ts.map +1 -1
  34. package/lib/types/client/controller.js +56 -203
  35. package/lib/types/client/controller.js.map +1 -1
  36. package/lib/types/client/index.d.ts.map +1 -1
  37. package/lib/types/client/index.js +8 -4
  38. package/lib/types/client/index.js.map +1 -1
  39. package/lib/types/client/settings-locales.js +8 -8
  40. package/lib/types/client/settings-locales.js.map +1 -1
  41. package/lib/types/client/slots.d.ts +10 -10
  42. package/lib/types/client/slots.d.ts.map +1 -1
  43. package/lib/types/conversation-preferences.d.ts.map +1 -1
  44. package/lib/types/conversation-preferences.js +0 -17
  45. package/lib/types/conversation-preferences.js.map +1 -1
  46. package/lib/types/index.d.ts +59 -30
  47. package/lib/types/index.d.ts.map +1 -1
  48. package/lib/types/index.js +804 -462
  49. package/lib/types/index.js.map +1 -1
  50. package/lib/types/listener-state.d.ts +5 -3
  51. package/lib/types/listener-state.d.ts.map +1 -1
  52. package/lib/types/listener-state.js +28 -13
  53. package/lib/types/listener-state.js.map +1 -1
  54. package/lib/types/listener.d.ts +9 -32
  55. package/lib/types/listener.d.ts.map +1 -1
  56. package/lib/types/listener.js +11 -127
  57. package/lib/types/listener.js.map +1 -1
  58. package/lib/types/mail.d.ts +2 -28
  59. package/lib/types/mail.d.ts.map +1 -1
  60. package/lib/types/mail.js +2 -78
  61. package/lib/types/mail.js.map +1 -1
  62. package/lib/types/provider-api.d.ts +102 -38
  63. package/lib/types/provider-api.d.ts.map +1 -1
  64. package/lib/types/provider.d.ts +8 -2
  65. package/lib/types/provider.d.ts.map +1 -1
  66. package/lib/types/provider.js +73 -16
  67. package/lib/types/provider.js.map +1 -1
  68. package/lib/types/realtime-supervisor.d.ts +54 -0
  69. package/lib/types/realtime-supervisor.d.ts.map +1 -0
  70. package/lib/types/realtime-supervisor.js +242 -0
  71. package/lib/types/realtime-supervisor.js.map +1 -0
  72. package/lib/types/sdk-adapter.d.ts +32 -7
  73. package/lib/types/sdk-adapter.d.ts.map +1 -1
  74. package/lib/types/sdk-adapter.js +163 -104
  75. package/lib/types/sdk-adapter.js.map +1 -1
  76. package/lib/types/sent-mail-store.d.ts +2 -7
  77. package/lib/types/sent-mail-store.d.ts.map +1 -1
  78. package/lib/types/sent-mail-store.js +23 -125
  79. package/lib/types/sent-mail-store.js.map +1 -1
  80. package/lib/types/tools.d.ts +1 -1
  81. package/lib/types/tools.d.ts.map +1 -1
  82. package/lib/types/tools.js +4 -20
  83. package/lib/types/tools.js.map +1 -1
  84. package/lib/types/types.d.ts +77 -66
  85. package/lib/types/types.d.ts.map +1 -1
  86. package/lib/types/types.js.map +1 -1
  87. package/package.json +20 -15
  88. package/lib/types/client/mail-attachment.d.ts +0 -40
  89. package/lib/types/client/mail-attachment.d.ts.map +0 -1
  90. package/lib/types/client/mail-attachment.js +0 -186
  91. package/lib/types/client/mail-attachment.js.map +0 -1
  92. package/lib/types/profile-state.d.ts +0 -17
  93. package/lib/types/profile-state.d.ts.map +0 -1
  94. package/lib/types/profile-state.js +0 -58
  95. package/lib/types/profile-state.js.map +0 -1
package/lib/client.js CHANGED
@@ -589,7 +589,7 @@ window.__ModuleLoader__.load({
589
589
  const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;
590
590
  const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/;
591
591
  const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
592
- const base64$1 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
592
+ const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
593
593
  const base64url = /^[A-Za-z0-9_-]*$/;
594
594
  const httpProtocol = /^https?$/;
595
595
  const e164 = /^\+[1-9]\d{6,14}$/;
@@ -1326,7 +1326,7 @@ window.__ModuleLoader__.load({
1326
1326
  }
1327
1327
  }
1328
1328
  const $ZodBase64 = /*@__PURE__*/ $constructor("$ZodBase64", (inst, def) => {
1329
- def.pattern ?? (def.pattern = base64$1);
1329
+ def.pattern ?? (def.pattern = base64);
1330
1330
  $ZodStringFormat.init(inst, def);
1331
1331
  inst._zod.bag.contentEncoding = "base64";
1332
1332
  inst._zod.check = (payload) => {
@@ -4112,7 +4112,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4112
4112
  literal("forbidden"),
4113
4113
  literal("identity-recovery-required"),
4114
4114
  literal("conflict"),
4115
- literal("state-in-use"),
4116
4115
  literal("rate-limited"),
4117
4116
  literal("group-membership-required"),
4118
4117
  literal("group-identity-stale"),
@@ -4147,14 +4146,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4147
4146
  "failureCode": string().readonly().optional(),
4148
4147
  "retryable": boolean().readonly(),
4149
4148
  "localOrdinaryDataWillMigrate": boolean().readonly(),
4150
- "otherDevicesMustRejoin": boolean().readonly(),
4151
- "unsupportedE2eeGroupCount": number().readonly(),
4152
- "unsupportedDidOnlyGroupCount": number().readonly()
4149
+ "otherDevicesMustRejoin": boolean().readonly()
4153
4150
  }).readonly()
4154
4151
  })]);
4155
4152
  const _awiki_dsh_plugin_awiki_addGroupMember_parameter_0$schema = object({
4156
4153
  "member": string().readonly(),
4157
- "role": union([literal("admin"), literal("member")]).readonly().optional(),
4154
+ "role": union([literal("member"), literal("admin")]).readonly().optional(),
4158
4155
  "groupDid": intersection(string(), unknown()).readonly()
4159
4156
  });
4160
4157
  const _awiki_dsh_plugin_awiki_addGroupMember_result$schema = union([object({
@@ -4172,7 +4169,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4172
4169
  literal("forbidden"),
4173
4170
  literal("identity-recovery-required"),
4174
4171
  literal("conflict"),
4175
- literal("state-in-use"),
4176
4172
  literal("rate-limited"),
4177
4173
  literal("group-membership-required"),
4178
4174
  literal("group-identity-stale"),
@@ -4195,6 +4191,139 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4195
4191
  "handle": intersection(string(), unknown()).readonly().optional()
4196
4192
  }).readonly()
4197
4193
  })]);
4194
+ const _awiki_dsh_plugin_awiki_approveDeviceJoin_parameter_0$schema = object({
4195
+ "enteredSas": string().readonly(),
4196
+ "confirmation": string().readonly(),
4197
+ "requestRef": string().readonly()
4198
+ });
4199
+ const _awiki_dsh_plugin_awiki_approveDeviceJoin_result$schema = union([object({
4200
+ "ok": literal(false).readonly(),
4201
+ "error": object({
4202
+ "code": union([
4203
+ literal("not-registered"),
4204
+ literal("signed-out"),
4205
+ literal("already-registered"),
4206
+ literal("invalid-request"),
4207
+ literal("invalid-otp"),
4208
+ literal("challenge-expired"),
4209
+ literal("handle-unavailable"),
4210
+ literal("not-found"),
4211
+ literal("forbidden"),
4212
+ literal("identity-recovery-required"),
4213
+ literal("conflict"),
4214
+ literal("rate-limited"),
4215
+ literal("group-membership-required"),
4216
+ literal("group-identity-stale"),
4217
+ literal("attachment-too-large"),
4218
+ literal("summary-unavailable"),
4219
+ literal("summary-timeout"),
4220
+ literal("summary-cancelled"),
4221
+ literal("summary-invalid-output"),
4222
+ literal("summary-failed"),
4223
+ literal("delivery-unknown"),
4224
+ literal("network"),
4225
+ literal("remote")
4226
+ ]).readonly(),
4227
+ "message": string().readonly()
4228
+ }).readonly()
4229
+ }), object({
4230
+ "ok": literal(true).readonly(),
4231
+ "value": object({
4232
+ "requestRef": string().readonly(),
4233
+ "phase": union([
4234
+ literal("pending"),
4235
+ literal("verifying"),
4236
+ literal("sas-ready"),
4237
+ literal("authorized"),
4238
+ literal("cancelled"),
4239
+ literal("rejected"),
4240
+ literal("expired")
4241
+ ]).readonly(),
4242
+ "expiresAt": string().readonly(),
4243
+ "sas": string().readonly().optional()
4244
+ }).readonly()
4245
+ })]);
4246
+ const _awiki_dsh_plugin_awiki_beginDeviceJoin_result$schema = union([object({
4247
+ "ok": literal(false).readonly(),
4248
+ "error": object({
4249
+ "code": union([
4250
+ literal("not-registered"),
4251
+ literal("signed-out"),
4252
+ literal("already-registered"),
4253
+ literal("invalid-request"),
4254
+ literal("invalid-otp"),
4255
+ literal("challenge-expired"),
4256
+ literal("handle-unavailable"),
4257
+ literal("not-found"),
4258
+ literal("forbidden"),
4259
+ literal("identity-recovery-required"),
4260
+ literal("conflict"),
4261
+ literal("rate-limited"),
4262
+ literal("group-membership-required"),
4263
+ literal("group-identity-stale"),
4264
+ literal("attachment-too-large"),
4265
+ literal("summary-unavailable"),
4266
+ literal("summary-timeout"),
4267
+ literal("summary-cancelled"),
4268
+ literal("summary-invalid-output"),
4269
+ literal("summary-failed"),
4270
+ literal("delivery-unknown"),
4271
+ literal("network"),
4272
+ literal("remote")
4273
+ ]).readonly(),
4274
+ "message": string().readonly()
4275
+ }).readonly()
4276
+ }), object({
4277
+ "ok": literal(true).readonly(),
4278
+ "value": object({
4279
+ "phase": union([
4280
+ literal("pending"),
4281
+ literal("verifying"),
4282
+ literal("sas-ready"),
4283
+ literal("authorized"),
4284
+ literal("cancelled"),
4285
+ literal("rejected"),
4286
+ literal("expired")
4287
+ ]).readonly(),
4288
+ "expiresAt": string().readonly(),
4289
+ "sas": string().readonly().optional(),
4290
+ "completed": boolean().readonly()
4291
+ }).readonly()
4292
+ })]);
4293
+ const _awiki_dsh_plugin_awiki_cancelDeviceJoin_result$schema = union([object({
4294
+ "ok": literal(false).readonly(),
4295
+ "error": object({
4296
+ "code": union([
4297
+ literal("not-registered"),
4298
+ literal("signed-out"),
4299
+ literal("already-registered"),
4300
+ literal("invalid-request"),
4301
+ literal("invalid-otp"),
4302
+ literal("challenge-expired"),
4303
+ literal("handle-unavailable"),
4304
+ literal("not-found"),
4305
+ literal("forbidden"),
4306
+ literal("identity-recovery-required"),
4307
+ literal("conflict"),
4308
+ literal("rate-limited"),
4309
+ literal("group-membership-required"),
4310
+ literal("group-identity-stale"),
4311
+ literal("attachment-too-large"),
4312
+ literal("summary-unavailable"),
4313
+ literal("summary-timeout"),
4314
+ literal("summary-cancelled"),
4315
+ literal("summary-invalid-output"),
4316
+ literal("summary-failed"),
4317
+ literal("delivery-unknown"),
4318
+ literal("network"),
4319
+ literal("remote")
4320
+ ]).readonly(),
4321
+ "message": string().readonly()
4322
+ }).readonly()
4323
+ }), object({
4324
+ "ok": literal(true).readonly(),
4325
+ "value": object({ "completed": literal(true).readonly() }).readonly()
4326
+ })]);
4198
4327
  const _awiki_dsh_plugin_awiki_clearLocalData_parameter_0$schema = object({ "confirmation": string().readonly() });
4199
4328
  const _awiki_dsh_plugin_awiki_clearLocalData_result$schema = union([object({
4200
4329
  "ok": literal(false).readonly(),
@@ -4211,7 +4340,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4211
4340
  literal("forbidden"),
4212
4341
  literal("identity-recovery-required"),
4213
4342
  literal("conflict"),
4214
- literal("state-in-use"),
4215
4343
  literal("rate-limited"),
4216
4344
  literal("group-membership-required"),
4217
4345
  literal("group-identity-stale"),
@@ -4250,7 +4378,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4250
4378
  literal("forbidden"),
4251
4379
  literal("identity-recovery-required"),
4252
4380
  literal("conflict"),
4253
- literal("state-in-use"),
4254
4381
  literal("rate-limited"),
4255
4382
  literal("group-membership-required"),
4256
4383
  literal("group-identity-stale"),
@@ -4297,7 +4424,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4297
4424
  literal("forbidden"),
4298
4425
  literal("identity-recovery-required"),
4299
4426
  literal("conflict"),
4300
- literal("state-in-use"),
4301
4427
  literal("rate-limited"),
4302
4428
  literal("group-membership-required"),
4303
4429
  literal("group-identity-stale"),
@@ -4332,7 +4458,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4332
4458
  literal("forbidden"),
4333
4459
  literal("identity-recovery-required"),
4334
4460
  literal("conflict"),
4335
- literal("state-in-use"),
4336
4461
  literal("rate-limited"),
4337
4462
  literal("group-membership-required"),
4338
4463
  literal("group-identity-stale"),
@@ -4371,7 +4496,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4371
4496
  literal("forbidden"),
4372
4497
  literal("identity-recovery-required"),
4373
4498
  literal("conflict"),
4374
- literal("state-in-use"),
4375
4499
  literal("rate-limited"),
4376
4500
  literal("group-membership-required"),
4377
4501
  literal("group-identity-stale"),
@@ -4400,11 +4524,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4400
4524
  "bytesBase64": string().readonly()
4401
4525
  }).readonly()
4402
4526
  })]);
4403
- const _awiki_dsh_plugin_awiki_downloadMailAttachment_parameter_0$schema = object({
4404
- "localMessageId": intersection(string(), unknown()).readonly(),
4405
- "attachmentIndex": number().readonly()
4406
- });
4407
- const _awiki_dsh_plugin_awiki_downloadMailAttachment_result$schema = union([object({
4527
+ const _awiki_dsh_plugin_awiki_getConfig_result$schema = union([object({
4408
4528
  "ok": literal(false).readonly(),
4409
4529
  "error": object({
4410
4530
  "code": union([
@@ -4419,7 +4539,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4419
4539
  literal("forbidden"),
4420
4540
  literal("identity-recovery-required"),
4421
4541
  literal("conflict"),
4422
- literal("state-in-use"),
4423
4542
  literal("rate-limited"),
4424
4543
  literal("group-membership-required"),
4425
4544
  literal("group-identity-stale"),
@@ -4438,14 +4557,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4438
4557
  }), object({
4439
4558
  "ok": literal(true).readonly(),
4440
4559
  "value": object({
4441
- "fileName": string().readonly(),
4442
- "contentType": string().readonly(),
4443
- "sizeBytes": number().readonly(),
4444
- "sha256": string().readonly(),
4445
- "bytesBase64": string().readonly()
4560
+ "pollIntervalMs": number().readonly(),
4561
+ "attachmentMaxBytes": number().readonly(),
4562
+ "handleRecoveryPhoneEnabled": boolean().readonly()
4446
4563
  }).readonly()
4447
4564
  })]);
4448
- const _awiki_dsh_plugin_awiki_getConfig_result$schema = union([object({
4565
+ const _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema = union([object({
4449
4566
  "ok": literal(false).readonly(),
4450
4567
  "error": object({
4451
4568
  "code": union([
@@ -4460,7 +4577,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4460
4577
  literal("forbidden"),
4461
4578
  literal("identity-recovery-required"),
4462
4579
  literal("conflict"),
4463
- literal("state-in-use"),
4464
4580
  literal("rate-limited"),
4465
4581
  literal("group-membership-required"),
4466
4582
  literal("group-identity-stale"),
@@ -4478,18 +4594,30 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4478
4594
  }).readonly()
4479
4595
  }), object({
4480
4596
  "ok": literal(true).readonly(),
4481
- "value": object({
4482
- "tenantDomain": string().readonly(),
4483
- "pollIntervalMs": number().readonly(),
4484
- "attachmentMaxBytes": number().readonly(),
4485
- "mailAttachmentMaxCount": number().readonly(),
4486
- "mailAttachmentMaxBytes": number().readonly(),
4487
- "mailAttachmentTotalMaxBytes": number().readonly(),
4488
- "profileName": string().readonly().optional(),
4489
- "legacySharedStateDetected": boolean().readonly().optional()
4490
- }).readonly()
4597
+ "value": object({ "hiddenConversations": array(object({
4598
+ "conversation": union([object({
4599
+ "kind": literal("group").readonly(),
4600
+ "id": intersection(string(), unknown()).readonly(),
4601
+ "groupDid": intersection(string(), unknown()).readonly(),
4602
+ "title": string().readonly(),
4603
+ "unreadCount": number().readonly().optional(),
4604
+ "lastMessageAt": number().readonly().optional(),
4605
+ "lastMessagePreview": string().readonly().optional()
4606
+ }), object({
4607
+ "kind": literal("direct").readonly(),
4608
+ "id": intersection(string(), unknown()).readonly(),
4609
+ "peerDid": intersection(string(), unknown()).readonly(),
4610
+ "peerHandle": intersection(string(), unknown()).readonly().optional(),
4611
+ "displayName": string().readonly().optional(),
4612
+ "title": string().readonly(),
4613
+ "unreadCount": number().readonly().optional(),
4614
+ "lastMessageAt": number().readonly().optional(),
4615
+ "lastMessagePreview": string().readonly().optional()
4616
+ })]).readonly(),
4617
+ "hiddenAt": number().readonly()
4618
+ })).readonly() }).readonly()
4491
4619
  })]);
4492
- const _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema = union([object({
4620
+ const _awiki_dsh_plugin_awiki_getDeviceJoinStatus_result$schema = union([object({
4493
4621
  "ok": literal(false).readonly(),
4494
4622
  "error": object({
4495
4623
  "code": union([
@@ -4504,7 +4632,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4504
4632
  literal("forbidden"),
4505
4633
  literal("identity-recovery-required"),
4506
4634
  literal("conflict"),
4507
- literal("state-in-use"),
4508
4635
  literal("rate-limited"),
4509
4636
  literal("group-membership-required"),
4510
4637
  literal("group-identity-stale"),
@@ -4522,31 +4649,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4522
4649
  }).readonly()
4523
4650
  }), object({
4524
4651
  "ok": literal(true).readonly(),
4525
- "value": object({
4526
- "hiddenConversations": array(object({
4527
- "conversation": union([object({
4528
- "kind": literal("group").readonly(),
4529
- "id": intersection(string(), unknown()).readonly(),
4530
- "groupDid": intersection(string(), unknown()).readonly(),
4531
- "title": string().readonly(),
4532
- "unreadCount": number().readonly().optional(),
4533
- "lastMessageAt": number().readonly().optional(),
4534
- "lastMessagePreview": string().readonly().optional()
4535
- }), object({
4536
- "kind": literal("direct").readonly(),
4537
- "id": intersection(string(), unknown()).readonly(),
4538
- "peerDid": intersection(string(), unknown()).readonly(),
4539
- "peerHandle": intersection(string(), unknown()).readonly().optional(),
4540
- "displayName": string().readonly().optional(),
4541
- "title": string().readonly(),
4542
- "unreadCount": number().readonly().optional(),
4543
- "lastMessageAt": number().readonly().optional(),
4544
- "lastMessagePreview": string().readonly().optional()
4545
- })]).readonly(),
4546
- "hiddenAt": number().readonly()
4547
- })).readonly(),
4548
- "dismissedGroupRecoverySignature": string().readonly().optional()
4549
- }).readonly()
4652
+ "value": union([literal(null), object({
4653
+ "phase": union([
4654
+ literal("pending"),
4655
+ literal("verifying"),
4656
+ literal("sas-ready"),
4657
+ literal("authorized"),
4658
+ literal("cancelled"),
4659
+ literal("rejected"),
4660
+ literal("expired")
4661
+ ]).readonly(),
4662
+ "expiresAt": string().readonly(),
4663
+ "sas": string().readonly().optional(),
4664
+ "completed": boolean().readonly()
4665
+ })]).readonly()
4550
4666
  })]);
4551
4667
  const _awiki_dsh_plugin_awiki_getGroup_parameter_0$schema = object({ "groupDid": intersection(string(), unknown()).readonly() });
4552
4668
  const _awiki_dsh_plugin_awiki_getGroup_result$schema = union([object({
@@ -4564,7 +4680,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4564
4680
  literal("forbidden"),
4565
4681
  literal("identity-recovery-required"),
4566
4682
  literal("conflict"),
4567
- literal("state-in-use"),
4568
4683
  literal("rate-limited"),
4569
4684
  literal("group-membership-required"),
4570
4685
  literal("group-identity-stale"),
@@ -4612,7 +4727,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4612
4727
  literal("forbidden"),
4613
4728
  literal("identity-recovery-required"),
4614
4729
  literal("conflict"),
4615
- literal("state-in-use"),
4616
4730
  literal("rate-limited"),
4617
4731
  literal("group-membership-required"),
4618
4732
  literal("group-identity-stale"),
@@ -4681,7 +4795,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4681
4795
  literal("forbidden"),
4682
4796
  literal("identity-recovery-required"),
4683
4797
  literal("conflict"),
4684
- literal("state-in-use"),
4685
4798
  literal("rate-limited"),
4686
4799
  literal("group-membership-required"),
4687
4800
  literal("group-identity-stale"),
@@ -4726,7 +4839,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4726
4839
  literal("forbidden"),
4727
4840
  literal("identity-recovery-required"),
4728
4841
  literal("conflict"),
4729
- literal("state-in-use"),
4730
4842
  literal("rate-limited"),
4731
4843
  literal("group-membership-required"),
4732
4844
  literal("group-identity-stale"),
@@ -4795,7 +4907,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4795
4907
  literal("forbidden"),
4796
4908
  literal("identity-recovery-required"),
4797
4909
  literal("conflict"),
4798
- literal("state-in-use"),
4799
4910
  literal("rate-limited"),
4800
4911
  literal("group-membership-required"),
4801
4912
  literal("group-identity-stale"),
@@ -4834,7 +4945,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4834
4945
  literal("forbidden"),
4835
4946
  literal("identity-recovery-required"),
4836
4947
  literal("conflict"),
4837
- literal("state-in-use"),
4838
4948
  literal("rate-limited"),
4839
4949
  literal("group-membership-required"),
4840
4950
  literal("group-identity-stale"),
@@ -4877,7 +4987,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4877
4987
  literal("forbidden"),
4878
4988
  literal("identity-recovery-required"),
4879
4989
  literal("conflict"),
4880
- literal("state-in-use"),
4881
4990
  literal("rate-limited"),
4882
4991
  literal("group-membership-required"),
4883
4992
  literal("group-identity-stale"),
@@ -4912,9 +5021,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4912
5021
  "failureCode": string().readonly().optional(),
4913
5022
  "retryable": boolean().readonly(),
4914
5023
  "localOrdinaryDataWillMigrate": boolean().readonly(),
4915
- "otherDevicesMustRejoin": boolean().readonly(),
4916
- "unsupportedE2eeGroupCount": number().readonly(),
4917
- "unsupportedDidOnlyGroupCount": number().readonly()
5024
+ "otherDevicesMustRejoin": boolean().readonly()
4918
5025
  }).readonly()
4919
5026
  })]);
4920
5027
  const _awiki_dsh_plugin_awiki_getSession_result$schema = union([object({
@@ -4932,7 +5039,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4932
5039
  literal("forbidden"),
4933
5040
  literal("identity-recovery-required"),
4934
5041
  literal("conflict"),
4935
- literal("state-in-use"),
4936
5042
  literal("rate-limited"),
4937
5043
  literal("group-membership-required"),
4938
5044
  literal("group-identity-stale"),
@@ -4980,7 +5086,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4980
5086
  literal("forbidden"),
4981
5087
  literal("identity-recovery-required"),
4982
5088
  literal("conflict"),
4983
- literal("state-in-use"),
4984
5089
  literal("rate-limited"),
4985
5090
  literal("group-membership-required"),
4986
5091
  literal("group-identity-stale"),
@@ -5019,7 +5124,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5019
5124
  literal("forbidden"),
5020
5125
  literal("identity-recovery-required"),
5021
5126
  literal("conflict"),
5022
- literal("state-in-use"),
5023
5127
  literal("rate-limited"),
5024
5128
  literal("group-membership-required"),
5025
5129
  literal("group-identity-stale"),
@@ -5063,7 +5167,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5063
5167
  literal("forbidden"),
5064
5168
  literal("identity-recovery-required"),
5065
5169
  literal("conflict"),
5066
- literal("state-in-use"),
5067
5170
  literal("rate-limited"),
5068
5171
  literal("group-membership-required"),
5069
5172
  literal("group-identity-stale"),
@@ -5102,7 +5205,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5102
5205
  literal("forbidden"),
5103
5206
  literal("identity-recovery-required"),
5104
5207
  literal("conflict"),
5105
- literal("state-in-use"),
5106
5208
  literal("rate-limited"),
5107
5209
  literal("group-membership-required"),
5108
5210
  literal("group-identity-stale"),
@@ -5164,7 +5266,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5164
5266
  literal("forbidden"),
5165
5267
  literal("identity-recovery-required"),
5166
5268
  literal("conflict"),
5167
- literal("state-in-use"),
5168
5269
  literal("rate-limited"),
5169
5270
  literal("group-membership-required"),
5170
5271
  literal("group-identity-stale"),
@@ -5224,7 +5325,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5224
5325
  literal("forbidden"),
5225
5326
  literal("identity-recovery-required"),
5226
5327
  literal("conflict"),
5227
- literal("state-in-use"),
5228
5328
  literal("rate-limited"),
5229
5329
  literal("group-membership-required"),
5230
5330
  literal("group-identity-stale"),
@@ -5278,7 +5378,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5278
5378
  literal("forbidden"),
5279
5379
  literal("identity-recovery-required"),
5280
5380
  literal("conflict"),
5281
- literal("state-in-use"),
5282
5381
  literal("rate-limited"),
5283
5382
  literal("group-membership-required"),
5284
5383
  literal("group-identity-stale"),
@@ -5326,7 +5425,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5326
5425
  literal("forbidden"),
5327
5426
  literal("identity-recovery-required"),
5328
5427
  literal("conflict"),
5329
- literal("state-in-use"),
5330
5428
  literal("rate-limited"),
5331
5429
  literal("group-membership-required"),
5332
5430
  literal("group-identity-stale"),
@@ -5374,7 +5472,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5374
5472
  literal("forbidden"),
5375
5473
  literal("identity-recovery-required"),
5376
5474
  literal("conflict"),
5377
- literal("state-in-use"),
5378
5475
  literal("rate-limited"),
5379
5476
  literal("group-membership-required"),
5380
5477
  literal("group-identity-stale"),
@@ -5410,7 +5507,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5410
5507
  literal("forbidden"),
5411
5508
  literal("identity-recovery-required"),
5412
5509
  literal("conflict"),
5413
- literal("state-in-use"),
5414
5510
  literal("rate-limited"),
5415
5511
  literal("group-membership-required"),
5416
5512
  literal("group-identity-stale"),
@@ -5450,7 +5546,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5450
5546
  literal("forbidden"),
5451
5547
  literal("identity-recovery-required"),
5452
5548
  literal("conflict"),
5453
- literal("state-in-use"),
5454
5549
  literal("rate-limited"),
5455
5550
  literal("group-membership-required"),
5456
5551
  literal("group-identity-stale"),
@@ -5485,9 +5580,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5485
5580
  "failureCode": string().readonly().optional(),
5486
5581
  "retryable": boolean().readonly(),
5487
5582
  "localOrdinaryDataWillMigrate": boolean().readonly(),
5488
- "otherDevicesMustRejoin": boolean().readonly(),
5489
- "unsupportedE2eeGroupCount": number().readonly(),
5490
- "unsupportedDidOnlyGroupCount": number().readonly()
5583
+ "otherDevicesMustRejoin": boolean().readonly()
5491
5584
  }).readonly()
5492
5585
  })]);
5493
5586
  const _awiki_dsh_plugin_awiki_readMail_parameter_0$schema = object({ "messageId": intersection(string(), unknown()).readonly() });
@@ -5506,7 +5599,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5506
5599
  literal("forbidden"),
5507
5600
  literal("identity-recovery-required"),
5508
5601
  literal("conflict"),
5509
- literal("state-in-use"),
5510
5602
  literal("rate-limited"),
5511
5603
  literal("group-membership-required"),
5512
5604
  literal("group-identity-stale"),
@@ -5552,6 +5644,74 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5552
5644
  })).readonly()
5553
5645
  }).readonly()
5554
5646
  })]);
5647
+ const _awiki_dsh_plugin_awiki_refreshDeviceManagement_result$schema = union([object({
5648
+ "ok": literal(false).readonly(),
5649
+ "error": object({
5650
+ "code": union([
5651
+ literal("not-registered"),
5652
+ literal("signed-out"),
5653
+ literal("already-registered"),
5654
+ literal("invalid-request"),
5655
+ literal("invalid-otp"),
5656
+ literal("challenge-expired"),
5657
+ literal("handle-unavailable"),
5658
+ literal("not-found"),
5659
+ literal("forbidden"),
5660
+ literal("identity-recovery-required"),
5661
+ literal("conflict"),
5662
+ literal("rate-limited"),
5663
+ literal("group-membership-required"),
5664
+ literal("group-identity-stale"),
5665
+ literal("attachment-too-large"),
5666
+ literal("summary-unavailable"),
5667
+ literal("summary-timeout"),
5668
+ literal("summary-cancelled"),
5669
+ literal("summary-invalid-output"),
5670
+ literal("summary-failed"),
5671
+ literal("delivery-unknown"),
5672
+ literal("network"),
5673
+ literal("remote")
5674
+ ]).readonly(),
5675
+ "message": string().readonly()
5676
+ }).readonly()
5677
+ }), object({
5678
+ "ok": literal(true).readonly(),
5679
+ "value": object({
5680
+ "canManage": boolean().readonly(),
5681
+ "role": union([literal("member"), literal("admin")]).readonly().optional(),
5682
+ "readiness": union([
5683
+ literal("legacy"),
5684
+ literal("member_ready"),
5685
+ literal("admin_awaiting_root"),
5686
+ literal("admin_ready"),
5687
+ literal("blocked")
5688
+ ]).readonly(),
5689
+ "devices": array(object({
5690
+ "deviceRef": string().readonly(),
5691
+ "status": union([literal("active"), literal("revoked")]).readonly(),
5692
+ "role": union([literal("member"), literal("admin")]).readonly(),
5693
+ "managementReady": boolean().readonly(),
5694
+ "isCurrent": boolean().readonly()
5695
+ })).readonly(),
5696
+ "requests": array(object({
5697
+ "requestRef": string().readonly(),
5698
+ "candidateKeyFingerprint": string().readonly(),
5699
+ "issuedAt": string().readonly(),
5700
+ "expiresAt": string().readonly(),
5701
+ "state": union([
5702
+ literal("pending"),
5703
+ literal("verifying"),
5704
+ literal("sas-ready"),
5705
+ literal("authorized"),
5706
+ literal("cancelled"),
5707
+ literal("rejected"),
5708
+ literal("expired")
5709
+ ]).readonly(),
5710
+ "claimedByCurrentDevice": boolean().readonly(),
5711
+ "canStartVerification": boolean().readonly()
5712
+ })).readonly()
5713
+ }).readonly()
5714
+ })]);
5555
5715
  const _awiki_dsh_plugin_awiki_registerIdentity_parameter_0$schema = object({
5556
5716
  "handle": string().readonly(),
5557
5717
  "phone": string().readonly(),
@@ -5572,7 +5732,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5572
5732
  literal("forbidden"),
5573
5733
  literal("identity-recovery-required"),
5574
5734
  literal("conflict"),
5575
- literal("state-in-use"),
5576
5735
  literal("rate-limited"),
5577
5736
  literal("group-membership-required"),
5578
5737
  literal("group-identity-stale"),
@@ -5590,18 +5749,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5590
5749
  }).readonly()
5591
5750
  }), object({
5592
5751
  "ok": literal(true).readonly(),
5593
- "value": object({
5594
- "handle": intersection(string(), unknown()).readonly(),
5595
- "did": intersection(string(), unknown()).readonly(),
5596
- "displayName": string().readonly().optional(),
5597
- "registeredAt": number().readonly()
5598
- }).readonly()
5752
+ "value": union([object({
5753
+ "status": literal("registered").readonly(),
5754
+ "identity": object({
5755
+ "handle": intersection(string(), unknown()).readonly(),
5756
+ "did": intersection(string(), unknown()).readonly(),
5757
+ "displayName": string().readonly().optional(),
5758
+ "registeredAt": number().readonly()
5759
+ }).readonly()
5760
+ }), object({
5761
+ "status": literal("join-required").readonly(),
5762
+ "fullHandle": intersection(string(), unknown()).readonly(),
5763
+ "mode": union([literal("ordinary"), literal("handle-recovery-rebind")]).readonly(),
5764
+ "requiresUserPresence": boolean().readonly()
5765
+ })]).readonly()
5599
5766
  })]);
5600
- const _awiki_dsh_plugin_awiki_removeGroupMember_parameter_0$schema = object({
5601
- "member": string().readonly(),
5602
- "groupDid": intersection(string(), unknown()).readonly()
5767
+ const _awiki_dsh_plugin_awiki_rejectDeviceJoin_parameter_0$schema = object({
5768
+ "reason": union([literal("user_rejected"), literal("sas_mismatch")]).readonly(),
5769
+ "requestRef": string().readonly()
5603
5770
  });
5604
- const _awiki_dsh_plugin_awiki_removeGroupMember_result$schema = union([object({
5771
+ const _awiki_dsh_plugin_awiki_rejectDeviceJoin_result$schema = union([object({
5605
5772
  "ok": literal(false).readonly(),
5606
5773
  "error": object({
5607
5774
  "code": union([
@@ -5616,7 +5783,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5616
5783
  literal("forbidden"),
5617
5784
  literal("identity-recovery-required"),
5618
5785
  literal("conflict"),
5619
- literal("state-in-use"),
5620
5786
  literal("rate-limited"),
5621
5787
  literal("group-membership-required"),
5622
5788
  literal("group-identity-stale"),
@@ -5635,12 +5801,25 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5635
5801
  }), object({
5636
5802
  "ok": literal(true).readonly(),
5637
5803
  "value": object({
5638
- "did": intersection(string(), unknown()).readonly(),
5639
- "handle": intersection(string(), unknown()).readonly().optional()
5804
+ "requestRef": string().readonly(),
5805
+ "phase": union([
5806
+ literal("pending"),
5807
+ literal("verifying"),
5808
+ literal("sas-ready"),
5809
+ literal("authorized"),
5810
+ literal("cancelled"),
5811
+ literal("rejected"),
5812
+ literal("expired")
5813
+ ]).readonly(),
5814
+ "expiresAt": string().readonly(),
5815
+ "sas": string().readonly().optional()
5640
5816
  }).readonly()
5641
5817
  })]);
5642
- const _awiki_dsh_plugin_awiki_resolvePeer_parameter_0$schema = object({ "peer": string().readonly() });
5643
- const _awiki_dsh_plugin_awiki_resolvePeer_result$schema = union([object({
5818
+ const _awiki_dsh_plugin_awiki_removeGroupMember_parameter_0$schema = object({
5819
+ "member": string().readonly(),
5820
+ "groupDid": intersection(string(), unknown()).readonly()
5821
+ });
5822
+ const _awiki_dsh_plugin_awiki_removeGroupMember_result$schema = union([object({
5644
5823
  "ok": literal(false).readonly(),
5645
5824
  "error": object({
5646
5825
  "code": union([
@@ -5655,7 +5834,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5655
5834
  literal("forbidden"),
5656
5835
  literal("identity-recovery-required"),
5657
5836
  literal("conflict"),
5658
- literal("state-in-use"),
5659
5837
  literal("rate-limited"),
5660
5838
  literal("group-membership-required"),
5661
5839
  literal("group-identity-stale"),
@@ -5675,12 +5853,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5675
5853
  "ok": literal(true).readonly(),
5676
5854
  "value": object({
5677
5855
  "did": intersection(string(), unknown()).readonly(),
5678
- "handle": intersection(string(), unknown()).readonly().optional(),
5679
- "displayName": string().readonly().optional(),
5680
- "conversationId": intersection(string(), unknown()).readonly()
5856
+ "handle": intersection(string(), unknown()).readonly().optional()
5681
5857
  }).readonly()
5682
5858
  })]);
5683
- const _awiki_dsh_plugin_awiki_resumeGroupRebindRecovery_result$schema = union([object({
5859
+ const _awiki_dsh_plugin_awiki_resolvePeer_parameter_0$schema = object({ "peer": string().readonly() });
5860
+ const _awiki_dsh_plugin_awiki_resolvePeer_result$schema = union([object({
5684
5861
  "ok": literal(false).readonly(),
5685
5862
  "error": object({
5686
5863
  "code": union([
@@ -5695,7 +5872,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5695
5872
  literal("forbidden"),
5696
5873
  literal("identity-recovery-required"),
5697
5874
  literal("conflict"),
5698
- literal("state-in-use"),
5699
5875
  literal("rate-limited"),
5700
5876
  literal("group-membership-required"),
5701
5877
  literal("group-identity-stale"),
@@ -5714,14 +5890,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5714
5890
  }), object({
5715
5891
  "ok": literal(true).readonly(),
5716
5892
  "value": object({
5717
- "processed": number().readonly(),
5718
- "completed": number().readonly(),
5719
- "pending": number().readonly(),
5720
- "blocked": number().readonly(),
5721
- "items": array(object({
5722
- "groupDid": intersection(string(), unknown()).readonly(),
5723
- "status": union([literal("pending"), literal("blocked")]).readonly()
5724
- })).readonly()
5893
+ "did": intersection(string(), unknown()).readonly(),
5894
+ "handle": intersection(string(), unknown()).readonly().optional(),
5895
+ "displayName": string().readonly().optional(),
5896
+ "conversationId": intersection(string(), unknown()).readonly()
5725
5897
  }).readonly()
5726
5898
  })]);
5727
5899
  const _awiki_dsh_plugin_awiki_resumeRecovery_parameter_0$schema = object({ "operationId": string().readonly() });
@@ -5740,7 +5912,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5740
5912
  literal("forbidden"),
5741
5913
  literal("identity-recovery-required"),
5742
5914
  literal("conflict"),
5743
- literal("state-in-use"),
5744
5915
  literal("rate-limited"),
5745
5916
  literal("group-membership-required"),
5746
5917
  literal("group-identity-stale"),
@@ -5775,26 +5946,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5775
5946
  "failureCode": string().readonly().optional(),
5776
5947
  "retryable": boolean().readonly(),
5777
5948
  "localOrdinaryDataWillMigrate": boolean().readonly(),
5778
- "otherDevicesMustRejoin": boolean().readonly(),
5779
- "unsupportedE2eeGroupCount": number().readonly(),
5780
- "unsupportedDidOnlyGroupCount": number().readonly()
5949
+ "otherDevicesMustRejoin": boolean().readonly()
5781
5950
  }).readonly()
5782
5951
  })]);
5783
- const _awiki_dsh_plugin_awiki_sendAttachment_parameter_0$schema = object({
5784
- "target": union([object({
5785
- "kind": literal("direct").readonly(),
5786
- "peer": string().readonly()
5787
- }), object({
5788
- "kind": literal("group").readonly(),
5789
- "group": string().readonly()
5790
- })]).readonly(),
5791
- "fileName": string().readonly(),
5792
- "mimeType": string().readonly(),
5793
- "bytesBase64": string().readonly(),
5794
- "caption": string().readonly().optional(),
5795
- "idempotencyKey": string().readonly()
5952
+ const _awiki_dsh_plugin_awiki_revokeDevice_parameter_0$schema = object({
5953
+ "deviceRef": string().readonly(),
5954
+ "confirmation": string().readonly()
5796
5955
  });
5797
- const _awiki_dsh_plugin_awiki_sendAttachment_result$schema = union([object({
5956
+ const _awiki_dsh_plugin_awiki_revokeDevice_result$schema = union([object({
5798
5957
  "ok": literal(false).readonly(),
5799
5958
  "error": object({
5800
5959
  "code": union([
@@ -5809,7 +5968,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5809
5968
  literal("forbidden"),
5810
5969
  literal("identity-recovery-required"),
5811
5970
  literal("conflict"),
5812
- literal("state-in-use"),
5813
5971
  literal("rate-limited"),
5814
5972
  literal("group-membership-required"),
5815
5973
  literal("group-identity-stale"),
@@ -5828,26 +5986,108 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5828
5986
  }), object({
5829
5987
  "ok": literal(true).readonly(),
5830
5988
  "value": object({
5831
- "id": intersection(string(), unknown()).readonly(),
5832
- "conversationId": intersection(string(), unknown()).readonly(),
5833
- "conversationKind": union([literal("group"), literal("direct")]).readonly(),
5834
- "senderDid": intersection(string(), unknown()).readonly(),
5835
- "senderHandle": intersection(string(), unknown()).readonly().optional(),
5836
- "senderDisplayName": string().readonly().optional(),
5837
- "sentAt": number().readonly(),
5838
- "outgoing": boolean().readonly(),
5839
- "content": union([object({
5840
- "kind": literal("text").readonly(),
5841
- "text": string().readonly(),
5842
- "mentions": array(object({
5843
- "id": string().readonly(),
5844
- "start": number().readonly(),
5845
- "end": number().readonly(),
5846
- "did": intersection(string(), unknown()).readonly(),
5847
- "displayName": string().readonly().optional()
5848
- })).readonly().optional()
5849
- }), object({
5850
- "kind": literal("attachment").readonly(),
5989
+ "canManage": boolean().readonly(),
5990
+ "role": union([literal("member"), literal("admin")]).readonly().optional(),
5991
+ "readiness": union([
5992
+ literal("legacy"),
5993
+ literal("member_ready"),
5994
+ literal("admin_awaiting_root"),
5995
+ literal("admin_ready"),
5996
+ literal("blocked")
5997
+ ]).readonly(),
5998
+ "devices": array(object({
5999
+ "deviceRef": string().readonly(),
6000
+ "status": union([literal("active"), literal("revoked")]).readonly(),
6001
+ "role": union([literal("member"), literal("admin")]).readonly(),
6002
+ "managementReady": boolean().readonly(),
6003
+ "isCurrent": boolean().readonly()
6004
+ })).readonly(),
6005
+ "requests": array(object({
6006
+ "requestRef": string().readonly(),
6007
+ "candidateKeyFingerprint": string().readonly(),
6008
+ "issuedAt": string().readonly(),
6009
+ "expiresAt": string().readonly(),
6010
+ "state": union([
6011
+ literal("pending"),
6012
+ literal("verifying"),
6013
+ literal("sas-ready"),
6014
+ literal("authorized"),
6015
+ literal("cancelled"),
6016
+ literal("rejected"),
6017
+ literal("expired")
6018
+ ]).readonly(),
6019
+ "claimedByCurrentDevice": boolean().readonly(),
6020
+ "canStartVerification": boolean().readonly()
6021
+ })).readonly()
6022
+ }).readonly()
6023
+ })]);
6024
+ const _awiki_dsh_plugin_awiki_sendAttachment_parameter_0$schema = object({
6025
+ "target": union([object({
6026
+ "kind": literal("direct").readonly(),
6027
+ "peer": string().readonly()
6028
+ }), object({
6029
+ "kind": literal("group").readonly(),
6030
+ "group": string().readonly()
6031
+ })]).readonly(),
6032
+ "fileName": string().readonly(),
6033
+ "mimeType": string().readonly(),
6034
+ "bytesBase64": string().readonly(),
6035
+ "caption": string().readonly().optional(),
6036
+ "idempotencyKey": string().readonly()
6037
+ });
6038
+ const _awiki_dsh_plugin_awiki_sendAttachment_result$schema = union([object({
6039
+ "ok": literal(false).readonly(),
6040
+ "error": object({
6041
+ "code": union([
6042
+ literal("not-registered"),
6043
+ literal("signed-out"),
6044
+ literal("already-registered"),
6045
+ literal("invalid-request"),
6046
+ literal("invalid-otp"),
6047
+ literal("challenge-expired"),
6048
+ literal("handle-unavailable"),
6049
+ literal("not-found"),
6050
+ literal("forbidden"),
6051
+ literal("identity-recovery-required"),
6052
+ literal("conflict"),
6053
+ literal("rate-limited"),
6054
+ literal("group-membership-required"),
6055
+ literal("group-identity-stale"),
6056
+ literal("attachment-too-large"),
6057
+ literal("summary-unavailable"),
6058
+ literal("summary-timeout"),
6059
+ literal("summary-cancelled"),
6060
+ literal("summary-invalid-output"),
6061
+ literal("summary-failed"),
6062
+ literal("delivery-unknown"),
6063
+ literal("network"),
6064
+ literal("remote")
6065
+ ]).readonly(),
6066
+ "message": string().readonly()
6067
+ }).readonly()
6068
+ }), object({
6069
+ "ok": literal(true).readonly(),
6070
+ "value": object({
6071
+ "id": intersection(string(), unknown()).readonly(),
6072
+ "conversationId": intersection(string(), unknown()).readonly(),
6073
+ "conversationKind": union([literal("group"), literal("direct")]).readonly(),
6074
+ "senderDid": intersection(string(), unknown()).readonly(),
6075
+ "senderHandle": intersection(string(), unknown()).readonly().optional(),
6076
+ "senderDisplayName": string().readonly().optional(),
6077
+ "sentAt": number().readonly(),
6078
+ "outgoing": boolean().readonly(),
6079
+ "content": union([object({
6080
+ "kind": literal("text").readonly(),
6081
+ "text": string().readonly(),
6082
+ "mentions": array(object({
6083
+ "id": string().readonly(),
6084
+ "start": number().readonly(),
6085
+ "end": number().readonly(),
6086
+ "did": intersection(string(), unknown()).readonly(),
6087
+ "displayName": string().readonly().optional()
6088
+ })).readonly().optional()
6089
+ }), object({
6090
+ "kind": literal("attachment").readonly(),
5851
6091
  "attachment": object({
5852
6092
  "id": intersection(string(), unknown()).readonly(),
5853
6093
  "fileName": string().readonly(),
@@ -5863,13 +6103,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5863
6103
  "to": array(string()).readonly(),
5864
6104
  "cc": array(string()).readonly().optional(),
5865
6105
  "subject": string().readonly(),
5866
- "bodyText": string().readonly(),
5867
- "attachments": array(object({
5868
- "fileName": string().readonly(),
5869
- "contentType": string().readonly(),
5870
- "sizeBytes": number().readonly(),
5871
- "bytesBase64": string().readonly()
5872
- })).readonly().optional()
6106
+ "bodyText": string().readonly()
5873
6107
  });
5874
6108
  const _awiki_dsh_plugin_awiki_sendMail_result$schema = union([object({
5875
6109
  "ok": literal(false).readonly(),
@@ -5886,7 +6120,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5886
6120
  literal("forbidden"),
5887
6121
  literal("identity-recovery-required"),
5888
6122
  literal("conflict"),
5889
- literal("state-in-use"),
5890
6123
  literal("rate-limited"),
5891
6124
  literal("group-membership-required"),
5892
6125
  literal("group-identity-stale"),
@@ -5929,7 +6162,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5929
6162
  literal("forbidden"),
5930
6163
  literal("identity-recovery-required"),
5931
6164
  literal("conflict"),
5932
- literal("state-in-use"),
5933
6165
  literal("rate-limited"),
5934
6166
  literal("group-membership-required"),
5935
6167
  literal("group-identity-stale"),
@@ -5973,7 +6205,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5973
6205
  literal("forbidden"),
5974
6206
  literal("identity-recovery-required"),
5975
6207
  literal("conflict"),
5976
- literal("state-in-use"),
5977
6208
  literal("rate-limited"),
5978
6209
  literal("group-membership-required"),
5979
6210
  literal("group-identity-stale"),
@@ -6029,7 +6260,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6029
6260
  literal("forbidden"),
6030
6261
  literal("identity-recovery-required"),
6031
6262
  literal("conflict"),
6032
- literal("state-in-use"),
6033
6263
  literal("rate-limited"),
6034
6264
  literal("group-membership-required"),
6035
6265
  literal("group-identity-stale"),
@@ -6079,6 +6309,54 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6079
6309
  })]).readonly()
6080
6310
  }).readonly()
6081
6311
  })]);
6312
+ const _awiki_dsh_plugin_awiki_startDeviceJoinVerification_parameter_0$schema = object({ "requestRef": string().readonly() });
6313
+ const _awiki_dsh_plugin_awiki_startDeviceJoinVerification_result$schema = union([object({
6314
+ "ok": literal(false).readonly(),
6315
+ "error": object({
6316
+ "code": union([
6317
+ literal("not-registered"),
6318
+ literal("signed-out"),
6319
+ literal("already-registered"),
6320
+ literal("invalid-request"),
6321
+ literal("invalid-otp"),
6322
+ literal("challenge-expired"),
6323
+ literal("handle-unavailable"),
6324
+ literal("not-found"),
6325
+ literal("forbidden"),
6326
+ literal("identity-recovery-required"),
6327
+ literal("conflict"),
6328
+ literal("rate-limited"),
6329
+ literal("group-membership-required"),
6330
+ literal("group-identity-stale"),
6331
+ literal("attachment-too-large"),
6332
+ literal("summary-unavailable"),
6333
+ literal("summary-timeout"),
6334
+ literal("summary-cancelled"),
6335
+ literal("summary-invalid-output"),
6336
+ literal("summary-failed"),
6337
+ literal("delivery-unknown"),
6338
+ literal("network"),
6339
+ literal("remote")
6340
+ ]).readonly(),
6341
+ "message": string().readonly()
6342
+ }).readonly()
6343
+ }), object({
6344
+ "ok": literal(true).readonly(),
6345
+ "value": object({
6346
+ "requestRef": string().readonly(),
6347
+ "phase": union([
6348
+ literal("pending"),
6349
+ literal("verifying"),
6350
+ literal("sas-ready"),
6351
+ literal("authorized"),
6352
+ literal("cancelled"),
6353
+ literal("rejected"),
6354
+ literal("expired")
6355
+ ]).readonly(),
6356
+ "expiresAt": string().readonly(),
6357
+ "sas": string().readonly().optional()
6358
+ }).readonly()
6359
+ })]);
6082
6360
  const _awiki_dsh_plugin_awiki_summarizeConversation_parameter_0$schema = object({
6083
6361
  "conversationId": intersection(string(), unknown()).readonly(),
6084
6362
  "unreadCountAtOpen": number().readonly().optional()
@@ -6098,7 +6376,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6098
6376
  literal("forbidden"),
6099
6377
  literal("identity-recovery-required"),
6100
6378
  literal("conflict"),
6101
- literal("state-in-use"),
6102
6379
  literal("rate-limited"),
6103
6380
  literal("group-membership-required"),
6104
6381
  literal("group-identity-stale"),
@@ -6134,38 +6411,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6134
6411
  })).readonly()
6135
6412
  }).readonly()
6136
6413
  })]);
6137
- const _awiki_dsh_plugin_awiki_updateConversationPreference_parameter_0$schema = union([
6138
- object({
6139
- "action": literal("hide").readonly(),
6140
- "conversation": union([object({
6141
- "kind": literal("group").readonly(),
6142
- "id": intersection(string(), unknown()).readonly(),
6143
- "groupDid": intersection(string(), unknown()).readonly(),
6144
- "title": string().readonly(),
6145
- "unreadCount": number().readonly().optional(),
6146
- "lastMessageAt": number().readonly().optional(),
6147
- "lastMessagePreview": string().readonly().optional()
6148
- }), object({
6149
- "kind": literal("direct").readonly(),
6150
- "id": intersection(string(), unknown()).readonly(),
6151
- "peerDid": intersection(string(), unknown()).readonly(),
6152
- "peerHandle": intersection(string(), unknown()).readonly().optional(),
6153
- "displayName": string().readonly().optional(),
6154
- "title": string().readonly(),
6155
- "unreadCount": number().readonly().optional(),
6156
- "lastMessageAt": number().readonly().optional(),
6157
- "lastMessagePreview": string().readonly().optional()
6158
- })]).readonly()
6159
- }),
6160
- object({
6161
- "action": literal("restore").readonly(),
6162
- "conversationId": intersection(string(), unknown()).readonly()
6163
- }),
6164
- object({
6165
- "action": literal("dismiss-group-recovery").readonly(),
6166
- "signature": string().readonly()
6167
- })
6168
- ]);
6414
+ const _awiki_dsh_plugin_awiki_updateConversationPreference_parameter_0$schema = union([object({
6415
+ "action": literal("hide").readonly(),
6416
+ "conversation": union([object({
6417
+ "kind": literal("group").readonly(),
6418
+ "id": intersection(string(), unknown()).readonly(),
6419
+ "groupDid": intersection(string(), unknown()).readonly(),
6420
+ "title": string().readonly(),
6421
+ "unreadCount": number().readonly().optional(),
6422
+ "lastMessageAt": number().readonly().optional(),
6423
+ "lastMessagePreview": string().readonly().optional()
6424
+ }), object({
6425
+ "kind": literal("direct").readonly(),
6426
+ "id": intersection(string(), unknown()).readonly(),
6427
+ "peerDid": intersection(string(), unknown()).readonly(),
6428
+ "peerHandle": intersection(string(), unknown()).readonly().optional(),
6429
+ "displayName": string().readonly().optional(),
6430
+ "title": string().readonly(),
6431
+ "unreadCount": number().readonly().optional(),
6432
+ "lastMessageAt": number().readonly().optional(),
6433
+ "lastMessagePreview": string().readonly().optional()
6434
+ })]).readonly()
6435
+ }), object({
6436
+ "action": literal("restore").readonly(),
6437
+ "conversationId": intersection(string(), unknown()).readonly()
6438
+ })]);
6169
6439
  const _awiki_dsh_plugin_awiki_updateConversationPreference_result$schema = union([object({
6170
6440
  "ok": literal(false).readonly(),
6171
6441
  "error": object({
@@ -6181,7 +6451,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6181
6451
  literal("forbidden"),
6182
6452
  literal("identity-recovery-required"),
6183
6453
  literal("conflict"),
6184
- literal("state-in-use"),
6185
6454
  literal("rate-limited"),
6186
6455
  literal("group-membership-required"),
6187
6456
  literal("group-identity-stale"),
@@ -6199,31 +6468,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6199
6468
  }).readonly()
6200
6469
  }), object({
6201
6470
  "ok": literal(true).readonly(),
6202
- "value": object({
6203
- "hiddenConversations": array(object({
6204
- "conversation": union([object({
6205
- "kind": literal("group").readonly(),
6206
- "id": intersection(string(), unknown()).readonly(),
6207
- "groupDid": intersection(string(), unknown()).readonly(),
6208
- "title": string().readonly(),
6209
- "unreadCount": number().readonly().optional(),
6210
- "lastMessageAt": number().readonly().optional(),
6211
- "lastMessagePreview": string().readonly().optional()
6212
- }), object({
6213
- "kind": literal("direct").readonly(),
6214
- "id": intersection(string(), unknown()).readonly(),
6215
- "peerDid": intersection(string(), unknown()).readonly(),
6216
- "peerHandle": intersection(string(), unknown()).readonly().optional(),
6217
- "displayName": string().readonly().optional(),
6218
- "title": string().readonly(),
6219
- "unreadCount": number().readonly().optional(),
6220
- "lastMessageAt": number().readonly().optional(),
6221
- "lastMessagePreview": string().readonly().optional()
6222
- })]).readonly(),
6223
- "hiddenAt": number().readonly()
6224
- })).readonly(),
6225
- "dismissedGroupRecoverySignature": string().readonly().optional()
6226
- }).readonly()
6471
+ "value": object({ "hiddenConversations": array(object({
6472
+ "conversation": union([object({
6473
+ "kind": literal("group").readonly(),
6474
+ "id": intersection(string(), unknown()).readonly(),
6475
+ "groupDid": intersection(string(), unknown()).readonly(),
6476
+ "title": string().readonly(),
6477
+ "unreadCount": number().readonly().optional(),
6478
+ "lastMessageAt": number().readonly().optional(),
6479
+ "lastMessagePreview": string().readonly().optional()
6480
+ }), object({
6481
+ "kind": literal("direct").readonly(),
6482
+ "id": intersection(string(), unknown()).readonly(),
6483
+ "peerDid": intersection(string(), unknown()).readonly(),
6484
+ "peerHandle": intersection(string(), unknown()).readonly().optional(),
6485
+ "displayName": string().readonly().optional(),
6486
+ "title": string().readonly(),
6487
+ "unreadCount": number().readonly().optional(),
6488
+ "lastMessageAt": number().readonly().optional(),
6489
+ "lastMessagePreview": string().readonly().optional()
6490
+ })]).readonly(),
6491
+ "hiddenAt": number().readonly()
6492
+ })).readonly() }).readonly()
6227
6493
  })]);
6228
6494
  const _awiki_dsh_plugin_awiki_updateDisplayName_parameter_0$schema = object({ "displayName": string().readonly() });
6229
6495
  const _awiki_dsh_plugin_awiki_updateDisplayName_result$schema = union([object({
@@ -6241,7 +6507,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6241
6507
  literal("forbidden"),
6242
6508
  literal("identity-recovery-required"),
6243
6509
  literal("conflict"),
6244
- literal("state-in-use"),
6245
6510
  literal("rate-limited"),
6246
6511
  literal("group-membership-required"),
6247
6512
  literal("group-identity-stale"),
@@ -6286,7 +6551,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6286
6551
  literal("forbidden"),
6287
6552
  literal("identity-recovery-required"),
6288
6553
  literal("conflict"),
6289
- literal("state-in-use"),
6290
6554
  literal("rate-limited"),
6291
6555
  literal("group-membership-required"),
6292
6556
  literal("group-identity-stale"),
@@ -6339,7 +6603,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6339
6603
  },
6340
6604
  sourceLocation: {
6341
6605
  "file": "packages/dsh-awiki/src/index.ts",
6342
- "line": 119,
6606
+ "line": 158,
6343
6607
  "column": 9
6344
6608
  }
6345
6609
  },
@@ -6366,10 +6630,73 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6366
6630
  },
6367
6631
  sourceLocation: {
6368
6632
  "file": "packages/dsh-awiki/src/index.ts",
6369
- "line": 149,
6633
+ "line": 188,
6370
6634
  "column": 3
6371
6635
  }
6372
6636
  },
6637
+ {
6638
+ id: "@awiki/dsh-plugin#awiki/approveDeviceJoin",
6639
+ service: "awiki",
6640
+ namespace: "awiki",
6641
+ method: "approveDeviceJoin",
6642
+ invocation: { kind: "direct" },
6643
+ parameters: [{
6644
+ name: "request",
6645
+ wire: "request",
6646
+ source: "json",
6647
+ codec: {
6648
+ mode: "strict",
6649
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiApproveDeviceJoinRequest",
6650
+ schema: _awiki_dsh_plugin_awiki_approveDeviceJoin_parameter_0$schema
6651
+ }
6652
+ }],
6653
+ result: {
6654
+ mode: "strict",
6655
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6656
+ schema: _awiki_dsh_plugin_awiki_approveDeviceJoin_result$schema
6657
+ },
6658
+ sourceLocation: {
6659
+ "file": "packages/dsh-awiki/src/index.ts",
6660
+ "line": 128,
6661
+ "column": 9
6662
+ }
6663
+ },
6664
+ {
6665
+ id: "@awiki/dsh-plugin#awiki/beginDeviceJoin",
6666
+ service: "awiki",
6667
+ namespace: "awiki",
6668
+ method: "beginDeviceJoin",
6669
+ invocation: { kind: "direct" },
6670
+ parameters: [],
6671
+ result: {
6672
+ mode: "strict",
6673
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6674
+ schema: _awiki_dsh_plugin_awiki_beginDeviceJoin_result$schema
6675
+ },
6676
+ sourceLocation: {
6677
+ "file": "packages/dsh-awiki/src/index.ts",
6678
+ "line": 111,
6679
+ "column": 9
6680
+ }
6681
+ },
6682
+ {
6683
+ id: "@awiki/dsh-plugin#awiki/cancelDeviceJoin",
6684
+ service: "awiki",
6685
+ namespace: "awiki",
6686
+ method: "cancelDeviceJoin",
6687
+ invocation: { kind: "direct" },
6688
+ parameters: [],
6689
+ result: {
6690
+ mode: "strict",
6691
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6692
+ schema: _awiki_dsh_plugin_awiki_cancelDeviceJoin_result$schema
6693
+ },
6694
+ sourceLocation: {
6695
+ "file": "packages/dsh-awiki/src/index.ts",
6696
+ "line": 117,
6697
+ "column": 9
6698
+ }
6699
+ },
6373
6700
  {
6374
6701
  id: "@awiki/dsh-plugin#awiki/clearLocalData",
6375
6702
  service: "awiki",
@@ -6393,7 +6720,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6393
6720
  },
6394
6721
  sourceLocation: {
6395
6722
  "file": "packages/dsh-awiki/src/index.ts",
6396
- "line": 212,
6723
+ "line": 243,
6397
6724
  "column": 3
6398
6725
  }
6399
6726
  },
@@ -6420,7 +6747,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6420
6747
  },
6421
6748
  sourceLocation: {
6422
6749
  "file": "packages/dsh-awiki/src/index.ts",
6423
- "line": 134,
6750
+ "line": 173,
6424
6751
  "column": 9
6425
6752
  }
6426
6753
  },
@@ -6447,7 +6774,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6447
6774
  },
6448
6775
  sourceLocation: {
6449
6776
  "file": "packages/dsh-awiki/src/index.ts",
6450
- "line": 128,
6777
+ "line": 167,
6451
6778
  "column": 9
6452
6779
  }
6453
6780
  },
@@ -6474,71 +6801,62 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6474
6801
  },
6475
6802
  sourceLocation: {
6476
6803
  "file": "packages/dsh-awiki/src/index.ts",
6477
- "line": 189,
6804
+ "line": 225,
6478
6805
  "column": 9
6479
6806
  }
6480
6807
  },
6481
6808
  {
6482
- id: "@awiki/dsh-plugin#awiki/downloadMailAttachment",
6809
+ id: "@awiki/dsh-plugin#awiki/getConfig",
6483
6810
  service: "awiki",
6484
6811
  namespace: "awiki",
6485
- method: "downloadMailAttachment",
6812
+ method: "getConfig",
6486
6813
  invocation: { kind: "direct" },
6487
- parameters: [{
6488
- name: "request",
6489
- wire: "request",
6490
- source: "json",
6491
- codec: {
6492
- mode: "strict",
6493
- typeSymbol: "@awiki/dsh-plugin/types#AwikiMailAttachmentDownloadRequest",
6494
- schema: _awiki_dsh_plugin_awiki_downloadMailAttachment_parameter_0$schema
6495
- }
6496
- }],
6814
+ parameters: [],
6497
6815
  result: {
6498
6816
  mode: "strict",
6499
6817
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6500
- schema: _awiki_dsh_plugin_awiki_downloadMailAttachment_result$schema
6818
+ schema: _awiki_dsh_plugin_awiki_getConfig_result$schema
6501
6819
  },
6502
6820
  sourceLocation: {
6503
6821
  "file": "packages/dsh-awiki/src/index.ts",
6504
- "line": 207,
6822
+ "line": 85,
6505
6823
  "column": 9
6506
6824
  }
6507
6825
  },
6508
6826
  {
6509
- id: "@awiki/dsh-plugin#awiki/getConfig",
6827
+ id: "@awiki/dsh-plugin#awiki/getConversationPreferences",
6510
6828
  service: "awiki",
6511
6829
  namespace: "awiki",
6512
- method: "getConfig",
6830
+ method: "getConversationPreferences",
6513
6831
  invocation: { kind: "direct" },
6514
6832
  parameters: [],
6515
6833
  result: {
6516
6834
  mode: "strict",
6517
6835
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6518
- schema: _awiki_dsh_plugin_awiki_getConfig_result$schema
6836
+ schema: _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema
6519
6837
  },
6520
6838
  sourceLocation: {
6521
6839
  "file": "packages/dsh-awiki/src/index.ts",
6522
- "line": 78,
6840
+ "line": 194,
6523
6841
  "column": 3
6524
6842
  }
6525
6843
  },
6526
6844
  {
6527
- id: "@awiki/dsh-plugin#awiki/getConversationPreferences",
6845
+ id: "@awiki/dsh-plugin#awiki/getDeviceJoinStatus",
6528
6846
  service: "awiki",
6529
6847
  namespace: "awiki",
6530
- method: "getConversationPreferences",
6848
+ method: "getDeviceJoinStatus",
6531
6849
  invocation: { kind: "direct" },
6532
6850
  parameters: [],
6533
6851
  result: {
6534
6852
  mode: "strict",
6535
6853
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6536
- schema: _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema
6854
+ schema: _awiki_dsh_plugin_awiki_getDeviceJoinStatus_result$schema
6537
6855
  },
6538
6856
  sourceLocation: {
6539
6857
  "file": "packages/dsh-awiki/src/index.ts",
6540
- "line": 158,
6541
- "column": 3
6858
+ "line": 114,
6859
+ "column": 9
6542
6860
  }
6543
6861
  },
6544
6862
  {
@@ -6564,7 +6882,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6564
6882
  },
6565
6883
  sourceLocation: {
6566
6884
  "file": "packages/dsh-awiki/src/index.ts",
6567
- "line": 137,
6885
+ "line": 176,
6568
6886
  "column": 3
6569
6887
  }
6570
6888
  },
@@ -6591,7 +6909,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6591
6909
  },
6592
6910
  sourceLocation: {
6593
6911
  "file": "packages/dsh-awiki/src/index.ts",
6594
- "line": 169,
6912
+ "line": 205,
6595
6913
  "column": 3
6596
6914
  }
6597
6915
  },
@@ -6609,7 +6927,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6609
6927
  },
6610
6928
  sourceLocation: {
6611
6929
  "file": "packages/dsh-awiki/src/index.ts",
6612
- "line": 81,
6930
+ "line": 88,
6613
6931
  "column": 9
6614
6932
  }
6615
6933
  },
@@ -6636,7 +6954,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6636
6954
  },
6637
6955
  sourceLocation: {
6638
6956
  "file": "packages/dsh-awiki/src/index.ts",
6639
- "line": 172,
6957
+ "line": 208,
6640
6958
  "column": 3
6641
6959
  }
6642
6960
  },
@@ -6654,7 +6972,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6654
6972
  },
6655
6973
  sourceLocation: {
6656
6974
  "file": "packages/dsh-awiki/src/index.ts",
6657
- "line": 192,
6975
+ "line": 228,
6658
6976
  "column": 3
6659
6977
  }
6660
6978
  },
@@ -6672,7 +6990,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6672
6990
  },
6673
6991
  sourceLocation: {
6674
6992
  "file": "packages/dsh-awiki/src/index.ts",
6675
- "line": 107,
6993
+ "line": 146,
6676
6994
  "column": 3
6677
6995
  }
6678
6996
  },
@@ -6699,7 +7017,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6699
7017
  },
6700
7018
  sourceLocation: {
6701
7019
  "file": "packages/dsh-awiki/src/index.ts",
6702
- "line": 122,
7020
+ "line": 161,
6703
7021
  "column": 9
6704
7022
  }
6705
7023
  },
@@ -6717,7 +7035,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6717
7035
  },
6718
7036
  sourceLocation: {
6719
7037
  "file": "packages/dsh-awiki/src/index.ts",
6720
- "line": 84,
7038
+ "line": 91,
6721
7039
  "column": 9
6722
7040
  }
6723
7041
  },
@@ -6744,7 +7062,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6744
7062
  },
6745
7063
  sourceLocation: {
6746
7064
  "file": "packages/dsh-awiki/src/index.ts",
6747
- "line": 93,
7065
+ "line": 100,
6748
7066
  "column": 9
6749
7067
  }
6750
7068
  },
@@ -6771,7 +7089,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6771
7089
  },
6772
7090
  sourceLocation: {
6773
7091
  "file": "packages/dsh-awiki/src/index.ts",
6774
- "line": 140,
7092
+ "line": 179,
6775
7093
  "column": 3
6776
7094
  }
6777
7095
  },
@@ -6798,7 +7116,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6798
7116
  },
6799
7117
  sourceLocation: {
6800
7118
  "file": "packages/dsh-awiki/src/index.ts",
6801
- "line": 143,
7119
+ "line": 182,
6802
7120
  "column": 9
6803
7121
  }
6804
7122
  },
@@ -6826,7 +7144,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6826
7144
  },
6827
7145
  sourceLocation: {
6828
7146
  "file": "packages/dsh-awiki/src/index.ts",
6829
- "line": 166,
7147
+ "line": 202,
6830
7148
  "column": 3
6831
7149
  }
6832
7150
  },
@@ -6853,7 +7171,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6853
7171
  },
6854
7172
  sourceLocation: {
6855
7173
  "file": "packages/dsh-awiki/src/index.ts",
6856
- "line": 146,
7174
+ "line": 185,
6857
7175
  "column": 3
6858
7176
  }
6859
7177
  },
@@ -6881,7 +7199,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6881
7199
  },
6882
7200
  sourceLocation: {
6883
7201
  "file": "packages/dsh-awiki/src/index.ts",
6884
- "line": 195,
7202
+ "line": 231,
6885
7203
  "column": 9
6886
7204
  }
6887
7205
  },
@@ -6899,7 +7217,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6899
7217
  },
6900
7218
  sourceLocation: {
6901
7219
  "file": "packages/dsh-awiki/src/index.ts",
6902
- "line": 90,
7220
+ "line": 97,
6903
7221
  "column": 3
6904
7222
  }
6905
7223
  },
@@ -6926,7 +7244,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6926
7244
  },
6927
7245
  sourceLocation: {
6928
7246
  "file": "packages/dsh-awiki/src/index.ts",
6929
- "line": 87,
7247
+ "line": 94,
6930
7248
  "column": 3
6931
7249
  }
6932
7250
  },
@@ -6953,7 +7271,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6953
7271
  },
6954
7272
  sourceLocation: {
6955
7273
  "file": "packages/dsh-awiki/src/index.ts",
6956
- "line": 180,
7274
+ "line": 216,
6957
7275
  "column": 3
6958
7276
  }
6959
7277
  },
@@ -6980,7 +7298,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6980
7298
  },
6981
7299
  sourceLocation: {
6982
7300
  "file": "packages/dsh-awiki/src/index.ts",
6983
- "line": 201,
7301
+ "line": 237,
6984
7302
  "column": 3
6985
7303
  }
6986
7304
  },
@@ -7007,7 +7325,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7007
7325
  },
7008
7326
  sourceLocation: {
7009
7327
  "file": "packages/dsh-awiki/src/index.ts",
7010
- "line": 116,
7328
+ "line": 155,
7011
7329
  "column": 3
7012
7330
  }
7013
7331
  },
@@ -7034,10 +7352,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7034
7352
  },
7035
7353
  sourceLocation: {
7036
7354
  "file": "packages/dsh-awiki/src/index.ts",
7037
- "line": 198,
7355
+ "line": 234,
7038
7356
  "column": 9
7039
7357
  }
7040
7358
  },
7359
+ {
7360
+ id: "@awiki/dsh-plugin#awiki/refreshDeviceManagement",
7361
+ service: "awiki",
7362
+ namespace: "awiki",
7363
+ method: "refreshDeviceManagement",
7364
+ invocation: { kind: "direct" },
7365
+ parameters: [],
7366
+ result: {
7367
+ mode: "strict",
7368
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7369
+ schema: _awiki_dsh_plugin_awiki_refreshDeviceManagement_result$schema
7370
+ },
7371
+ sourceLocation: {
7372
+ "file": "packages/dsh-awiki/src/index.ts",
7373
+ "line": 120,
7374
+ "column": 3
7375
+ }
7376
+ },
7041
7377
  {
7042
7378
  id: "@awiki/dsh-plugin#awiki/registerIdentity",
7043
7379
  service: "awiki",
@@ -7061,7 +7397,34 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7061
7397
  },
7062
7398
  sourceLocation: {
7063
7399
  "file": "packages/dsh-awiki/src/index.ts",
7064
- "line": 101,
7400
+ "line": 108,
7401
+ "column": 9
7402
+ }
7403
+ },
7404
+ {
7405
+ id: "@awiki/dsh-plugin#awiki/rejectDeviceJoin",
7406
+ service: "awiki",
7407
+ namespace: "awiki",
7408
+ method: "rejectDeviceJoin",
7409
+ invocation: { kind: "direct" },
7410
+ parameters: [{
7411
+ name: "request",
7412
+ wire: "request",
7413
+ source: "json",
7414
+ codec: {
7415
+ mode: "strict",
7416
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiRejectDeviceJoinRequest",
7417
+ schema: _awiki_dsh_plugin_awiki_rejectDeviceJoin_parameter_0$schema
7418
+ }
7419
+ }],
7420
+ result: {
7421
+ mode: "strict",
7422
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7423
+ schema: _awiki_dsh_plugin_awiki_rejectDeviceJoin_result$schema
7424
+ },
7425
+ sourceLocation: {
7426
+ "file": "packages/dsh-awiki/src/index.ts",
7427
+ "line": 133,
7065
7428
  "column": 9
7066
7429
  }
7067
7430
  },
@@ -7088,7 +7451,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7088
7451
  },
7089
7452
  sourceLocation: {
7090
7453
  "file": "packages/dsh-awiki/src/index.ts",
7091
- "line": 152,
7454
+ "line": 191,
7092
7455
  "column": 3
7093
7456
  }
7094
7457
  },
@@ -7115,33 +7478,42 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7115
7478
  },
7116
7479
  sourceLocation: {
7117
7480
  "file": "packages/dsh-awiki/src/index.ts",
7118
- "line": 131,
7481
+ "line": 170,
7119
7482
  "column": 3
7120
7483
  }
7121
7484
  },
7122
7485
  {
7123
- id: "@awiki/dsh-plugin#awiki/resumeGroupRebindRecovery",
7486
+ id: "@awiki/dsh-plugin#awiki/resumeRecovery",
7124
7487
  service: "awiki",
7125
7488
  namespace: "awiki",
7126
- method: "resumeGroupRebindRecovery",
7489
+ method: "resumeRecovery",
7127
7490
  invocation: { kind: "direct" },
7128
- parameters: [],
7491
+ parameters: [{
7492
+ name: "request",
7493
+ wire: "request",
7494
+ source: "json",
7495
+ codec: {
7496
+ mode: "strict",
7497
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiRecoveryOperationRequest",
7498
+ schema: _awiki_dsh_plugin_awiki_resumeRecovery_parameter_0$schema
7499
+ }
7500
+ }],
7129
7501
  result: {
7130
7502
  mode: "strict",
7131
7503
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7132
- schema: _awiki_dsh_plugin_awiki_resumeGroupRebindRecovery_result$schema
7504
+ schema: _awiki_dsh_plugin_awiki_resumeRecovery_result$schema
7133
7505
  },
7134
7506
  sourceLocation: {
7135
7507
  "file": "packages/dsh-awiki/src/index.ts",
7136
- "line": 155,
7508
+ "line": 164,
7137
7509
  "column": 9
7138
7510
  }
7139
7511
  },
7140
7512
  {
7141
- id: "@awiki/dsh-plugin#awiki/resumeRecovery",
7513
+ id: "@awiki/dsh-plugin#awiki/revokeDevice",
7142
7514
  service: "awiki",
7143
7515
  namespace: "awiki",
7144
- method: "resumeRecovery",
7516
+ method: "revokeDevice",
7145
7517
  invocation: { kind: "direct" },
7146
7518
  parameters: [{
7147
7519
  name: "request",
@@ -7149,18 +7521,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7149
7521
  source: "json",
7150
7522
  codec: {
7151
7523
  mode: "strict",
7152
- typeSymbol: "@awiki/dsh-plugin/types#AwikiRecoveryOperationRequest",
7153
- schema: _awiki_dsh_plugin_awiki_resumeRecovery_parameter_0$schema
7524
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiRevokeDeviceRequest",
7525
+ schema: _awiki_dsh_plugin_awiki_revokeDevice_parameter_0$schema
7154
7526
  }
7155
7527
  }],
7156
7528
  result: {
7157
7529
  mode: "strict",
7158
7530
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7159
- schema: _awiki_dsh_plugin_awiki_resumeRecovery_result$schema
7531
+ schema: _awiki_dsh_plugin_awiki_revokeDevice_result$schema
7160
7532
  },
7161
7533
  sourceLocation: {
7162
7534
  "file": "packages/dsh-awiki/src/index.ts",
7163
- "line": 125,
7535
+ "line": 138,
7164
7536
  "column": 9
7165
7537
  }
7166
7538
  },
@@ -7187,7 +7559,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7187
7559
  },
7188
7560
  sourceLocation: {
7189
7561
  "file": "packages/dsh-awiki/src/index.ts",
7190
- "line": 186,
7562
+ "line": 222,
7191
7563
  "column": 9
7192
7564
  }
7193
7565
  },
@@ -7214,7 +7586,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7214
7586
  },
7215
7587
  sourceLocation: {
7216
7588
  "file": "packages/dsh-awiki/src/index.ts",
7217
- "line": 204,
7589
+ "line": 240,
7218
7590
  "column": 9
7219
7591
  }
7220
7592
  },
@@ -7237,19 +7609,46 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7237
7609
  result: {
7238
7610
  mode: "strict",
7239
7611
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7240
- schema: _awiki_dsh_plugin_awiki_sendRecoveryOtp_result$schema
7612
+ schema: _awiki_dsh_plugin_awiki_sendRecoveryOtp_result$schema
7613
+ },
7614
+ sourceLocation: {
7615
+ "file": "packages/dsh-awiki/src/index.ts",
7616
+ "line": 152,
7617
+ "column": 3
7618
+ }
7619
+ },
7620
+ {
7621
+ id: "@awiki/dsh-plugin#awiki/sendRegistrationOtp",
7622
+ service: "awiki",
7623
+ namespace: "awiki",
7624
+ method: "sendRegistrationOtp",
7625
+ invocation: { kind: "direct" },
7626
+ parameters: [{
7627
+ name: "request",
7628
+ wire: "request",
7629
+ source: "json",
7630
+ codec: {
7631
+ mode: "strict",
7632
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiRegistrationOtpRequest",
7633
+ schema: _awiki_dsh_plugin_awiki_sendRegistrationOtp_parameter_0$schema
7634
+ }
7635
+ }],
7636
+ result: {
7637
+ mode: "strict",
7638
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7639
+ schema: _awiki_dsh_plugin_awiki_sendRegistrationOtp_result$schema
7241
7640
  },
7242
7641
  sourceLocation: {
7243
7642
  "file": "packages/dsh-awiki/src/index.ts",
7244
- "line": 113,
7245
- "column": 3
7643
+ "line": 105,
7644
+ "column": 9
7246
7645
  }
7247
7646
  },
7248
7647
  {
7249
- id: "@awiki/dsh-plugin#awiki/sendRegistrationOtp",
7648
+ id: "@awiki/dsh-plugin#awiki/sendText",
7250
7649
  service: "awiki",
7251
7650
  namespace: "awiki",
7252
- method: "sendRegistrationOtp",
7651
+ method: "sendText",
7253
7652
  invocation: { kind: "direct" },
7254
7653
  parameters: [{
7255
7654
  name: "request",
@@ -7257,26 +7656,26 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7257
7656
  source: "json",
7258
7657
  codec: {
7259
7658
  mode: "strict",
7260
- typeSymbol: "@awiki/dsh-plugin/types#AwikiRegistrationOtpRequest",
7261
- schema: _awiki_dsh_plugin_awiki_sendRegistrationOtp_parameter_0$schema
7659
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiSendTextRequest",
7660
+ schema: _awiki_dsh_plugin_awiki_sendText_parameter_0$schema
7262
7661
  }
7263
7662
  }],
7264
7663
  result: {
7265
7664
  mode: "strict",
7266
7665
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7267
- schema: _awiki_dsh_plugin_awiki_sendRegistrationOtp_result$schema
7666
+ schema: _awiki_dsh_plugin_awiki_sendText_result$schema
7268
7667
  },
7269
7668
  sourceLocation: {
7270
7669
  "file": "packages/dsh-awiki/src/index.ts",
7271
- "line": 98,
7670
+ "line": 219,
7272
7671
  "column": 3
7273
7672
  }
7274
7673
  },
7275
7674
  {
7276
- id: "@awiki/dsh-plugin#awiki/sendText",
7675
+ id: "@awiki/dsh-plugin#awiki/startDeviceJoinVerification",
7277
7676
  service: "awiki",
7278
7677
  namespace: "awiki",
7279
- method: "sendText",
7678
+ method: "startDeviceJoinVerification",
7280
7679
  invocation: { kind: "direct" },
7281
7680
  parameters: [{
7282
7681
  name: "request",
@@ -7284,19 +7683,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7284
7683
  source: "json",
7285
7684
  codec: {
7286
7685
  mode: "strict",
7287
- typeSymbol: "@awiki/dsh-plugin/types#AwikiSendTextRequest",
7288
- schema: _awiki_dsh_plugin_awiki_sendText_parameter_0$schema
7686
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiRequestRefInput",
7687
+ schema: _awiki_dsh_plugin_awiki_startDeviceJoinVerification_parameter_0$schema
7289
7688
  }
7290
7689
  }],
7291
7690
  result: {
7292
7691
  mode: "strict",
7293
7692
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7294
- schema: _awiki_dsh_plugin_awiki_sendText_result$schema
7693
+ schema: _awiki_dsh_plugin_awiki_startDeviceJoinVerification_result$schema
7295
7694
  },
7296
7695
  sourceLocation: {
7297
7696
  "file": "packages/dsh-awiki/src/index.ts",
7298
- "line": 183,
7299
- "column": 3
7697
+ "line": 123,
7698
+ "column": 9
7300
7699
  }
7301
7700
  },
7302
7701
  {
@@ -7322,7 +7721,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7322
7721
  },
7323
7722
  sourceLocation: {
7324
7723
  "file": "packages/dsh-awiki/src/index.ts",
7325
- "line": 175,
7724
+ "line": 211,
7326
7725
  "column": 9
7327
7726
  }
7328
7727
  },
@@ -7349,7 +7748,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7349
7748
  },
7350
7749
  sourceLocation: {
7351
7750
  "file": "packages/dsh-awiki/src/index.ts",
7352
- "line": 161,
7751
+ "line": 197,
7353
7752
  "column": 3
7354
7753
  }
7355
7754
  },
@@ -7376,7 +7775,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7376
7775
  },
7377
7776
  sourceLocation: {
7378
7777
  "file": "packages/dsh-awiki/src/index.ts",
7379
- "line": 104,
7778
+ "line": 143,
7380
7779
  "column": 9
7381
7780
  }
7382
7781
  },
@@ -7403,7 +7802,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7403
7802
  },
7404
7803
  sourceLocation: {
7405
7804
  "file": "packages/dsh-awiki/src/index.ts",
7406
- "line": 110,
7805
+ "line": 149,
7407
7806
  "column": 3
7408
7807
  }
7409
7808
  }
@@ -7432,13 +7831,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7432
7831
  const AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION = "clear-awiki-local-data";
7433
7832
  //#endregion
7434
7833
  //#region \0dsh-awiki-css:AwikiIdentityPage.module.css.mjs
7435
- const css$4 = "._0dbJua_page{width:100%;height:100%;min-height:0;color:var(--dsw-alias-label-secondary);grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}._0dbJua_navigation{box-sizing:border-box;align-items:center;min-height:44px;padding:8px 16px 0;display:flex}._0dbJua_backButton{min-height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}._0dbJua_backButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._0dbJua_backButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}._0dbJua_backButton:disabled{cursor:default;opacity:.5}._0dbJua_viewport{min-height:0;overflow:auto}._0dbJua_content{box-sizing:border-box;align-content:center;width:min(400px,100%);min-height:100%;margin:0 auto;padding:28px 32px;display:grid}@media (height<=560px){._0dbJua_navigation{min-height:36px;padding:4px 8px 0}._0dbJua_backButton{min-height:32px}._0dbJua_content{align-content:start;padding:12px 16px}}@media (prefers-reduced-motion:reduce){._0dbJua_backButton{transition-duration:.001ms!important}}";
7436
- const tagId$4 = "@awiki/dsh-plugin/AwikiIdentityPage.module.css";
7437
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
7834
+ const css$5 = "._0dbJua_page{width:100%;height:100%;min-height:0;color:var(--dsw-alias-label-secondary);grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}._0dbJua_navigation{box-sizing:border-box;align-items:center;min-height:44px;padding:8px 16px 0;display:flex}._0dbJua_backButton{min-height:36px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;align-items:center;gap:6px;padding:0 8px;font-size:12px;line-height:18px;display:inline-flex}._0dbJua_backButton:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}._0dbJua_backButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}._0dbJua_backButton:disabled{cursor:default;opacity:.5}._0dbJua_viewport{min-height:0;overflow:auto}._0dbJua_content{box-sizing:border-box;align-content:center;width:min(400px,100%);min-height:100%;margin:0 auto;padding:28px 32px;display:grid}@media (height<=560px){._0dbJua_navigation{min-height:36px;padding:4px 8px 0}._0dbJua_backButton{min-height:32px}._0dbJua_content{align-content:start;padding:12px 16px}}@media (prefers-reduced-motion:reduce){._0dbJua_backButton{transition-duration:.001ms!important}}";
7835
+ const tagId$5 = "@awiki/dsh-plugin/AwikiIdentityPage.module.css";
7836
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
7438
7837
  const tag = document.createElement("style");
7439
7838
  tag.dataset.plugin = "@awiki/dsh-plugin";
7440
- tag.dataset.pluginCss = tagId$4;
7441
- tag.textContent = css$4;
7839
+ tag.dataset.pluginCss = tagId$5;
7840
+ tag.textContent = css$5;
7442
7841
  document.head.appendChild(tag);
7443
7842
  }
7444
7843
  var _dsh_awiki_css_AwikiIdentityPage_module_css_default = {
@@ -7476,13 +7875,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7476
7875
  }
7477
7876
  //#endregion
7478
7877
  //#region \0dsh-awiki-css:AwikiOverlay.module.css.mjs
7479
- const css$3 = ".EtEeYG_trigger{z-index:2;border:1px solid var(--dsw-alias-border-l2);width:48px;height:48px;color:var(--dsw-alias-brand-primary);box-shadow:var(--dsw-shadow-lv2);cursor:grab;font:inherit;touch-action:none;user-select:none;background:#fff;border-radius:50%;place-items:center;padding:0;display:grid;position:fixed;overflow:visible}.EtEeYG_trigger:hover{box-shadow:var(--dsw-shadow-lv3);background:#fff}.EtEeYG_trigger:active,.EtEeYG_trigger[data-dragging]{cursor:grabbing}.EtEeYG_launcherIcon{object-fit:cover;pointer-events:none;border-radius:50%;width:100%;height:100%;display:block}.EtEeYG_unreadBadge{border:2px solid var(--dsw-alias-bg-base);background:var(--dsw-alias-state-error-primary);color:#fff;box-sizing:border-box;pointer-events:none;border-radius:10px;place-items:center;min-width:20px;height:20px;padding:0 5px;font-size:11px;font-weight:600;line-height:16px;display:grid;position:absolute;top:-5px;right:-5px}.EtEeYG_trigger:focus-visible,.EtEeYG_drawer button:focus-visible,.EtEeYG_drawer input:focus-visible,.EtEeYG_drawer textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_drawer{--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);z-index:1;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:min(720px,100vw - 80px);min-width:min(360px,100vw - 80px);height:min(720px,100vh - 16px);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3);border-radius:16px;flex-direction:column;transition:width .16s;display:flex;position:fixed;overflow:hidden}.EtEeYG_drawer[data-mode=mail]{width:min(1040px,100vw - 80px)}.EtEeYG_drawer[data-resizing]{user-select:none;transition:none}.EtEeYG_resizeHandle{z-index:5;touch-action:none;user-select:none;position:absolute}.EtEeYG_resizeHandle[data-resize-handle=n],.EtEeYG_resizeHandle[data-resize-handle=s]{cursor:ns-resize;height:8px;left:14px;right:14px}.EtEeYG_resizeHandle[data-resize-handle=n]{top:0}.EtEeYG_resizeHandle[data-resize-handle=s]{bottom:0}.EtEeYG_resizeHandle[data-resize-handle=e],.EtEeYG_resizeHandle[data-resize-handle=w]{cursor:ew-resize;width:8px;top:14px;bottom:14px}.EtEeYG_resizeHandle[data-resize-handle=e]{right:0}.EtEeYG_resizeHandle[data-resize-handle=w]{left:0}.EtEeYG_resizeHandle[data-resize-handle=ne],.EtEeYG_resizeHandle[data-resize-handle=se],.EtEeYG_resizeHandle[data-resize-handle=sw],.EtEeYG_resizeHandle[data-resize-handle=nw]{width:14px;height:14px}.EtEeYG_resizeHandle[data-resize-handle=ne]{cursor:nesw-resize;top:0;right:0}.EtEeYG_resizeHandle[data-resize-handle=se]{cursor:nwse-resize;bottom:0;right:0}.EtEeYG_resizeHandle[data-resize-handle=sw]{cursor:nesw-resize;bottom:0;left:0}.EtEeYG_resizeHandle[data-resize-handle=nw]{cursor:nwse-resize;top:0;left:0}.EtEeYG_drawerHeader{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;touch-action:none;user-select:none;flex:none;align-items:center;gap:8px;height:58px;padding:0 14px 0 18px;display:flex}.EtEeYG_drawerHeader[data-dragging]{cursor:grabbing}.EtEeYG_drawerHeader>div{flex:1;align-items:center;gap:8px;display:flex}.EtEeYG_drawerHeader h2{margin:0;font-size:16px;line-height:24px}.EtEeYG_drawerHeader button,.EtEeYG_back{cursor:pointer;width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:9px;place-items:center;padding:0;display:grid}.EtEeYG_drawerHeader button:hover,.EtEeYG_back:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_centerState,.EtEeYG_threadEmpty{text-align:center;color:var(--dsw-alias-label-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;padding:32px;display:flex}.EtEeYG_centerState p{overflow-wrap:anywhere;max-width:420px;margin:0}.EtEeYG_registrationIcon{background:var(--dsw-alias-interactive-bg-active);width:48px;height:48px;color:var(--dsw-alias-brand-primary);border-radius:50%;justify-self:center;place-items:center;display:grid}.EtEeYG_fileDraft input,.EtEeYG_composeRow textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px}.EtEeYG_primary,.EtEeYG_more,.EtEeYG_fileDraft button{background:var(--dsw-alias-button-primary-fill);min-height:36px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;font:inherit;border:0;border-radius:10px;padding:0 14px}.EtEeYG_primary:hover,.EtEeYG_fileDraft button:hover{background:var(--dsw-alias-button-primary-hover)}.EtEeYG_primary:disabled,.EtEeYG_fileDraft button:disabled{opacity:.5;cursor:default}.EtEeYG_secondary{border:1px solid var(--dsw-alias-border-l2);min-height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:10px;padding:0 14px}.EtEeYG_secondary:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_composeBackdrop{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 72%, transparent);place-items:center;padding:24px;display:grid;position:absolute;inset:58px 0 0;overflow:auto}.EtEeYG_composeCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:min(360px,100%);box-shadow:var(--dsw-shadow-lv3);border-radius:14px;gap:12px;padding:20px;display:grid}.EtEeYG_composeCard h3{margin:0;font-size:16px;line-height:24px}.EtEeYG_composeCard p{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:20px}.EtEeYG_composeCard label{color:var(--dsw-alias-label-secondary);gap:6px;font-size:13px;line-height:20px;display:grid}.EtEeYG_composeCard input,.EtEeYG_composeCard textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px;padding:9px 12px}.EtEeYG_composeCard input{height:40px;padding-block:0}.EtEeYG_composeCard textarea{resize:vertical;min-height:92px}.EtEeYG_composeActions{justify-content:flex-end;gap:8px;display:flex}.EtEeYG_logoutWarning{color:var(--dsw-alias-label-secondary);gap:8px;font-size:13px;line-height:20px;display:grid}.EtEeYG_logoutWarning p{margin:0}.EtEeYG_logoutConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.EtEeYG_compactModal.EtEeYG_compactModal{max-height:calc(100vh - 48px)}.EtEeYG_compactModalContent{min-height:0;overflow-y:auto}.EtEeYG_linkButton{color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:0}.EtEeYG_notice{color:var(--dsw-alias-state-success-primary);text-align:center}.EtEeYG_identityAccess{flex:1;min-height:0;overflow:hidden}.EtEeYG_recoveryForm{width:100%;min-width:0;color:var(--dsw-alias-label-secondary);gap:14px;display:grid}.EtEeYG_recoveryForm h3{color:var(--dsw-alias-label-primary);text-align:center;margin:0}.EtEeYG_recoveryForm>p{text-align:center;margin:0;font-size:13px;line-height:20px}.EtEeYG_recoveryForm>label:not(.EtEeYG_recoveryConfirmation){gap:6px;font-size:13px;line-height:20px;display:grid}.EtEeYG_recoveryForm>label>input:not([type=checkbox]){box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;height:40px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:0 12px}.EtEeYG_recoveryForm input:focus-visible,.EtEeYG_recoveryForm button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_recoveryStatusLine{border-bottom:1px solid var(--dsw-alias-border-l1);gap:3px;min-width:0;padding-bottom:10px;display:grid}.EtEeYG_recoveryStatusLine span{color:var(--dsw-alias-brand-primary);font-size:12px;font-weight:600}.EtEeYG_recoveryIdentitySummary{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;grid-template-columns:max-content minmax(0,1fr);gap:6px 14px;min-width:0;padding:12px;font-size:12px;line-height:18px;display:grid}.EtEeYG_recoveryIdentitySummary span{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryIdentitySummary strong{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-primary)}.EtEeYG_recoveryDiagnostics{border-top:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-tertiary);padding-top:2px;font-size:11px;line-height:17px}.EtEeYG_recoveryDiagnostics summary{cursor:pointer;width:max-content;color:var(--dsw-alias-label-secondary);user-select:none}.EtEeYG_recoveryDiagnostics summary:hover{color:var(--dsw-alias-label-primary)}.EtEeYG_recoveryDiagnostics summary:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px;border-radius:4px}.EtEeYG_recoveryDiagnostics dl{gap:6px;margin:8px 0 0;display:grid}.EtEeYG_recoveryDiagnostics dl>div{gap:2px;min-width:0;display:grid}.EtEeYG_recoveryDiagnostics dt{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryDiagnostics dd{min-width:0;margin:0}.EtEeYG_recoveryDiagnostics code{overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);font-size:10px;line-height:16px;display:block}.EtEeYG_recoveryImpact{border-left:3px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);gap:6px;padding:12px;display:grid}.EtEeYG_recoveryImpact p{align-items:flex-start;gap:7px;margin:0;font-size:12px;line-height:18px;display:flex}.EtEeYG_recoveryImpact svg{flex:none;margin-top:2px}.EtEeYG_recoveryImpact p[data-tone=success] svg{color:var(--dsw-alias-state-success-primary)}.EtEeYG_recoveryImpact p[data-tone=neutral] svg{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryHandle{overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);text-align:center;margin:-8px 0 0;font-size:13px;line-height:20px}.EtEeYG_recoveryConfirmationCopy{color:var(--dsw-alias-label-secondary);text-align:left;margin:0;font-size:12px;line-height:18px}.EtEeYG_recoveryProgressPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:8px;justify-items:center;gap:10px;min-width:0;padding:16px;display:grid}.EtEeYG_recoveryProgressPanel>svg{color:var(--dsw-alias-brand-primary);animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_recoveryProgressPanel p{margin:0;font-size:12px;line-height:18px}.EtEeYG_recoveryProgressPanel button{justify-content:center;align-items:center;gap:6px;width:100%;display:flex}.EtEeYG_chat{flex:1;grid-template-columns:240px minmax(0,1fr);min-height:0;display:grid}.EtEeYG_roster{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex-direction:column;min-width:0;display:flex}.EtEeYG_identityCard{background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex-direction:column;gap:2px;margin:14px;padding:12px;display:flex}.EtEeYG_identityNameRow{align-items:center;min-width:0;min-height:24px;display:flex}.EtEeYG_profileAvatar{background:var(--dsw-alias-interactive-bg-active);width:24px;height:24px;color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;margin-right:7px;display:grid}.EtEeYG_identityNameText{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;line-height:22px;overflow:hidden}.EtEeYG_identityName{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;background:0 0;border:0;flex:1;padding:0;font-size:16px;font-weight:600;line-height:24px;overflow:hidden}.EtEeYG_identityName:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px;border-radius:4px}.EtEeYG_identityEdit{width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:.72;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;margin-left:4px;padding:0;transition:opacity .12s;display:grid}.EtEeYG_identityNameRow:hover .EtEeYG_identityEdit,.EtEeYG_identityNameRow:focus-within .EtEeYG_identityEdit{opacity:1}.EtEeYG_identityEdit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_identityEditor{flex:1;align-items:center;gap:4px;min-width:0;display:flex}.EtEeYG_identityEditor input{border:1px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;outline:none;flex:1;padding:0 8px;font-size:13px}.EtEeYG_identityEditor button{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_identityEditor button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_identityEditor button:disabled,.EtEeYG_identityName:disabled{cursor:default;opacity:.5}.EtEeYG_identityEdit:disabled{cursor:default}.EtEeYG_identityHandle{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.EtEeYG_identityStatus{color:var(--dsw-alias-state-success-primary);margin-top:4px;font-size:12px;line-height:18px}.EtEeYG_identityError{color:var(--dsw-alias-state-error-primary);margin-top:4px;font-size:11px;line-height:16px}.EtEeYG_identityCard i{background:var(--dsw-alias-state-success-primary);border-radius:50%;width:6px;height:6px;margin-right:5px;display:inline-block}.EtEeYG_profileBio{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:6px 0 2px;font-size:11px;line-height:17px;display:-webkit-box;overflow:hidden}.EtEeYG_profileTags{flex-wrap:wrap;gap:4px;margin-top:5px;display:flex}.EtEeYG_profileTags>span{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);min-width:0;max-width:100%;min-height:20px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;border-radius:7px;align-items:center;gap:3px;padding:0 6px;font-size:10px;line-height:16px;display:inline-flex}.EtEeYG_profileTags>span>button{width:16px;height:16px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;padding:0;display:grid}.EtEeYG_profileTags>span>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_profileEditor{gap:10px;display:grid}.EtEeYG_profileEditor label{color:var(--dsw-alias-label-secondary);gap:4px;font-size:11px;line-height:16px;display:grid;position:relative}.EtEeYG_profileEditor label>small{color:var(--dsw-alias-label-tertiary);font-size:10px;position:absolute;top:0;right:1px}.EtEeYG_profileEditor input,.EtEeYG_profileEditor textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;padding:7px 8px;font-size:12px}.EtEeYG_profileEditor input{height:32px;padding-block:0}.EtEeYG_profileEditor textarea{resize:vertical}.EtEeYG_profileTagEditor{gap:4px;display:grid}.EtEeYG_profileTagEditor>div:first-of-type{grid-template-columns:minmax(0,1fr) 30px;gap:5px;display:grid}.EtEeYG_profileTagEditor>div:first-of-type button{border:1px solid var(--dsw-alias-border-l2);width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:7px;place-items:center;padding:0;display:grid}.EtEeYG_profileEditorActions{grid-template-columns:1fr 1fr;gap:6px;margin-top:2px;display:grid}.EtEeYG_profileEditorActions button{min-width:0;padding-inline:6px;font-size:12px}.EtEeYG_modePanel{flex:1;min-height:0;display:none}.EtEeYG_modePanel[data-active]{display:flex}.EtEeYG_modeTabs{background:var(--dsw-alias-bg-layer-3);border-radius:9px;grid-template-columns:1fr 1fr;gap:4px;margin:0 14px 12px;padding:3px;display:grid}.EtEeYG_modeTabs button{min-height:30px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:5px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.EtEeYG_modeTabs button:hover{color:var(--dsw-alias-label-primary)}.EtEeYG_modeTabs button[aria-selected=true]{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv1)}.EtEeYG_modeTabs small{min-width:18px;color:var(--dsw-alias-brand-primary);font-size:10px;line-height:14px}.EtEeYG_rosterHeader{justify-content:space-between;align-items:center;min-height:32px;padding:0 8px 8px 16px;display:flex}.EtEeYG_rosterTitle{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.EtEeYG_rosterActions{align-items:center;gap:2px;display:flex}.EtEeYG_rosterAction{width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:9px;place-items:center;padding:0;display:grid}.EtEeYG_rosterAction:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_rosterActions .EtEeYG_rosterAction{position:relative}.EtEeYG_rosterActions .EtEeYG_rosterAction small{background:var(--dsw-alias-bg-layer-3);min-width:14px;height:14px;color:var(--dsw-alias-label-secondary);box-sizing:border-box;border-radius:7px;place-items:center;padding:0 3px;font-size:9px;line-height:12px;display:grid;position:absolute;top:1px;right:0}.EtEeYG_groupRecoveryNotice{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:8px;align-items:flex-start;gap:8px;margin:0 8px 8px;padding:9px 10px;display:flex}.EtEeYG_groupRecoveryNotice[data-status=blocked]{border-color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupRecoveryNotice>span{flex:1;gap:2px;min-width:0;display:grid}.EtEeYG_groupRecoveryNotice strong{font-size:12px;line-height:18px}.EtEeYG_groupRecoveryNotice small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.EtEeYG_groupRecoveryNotice button{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_groupRecoveryNotice button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_groupRecoveryNotice button:disabled{cursor:default;opacity:.5}.EtEeYG_conversationList{flex:1;min-height:0;padding:0 8px;overflow:auto}.EtEeYG_conversationRow{width:100%;color:inherit;background:0 0;border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.EtEeYG_conversationRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_conversationRow[data-active]{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_conversationSelect{width:100%;min-width:0;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;align-items:center;gap:10px;padding:9px;display:flex}.EtEeYG_conversationMenu{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:7px;place-items:center;margin-right:5px;padding:0;display:grid}.EtEeYG_conversationRow:hover .EtEeYG_conversationMenu,.EtEeYG_conversationRow:focus-within .EtEeYG_conversationMenu,.EtEeYG_conversationMenu[aria-expanded=true]{opacity:1}.EtEeYG_conversationMenu:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.EtEeYG_conversationMenu:disabled{cursor:default;opacity:.45}.EtEeYG_avatar{background:var(--dsw-alias-interactive-bg-active);width:34px;height:34px;color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;font-size:12px;line-height:18px;display:grid;position:relative;overflow:visible}.EtEeYG_conversationUnreadBadge{border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-state-error-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-inverted);box-sizing:border-box;pointer-events:none;border-radius:9px;place-items:center;padding:0 4px;font-size:10px;font-weight:600;line-height:14px;display:grid;position:absolute;top:-6px;right:-7px}.EtEeYG_conversationText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.EtEeYG_conversationHeader{align-items:center;gap:8px;min-width:0;display:flex}.EtEeYG_conversationHeader strong{flex:1;min-width:0}.EtEeYG_conversationTime{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px;font-weight:400;line-height:16px}.EtEeYG_conversationText strong,.EtEeYG_conversationText small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_conversationText strong{font-size:13px;line-height:20px}.EtEeYG_conversationText small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.EtEeYG_more{background:var(--dsw-alias-button-elevated-fill);color:var(--dsw-alias-label-secondary);margin:8px}.EtEeYG_more:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_hiddenConversationList{max-height:min(320px,48vh);display:grid;overflow:auto}.EtEeYG_hiddenConversationRow{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:50px;padding:6px 2px;display:grid}.EtEeYG_hiddenConversationRow:last-child{border-bottom:0}.EtEeYG_hiddenConversationRow .EtEeYG_avatar{width:30px;height:30px}.EtEeYG_hiddenConversationRow>span:nth-child(2){min-width:0;display:grid}.EtEeYG_hiddenConversationRow strong,.EtEeYG_hiddenConversationRow small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_hiddenConversationRow strong{font-size:12px;line-height:18px}.EtEeYG_hiddenConversationRow small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.EtEeYG_hiddenConversationRow>button{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:7px;padding:0 9px;font-size:11px}.EtEeYG_hiddenConversationRow>button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_hiddenConversationRow>button:disabled{cursor:default;opacity:.55}.EtEeYG_conversationPreferenceError{color:var(--dsw-alias-state-error-primary);font-size:11px;line-height:17px}.EtEeYG_thread{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.EtEeYG_threadHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:56px;padding:0 14px;display:flex}.EtEeYG_threadTitle{flex-direction:column;flex:1;min-width:0;display:flex}.EtEeYG_threadTitle strong,.EtEeYG_threadTitle small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_threadHeader small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_threadAction{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_threadAction:hover,.EtEeYG_threadAction[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_groupAccessNotice{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex:none;grid-template-columns:20px minmax(0,1fr) auto;align-items:start;gap:8px 10px;padding:11px 14px;display:grid}.EtEeYG_groupAccessNotice[data-status=blocked],.EtEeYG_groupAccessNotice[data-status=not-member]{background:var(--dsw-alias-interactive-bg-hover-danger)}.EtEeYG_groupAccessNotice[data-compact]{grid-template-columns:20px minmax(0,1fr);padding:12px 16px}.EtEeYG_groupAccessIcon{min-height:20px;color:var(--dsw-alias-label-secondary);place-items:center;display:grid}.EtEeYG_groupAccessNotice[data-status=loading] .EtEeYG_groupAccessIcon svg,.EtEeYG_groupAccessNotice[data-status=recovering] .EtEeYG_groupAccessIcon svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupAccessCopy{gap:2px;min-width:0;display:grid}.EtEeYG_groupAccessCopy strong{font-size:12px;line-height:18px}.EtEeYG_groupAccessCopy small{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:11px;line-height:17px}.EtEeYG_groupAccessActions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.EtEeYG_groupAccessNotice[data-compact] .EtEeYG_groupAccessActions{grid-column:2;justify-content:flex-start}.EtEeYG_groupAccessActions button{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;border-radius:7px;justify-content:center;align-items:center;gap:5px;padding:0 8px;font-size:11px;line-height:16px;display:flex}.EtEeYG_groupAccessActions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_groupAccessActions button:disabled{cursor:default;opacity:.55}.EtEeYG_groupDetails{z-index:4;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:min(360px,100%);min-width:0;box-shadow:var(--dsw-shadow-lv2);flex-direction:column;display:flex;position:absolute;top:56px;bottom:0;right:0;overflow:hidden}.EtEeYG_groupDetailsHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:12px;min-height:54px;padding:0 12px 0 16px;display:flex}.EtEeYG_groupDetailsHeader>div{flex-direction:column;flex:1;min-width:0;display:flex}.EtEeYG_groupDetailsHeader strong{font-size:14px;line-height:21px}.EtEeYG_groupDetailsHeader small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:15px;overflow:hidden}.EtEeYG_groupDetailsHeader button,.EtEeYG_groupMemberHeading button,.EtEeYG_groupMemberRemove{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_groupDetailsHeader button:hover,.EtEeYG_groupMemberHeading button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_groupDetailsLoading{color:var(--dsw-alias-label-tertiary);margin:auto;font-size:12px}.EtEeYG_groupSummary{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:5px;padding:16px;display:grid}.EtEeYG_groupSummary>strong{font-size:15px;line-height:22px}.EtEeYG_groupSummary>code{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.EtEeYG_groupSummary>p{color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:12px;line-height:18px}.EtEeYG_groupSummary dl{grid-template-columns:1fr 1fr;gap:8px;margin:8px 0 0;display:grid}.EtEeYG_groupSummary dl>div{gap:1px;display:grid}.EtEeYG_groupSummary dt{color:var(--dsw-alias-label-tertiary);font-size:10px}.EtEeYG_groupSummary dd{color:var(--dsw-alias-label-primary);margin:0;font-size:12px}.EtEeYG_groupInvite{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:5px;padding:12px 16px;display:grid}.EtEeYG_groupInvite label{color:var(--dsw-alias-label-secondary);font-size:11px}.EtEeYG_groupInvite>div{grid-template-columns:minmax(0,1fr) 32px;gap:6px;display:grid}.EtEeYG_groupInvite input{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:0;height:32px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;padding:0 9px;font-size:12px}.EtEeYG_groupInvite button{background:var(--dsw-alias-button-primary-fill);width:32px;height:32px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.EtEeYG_groupInvite button:disabled{cursor:default;opacity:.7}.EtEeYG_groupInvite button[data-busy] svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupInviteStatus{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-tertiary);margin:0;font-size:10px;line-height:16px}.EtEeYG_groupInviteStatus[data-state=success]{color:var(--dsw-alias-state-success-primary)}.EtEeYG_groupInviteStatus[data-state=error]{color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupMemberSection{flex-direction:column;flex:1;min-height:0;display:flex}.EtEeYG_groupMemberHeading{flex:none;justify-content:space-between;align-items:center;min-height:40px;padding:0 12px 0 16px;display:flex}.EtEeYG_groupMemberHeading strong{font-size:12px;line-height:18px}.EtEeYG_groupMemberHeading button[data-busy] svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupMemberRefreshStatus{overflow-wrap:anywhere;min-height:22px;color:var(--dsw-alias-label-tertiary);flex:none;margin:0;padding:2px 16px 4px;font-size:10px;line-height:16px}.EtEeYG_groupMemberRefreshStatus[data-state=success]{color:var(--dsw-alias-state-success-primary)}.EtEeYG_groupMemberRefreshStatus[data-state=error]{color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupMemberList{min-height:0;padding:0 8px;overflow:auto}.EtEeYG_groupMemberRow{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:30px minmax(0,1fr) auto 28px;align-items:center;gap:8px;min-height:48px;padding:4px 6px;display:grid}.EtEeYG_groupMemberAvatar{background:var(--dsw-alias-interactive-bg-active);width:30px;height:30px;color:var(--dsw-alias-brand-primary);border-radius:50%;place-items:center;font-size:11px;display:grid}.EtEeYG_groupMemberIdentity{flex-direction:column;min-width:0;display:flex}.EtEeYG_groupMemberIdentity strong{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.EtEeYG_groupMemberIdentity strong small{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-brand-primary);border-radius:4px;padding:0 4px;font-size:9px}.EtEeYG_groupMemberIdentity>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:15px;overflow:hidden}.EtEeYG_groupMemberRole{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:10px}.EtEeYG_groupMemberRemove:hover{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupDetailsFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;min-height:46px;padding:0 16px;display:flex}.EtEeYG_groupDetailsFooter small{color:var(--dsw-alias-label-tertiary);font-size:10px}.EtEeYG_dangerText{color:var(--dsw-alias-state-error-primary);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;font-size:12px}.EtEeYG_dangerText:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.EtEeYG_groupDetailsError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);flex:none;padding:8px 12px;font-size:11px;line-height:17px}.EtEeYG_summaryTrigger{min-height:30px;color:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;flex:none;align-items:center;gap:5px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summaryTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryTrigger:disabled{cursor:default;opacity:.7}.EtEeYG_summaryTrigger[aria-expanded=true]>svg:last-child{transform:rotate(180deg)}.EtEeYG_summaryTrigger>svg:first-child{flex:none}.EtEeYG_summaryPanel{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:0;max-height:min(220px,33%);color:var(--dsw-alias-label-primary);border-radius:10px;flex:0 33%;margin:8px 10px 0;overflow:hidden}.EtEeYG_summaryPanel[data-collapsed]{flex-basis:auto;max-height:42px}.EtEeYG_summaryHeader{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:9px;min-height:38px;padding:0 8px 0 12px;display:flex}.EtEeYG_summaryHeader>span{color:var(--dsw-alias-brand-primary);align-items:center;gap:6px;display:flex}.EtEeYG_summaryHeader>span strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.EtEeYG_summaryHeader>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11px;line-height:16px;overflow:hidden}.EtEeYG_summaryHeader>button{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_summaryHeader>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryCollapsed{width:100%;min-height:40px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:0 10px 0 12px;display:grid}.EtEeYG_summaryCollapsed:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryCollapsed>span{color:var(--dsw-alias-brand-primary);align-items:center;gap:6px;font-size:12px;font-weight:600;display:flex}.EtEeYG_summaryCollapsed>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_summaryCollapsed>em{color:var(--dsw-alias-state-warn-label);white-space:nowrap;font-size:11px;font-style:normal}.EtEeYG_summaryLoading{min-height:88px;color:var(--dsw-alias-brand-primary);justify-content:center;align-items:center;gap:10px;padding:16px;display:flex}.EtEeYG_summaryLoading>svg,.EtEeYG_summaryTrigger:disabled>svg:first-child{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_summaryLoading>span{flex-direction:column;gap:2px;display:flex}.EtEeYG_summaryLoading strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.EtEeYG_summaryLoading small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.EtEeYG_summaryError{min-height:58px;color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:12px;padding:12px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summaryError>span{overflow-wrap:anywhere;min-width:0}.EtEeYG_summaryError button,.EtEeYG_summaryStale button{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:7px;flex:none;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:flex}.EtEeYG_summaryError button:hover,.EtEeYG_summaryStale button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryStale{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-state-warn-label);justify-content:space-between;align-items:center;gap:10px;padding:6px 10px;font-size:11px;line-height:16px;display:flex}.EtEeYG_summaryBody{gap:10px;max-height:118px;padding:10px 12px;display:grid;overflow:auto}.EtEeYG_summarySection h4{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;margin:0 0 4px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summarySection h4>svg{color:var(--dsw-alias-label-secondary);flex:none}.EtEeYG_summarySection ul{color:var(--dsw-alias-label-secondary);gap:2px;margin:0;padding-left:18px;font-size:11px;line-height:17px;display:grid}.EtEeYG_summarySection li{overflow-wrap:anywhere;padding-left:1px}.EtEeYG_summarySection p{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px;line-height:17px}.EtEeYG_summarySection b{color:var(--dsw-alias-label-primary);font-weight:500}.EtEeYG_summaryActions{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto 1fr auto auto;align-items:center;gap:4px;min-height:34px;padding:0 8px;display:grid}.EtEeYG_summaryActions button{min-height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;align-items:center;gap:5px;padding:0 6px;font-size:11px;line-height:16px;display:flex}.EtEeYG_summaryActions button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryPrivacy{border-top:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;padding:0 10px;font-size:10px;line-height:15px;display:flex}.EtEeYG_summaryPrivacy svg{flex:none}.EtEeYG_summaryCopyError{color:var(--dsw-alias-state-error-primary);padding:4px 10px;font-size:10px;line-height:15px}@keyframes EtEeYG_summary-spin{to{transform:rotate(360deg)}}.EtEeYG_back{display:none}.EtEeYG_historyShell{flex:1;min-height:0;position:relative}.EtEeYG_history{box-sizing:border-box;flex-direction:column;gap:12px;height:100%;min-height:0;padding:16px;display:flex;overflow:auto}.EtEeYG_historyLoading{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;margin:auto;font-size:12px;line-height:18px;display:flex}.EtEeYG_historyLoading>svg{color:var(--dsw-alias-brand-primary);animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_latestMessages{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-floating-fill);min-width:30px;min-height:30px;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv2);cursor:pointer;font:inherit;border-radius:16px;justify-content:center;align-items:center;gap:5px;padding:0 9px;font-size:11px;line-height:16px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.EtEeYG_latestMessages:hover{background:var(--dsw-alias-button-floating-hover)}.EtEeYG_message{align-self:flex-start;max-width:min(78%,420px)}.EtEeYG_message[data-outgoing]{align-self:flex-end}.EtEeYG_messageMeta{color:var(--dsw-alias-label-tertiary);justify-content:space-between;gap:10px;margin-bottom:3px;font-size:11px;line-height:16px;display:flex}.EtEeYG_message p,.EtEeYG_attachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;border-radius:12px;margin:0;padding:9px 11px;line-height:20px}.EtEeYG_message[data-outgoing] p,.EtEeYG_message[data-outgoing] .EtEeYG_attachment{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_mention{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-brand-primary);border-radius:3px;padding:0 2px;font-weight:600}.EtEeYG_pendingMessage{grid-template-columns:auto minmax(0,1fr);align-self:flex-end;align-items:end;gap:7px;max-width:min(78%,420px);display:grid}.EtEeYG_pendingMessageSpinner{color:var(--dsw-alias-label-tertiary);margin-bottom:12px;animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_pendingMessageContent{opacity:.82;min-width:0}.EtEeYG_pendingMessageContent>p,.EtEeYG_pendingAttachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;border-radius:12px;margin:0;padding:9px 11px;line-height:20px}.EtEeYG_pendingAttachment{align-items:center;gap:9px;display:flex}.EtEeYG_pendingAttachment>svg{color:var(--dsw-alias-label-secondary);flex:none}.EtEeYG_pendingAttachment span{flex-direction:column;min-width:0;display:flex}.EtEeYG_pendingAttachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_pendingAttachment small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_pendingMessageContent>.EtEeYG_pendingCaption{color:var(--dsw-alias-label-secondary);background:0 0;border:0;margin-top:4px;padding:4px 8px;font-size:12px}.EtEeYG_attachment{cursor:pointer;font:inherit;text-align:left;align-items:center;gap:12px;display:flex}.EtEeYG_attachment span{flex-direction:column;min-width:0;display:flex}.EtEeYG_attachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_attachment small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_attachment:disabled{cursor:default}.EtEeYG_imageAttachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:280px;max-width:100%;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;text-align:left;border-radius:12px;margin:0;padding:0;display:block;overflow:hidden}.EtEeYG_imageAttachment img{background:var(--dsw-alias-bg-layer-1);object-fit:contain;width:100%;max-height:280px;display:block}.EtEeYG_imageAttachment span{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 10px;padding:7px 9px;display:grid}.EtEeYG_imageAttachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_imageAttachment small{color:var(--dsw-alias-label-tertiary);grid-column:1}.EtEeYG_imageAttachment svg{grid-area:1/2/span 2}.EtEeYG_message .EtEeYG_caption{color:var(--dsw-alias-label-secondary);background:0 0;margin-top:4px;padding:4px 8px;font-size:12px}.EtEeYG_inlineError{color:var(--dsw-alias-state-error-primary);margin-top:4px;display:block}.EtEeYG_empty{color:var(--dsw-alias-label-tertiary);text-align:center;margin:auto;padding:20px}.EtEeYG_composer{border-top:1px solid var(--dsw-alias-border-l1);flex:none;gap:8px;padding:10px 14px 14px;display:grid}.EtEeYG_filePicker{border:1px solid var(--dsw-alias-border-l2);width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:50%;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_filePicker:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_filePicker:disabled{opacity:.45;cursor:default}.EtEeYG_fileInput{display:none}.EtEeYG_composeInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;gap:6px;min-width:0;padding:9px 10px 8px;display:grid;position:relative}.EtEeYG_mentionCandidates{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);max-height:180px;box-shadow:var(--dsw-shadow-lv2);border-radius:8px;padding:5px;position:absolute;bottom:calc(100% + 7px);left:0;right:0;overflow:auto}.EtEeYG_mentionCandidates button{width:100%;min-height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-rows:auto auto;grid-template-columns:28px minmax(0,1fr);align-items:center;column-gap:8px;padding:4px 7px;display:grid}.EtEeYG_mentionCandidates button:hover,.EtEeYG_mentionCandidates button[aria-selected=true]{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_mentionCandidates button>span{background:var(--dsw-alias-bg-layer-3);width:28px;height:28px;color:var(--dsw-alias-brand-primary);border-radius:50%;grid-row:1/span 2;place-items:center;font-size:10px;display:grid}.EtEeYG_mentionCandidates strong,.EtEeYG_mentionCandidates small{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.EtEeYG_mentionCandidates strong{align-self:end;font-size:12px;line-height:16px}.EtEeYG_mentionCandidates small{color:var(--dsw-alias-label-tertiary);align-self:start;font-size:10px;line-height:14px}.EtEeYG_composeInput:focus-within{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_composeInput textarea{resize:none;background:0 0;border:0;border-radius:0;outline:0;min-width:0;min-height:42px;padding:0}.EtEeYG_composeInput textarea:focus-visible{outline:0}.EtEeYG_composeActions{justify-content:space-between;align-items:center;min-height:32px;display:flex}.EtEeYG_filePreview{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;align-items:center;gap:8px;width:min(240px,100% - 8px);min-height:36px;padding:5px 28px 5px 8px;display:flex;position:relative}.EtEeYG_filePreview[data-image]{width:72px;height:72px;min-height:0;padding:0}.EtEeYG_filePreview img{object-fit:cover;border-radius:9px;width:72px;height:72px;display:block}.EtEeYG_filePreviewIcon{color:var(--dsw-alias-label-secondary);flex:none;place-items:center;display:grid}.EtEeYG_filePreviewName{min-width:0;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.EtEeYG_removeFile{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-floating-fill);width:22px;height:22px;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv1);cursor:pointer;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:-7px;right:-7px}.EtEeYG_removeFile:hover{background:var(--dsw-alias-button-floating-hover)}.EtEeYG_send{background:var(--dsw-alias-button-primary-fill);width:32px;height:32px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:50%;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_send:disabled{opacity:.45;cursor:default}.EtEeYG_error{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;flex:none;padding:8px 14px;font-size:12px;line-height:18px}.EtEeYG_pending{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-inverted);box-shadow:var(--dsw-shadow-lv2);border-radius:9px;padding:7px 10px;font-size:12px;line-height:18px;position:absolute;bottom:14px;right:14px}@media (width<=620px){.EtEeYG_trigger span{display:none}.EtEeYG_trigger{justify-content:center;width:36px;padding:0}.EtEeYG_drawer{width:calc(100vw - 56px);min-width:0}.EtEeYG_chat{grid-template-columns:1fr}.EtEeYG_thread{display:none}.EtEeYG_thread[data-visible]{display:flex}.EtEeYG_roster[data-hidden]{display:none}.EtEeYG_back{display:grid}.EtEeYG_summaryPanel{max-height:min(190px,33%);margin-left:8px;margin-right:8px}.EtEeYG_summaryTrigger>span{display:none}.EtEeYG_summaryTrigger{justify-content:center;width:30px;padding:0}.EtEeYG_summaryTrigger>svg:last-child{display:none}}@media (height<=420px){.EtEeYG_drawer{border-radius:10px}.EtEeYG_drawerHeader{height:44px;padding:0 8px 0 12px}.EtEeYG_drawerHeader h2{font-size:14px;line-height:20px}.EtEeYG_drawerHeader button,.EtEeYG_back{width:28px;height:28px}.EtEeYG_centerState,.EtEeYG_threadEmpty{justify-content:flex-start;gap:8px;min-height:0;padding:12px;overflow:auto}.EtEeYG_registrationIcon{width:32px;height:32px}.EtEeYG_composeBackdrop{place-items:start center;padding:8px;inset:44px 0 0}.EtEeYG_composeCard{border-radius:10px;gap:8px;padding:12px}.EtEeYG_recoveryForm{gap:8px}.EtEeYG_identityCard{border-radius:8px;margin:6px 8px;padding:7px 9px}.EtEeYG_profileBio,.EtEeYG_profileTags,.EtEeYG_identityStatus{display:none}.EtEeYG_modeTabs{margin:0 8px 4px}.EtEeYG_modeTabs button{min-height:26px}.EtEeYG_rosterHeader{min-height:28px;padding:0 4px 2px 12px}.EtEeYG_conversationSelect{gap:7px;padding:5px 7px}.EtEeYG_avatar{width:28px;height:28px}.EtEeYG_threadHeader{gap:5px;height:44px;padding:0 8px}.EtEeYG_groupAccessNotice{grid-template-columns:18px minmax(0,1fr);gap:6px 8px;padding:8px}.EtEeYG_groupAccessActions{grid-column:2;justify-content:flex-start}.EtEeYG_groupDetails{top:44px;overflow-y:auto}.EtEeYG_groupDetailsHeader{z-index:2;background:var(--dsw-alias-bg-layer-1);min-height:44px;padding-left:12px;position:sticky;top:0}.EtEeYG_groupSummary{gap:2px;padding:8px 12px}.EtEeYG_groupSummary dl{gap:6px;margin-top:3px}.EtEeYG_groupInvite{gap:3px;padding:7px 12px}.EtEeYG_groupMemberSection{flex:none}.EtEeYG_groupMemberHeading{min-height:32px;padding-left:12px}.EtEeYG_groupMemberList{overflow:visible}.EtEeYG_groupMemberRow{min-height:40px}.EtEeYG_groupDetailsFooter{background:var(--dsw-alias-bg-layer-1);min-height:40px;padding:0 12px;position:sticky;bottom:0}.EtEeYG_history{gap:6px;padding:8px}.EtEeYG_composer{gap:4px;padding:5px 8px 7px}.EtEeYG_composeInput{gap:3px;padding:5px 7px 4px}.EtEeYG_composeInput textarea{height:28px;min-height:28px}.EtEeYG_composeActions{min-height:28px}.EtEeYG_filePicker,.EtEeYG_send{width:28px;height:28px}.EtEeYG_mentionCandidates{max-height:72px}.EtEeYG_compactModal.EtEeYG_compactModal{border-radius:12px;gap:10px;max-height:calc(100vh - 48px);padding-bottom:12px}}@media (hover:none){.EtEeYG_conversationMenu{opacity:1}}@media (prefers-reduced-motion:reduce){.EtEeYG_drawer{scroll-behavior:auto;transition:none}.EtEeYG_summaryLoading>svg,.EtEeYG_summaryTrigger:disabled>svg:first-child,.EtEeYG_historyLoading>svg,.EtEeYG_recoveryProgressPanel>svg,.EtEeYG_groupMemberHeading button[data-busy] svg,.EtEeYG_pendingMessageSpinner{animation:none}}";
7480
- const tagId$3 = "@awiki/dsh-plugin/AwikiOverlay.module.css";
7481
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
7878
+ const css$4 = ".EtEeYG_trigger{z-index:2;border:1px solid var(--dsw-alias-border-l2);width:48px;height:48px;color:var(--dsw-alias-brand-primary);box-shadow:var(--dsw-shadow-lv2);cursor:grab;font:inherit;touch-action:none;user-select:none;background:#fff;border-radius:50%;place-items:center;padding:0;display:grid;position:fixed;overflow:visible}.EtEeYG_trigger:hover{box-shadow:var(--dsw-shadow-lv3);background:#fff}.EtEeYG_trigger:active,.EtEeYG_trigger[data-dragging]{cursor:grabbing}.EtEeYG_launcherIcon{object-fit:cover;pointer-events:none;border-radius:50%;width:100%;height:100%;display:block}.EtEeYG_unreadBadge{border:2px solid var(--dsw-alias-bg-base);background:var(--dsw-alias-state-error-primary);color:#fff;box-sizing:border-box;pointer-events:none;border-radius:10px;place-items:center;min-width:20px;height:20px;padding:0 5px;font-size:11px;font-weight:600;line-height:16px;display:grid;position:absolute;top:-5px;right:-5px}.EtEeYG_trigger:focus-visible,.EtEeYG_drawer button:focus-visible,.EtEeYG_drawer input:focus-visible,.EtEeYG_drawer textarea:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_drawer{--dsh-scrollbar-thumb:var(--dsw-alias-scrollbar-bg-l2);--dsh-scrollbar-thumb-hover:var(--dsw-alias-scrollbar-hover-l2);z-index:1;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:min(720px,100vw - 80px);min-width:min(360px,100vw - 80px);height:min(720px,100vh - 16px);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv3);border-radius:16px;flex-direction:column;transition:width .16s;display:flex;position:fixed;overflow:hidden}.EtEeYG_drawer[data-mode=mail]{width:min(1040px,100vw - 80px)}.EtEeYG_drawer[data-resizing]{user-select:none;transition:none}.EtEeYG_resizeHandle{z-index:5;touch-action:none;user-select:none;position:absolute}.EtEeYG_resizeHandle[data-resize-handle=n],.EtEeYG_resizeHandle[data-resize-handle=s]{cursor:ns-resize;height:8px;left:14px;right:14px}.EtEeYG_resizeHandle[data-resize-handle=n]{top:0}.EtEeYG_resizeHandle[data-resize-handle=s]{bottom:0}.EtEeYG_resizeHandle[data-resize-handle=e],.EtEeYG_resizeHandle[data-resize-handle=w]{cursor:ew-resize;width:8px;top:14px;bottom:14px}.EtEeYG_resizeHandle[data-resize-handle=e]{right:0}.EtEeYG_resizeHandle[data-resize-handle=w]{left:0}.EtEeYG_resizeHandle[data-resize-handle=ne],.EtEeYG_resizeHandle[data-resize-handle=se],.EtEeYG_resizeHandle[data-resize-handle=sw],.EtEeYG_resizeHandle[data-resize-handle=nw]{width:14px;height:14px}.EtEeYG_resizeHandle[data-resize-handle=ne]{cursor:nesw-resize;top:0;right:0}.EtEeYG_resizeHandle[data-resize-handle=se]{cursor:nwse-resize;bottom:0;right:0}.EtEeYG_resizeHandle[data-resize-handle=sw]{cursor:nesw-resize;bottom:0;left:0}.EtEeYG_resizeHandle[data-resize-handle=nw]{cursor:nwse-resize;top:0;left:0}.EtEeYG_drawerHeader{border-bottom:1px solid var(--dsw-alias-border-l1);cursor:grab;touch-action:none;user-select:none;flex:none;align-items:center;gap:8px;height:58px;padding:0 14px 0 18px;display:flex}.EtEeYG_drawerHeader[data-dragging]{cursor:grabbing}.EtEeYG_drawerHeader>div{flex:1;align-items:center;gap:8px;display:flex}.EtEeYG_drawerHeader h2{margin:0;font-size:16px;line-height:24px}.EtEeYG_drawerHeader button,.EtEeYG_back{cursor:pointer;width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:9px;place-items:center;padding:0;display:grid}.EtEeYG_drawerHeader button:hover,.EtEeYG_back:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_centerState,.EtEeYG_threadEmpty{text-align:center;color:var(--dsw-alias-label-secondary);flex-direction:column;flex:1;justify-content:center;align-items:center;gap:14px;padding:32px;display:flex}.EtEeYG_centerState p{overflow-wrap:anywhere;max-width:420px;margin:0}.EtEeYG_registrationIcon{background:var(--dsw-alias-interactive-bg-active);width:48px;height:48px;color:var(--dsw-alias-brand-primary);border-radius:50%;justify-self:center;place-items:center;display:grid}.EtEeYG_fileDraft input,.EtEeYG_composeRow textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px}.EtEeYG_primary,.EtEeYG_more,.EtEeYG_fileDraft button{background:var(--dsw-alias-button-primary-fill);min-height:36px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;font:inherit;border:0;border-radius:10px;padding:0 14px}.EtEeYG_primary:hover,.EtEeYG_fileDraft button:hover{background:var(--dsw-alias-button-primary-hover)}.EtEeYG_primary:disabled,.EtEeYG_fileDraft button:disabled{opacity:.5;cursor:default}.EtEeYG_secondary{border:1px solid var(--dsw-alias-border-l2);min-height:36px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:10px;padding:0 14px}.EtEeYG_secondary:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_composeBackdrop{background:color-mix(in srgb, var(--dsw-alias-bg-layer-1) 72%, transparent);place-items:center;padding:24px;display:grid;position:absolute;inset:58px 0 0;overflow:auto}.EtEeYG_composeCard{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:min(360px,100%);box-shadow:var(--dsw-shadow-lv3);border-radius:14px;gap:12px;padding:20px;display:grid}.EtEeYG_composeCard h3{margin:0;font-size:16px;line-height:24px}.EtEeYG_composeCard p{color:var(--dsw-alias-label-secondary);margin:0;font-size:13px;line-height:20px}.EtEeYG_composeCard label{color:var(--dsw-alias-label-secondary);gap:6px;font-size:13px;line-height:20px;display:grid}.EtEeYG_composeCard input,.EtEeYG_composeCard textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:10px;padding:9px 12px}.EtEeYG_composeCard input{height:40px;padding-block:0}.EtEeYG_composeCard textarea{resize:vertical;min-height:92px}.EtEeYG_composeActions{justify-content:flex-end;gap:8px;display:flex}.EtEeYG_logoutWarning{color:var(--dsw-alias-label-secondary);gap:8px;font-size:13px;line-height:20px;display:grid}.EtEeYG_logoutWarning p{margin:0}.EtEeYG_logoutConfirm{border-color:var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary)}.EtEeYG_compactModal.EtEeYG_compactModal{max-height:calc(100vh - 48px)}.EtEeYG_compactModalContent{min-height:0;overflow-y:auto}.EtEeYG_linkButton{color:var(--dsw-alias-brand-primary);cursor:pointer;background:0 0;border:0}.EtEeYG_notice{color:var(--dsw-alias-state-success-primary);text-align:center}.EtEeYG_identityAccess{flex:1;min-height:0;overflow:hidden}.EtEeYG_recoveryForm{width:100%;min-width:0;color:var(--dsw-alias-label-secondary);gap:14px;display:grid}.EtEeYG_recoveryForm h3{color:var(--dsw-alias-label-primary);text-align:center;margin:0}.EtEeYG_recoveryForm>p{text-align:center;margin:0;font-size:13px;line-height:20px}.EtEeYG_recoveryForm>label:not(.EtEeYG_recoveryConfirmation){gap:6px;font-size:13px;line-height:20px;display:grid}.EtEeYG_recoveryForm>label>input:not([type=checkbox]){box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;height:40px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:8px;padding:0 12px}.EtEeYG_recoveryForm input:focus-visible,.EtEeYG_recoveryForm button:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_recoveryStatusLine{border-bottom:1px solid var(--dsw-alias-border-l1);gap:3px;min-width:0;padding-bottom:10px;display:grid}.EtEeYG_recoveryStatusLine span{color:var(--dsw-alias-brand-primary);font-size:12px;font-weight:600}.EtEeYG_recoveryIdentitySummary{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;grid-template-columns:max-content minmax(0,1fr);gap:6px 14px;min-width:0;padding:12px;font-size:12px;line-height:18px;display:grid}.EtEeYG_recoveryIdentitySummary span{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryIdentitySummary strong{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-primary)}.EtEeYG_recoveryDiagnostics{border-top:1px solid var(--dsw-alias-border-l1);min-width:0;color:var(--dsw-alias-label-tertiary);padding-top:2px;font-size:11px;line-height:17px}.EtEeYG_recoveryDiagnostics summary{cursor:pointer;width:max-content;color:var(--dsw-alias-label-secondary);user-select:none}.EtEeYG_recoveryDiagnostics summary:hover{color:var(--dsw-alias-label-primary)}.EtEeYG_recoveryDiagnostics summary:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px;border-radius:4px}.EtEeYG_recoveryDiagnostics dl{gap:6px;margin:8px 0 0;display:grid}.EtEeYG_recoveryDiagnostics dl>div{gap:2px;min-width:0;display:grid}.EtEeYG_recoveryDiagnostics dt{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryDiagnostics dd{min-width:0;margin:0}.EtEeYG_recoveryDiagnostics code{overflow-wrap:anywhere;color:var(--dsw-alias-label-secondary);font-size:10px;line-height:16px;display:block}.EtEeYG_recoveryImpact{border-left:3px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);gap:6px;padding:12px;display:grid}.EtEeYG_recoveryImpact p{align-items:flex-start;gap:7px;margin:0;font-size:12px;line-height:18px;display:flex}.EtEeYG_recoveryImpact svg{flex:none;margin-top:2px}.EtEeYG_recoveryImpact p[data-tone=success] svg{color:var(--dsw-alias-state-success-primary)}.EtEeYG_recoveryImpact p[data-tone=neutral] svg{color:var(--dsw-alias-label-tertiary)}.EtEeYG_recoveryHandle{overflow-wrap:anywhere;color:var(--dsw-alias-label-primary);text-align:center;margin:-8px 0 0;font-size:13px;line-height:20px}.EtEeYG_recoveryConfirmationCopy{color:var(--dsw-alias-label-secondary);text-align:left;margin:0;font-size:12px;line-height:18px}.EtEeYG_recoveryProgressPanel{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);text-align:center;border-radius:8px;justify-items:center;gap:10px;min-width:0;padding:16px;display:grid}.EtEeYG_recoveryProgressPanel>svg{color:var(--dsw-alias-brand-primary);animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_recoveryProgressPanel p{margin:0;font-size:12px;line-height:18px}.EtEeYG_recoveryProgressPanel button{justify-content:center;align-items:center;gap:6px;width:100%;display:flex}.EtEeYG_chat{flex:1;grid-template-columns:240px minmax(0,1fr);min-height:0;display:grid}.EtEeYG_roster{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex-direction:column;min-width:0;display:flex}.EtEeYG_identityCard{background:var(--dsw-alias-bg-layer-3);border-radius:12px;flex-direction:column;gap:2px;margin:14px;padding:12px;display:flex}.EtEeYG_identityNameRow{align-items:center;min-width:0;min-height:24px;display:flex}.EtEeYG_profileAvatar{background:var(--dsw-alias-interactive-bg-active);width:24px;height:24px;color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;margin-right:7px;display:grid}.EtEeYG_identityNameText{min-width:0;color:var(--dsw-alias-label-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:14px;line-height:22px;overflow:hidden}.EtEeYG_identityName{min-width:0;color:var(--dsw-alias-label-primary);font:inherit;text-align:left;text-overflow:ellipsis;white-space:nowrap;cursor:text;background:0 0;border:0;flex:1;padding:0;font-size:16px;font-weight:600;line-height:24px;overflow:hidden}.EtEeYG_identityName:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px;border-radius:4px}.EtEeYG_identityEdit{width:24px;height:24px;color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:.72;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;margin-left:4px;padding:0;transition:opacity .12s;display:grid}.EtEeYG_identityNameRow:hover .EtEeYG_identityEdit,.EtEeYG_identityNameRow:focus-within .EtEeYG_identityEdit{opacity:1}.EtEeYG_identityEdit:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_identityEditor{flex:1;align-items:center;gap:4px;min-width:0;display:flex}.EtEeYG_identityEditor input{border:1px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-1);min-width:0;height:28px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;outline:none;flex:1;padding:0 8px;font-size:13px}.EtEeYG_identityEditor button{width:26px;height:26px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_identityEditor button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_identityEditor button:disabled,.EtEeYG_identityName:disabled{cursor:default;opacity:.5}.EtEeYG_identityEdit:disabled{cursor:default}.EtEeYG_identityHandle{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.EtEeYG_identityStatus{color:var(--dsw-alias-state-success-primary);margin-top:4px;font-size:12px;line-height:18px}.EtEeYG_identityError{color:var(--dsw-alias-state-error-primary);margin-top:4px;font-size:11px;line-height:16px}.EtEeYG_identityCard i{background:var(--dsw-alias-state-success-primary);border-radius:50%;width:6px;height:6px;margin-right:5px;display:inline-block}.EtEeYG_profileBio{color:var(--dsw-alias-label-secondary);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:6px 0 2px;font-size:11px;line-height:17px;display:-webkit-box;overflow:hidden}.EtEeYG_profileTags{flex-wrap:wrap;gap:4px;margin-top:5px;display:flex}.EtEeYG_profileTags>span{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);min-width:0;max-width:100%;min-height:20px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;border-radius:7px;align-items:center;gap:3px;padding:0 6px;font-size:10px;line-height:16px;display:inline-flex}.EtEeYG_profileTags>span>button{width:16px;height:16px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:4px;place-items:center;padding:0;display:grid}.EtEeYG_profileTags>span>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_profileEditor{gap:10px;display:grid}.EtEeYG_profileEditor label{color:var(--dsw-alias-label-secondary);gap:4px;font-size:11px;line-height:16px;display:grid;position:relative}.EtEeYG_profileEditor label>small{color:var(--dsw-alias-label-tertiary);font-size:10px;position:absolute;top:0;right:1px}.EtEeYG_profileEditor input,.EtEeYG_profileEditor textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:100%;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;padding:7px 8px;font-size:12px}.EtEeYG_profileEditor input{height:32px;padding-block:0}.EtEeYG_profileEditor textarea{resize:vertical}.EtEeYG_profileTagEditor{gap:4px;display:grid}.EtEeYG_profileTagEditor>div:first-of-type{grid-template-columns:minmax(0,1fr) 30px;gap:5px;display:grid}.EtEeYG_profileTagEditor>div:first-of-type button{border:1px solid var(--dsw-alias-border-l2);width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:7px;place-items:center;padding:0;display:grid}.EtEeYG_profileEditorActions{grid-template-columns:1fr 1fr;gap:6px;margin-top:2px;display:grid}.EtEeYG_profileEditorActions button{min-width:0;padding-inline:6px;font-size:12px}.EtEeYG_modePanel{flex:1;min-height:0;display:none}.EtEeYG_modePanel[data-active]{display:flex}.EtEeYG_modeTabs{background:var(--dsw-alias-bg-layer-3);border-radius:9px;grid-template-columns:1fr 1fr;gap:4px;margin:0 14px 12px;padding:3px;display:grid}.EtEeYG_modeTabs button{min-height:30px;color:var(--dsw-alias-label-tertiary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:7px;justify-content:center;align-items:center;gap:5px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.EtEeYG_modeTabs button:hover{color:var(--dsw-alias-label-primary)}.EtEeYG_modeTabs button[aria-selected=true]{background:var(--dsw-alias-bg-layer-1);color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv1)}.EtEeYG_modeTabs small{min-width:18px;color:var(--dsw-alias-brand-primary);font-size:10px;line-height:14px}.EtEeYG_rosterHeader{justify-content:space-between;align-items:center;min-height:32px;padding:0 8px 8px 16px;display:flex}.EtEeYG_rosterTitle{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px}.EtEeYG_rosterActions{align-items:center;gap:2px;display:flex}.EtEeYG_rosterAction{width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:9px;place-items:center;padding:0;display:grid}.EtEeYG_rosterAction:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_rosterActions .EtEeYG_rosterAction{position:relative}.EtEeYG_rosterActions .EtEeYG_rosterAction small{background:var(--dsw-alias-bg-layer-3);min-width:14px;height:14px;color:var(--dsw-alias-label-secondary);box-sizing:border-box;border-radius:7px;place-items:center;padding:0 3px;font-size:9px;line-height:12px;display:grid;position:absolute;top:1px;right:0}.EtEeYG_conversationList{flex:1;min-height:0;padding:0 8px;overflow:auto}.EtEeYG_conversationRow{width:100%;color:inherit;background:0 0;border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;display:grid}.EtEeYG_conversationRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_conversationRow[data-active]{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_conversationSelect{width:100%;min-width:0;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;align-items:center;gap:10px;padding:9px;display:flex}.EtEeYG_conversationMenu{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:7px;place-items:center;margin-right:5px;padding:0;display:grid}.EtEeYG_conversationRow:hover .EtEeYG_conversationMenu,.EtEeYG_conversationRow:focus-within .EtEeYG_conversationMenu,.EtEeYG_conversationMenu[aria-expanded=true]{opacity:1}.EtEeYG_conversationMenu:hover{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.EtEeYG_conversationMenu:disabled{cursor:default;opacity:.45}.EtEeYG_avatar{background:var(--dsw-alias-interactive-bg-active);width:34px;height:34px;color:var(--dsw-alias-brand-primary);border-radius:50%;flex:none;place-items:center;font-size:12px;line-height:18px;display:grid;position:relative;overflow:visible}.EtEeYG_conversationUnreadBadge{border:2px solid var(--dsw-alias-bg-layer-2);background:var(--dsw-alias-state-error-primary);min-width:18px;height:18px;color:var(--dsw-alias-label-primary-inverted);box-sizing:border-box;pointer-events:none;border-radius:9px;place-items:center;padding:0 4px;font-size:10px;font-weight:600;line-height:14px;display:grid;position:absolute;top:-6px;right:-7px}.EtEeYG_conversationText{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.EtEeYG_conversationHeader{align-items:center;gap:8px;min-width:0;display:flex}.EtEeYG_conversationHeader strong{flex:1;min-width:0}.EtEeYG_conversationTime{color:var(--dsw-alias-label-tertiary);flex:none;font-size:11px;font-weight:400;line-height:16px}.EtEeYG_conversationText strong,.EtEeYG_conversationText small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_conversationText strong{font-size:13px;line-height:20px}.EtEeYG_conversationText small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.EtEeYG_more{background:var(--dsw-alias-button-elevated-fill);color:var(--dsw-alias-label-secondary);margin:8px}.EtEeYG_more:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_hiddenConversationList{max-height:min(320px,48vh);display:grid;overflow:auto}.EtEeYG_hiddenConversationRow{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:9px;min-height:50px;padding:6px 2px;display:grid}.EtEeYG_hiddenConversationRow:last-child{border-bottom:0}.EtEeYG_hiddenConversationRow .EtEeYG_avatar{width:30px;height:30px}.EtEeYG_hiddenConversationRow>span:nth-child(2){min-width:0;display:grid}.EtEeYG_hiddenConversationRow strong,.EtEeYG_hiddenConversationRow small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_hiddenConversationRow strong{font-size:12px;line-height:18px}.EtEeYG_hiddenConversationRow small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.EtEeYG_hiddenConversationRow>button{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:7px;padding:0 9px;font-size:11px}.EtEeYG_hiddenConversationRow>button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_hiddenConversationRow>button:disabled{cursor:default;opacity:.55}.EtEeYG_conversationPreferenceError{color:var(--dsw-alias-state-error-primary);font-size:11px;line-height:17px}.EtEeYG_thread{flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.EtEeYG_threadHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:8px;height:56px;padding:0 14px;display:flex}.EtEeYG_threadTitle{flex-direction:column;flex:1;min-width:0;display:flex}.EtEeYG_threadTitle strong,.EtEeYG_threadTitle small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_threadHeader small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_threadAction{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_threadAction:hover,.EtEeYG_threadAction[aria-expanded=true]{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_groupAccessNotice{border-bottom:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex:none;grid-template-columns:20px minmax(0,1fr) auto;align-items:start;gap:8px 10px;padding:11px 14px;display:grid}.EtEeYG_groupAccessNotice[data-status=blocked],.EtEeYG_groupAccessNotice[data-status=not-member]{background:var(--dsw-alias-interactive-bg-hover-danger)}.EtEeYG_groupAccessNotice[data-compact]{grid-template-columns:20px minmax(0,1fr);padding:12px 16px}.EtEeYG_groupAccessIcon{min-height:20px;color:var(--dsw-alias-label-secondary);place-items:center;display:grid}.EtEeYG_groupAccessNotice[data-status=loading] .EtEeYG_groupAccessIcon svg,.EtEeYG_groupAccessNotice[data-status=recovering] .EtEeYG_groupAccessIcon svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupAccessCopy{gap:2px;min-width:0;display:grid}.EtEeYG_groupAccessCopy strong{font-size:12px;line-height:18px}.EtEeYG_groupAccessCopy small{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;font-size:11px;line-height:17px}.EtEeYG_groupAccessActions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}.EtEeYG_groupAccessNotice[data-compact] .EtEeYG_groupAccessActions{grid-column:2;justify-content:flex-start}.EtEeYG_groupAccessActions button{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;border-radius:7px;justify-content:center;align-items:center;gap:5px;padding:0 8px;font-size:11px;line-height:16px;display:flex}.EtEeYG_groupAccessActions button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_groupAccessActions button:disabled{cursor:default;opacity:.55}.EtEeYG_groupDetails{z-index:4;border-left:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);width:min(360px,100%);min-width:0;box-shadow:var(--dsw-shadow-lv2);flex-direction:column;display:flex;position:absolute;top:56px;bottom:0;right:0;overflow:hidden}.EtEeYG_groupDetailsHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:12px;min-height:54px;padding:0 12px 0 16px;display:flex}.EtEeYG_groupDetailsHeader>div{flex-direction:column;flex:1;min-width:0;display:flex}.EtEeYG_groupDetailsHeader strong{font-size:14px;line-height:21px}.EtEeYG_groupDetailsHeader small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:15px;overflow:hidden}.EtEeYG_groupDetailsHeader button,.EtEeYG_groupMemberHeading button,.EtEeYG_groupMemberRemove{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_groupDetailsHeader button:hover,.EtEeYG_groupMemberHeading button:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_groupDetailsLoading{color:var(--dsw-alias-label-tertiary);margin:auto;font-size:12px}.EtEeYG_groupSummary{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:5px;padding:16px;display:grid}.EtEeYG_groupSummary>strong{font-size:15px;line-height:22px}.EtEeYG_groupSummary>code{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.EtEeYG_groupSummary>p{color:var(--dsw-alias-label-secondary);margin:3px 0 0;font-size:12px;line-height:18px}.EtEeYG_groupSummary dl{grid-template-columns:1fr 1fr;gap:8px;margin:8px 0 0;display:grid}.EtEeYG_groupSummary dl>div{gap:1px;display:grid}.EtEeYG_groupSummary dt{color:var(--dsw-alias-label-tertiary);font-size:10px}.EtEeYG_groupSummary dd{color:var(--dsw-alias-label-primary);margin:0;font-size:12px}.EtEeYG_groupInvite{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;gap:5px;padding:12px 16px;display:grid}.EtEeYG_groupInvite label{color:var(--dsw-alias-label-secondary);font-size:11px}.EtEeYG_groupInvite>div{grid-template-columns:minmax(0,1fr) 32px;gap:6px;display:grid}.EtEeYG_groupInvite input{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-width:0;height:32px;color:var(--dsw-alias-label-primary);font:inherit;border-radius:7px;padding:0 9px;font-size:12px}.EtEeYG_groupInvite button{background:var(--dsw-alias-button-primary-fill);width:32px;height:32px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.EtEeYG_groupInvite button:disabled{cursor:default;opacity:.7}.EtEeYG_groupInvite button[data-busy] svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupInviteStatus{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-tertiary);margin:0;font-size:10px;line-height:16px}.EtEeYG_groupInviteStatus[data-state=success]{color:var(--dsw-alias-state-success-primary)}.EtEeYG_groupInviteStatus[data-state=error]{color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupMemberSection{flex-direction:column;flex:1;min-height:0;display:flex}.EtEeYG_groupMemberHeading{flex:none;justify-content:space-between;align-items:center;min-height:40px;padding:0 12px 0 16px;display:flex}.EtEeYG_groupMemberHeading strong{font-size:12px;line-height:18px}.EtEeYG_groupMemberHeading button[data-busy] svg{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_groupMemberRefreshStatus{overflow-wrap:anywhere;min-height:22px;color:var(--dsw-alias-label-tertiary);flex:none;margin:0;padding:2px 16px 4px;font-size:10px;line-height:16px}.EtEeYG_groupMemberRefreshStatus[data-state=success]{color:var(--dsw-alias-state-success-primary)}.EtEeYG_groupMemberRefreshStatus[data-state=error]{color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupMemberList{min-height:0;padding:0 8px;overflow:auto}.EtEeYG_groupMemberRow{border-bottom:1px solid var(--dsw-alias-border-l1);grid-template-columns:30px minmax(0,1fr) auto 28px;align-items:center;gap:8px;min-height:48px;padding:4px 6px;display:grid}.EtEeYG_groupMemberAvatar{background:var(--dsw-alias-interactive-bg-active);width:30px;height:30px;color:var(--dsw-alias-brand-primary);border-radius:50%;place-items:center;font-size:11px;display:grid}.EtEeYG_groupMemberIdentity{flex-direction:column;min-width:0;display:flex}.EtEeYG_groupMemberIdentity strong{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:5px;font-size:12px;line-height:18px;display:flex;overflow:hidden}.EtEeYG_groupMemberIdentity strong small{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-brand-primary);border-radius:4px;padding:0 4px;font-size:9px}.EtEeYG_groupMemberIdentity>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:10px;line-height:15px;overflow:hidden}.EtEeYG_groupMemberRole{color:var(--dsw-alias-label-tertiary);white-space:nowrap;font-size:10px}.EtEeYG_groupMemberRemove:hover{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary)}.EtEeYG_groupDetailsFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:space-between;align-items:center;gap:8px;min-height:46px;padding:0 16px;display:flex}.EtEeYG_groupDetailsFooter small{color:var(--dsw-alias-label-tertiary);font-size:10px}.EtEeYG_dangerText{color:var(--dsw-alias-state-error-primary);cursor:pointer;font:inherit;background:0 0;border:0;padding:0;font-size:12px}.EtEeYG_dangerText:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.EtEeYG_groupDetailsError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);flex:none;padding:8px 12px;font-size:11px;line-height:17px}.EtEeYG_summaryTrigger{min-height:30px;color:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:8px;flex:none;align-items:center;gap:5px;padding:0 8px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summaryTrigger:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryTrigger:disabled{cursor:default;opacity:.7}.EtEeYG_summaryTrigger[aria-expanded=true]>svg:last-child{transform:rotate(180deg)}.EtEeYG_summaryTrigger>svg:first-child{flex:none}.EtEeYG_summaryPanel{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);min-height:0;max-height:min(220px,33%);color:var(--dsw-alias-label-primary);border-radius:10px;flex:0 33%;margin:8px 10px 0;overflow:hidden}.EtEeYG_summaryPanel[data-collapsed]{flex-basis:auto;max-height:42px}.EtEeYG_summaryHeader{border-bottom:1px solid var(--dsw-alias-border-l1);align-items:center;gap:9px;min-height:38px;padding:0 8px 0 12px;display:flex}.EtEeYG_summaryHeader>span{color:var(--dsw-alias-brand-primary);align-items:center;gap:6px;display:flex}.EtEeYG_summaryHeader>span strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.EtEeYG_summaryHeader>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:11px;line-height:16px;overflow:hidden}.EtEeYG_summaryHeader>button{width:28px;height:28px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:7px;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_summaryHeader>button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryCollapsed{width:100%;min-height:40px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:0 10px 0 12px;display:grid}.EtEeYG_summaryCollapsed:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryCollapsed>span{color:var(--dsw-alias-brand-primary);align-items:center;gap:6px;font-size:12px;font-weight:600;display:flex}.EtEeYG_summaryCollapsed>small{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_summaryCollapsed>em{color:var(--dsw-alias-state-warn-label);white-space:nowrap;font-size:11px;font-style:normal}.EtEeYG_summaryLoading{min-height:88px;color:var(--dsw-alias-brand-primary);justify-content:center;align-items:center;gap:10px;padding:16px;display:flex}.EtEeYG_summaryLoading>svg,.EtEeYG_summaryTrigger:disabled>svg:first-child{animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_summaryLoading>span{flex-direction:column;gap:2px;display:flex}.EtEeYG_summaryLoading strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.EtEeYG_summaryLoading small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.EtEeYG_summaryError{min-height:58px;color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:12px;padding:12px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summaryError>span{overflow-wrap:anywhere;min-width:0}.EtEeYG_summaryError button,.EtEeYG_summaryStale button{border:1px solid var(--dsw-alias-border-l2);min-height:28px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:7px;flex:none;align-items:center;gap:5px;padding:0 8px;font-size:11px;display:flex}.EtEeYG_summaryError button:hover,.EtEeYG_summaryStale button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryStale{background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-state-warn-label);justify-content:space-between;align-items:center;gap:10px;padding:6px 10px;font-size:11px;line-height:16px;display:flex}.EtEeYG_summaryBody{gap:10px;max-height:118px;padding:10px 12px;display:grid;overflow:auto}.EtEeYG_summarySection h4{color:var(--dsw-alias-label-primary);align-items:center;gap:6px;margin:0 0 4px;font-size:12px;line-height:18px;display:flex}.EtEeYG_summarySection h4>svg{color:var(--dsw-alias-label-secondary);flex:none}.EtEeYG_summarySection ul{color:var(--dsw-alias-label-secondary);gap:2px;margin:0;padding-left:18px;font-size:11px;line-height:17px;display:grid}.EtEeYG_summarySection li{overflow-wrap:anywhere;padding-left:1px}.EtEeYG_summarySection p{color:var(--dsw-alias-label-tertiary);margin:0;font-size:11px;line-height:17px}.EtEeYG_summarySection b{color:var(--dsw-alias-label-primary);font-weight:500}.EtEeYG_summaryActions{border-top:1px solid var(--dsw-alias-border-l1);grid-template-columns:auto 1fr auto auto;align-items:center;gap:4px;min-height:34px;padding:0 8px;display:grid}.EtEeYG_summaryActions button{min-height:26px;color:var(--dsw-alias-brand-primary);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;align-items:center;gap:5px;padding:0 6px;font-size:11px;line-height:16px;display:flex}.EtEeYG_summaryActions button:hover{background:var(--dsw-alias-interactive-bg-hover)}.EtEeYG_summaryPrivacy{border-top:1px solid var(--dsw-alias-border-l1);min-height:28px;color:var(--dsw-alias-label-tertiary);align-items:center;gap:6px;padding:0 10px;font-size:10px;line-height:15px;display:flex}.EtEeYG_summaryPrivacy svg{flex:none}.EtEeYG_summaryCopyError{color:var(--dsw-alias-state-error-primary);padding:4px 10px;font-size:10px;line-height:15px}@keyframes EtEeYG_summary-spin{to{transform:rotate(360deg)}}.EtEeYG_back{display:none}.EtEeYG_historyShell{flex:1;min-height:0;position:relative}.EtEeYG_history{box-sizing:border-box;flex-direction:column;gap:12px;height:100%;min-height:0;padding:16px;display:flex;overflow:auto}.EtEeYG_historyLoading{color:var(--dsw-alias-label-tertiary);align-items:center;gap:8px;margin:auto;font-size:12px;line-height:18px;display:flex}.EtEeYG_historyLoading>svg{color:var(--dsw-alias-brand-primary);animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_latestMessages{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-floating-fill);min-width:30px;min-height:30px;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv2);cursor:pointer;font:inherit;border-radius:16px;justify-content:center;align-items:center;gap:5px;padding:0 9px;font-size:11px;line-height:16px;display:flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.EtEeYG_latestMessages:hover{background:var(--dsw-alias-button-floating-hover)}.EtEeYG_message{align-self:flex-start;max-width:min(78%,420px)}.EtEeYG_message[data-outgoing]{align-self:flex-end}.EtEeYG_messageMeta{color:var(--dsw-alias-label-tertiary);justify-content:space-between;gap:10px;margin-bottom:3px;font-size:11px;line-height:16px;display:flex}.EtEeYG_message p,.EtEeYG_attachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;border-radius:12px;margin:0;padding:9px 11px;line-height:20px}.EtEeYG_message[data-outgoing] p,.EtEeYG_message[data-outgoing] .EtEeYG_attachment{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_mention{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-brand-primary);border-radius:3px;padding:0 2px;font-weight:600}.EtEeYG_pendingMessage{grid-template-columns:auto minmax(0,1fr);align-self:flex-end;align-items:end;gap:7px;max-width:min(78%,420px);display:grid}.EtEeYG_pendingMessageSpinner{color:var(--dsw-alias-label-tertiary);margin-bottom:12px;animation:1s linear infinite EtEeYG_summary-spin}.EtEeYG_pendingMessageContent{opacity:.82;min-width:0}.EtEeYG_pendingMessageContent>p,.EtEeYG_pendingAttachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary);overflow-wrap:anywhere;border-radius:12px;margin:0;padding:9px 11px;line-height:20px}.EtEeYG_pendingAttachment{align-items:center;gap:9px;display:flex}.EtEeYG_pendingAttachment>svg{color:var(--dsw-alias-label-secondary);flex:none}.EtEeYG_pendingAttachment span{flex-direction:column;min-width:0;display:flex}.EtEeYG_pendingAttachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_pendingAttachment small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_pendingMessageContent>.EtEeYG_pendingCaption{color:var(--dsw-alias-label-secondary);background:0 0;border:0;margin-top:4px;padding:4px 8px;font-size:12px}.EtEeYG_attachment{cursor:pointer;font:inherit;text-align:left;align-items:center;gap:12px;display:flex}.EtEeYG_attachment span{flex-direction:column;min-width:0;display:flex}.EtEeYG_attachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_attachment small{color:var(--dsw-alias-label-tertiary)}.EtEeYG_attachment:disabled{cursor:default}.EtEeYG_imageAttachment{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);width:280px;max-width:100%;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;text-align:left;border-radius:12px;margin:0;padding:0;display:block;overflow:hidden}.EtEeYG_imageAttachment img{background:var(--dsw-alias-bg-layer-1);object-fit:contain;width:100%;max-height:280px;display:block}.EtEeYG_imageAttachment span{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 10px;padding:7px 9px;display:grid}.EtEeYG_imageAttachment strong{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.EtEeYG_imageAttachment small{color:var(--dsw-alias-label-tertiary);grid-column:1}.EtEeYG_imageAttachment svg{grid-area:1/2/span 2}.EtEeYG_message .EtEeYG_caption{color:var(--dsw-alias-label-secondary);background:0 0;margin-top:4px;padding:4px 8px;font-size:12px}.EtEeYG_inlineError{color:var(--dsw-alias-state-error-primary);margin-top:4px;display:block}.EtEeYG_empty{color:var(--dsw-alias-label-tertiary);text-align:center;margin:auto;padding:20px}.EtEeYG_composer{border-top:1px solid var(--dsw-alias-border-l1);flex:none;gap:8px;padding:10px 14px 14px;display:grid}.EtEeYG_filePicker{border:1px solid var(--dsw-alias-border-l2);width:32px;height:32px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border-radius:50%;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_filePicker:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.EtEeYG_filePicker:disabled{opacity:.45;cursor:default}.EtEeYG_fileInput{display:none}.EtEeYG_composeInput{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);border-radius:10px;gap:6px;min-width:0;padding:9px 10px 8px;display:grid;position:relative}.EtEeYG_mentionCandidates{z-index:3;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);max-height:180px;box-shadow:var(--dsw-shadow-lv2);border-radius:8px;padding:5px;position:absolute;bottom:calc(100% + 7px);left:0;right:0;overflow:auto}.EtEeYG_mentionCandidates button{width:100%;min-height:42px;color:var(--dsw-alias-label-primary);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:6px;grid-template-rows:auto auto;grid-template-columns:28px minmax(0,1fr);align-items:center;column-gap:8px;padding:4px 7px;display:grid}.EtEeYG_mentionCandidates button:hover,.EtEeYG_mentionCandidates button[aria-selected=true]{background:var(--dsw-alias-interactive-bg-active)}.EtEeYG_mentionCandidates button>span{background:var(--dsw-alias-bg-layer-3);width:28px;height:28px;color:var(--dsw-alias-brand-primary);border-radius:50%;grid-row:1/span 2;place-items:center;font-size:10px;display:grid}.EtEeYG_mentionCandidates strong,.EtEeYG_mentionCandidates small{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.EtEeYG_mentionCandidates strong{align-self:end;font-size:12px;line-height:16px}.EtEeYG_mentionCandidates small{color:var(--dsw-alias-label-tertiary);align-self:start;font-size:10px;line-height:14px}.EtEeYG_composeInput:focus-within{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.EtEeYG_composeInput textarea{resize:none;background:0 0;border:0;border-radius:0;outline:0;min-width:0;min-height:42px;padding:0}.EtEeYG_composeInput textarea:focus-visible{outline:0}.EtEeYG_composeActions{justify-content:space-between;align-items:center;min-height:32px;display:flex}.EtEeYG_filePreview{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:10px;align-items:center;gap:8px;width:min(240px,100% - 8px);min-height:36px;padding:5px 28px 5px 8px;display:flex;position:relative}.EtEeYG_filePreview[data-image]{width:72px;height:72px;min-height:0;padding:0}.EtEeYG_filePreview img{object-fit:cover;border-radius:9px;width:72px;height:72px;display:block}.EtEeYG_filePreviewIcon{color:var(--dsw-alias-label-secondary);flex:none;place-items:center;display:grid}.EtEeYG_filePreviewName{min-width:0;color:var(--dsw-alias-label-secondary);text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.EtEeYG_removeFile{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-button-floating-fill);width:22px;height:22px;color:var(--dsw-alias-label-primary);box-shadow:var(--dsw-shadow-lv1);cursor:pointer;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:-7px;right:-7px}.EtEeYG_removeFile:hover{background:var(--dsw-alias-button-floating-hover)}.EtEeYG_send{background:var(--dsw-alias-button-primary-fill);width:32px;height:32px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:50%;flex:none;place-items:center;padding:0;display:grid}.EtEeYG_send:disabled{opacity:.45;cursor:default}.EtEeYG_error{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere;flex:none;padding:8px 14px;font-size:12px;line-height:18px}.EtEeYG_pending{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-inverted);box-shadow:var(--dsw-shadow-lv2);border-radius:9px;padding:7px 10px;font-size:12px;line-height:18px;position:absolute;bottom:14px;right:14px}@media (width<=620px){.EtEeYG_trigger span{display:none}.EtEeYG_trigger{justify-content:center;width:36px;padding:0}.EtEeYG_drawer{width:calc(100vw - 56px);min-width:0}.EtEeYG_chat{grid-template-columns:1fr}.EtEeYG_thread{display:none}.EtEeYG_thread[data-visible]{display:flex}.EtEeYG_roster[data-hidden]{display:none}.EtEeYG_back{display:grid}.EtEeYG_summaryPanel{max-height:min(190px,33%);margin-left:8px;margin-right:8px}.EtEeYG_summaryTrigger>span{display:none}.EtEeYG_summaryTrigger{justify-content:center;width:30px;padding:0}.EtEeYG_summaryTrigger>svg:last-child{display:none}}@media (height<=420px){.EtEeYG_drawer{border-radius:10px}.EtEeYG_drawerHeader{height:44px;padding:0 8px 0 12px}.EtEeYG_drawerHeader h2{font-size:14px;line-height:20px}.EtEeYG_drawerHeader button,.EtEeYG_back{width:28px;height:28px}.EtEeYG_centerState,.EtEeYG_threadEmpty{justify-content:flex-start;gap:8px;min-height:0;padding:12px;overflow:auto}.EtEeYG_registrationIcon{width:32px;height:32px}.EtEeYG_composeBackdrop{place-items:start center;padding:8px;inset:44px 0 0}.EtEeYG_composeCard{border-radius:10px;gap:8px;padding:12px}.EtEeYG_recoveryForm{gap:8px}.EtEeYG_identityCard{border-radius:8px;margin:6px 8px;padding:7px 9px}.EtEeYG_profileBio,.EtEeYG_profileTags,.EtEeYG_identityStatus{display:none}.EtEeYG_modeTabs{margin:0 8px 4px}.EtEeYG_modeTabs button{min-height:26px}.EtEeYG_rosterHeader{min-height:28px;padding:0 4px 2px 12px}.EtEeYG_conversationSelect{gap:7px;padding:5px 7px}.EtEeYG_avatar{width:28px;height:28px}.EtEeYG_threadHeader{gap:5px;height:44px;padding:0 8px}.EtEeYG_groupAccessNotice{grid-template-columns:18px minmax(0,1fr);gap:6px 8px;padding:8px}.EtEeYG_groupAccessActions{grid-column:2;justify-content:flex-start}.EtEeYG_groupDetails{top:44px;overflow-y:auto}.EtEeYG_groupDetailsHeader{z-index:2;background:var(--dsw-alias-bg-layer-1);min-height:44px;padding-left:12px;position:sticky;top:0}.EtEeYG_groupSummary{gap:2px;padding:8px 12px}.EtEeYG_groupSummary dl{gap:6px;margin-top:3px}.EtEeYG_groupInvite{gap:3px;padding:7px 12px}.EtEeYG_groupMemberSection{flex:none}.EtEeYG_groupMemberHeading{min-height:32px;padding-left:12px}.EtEeYG_groupMemberList{overflow:visible}.EtEeYG_groupMemberRow{min-height:40px}.EtEeYG_groupDetailsFooter{background:var(--dsw-alias-bg-layer-1);min-height:40px;padding:0 12px;position:sticky;bottom:0}.EtEeYG_history{gap:6px;padding:8px}.EtEeYG_composer{gap:4px;padding:5px 8px 7px}.EtEeYG_composeInput{gap:3px;padding:5px 7px 4px}.EtEeYG_composeInput textarea{height:28px;min-height:28px}.EtEeYG_composeActions{min-height:28px}.EtEeYG_filePicker,.EtEeYG_send{width:28px;height:28px}.EtEeYG_mentionCandidates{max-height:72px}.EtEeYG_compactModal.EtEeYG_compactModal{border-radius:12px;gap:10px;max-height:calc(100vh - 48px);padding-bottom:12px}}@media (hover:none){.EtEeYG_conversationMenu{opacity:1}}@media (prefers-reduced-motion:reduce){.EtEeYG_drawer{scroll-behavior:auto;transition:none}.EtEeYG_summaryLoading>svg,.EtEeYG_summaryTrigger:disabled>svg:first-child,.EtEeYG_historyLoading>svg,.EtEeYG_recoveryProgressPanel>svg,.EtEeYG_groupMemberHeading button[data-busy] svg,.EtEeYG_pendingMessageSpinner{animation:none}}";
7879
+ const tagId$4 = "@awiki/dsh-plugin/AwikiOverlay.module.css";
7880
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
7482
7881
  const tag = document.createElement("style");
7483
7882
  tag.dataset.plugin = "@awiki/dsh-plugin";
7484
- tag.dataset.pluginCss = tagId$3;
7485
- tag.textContent = css$3;
7883
+ tag.dataset.pluginCss = tagId$4;
7884
+ tag.textContent = css$4;
7486
7885
  document.head.appendChild(tag);
7487
7886
  }
7488
7887
  var _dsh_awiki_css_AwikiOverlay_module_css_default = {
@@ -7540,7 +7939,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7540
7939
  "groupMemberRole": "EtEeYG_groupMemberRole",
7541
7940
  "groupMemberRow": "EtEeYG_groupMemberRow",
7542
7941
  "groupMemberSection": "EtEeYG_groupMemberSection",
7543
- "groupRecoveryNotice": "EtEeYG_groupRecoveryNotice",
7544
7942
  "groupSummary": "EtEeYG_groupSummary",
7545
7943
  "hiddenConversationList": "EtEeYG_hiddenConversationList",
7546
7944
  "hiddenConversationRow": "EtEeYG_hiddenConversationRow",
@@ -7889,36 +8287,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7889
8287
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.recoveryHandle,
7890
8288
  children: progress.fullHandle
7891
8289
  }),
7892
- (0, react_jsx_runtime.jsxs)("div", {
8290
+ (0, react_jsx_runtime.jsx)("div", {
7893
8291
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.recoveryImpact,
7894
- children: [
7895
- (0, react_jsx_runtime.jsxs)("p", {
7896
- "data-tone": progress.localOrdinaryDataWillMigrate ? "success" : "neutral",
7897
- children: [
7898
- progress.localOrdinaryDataWillMigrate ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 14 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
7899
- "普通本地会话数据",
7900
- progress.localOrdinaryDataWillMigrate ? "将迁移到恢复后的身份" : "不会迁移"
7901
- ]
7902
- }),
7903
- progress.unsupportedE2eeGroupCount > 0 && (0, react_jsx_runtime.jsxs)("p", {
7904
- "data-tone": "neutral",
7905
- children: [
7906
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
7907
- "有 ",
7908
- progress.unsupportedE2eeGroupCount,
7909
- " 个加密群聊无法自动迁移。"
7910
- ]
7911
- }),
7912
- progress.unsupportedDidOnlyGroupCount > 0 && (0, react_jsx_runtime.jsxs)("p", {
7913
- "data-tone": "neutral",
7914
- children: [
7915
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
7916
- "有 ",
7917
- progress.unsupportedDidOnlyGroupCount,
7918
- " 个仅 DID 群聊需要手动处理。"
7919
- ]
7920
- })
7921
- ]
8292
+ children: (0, react_jsx_runtime.jsxs)("p", {
8293
+ "data-tone": progress.localOrdinaryDataWillMigrate ? "success" : "neutral",
8294
+ children: [
8295
+ progress.localOrdinaryDataWillMigrate ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCheckOutline16, { size: 14 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconWarningOutline16, { size: 14 }),
8296
+ "普通本地会话数据",
8297
+ progress.localOrdinaryDataWillMigrate ? "将迁移到恢复后的身份" : "不会迁移"
8298
+ ]
8299
+ })
7922
8300
  }),
7923
8301
  preCommit ? (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("p", {
7924
8302
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.recoveryConfirmationCopy,
@@ -7963,13 +8341,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7963
8341
  }
7964
8342
  //#endregion
7965
8343
  //#region \0dsh-awiki-css:AwikiIdentityAccess.module.css.mjs
7966
- const css$2 = ".r_slHG_accessFlow{width:100%;min-width:0;color:var(--dsw-alias-label-secondary);gap:14px;display:grid}.r_slHG_identityIcon,.r_slHG_progressIcon{width:48px;height:48px;color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-active);border-radius:50%;place-items:center;margin:0 auto;display:grid}.r_slHG_progressIcon svg{animation:1s linear infinite r_slHG_identity-spin}@keyframes r_slHG_identity-spin{to{transform:rotate(360deg)}}.r_slHG_headingGroup{text-align:center;gap:6px;display:grid}.r_slHG_headingGroup h3,.r_slHG_headingGroup p,.r_slHG_existingNotice p,.r_slHG_dangerPanel p{margin:0}.r_slHG_headingGroup h3{color:var(--dsw-alias-label-primary);font-size:18px;line-height:26px}.r_slHG_headingGroup p,.r_slHG_existingNotice p,.r_slHG_dangerPanel p{font-size:13px;line-height:20px}.r_slHG_headingGroup strong{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.r_slHG_identitySummary{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;grid-template-columns:max-content minmax(0,1fr);gap:6px 14px;padding:12px 14px;font-size:12px;line-height:18px;display:grid}.r_slHG_identitySummary span{color:var(--dsw-alias-label-tertiary)}.r_slHG_identitySummary strong{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-primary)}.r_slHG_field{color:var(--dsw-alias-label-secondary);text-align:left;gap:6px;font-size:13px;line-height:20px;display:grid}.r_slHG_field input{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;height:40px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:8px;padding:0 12px}.r_slHG_field input:focus-visible,.r_slHG_primary:focus-visible,.r_slHG_secondary:focus-visible,.r_slHG_linkButton:focus-visible,.r_slHG_dangerLink:focus-visible,.r_slHG_dangerButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.r_slHG_primary,.r_slHG_secondary,.r_slHG_dangerButton{cursor:pointer;min-height:40px;font:inherit;border-radius:8px;padding:0 14px}.r_slHG_primary{color:var(--dsw-alias-label-primary-inverted);background:var(--dsw-alias-button-primary-fill);border:0}.r_slHG_primary:hover{background:var(--dsw-alias-button-primary-hover)}.r_slHG_secondary{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:0 0}.r_slHG_secondary:hover{background:var(--dsw-alias-interactive-bg-hover)}.r_slHG_primary:disabled,.r_slHG_secondary:disabled,.r_slHG_linkButton:disabled,.r_slHG_dangerLink:disabled,.r_slHG_dangerButton:disabled{cursor:default;opacity:.5}.r_slHG_linkButton,.r_slHG_dangerLink{cursor:pointer;min-height:32px;font:inherit;background:0 0;border:0;padding:0;font-size:12px}.r_slHG_linkButton{color:var(--dsw-alias-brand-primary)}.r_slHG_dangerLink{color:var(--dsw-alias-state-error-primary)}.r_slHG_actionStack{gap:8px;display:grid}.r_slHG_existingNotice,.r_slHG_dangerPanel{border-left:3px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);gap:10px;padding:12px 14px;display:grid}.r_slHG_existingNotice strong{color:var(--dsw-alias-label-primary)}.r_slHG_dangerPanel{border-left-color:var(--dsw-alias-state-error-primary)}.r_slHG_dangerPanel strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.r_slHG_confirmation{color:var(--dsw-alias-label-secondary);align-items:flex-start;gap:8px;font-size:12px;line-height:18px;display:flex}.r_slHG_confirmation input{width:16px;height:16px;accent-color:var(--dsw-alias-state-error-primary);flex:none;margin:1px 0 0}.r_slHG_dangerButton{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);background:0 0}.r_slHG_dangerButton:hover{background:var(--dsw-alias-interactive-bg-hover-danger)}.r_slHG_recoveryHelp{border-top:1px solid var(--dsw-alias-border-l1);gap:10px;padding-top:14px;display:grid}.r_slHG_recoveryHelp p{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}.r_slHG_notice,.r_slHG_error{overflow-wrap:anywhere;font-size:12px;line-height:18px}.r_slHG_notice{color:var(--dsw-alias-label-secondary)}.r_slHG_error{color:var(--dsw-alias-state-error-primary)}@media (height<=560px){.r_slHG_accessFlow{gap:8px}.r_slHG_identityIcon,.r_slHG_progressIcon{width:32px;height:32px}}@media (prefers-reduced-motion:reduce){.r_slHG_primary,.r_slHG_secondary,.r_slHG_linkButton,.r_slHG_dangerLink,.r_slHG_dangerButton{transition-duration:.001ms!important}.r_slHG_progressIcon svg{animation-duration:.001ms!important}}";
7967
- const tagId$2 = "@awiki/dsh-plugin/AwikiIdentityAccess.module.css";
7968
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
8344
+ const css$3 = ".r_slHG_accessFlow{width:100%;min-width:0;color:var(--dsw-alias-label-secondary);gap:14px;display:grid}.r_slHG_identityIcon,.r_slHG_progressIcon{width:48px;height:48px;color:var(--dsw-alias-brand-primary);background:var(--dsw-alias-interactive-bg-active);border-radius:50%;place-items:center;margin:0 auto;display:grid}.r_slHG_progressIcon svg{animation:1s linear infinite r_slHG_identity-spin}@keyframes r_slHG_identity-spin{to{transform:rotate(360deg)}}.r_slHG_headingGroup{text-align:center;gap:6px;display:grid}.r_slHG_headingGroup h3,.r_slHG_headingGroup p,.r_slHG_existingNotice p,.r_slHG_dangerPanel p{margin:0}.r_slHG_headingGroup h3{color:var(--dsw-alias-label-primary);font-size:18px;line-height:26px}.r_slHG_headingGroup p,.r_slHG_existingNotice p,.r_slHG_dangerPanel p{font-size:13px;line-height:20px}.r_slHG_headingGroup strong{color:var(--dsw-alias-label-primary);overflow-wrap:anywhere}.r_slHG_identitySummary{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:8px;grid-template-columns:max-content minmax(0,1fr);gap:6px 14px;padding:12px 14px;font-size:12px;line-height:18px;display:grid}.r_slHG_identitySummary span{color:var(--dsw-alias-label-tertiary)}.r_slHG_identitySummary strong{overflow-wrap:anywhere;min-width:0;color:var(--dsw-alias-label-primary)}.r_slHG_field{color:var(--dsw-alias-label-secondary);text-align:left;gap:6px;font-size:13px;line-height:20px;display:grid}.r_slHG_field input{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);width:100%;height:40px;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-2);font:inherit;border-radius:8px;padding:0 12px}.r_slHG_field input:focus-visible,.r_slHG_primary:focus-visible,.r_slHG_secondary:focus-visible,.r_slHG_linkButton:focus-visible,.r_slHG_dangerLink:focus-visible,.r_slHG_dangerButton:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.r_slHG_primary,.r_slHG_secondary,.r_slHG_dangerButton{cursor:pointer;min-height:40px;font:inherit;border-radius:8px;padding:0 14px}.r_slHG_primary{color:var(--dsw-alias-label-primary-inverted);background:var(--dsw-alias-button-primary-fill);border:0}.r_slHG_primary:hover{background:var(--dsw-alias-button-primary-hover)}.r_slHG_secondary{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:0 0}.r_slHG_secondary:hover{background:var(--dsw-alias-interactive-bg-hover)}.r_slHG_primary:disabled,.r_slHG_secondary:disabled,.r_slHG_linkButton:disabled,.r_slHG_dangerLink:disabled,.r_slHG_dangerButton:disabled{cursor:default;opacity:.5}.r_slHG_linkButton,.r_slHG_dangerLink{cursor:pointer;min-height:32px;font:inherit;background:0 0;border:0;padding:0;font-size:12px}.r_slHG_linkButton{color:var(--dsw-alias-brand-primary)}.r_slHG_dangerLink{color:var(--dsw-alias-state-error-primary)}.r_slHG_actionStack{gap:8px;display:grid}.r_slHG_existingNotice,.r_slHG_dangerPanel{border-left:3px solid var(--dsw-alias-brand-primary);background:var(--dsw-alias-bg-layer-2);gap:10px;padding:12px 14px;display:grid}.r_slHG_existingNotice strong{color:var(--dsw-alias-label-primary)}.r_slHG_dangerPanel{border-left-color:var(--dsw-alias-state-error-primary)}.r_slHG_dangerPanel strong{color:var(--dsw-alias-label-primary);font-size:13px;line-height:20px}.r_slHG_confirmation{color:var(--dsw-alias-label-secondary);align-items:flex-start;gap:8px;font-size:12px;line-height:18px;display:flex}.r_slHG_confirmation input{width:16px;height:16px;accent-color:var(--dsw-alias-state-error-primary);flex:none;margin:1px 0 0}.r_slHG_dangerButton{border:1px solid var(--dsw-alias-state-error-primary);color:var(--dsw-alias-state-error-primary);background:0 0}.r_slHG_dangerButton:hover{background:var(--dsw-alias-interactive-bg-hover-danger)}.r_slHG_recoveryHelp{border-top:1px solid var(--dsw-alias-border-l1);gap:10px;padding-top:14px;display:grid}.r_slHG_recoveryHelp p{color:var(--dsw-alias-label-secondary);margin:0;font-size:12px;line-height:18px}.r_slHG_notice,.r_slHG_error{overflow-wrap:anywhere;font-size:12px;line-height:18px}.r_slHG_notice{color:var(--dsw-alias-label-secondary)}.r_slHG_error{color:var(--dsw-alias-state-error-primary)}.r_slHG_sas{letter-spacing:.2em;text-align:center;font-variant-numeric:tabular-nums;font-size:32px}@media (height<=560px){.r_slHG_accessFlow{gap:8px}.r_slHG_identityIcon,.r_slHG_progressIcon{width:32px;height:32px}}@media (prefers-reduced-motion:reduce){.r_slHG_primary,.r_slHG_secondary,.r_slHG_linkButton,.r_slHG_dangerLink,.r_slHG_dangerButton{transition-duration:.001ms!important}.r_slHG_progressIcon svg{animation-duration:.001ms!important}}";
8345
+ const tagId$3 = "@awiki/dsh-plugin/AwikiIdentityAccess.module.css";
8346
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
7969
8347
  const tag = document.createElement("style");
7970
8348
  tag.dataset.plugin = "@awiki/dsh-plugin";
7971
- tag.dataset.pluginCss = tagId$2;
7972
- tag.textContent = css$2;
8349
+ tag.dataset.pluginCss = tagId$3;
8350
+ tag.textContent = css$3;
7973
8351
  document.head.appendChild(tag);
7974
8352
  }
7975
8353
  var _dsh_awiki_css_AwikiIdentityAccess_module_css_default = {
@@ -7991,6 +8369,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7991
8369
  "primary": "r_slHG_primary",
7992
8370
  "progressIcon": "r_slHG_progressIcon",
7993
8371
  "recoveryHelp": "r_slHG_recoveryHelp",
8372
+ "sas": "r_slHG_sas",
7994
8373
  "secondary": "r_slHG_secondary"
7995
8374
  };
7996
8375
  //#endregion
@@ -8029,6 +8408,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8029
8408
  const [signedOutAlternative, setSignedOutAlternative] = (0, react.useState)("none");
8030
8409
  const [replaceConfirmed, setReplaceConfirmed] = (0, react.useState)(false);
8031
8410
  const [loginFailed, setLoginFailed] = (0, react.useState)(false);
8411
+ const [joinContext, setJoinContext] = (0, react.useState)(null);
8412
+ const [joinProgress, setJoinProgress] = (0, react.useState)(null);
8032
8413
  (0, react.useEffect)(() => {
8033
8414
  if (retryDeadline === null) return;
8034
8415
  const update = () => {
@@ -8073,36 +8454,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8073
8454
  setRetrySeconds(cooldownSeconds);
8074
8455
  setNotice(`注册验证码已发送;${cooldownSeconds} 秒后可重新获取。`);
8075
8456
  };
8076
- const requestIdentityOtp = async () => {
8077
- setError(null);
8078
- setNotice(null);
8079
- const requestedHandle = handle.trim();
8080
- const requestedPhone = phone.trim();
8081
- const inspection = await props.inspectIdentityAccess({ handle: requestedHandle });
8082
- if (!inspection.ok) {
8083
- setError(inspection.error);
8084
- return;
8085
- }
8086
- if (inspection.value.status === "existing") {
8087
- const factorContext = {
8088
- fullHandle: inspection.value.fullHandle,
8089
- phone: requestedPhone
8090
- };
8091
- setRecoveryFactorContext(factorContext);
8092
- const recovery = await props.sendRecoveryOtp(factorContext);
8093
- if (!recovery.ok) {
8094
- setRecoveryFactorContext(null);
8095
- setError(recovery.error);
8096
- return;
8097
- }
8098
- setRecoveryFactorContext({
8099
- fullHandle: recovery.value.fullHandle,
8100
- phone: requestedPhone
8101
- });
8102
- return;
8103
- }
8104
- await requestRegistrationOtp();
8105
- };
8457
+ const requestIdentityOtp = requestRegistrationOtp;
8106
8458
  const completeRegistration = async () => {
8107
8459
  if (!registrationOtpSent) return;
8108
8460
  setError(null);
@@ -8115,10 +8467,77 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8115
8467
  setError(result.error);
8116
8468
  return;
8117
8469
  }
8470
+ if (result.value.status === "join-required") {
8471
+ setOtp("");
8472
+ setJoinContext({
8473
+ fullHandle: result.value.fullHandle,
8474
+ phone: phone.trim()
8475
+ });
8476
+ return;
8477
+ }
8118
8478
  setPhone("");
8119
8479
  setHandle("");
8120
8480
  resetIdentityEntry();
8121
8481
  };
8482
+ const beginJoin = async () => {
8483
+ setError(null);
8484
+ const result = await props.beginDeviceJoin();
8485
+ if (!result.ok) return setError(result.error);
8486
+ setJoinProgress(result.value);
8487
+ };
8488
+ const cancelJoin = async () => {
8489
+ setError(null);
8490
+ const result = await props.cancelDeviceJoin();
8491
+ if (!result.ok) return setError(result.error);
8492
+ setJoinContext(null);
8493
+ setJoinProgress(null);
8494
+ resetIdentityEntry();
8495
+ };
8496
+ const chooseRecovery = async () => {
8497
+ if (joinContext === null || !props.handleRecoveryPhoneEnabled) return;
8498
+ setError(null);
8499
+ const discarded = await props.cancelDeviceJoin();
8500
+ if (!discarded.ok) return setError(discarded.error);
8501
+ const recovery = await props.sendRecoveryOtp({
8502
+ fullHandle: joinContext.fullHandle,
8503
+ phone: joinContext.phone
8504
+ });
8505
+ if (!recovery.ok) return setError(recovery.error);
8506
+ setRecoveryFactorContext({
8507
+ fullHandle: recovery.value.fullHandle,
8508
+ phone: joinContext.phone
8509
+ });
8510
+ setJoinContext(null);
8511
+ };
8512
+ (0, react.useEffect)(() => {
8513
+ if (props.sessionStatus !== "unregistered" || joinContext !== null || joinProgress !== null || typeof props.getDeviceJoinStatus !== "function") return;
8514
+ let active = true;
8515
+ props.getDeviceJoinStatus().then((result) => {
8516
+ if (!active) return;
8517
+ if (!result.ok) setError(result.error);
8518
+ else if (result.value !== null) setJoinProgress(result.value);
8519
+ });
8520
+ return () => {
8521
+ active = false;
8522
+ };
8523
+ }, [props.sessionStatus]);
8524
+ (0, react.useEffect)(() => {
8525
+ if (joinProgress === null || [
8526
+ "authorized",
8527
+ "cancelled",
8528
+ "rejected",
8529
+ "expired"
8530
+ ].includes(joinProgress.phase)) return;
8531
+ const timer = setInterval(() => {
8532
+ props.getDeviceJoinStatus().then((result) => {
8533
+ if (!result.ok) setError(result.error);
8534
+ else if (result.value !== null) setJoinProgress(result.value);
8535
+ });
8536
+ }, 2e3);
8537
+ return () => {
8538
+ clearInterval(timer);
8539
+ };
8540
+ }, [joinProgress?.phase]);
8122
8541
  const login = async () => {
8123
8542
  setError(null);
8124
8543
  setLoginFailed(false);
@@ -8164,6 +8583,94 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8164
8583
  requestTitle: "需要重新恢复身份",
8165
8584
  requestDescription: "这个 Handle 已在另一台设备完成了更新恢复,当前设备的旧凭证因此失效。验证绑定手机号后即可继续使用本机数据。"
8166
8585
  });
8586
+ if (props.sessionStatus === "unregistered" && joinProgress !== null) {
8587
+ const terminal = [
8588
+ "cancelled",
8589
+ "rejected",
8590
+ "expired"
8591
+ ].includes(joinProgress.phase);
8592
+ return (0, react_jsx_runtime.jsx)(AwikiIdentityPage, { children: (0, react_jsx_runtime.jsxs)("div", {
8593
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.accessFlow,
8594
+ children: [
8595
+ (0, react_jsx_runtime.jsx)("div", {
8596
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.identityIcon,
8597
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconUserOutline16, { size: 24 })
8598
+ }),
8599
+ (0, react_jsx_runtime.jsxs)("div", {
8600
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8601
+ children: [(0, react_jsx_runtime.jsx)("h3", { children: joinProgress.phase === "sas-ready" ? "核对安全码" : terminal ? "设备加入已结束" : "正在加入设备" }), (0, react_jsx_runtime.jsx)("p", { children: joinProgress.phase === "sas-ready" ? "请在已有管理设备上核对下面的 6 位安全码;只有两端一致时才批准。" : joinProgress.phase === "rejected" ? "管理设备拒绝了这次加入。" : joinProgress.phase === "expired" ? "这次设备加入已过期,请重新验证手机号。" : joinProgress.phase === "cancelled" ? "这次设备加入已取消。" : "请在已有 AWiki Me 或 CLI 管理设备上处理加入请求。" })]
8602
+ }),
8603
+ joinProgress.phase === "sas-ready" && (0, react_jsx_runtime.jsx)("strong", {
8604
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.sas,
8605
+ children: joinProgress.sas
8606
+ }),
8607
+ !terminal && (0, react_jsx_runtime.jsxs)("small", {
8608
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.notice,
8609
+ role: "status",
8610
+ children: ["有效期至 ", joinProgress.expiresAt]
8611
+ }),
8612
+ (0, react_jsx_runtime.jsx)("button", {
8613
+ type: "button",
8614
+ className: terminal ? _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary : _dsh_awiki_css_AwikiIdentityAccess_module_css_default.secondary,
8615
+ disabled: props.pending,
8616
+ onClick: () => {
8617
+ cancelJoin();
8618
+ },
8619
+ children: terminal ? "返回身份入口" : "取消加入"
8620
+ }),
8621
+ error !== null && (0, react_jsx_runtime.jsx)("small", {
8622
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.error,
8623
+ role: "alert",
8624
+ children: error
8625
+ })
8626
+ ]
8627
+ }) });
8628
+ }
8629
+ if (props.sessionStatus === "unregistered" && joinContext !== null) return (0, react_jsx_runtime.jsx)(AwikiIdentityPage, { children: (0, react_jsx_runtime.jsxs)("div", {
8630
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.accessFlow,
8631
+ children: [
8632
+ (0, react_jsx_runtime.jsx)("div", {
8633
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.identityIcon,
8634
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconUserOutline16, { size: 24 })
8635
+ }),
8636
+ (0, react_jsx_runtime.jsxs)("div", {
8637
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8638
+ children: [(0, react_jsx_runtime.jsx)("h3", { children: "这个 Handle 已存在" }), (0, react_jsx_runtime.jsx)("p", { children: "推荐把当前 DSH 作为新设备加入,原身份和其他设备会继续有效。" })]
8639
+ }),
8640
+ (0, react_jsx_runtime.jsx)("button", {
8641
+ type: "button",
8642
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary,
8643
+ disabled: props.pending,
8644
+ onClick: () => {
8645
+ beginJoin();
8646
+ },
8647
+ children: "加入新设备(推荐)"
8648
+ }),
8649
+ props.handleRecoveryPhoneEnabled && (0, react_jsx_runtime.jsx)("button", {
8650
+ type: "button",
8651
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.dangerLink,
8652
+ disabled: props.pending,
8653
+ onClick: () => {
8654
+ chooseRecovery();
8655
+ },
8656
+ children: "恢复 Handle(会替换 DID)"
8657
+ }),
8658
+ (0, react_jsx_runtime.jsx)("button", {
8659
+ type: "button",
8660
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.secondary,
8661
+ disabled: props.pending,
8662
+ onClick: () => {
8663
+ cancelJoin();
8664
+ },
8665
+ children: "取消"
8666
+ }),
8667
+ error !== null && (0, react_jsx_runtime.jsx)("small", {
8668
+ className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.error,
8669
+ role: "alert",
8670
+ children: error
8671
+ })
8672
+ ]
8673
+ }) });
8167
8674
  if (props.sessionStatus === "signed-out") {
8168
8675
  if (signedOutAlternative === "recover") return (0, react_jsx_runtime.jsx)(Recovery, {
8169
8676
  ...props,
@@ -8292,16 +8799,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8292
8799
  }),
8293
8800
  (0, react_jsx_runtime.jsxs)("div", {
8294
8801
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8295
- children: [(0, react_jsx_runtime.jsx)("h3", { children: registrationOtpSent ? "创建新身份" : "进入 AWiki" }), (0, react_jsx_runtime.jsx)("p", { children: registrationOtpSent ? "这个 Handle 尚未注册。输入刚收到的验证码以创建身份。" : "输入 Handle 和手机号。已有 Handle 会恢复身份,新 Handle 会创建身份。" })]
8296
- }),
8297
- props.legacySharedStateDetected === true && props.profileName != null && (0, react_jsx_runtime.jsxs)("div", {
8298
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.existingNotice,
8299
- role: "status",
8300
- children: [(0, react_jsx_runtime.jsx)("strong", { children: "已为当前 Profile 隔离 AWiki 数据" }), (0, react_jsx_runtime.jsxs)("p", { children: [
8301
- "检测到旧版共享数据。为避免多个 DSH Profile 同时占用数据库,当前 Profile「",
8302
- props.profileName,
8303
- "」使用独立数据目录;旧数据未删除或复制。请用原 Handle 和手机号恢复到此设备。"
8304
- ] })]
8802
+ children: [(0, react_jsx_runtime.jsx)("h3", { children: registrationOtpSent ? "验证身份" : "进入 AWiki" }), (0, react_jsx_runtime.jsx)("p", { children: registrationOtpSent ? "输入注册验证码。新 Handle 会创建身份,已有 Handle 会进入设备加入选择。" : "输入 Handle 和手机号,统一获取注册验证码。" })]
8305
8803
  }),
8306
8804
  (0, react_jsx_runtime.jsxs)("label", {
8307
8805
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.field,
@@ -8344,7 +8842,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8344
8842
  type: "submit",
8345
8843
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary,
8346
8844
  disabled: props.pending || handle.trim() === "" || phone.trim() === "" || registrationOtpSent && otp.trim() === "",
8347
- children: registrationOtpSent ? "创建身份" : "获取验证码"
8845
+ children: registrationOtpSent ? "继续" : "获取验证码"
8348
8846
  }),
8349
8847
  registrationOtpSent && (0, react_jsx_runtime.jsx)("button", {
8350
8848
  type: "button",
@@ -8620,7 +9118,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8620
9118
  groupAccess: null,
8621
9119
  groupMembers: Object.freeze([]),
8622
9120
  groupMembersHasMore: false,
8623
- groupRecovery: null,
8624
9121
  messages: Object.freeze([]),
8625
9122
  historyHasMore: false,
8626
9123
  localPending: false,
@@ -8628,8 +9125,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8628
9125
  pending: null,
8629
9126
  error: null,
8630
9127
  attachmentMaxBytes: 0,
8631
- profileName: null,
8632
- legacySharedStateDetected: false,
9128
+ handleRecoveryPhoneEnabled: false,
8633
9129
  summaries: Object.freeze({}),
8634
9130
  recoveryOperationId: null,
8635
9131
  recoveryProgress: null
@@ -8685,48 +9181,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8685
9181
  default: return `${failure.code}:${failure.message}`;
8686
9182
  }
8687
9183
  }
8688
- function groupRecoveryFailureMessage(failure) {
8689
- return failure.code === "network" ? "无法连接 AWiki 服务,暂时不能恢复旧群聊身份。" : "暂时不能检查旧群聊身份,请稍后重试。";
8690
- }
8691
9184
  function conversationPreferenceFailureMessage(_failure) {
8692
9185
  return "无法保存本机会话设置,请稍后重试。";
8693
9186
  }
8694
- function recoveryFingerprint(parts) {
8695
- let hash = 2166136261;
8696
- for (const part of parts) {
8697
- for (let index = 0; index < part.length; index += 1) {
8698
- hash ^= part.charCodeAt(index);
8699
- hash = Math.imul(hash, 16777619);
8700
- }
8701
- hash ^= 0;
8702
- hash = Math.imul(hash, 16777619);
8703
- }
8704
- return (hash >>> 0).toString(16).padStart(8, "0");
8705
- }
8706
- function groupRecoveryProjection(summary, hiddenGroupDids) {
8707
- const hiddenItems = summary.items.filter((item) => hiddenGroupDids.has(item.groupDid));
8708
- const hiddenPending = hiddenItems.filter((item) => item.status === "pending").length;
8709
- const hiddenBlocked = hiddenItems.filter((item) => item.status === "blocked").length;
8710
- const pending = Math.max(0, summary.pending - hiddenPending);
8711
- const blocked = Math.max(0, summary.blocked - hiddenBlocked);
8712
- const signature = `v1:${pending}:${blocked}:${recoveryFingerprint(summary.items.filter((item) => !hiddenGroupDids.has(item.groupDid)).map((item) => `${item.status}:${item.groupDid}`).sort())}`;
8713
- if (blocked > 0) return {
8714
- view: {
8715
- status: "blocked",
8716
- pending,
8717
- blocked
8718
- },
8719
- signature
8720
- };
8721
- return {
8722
- view: pending > 0 ? {
8723
- status: "pending",
8724
- pending,
8725
- blocked: 0
8726
- } : null,
8727
- signature
8728
- };
8729
- }
8730
9187
  function groupReadFailureReason(failure) {
8731
9188
  switch (failure.code) {
8732
9189
  case "group-identity-stale": return "recovering";
@@ -8904,23 +9361,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8904
9361
  ];
8905
9362
  /** Runtime-only decoded-byte budget that prevents repeat Host calls while browsing. */
8906
9363
  const BROWSER_IMAGE_ATTACHMENT_CACHE_MAX_BYTES = 33554432;
8907
- const RECOVERY_OPERATION_STORAGE_PREFIX = "awiki.handle-recovery.operation.v2:";
8908
- function recoveryOperationStorageKey(tenantDomain) {
8909
- return `${RECOVERY_OPERATION_STORAGE_PREFIX}${encodeURIComponent(tenantDomain)}`;
8910
- }
8911
- function storedRecoveryOperation(tenantDomain) {
9364
+ const RECOVERY_OPERATION_STORAGE_KEY = "awiki.handle-recovery.operation.v1";
9365
+ function storedRecoveryOperation() {
8912
9366
  try {
8913
- return globalThis.localStorage?.getItem(recoveryOperationStorageKey(tenantDomain)) ?? null;
9367
+ return globalThis.localStorage?.getItem(RECOVERY_OPERATION_STORAGE_KEY) ?? null;
8914
9368
  } catch {
8915
9369
  return null;
8916
9370
  }
8917
9371
  }
8918
- function storeRecoveryOperation(tenantDomain, operationId) {
8919
- if (tenantDomain === void 0) return;
9372
+ function storeRecoveryOperation(operationId) {
8920
9373
  try {
8921
- const key = recoveryOperationStorageKey(tenantDomain);
8922
- if (operationId === null) globalThis.localStorage?.removeItem(key);
8923
- else globalThis.localStorage?.setItem(key, operationId);
9374
+ if (operationId === null) globalThis.localStorage?.removeItem(RECOVERY_OPERATION_STORAGE_KEY);
9375
+ else globalThis.localStorage?.setItem(RECOVERY_OPERATION_STORAGE_KEY, operationId);
8924
9376
  } catch {}
8925
9377
  }
8926
9378
  /** Wait between group-history readiness probes without retaining controller state. */
@@ -8990,18 +9442,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8990
9442
  directProfiles = /* @__PURE__ */ new Map();
8991
9443
  /** Last trustworthy group title for the active identity, keyed by canonical Group DID. */
8992
9444
  groupTitles = /* @__PURE__ */ new Map();
8993
- /** Current secret-free Core journal state, keyed by canonical Group DID. */
8994
- groupRecoveryItems = /* @__PURE__ */ new Map();
8995
9445
  /** Identity-scoped product overlays. Core conversations and history remain untouched. */
8996
9446
  hiddenConversationPreferences = /* @__PURE__ */ new Map();
8997
- dismissedGroupRecoverySignature;
8998
- lastGroupRecoverySignature;
8999
- lastGroupRecoverySummary;
9000
9447
  /** Verified image payloads retained outside observable state for instant remounts. */
9001
9448
  imageAttachments = /* @__PURE__ */ new Map();
9002
9449
  imageAttachmentCacheBytes = 0;
9003
9450
  presentationCacheOwnerDid = null;
9004
- groupRecoveryOperation;
9005
9451
  /**
9006
9452
  * @param remote - generated Host Remote namespace.
9007
9453
  * @param persistentImageCache - browser-origin verified preview cache.
@@ -9054,11 +9500,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9054
9500
  identity: session.value.status === "active" ? session.value.identity : null,
9055
9501
  error: null,
9056
9502
  attachmentMaxBytes: config.value.attachmentMaxBytes,
9057
- profileName: config.value.profileName ?? null,
9058
- legacySharedStateDetected: config.value.legacySharedStateDetected ?? false,
9059
- recoveryOperationId: storedRecoveryOperation(config.value.tenantDomain)
9503
+ handleRecoveryPhoneEnabled: config.value.handleRecoveryPhoneEnabled,
9504
+ recoveryOperationId: storedRecoveryOperation()
9060
9505
  });
9061
- const operationId = storedRecoveryOperation(config.value.tenantDomain);
9506
+ const operationId = storedRecoveryOperation();
9062
9507
  if (operationId !== null) {
9063
9508
  const recovery = await call(() => this.remote.getRecoveryStatus({ operationId }));
9064
9509
  if (this.current(generation) && recovery.ok) {
@@ -9068,7 +9513,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9068
9513
  recoveryProgress: recovery.value
9069
9514
  });
9070
9515
  if (recovery.value.phase === "applied") {
9071
- storeRecoveryOperation(config.value.tenantDomain, null);
9516
+ storeRecoveryOperation(null);
9072
9517
  this.publish({
9073
9518
  ...this.view,
9074
9519
  recoveryOperationId: null,
@@ -9100,7 +9545,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9100
9545
  if (!loaded.ok) return loaded;
9101
9546
  const generation = this.generation;
9102
9547
  if (this.view.identity !== null) {
9103
- const listed = await this.refreshConversationsAndRecoverGroups(generation);
9548
+ const listed = await this.refreshConversations(generation);
9104
9549
  if (!listed.ok) return listed;
9105
9550
  }
9106
9551
  if (this.current(generation)) this.timer = setInterval(() => {
@@ -9128,7 +9573,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9128
9573
  ...INITIAL_VIEW,
9129
9574
  status: "ready",
9130
9575
  sessionStatus: "signed-out",
9131
- attachmentMaxBytes: this.config?.attachmentMaxBytes ?? 0
9576
+ attachmentMaxBytes: this.config?.attachmentMaxBytes ?? 0,
9577
+ handleRecoveryPhoneEnabled: this.config?.handleRecoveryPhoneEnabled ?? false
9132
9578
  });
9133
9579
  return result;
9134
9580
  }
@@ -9182,16 +9628,50 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9182
9628
  const result = await this.withPending("注册身份", () => call(() => this.remote.registerIdentity(request), registrationFailureMessage));
9183
9629
  if (!result.ok) return result;
9184
9630
  if (!this.current(generation)) return result;
9185
- this.activatePresentationCache(result.value);
9186
- this.publish({
9187
- ...this.view,
9188
- sessionStatus: "active",
9189
- identity: result.value,
9190
- error: null
9191
- });
9192
- await this.refreshConversationsAndRecoverGroups(generation);
9631
+ if (result.value.status === "registered") {
9632
+ this.activatePresentationCache(result.value.identity);
9633
+ this.publish({
9634
+ ...this.view,
9635
+ sessionStatus: "active",
9636
+ identity: result.value.identity,
9637
+ error: null
9638
+ });
9639
+ await this.refreshConversations(generation);
9640
+ }
9641
+ return result;
9642
+ }
9643
+ beginDeviceJoin() {
9644
+ return this.withPending("开始加入设备", () => call(() => this.remote.beginDeviceJoin()));
9645
+ }
9646
+ async getDeviceJoinStatus() {
9647
+ const result = await call(() => this.remote.getDeviceJoinStatus());
9648
+ if (result.ok && result.value?.completed) await this.loadSession();
9193
9649
  return result;
9194
9650
  }
9651
+ cancelDeviceJoin() {
9652
+ return this.withPending("取消加入设备", async () => {
9653
+ const result = await call(() => this.remote.cancelDeviceJoin());
9654
+ return result.ok ? {
9655
+ ok: true,
9656
+ value: void 0
9657
+ } : result;
9658
+ });
9659
+ }
9660
+ refreshDeviceManagement() {
9661
+ return call(() => this.remote.refreshDeviceManagement());
9662
+ }
9663
+ startDeviceJoinVerification(request) {
9664
+ return this.withPending("开始设备验证", () => call(() => this.remote.startDeviceJoinVerification(request)));
9665
+ }
9666
+ approveDeviceJoin(request) {
9667
+ return this.withPending("批准设备", () => call(() => this.remote.approveDeviceJoin(request)));
9668
+ }
9669
+ rejectDeviceJoin(request) {
9670
+ return this.withPending("拒绝设备", () => call(() => this.remote.rejectDeviceJoin(request)));
9671
+ }
9672
+ revokeDevice(request) {
9673
+ return this.withPending("撤销设备", () => call(() => this.remote.revokeDevice(request)));
9674
+ }
9195
9675
  /**
9196
9676
  * Update the deployment identity's public display name.
9197
9677
  * @param displayName - replacement display name selected by the user.
@@ -9243,7 +9723,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9243
9723
  async sendRecoveryOtp(request) {
9244
9724
  const result = await this.withPending("发送恢复验证码", () => call(() => this.remote.sendRecoveryOtp(request), registrationOtpFailureMessage), { publishFailure: false });
9245
9725
  if (!result.ok) return result;
9246
- storeRecoveryOperation(this.config?.tenantDomain, result.value.operationId);
9726
+ storeRecoveryOperation(result.value.operationId);
9247
9727
  this.publish({
9248
9728
  ...this.view,
9249
9729
  recoveryOperationId: result.value.operationId,
@@ -9278,7 +9758,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9278
9758
  recoveryProgress: result.value
9279
9759
  });
9280
9760
  if (result.value.phase === "applied") {
9281
- storeRecoveryOperation(this.config?.tenantDomain, null);
9761
+ storeRecoveryOperation(null);
9282
9762
  this.publish({
9283
9763
  ...this.view,
9284
9764
  recoveryOperationId: null,
@@ -9299,7 +9779,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9299
9779
  recoveryProgress: result.value
9300
9780
  });
9301
9781
  if (result.value.phase === "applied") {
9302
- storeRecoveryOperation(this.config?.tenantDomain, null);
9782
+ storeRecoveryOperation(null);
9303
9783
  this.publish({
9304
9784
  ...this.view,
9305
9785
  recoveryOperationId: null,
@@ -9326,7 +9806,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9326
9806
  recoveryProgress: result.value
9327
9807
  });
9328
9808
  if (result.value.phase === "applied") {
9329
- storeRecoveryOperation(this.config?.tenantDomain, null);
9809
+ storeRecoveryOperation(null);
9330
9810
  this.publish({
9331
9811
  ...this.view,
9332
9812
  recoveryOperationId: null,
@@ -9347,7 +9827,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9347
9827
  if (phase !== void 0 && phase !== "awaiting_factor" && phase !== "ready_to_commit") return this.fail("当前恢复状态不能取消");
9348
9828
  const result = await this.withPending("取消身份恢复", () => call(() => this.remote.discardRecovery({ operationId })), { publishFailure: false });
9349
9829
  if (!result.ok) return result;
9350
- storeRecoveryOperation(this.config?.tenantDomain, null);
9830
+ storeRecoveryOperation(null);
9351
9831
  this.publish({
9352
9832
  ...this.view,
9353
9833
  recoveryOperationId: null,
@@ -9358,16 +9838,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9358
9838
  value: void 0
9359
9839
  };
9360
9840
  }
9361
- /** Return cached browser-safe runtime policy, or load it once on demand. */
9362
- async getConfig() {
9363
- if (this.config !== null) return {
9364
- ok: true,
9365
- value: this.config
9366
- };
9367
- const result = await call(() => this.remote.getConfig(), mailFailureMessage);
9368
- if (result.ok) this.config = result.value;
9369
- return result;
9370
- }
9371
9841
  /** Read the active deployment identity's public mailbox state. */
9372
9842
  getMailAccount() {
9373
9843
  return call(() => this.remote.getMailAccount(), mailFailureMessage);
@@ -9388,20 +9858,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9388
9858
  sendMail(request) {
9389
9859
  return call(() => this.remote.sendMail(request), mailFailureMessage);
9390
9860
  }
9391
- /** Download one explicitly selected mail attachment without retaining its bytes. */
9392
- async downloadMailAttachment(request) {
9393
- if (this.disposed) return {
9394
- ok: false,
9395
- error: "AWiki 插件已卸载"
9396
- };
9397
- const generation = this.generation;
9398
- const result = await call(() => this.remote.downloadMailAttachment(request), mailFailureMessage);
9399
- if (!this.current(generation)) return {
9400
- ok: false,
9401
- error: "AWiki 已关闭"
9402
- };
9403
- return result;
9404
- }
9405
9861
  /**
9406
9862
  * Load another page of the conversation roster.
9407
9863
  * @returns successful pagination or one display-safe failure.
@@ -9424,7 +9880,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9424
9880
  ...this.view,
9425
9881
  conversations: appendUnique(this.view.conversations, conversations.visible, (value) => value.id),
9426
9882
  hiddenConversations: conversations.hidden,
9427
- groupRecovery: this.currentGroupRecoveryView(),
9428
9883
  conversationsHasMore: result.value.hasMore && result.value.nextCursor !== void 0
9429
9884
  });
9430
9885
  return {
@@ -9432,41 +9887,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9432
9887
  value: void 0
9433
9888
  };
9434
9889
  }
9435
- /** Synchronize account projections, then retry Core's durable group-rebind journal. */
9436
- async retryGroupRebindRecovery() {
9437
- const generation = this.generation;
9438
- return this.withPending("恢复群聊身份", async () => {
9439
- const listed = await this.refreshConversations(generation, true);
9440
- if (!listed.ok) return {
9441
- ok: false,
9442
- error: listed.error
9443
- };
9444
- return this.resumeGroupRebindRecovery(generation);
9445
- });
9446
- }
9447
- /** Dismiss only the current recovery-summary revision; Core recovery remains untouched. */
9448
- async dismissGroupRecoveryNotice() {
9449
- const signature = this.lastGroupRecoverySignature;
9450
- if (signature === void 0 || this.view.groupRecovery === null) return {
9451
- ok: true,
9452
- value: void 0
9453
- };
9454
- const result = await call(() => this.remote.updateConversationPreference({
9455
- action: "dismiss-group-recovery",
9456
- signature
9457
- }), conversationPreferenceFailureMessage);
9458
- if (!result.ok) return this.fail(result.error);
9459
- this.applyConversationPreferences(result.value);
9460
- this.publish({
9461
- ...this.view,
9462
- groupRecovery: null,
9463
- error: null
9464
- });
9465
- return {
9466
- ok: true,
9467
- value: void 0
9468
- };
9469
- }
9470
9890
  /** Hide one recent row locally without leaving a group or deleting history. */
9471
9891
  async hideConversation(conversationId) {
9472
9892
  const conversation = this.view.conversations.find((item) => item.id === conversationId);
@@ -9503,7 +9923,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9503
9923
  localPending: false,
9504
9924
  refreshing: false
9505
9925
  } : {},
9506
- groupRecovery: this.currentGroupRecoveryView(),
9507
9926
  error: null
9508
9927
  });
9509
9928
  return {
@@ -9534,7 +9953,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9534
9953
  ...this.view,
9535
9954
  conversations: appendUnique([conversation], this.view.conversations, (item) => item.id),
9536
9955
  hiddenConversations: this.hiddenConversationsView(),
9537
- groupRecovery: this.currentGroupRecoveryView(),
9538
9956
  error: null
9539
9957
  });
9540
9958
  return {
@@ -9682,7 +10100,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9682
10100
  error: null
9683
10101
  });
9684
10102
  const result = await (async () => {
9685
- if (this.view.groupAccess?.status !== "available" && this.view.groupAccess?.status !== "loading") await this.resumeGroupRebindRecovery(this.generation);
9686
10103
  const refreshed = await this.loadGroupState(conversation, true, true);
9687
10104
  return refreshed.ok ? {
9688
10105
  ok: true,
@@ -10237,14 +10654,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10237
10654
  if (!result.ok) return result;
10238
10655
  await this.persistentImageCache.clear().catch(() => void 0);
10239
10656
  this.close();
10240
- const tenantDomain = this.config?.tenantDomain;
10241
10657
  this.config = null;
10242
10658
  this.conversationsCursor = void 0;
10243
10659
  this.historyCursor = void 0;
10244
10660
  this.unreadAtOpen.clear();
10245
10661
  this.summaryBaselines.clear();
10246
10662
  this.clearPresentationCache();
10247
- storeRecoveryOperation(tenantDomain, null);
10663
+ storeRecoveryOperation(null);
10248
10664
  this.publish({
10249
10665
  ...INITIAL_VIEW,
10250
10666
  status: "ready"
@@ -10272,18 +10688,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10272
10688
  conversation: { ...hidden.conversation },
10273
10689
  hiddenAt: hidden.hiddenAt
10274
10690
  });
10275
- this.dismissedGroupRecoverySignature = preferences.dismissedGroupRecoverySignature;
10276
10691
  }
10277
10692
  hiddenConversationsView() {
10278
10693
  return [...this.hiddenConversationPreferences.values()].sort((left, right) => right.hiddenAt - left.hiddenAt).map((item) => item.conversation);
10279
10694
  }
10280
- currentGroupRecoveryView() {
10281
- const summary = this.lastGroupRecoverySummary;
10282
- if (summary === void 0) return this.view.groupRecovery;
10283
- const projection = groupRecoveryProjection(summary, new Set([...this.hiddenConversationPreferences.values()].map((item) => item.conversation).filter((conversation) => conversation.kind === "group").map((conversation) => conversation.groupDid)));
10284
- this.lastGroupRecoverySignature = projection.signature;
10285
- return projection.signature === this.dismissedGroupRecoverySignature ? null : projection.view;
10286
- }
10287
10695
  async reconcileConversationPage(incoming, generation) {
10288
10696
  const current = [...this.view.conversations, ...this.view.hiddenConversations];
10289
10697
  const conversations = incoming.map((item) => this.cacheConversation(item, current.find((candidate) => candidate.id === item.id)));
@@ -10334,7 +10742,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10334
10742
  ...this.view,
10335
10743
  conversations: firstPage ? refreshed.visible : appendUnique(refreshed.visible, this.view.conversations, (value) => value.id),
10336
10744
  hiddenConversations: refreshed.hidden,
10337
- groupRecovery: this.currentGroupRecoveryView(),
10338
10745
  conversationsHasMore: firstPage ? result.value.hasMore && result.value.nextCursor !== void 0 : this.view.conversationsHasMore,
10339
10746
  error: background ? this.view.error : null
10340
10747
  });
@@ -10367,9 +10774,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10367
10774
  this.groupMembersCursor = void 0;
10368
10775
  this.unreadAtOpen.clear();
10369
10776
  this.summaryBaselines.clear();
10370
- this.groupRecoveryItems.clear();
10371
- this.lastGroupRecoverySignature = void 0;
10372
- this.lastGroupRecoverySummary = void 0;
10373
10777
  this.clearImageAttachments();
10374
10778
  this.publish({
10375
10779
  ...this.view,
@@ -10383,7 +10787,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10383
10787
  groupAccess: null,
10384
10788
  groupMembers: Object.freeze([]),
10385
10789
  groupMembersHasMore: false,
10386
- groupRecovery: null,
10387
10790
  messages: Object.freeze([]),
10388
10791
  historyHasMore: false,
10389
10792
  localPending: false,
@@ -10393,45 +10796,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10393
10796
  summaries: Object.freeze({})
10394
10797
  });
10395
10798
  }
10396
- /** Hydrate account-projected groups before asking Core to resume their durable rebind jobs. */
10397
- async refreshConversationsAndRecoverGroups(generation, background = false) {
10398
- const listed = await this.refreshConversations(generation, background);
10399
- if (!listed.ok || !this.current(generation)) return listed;
10400
- await this.resumeGroupRebindRecovery(generation);
10401
- return listed;
10402
- }
10403
- resumeGroupRebindRecovery(generation) {
10404
- const active = this.groupRecoveryOperation;
10405
- if (active !== void 0 && active.generation === generation) return active.operation;
10406
- let operation;
10407
- operation = call(() => this.remote.resumeGroupRebindRecovery(), groupRecoveryFailureMessage).then((result) => {
10408
- if (!this.current(generation)) return result;
10409
- if (result.ok) {
10410
- this.lastGroupRecoverySummary = result.value;
10411
- this.groupRecoveryItems.clear();
10412
- for (const item of result.value.items) this.groupRecoveryItems.set(item.groupDid, item.status);
10413
- } else {
10414
- this.lastGroupRecoverySummary = void 0;
10415
- this.lastGroupRecoverySignature = "unavailable";
10416
- }
10417
- this.publish({
10418
- ...this.view,
10419
- groupRecovery: result.ok ? this.currentGroupRecoveryView() : this.dismissedGroupRecoverySignature === "unavailable" ? null : {
10420
- status: "unavailable",
10421
- pending: 0,
10422
- blocked: 0
10423
- }
10424
- });
10425
- return result;
10426
- }).finally(() => {
10427
- if (this.groupRecoveryOperation?.operation === operation) this.groupRecoveryOperation = void 0;
10428
- });
10429
- this.groupRecoveryOperation = {
10430
- generation,
10431
- operation
10432
- };
10433
- return operation;
10434
- }
10435
10799
  async loadHistory(older) {
10436
10800
  const conversationId = this.view.selectedConversationId;
10437
10801
  if (conversationId === null) return this.fail("请先选择会话");
@@ -10473,8 +10837,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10473
10837
  if (this.polling || !this.current(generation) || this.view.identity === null) return;
10474
10838
  this.polling = true;
10475
10839
  try {
10476
- const knownGroups = new Set(this.view.conversations.filter((conversation) => conversation.kind === "group").map((conversation) => conversation.groupDid));
10477
- if ((await this.refreshConversations(generation, true)).ok && this.view.conversations.some((conversation) => conversation.kind === "group" && !knownGroups.has(conversation.groupDid))) await this.resumeGroupRebindRecovery(generation);
10840
+ await this.refreshConversations(generation, true);
10478
10841
  const selected = this.view.selectedConversationId;
10479
10842
  if (selected === null || !this.current(generation)) return;
10480
10843
  if (this.selectedConversation()?.kind === "group" && this.view.groupAccess?.status !== "available") return;
@@ -10568,8 +10931,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10568
10931
  return selected === null ? void 0 : this.view.conversations.find((value) => value.id === selected);
10569
10932
  }
10570
10933
  publishGroupAccessFailure(conversation, reason) {
10571
- const journal = this.groupRecoveryItems.get(conversation.groupDid);
10572
- const status = reason === "not-member" ? journal === "blocked" ? "blocked" : journal === "pending" ? "recovering" : "not-member" : reason;
10934
+ const status = reason;
10573
10935
  this.publish({
10574
10936
  ...this.view,
10575
10937
  groupAccess: {
@@ -10585,11 +10947,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10585
10947
  if (ownerDid === this.presentationCacheOwnerDid) return;
10586
10948
  this.directProfiles.clear();
10587
10949
  this.groupTitles.clear();
10588
- this.groupRecoveryItems.clear();
10589
10950
  this.hiddenConversationPreferences.clear();
10590
- this.dismissedGroupRecoverySignature = void 0;
10591
- this.lastGroupRecoverySignature = void 0;
10592
- this.lastGroupRecoverySummary = void 0;
10593
10951
  this.clearImageAttachments();
10594
10952
  this.presentationCacheOwnerDid = ownerDid;
10595
10953
  }
@@ -10597,11 +10955,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10597
10955
  clearPresentationCache() {
10598
10956
  this.directProfiles.clear();
10599
10957
  this.groupTitles.clear();
10600
- this.groupRecoveryItems.clear();
10601
10958
  this.hiddenConversationPreferences.clear();
10602
- this.dismissedGroupRecoverySignature = void 0;
10603
- this.lastGroupRecoverySignature = void 0;
10604
- this.lastGroupRecoverySummary = void 0;
10605
10959
  this.clearImageAttachments();
10606
10960
  this.presentationCacheOwnerDid = null;
10607
10961
  }
@@ -10956,178 +11310,40 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10956
11310
  } catch {}
10957
11311
  }
10958
11312
  /** Restore the last folder selected for one AWiki identity. */
10959
- function readMailFolderCache(storage, ownerDid) {
10960
- const owner = mailListCacheOwner(ownerDid);
10961
- if (owner === void 0) return "inbox";
10962
- try {
10963
- return storage.getItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`) === "sent" ? "sent" : "inbox";
10964
- } catch {
10965
- return "inbox";
10966
- }
10967
- }
10968
- /** Remember the current folder without storing any message content. */
10969
- function writeMailFolderCache(storage, ownerDid, folder) {
10970
- const owner = mailListCacheOwner(ownerDid);
10971
- if (owner === void 0) return;
10972
- try {
10973
- storage.setItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`, folder);
10974
- } catch {}
10975
- }
10976
- //#endregion
10977
- //#region lib/types/client/mail-attachment.js
10978
- /** Browser-only mail attachment selection, encoding, integrity, and download helpers. */
10979
- function invalid(message) {
10980
- throw new TypeError(message);
10981
- }
10982
- function fileName(value) {
10983
- if (value.length === 0 || value.trim() !== value || value.replace(/[. ]+$/u, "") !== value || value === "." || value === ".." || new TextEncoder().encode(value).byteLength > 255 || /[\\/\p{C}]/u.test(value)) invalid("附件文件名无效。");
10984
- return value;
10985
- }
10986
- function contentType(value) {
10987
- if (value === "") return "application/octet-stream";
10988
- if (!/^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+$/u.test(value)) invalid("附件 MIME 类型无效。");
10989
- return value;
10990
- }
10991
- function assertLimits(limits) {
10992
- if (!Number.isSafeInteger(limits.maxCount) || limits.maxCount < 0 || !Number.isSafeInteger(limits.maxBytes) || limits.maxBytes < 1 || !Number.isSafeInteger(limits.totalMaxBytes) || limits.totalMaxBytes < limits.maxBytes) invalid("邮件附件限制暂不可用。");
10993
- }
10994
- function base64(bytes) {
10995
- let binary = "";
10996
- const chunkSize = 32768;
10997
- for (let offset = 0; offset < bytes.length; offset += chunkSize) binary += String.fromCharCode(...bytes.subarray(offset, offset + chunkSize));
10998
- return btoa(binary);
10999
- }
11000
- /** Append browser File references after enforcing the exact Host-owned limits. */
11001
- function selectMailAttachments(current, selected, limits, createId) {
11002
- assertLimits(limits);
11003
- const additions = Array.from(selected, (file) => ({
11004
- id: createId(),
11005
- file,
11006
- fileName: fileName(file.name),
11007
- contentType: contentType(file.type),
11008
- sizeBytes: file.size,
11009
- lastModified: file.lastModified
11010
- }));
11011
- const combined = [...current, ...additions];
11012
- if (combined.length > limits.maxCount) invalid(`邮件最多选择 ${limits.maxCount} 个附件。`);
11013
- for (const attachment of combined) {
11014
- if (!Number.isSafeInteger(attachment.sizeBytes) || attachment.sizeBytes < 0) invalid("附件大小无效。");
11015
- if (attachment.sizeBytes > limits.maxBytes) invalid(`单个附件不能超过 ${limits.maxBytes} bytes。`);
11016
- }
11017
- const total = combined.reduce((sum, attachment) => sum + attachment.sizeBytes, 0);
11018
- if (!Number.isSafeInteger(total) || total > limits.totalMaxBytes) invalid(`附件总大小不能超过 ${limits.totalMaxBytes} bytes。`);
11019
- return combined;
11020
- }
11021
- /** Re-read the same approved File objects and return JSON-safe Remote attachments. */
11022
- async function encodeMailAttachments(attachments, limits) {
11023
- selectMailAttachments([], attachments.map((value) => value.file), limits, () => "validation-only");
11024
- const encoded = [];
11025
- for (const attachment of attachments) {
11026
- if (attachment.file.name !== attachment.fileName || contentType(attachment.file.type) !== attachment.contentType || attachment.file.size !== attachment.sizeBytes || attachment.file.lastModified !== attachment.lastModified) invalid(`附件 ${attachment.fileName} 已发生变化,请重新选择。`);
11027
- let buffer;
11028
- try {
11029
- buffer = await attachment.file.arrayBuffer();
11030
- } catch {
11031
- invalid(`无法读取附件 ${attachment.fileName},请重新选择。`);
11032
- }
11033
- const bytes = new Uint8Array(buffer);
11034
- if (bytes.byteLength !== attachment.sizeBytes) invalid(`附件 ${attachment.fileName} 的大小已发生变化,请重新选择。`);
11035
- encoded.push({
11036
- fileName: attachment.fileName,
11037
- contentType: attachment.contentType,
11038
- sizeBytes: bytes.byteLength,
11039
- bytesBase64: base64(bytes)
11040
- });
11041
- }
11042
- return encoded;
11043
- }
11044
- /** Return canonical download metadata only when the service supplied every required field. */
11045
- function downloadableMailAttachment(value, maxBytes) {
11046
- if (!Number.isSafeInteger(value.index) || value.index < 0 || value.index > 4294967295) return void 0;
11047
- if (value.fileName === void 0 || value.contentType === void 0 || value.sizeBytes === void 0) return void 0;
11048
- if (!/^(?:0|[1-9][0-9]*)$/u.test(value.sizeBytes)) return void 0;
11049
- const sizeBytes = Number(value.sizeBytes);
11050
- if (!Number.isSafeInteger(sizeBytes) || sizeBytes < 0 || sizeBytes > maxBytes) return void 0;
11051
- try {
11052
- return {
11053
- index: value.index,
11054
- fileName: fileName(value.fileName),
11055
- contentType: contentType(value.contentType),
11056
- sizeBytes
11057
- };
11058
- } catch {
11059
- return;
11060
- }
11061
- }
11062
- /** Validate exact metadata, canonical Base64, byte length, and SHA-256 before download. */
11063
- async function prepareMailAttachmentDownload(value, expected, maxBytes) {
11064
- if (fileName(value.fileName) !== expected.fileName || contentType(value.contentType) !== expected.contentType || value.sizeBytes !== expected.sizeBytes || value.sizeBytes > maxBytes) invalid("下载附件与邮件元数据不一致。");
11065
- if (!/^[a-f0-9]{64}$/u.test(value.sha256)) invalid("下载附件完整性信息无效。");
11066
- const expectedEncodedLength = Math.ceil(value.sizeBytes / 3) * 4;
11067
- if (value.bytesBase64.length !== expectedEncodedLength || value.bytesBase64.length % 4 !== 0 || !/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/u.test(value.bytesBase64)) invalid("下载附件编码无效。");
11068
- let binary;
11313
+ function readMailFolderCache(storage, ownerDid) {
11314
+ const owner = mailListCacheOwner(ownerDid);
11315
+ if (owner === void 0) return "inbox";
11069
11316
  try {
11070
- binary = atob(value.bytesBase64);
11317
+ return storage.getItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`) === "sent" ? "sent" : "inbox";
11071
11318
  } catch {
11072
- invalid("下载附件编码无效。");
11319
+ return "inbox";
11073
11320
  }
11074
- const bytes = Uint8Array.from(binary, (character) => character.charCodeAt(0));
11075
- if (bytes.byteLength !== value.sizeBytes || base64(bytes) !== value.bytesBase64) invalid("下载附件大小或编码不一致。");
11076
- const digest = new Uint8Array(await crypto.subtle.digest("SHA-256", bytes));
11077
- if (Array.from(digest, (byte) => byte.toString(16).padStart(2, "0")).join("") !== value.sha256) invalid("下载附件完整性校验失败。");
11078
- return {
11079
- fileName: expected.fileName,
11080
- contentType: expected.contentType,
11081
- bytes
11082
- };
11083
11321
  }
11084
- /** Trigger one download and always revoke the temporary object URL immediately. */
11085
- function savePreparedMailAttachment(value) {
11086
- const url = URL.createObjectURL(new Blob([value.bytes], { type: value.contentType }));
11087
- const anchor = document.createElement("a");
11322
+ /** Remember the current folder without storing any message content. */
11323
+ function writeMailFolderCache(storage, ownerDid, folder) {
11324
+ const owner = mailListCacheOwner(ownerDid);
11325
+ if (owner === void 0) return;
11088
11326
  try {
11089
- anchor.href = url;
11090
- anchor.download = value.fileName;
11091
- anchor.hidden = true;
11092
- document.body.append(anchor);
11093
- anchor.click();
11094
- } finally {
11095
- anchor.remove();
11096
- URL.revokeObjectURL(url);
11097
- }
11098
- }
11099
- /** Execute the exact Browser UI download path: Remote, integrity check, Blob, and save click. */
11100
- async function downloadAndSaveMailAttachment(download, request, expected, maxBytes, active = () => true) {
11101
- const result = await download(request);
11102
- if (!active()) return false;
11103
- if (!result.ok) invalid(result.error);
11104
- const prepared = await prepareMailAttachmentDownload(result.value, expected, maxBytes);
11105
- if (!active()) return false;
11106
- savePreparedMailAttachment(prepared);
11107
- return true;
11327
+ storage.setItem(`${FOLDER_PREFIX}${encodeURIComponent(owner)}`, folder);
11328
+ } catch {}
11108
11329
  }
11109
11330
  //#endregion
11110
11331
  //#region \0dsh-awiki-css:AwikiMail.module.css.mjs
11111
- const css$1 = ".eMUW5a_mail{background:var(--dsw-alias-bg-layer-1);flex:1;grid-template-columns:240px 320px minmax(420px,1fr);min-height:0;display:grid;position:relative}.eMUW5a_sidebar,.eMUW5a_mailList,.eMUW5a_mailDetail{min-width:0;min-height:0}.eMUW5a_sidebar{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex-direction:column;display:flex}.eMUW5a_accountCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;gap:3px;margin:0 14px 12px;padding:10px 12px;display:grid}.eMUW5a_accountCard small,.eMUW5a_accountCard span{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.eMUW5a_accountCard strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.eMUW5a_accountCard .eMUW5a_accountStatus{color:var(--dsw-alias-state-success-primary)}.eMUW5a_folderNav{gap:4px;padding:0 10px;display:grid}.eMUW5a_folderNav button{min-height:38px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:9px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;padding:0 10px;display:grid}.eMUW5a_folderNav button:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_folderNav button[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.eMUW5a_folderNav small{min-width:20px;color:var(--dsw-alias-brand-primary);text-align:right}.eMUW5a_folderRow{color:var(--dsw-alias-label-secondary);border-radius:9px;grid-template-columns:minmax(0,1fr) 38px;display:grid}.eMUW5a_folderRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_folderRow[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.eMUW5a_folderRow>button{color:inherit;background:0 0;border-radius:0}.eMUW5a_folderRow>button:hover{background:0 0}.eMUW5a_folderRow>.eMUW5a_composeIconButton{border-radius:8px;grid-template-columns:1fr;place-items:center;gap:0;width:38px;padding:0}.eMUW5a_folderRow>.eMUW5a_composeIconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailList{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;position:relative}.eMUW5a_listHeader,.eMUW5a_detailHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:9px;min-height:56px;padding:0 12px;display:flex}.eMUW5a_listHeader>div,.eMUW5a_detailHeader>div{flex-direction:column;flex:1;min-width:0;display:flex}.eMUW5a_listHeader strong,.eMUW5a_detailHeader strong,.eMUW5a_listHeader small,.eMUW5a_detailHeader small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eMUW5a_listHeader strong,.eMUW5a_detailHeader strong{font-size:13px;line-height:20px}.eMUW5a_listHeader small,.eMUW5a_detailHeader small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_listHeader>button,.eMUW5a_detailBack{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;place-items:center;padding:0;display:grid}.eMUW5a_listHeader>button:hover,.eMUW5a_detailBack:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.eMUW5a_listHeader>button:disabled{opacity:.5;cursor:default}.eMUW5a_detailBack{display:none}.eMUW5a_listHeader svg,.eMUW5a_loadingState svg{animation:none}.eMUW5a_listHeader button:disabled svg,.eMUW5a_loadingState svg{animation:1s linear infinite eMUW5a_mail-spin}.eMUW5a_listHeader>.eMUW5a_listBack{display:none}@keyframes eMUW5a_mail-spin{to{transform:rotate(360deg)}}.eMUW5a_rows{flex:1;min-height:0;padding:6px;overflow:auto}.eMUW5a_mailRow{width:100%;min-height:82px;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:10px;grid-template-columns:7px minmax(0,1fr) auto;gap:7px;padding:10px 9px;display:grid;position:relative}.eMUW5a_mailRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailRow[data-active]{background:var(--dsw-alias-interactive-bg-active)}.eMUW5a_unreadDot{background:0 0;border-radius:50%;align-self:start;width:6px;height:6px;margin-top:7px}.eMUW5a_mailRow[data-unread] .eMUW5a_unreadDot{background:var(--dsw-alias-brand-primary)}.eMUW5a_rowContent{flex-direction:column;gap:2px;min-width:0;display:flex}.eMUW5a_rowTop{align-items:center;gap:8px;display:flex}.eMUW5a_rowTop strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;line-height:18px;overflow:hidden}.eMUW5a_mailRow[data-unread] .eMUW5a_rowTop strong,.eMUW5a_mailRow[data-unread] .eMUW5a_rowSubject{font-weight:600}.eMUW5a_rowTop time{color:var(--dsw-alias-label-tertiary);flex:none;font-size:10px;line-height:15px}.eMUW5a_rowSubject,.eMUW5a_rowPreview{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eMUW5a_rowSubject{color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px}.eMUW5a_rowPreview{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_rowAttachment{color:var(--dsw-alias-label-tertiary);align-self:end;align-items:center;gap:2px;display:flex}.eMUW5a_rowAttachment small{font-size:10px}.eMUW5a_inlineError,.eMUW5a_detailError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;font-size:11px;line-height:16px;display:flex}.eMUW5a_inlineError button{color:inherit;cursor:pointer;background:0 0;border:0;flex:none;text-decoration:underline}.eMUW5a_loadingState,.eMUW5a_emptyState,.eMUW5a_detailEmpty{color:var(--dsw-alias-label-tertiary);justify-content:center;align-items:center;gap:8px;font-size:12px;display:flex}.eMUW5a_loadingState{pointer-events:none;position:absolute;inset:56px 0 0}.eMUW5a_emptyState{flex-direction:column;min-height:180px}.eMUW5a_emptyState p,.eMUW5a_detailEmpty p{margin:0}.eMUW5a_loadMore{background:var(--dsw-alias-button-elevated-fill);min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;border:0;border-radius:9px;margin:7px}.eMUW5a_loadMore:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailDetail{background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;position:relative}.eMUW5a_detailEmpty{flex-direction:column;flex:1}.eMUW5a_detailEmpty button{background:var(--dsw-alias-button-primary-fill);min-height:34px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:9px;padding:0 14px}.eMUW5a_markReadButton{border:1px solid var(--dsw-alias-border-l2);min-height:30px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex:none;padding:0 9px;font-size:11px}.eMUW5a_markReadButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_markReadButton:disabled{opacity:.5;cursor:default}.eMUW5a_messageBody{flex:1;min-height:0;padding:22px 24px;overflow:auto}.eMUW5a_messageMeta{border-bottom:1px solid var(--dsw-alias-border-l1);padding-bottom:18px}.eMUW5a_messageMeta h3{overflow-wrap:anywhere;margin:0 0 5px;font-size:18px;line-height:27px}.eMUW5a_messageMeta>time{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_messageMeta dl{gap:3px;margin:14px 0 0;display:grid}.eMUW5a_messageMeta dl>div{grid-template-columns:48px minmax(0,1fr);gap:8px;font-size:11px;line-height:17px;display:grid}.eMUW5a_messageMeta dt{color:var(--dsw-alias-label-tertiary)}.eMUW5a_messageMeta dd{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0}.eMUW5a_untrustedNotice{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-tertiary);border-radius:8px;align-items:center;gap:7px;margin:16px 0;padding:8px 10px;font-size:11px;line-height:16px;display:flex}.eMUW5a_plainBody{min-height:120px;color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:22px}.eMUW5a_truncatedNotice{color:var(--dsw-alias-state-warn-label);margin:14px 0 0;font-size:11px}.eMUW5a_attachments{border-top:1px solid var(--dsw-alias-border-l1);gap:8px;min-width:0;margin-top:22px;padding-top:16px;display:grid}.eMUW5a_attachments h4{margin:0;font-size:12px;line-height:18px}.eMUW5a_attachments>div{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:9px;align-items:center;gap:9px;min-width:0;max-width:100%;padding:9px 10px;display:flex}.eMUW5a_attachments>div>span{flex-direction:column;flex:1;min-width:0;display:flex}.eMUW5a_attachments strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.eMUW5a_attachments small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.eMUW5a_attachments button,.eMUW5a_selectedAttachments button{border:1px solid var(--dsw-alias-border-l2);min-height:30px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex:none;padding:0 10px;font-size:11px}.eMUW5a_attachments button:hover,.eMUW5a_selectedAttachments button:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_attachments button:disabled,.eMUW5a_selectedAttachments button:disabled{opacity:.5;cursor:default}.eMUW5a_attachments .eMUW5a_attachmentDownloadError{color:var(--dsw-alias-state-error-primary);overflow-wrap:anywhere}.eMUW5a_notice{z-index:6;box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);max-width:min(360px,100% - 32px);color:var(--dsw-alias-label-primary-inverted);box-shadow:var(--dsw-shadow-lv2);overflow-wrap:anywhere;pointer-events:none;text-align:center;border-radius:9px;padding:10px 14px;font-size:12px;line-height:18px;animation:2.4s both eMUW5a_mail-notice;position:absolute;top:16px;left:50%;transform:translate(-50%)}@keyframes eMUW5a_mail-notice{0%{opacity:0;transform:translate(-50%,-6px)}8%,88%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-4px)}}.eMUW5a_composer{flex-direction:column;flex:1;min-height:0;display:flex}.eMUW5a_composeFields{flex-direction:column;flex:1;gap:11px;min-height:0;padding:18px 20px;display:flex;overflow:auto}.eMUW5a_composeFields label{color:var(--dsw-alias-label-secondary);grid-template-rows:max-content max-content;gap:5px;font-size:11px;line-height:16px;display:grid}.eMUW5a_composeFields input,.eMUW5a_composeFields textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;resize:vertical;border-radius:9px;padding:8px 10px}.eMUW5a_composeFields input{height:38px}.eMUW5a_composeFields .eMUW5a_bodyField{flex:1;grid-template-rows:max-content minmax(160px,1fr);min-height:160px}.eMUW5a_bodyField textarea{resize:none;min-height:160px}.eMUW5a_composeAttachments{gap:9px;display:grid}.eMUW5a_attachmentPickerRow{align-items:center;gap:10px;display:flex}.eMUW5a_attachmentPickerRow>small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.eMUW5a_attachmentPicker{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);appearance:none;background:var(--dsw-alias-bg-layer-1);height:30px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;white-space:nowrap;border-radius:7px;flex:none;justify-content:center;align-items:center;gap:5px;padding:0 10px;font-size:11px;font-weight:500;line-height:16px;display:inline-flex}.eMUW5a_attachmentPicker:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_attachmentPicker:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:2px}.eMUW5a_attachmentPicker:disabled{opacity:.5;cursor:default}.eMUW5a_attachmentInput{display:none}.eMUW5a_selectedAttachments{gap:7px;display:grid}.eMUW5a_selectedAttachments>div{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:9px;align-items:center;gap:9px;padding:8px 9px;display:flex}.eMUW5a_selectedAttachments>div>span{flex-direction:column;flex:1;min-width:0;display:flex}.eMUW5a_selectedAttachments strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.eMUW5a_selectedAttachments small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.eMUW5a_selectedAttachments>p{color:var(--dsw-alias-label-tertiary);margin:0;font-size:10px;line-height:15px}.eMUW5a_composeError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:11px;line-height:16px}.eMUW5a_composeFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;gap:8px;padding:10px 14px;display:flex}.eMUW5a_cancelButton,.eMUW5a_sendButton{cursor:pointer;min-height:34px;font:inherit;border-radius:9px;justify-content:center;align-items:center;gap:6px;padding:0 13px;display:flex}.eMUW5a_cancelButton{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:0 0}.eMUW5a_sendButton{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-inverted);border:0}.eMUW5a_cancelButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_sendButton:hover{background:var(--dsw-alias-button-primary-hover)}.eMUW5a_confirmSummary{color:var(--dsw-alias-label-secondary);gap:6px;display:grid}.eMUW5a_confirmSummary p,.eMUW5a_discardText{overflow-wrap:anywhere;margin:0}@media (width<=1119px){.eMUW5a_mail{grid-template-columns:220px minmax(0,1fr)}.eMUW5a_mailList,.eMUW5a_mailDetail{grid-area:1/2}.eMUW5a_mailDetail,.eMUW5a_mail[data-detail-active] .eMUW5a_mailList{display:none}.eMUW5a_mail[data-detail-active] .eMUW5a_mailDetail{display:flex}.eMUW5a_detailBack{display:grid}}@media (width<=719px){.eMUW5a_mail{grid-template-columns:1fr}.eMUW5a_sidebar,.eMUW5a_mailList,.eMUW5a_mailDetail{grid-area:1/1}.eMUW5a_mailList,.eMUW5a_mailDetail,.eMUW5a_mail[data-pane=list] .eMUW5a_sidebar,.eMUW5a_mail[data-pane=detail] .eMUW5a_sidebar{display:none}.eMUW5a_mail[data-pane=list] .eMUW5a_mailList,.eMUW5a_mail[data-pane=detail] .eMUW5a_mailDetail{display:flex}.eMUW5a_listHeader>.eMUW5a_listBack{display:grid}.eMUW5a_messageBody{padding:18px}}@media (prefers-reduced-motion:reduce){.eMUW5a_listHeader button:disabled svg,.eMUW5a_loadingState svg,.eMUW5a_notice{animation:none}}";
11112
- const tagId$1 = "@awiki/dsh-plugin/AwikiMail.module.css";
11113
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
11332
+ const css$2 = ".eMUW5a_mail{background:var(--dsw-alias-bg-layer-1);flex:1;grid-template-columns:240px 320px minmax(420px,1fr);min-height:0;display:grid;position:relative}.eMUW5a_sidebar,.eMUW5a_mailList,.eMUW5a_mailDetail{min-width:0;min-height:0}.eMUW5a_sidebar{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);flex-direction:column;display:flex}.eMUW5a_accountCard{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);border-radius:10px;gap:3px;margin:0 14px 12px;padding:10px 12px;display:grid}.eMUW5a_accountCard small,.eMUW5a_accountCard span{color:var(--dsw-alias-label-tertiary);text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.eMUW5a_accountCard strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;line-height:18px;overflow:hidden}.eMUW5a_accountCard .eMUW5a_accountStatus{color:var(--dsw-alias-state-success-primary)}.eMUW5a_folderNav{gap:4px;padding:0 10px;display:grid}.eMUW5a_folderNav button{min-height:38px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:9px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;padding:0 10px;display:grid}.eMUW5a_folderNav button:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_folderNav button[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.eMUW5a_folderNav small{min-width:20px;color:var(--dsw-alias-brand-primary);text-align:right}.eMUW5a_folderRow{color:var(--dsw-alias-label-secondary);border-radius:9px;grid-template-columns:minmax(0,1fr) 38px;display:grid}.eMUW5a_folderRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_folderRow[data-active]{background:var(--dsw-alias-interactive-bg-active);color:var(--dsw-alias-label-primary)}.eMUW5a_folderRow>button{color:inherit;background:0 0;border-radius:0}.eMUW5a_folderRow>button:hover{background:0 0}.eMUW5a_folderRow>.eMUW5a_composeIconButton{border-radius:8px;grid-template-columns:1fr;place-items:center;gap:0;width:38px;padding:0}.eMUW5a_folderRow>.eMUW5a_composeIconButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailList{border-right:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;position:relative}.eMUW5a_listHeader,.eMUW5a_detailHeader{border-bottom:1px solid var(--dsw-alias-border-l1);flex:none;align-items:center;gap:9px;min-height:56px;padding:0 12px;display:flex}.eMUW5a_listHeader>div,.eMUW5a_detailHeader>div{flex-direction:column;flex:1;min-width:0;display:flex}.eMUW5a_listHeader strong,.eMUW5a_detailHeader strong,.eMUW5a_listHeader small,.eMUW5a_detailHeader small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eMUW5a_listHeader strong,.eMUW5a_detailHeader strong{font-size:13px;line-height:20px}.eMUW5a_listHeader small,.eMUW5a_detailHeader small{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_listHeader>button,.eMUW5a_detailBack{width:30px;height:30px;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:0;border-radius:8px;flex:none;place-items:center;padding:0;display:grid}.eMUW5a_listHeader>button:hover,.eMUW5a_detailBack:hover{background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}.eMUW5a_listHeader>button:disabled{opacity:.5;cursor:default}.eMUW5a_detailBack{display:none}.eMUW5a_listHeader svg,.eMUW5a_loadingState svg{animation:none}.eMUW5a_listHeader button:disabled svg,.eMUW5a_loadingState svg{animation:1s linear infinite eMUW5a_mail-spin}@keyframes eMUW5a_mail-spin{to{transform:rotate(360deg)}}.eMUW5a_rows{flex:1;min-height:0;padding:6px;overflow:auto}.eMUW5a_mailRow{width:100%;min-height:82px;color:inherit;cursor:pointer;font:inherit;text-align:left;background:0 0;border:0;border-radius:10px;grid-template-columns:7px minmax(0,1fr) auto;gap:7px;padding:10px 9px;display:grid;position:relative}.eMUW5a_mailRow:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailRow[data-active]{background:var(--dsw-alias-interactive-bg-active)}.eMUW5a_unreadDot{background:0 0;border-radius:50%;align-self:start;width:6px;height:6px;margin-top:7px}.eMUW5a_mailRow[data-unread] .eMUW5a_unreadDot{background:var(--dsw-alias-brand-primary)}.eMUW5a_rowContent{flex-direction:column;gap:2px;min-width:0;display:flex}.eMUW5a_rowTop{align-items:center;gap:8px;display:flex}.eMUW5a_rowTop strong{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12px;line-height:18px;overflow:hidden}.eMUW5a_mailRow[data-unread] .eMUW5a_rowTop strong,.eMUW5a_mailRow[data-unread] .eMUW5a_rowSubject{font-weight:600}.eMUW5a_rowTop time{color:var(--dsw-alias-label-tertiary);flex:none;font-size:10px;line-height:15px}.eMUW5a_rowSubject,.eMUW5a_rowPreview{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.eMUW5a_rowSubject{color:var(--dsw-alias-label-primary);font-size:12px;line-height:18px}.eMUW5a_rowPreview{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_rowAttachment{color:var(--dsw-alias-label-tertiary);align-self:end;align-items:center;gap:2px;display:flex}.eMUW5a_rowAttachment small{font-size:10px}.eMUW5a_inlineError,.eMUW5a_detailError{background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);justify-content:space-between;align-items:center;gap:8px;padding:8px 12px;font-size:11px;line-height:16px;display:flex}.eMUW5a_inlineError button{color:inherit;cursor:pointer;background:0 0;border:0;flex:none;text-decoration:underline}.eMUW5a_loadingState,.eMUW5a_emptyState,.eMUW5a_detailEmpty{color:var(--dsw-alias-label-tertiary);justify-content:center;align-items:center;gap:8px;font-size:12px;display:flex}.eMUW5a_loadingState{pointer-events:none;position:absolute;inset:56px 0 0}.eMUW5a_emptyState{flex-direction:column;min-height:180px}.eMUW5a_emptyState p,.eMUW5a_detailEmpty p{margin:0}.eMUW5a_loadMore{background:var(--dsw-alias-button-elevated-fill);min-height:34px;color:var(--dsw-alias-label-secondary);cursor:pointer;font:inherit;border:0;border-radius:9px;margin:7px}.eMUW5a_loadMore:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_mailDetail{background:var(--dsw-alias-bg-layer-1);flex-direction:column;display:flex;position:relative}.eMUW5a_detailEmpty{flex-direction:column;flex:1}.eMUW5a_detailEmpty button{background:var(--dsw-alias-button-primary-fill);min-height:34px;color:var(--dsw-alias-label-primary-inverted);cursor:pointer;border:0;border-radius:9px;padding:0 14px}.eMUW5a_markReadButton{border:1px solid var(--dsw-alias-border-l2);min-height:30px;color:var(--dsw-alias-label-primary);cursor:pointer;font:inherit;background:0 0;border-radius:8px;flex:none;padding:0 9px;font-size:11px}.eMUW5a_markReadButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_markReadButton:disabled{opacity:.5;cursor:default}.eMUW5a_messageBody{flex:1;min-height:0;padding:22px 24px;overflow:auto}.eMUW5a_messageMeta{border-bottom:1px solid var(--dsw-alias-border-l1);padding-bottom:18px}.eMUW5a_messageMeta h3{overflow-wrap:anywhere;margin:0 0 5px;font-size:18px;line-height:27px}.eMUW5a_messageMeta>time{color:var(--dsw-alias-label-tertiary);font-size:11px;line-height:16px}.eMUW5a_messageMeta dl{gap:3px;margin:14px 0 0;display:grid}.eMUW5a_messageMeta dl>div{grid-template-columns:48px minmax(0,1fr);gap:8px;font-size:11px;line-height:17px;display:grid}.eMUW5a_messageMeta dt{color:var(--dsw-alias-label-tertiary)}.eMUW5a_messageMeta dd{color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere;margin:0}.eMUW5a_untrustedNotice{background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-tertiary);border-radius:8px;align-items:center;gap:7px;margin:16px 0;padding:8px 10px;font-size:11px;line-height:16px;display:flex}.eMUW5a_plainBody{min-height:120px;color:var(--dsw-alias-label-primary);white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:22px}.eMUW5a_truncatedNotice{color:var(--dsw-alias-state-warn-label);margin:14px 0 0;font-size:11px}.eMUW5a_attachments{border-top:1px solid var(--dsw-alias-border-l1);gap:8px;margin-top:22px;padding-top:16px;display:grid}.eMUW5a_attachments h4{margin:0;font-size:12px;line-height:18px}.eMUW5a_attachments>div{border:1px solid var(--dsw-alias-border-l1);background:var(--dsw-alias-bg-layer-2);border-radius:9px;align-items:center;gap:9px;padding:9px 10px;display:flex}.eMUW5a_attachments>div>span{flex-direction:column;min-width:0;display:flex}.eMUW5a_attachments strong{text-overflow:ellipsis;white-space:nowrap;font-size:11px;line-height:16px;overflow:hidden}.eMUW5a_attachments small{color:var(--dsw-alias-label-tertiary);font-size:10px;line-height:15px}.eMUW5a_notice{z-index:6;box-sizing:border-box;background:var(--dsw-alias-button-primary-fill);max-width:min(360px,100% - 32px);color:var(--dsw-alias-label-primary-inverted);box-shadow:var(--dsw-shadow-lv2);overflow-wrap:anywhere;pointer-events:none;text-align:center;border-radius:9px;padding:10px 14px;font-size:12px;line-height:18px;animation:2.4s both eMUW5a_mail-notice;position:absolute;top:16px;left:50%;transform:translate(-50%)}@keyframes eMUW5a_mail-notice{0%{opacity:0;transform:translate(-50%,-6px)}8%,88%{opacity:1;transform:translate(-50%)}to{opacity:0;transform:translate(-50%,-4px)}}.eMUW5a_composer{flex-direction:column;flex:1;min-height:0;display:flex}.eMUW5a_composeFields{flex-direction:column;flex:1;gap:11px;min-height:0;padding:18px 20px;display:flex;overflow:auto}.eMUW5a_composeFields label{color:var(--dsw-alias-label-secondary);grid-template-rows:max-content max-content;gap:5px;font-size:11px;line-height:16px;display:grid}.eMUW5a_composeFields input,.eMUW5a_composeFields textarea{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-2);width:100%;color:var(--dsw-alias-label-primary);font:inherit;resize:vertical;border-radius:9px;padding:8px 10px}.eMUW5a_composeFields input{height:38px}.eMUW5a_composeFields .eMUW5a_bodyField{flex:1;grid-template-rows:max-content minmax(160px,1fr);min-height:160px}.eMUW5a_bodyField textarea{resize:none;min-height:160px}.eMUW5a_composeError{color:var(--dsw-alias-state-error-primary);margin:0;font-size:11px;line-height:16px}.eMUW5a_composeFooter{border-top:1px solid var(--dsw-alias-border-l1);flex:none;justify-content:flex-end;gap:8px;padding:10px 14px;display:flex}.eMUW5a_cancelButton,.eMUW5a_sendButton{cursor:pointer;min-height:34px;font:inherit;border-radius:9px;justify-content:center;align-items:center;gap:6px;padding:0 13px;display:flex}.eMUW5a_cancelButton{border:1px solid var(--dsw-alias-border-l2);color:var(--dsw-alias-label-primary);background:0 0}.eMUW5a_sendButton{background:var(--dsw-alias-button-primary-fill);color:var(--dsw-alias-label-primary-inverted);border:0}.eMUW5a_cancelButton:hover{background:var(--dsw-alias-interactive-bg-hover)}.eMUW5a_sendButton:hover{background:var(--dsw-alias-button-primary-hover)}.eMUW5a_confirmSummary{color:var(--dsw-alias-label-secondary);gap:6px;display:grid}.eMUW5a_confirmSummary p,.eMUW5a_discardText{overflow-wrap:anywhere;margin:0}@media (width<=1119px){.eMUW5a_mail{grid-template-columns:220px minmax(0,1fr)}.eMUW5a_mailList,.eMUW5a_mailDetail{grid-area:1/2}.eMUW5a_mailDetail,.eMUW5a_mail[data-detail-active] .eMUW5a_mailList{display:none}.eMUW5a_mail[data-detail-active] .eMUW5a_mailDetail{display:flex}.eMUW5a_detailBack{display:grid}}@media (width<=719px){.eMUW5a_mail{grid-template-columns:1fr}.eMUW5a_sidebar,.eMUW5a_mailList,.eMUW5a_mailDetail{grid-area:1/1}.eMUW5a_mailList,.eMUW5a_mailDetail,.eMUW5a_mail[data-pane=list] .eMUW5a_sidebar,.eMUW5a_mail[data-pane=detail] .eMUW5a_sidebar{display:none}.eMUW5a_mail[data-pane=list] .eMUW5a_mailList,.eMUW5a_mail[data-pane=detail] .eMUW5a_mailDetail{display:flex}.eMUW5a_messageBody{padding:18px}}@media (prefers-reduced-motion:reduce){.eMUW5a_listHeader button:disabled svg,.eMUW5a_loadingState svg,.eMUW5a_notice{animation:none}}";
11333
+ const tagId$2 = "@awiki/dsh-plugin/AwikiMail.module.css";
11334
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
11114
11335
  const tag = document.createElement("style");
11115
11336
  tag.dataset.plugin = "@awiki/dsh-plugin";
11116
- tag.dataset.pluginCss = tagId$1;
11117
- tag.textContent = css$1;
11337
+ tag.dataset.pluginCss = tagId$2;
11338
+ tag.textContent = css$2;
11118
11339
  document.head.appendChild(tag);
11119
11340
  }
11120
11341
  var _dsh_awiki_css_AwikiMail_module_css_default = {
11121
11342
  "accountCard": "eMUW5a_accountCard",
11122
11343
  "accountStatus": "eMUW5a_accountStatus",
11123
- "attachmentDownloadError": "eMUW5a_attachmentDownloadError",
11124
- "attachmentInput": "eMUW5a_attachmentInput",
11125
- "attachmentPicker": "eMUW5a_attachmentPicker",
11126
- "attachmentPickerRow": "eMUW5a_attachmentPickerRow",
11127
11344
  "attachments": "eMUW5a_attachments",
11128
11345
  "bodyField": "eMUW5a_bodyField",
11129
11346
  "cancelButton": "eMUW5a_cancelButton",
11130
- "composeAttachments": "eMUW5a_composeAttachments",
11131
11347
  "composeError": "eMUW5a_composeError",
11132
11348
  "composeFields": "eMUW5a_composeFields",
11133
11349
  "composeFooter": "eMUW5a_composeFooter",
@@ -11143,7 +11359,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11143
11359
  "folderNav": "eMUW5a_folderNav",
11144
11360
  "folderRow": "eMUW5a_folderRow",
11145
11361
  "inlineError": "eMUW5a_inlineError",
11146
- "listBack": "eMUW5a_listBack",
11147
11362
  "listHeader": "eMUW5a_listHeader",
11148
11363
  "loadingState": "eMUW5a_loadingState",
11149
11364
  "loadMore": "eMUW5a_loadMore",
@@ -11164,7 +11379,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11164
11379
  "rows": "eMUW5a_rows",
11165
11380
  "rowSubject": "eMUW5a_rowSubject",
11166
11381
  "rowTop": "eMUW5a_rowTop",
11167
- "selectedAttachments": "eMUW5a_selectedAttachments",
11168
11382
  "sendButton": "eMUW5a_sendButton",
11169
11383
  "sidebar": "eMUW5a_sidebar",
11170
11384
  "truncatedNotice": "eMUW5a_truncatedNotice",
@@ -11210,11 +11424,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11210
11424
  function utf8Bytes(value) {
11211
11425
  return new TextEncoder().encode(value).byteLength;
11212
11426
  }
11213
- function displayBytes(value) {
11214
- if (value < 1024) return `${value} bytes`;
11215
- if (value < 1048576) return `${(value / 1024).toFixed(value < 10240 ? 1 : 0)} KiB`;
11216
- return `${(value / 1048576).toFixed(value < 10485760 ? 1 : 0)} MiB`;
11217
- }
11218
11427
  function browserLocalStorage() {
11219
11428
  try {
11220
11429
  return window.localStorage;
@@ -11351,10 +11560,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11351
11560
  const [cc, setCc] = (0, react.useState)("");
11352
11561
  const [subject, setSubject] = (0, react.useState)("");
11353
11562
  const [bodyText, setBodyText] = (0, react.useState)("");
11354
- const [attachmentLimits, setAttachmentLimits] = (0, react.useState)(null);
11355
- const [attachments, setAttachments] = (0, react.useState)([]);
11356
- const [attachmentError, setAttachmentError] = (0, react.useState)(null);
11357
- const [downloadStates, setDownloadStates] = (0, react.useState)({});
11358
11563
  const [composeError, setComposeError] = (0, react.useState)(null);
11359
11564
  const [confirmOpen, setConfirmOpen] = (0, react.useState)(false);
11360
11565
  const [discardOpen, setDiscardOpen] = (0, react.useState)(false);
@@ -11365,8 +11570,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11365
11570
  const loadGeneration = (0, react.useRef)(0);
11366
11571
  const detailGeneration = (0, react.useRef)(0);
11367
11572
  const noticeRevision = (0, react.useRef)(0);
11368
- const attachmentRevision = (0, react.useRef)(0);
11369
- const fileInput = (0, react.useRef)(null);
11370
11573
  const visibleUnreadCount = (0, react.useMemo)(() => items.reduce((total, item) => total + (item.unread ? 1 : 0), 0), [items]);
11371
11574
  (0, react.useEffect)(() => {
11372
11575
  props.onUnreadCountChange(inboxUnreadCount);
@@ -11415,7 +11618,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11415
11618
  setListError(null);
11416
11619
  setNotice(null);
11417
11620
  const cacheVisible = hydrateListCache(requestedFolder);
11418
- const configRequest = props.getConfig();
11419
11621
  const accountRequest = props.getMailAccount();
11420
11622
  const inboxRequest = props.listMailInbox({
11421
11623
  folder: requestedFolder,
@@ -11423,13 +11625,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11423
11625
  limit: 20,
11424
11626
  offset: 0
11425
11627
  });
11426
- const configResult = await configRequest;
11427
- if (generation !== loadGeneration.current) return;
11428
- setAttachmentLimits(configResult.ok ? {
11429
- maxCount: configResult.value.mailAttachmentMaxCount,
11430
- maxBytes: configResult.value.mailAttachmentMaxBytes,
11431
- totalMaxBytes: configResult.value.mailAttachmentTotalMaxBytes
11432
- } : null);
11433
11628
  const accountResult = await accountRequest;
11434
11629
  if (generation !== loadGeneration.current) return;
11435
11630
  if (accountResult.ok) setAccount(accountResult.value);
@@ -11475,7 +11670,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11475
11670
  setSelectedId(null);
11476
11671
  setMessage(null);
11477
11672
  setDetailError(null);
11478
- setDownloadStates({});
11479
11673
  if (!hydrateListCache(nextFolder)) applyListPage(nextFolder, {
11480
11674
  items: [],
11481
11675
  hasMore: false
@@ -11488,7 +11682,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11488
11682
  setCompose(false);
11489
11683
  setSelectedId(summary.id);
11490
11684
  setMessage(null);
11491
- setDownloadStates({});
11492
11685
  setDetailLoading(true);
11493
11686
  setDetailError(null);
11494
11687
  setNotice(null);
@@ -11568,14 +11761,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11568
11761
  showNotice(result.value.updated > 0 ? "已标为已读。" : "该邮件已经是已读状态。");
11569
11762
  };
11570
11763
  const requestSend = () => {
11571
- if (attachmentError !== null) {
11572
- setComposeError(attachmentError);
11573
- return;
11574
- }
11575
- if (attachments.length > 0 && attachmentLimits === null) {
11576
- setComposeError("邮件附件限制暂不可用,请稍后刷新邮箱再试。");
11577
- return;
11578
- }
11579
11764
  const validated = validateDraft$1(to, cc, subject, bodyText);
11580
11765
  if (!validated.ok) {
11581
11766
  setComposeError(validated.error);
@@ -11589,32 +11774,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11589
11774
  setCc("");
11590
11775
  setSubject("");
11591
11776
  setBodyText("");
11592
- setAttachments([]);
11593
- setAttachmentError(null);
11594
- if (fileInput.current !== null) fileInput.current.value = "";
11595
- setComposeError(null);
11596
- };
11597
- const chooseAttachments = (files) => {
11598
- if (files === null || files.length === 0) return;
11599
- if (attachmentLimits === null) {
11600
- setAttachmentError("邮件附件限制暂不可用,请稍后刷新邮箱再试。");
11601
- return;
11602
- }
11603
- try {
11604
- const next = selectMailAttachments(attachments, files, attachmentLimits, () => {
11605
- attachmentRevision.current += 1;
11606
- return `mail-attachment-${attachmentRevision.current}`;
11607
- });
11608
- setAttachments(next);
11609
- setAttachmentError(null);
11610
- setComposeError(null);
11611
- } catch (error) {
11612
- setAttachmentError(error instanceof TypeError ? error.message : "无法选择这些附件。");
11613
- }
11614
- };
11615
- const removeAttachment = (id) => {
11616
- setAttachments((current) => current.filter((attachment) => attachment.id !== id));
11617
- setAttachmentError(null);
11618
11777
  setComposeError(null);
11619
11778
  };
11620
11779
  const confirmSend = async () => {
@@ -11624,27 +11783,12 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11624
11783
  setComposeError(validated.error);
11625
11784
  return;
11626
11785
  }
11627
- if (attachmentError !== null || attachments.length > 0 && attachmentLimits === null) {
11628
- setConfirmOpen(false);
11629
- setComposeError(attachmentError ?? "邮件附件限制暂不可用,请稍后刷新邮箱再试。");
11630
- return;
11631
- }
11632
11786
  setSending(true);
11633
- let encodedAttachments = [];
11634
- try {
11635
- if (attachments.length > 0) encodedAttachments = await encodeMailAttachments(attachments, attachmentLimits);
11636
- } catch (error) {
11637
- setSending(false);
11638
- setConfirmOpen(false);
11639
- setComposeError(error instanceof TypeError ? error.message : "无法读取附件,请重新选择后再试。");
11640
- return;
11641
- }
11642
11787
  const request = {
11643
11788
  to: validated.value.to,
11644
11789
  cc: validated.value.cc,
11645
11790
  subject: validated.value.subject,
11646
- bodyText: validated.value.bodyText,
11647
- ...encodedAttachments.length === 0 ? {} : { attachments: encodedAttachments }
11791
+ bodyText: validated.value.bodyText
11648
11792
  };
11649
11793
  const result = await props.sendMail(request);
11650
11794
  setSending(false);
@@ -11657,7 +11801,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11657
11801
  setComposeError("邮件服务没有接受本次发送,请检查内容后重试。");
11658
11802
  return;
11659
11803
  }
11660
- const acceptedWithWarning = result.value.warnings.length > 0;
11804
+ const warningText = result.value.warnings.length === 0 ? "" : `,服务返回 ${result.value.warnings.length} 条提示`;
11661
11805
  clearDraft();
11662
11806
  setFolder("sent");
11663
11807
  const storage = browserLocalStorage();
@@ -11670,9 +11814,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11670
11814
  setCompose(false);
11671
11815
  setPane("list");
11672
11816
  refresh("sent");
11673
- showNotice(acceptedWithWarning ? `邮件已被服务接受,但返回 ${result.value.warnings.length} 条本地记录提示,请勿立即重复发送。` : "邮件已发送。");
11817
+ showNotice(`邮件已发送${warningText}。`);
11674
11818
  };
11675
- const dirty = to.trim() !== "" || cc.trim() !== "" || subject.trim() !== "" || bodyText.trim() !== "" || attachments.length > 0;
11819
+ const dirty = to.trim() !== "" || cc.trim() !== "" || subject.trim() !== "" || bodyText.trim() !== "";
11676
11820
  const cancelCompose = () => {
11677
11821
  if (dirty) {
11678
11822
  setDiscardOpen(true);
@@ -11682,39 +11826,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11682
11826
  setPane("list");
11683
11827
  };
11684
11828
  const selectedSummary = items.find((item) => item.id === selectedId);
11685
- const attachmentTotalBytes = attachments.reduce((sum, attachment) => sum + attachment.sizeBytes, 0);
11686
- const downloadAttachment = async (attachment) => {
11687
- if (message === null || attachmentLimits === null) return;
11688
- const expected = downloadableMailAttachment(attachment, attachmentLimits.maxBytes);
11689
- if (expected === void 0 || downloadStates[attachment.index]?.status === "loading") return;
11690
- const generation = detailGeneration.current;
11691
- const localMessageId = message.summary.id;
11692
- setDownloadStates((current) => ({
11693
- ...current,
11694
- [attachment.index]: { status: "loading" }
11695
- }));
11696
- try {
11697
- if (!await downloadAndSaveMailAttachment(props.downloadMailAttachment, {
11698
- localMessageId,
11699
- attachmentIndex: attachment.index
11700
- }, expected, attachmentLimits.maxBytes, () => generation === detailGeneration.current && message.summary.id === localMessageId)) return;
11701
- setDownloadStates((current) => {
11702
- const next = { ...current };
11703
- delete next[attachment.index];
11704
- return next;
11705
- });
11706
- showNotice(`已开始下载 ${expected.fileName}。`);
11707
- } catch (error) {
11708
- if (generation !== detailGeneration.current || message.summary.id !== localMessageId) return;
11709
- setDownloadStates((current) => ({
11710
- ...current,
11711
- [attachment.index]: {
11712
- status: "error",
11713
- error: error instanceof TypeError ? error.message : "无法保存附件,请重试。"
11714
- }
11715
- }));
11716
- }
11717
- };
11718
11829
  return (0, react_jsx_runtime.jsxs)("div", {
11719
11830
  className: _dsh_awiki_css_AwikiMail_module_css_default.mail,
11720
11831
  "data-pane": pane,
@@ -11780,31 +11891,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11780
11891
  children: [
11781
11892
  (0, react_jsx_runtime.jsxs)("header", {
11782
11893
  className: _dsh_awiki_css_AwikiMail_module_css_default.listHeader,
11783
- children: [
11784
- (0, react_jsx_runtime.jsx)("button", {
11785
- type: "button",
11786
- className: _dsh_awiki_css_AwikiMail_module_css_default.listBack,
11787
- "aria-label": "返回邮箱导航",
11788
- onClick: () => {
11789
- setPane("folders");
11790
- },
11791
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, { size: 14 })
11792
- }),
11793
- (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: MAIL_FOLDER_COPY[folder].title }), (0, react_jsx_runtime.jsxs)("small", { children: [
11794
- items.length,
11795
- " 封邮件",
11796
- folder === "inbox" && visibleUnreadCount > 0 ? ` · ${visibleUnreadCount} 封未读` : ""
11797
- ] })] }),
11798
- (0, react_jsx_runtime.jsx)("button", {
11799
- type: "button",
11800
- "aria-label": `刷新${MAIL_FOLDER_COPY[folder].title}`,
11801
- disabled: listLoading,
11802
- onClick: () => {
11803
- refresh();
11804
- },
11805
- children: listLoading ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLoadingOutline16, { size: 15 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline14, { size: 15 })
11806
- })
11807
- ]
11894
+ children: [(0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: MAIL_FOLDER_COPY[folder].title }), (0, react_jsx_runtime.jsxs)("small", { children: [
11895
+ items.length,
11896
+ " 封邮件",
11897
+ folder === "inbox" && visibleUnreadCount > 0 ? ` · ${visibleUnreadCount} 封未读` : ""
11898
+ ] })] }), (0, react_jsx_runtime.jsx)("button", {
11899
+ type: "button",
11900
+ "aria-label": `刷新${MAIL_FOLDER_COPY[folder].title}`,
11901
+ disabled: listLoading,
11902
+ onClick: () => {
11903
+ refresh();
11904
+ },
11905
+ children: listLoading ? (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconLoadingOutline16, { size: 15 }) : (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline14, { size: 15 })
11906
+ })]
11808
11907
  }),
11809
11908
  listError !== null && (0, react_jsx_runtime.jsxs)("div", {
11810
11909
  className: _dsh_awiki_css_AwikiMail_module_css_default.inlineError,
@@ -11865,7 +11964,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11865
11964
  "aria-label": `返回${MAIL_FOLDER_COPY[folder].title}`,
11866
11965
  onClick: cancelCompose,
11867
11966
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, { size: 14 })
11868
- }), (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: "写邮件" }), (0, react_jsx_runtime.jsx)("small", { children: "发送纯文本邮件,可添加附件" })] })]
11967
+ }), (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: "写邮件" }), (0, react_jsx_runtime.jsx)("small", { children: "发送纯文本邮件" })] })]
11869
11968
  }),
11870
11969
  (0, react_jsx_runtime.jsxs)("div", {
11871
11970
  className: _dsh_awiki_css_AwikiMail_module_css_default.composeFields,
@@ -11873,7 +11972,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11873
11972
  (0, react_jsx_runtime.jsxs)("label", { children: ["收件人", (0, react_jsx_runtime.jsx)("textarea", {
11874
11973
  value: to,
11875
11974
  rows: 1,
11876
- disabled: sending,
11877
11975
  autoFocus: true,
11878
11976
  placeholder: "alice@example.com,可用逗号或换行分隔",
11879
11977
  onChange: (event) => {
@@ -11884,7 +11982,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11884
11982
  (0, react_jsx_runtime.jsxs)("label", { children: ["抄送", (0, react_jsx_runtime.jsx)("textarea", {
11885
11983
  value: cc,
11886
11984
  rows: 1,
11887
- disabled: sending,
11888
11985
  placeholder: "选填",
11889
11986
  onChange: (event) => {
11890
11987
  setCc(event.target.value);
@@ -11893,7 +11990,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11893
11990
  })] }),
11894
11991
  (0, react_jsx_runtime.jsxs)("label", { children: ["主题", (0, react_jsx_runtime.jsx)("input", {
11895
11992
  value: subject,
11896
- disabled: sending,
11897
11993
  placeholder: "邮件主题",
11898
11994
  onChange: (event) => {
11899
11995
  setSubject(event.target.value);
@@ -11904,7 +12000,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11904
12000
  className: _dsh_awiki_css_AwikiMail_module_css_default.bodyField,
11905
12001
  children: ["正文", (0, react_jsx_runtime.jsx)("textarea", {
11906
12002
  value: bodyText,
11907
- disabled: sending,
11908
12003
  placeholder: "输入纯文本邮件正文",
11909
12004
  onChange: (event) => {
11910
12005
  setBodyText(event.target.value);
@@ -11912,65 +12007,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11912
12007
  }
11913
12008
  })]
11914
12009
  }),
11915
- (0, react_jsx_runtime.jsxs)("section", {
11916
- className: _dsh_awiki_css_AwikiMail_module_css_default.composeAttachments,
11917
- "aria-label": "邮件附件",
11918
- children: [(0, react_jsx_runtime.jsxs)("div", {
11919
- className: _dsh_awiki_css_AwikiMail_module_css_default.attachmentPickerRow,
11920
- children: [
11921
- (0, react_jsx_runtime.jsxs)("button", {
11922
- type: "button",
11923
- className: _dsh_awiki_css_AwikiMail_module_css_default.attachmentPicker,
11924
- disabled: sending || attachmentLimits === null || attachmentLimits.maxCount === 0,
11925
- onClick: () => {
11926
- fileInput.current?.click();
11927
- },
11928
- children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPaperclipOutline16, { size: 14 }), "添加附件"]
11929
- }),
11930
- (0, react_jsx_runtime.jsx)("input", {
11931
- ref: fileInput,
11932
- className: _dsh_awiki_css_AwikiMail_module_css_default.attachmentInput,
11933
- type: "file",
11934
- multiple: true,
11935
- "aria-label": "选择邮件附件",
11936
- disabled: sending || attachmentLimits === null || attachmentLimits.maxCount === 0,
11937
- onChange: (event) => {
11938
- chooseAttachments(event.currentTarget.files);
11939
- event.currentTarget.value = "";
11940
- }
11941
- }),
11942
- (0, react_jsx_runtime.jsx)("small", { children: attachmentLimits === null ? "附件限制暂不可用" : `最多 ${attachmentLimits.maxCount} 个 · 单个 ${displayBytes(attachmentLimits.maxBytes)} · 总计 ${displayBytes(attachmentLimits.totalMaxBytes)}` })
11943
- ]
11944
- }), attachments.length > 0 && (0, react_jsx_runtime.jsxs)("div", {
11945
- className: _dsh_awiki_css_AwikiMail_module_css_default.selectedAttachments,
11946
- children: [attachments.map((attachment) => (0, react_jsx_runtime.jsxs)("div", { children: [
11947
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPaperclipOutline16, { size: 15 }),
11948
- (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: attachment.fileName }), (0, react_jsx_runtime.jsxs)("small", { children: [
11949
- attachment.contentType,
11950
- " · ",
11951
- displayBytes(attachment.sizeBytes)
11952
- ] })] }),
11953
- (0, react_jsx_runtime.jsx)("button", {
11954
- type: "button",
11955
- disabled: sending,
11956
- "aria-label": `移除附件 ${attachment.fileName}`,
11957
- onClick: () => {
11958
- removeAttachment(attachment.id);
11959
- },
11960
- children: "移除"
11961
- })
11962
- ] }, attachment.id)), (0, react_jsx_runtime.jsxs)("p", { children: [
11963
- attachments.length,
11964
- " 个附件 · 共 ",
11965
- displayBytes(attachmentTotalBytes)
11966
- ] })]
11967
- })]
11968
- }),
11969
- attachmentError !== null && (0, react_jsx_runtime.jsx)("p", {
11970
- className: _dsh_awiki_css_AwikiMail_module_css_default.composeError,
11971
- role: "alert",
11972
- children: attachmentError
11973
- }),
11974
12010
  composeError !== null && (0, react_jsx_runtime.jsx)("p", {
11975
12011
  className: _dsh_awiki_css_AwikiMail_module_css_default.composeError,
11976
12012
  role: "alert",
@@ -11989,7 +12025,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11989
12025
  }), (0, react_jsx_runtime.jsxs)("button", {
11990
12026
  type: "submit",
11991
12027
  className: _dsh_awiki_css_AwikiMail_module_css_default.sendButton,
11992
- disabled: sending || attachmentError !== null,
12028
+ disabled: sending,
11993
12029
  children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline16, { size: 15 }), "发送"]
11994
12030
  })]
11995
12031
  })
@@ -12014,10 +12050,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12014
12050
  className: _dsh_awiki_css_AwikiMail_module_css_default.detailBack,
12015
12051
  "aria-label": `返回${MAIL_FOLDER_COPY[folder].title}`,
12016
12052
  onClick: () => {
12017
- detailGeneration.current += 1;
12018
12053
  setSelectedId(null);
12019
12054
  setMessage(null);
12020
- setDownloadStates({});
12021
12055
  setPane("list");
12022
12056
  },
12023
12057
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, { size: 14 })
@@ -12073,33 +12107,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12073
12107
  }),
12074
12108
  message.attachments.length > 0 && (0, react_jsx_runtime.jsxs)("section", {
12075
12109
  className: _dsh_awiki_css_AwikiMail_module_css_default.attachments,
12076
- "aria-label": "邮件附件",
12077
- children: [(0, react_jsx_runtime.jsx)("h4", { children: "附件" }), message.attachments.map((attachment) => {
12078
- const downloadable = attachmentLimits === null ? void 0 : downloadableMailAttachment(attachment, attachmentLimits.maxBytes);
12079
- const state = downloadStates[attachment.index];
12080
- return (0, react_jsx_runtime.jsxs)("div", { children: [
12081
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPaperclipOutline16, { size: 15 }),
12082
- (0, react_jsx_runtime.jsxs)("span", { children: [
12083
- (0, react_jsx_runtime.jsx)("strong", { children: attachment.fileName ?? `附件 ${attachment.index + 1}` }),
12084
- (0, react_jsx_runtime.jsx)("small", { children: [attachment.contentType, attachment.sizeBytes === void 0 ? void 0 : `${attachment.sizeBytes} bytes`].filter(Boolean).join(" · ") || "暂无更多信息" }),
12085
- downloadable === void 0 && (0, react_jsx_runtime.jsx)("small", { children: "当前记录缺少完整、可验证的下载元数据。" }),
12086
- state?.status === "error" && (0, react_jsx_runtime.jsx)("small", {
12087
- className: _dsh_awiki_css_AwikiMail_module_css_default.attachmentDownloadError,
12088
- role: "alert",
12089
- children: state.error
12090
- })
12091
- ] }),
12092
- downloadable !== void 0 && (0, react_jsx_runtime.jsx)("button", {
12093
- type: "button",
12094
- disabled: state?.status === "loading",
12095
- "aria-label": `${state?.status === "error" ? "重试下载" : "下载附件"} ${downloadable.fileName}`,
12096
- onClick: () => {
12097
- downloadAttachment(attachment);
12098
- },
12099
- children: state?.status === "loading" ? "下载中…" : state?.status === "error" ? "重试" : "下载"
12100
- })
12101
- ] }, attachment.index);
12102
- })]
12110
+ "aria-label": "附件元数据",
12111
+ children: [(0, react_jsx_runtime.jsx)("h4", { children: "附件(仅元数据)" }), message.attachments.map((attachment) => (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPaperclipOutline16, { size: 15 }), (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: attachment.fileName ?? `附件 ${attachment.index + 1}` }), (0, react_jsx_runtime.jsx)("small", { children: [attachment.contentType, attachment.sizeBytes === void 0 ? void 0 : `${attachment.sizeBytes} bytes`].filter(Boolean).join(" · ") || "暂无更多信息" })] })] }, attachment.index))]
12103
12112
  })
12104
12113
  ]
12105
12114
  })
@@ -12152,20 +12161,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12152
12161
  splitAddresses(cc).length,
12153
12162
  " 人"
12154
12163
  ] }),
12155
- (0, react_jsx_runtime.jsxs)("p", { children: ["主题:", subject.trim()] }),
12156
- (0, react_jsx_runtime.jsxs)("p", { children: [
12157
- "附件:",
12158
- attachments.length,
12159
- " 个 · 共 ",
12160
- displayBytes(attachmentTotalBytes)
12161
- ] }),
12162
- attachments.map((attachment) => (0, react_jsx_runtime.jsxs)("p", { children: [
12163
- attachment.fileName,
12164
- " · ",
12165
- attachment.contentType,
12166
- " · ",
12167
- displayBytes(attachment.sizeBytes)
12168
- ] }, attachment.id))
12164
+ (0, react_jsx_runtime.jsxs)("p", { children: ["主题:", subject.trim()] })
12169
12165
  ]
12170
12166
  })
12171
12167
  }),
@@ -12176,7 +12172,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12176
12172
  },
12177
12173
  title: "放弃这封邮件?",
12178
12174
  closeLabel: "继续编辑",
12179
- description: "当前不会保存草稿,放弃后文字和附件选择都会被清空。",
12175
+ description: "首版不会保存草稿,放弃后当前内容将被清空。",
12180
12176
  footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
12181
12177
  type: "button",
12182
12178
  variant: "outline",
@@ -12197,7 +12193,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12197
12193
  })] }),
12198
12194
  children: (0, react_jsx_runtime.jsx)("p", {
12199
12195
  className: _dsh_awiki_css_AwikiMail_module_css_default.discardText,
12200
- children: "收件人、主题、正文和已选择的附件都会丢失。"
12196
+ children: "收件人、主题和正文中的未发送内容都会丢失。"
12201
12197
  })
12202
12198
  })
12203
12199
  ]
@@ -12844,6 +12840,247 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12844
12840
  });
12845
12841
  }
12846
12842
  //#endregion
12843
+ //#region \0dsh-awiki-css:AwikiDevices.module.css.mjs
12844
+ const css$1 = ".xQ4iKW_page{align-content:start;gap:16px;height:100%;padding:16px;display:grid;overflow:auto}.xQ4iKW_heading{justify-content:space-between;align-items:start;gap:12px;display:flex}.xQ4iKW_heading h3,.xQ4iKW_heading p,.xQ4iKW_page h4,.xQ4iKW_page p{margin:0}.xQ4iKW_heading p,.xQ4iKW_card small{color:var(--dsw-alias-label-secondary)}.xQ4iKW_card{border:1px solid var(--dsw-alias-border-l1);border-radius:10px;gap:8px;margin-top:8px;padding:12px;display:grid}.xQ4iKW_actions{flex-wrap:wrap;gap:8px;display:flex}.xQ4iKW_sas{letter-spacing:.2em;text-align:center;font-variant-numeric:tabular-nums;font-size:30px}.xQ4iKW_error{color:var(--dsw-alias-state-error-primary)}";
12845
+ const tagId$1 = "@awiki/dsh-plugin/AwikiDevices.module.css";
12846
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
12847
+ const tag = document.createElement("style");
12848
+ tag.dataset.plugin = "@awiki/dsh-plugin";
12849
+ tag.dataset.pluginCss = tagId$1;
12850
+ tag.textContent = css$1;
12851
+ document.head.appendChild(tag);
12852
+ }
12853
+ var _dsh_awiki_css_AwikiDevices_module_css_default = {
12854
+ "actions": "xQ4iKW_actions",
12855
+ "card": "xQ4iKW_card",
12856
+ "error": "xQ4iKW_error",
12857
+ "heading": "xQ4iKW_heading",
12858
+ "page": "xQ4iKW_page",
12859
+ "sas": "xQ4iKW_sas"
12860
+ };
12861
+ //#endregion
12862
+ //#region lib/types/client/AwikiDevices.js
12863
+ /** Foreground-only ready-admin device management. SAS remains component-local. */
12864
+ function AwikiDevices(props) {
12865
+ const [snapshot, setSnapshot] = (0, react.useState)(null);
12866
+ const [progress, setProgress] = (0, react.useState)(null);
12867
+ const [enteredSas, setEnteredSas] = (0, react.useState)("");
12868
+ const [approval, setApproval] = (0, react.useState)("");
12869
+ const [revokeRef, setRevokeRef] = (0, react.useState)(null);
12870
+ const [revokeConfirmation, setRevokeConfirmation] = (0, react.useState)("");
12871
+ const [error, setError] = (0, react.useState)(null);
12872
+ const refresh = async () => {
12873
+ const result = await props.refreshDeviceManagement();
12874
+ if (!result.ok) return setError(result.error);
12875
+ setSnapshot(result.value);
12876
+ if (progress !== null && ![
12877
+ "authorized",
12878
+ "cancelled",
12879
+ "rejected",
12880
+ "expired"
12881
+ ].includes(progress.phase)) {
12882
+ const advanced = await props.startDeviceJoinVerification({ requestRef: progress.requestRef });
12883
+ if (advanced.ok) setProgress(advanced.value);
12884
+ }
12885
+ setError(null);
12886
+ };
12887
+ (0, react.useEffect)(() => {
12888
+ if (!props.active) return;
12889
+ let alive = true;
12890
+ props.refreshDeviceManagement().then((result) => {
12891
+ if (!alive) return;
12892
+ if (result.ok) setSnapshot(result.value);
12893
+ else setError(result.error);
12894
+ });
12895
+ const timer = setInterval(() => {
12896
+ if (alive) refresh();
12897
+ }, 3e3);
12898
+ return () => {
12899
+ alive = false;
12900
+ clearInterval(timer);
12901
+ };
12902
+ }, [
12903
+ props.active,
12904
+ progress?.phase,
12905
+ progress?.requestRef
12906
+ ]);
12907
+ const start = async (requestRef) => {
12908
+ const result = await props.startDeviceJoinVerification({ requestRef });
12909
+ if (!result.ok) return setError(result.error);
12910
+ setProgress(result.value);
12911
+ setError(null);
12912
+ };
12913
+ const approve = async () => {
12914
+ if (progress === null) return;
12915
+ const result = await props.approveDeviceJoin({
12916
+ requestRef: progress.requestRef,
12917
+ enteredSas,
12918
+ confirmation: approval
12919
+ });
12920
+ if (!result.ok) return setError(result.error);
12921
+ setProgress(null);
12922
+ setEnteredSas("");
12923
+ setApproval("");
12924
+ await refresh();
12925
+ };
12926
+ const reject = async (requestRef) => {
12927
+ const result = await props.rejectDeviceJoin({
12928
+ requestRef,
12929
+ reason: "user_rejected"
12930
+ });
12931
+ if (!result.ok) return setError(result.error);
12932
+ setProgress(null);
12933
+ await refresh();
12934
+ };
12935
+ const revoke = async () => {
12936
+ if (revokeRef === null) return;
12937
+ const result = await props.revokeDevice({
12938
+ deviceRef: revokeRef,
12939
+ confirmation: revokeConfirmation
12940
+ });
12941
+ if (!result.ok) return setError(result.error);
12942
+ setSnapshot(result.value);
12943
+ setRevokeRef(null);
12944
+ setRevokeConfirmation("");
12945
+ setError(null);
12946
+ };
12947
+ return (0, react_jsx_runtime.jsxs)("section", {
12948
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.page,
12949
+ "aria-label": "AWiki 设备管理",
12950
+ children: [
12951
+ props.modeTabs,
12952
+ (0, react_jsx_runtime.jsxs)("header", {
12953
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.heading,
12954
+ children: [(0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("h3", { children: "设备" }), (0, react_jsx_runtime.jsx)("p", { children: "只有当前 ready-admin 可以批准或撤销设备。" })] }), (0, react_jsx_runtime.jsx)("button", {
12955
+ type: "button",
12956
+ disabled: props.pending,
12957
+ onClick: () => {
12958
+ refresh();
12959
+ },
12960
+ children: "刷新"
12961
+ })]
12962
+ }),
12963
+ snapshot === null && (0, react_jsx_runtime.jsx)("p", {
12964
+ role: "status",
12965
+ children: "正在读取设备状态…"
12966
+ }),
12967
+ snapshot !== null && !snapshot.canManage && (0, react_jsx_runtime.jsx)("p", { children: "当前设备不是可用的管理设备,不能批准或撤销其他设备。" }),
12968
+ snapshot?.canManage && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
12969
+ (0, react_jsx_runtime.jsxs)("section", { children: [
12970
+ (0, react_jsx_runtime.jsx)("h4", { children: "待加入" }),
12971
+ snapshot.requests.length === 0 && (0, react_jsx_runtime.jsx)("p", { children: "没有待处理请求。" }),
12972
+ snapshot.requests.map((request) => (0, react_jsx_runtime.jsxs)("article", {
12973
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
12974
+ children: [
12975
+ (0, react_jsx_runtime.jsx)("code", { children: request.candidateKeyFingerprint }),
12976
+ (0, react_jsx_runtime.jsxs)("small", { children: [
12977
+ request.state,
12978
+ " · 有效期至 ",
12979
+ request.expiresAt
12980
+ ] }),
12981
+ (0, react_jsx_runtime.jsxs)("div", {
12982
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.actions,
12983
+ children: [(0, react_jsx_runtime.jsx)("button", {
12984
+ type: "button",
12985
+ disabled: props.pending || !request.canStartVerification && !request.claimedByCurrentDevice,
12986
+ onClick: () => {
12987
+ start(request.requestRef);
12988
+ },
12989
+ children: "开始验证"
12990
+ }), (0, react_jsx_runtime.jsx)("button", {
12991
+ type: "button",
12992
+ disabled: props.pending,
12993
+ onClick: () => {
12994
+ reject(request.requestRef);
12995
+ },
12996
+ children: "拒绝"
12997
+ })]
12998
+ })
12999
+ ]
13000
+ }, request.requestRef))
13001
+ ] }),
13002
+ progress?.phase === "sas-ready" && (0, react_jsx_runtime.jsxs)("section", {
13003
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
13004
+ children: [
13005
+ (0, react_jsx_runtime.jsx)("h4", { children: "核对安全码" }),
13006
+ (0, react_jsx_runtime.jsx)("strong", {
13007
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.sas,
13008
+ children: progress.sas
13009
+ }),
13010
+ (0, react_jsx_runtime.jsx)("p", { children: "输入手机显示的 6 位码,并输入 APPROVE。" }),
13011
+ (0, react_jsx_runtime.jsx)("input", {
13012
+ "aria-label": "手机安全码",
13013
+ value: enteredSas,
13014
+ inputMode: "numeric",
13015
+ maxLength: 6,
13016
+ onChange: (event) => {
13017
+ setEnteredSas(event.target.value);
13018
+ }
13019
+ }),
13020
+ (0, react_jsx_runtime.jsx)("input", {
13021
+ "aria-label": "批准确认词",
13022
+ value: approval,
13023
+ autoComplete: "off",
13024
+ onChange: (event) => {
13025
+ setApproval(event.target.value);
13026
+ },
13027
+ placeholder: "APPROVE"
13028
+ }),
13029
+ (0, react_jsx_runtime.jsx)("button", {
13030
+ type: "button",
13031
+ disabled: props.pending || enteredSas.length !== 6 || approval !== "APPROVE",
13032
+ onClick: () => {
13033
+ approve();
13034
+ },
13035
+ children: "批准为 member"
13036
+ })
13037
+ ]
13038
+ }),
13039
+ (0, react_jsx_runtime.jsxs)("section", { children: [(0, react_jsx_runtime.jsx)("h4", { children: "已登记设备" }), snapshot.devices.map((device) => (0, react_jsx_runtime.jsxs)("article", {
13040
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
13041
+ children: [(0, react_jsx_runtime.jsxs)("span", { children: [
13042
+ device.isCurrent ? "当前设备" : "其他设备",
13043
+ " · ",
13044
+ device.role,
13045
+ " · ",
13046
+ device.status
13047
+ ] }), !device.isCurrent && device.status === "active" && (revokeRef === device.deviceRef ? (0, react_jsx_runtime.jsxs)("div", {
13048
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.actions,
13049
+ children: [(0, react_jsx_runtime.jsx)("input", {
13050
+ "aria-label": "撤销确认词",
13051
+ value: revokeConfirmation,
13052
+ onChange: (event) => {
13053
+ setRevokeConfirmation(event.target.value);
13054
+ },
13055
+ placeholder: "REVOKE"
13056
+ }), (0, react_jsx_runtime.jsx)("button", {
13057
+ type: "button",
13058
+ disabled: props.pending || revokeConfirmation !== "REVOKE",
13059
+ onClick: () => {
13060
+ revoke();
13061
+ },
13062
+ children: "确认撤销"
13063
+ })]
13064
+ }) : (0, react_jsx_runtime.jsx)("button", {
13065
+ type: "button",
13066
+ disabled: props.pending,
13067
+ onClick: () => {
13068
+ setRevokeRef(device.deviceRef);
13069
+ setRevokeConfirmation("");
13070
+ },
13071
+ children: "撤销"
13072
+ }))]
13073
+ }, device.deviceRef))] })
13074
+ ] }),
13075
+ error !== null && (0, react_jsx_runtime.jsx)("p", {
13076
+ className: _dsh_awiki_css_AwikiDevices_module_css_default.error,
13077
+ role: "alert",
13078
+ children: error
13079
+ })
13080
+ ]
13081
+ });
13082
+ }
13083
+ //#endregion
12847
13084
  //#region lib/types/client/AwikiProfileCard.js
12848
13085
  const MAX_DISPLAY_NAME = 50;
12849
13086
  const MAX_BIO = 100;
@@ -13312,23 +13549,35 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13312
13549
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.modeTabs,
13313
13550
  role: "tablist",
13314
13551
  "aria-label": "AWiki 功能",
13315
- children: [(0, react_jsx_runtime.jsx)("button", {
13316
- type: "button",
13317
- role: "tab",
13318
- "aria-selected": props.mode === "chat",
13319
- onClick: () => {
13320
- props.onChange("chat");
13321
- },
13322
- children: "会话"
13323
- }), (0, react_jsx_runtime.jsxs)("button", {
13324
- type: "button",
13325
- role: "tab",
13326
- "aria-selected": props.mode === "mail",
13327
- onClick: () => {
13328
- props.onChange("mail");
13329
- },
13330
- children: ["邮件", props.mailUnreadCount > 0 && (0, react_jsx_runtime.jsx)("small", { children: props.mailUnreadCount > 99 ? "99+" : props.mailUnreadCount })]
13331
- })]
13552
+ children: [
13553
+ (0, react_jsx_runtime.jsx)("button", {
13554
+ type: "button",
13555
+ role: "tab",
13556
+ "aria-selected": props.mode === "chat",
13557
+ onClick: () => {
13558
+ props.onChange("chat");
13559
+ },
13560
+ children: "会话"
13561
+ }),
13562
+ (0, react_jsx_runtime.jsxs)("button", {
13563
+ type: "button",
13564
+ role: "tab",
13565
+ "aria-selected": props.mode === "mail",
13566
+ onClick: () => {
13567
+ props.onChange("mail");
13568
+ },
13569
+ children: ["邮件", props.mailUnreadCount > 0 && (0, react_jsx_runtime.jsx)("small", { children: props.mailUnreadCount > 99 ? "99+" : props.mailUnreadCount })]
13570
+ }),
13571
+ (0, react_jsx_runtime.jsx)("button", {
13572
+ type: "button",
13573
+ role: "tab",
13574
+ "aria-selected": props.mode === "devices",
13575
+ onClick: () => {
13576
+ props.onChange("devices");
13577
+ },
13578
+ children: "设备"
13579
+ })
13580
+ ]
13332
13581
  });
13333
13582
  }
13334
13583
  /** Incoming sender label: WNS display name, then Handle, then DID. */
@@ -14027,40 +14276,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14027
14276
  }), props.composeMenu]
14028
14277
  })]
14029
14278
  }),
14030
- view.groupRecovery !== null && (0, react_jsx_runtime.jsxs)("div", {
14031
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.groupRecoveryNotice,
14032
- "data-status": view.groupRecovery.status,
14033
- role: view.groupRecovery.status === "blocked" ? "alert" : "status",
14034
- children: [
14035
- (0, react_jsx_runtime.jsxs)("span", { children: [(0, react_jsx_runtime.jsx)("strong", { children: view.groupRecovery.status === "pending" ? "正在恢复旧群聊身份" : view.groupRecovery.status === "blocked" ? "部分旧群聊需要处理" : "暂时无法检查旧群聊身份" }), (0, react_jsx_runtime.jsx)("small", { children: view.groupRecovery.status === "pending" ? `${view.groupRecovery.pending} 个群聊尚未完成,其他会话不受影响。` : view.groupRecovery.status === "blocked" ? `${view.groupRecovery.blocked} 个群聊未能自动恢复,其他会话不受影响。` : "私聊和新群聊不受影响,可稍后重试。" })] }),
14036
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
14037
- label: "重试群聊身份恢复",
14038
- side: "right",
14039
- children: (0, react_jsx_runtime.jsx)("button", {
14040
- type: "button",
14041
- "aria-label": "重试群聊身份恢复",
14042
- disabled: view.pending !== null,
14043
- onClick: () => {
14044
- props.retryGroupRebindRecovery();
14045
- },
14046
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconRefreshOutline14, { size: 14 })
14047
- })
14048
- }),
14049
- (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Tooltip, {
14050
- label: "稍后处理",
14051
- side: "right",
14052
- children: (0, react_jsx_runtime.jsx)("button", {
14053
- type: "button",
14054
- "aria-label": "关闭旧群聊处理提示",
14055
- disabled: view.pending !== null,
14056
- onClick: () => {
14057
- props.dismissGroupRecoveryNotice();
14058
- },
14059
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconCloseOutline16, { size: 14 })
14060
- })
14061
- })
14062
- ]
14063
- }),
14064
14279
  (0, react_jsx_runtime.jsxs)("div", {
14065
14280
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.conversationList,
14066
14281
  children: [view.conversations.map((conversation) => (0, react_jsx_runtime.jsx)(ConversationRow, {
@@ -15042,95 +15257,113 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15042
15257
  recoveryOperationId: view.recoveryOperationId,
15043
15258
  recoveryProgress: view.recoveryProgress,
15044
15259
  pending: view.pending !== null,
15045
- profileName: view.profileName,
15046
- legacySharedStateDetected: view.legacySharedStateDetected
15260
+ handleRecoveryPhoneEnabled: view.handleRecoveryPhoneEnabled
15047
15261
  })
15048
15262
  }),
15049
- view.status === "ready" && view.sessionStatus === "active" && view.identity !== null && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)("div", {
15050
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15051
- "data-active": mode === "chat" || void 0,
15052
- hidden: mode !== "chat",
15053
- children: (0, react_jsx_runtime.jsx)(Chat, {
15054
- ...props,
15055
- selectConversation,
15056
- view: {
15057
- ...view,
15058
- identity: view.identity
15059
- },
15060
- modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15061
- mode,
15062
- mailUnreadCount,
15063
- onChange: setMode
15064
- }),
15065
- composeMenu: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
15066
- open: menuOpen,
15067
- onClose: () => {
15068
- setMenuOpen(false);
15263
+ view.status === "ready" && view.sessionStatus === "active" && view.identity !== null && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
15264
+ (0, react_jsx_runtime.jsx)("div", {
15265
+ className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15266
+ "data-active": mode === "chat" || void 0,
15267
+ hidden: mode !== "chat",
15268
+ children: (0, react_jsx_runtime.jsx)(Chat, {
15269
+ ...props,
15270
+ selectConversation,
15271
+ view: {
15272
+ ...view,
15273
+ identity: view.identity
15069
15274
  },
15070
- align: "end",
15071
- portal: true,
15072
- compact: true,
15073
- items: [
15074
- {
15075
- id: "direct",
15076
- label: "发起私聊"
15077
- },
15078
- {
15079
- id: "group",
15080
- label: "发起群聊"
15275
+ modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15276
+ mode,
15277
+ mailUnreadCount,
15278
+ onChange: setMode
15279
+ }),
15280
+ composeMenu: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
15281
+ open: menuOpen,
15282
+ onClose: () => {
15283
+ setMenuOpen(false);
15081
15284
  },
15082
- {
15083
- id: "join-group",
15084
- label: "加入群聊"
15085
- }
15086
- ],
15087
- onSelect: (id) => {
15088
- setMenuOpen(false);
15089
- if (id === "direct") setComposeDirect(true);
15090
- if (id === "group") setComposeGroup(true);
15091
- if (id === "join-group") setJoinGroupOpen(true);
15092
- },
15093
- anchor: (0, react_jsx_runtime.jsx)("button", {
15094
- type: "button",
15095
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.rosterAction,
15096
- "aria-label": "发起会话",
15097
- "aria-expanded": menuOpen,
15098
- "aria-haspopup": "menu",
15099
- onClick: () => {
15100
- setMenuOpen((value) => !value);
15285
+ align: "end",
15286
+ portal: true,
15287
+ compact: true,
15288
+ items: [
15289
+ {
15290
+ id: "direct",
15291
+ label: "发起私聊"
15292
+ },
15293
+ {
15294
+ id: "group",
15295
+ label: "发起群聊"
15296
+ },
15297
+ {
15298
+ id: "join-group",
15299
+ label: "加入群聊"
15300
+ }
15301
+ ],
15302
+ onSelect: (id) => {
15303
+ setMenuOpen(false);
15304
+ if (id === "direct") setComposeDirect(true);
15305
+ if (id === "group") setComposeGroup(true);
15306
+ if (id === "join-group") setJoinGroupOpen(true);
15101
15307
  },
15102
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, {})
15308
+ anchor: (0, react_jsx_runtime.jsx)("button", {
15309
+ type: "button",
15310
+ className: _dsh_awiki_css_AwikiOverlay_module_css_default.rosterAction,
15311
+ "aria-label": "发起会话",
15312
+ "aria-expanded": menuOpen,
15313
+ "aria-haspopup": "menu",
15314
+ onClick: () => {
15315
+ setMenuOpen((value) => !value);
15316
+ },
15317
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, {})
15318
+ })
15103
15319
  })
15104
15320
  })
15105
- })
15106
- }), (0, react_jsx_runtime.jsx)("div", {
15107
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15108
- "data-active": mode === "mail" || void 0,
15109
- hidden: mode !== "mail",
15110
- children: (0, react_jsx_runtime.jsx)(AwikiMail, {
15111
- active: mode === "mail",
15112
- cacheOwner: view.identity.did,
15113
- identityCard: mode === "mail" ? (0, react_jsx_runtime.jsx)(AwikiProfileCard, {
15114
- identity: view.identity,
15115
- profile: view.profile,
15321
+ }),
15322
+ (0, react_jsx_runtime.jsx)("div", {
15323
+ className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15324
+ "data-active": mode === "mail" || void 0,
15325
+ hidden: mode !== "mail",
15326
+ children: (0, react_jsx_runtime.jsx)(AwikiMail, {
15327
+ active: mode === "mail",
15328
+ cacheOwner: view.identity.did,
15329
+ identityCard: mode === "mail" ? (0, react_jsx_runtime.jsx)(AwikiProfileCard, {
15330
+ identity: view.identity,
15331
+ profile: view.profile,
15332
+ pending: view.pending !== null,
15333
+ updateProfile: props.updateProfile
15334
+ }) : null,
15335
+ modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15336
+ mode,
15337
+ mailUnreadCount,
15338
+ onChange: setMode
15339
+ }),
15340
+ onUnreadCountChange: setMailUnreadCount,
15341
+ getMailAccount: props.getMailAccount,
15342
+ listMailInbox: props.listMailInbox,
15343
+ readMail: props.readMail,
15344
+ markMailRead: props.markMailRead,
15345
+ sendMail: props.sendMail
15346
+ }, view.identity.did)
15347
+ }),
15348
+ mode === "devices" && (0, react_jsx_runtime.jsx)("div", {
15349
+ className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15350
+ "data-active": true,
15351
+ children: (0, react_jsx_runtime.jsx)(AwikiDevices, {
15352
+ active: true,
15116
15353
  pending: view.pending !== null,
15117
- updateProfile: props.updateProfile
15118
- }) : null,
15119
- modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15120
- mode,
15121
- mailUnreadCount,
15122
- onChange: setMode
15123
- }),
15124
- onUnreadCountChange: setMailUnreadCount,
15125
- getConfig: props.getConfig,
15126
- getMailAccount: props.getMailAccount,
15127
- listMailInbox: props.listMailInbox,
15128
- readMail: props.readMail,
15129
- markMailRead: props.markMailRead,
15130
- sendMail: props.sendMail,
15131
- downloadMailAttachment: props.downloadMailAttachment
15132
- }, view.identity.did)
15133
- })] }),
15354
+ modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15355
+ mode,
15356
+ mailUnreadCount,
15357
+ onChange: setMode
15358
+ }),
15359
+ refreshDeviceManagement: props.refreshDeviceManagement,
15360
+ startDeviceJoinVerification: props.startDeviceJoinVerification,
15361
+ approveDeviceJoin: props.approveDeviceJoin,
15362
+ rejectDeviceJoin: props.rejectDeviceJoin,
15363
+ revokeDevice: props.revokeDevice
15364
+ })
15365
+ })
15366
+ ] }),
15134
15367
  composeDirect && (0, react_jsx_runtime.jsx)("div", {
15135
15368
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.composeBackdrop,
15136
15369
  children: (0, react_jsx_runtime.jsxs)("form", {
@@ -15718,16 +15951,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15718
15951
  /** Bilingual copy for the AWiki identity and installation settings page. */
15719
15952
  const zh = {
15720
15953
  nav: "AWiki",
15721
- intro: "管理 AWiki 租户、身份与本地数据设置。",
15722
- domainLabel: "租户域名",
15723
- domainDescription: "输入纯域名;重启后 User、Message、Mail 与附件服务都会切换到该域名。",
15954
+ intro: "管理 AWiki 身份、域名与本地数据设置。",
15955
+ domainLabel: "默认域名",
15956
+ domainDescription: "输入纯域名,不要包含协议、路径或端口。",
15724
15957
  defaultValue: "默认值:{domain}",
15725
15958
  save: "保存",
15726
15959
  saving: "保存中…",
15727
15960
  reset: "恢复默认值",
15728
15961
  saved: "已保存。",
15729
15962
  restartNotice: "重启 DeepSeek Harness 后生效。",
15730
- identityNotice: "不同域名使用相互隔离的本地身份、消息与身份恢复进度。切回原域名时会恢复该域名原有的本地状态。",
15963
+ identityNotice: "此设置仅影响后续注册和短 Handle 的域名补全,不会改写已经注册的 DID 或 Handle。",
15731
15964
  invalidDomain: "请输入有效的域名,例如 awiki.ai。",
15732
15965
  saveFailed: "未能保存设置,请刷新后重试。",
15733
15966
  loading: "正在读取 AWiki 设置…",
@@ -15750,16 +15983,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15750
15983
  };
15751
15984
  const en = {
15752
15985
  nav: "AWiki",
15753
- intro: "Manage the AWiki tenant, identity, and local data settings.",
15754
- domainLabel: "Tenant domain",
15755
- domainDescription: "Enter a bare domain. After restart, User, Message, Mail, and attachment services all switch to it.",
15986
+ intro: "Manage AWiki identity, domain, and local data settings.",
15987
+ domainLabel: "Default domain",
15988
+ domainDescription: "Enter a bare domain without a protocol, path, or port.",
15756
15989
  defaultValue: "Default: {domain}",
15757
15990
  save: "Save",
15758
15991
  saving: "Saving…",
15759
15992
  reset: "Restore default",
15760
15993
  saved: "Saved.",
15761
15994
  restartNotice: "Restart DeepSeek Harness for the change to take effect.",
15762
- identityNotice: "Each domain uses isolated local identity, message, and identity-recovery state. Switching back restores that domain’s previous local state.",
15995
+ identityNotice: "This affects future registrations and short-Handle completion. It does not rewrite an existing DID or Handle.",
15763
15996
  invalidDomain: "Enter a valid domain, such as awiki.ai.",
15764
15997
  saveFailed: "The setting could not be saved. Refresh and try again.",
15765
15998
  loading: "Loading AWiki settings…",
@@ -16008,6 +16241,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16008
16241
  inspectIdentityAccess: (request) => awiki.inspectIdentityAccess(request),
16009
16242
  sendRegistrationOtp: (request) => awiki.sendRegistrationOtp(request),
16010
16243
  registerIdentity: (request) => awiki.registerIdentity(request),
16244
+ beginDeviceJoin: () => awiki.beginDeviceJoin(),
16245
+ getDeviceJoinStatus: () => awiki.getDeviceJoinStatus(),
16246
+ cancelDeviceJoin: () => awiki.cancelDeviceJoin(),
16247
+ refreshDeviceManagement: () => awiki.refreshDeviceManagement(),
16248
+ startDeviceJoinVerification: (request) => awiki.startDeviceJoinVerification(request),
16249
+ approveDeviceJoin: (request) => awiki.approveDeviceJoin(request),
16250
+ rejectDeviceJoin: (request) => awiki.rejectDeviceJoin(request),
16251
+ revokeDevice: (request) => awiki.revokeDevice(request),
16011
16252
  updateDisplayName: (displayName) => awiki.updateDisplayName(displayName),
16012
16253
  updateProfile: (request) => awiki.updateProfile(request),
16013
16254
  sendRecoveryOtp: (request) => awiki.sendRecoveryOtp(request),
@@ -16017,8 +16258,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16017
16258
  resumeRecovery: () => awiki.resumeRecovery(),
16018
16259
  discardRecovery: () => awiki.discardRecovery(),
16019
16260
  loadMoreConversations: () => awiki.loadMoreConversations(),
16020
- retryGroupRebindRecovery: () => awiki.retryGroupRebindRecovery(),
16021
- dismissGroupRecoveryNotice: () => awiki.dismissGroupRecoveryNotice(),
16022
16261
  hideConversation: (conversationId) => awiki.hideConversation(conversationId),
16023
16262
  restoreConversation: (conversationId) => awiki.restoreConversation(conversationId),
16024
16263
  startDirectChat: (handle) => awiki.startDirectChat(handle),
@@ -16048,13 +16287,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16048
16287
  value: void 0
16049
16288
  } : result;
16050
16289
  },
16051
- getConfig: () => awiki.getConfig(),
16052
16290
  getMailAccount: () => awiki.getMailAccount(),
16053
16291
  listMailInbox: (request) => awiki.listMailInbox(request),
16054
16292
  readMail: (request) => awiki.readMail(request),
16055
16293
  markMailRead: (request) => awiki.markMailRead(request),
16056
- sendMail: (request) => awiki.sendMail(request),
16057
- downloadMailAttachment: (request) => awiki.downloadMailAttachment(request)
16294
+ sendMail: (request) => awiki.sendMail(request)
16058
16295
  })
16059
16296
  }, AwikiOverlay);
16060
16297
  });