@awiki/dsh-plugin 0.3.4 → 0.3.6

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 (88) hide show
  1. package/README.md +60 -51
  2. package/README.zh.md +51 -43
  3. package/cordis.patch.yml +7 -21
  4. package/lib/client.js +785 -1308
  5. package/lib/client.js.map +1 -1
  6. package/lib/index.js +715 -1017
  7. package/lib/provider.js +16 -52
  8. package/lib/{sdk-adapter-BeJakxLP.mjs → sdk-adapter--trNlr-T.mjs} +38 -143
  9. package/lib/typert.host.js +139 -414
  10. package/lib/typert.remote-client.d.ts +5 -19
  11. package/lib/typert.remote-client.d.ts.map +1 -1
  12. package/lib/typert.remote-client.js +139 -414
  13. package/lib/types/client/AwikiIdentityAccess.d.ts +5 -6
  14. package/lib/types/client/AwikiIdentityAccess.d.ts.map +1 -1
  15. package/lib/types/client/AwikiIdentityAccess.js +27 -88
  16. package/lib/types/client/AwikiIdentityAccess.js.map +1 -1
  17. package/lib/types/client/AwikiMail.d.ts +1 -1
  18. package/lib/types/client/AwikiMail.d.ts.map +1 -1
  19. package/lib/types/client/AwikiMail.js +130 -6
  20. package/lib/types/client/AwikiMail.js.map +1 -1
  21. package/lib/types/client/AwikiOverlay.d.ts.map +1 -1
  22. package/lib/types/client/AwikiOverlay.js +3 -4
  23. package/lib/types/client/AwikiOverlay.js.map +1 -1
  24. package/lib/types/client/controller.d.ts +11 -20
  25. package/lib/types/client/controller.d.ts.map +1 -1
  26. package/lib/types/client/controller.js +48 -53
  27. package/lib/types/client/controller.js.map +1 -1
  28. package/lib/types/client/index.d.ts.map +1 -1
  29. package/lib/types/client/index.js +2 -8
  30. package/lib/types/client/index.js.map +1 -1
  31. package/lib/types/client/mail-attachment.d.ts +40 -0
  32. package/lib/types/client/mail-attachment.d.ts.map +1 -0
  33. package/lib/types/client/mail-attachment.js +186 -0
  34. package/lib/types/client/mail-attachment.js.map +1 -0
  35. package/lib/types/client/settings-locales.js +8 -8
  36. package/lib/types/client/settings-locales.js.map +1 -1
  37. package/lib/types/client/slots.d.ts +6 -10
  38. package/lib/types/client/slots.d.ts.map +1 -1
  39. package/lib/types/index.d.ts +28 -59
  40. package/lib/types/index.d.ts.map +1 -1
  41. package/lib/types/index.js +417 -800
  42. package/lib/types/index.js.map +1 -1
  43. package/lib/types/listener-state.d.ts +3 -5
  44. package/lib/types/listener-state.d.ts.map +1 -1
  45. package/lib/types/listener-state.js +13 -28
  46. package/lib/types/listener-state.js.map +1 -1
  47. package/lib/types/listener.d.ts +32 -9
  48. package/lib/types/listener.d.ts.map +1 -1
  49. package/lib/types/listener.js +127 -11
  50. package/lib/types/listener.js.map +1 -1
  51. package/lib/types/mail.d.ts +28 -2
  52. package/lib/types/mail.d.ts.map +1 -1
  53. package/lib/types/mail.js +78 -2
  54. package/lib/types/mail.js.map +1 -1
  55. package/lib/types/profile-state.d.ts +17 -0
  56. package/lib/types/profile-state.d.ts.map +1 -0
  57. package/lib/types/profile-state.js +58 -0
  58. package/lib/types/profile-state.js.map +1 -0
  59. package/lib/types/provider-api.d.ts +36 -100
  60. package/lib/types/provider-api.d.ts.map +1 -1
  61. package/lib/types/provider.d.ts +1 -7
  62. package/lib/types/provider.d.ts.map +1 -1
  63. package/lib/types/provider.js +15 -53
  64. package/lib/types/provider.js.map +1 -1
  65. package/lib/types/sdk-adapter.d.ts +5 -30
  66. package/lib/types/sdk-adapter.d.ts.map +1 -1
  67. package/lib/types/sdk-adapter.js +48 -133
  68. package/lib/types/sdk-adapter.js.map +1 -1
  69. package/lib/types/sent-mail-store.d.ts +7 -2
  70. package/lib/types/sent-mail-store.d.ts.map +1 -1
  71. package/lib/types/sent-mail-store.js +125 -23
  72. package/lib/types/sent-mail-store.js.map +1 -1
  73. package/lib/types/tools.d.ts +1 -1
  74. package/lib/types/tools.d.ts.map +1 -1
  75. package/lib/types/tools.js +20 -4
  76. package/lib/types/tools.js.map +1 -1
  77. package/lib/types/types.d.ts +45 -77
  78. package/lib/types/types.d.ts.map +1 -1
  79. package/lib/types/types.js.map +1 -1
  80. package/package.json +4 -6
  81. package/lib/types/client/AwikiDevices.d.ts +0 -28
  82. package/lib/types/client/AwikiDevices.d.ts.map +0 -1
  83. package/lib/types/client/AwikiDevices.js +0 -85
  84. package/lib/types/client/AwikiDevices.js.map +0 -1
  85. package/lib/types/realtime-supervisor.d.ts +0 -43
  86. package/lib/types/realtime-supervisor.d.ts.map +0 -1
  87. package/lib/types/realtime-supervisor.js +0 -166
  88. package/lib/types/realtime-supervisor.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 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;
592
+ const base64$1 = /^$|^(?:[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);
1329
+ def.pattern ?? (def.pattern = base64$1);
1330
1330
  $ZodStringFormat.init(inst, def);
1331
1331
  inst._zod.bag.contentEncoding = "base64";
1332
1332
  inst._zod.check = (payload) => {
@@ -4112,6 +4112,7 @@ 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"),
4115
4116
  literal("rate-limited"),
4116
4117
  literal("group-membership-required"),
4117
4118
  literal("group-identity-stale"),
@@ -4153,7 +4154,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4153
4154
  })]);
4154
4155
  const _awiki_dsh_plugin_awiki_addGroupMember_parameter_0$schema = object({
4155
4156
  "member": string().readonly(),
4156
- "role": union([literal("member"), literal("admin")]).readonly().optional(),
4157
+ "role": union([literal("admin"), literal("member")]).readonly().optional(),
4157
4158
  "groupDid": intersection(string(), unknown()).readonly()
4158
4159
  });
4159
4160
  const _awiki_dsh_plugin_awiki_addGroupMember_result$schema = union([object({
@@ -4171,6 +4172,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4171
4172
  literal("forbidden"),
4172
4173
  literal("identity-recovery-required"),
4173
4174
  literal("conflict"),
4175
+ literal("state-in-use"),
4174
4176
  literal("rate-limited"),
4175
4177
  literal("group-membership-required"),
4176
4178
  literal("group-identity-stale"),
@@ -4193,139 +4195,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4193
4195
  "handle": intersection(string(), unknown()).readonly().optional()
4194
4196
  }).readonly()
4195
4197
  })]);
4196
- const _awiki_dsh_plugin_awiki_approveDeviceJoin_parameter_0$schema = object({
4197
- "enteredSas": string().readonly(),
4198
- "confirmation": string().readonly(),
4199
- "requestRef": string().readonly()
4200
- });
4201
- const _awiki_dsh_plugin_awiki_approveDeviceJoin_result$schema = union([object({
4202
- "ok": literal(false).readonly(),
4203
- "error": object({
4204
- "code": union([
4205
- literal("not-registered"),
4206
- literal("signed-out"),
4207
- literal("already-registered"),
4208
- literal("invalid-request"),
4209
- literal("invalid-otp"),
4210
- literal("challenge-expired"),
4211
- literal("handle-unavailable"),
4212
- literal("not-found"),
4213
- literal("forbidden"),
4214
- literal("identity-recovery-required"),
4215
- literal("conflict"),
4216
- literal("rate-limited"),
4217
- literal("group-membership-required"),
4218
- literal("group-identity-stale"),
4219
- literal("attachment-too-large"),
4220
- literal("summary-unavailable"),
4221
- literal("summary-timeout"),
4222
- literal("summary-cancelled"),
4223
- literal("summary-invalid-output"),
4224
- literal("summary-failed"),
4225
- literal("delivery-unknown"),
4226
- literal("network"),
4227
- literal("remote")
4228
- ]).readonly(),
4229
- "message": string().readonly()
4230
- }).readonly()
4231
- }), object({
4232
- "ok": literal(true).readonly(),
4233
- "value": object({
4234
- "requestRef": string().readonly(),
4235
- "phase": union([
4236
- literal("pending"),
4237
- literal("verifying"),
4238
- literal("sas-ready"),
4239
- literal("authorized"),
4240
- literal("cancelled"),
4241
- literal("rejected"),
4242
- literal("expired")
4243
- ]).readonly(),
4244
- "expiresAt": string().readonly(),
4245
- "sas": string().readonly().optional()
4246
- }).readonly()
4247
- })]);
4248
- const _awiki_dsh_plugin_awiki_beginDeviceJoin_result$schema = union([object({
4249
- "ok": literal(false).readonly(),
4250
- "error": object({
4251
- "code": union([
4252
- literal("not-registered"),
4253
- literal("signed-out"),
4254
- literal("already-registered"),
4255
- literal("invalid-request"),
4256
- literal("invalid-otp"),
4257
- literal("challenge-expired"),
4258
- literal("handle-unavailable"),
4259
- literal("not-found"),
4260
- literal("forbidden"),
4261
- literal("identity-recovery-required"),
4262
- literal("conflict"),
4263
- literal("rate-limited"),
4264
- literal("group-membership-required"),
4265
- literal("group-identity-stale"),
4266
- literal("attachment-too-large"),
4267
- literal("summary-unavailable"),
4268
- literal("summary-timeout"),
4269
- literal("summary-cancelled"),
4270
- literal("summary-invalid-output"),
4271
- literal("summary-failed"),
4272
- literal("delivery-unknown"),
4273
- literal("network"),
4274
- literal("remote")
4275
- ]).readonly(),
4276
- "message": string().readonly()
4277
- }).readonly()
4278
- }), object({
4279
- "ok": literal(true).readonly(),
4280
- "value": object({
4281
- "phase": union([
4282
- literal("pending"),
4283
- literal("verifying"),
4284
- literal("sas-ready"),
4285
- literal("authorized"),
4286
- literal("cancelled"),
4287
- literal("rejected"),
4288
- literal("expired")
4289
- ]).readonly(),
4290
- "expiresAt": string().readonly(),
4291
- "sas": string().readonly().optional(),
4292
- "completed": boolean().readonly()
4293
- }).readonly()
4294
- })]);
4295
- const _awiki_dsh_plugin_awiki_cancelDeviceJoin_result$schema = union([object({
4296
- "ok": literal(false).readonly(),
4297
- "error": object({
4298
- "code": union([
4299
- literal("not-registered"),
4300
- literal("signed-out"),
4301
- literal("already-registered"),
4302
- literal("invalid-request"),
4303
- literal("invalid-otp"),
4304
- literal("challenge-expired"),
4305
- literal("handle-unavailable"),
4306
- literal("not-found"),
4307
- literal("forbidden"),
4308
- literal("identity-recovery-required"),
4309
- literal("conflict"),
4310
- literal("rate-limited"),
4311
- literal("group-membership-required"),
4312
- literal("group-identity-stale"),
4313
- literal("attachment-too-large"),
4314
- literal("summary-unavailable"),
4315
- literal("summary-timeout"),
4316
- literal("summary-cancelled"),
4317
- literal("summary-invalid-output"),
4318
- literal("summary-failed"),
4319
- literal("delivery-unknown"),
4320
- literal("network"),
4321
- literal("remote")
4322
- ]).readonly(),
4323
- "message": string().readonly()
4324
- }).readonly()
4325
- }), object({
4326
- "ok": literal(true).readonly(),
4327
- "value": object({ "completed": literal(true).readonly() }).readonly()
4328
- })]);
4329
4198
  const _awiki_dsh_plugin_awiki_clearLocalData_parameter_0$schema = object({ "confirmation": string().readonly() });
4330
4199
  const _awiki_dsh_plugin_awiki_clearLocalData_result$schema = union([object({
4331
4200
  "ok": literal(false).readonly(),
@@ -4342,6 +4211,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4342
4211
  literal("forbidden"),
4343
4212
  literal("identity-recovery-required"),
4344
4213
  literal("conflict"),
4214
+ literal("state-in-use"),
4345
4215
  literal("rate-limited"),
4346
4216
  literal("group-membership-required"),
4347
4217
  literal("group-identity-stale"),
@@ -4380,6 +4250,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4380
4250
  literal("forbidden"),
4381
4251
  literal("identity-recovery-required"),
4382
4252
  literal("conflict"),
4253
+ literal("state-in-use"),
4383
4254
  literal("rate-limited"),
4384
4255
  literal("group-membership-required"),
4385
4256
  literal("group-identity-stale"),
@@ -4426,6 +4297,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4426
4297
  literal("forbidden"),
4427
4298
  literal("identity-recovery-required"),
4428
4299
  literal("conflict"),
4300
+ literal("state-in-use"),
4429
4301
  literal("rate-limited"),
4430
4302
  literal("group-membership-required"),
4431
4303
  literal("group-identity-stale"),
@@ -4460,6 +4332,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4460
4332
  literal("forbidden"),
4461
4333
  literal("identity-recovery-required"),
4462
4334
  literal("conflict"),
4335
+ literal("state-in-use"),
4463
4336
  literal("rate-limited"),
4464
4337
  literal("group-membership-required"),
4465
4338
  literal("group-identity-stale"),
@@ -4498,6 +4371,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4498
4371
  literal("forbidden"),
4499
4372
  literal("identity-recovery-required"),
4500
4373
  literal("conflict"),
4374
+ literal("state-in-use"),
4501
4375
  literal("rate-limited"),
4502
4376
  literal("group-membership-required"),
4503
4377
  literal("group-identity-stale"),
@@ -4526,7 +4400,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4526
4400
  "bytesBase64": string().readonly()
4527
4401
  }).readonly()
4528
4402
  })]);
4529
- const _awiki_dsh_plugin_awiki_getConfig_result$schema = union([object({
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({
4530
4408
  "ok": literal(false).readonly(),
4531
4409
  "error": object({
4532
4410
  "code": union([
@@ -4541,6 +4419,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4541
4419
  literal("forbidden"),
4542
4420
  literal("identity-recovery-required"),
4543
4421
  literal("conflict"),
4422
+ literal("state-in-use"),
4544
4423
  literal("rate-limited"),
4545
4424
  literal("group-membership-required"),
4546
4425
  literal("group-identity-stale"),
@@ -4559,12 +4438,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4559
4438
  }), object({
4560
4439
  "ok": literal(true).readonly(),
4561
4440
  "value": object({
4562
- "pollIntervalMs": number().readonly(),
4563
- "attachmentMaxBytes": number().readonly(),
4564
- "handleRecoveryPhoneEnabled": boolean().readonly()
4441
+ "fileName": string().readonly(),
4442
+ "contentType": string().readonly(),
4443
+ "sizeBytes": number().readonly(),
4444
+ "sha256": string().readonly(),
4445
+ "bytesBase64": string().readonly()
4565
4446
  }).readonly()
4566
4447
  })]);
4567
- const _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema = union([object({
4448
+ const _awiki_dsh_plugin_awiki_getConfig_result$schema = union([object({
4568
4449
  "ok": literal(false).readonly(),
4569
4450
  "error": object({
4570
4451
  "code": union([
@@ -4579,6 +4460,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4579
4460
  literal("forbidden"),
4580
4461
  literal("identity-recovery-required"),
4581
4462
  literal("conflict"),
4463
+ literal("state-in-use"),
4582
4464
  literal("rate-limited"),
4583
4465
  literal("group-membership-required"),
4584
4466
  literal("group-identity-stale"),
@@ -4597,32 +4479,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4597
4479
  }), object({
4598
4480
  "ok": literal(true).readonly(),
4599
4481
  "value": object({
4600
- "hiddenConversations": array(object({
4601
- "conversation": union([object({
4602
- "kind": literal("group").readonly(),
4603
- "id": intersection(string(), unknown()).readonly(),
4604
- "groupDid": intersection(string(), unknown()).readonly(),
4605
- "title": string().readonly(),
4606
- "unreadCount": number().readonly().optional(),
4607
- "lastMessageAt": number().readonly().optional(),
4608
- "lastMessagePreview": string().readonly().optional()
4609
- }), object({
4610
- "kind": literal("direct").readonly(),
4611
- "id": intersection(string(), unknown()).readonly(),
4612
- "peerDid": intersection(string(), unknown()).readonly(),
4613
- "peerHandle": intersection(string(), unknown()).readonly().optional(),
4614
- "displayName": string().readonly().optional(),
4615
- "title": string().readonly(),
4616
- "unreadCount": number().readonly().optional(),
4617
- "lastMessageAt": number().readonly().optional(),
4618
- "lastMessagePreview": string().readonly().optional()
4619
- })]).readonly(),
4620
- "hiddenAt": number().readonly()
4621
- })).readonly(),
4622
- "dismissedGroupRecoverySignature": string().readonly().optional()
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()
4623
4490
  }).readonly()
4624
4491
  })]);
4625
- const _awiki_dsh_plugin_awiki_getDeviceJoinStatus_result$schema = union([object({
4492
+ const _awiki_dsh_plugin_awiki_getConversationPreferences_result$schema = union([object({
4626
4493
  "ok": literal(false).readonly(),
4627
4494
  "error": object({
4628
4495
  "code": union([
@@ -4637,6 +4504,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4637
4504
  literal("forbidden"),
4638
4505
  literal("identity-recovery-required"),
4639
4506
  literal("conflict"),
4507
+ literal("state-in-use"),
4640
4508
  literal("rate-limited"),
4641
4509
  literal("group-membership-required"),
4642
4510
  literal("group-identity-stale"),
@@ -4654,20 +4522,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4654
4522
  }).readonly()
4655
4523
  }), object({
4656
4524
  "ok": literal(true).readonly(),
4657
- "value": union([literal(null), object({
4658
- "phase": union([
4659
- literal("pending"),
4660
- literal("verifying"),
4661
- literal("sas-ready"),
4662
- literal("authorized"),
4663
- literal("cancelled"),
4664
- literal("rejected"),
4665
- literal("expired")
4666
- ]).readonly(),
4667
- "expiresAt": string().readonly(),
4668
- "sas": string().readonly().optional(),
4669
- "completed": boolean().readonly()
4670
- })]).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()
4671
4550
  })]);
4672
4551
  const _awiki_dsh_plugin_awiki_getGroup_parameter_0$schema = object({ "groupDid": intersection(string(), unknown()).readonly() });
4673
4552
  const _awiki_dsh_plugin_awiki_getGroup_result$schema = union([object({
@@ -4685,6 +4564,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4685
4564
  literal("forbidden"),
4686
4565
  literal("identity-recovery-required"),
4687
4566
  literal("conflict"),
4567
+ literal("state-in-use"),
4688
4568
  literal("rate-limited"),
4689
4569
  literal("group-membership-required"),
4690
4570
  literal("group-identity-stale"),
@@ -4732,6 +4612,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4732
4612
  literal("forbidden"),
4733
4613
  literal("identity-recovery-required"),
4734
4614
  literal("conflict"),
4615
+ literal("state-in-use"),
4735
4616
  literal("rate-limited"),
4736
4617
  literal("group-membership-required"),
4737
4618
  literal("group-identity-stale"),
@@ -4800,6 +4681,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4800
4681
  literal("forbidden"),
4801
4682
  literal("identity-recovery-required"),
4802
4683
  literal("conflict"),
4684
+ literal("state-in-use"),
4803
4685
  literal("rate-limited"),
4804
4686
  literal("group-membership-required"),
4805
4687
  literal("group-identity-stale"),
@@ -4844,6 +4726,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4844
4726
  literal("forbidden"),
4845
4727
  literal("identity-recovery-required"),
4846
4728
  literal("conflict"),
4729
+ literal("state-in-use"),
4847
4730
  literal("rate-limited"),
4848
4731
  literal("group-membership-required"),
4849
4732
  literal("group-identity-stale"),
@@ -4912,6 +4795,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4912
4795
  literal("forbidden"),
4913
4796
  literal("identity-recovery-required"),
4914
4797
  literal("conflict"),
4798
+ literal("state-in-use"),
4915
4799
  literal("rate-limited"),
4916
4800
  literal("group-membership-required"),
4917
4801
  literal("group-identity-stale"),
@@ -4950,6 +4834,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4950
4834
  literal("forbidden"),
4951
4835
  literal("identity-recovery-required"),
4952
4836
  literal("conflict"),
4837
+ literal("state-in-use"),
4953
4838
  literal("rate-limited"),
4954
4839
  literal("group-membership-required"),
4955
4840
  literal("group-identity-stale"),
@@ -4992,6 +4877,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4992
4877
  literal("forbidden"),
4993
4878
  literal("identity-recovery-required"),
4994
4879
  literal("conflict"),
4880
+ literal("state-in-use"),
4995
4881
  literal("rate-limited"),
4996
4882
  literal("group-membership-required"),
4997
4883
  literal("group-identity-stale"),
@@ -5046,6 +4932,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5046
4932
  literal("forbidden"),
5047
4933
  literal("identity-recovery-required"),
5048
4934
  literal("conflict"),
4935
+ literal("state-in-use"),
5049
4936
  literal("rate-limited"),
5050
4937
  literal("group-membership-required"),
5051
4938
  literal("group-identity-stale"),
@@ -5093,6 +4980,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5093
4980
  literal("forbidden"),
5094
4981
  literal("identity-recovery-required"),
5095
4982
  literal("conflict"),
4983
+ literal("state-in-use"),
5096
4984
  literal("rate-limited"),
5097
4985
  literal("group-membership-required"),
5098
4986
  literal("group-identity-stale"),
@@ -5131,6 +5019,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5131
5019
  literal("forbidden"),
5132
5020
  literal("identity-recovery-required"),
5133
5021
  literal("conflict"),
5022
+ literal("state-in-use"),
5134
5023
  literal("rate-limited"),
5135
5024
  literal("group-membership-required"),
5136
5025
  literal("group-identity-stale"),
@@ -5174,6 +5063,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5174
5063
  literal("forbidden"),
5175
5064
  literal("identity-recovery-required"),
5176
5065
  literal("conflict"),
5066
+ literal("state-in-use"),
5177
5067
  literal("rate-limited"),
5178
5068
  literal("group-membership-required"),
5179
5069
  literal("group-identity-stale"),
@@ -5212,6 +5102,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5212
5102
  literal("forbidden"),
5213
5103
  literal("identity-recovery-required"),
5214
5104
  literal("conflict"),
5105
+ literal("state-in-use"),
5215
5106
  literal("rate-limited"),
5216
5107
  literal("group-membership-required"),
5217
5108
  literal("group-identity-stale"),
@@ -5273,6 +5164,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5273
5164
  literal("forbidden"),
5274
5165
  literal("identity-recovery-required"),
5275
5166
  literal("conflict"),
5167
+ literal("state-in-use"),
5276
5168
  literal("rate-limited"),
5277
5169
  literal("group-membership-required"),
5278
5170
  literal("group-identity-stale"),
@@ -5332,6 +5224,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5332
5224
  literal("forbidden"),
5333
5225
  literal("identity-recovery-required"),
5334
5226
  literal("conflict"),
5227
+ literal("state-in-use"),
5335
5228
  literal("rate-limited"),
5336
5229
  literal("group-membership-required"),
5337
5230
  literal("group-identity-stale"),
@@ -5385,6 +5278,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5385
5278
  literal("forbidden"),
5386
5279
  literal("identity-recovery-required"),
5387
5280
  literal("conflict"),
5281
+ literal("state-in-use"),
5388
5282
  literal("rate-limited"),
5389
5283
  literal("group-membership-required"),
5390
5284
  literal("group-identity-stale"),
@@ -5432,6 +5326,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5432
5326
  literal("forbidden"),
5433
5327
  literal("identity-recovery-required"),
5434
5328
  literal("conflict"),
5329
+ literal("state-in-use"),
5435
5330
  literal("rate-limited"),
5436
5331
  literal("group-membership-required"),
5437
5332
  literal("group-identity-stale"),
@@ -5479,6 +5374,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5479
5374
  literal("forbidden"),
5480
5375
  literal("identity-recovery-required"),
5481
5376
  literal("conflict"),
5377
+ literal("state-in-use"),
5482
5378
  literal("rate-limited"),
5483
5379
  literal("group-membership-required"),
5484
5380
  literal("group-identity-stale"),
@@ -5514,6 +5410,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5514
5410
  literal("forbidden"),
5515
5411
  literal("identity-recovery-required"),
5516
5412
  literal("conflict"),
5413
+ literal("state-in-use"),
5517
5414
  literal("rate-limited"),
5518
5415
  literal("group-membership-required"),
5519
5416
  literal("group-identity-stale"),
@@ -5553,6 +5450,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5553
5450
  literal("forbidden"),
5554
5451
  literal("identity-recovery-required"),
5555
5452
  literal("conflict"),
5453
+ literal("state-in-use"),
5556
5454
  literal("rate-limited"),
5557
5455
  literal("group-membership-required"),
5558
5456
  literal("group-identity-stale"),
@@ -5608,6 +5506,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5608
5506
  literal("forbidden"),
5609
5507
  literal("identity-recovery-required"),
5610
5508
  literal("conflict"),
5509
+ literal("state-in-use"),
5611
5510
  literal("rate-limited"),
5612
5511
  literal("group-membership-required"),
5613
5512
  literal("group-identity-stale"),
@@ -5653,74 +5552,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5653
5552
  })).readonly()
5654
5553
  }).readonly()
5655
5554
  })]);
5656
- const _awiki_dsh_plugin_awiki_refreshDeviceManagement_result$schema = union([object({
5657
- "ok": literal(false).readonly(),
5658
- "error": object({
5659
- "code": union([
5660
- literal("not-registered"),
5661
- literal("signed-out"),
5662
- literal("already-registered"),
5663
- literal("invalid-request"),
5664
- literal("invalid-otp"),
5665
- literal("challenge-expired"),
5666
- literal("handle-unavailable"),
5667
- literal("not-found"),
5668
- literal("forbidden"),
5669
- literal("identity-recovery-required"),
5670
- literal("conflict"),
5671
- literal("rate-limited"),
5672
- literal("group-membership-required"),
5673
- literal("group-identity-stale"),
5674
- literal("attachment-too-large"),
5675
- literal("summary-unavailable"),
5676
- literal("summary-timeout"),
5677
- literal("summary-cancelled"),
5678
- literal("summary-invalid-output"),
5679
- literal("summary-failed"),
5680
- literal("delivery-unknown"),
5681
- literal("network"),
5682
- literal("remote")
5683
- ]).readonly(),
5684
- "message": string().readonly()
5685
- }).readonly()
5686
- }), object({
5687
- "ok": literal(true).readonly(),
5688
- "value": object({
5689
- "canManage": boolean().readonly(),
5690
- "role": union([literal("member"), literal("admin")]).readonly().optional(),
5691
- "readiness": union([
5692
- literal("legacy"),
5693
- literal("member_ready"),
5694
- literal("admin_awaiting_root"),
5695
- literal("admin_ready"),
5696
- literal("blocked")
5697
- ]).readonly(),
5698
- "devices": array(object({
5699
- "deviceRef": string().readonly(),
5700
- "status": union([literal("active"), literal("revoked")]).readonly(),
5701
- "role": union([literal("member"), literal("admin")]).readonly(),
5702
- "managementReady": boolean().readonly(),
5703
- "isCurrent": boolean().readonly()
5704
- })).readonly(),
5705
- "requests": array(object({
5706
- "requestRef": string().readonly(),
5707
- "candidateKeyFingerprint": string().readonly(),
5708
- "issuedAt": string().readonly(),
5709
- "expiresAt": string().readonly(),
5710
- "state": union([
5711
- literal("pending"),
5712
- literal("verifying"),
5713
- literal("sas-ready"),
5714
- literal("authorized"),
5715
- literal("cancelled"),
5716
- literal("rejected"),
5717
- literal("expired")
5718
- ]).readonly(),
5719
- "claimedByCurrentDevice": boolean().readonly(),
5720
- "canStartVerification": boolean().readonly()
5721
- })).readonly()
5722
- }).readonly()
5723
- })]);
5724
5555
  const _awiki_dsh_plugin_awiki_registerIdentity_parameter_0$schema = object({
5725
5556
  "handle": string().readonly(),
5726
5557
  "phone": string().readonly(),
@@ -5741,57 +5572,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5741
5572
  literal("forbidden"),
5742
5573
  literal("identity-recovery-required"),
5743
5574
  literal("conflict"),
5744
- literal("rate-limited"),
5745
- literal("group-membership-required"),
5746
- literal("group-identity-stale"),
5747
- literal("attachment-too-large"),
5748
- literal("summary-unavailable"),
5749
- literal("summary-timeout"),
5750
- literal("summary-cancelled"),
5751
- literal("summary-invalid-output"),
5752
- literal("summary-failed"),
5753
- literal("delivery-unknown"),
5754
- literal("network"),
5755
- literal("remote")
5756
- ]).readonly(),
5757
- "message": string().readonly()
5758
- }).readonly()
5759
- }), object({
5760
- "ok": literal(true).readonly(),
5761
- "value": union([object({
5762
- "status": literal("registered").readonly(),
5763
- "identity": object({
5764
- "handle": intersection(string(), unknown()).readonly(),
5765
- "did": intersection(string(), unknown()).readonly(),
5766
- "displayName": string().readonly().optional(),
5767
- "registeredAt": number().readonly()
5768
- }).readonly()
5769
- }), object({
5770
- "status": literal("join-required").readonly(),
5771
- "fullHandle": intersection(string(), unknown()).readonly(),
5772
- "mode": union([literal("ordinary"), literal("handle-recovery-rebind")]).readonly(),
5773
- "requiresUserPresence": boolean().readonly()
5774
- })]).readonly()
5775
- })]);
5776
- const _awiki_dsh_plugin_awiki_rejectDeviceJoin_parameter_0$schema = object({
5777
- "reason": union([literal("user_rejected"), literal("sas_mismatch")]).readonly(),
5778
- "requestRef": string().readonly()
5779
- });
5780
- const _awiki_dsh_plugin_awiki_rejectDeviceJoin_result$schema = union([object({
5781
- "ok": literal(false).readonly(),
5782
- "error": object({
5783
- "code": union([
5784
- literal("not-registered"),
5785
- literal("signed-out"),
5786
- literal("already-registered"),
5787
- literal("invalid-request"),
5788
- literal("invalid-otp"),
5789
- literal("challenge-expired"),
5790
- literal("handle-unavailable"),
5791
- literal("not-found"),
5792
- literal("forbidden"),
5793
- literal("identity-recovery-required"),
5794
- literal("conflict"),
5575
+ literal("state-in-use"),
5795
5576
  literal("rate-limited"),
5796
5577
  literal("group-membership-required"),
5797
5578
  literal("group-identity-stale"),
@@ -5810,18 +5591,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5810
5591
  }), object({
5811
5592
  "ok": literal(true).readonly(),
5812
5593
  "value": object({
5813
- "requestRef": string().readonly(),
5814
- "phase": union([
5815
- literal("pending"),
5816
- literal("verifying"),
5817
- literal("sas-ready"),
5818
- literal("authorized"),
5819
- literal("cancelled"),
5820
- literal("rejected"),
5821
- literal("expired")
5822
- ]).readonly(),
5823
- "expiresAt": string().readonly(),
5824
- "sas": string().readonly().optional()
5594
+ "handle": intersection(string(), unknown()).readonly(),
5595
+ "did": intersection(string(), unknown()).readonly(),
5596
+ "displayName": string().readonly().optional(),
5597
+ "registeredAt": number().readonly()
5825
5598
  }).readonly()
5826
5599
  })]);
5827
5600
  const _awiki_dsh_plugin_awiki_removeGroupMember_parameter_0$schema = object({
@@ -5843,6 +5616,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5843
5616
  literal("forbidden"),
5844
5617
  literal("identity-recovery-required"),
5845
5618
  literal("conflict"),
5619
+ literal("state-in-use"),
5846
5620
  literal("rate-limited"),
5847
5621
  literal("group-membership-required"),
5848
5622
  literal("group-identity-stale"),
@@ -5881,6 +5655,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5881
5655
  literal("forbidden"),
5882
5656
  literal("identity-recovery-required"),
5883
5657
  literal("conflict"),
5658
+ literal("state-in-use"),
5884
5659
  literal("rate-limited"),
5885
5660
  literal("group-membership-required"),
5886
5661
  literal("group-identity-stale"),
@@ -5920,6 +5695,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5920
5695
  literal("forbidden"),
5921
5696
  literal("identity-recovery-required"),
5922
5697
  literal("conflict"),
5698
+ literal("state-in-use"),
5923
5699
  literal("rate-limited"),
5924
5700
  literal("group-membership-required"),
5925
5701
  literal("group-identity-stale"),
@@ -5964,6 +5740,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
5964
5740
  literal("forbidden"),
5965
5741
  literal("identity-recovery-required"),
5966
5742
  literal("conflict"),
5743
+ literal("state-in-use"),
5967
5744
  literal("rate-limited"),
5968
5745
  literal("group-membership-required"),
5969
5746
  literal("group-identity-stale"),
@@ -6003,78 +5780,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6003
5780
  "unsupportedDidOnlyGroupCount": number().readonly()
6004
5781
  }).readonly()
6005
5782
  })]);
6006
- const _awiki_dsh_plugin_awiki_revokeDevice_parameter_0$schema = object({
6007
- "deviceRef": string().readonly(),
6008
- "confirmation": string().readonly()
6009
- });
6010
- const _awiki_dsh_plugin_awiki_revokeDevice_result$schema = union([object({
6011
- "ok": literal(false).readonly(),
6012
- "error": object({
6013
- "code": union([
6014
- literal("not-registered"),
6015
- literal("signed-out"),
6016
- literal("already-registered"),
6017
- literal("invalid-request"),
6018
- literal("invalid-otp"),
6019
- literal("challenge-expired"),
6020
- literal("handle-unavailable"),
6021
- literal("not-found"),
6022
- literal("forbidden"),
6023
- literal("identity-recovery-required"),
6024
- literal("conflict"),
6025
- literal("rate-limited"),
6026
- literal("group-membership-required"),
6027
- literal("group-identity-stale"),
6028
- literal("attachment-too-large"),
6029
- literal("summary-unavailable"),
6030
- literal("summary-timeout"),
6031
- literal("summary-cancelled"),
6032
- literal("summary-invalid-output"),
6033
- literal("summary-failed"),
6034
- literal("delivery-unknown"),
6035
- literal("network"),
6036
- literal("remote")
6037
- ]).readonly(),
6038
- "message": string().readonly()
6039
- }).readonly()
6040
- }), object({
6041
- "ok": literal(true).readonly(),
6042
- "value": object({
6043
- "canManage": boolean().readonly(),
6044
- "role": union([literal("member"), literal("admin")]).readonly().optional(),
6045
- "readiness": union([
6046
- literal("legacy"),
6047
- literal("member_ready"),
6048
- literal("admin_awaiting_root"),
6049
- literal("admin_ready"),
6050
- literal("blocked")
6051
- ]).readonly(),
6052
- "devices": array(object({
6053
- "deviceRef": string().readonly(),
6054
- "status": union([literal("active"), literal("revoked")]).readonly(),
6055
- "role": union([literal("member"), literal("admin")]).readonly(),
6056
- "managementReady": boolean().readonly(),
6057
- "isCurrent": boolean().readonly()
6058
- })).readonly(),
6059
- "requests": array(object({
6060
- "requestRef": string().readonly(),
6061
- "candidateKeyFingerprint": string().readonly(),
6062
- "issuedAt": string().readonly(),
6063
- "expiresAt": string().readonly(),
6064
- "state": union([
6065
- literal("pending"),
6066
- literal("verifying"),
6067
- literal("sas-ready"),
6068
- literal("authorized"),
6069
- literal("cancelled"),
6070
- literal("rejected"),
6071
- literal("expired")
6072
- ]).readonly(),
6073
- "claimedByCurrentDevice": boolean().readonly(),
6074
- "canStartVerification": boolean().readonly()
6075
- })).readonly()
6076
- }).readonly()
6077
- })]);
6078
5783
  const _awiki_dsh_plugin_awiki_sendAttachment_parameter_0$schema = object({
6079
5784
  "target": union([object({
6080
5785
  "kind": literal("direct").readonly(),
@@ -6104,6 +5809,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6104
5809
  literal("forbidden"),
6105
5810
  literal("identity-recovery-required"),
6106
5811
  literal("conflict"),
5812
+ literal("state-in-use"),
6107
5813
  literal("rate-limited"),
6108
5814
  literal("group-membership-required"),
6109
5815
  literal("group-identity-stale"),
@@ -6157,7 +5863,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6157
5863
  "to": array(string()).readonly(),
6158
5864
  "cc": array(string()).readonly().optional(),
6159
5865
  "subject": string().readonly(),
6160
- "bodyText": 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()
6161
5873
  });
6162
5874
  const _awiki_dsh_plugin_awiki_sendMail_result$schema = union([object({
6163
5875
  "ok": literal(false).readonly(),
@@ -6174,6 +5886,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6174
5886
  literal("forbidden"),
6175
5887
  literal("identity-recovery-required"),
6176
5888
  literal("conflict"),
5889
+ literal("state-in-use"),
6177
5890
  literal("rate-limited"),
6178
5891
  literal("group-membership-required"),
6179
5892
  literal("group-identity-stale"),
@@ -6216,6 +5929,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6216
5929
  literal("forbidden"),
6217
5930
  literal("identity-recovery-required"),
6218
5931
  literal("conflict"),
5932
+ literal("state-in-use"),
6219
5933
  literal("rate-limited"),
6220
5934
  literal("group-membership-required"),
6221
5935
  literal("group-identity-stale"),
@@ -6259,6 +5973,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6259
5973
  literal("forbidden"),
6260
5974
  literal("identity-recovery-required"),
6261
5975
  literal("conflict"),
5976
+ literal("state-in-use"),
6262
5977
  literal("rate-limited"),
6263
5978
  literal("group-membership-required"),
6264
5979
  literal("group-identity-stale"),
@@ -6314,6 +6029,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6314
6029
  literal("forbidden"),
6315
6030
  literal("identity-recovery-required"),
6316
6031
  literal("conflict"),
6032
+ literal("state-in-use"),
6317
6033
  literal("rate-limited"),
6318
6034
  literal("group-membership-required"),
6319
6035
  literal("group-identity-stale"),
@@ -6363,54 +6079,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6363
6079
  })]).readonly()
6364
6080
  }).readonly()
6365
6081
  })]);
6366
- const _awiki_dsh_plugin_awiki_startDeviceJoinVerification_parameter_0$schema = object({ "requestRef": string().readonly() });
6367
- const _awiki_dsh_plugin_awiki_startDeviceJoinVerification_result$schema = union([object({
6368
- "ok": literal(false).readonly(),
6369
- "error": object({
6370
- "code": union([
6371
- literal("not-registered"),
6372
- literal("signed-out"),
6373
- literal("already-registered"),
6374
- literal("invalid-request"),
6375
- literal("invalid-otp"),
6376
- literal("challenge-expired"),
6377
- literal("handle-unavailable"),
6378
- literal("not-found"),
6379
- literal("forbidden"),
6380
- literal("identity-recovery-required"),
6381
- literal("conflict"),
6382
- literal("rate-limited"),
6383
- literal("group-membership-required"),
6384
- literal("group-identity-stale"),
6385
- literal("attachment-too-large"),
6386
- literal("summary-unavailable"),
6387
- literal("summary-timeout"),
6388
- literal("summary-cancelled"),
6389
- literal("summary-invalid-output"),
6390
- literal("summary-failed"),
6391
- literal("delivery-unknown"),
6392
- literal("network"),
6393
- literal("remote")
6394
- ]).readonly(),
6395
- "message": string().readonly()
6396
- }).readonly()
6397
- }), object({
6398
- "ok": literal(true).readonly(),
6399
- "value": object({
6400
- "requestRef": string().readonly(),
6401
- "phase": union([
6402
- literal("pending"),
6403
- literal("verifying"),
6404
- literal("sas-ready"),
6405
- literal("authorized"),
6406
- literal("cancelled"),
6407
- literal("rejected"),
6408
- literal("expired")
6409
- ]).readonly(),
6410
- "expiresAt": string().readonly(),
6411
- "sas": string().readonly().optional()
6412
- }).readonly()
6413
- })]);
6414
6082
  const _awiki_dsh_plugin_awiki_summarizeConversation_parameter_0$schema = object({
6415
6083
  "conversationId": intersection(string(), unknown()).readonly(),
6416
6084
  "unreadCountAtOpen": number().readonly().optional()
@@ -6430,6 +6098,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6430
6098
  literal("forbidden"),
6431
6099
  literal("identity-recovery-required"),
6432
6100
  literal("conflict"),
6101
+ literal("state-in-use"),
6433
6102
  literal("rate-limited"),
6434
6103
  literal("group-membership-required"),
6435
6104
  literal("group-identity-stale"),
@@ -6512,6 +6181,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6512
6181
  literal("forbidden"),
6513
6182
  literal("identity-recovery-required"),
6514
6183
  literal("conflict"),
6184
+ literal("state-in-use"),
6515
6185
  literal("rate-limited"),
6516
6186
  literal("group-membership-required"),
6517
6187
  literal("group-identity-stale"),
@@ -6571,6 +6241,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6571
6241
  literal("forbidden"),
6572
6242
  literal("identity-recovery-required"),
6573
6243
  literal("conflict"),
6244
+ literal("state-in-use"),
6574
6245
  literal("rate-limited"),
6575
6246
  literal("group-membership-required"),
6576
6247
  literal("group-identity-stale"),
@@ -6615,6 +6286,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6615
6286
  literal("forbidden"),
6616
6287
  literal("identity-recovery-required"),
6617
6288
  literal("conflict"),
6289
+ literal("state-in-use"),
6618
6290
  literal("rate-limited"),
6619
6291
  literal("group-membership-required"),
6620
6292
  literal("group-identity-stale"),
@@ -6667,7 +6339,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6667
6339
  },
6668
6340
  sourceLocation: {
6669
6341
  "file": "packages/dsh-awiki/src/index.ts",
6670
- "line": 159,
6342
+ "line": 119,
6671
6343
  "column": 9
6672
6344
  }
6673
6345
  },
@@ -6694,73 +6366,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6694
6366
  },
6695
6367
  sourceLocation: {
6696
6368
  "file": "packages/dsh-awiki/src/index.ts",
6697
- "line": 189,
6369
+ "line": 149,
6698
6370
  "column": 3
6699
6371
  }
6700
6372
  },
6701
- {
6702
- id: "@awiki/dsh-plugin#awiki/approveDeviceJoin",
6703
- service: "awiki",
6704
- namespace: "awiki",
6705
- method: "approveDeviceJoin",
6706
- invocation: { kind: "direct" },
6707
- parameters: [{
6708
- name: "request",
6709
- wire: "request",
6710
- source: "json",
6711
- codec: {
6712
- mode: "strict",
6713
- typeSymbol: "@awiki/dsh-plugin/types#AwikiApproveDeviceJoinRequest",
6714
- schema: _awiki_dsh_plugin_awiki_approveDeviceJoin_parameter_0$schema
6715
- }
6716
- }],
6717
- result: {
6718
- mode: "strict",
6719
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6720
- schema: _awiki_dsh_plugin_awiki_approveDeviceJoin_result$schema
6721
- },
6722
- sourceLocation: {
6723
- "file": "packages/dsh-awiki/src/index.ts",
6724
- "line": 129,
6725
- "column": 9
6726
- }
6727
- },
6728
- {
6729
- id: "@awiki/dsh-plugin#awiki/beginDeviceJoin",
6730
- service: "awiki",
6731
- namespace: "awiki",
6732
- method: "beginDeviceJoin",
6733
- invocation: { kind: "direct" },
6734
- parameters: [],
6735
- result: {
6736
- mode: "strict",
6737
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6738
- schema: _awiki_dsh_plugin_awiki_beginDeviceJoin_result$schema
6739
- },
6740
- sourceLocation: {
6741
- "file": "packages/dsh-awiki/src/index.ts",
6742
- "line": 112,
6743
- "column": 9
6744
- }
6745
- },
6746
- {
6747
- id: "@awiki/dsh-plugin#awiki/cancelDeviceJoin",
6748
- service: "awiki",
6749
- namespace: "awiki",
6750
- method: "cancelDeviceJoin",
6751
- invocation: { kind: "direct" },
6752
- parameters: [],
6753
- result: {
6754
- mode: "strict",
6755
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6756
- schema: _awiki_dsh_plugin_awiki_cancelDeviceJoin_result$schema
6757
- },
6758
- sourceLocation: {
6759
- "file": "packages/dsh-awiki/src/index.ts",
6760
- "line": 118,
6761
- "column": 9
6762
- }
6763
- },
6764
6373
  {
6765
6374
  id: "@awiki/dsh-plugin#awiki/clearLocalData",
6766
6375
  service: "awiki",
@@ -6784,7 +6393,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6784
6393
  },
6785
6394
  sourceLocation: {
6786
6395
  "file": "packages/dsh-awiki/src/index.ts",
6787
- "line": 247,
6396
+ "line": 212,
6788
6397
  "column": 3
6789
6398
  }
6790
6399
  },
@@ -6811,7 +6420,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6811
6420
  },
6812
6421
  sourceLocation: {
6813
6422
  "file": "packages/dsh-awiki/src/index.ts",
6814
- "line": 174,
6423
+ "line": 134,
6815
6424
  "column": 9
6816
6425
  }
6817
6426
  },
@@ -6838,7 +6447,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6838
6447
  },
6839
6448
  sourceLocation: {
6840
6449
  "file": "packages/dsh-awiki/src/index.ts",
6841
- "line": 168,
6450
+ "line": 128,
6842
6451
  "column": 9
6843
6452
  }
6844
6453
  },
@@ -6861,11 +6470,38 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6861
6470
  result: {
6862
6471
  mode: "strict",
6863
6472
  typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6864
- schema: _awiki_dsh_plugin_awiki_downloadAttachment_result$schema
6473
+ schema: _awiki_dsh_plugin_awiki_downloadAttachment_result$schema
6474
+ },
6475
+ sourceLocation: {
6476
+ "file": "packages/dsh-awiki/src/index.ts",
6477
+ "line": 189,
6478
+ "column": 9
6479
+ }
6480
+ },
6481
+ {
6482
+ id: "@awiki/dsh-plugin#awiki/downloadMailAttachment",
6483
+ service: "awiki",
6484
+ namespace: "awiki",
6485
+ method: "downloadMailAttachment",
6486
+ 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
+ }],
6497
+ result: {
6498
+ mode: "strict",
6499
+ typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6500
+ schema: _awiki_dsh_plugin_awiki_downloadMailAttachment_result$schema
6865
6501
  },
6866
6502
  sourceLocation: {
6867
6503
  "file": "packages/dsh-awiki/src/index.ts",
6868
- "line": 229,
6504
+ "line": 207,
6869
6505
  "column": 9
6870
6506
  }
6871
6507
  },
@@ -6883,8 +6519,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6883
6519
  },
6884
6520
  sourceLocation: {
6885
6521
  "file": "packages/dsh-awiki/src/index.ts",
6886
- "line": 86,
6887
- "column": 9
6522
+ "line": 78,
6523
+ "column": 3
6888
6524
  }
6889
6525
  },
6890
6526
  {
@@ -6901,28 +6537,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6901
6537
  },
6902
6538
  sourceLocation: {
6903
6539
  "file": "packages/dsh-awiki/src/index.ts",
6904
- "line": 198,
6540
+ "line": 158,
6905
6541
  "column": 3
6906
6542
  }
6907
6543
  },
6908
- {
6909
- id: "@awiki/dsh-plugin#awiki/getDeviceJoinStatus",
6910
- service: "awiki",
6911
- namespace: "awiki",
6912
- method: "getDeviceJoinStatus",
6913
- invocation: { kind: "direct" },
6914
- parameters: [],
6915
- result: {
6916
- mode: "strict",
6917
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
6918
- schema: _awiki_dsh_plugin_awiki_getDeviceJoinStatus_result$schema
6919
- },
6920
- sourceLocation: {
6921
- "file": "packages/dsh-awiki/src/index.ts",
6922
- "line": 115,
6923
- "column": 9
6924
- }
6925
- },
6926
6544
  {
6927
6545
  id: "@awiki/dsh-plugin#awiki/getGroup",
6928
6546
  service: "awiki",
@@ -6946,7 +6564,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6946
6564
  },
6947
6565
  sourceLocation: {
6948
6566
  "file": "packages/dsh-awiki/src/index.ts",
6949
- "line": 177,
6567
+ "line": 137,
6950
6568
  "column": 3
6951
6569
  }
6952
6570
  },
@@ -6973,7 +6591,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6973
6591
  },
6974
6592
  sourceLocation: {
6975
6593
  "file": "packages/dsh-awiki/src/index.ts",
6976
- "line": 209,
6594
+ "line": 169,
6977
6595
  "column": 3
6978
6596
  }
6979
6597
  },
@@ -6991,7 +6609,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6991
6609
  },
6992
6610
  sourceLocation: {
6993
6611
  "file": "packages/dsh-awiki/src/index.ts",
6994
- "line": 89,
6612
+ "line": 81,
6995
6613
  "column": 9
6996
6614
  }
6997
6615
  },
@@ -7018,7 +6636,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7018
6636
  },
7019
6637
  sourceLocation: {
7020
6638
  "file": "packages/dsh-awiki/src/index.ts",
7021
- "line": 212,
6639
+ "line": 172,
7022
6640
  "column": 3
7023
6641
  }
7024
6642
  },
@@ -7036,7 +6654,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7036
6654
  },
7037
6655
  sourceLocation: {
7038
6656
  "file": "packages/dsh-awiki/src/index.ts",
7039
- "line": 232,
6657
+ "line": 192,
7040
6658
  "column": 3
7041
6659
  }
7042
6660
  },
@@ -7054,7 +6672,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7054
6672
  },
7055
6673
  sourceLocation: {
7056
6674
  "file": "packages/dsh-awiki/src/index.ts",
7057
- "line": 147,
6675
+ "line": 107,
7058
6676
  "column": 3
7059
6677
  }
7060
6678
  },
@@ -7081,7 +6699,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7081
6699
  },
7082
6700
  sourceLocation: {
7083
6701
  "file": "packages/dsh-awiki/src/index.ts",
7084
- "line": 162,
6702
+ "line": 122,
7085
6703
  "column": 9
7086
6704
  }
7087
6705
  },
@@ -7099,7 +6717,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7099
6717
  },
7100
6718
  sourceLocation: {
7101
6719
  "file": "packages/dsh-awiki/src/index.ts",
7102
- "line": 92,
6720
+ "line": 84,
7103
6721
  "column": 9
7104
6722
  }
7105
6723
  },
@@ -7126,7 +6744,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7126
6744
  },
7127
6745
  sourceLocation: {
7128
6746
  "file": "packages/dsh-awiki/src/index.ts",
7129
- "line": 101,
6747
+ "line": 93,
7130
6748
  "column": 9
7131
6749
  }
7132
6750
  },
@@ -7153,7 +6771,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7153
6771
  },
7154
6772
  sourceLocation: {
7155
6773
  "file": "packages/dsh-awiki/src/index.ts",
7156
- "line": 180,
6774
+ "line": 140,
7157
6775
  "column": 3
7158
6776
  }
7159
6777
  },
@@ -7180,7 +6798,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7180
6798
  },
7181
6799
  sourceLocation: {
7182
6800
  "file": "packages/dsh-awiki/src/index.ts",
7183
- "line": 183,
6801
+ "line": 143,
7184
6802
  "column": 9
7185
6803
  }
7186
6804
  },
@@ -7208,7 +6826,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7208
6826
  },
7209
6827
  sourceLocation: {
7210
6828
  "file": "packages/dsh-awiki/src/index.ts",
7211
- "line": 206,
6829
+ "line": 166,
7212
6830
  "column": 3
7213
6831
  }
7214
6832
  },
@@ -7235,7 +6853,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7235
6853
  },
7236
6854
  sourceLocation: {
7237
6855
  "file": "packages/dsh-awiki/src/index.ts",
7238
- "line": 186,
6856
+ "line": 146,
7239
6857
  "column": 3
7240
6858
  }
7241
6859
  },
@@ -7263,7 +6881,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7263
6881
  },
7264
6882
  sourceLocation: {
7265
6883
  "file": "packages/dsh-awiki/src/index.ts",
7266
- "line": 235,
6884
+ "line": 195,
7267
6885
  "column": 9
7268
6886
  }
7269
6887
  },
@@ -7281,7 +6899,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7281
6899
  },
7282
6900
  sourceLocation: {
7283
6901
  "file": "packages/dsh-awiki/src/index.ts",
7284
- "line": 98,
6902
+ "line": 90,
7285
6903
  "column": 3
7286
6904
  }
7287
6905
  },
@@ -7308,7 +6926,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7308
6926
  },
7309
6927
  sourceLocation: {
7310
6928
  "file": "packages/dsh-awiki/src/index.ts",
7311
- "line": 95,
6929
+ "line": 87,
7312
6930
  "column": 3
7313
6931
  }
7314
6932
  },
@@ -7335,7 +6953,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7335
6953
  },
7336
6954
  sourceLocation: {
7337
6955
  "file": "packages/dsh-awiki/src/index.ts",
7338
- "line": 220,
6956
+ "line": 180,
7339
6957
  "column": 3
7340
6958
  }
7341
6959
  },
@@ -7362,7 +6980,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7362
6980
  },
7363
6981
  sourceLocation: {
7364
6982
  "file": "packages/dsh-awiki/src/index.ts",
7365
- "line": 241,
6983
+ "line": 201,
7366
6984
  "column": 3
7367
6985
  }
7368
6986
  },
@@ -7389,7 +7007,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7389
7007
  },
7390
7008
  sourceLocation: {
7391
7009
  "file": "packages/dsh-awiki/src/index.ts",
7392
- "line": 156,
7010
+ "line": 116,
7393
7011
  "column": 3
7394
7012
  }
7395
7013
  },
@@ -7416,28 +7034,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7416
7034
  },
7417
7035
  sourceLocation: {
7418
7036
  "file": "packages/dsh-awiki/src/index.ts",
7419
- "line": 238,
7037
+ "line": 198,
7420
7038
  "column": 9
7421
7039
  }
7422
7040
  },
7423
- {
7424
- id: "@awiki/dsh-plugin#awiki/refreshDeviceManagement",
7425
- service: "awiki",
7426
- namespace: "awiki",
7427
- method: "refreshDeviceManagement",
7428
- invocation: { kind: "direct" },
7429
- parameters: [],
7430
- result: {
7431
- mode: "strict",
7432
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7433
- schema: _awiki_dsh_plugin_awiki_refreshDeviceManagement_result$schema
7434
- },
7435
- sourceLocation: {
7436
- "file": "packages/dsh-awiki/src/index.ts",
7437
- "line": 121,
7438
- "column": 3
7439
- }
7440
- },
7441
7041
  {
7442
7042
  id: "@awiki/dsh-plugin#awiki/registerIdentity",
7443
7043
  service: "awiki",
@@ -7461,34 +7061,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7461
7061
  },
7462
7062
  sourceLocation: {
7463
7063
  "file": "packages/dsh-awiki/src/index.ts",
7464
- "line": 109,
7465
- "column": 9
7466
- }
7467
- },
7468
- {
7469
- id: "@awiki/dsh-plugin#awiki/rejectDeviceJoin",
7470
- service: "awiki",
7471
- namespace: "awiki",
7472
- method: "rejectDeviceJoin",
7473
- invocation: { kind: "direct" },
7474
- parameters: [{
7475
- name: "request",
7476
- wire: "request",
7477
- source: "json",
7478
- codec: {
7479
- mode: "strict",
7480
- typeSymbol: "@awiki/dsh-plugin/types#AwikiRejectDeviceJoinRequest",
7481
- schema: _awiki_dsh_plugin_awiki_rejectDeviceJoin_parameter_0$schema
7482
- }
7483
- }],
7484
- result: {
7485
- mode: "strict",
7486
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7487
- schema: _awiki_dsh_plugin_awiki_rejectDeviceJoin_result$schema
7488
- },
7489
- sourceLocation: {
7490
- "file": "packages/dsh-awiki/src/index.ts",
7491
- "line": 134,
7064
+ "line": 101,
7492
7065
  "column": 9
7493
7066
  }
7494
7067
  },
@@ -7515,7 +7088,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7515
7088
  },
7516
7089
  sourceLocation: {
7517
7090
  "file": "packages/dsh-awiki/src/index.ts",
7518
- "line": 192,
7091
+ "line": 152,
7519
7092
  "column": 3
7520
7093
  }
7521
7094
  },
@@ -7542,7 +7115,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7542
7115
  },
7543
7116
  sourceLocation: {
7544
7117
  "file": "packages/dsh-awiki/src/index.ts",
7545
- "line": 171,
7118
+ "line": 131,
7546
7119
  "column": 3
7547
7120
  }
7548
7121
  },
@@ -7560,7 +7133,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7560
7133
  },
7561
7134
  sourceLocation: {
7562
7135
  "file": "packages/dsh-awiki/src/index.ts",
7563
- "line": 195,
7136
+ "line": 155,
7564
7137
  "column": 9
7565
7138
  }
7566
7139
  },
@@ -7587,34 +7160,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7587
7160
  },
7588
7161
  sourceLocation: {
7589
7162
  "file": "packages/dsh-awiki/src/index.ts",
7590
- "line": 165,
7591
- "column": 9
7592
- }
7593
- },
7594
- {
7595
- id: "@awiki/dsh-plugin#awiki/revokeDevice",
7596
- service: "awiki",
7597
- namespace: "awiki",
7598
- method: "revokeDevice",
7599
- invocation: { kind: "direct" },
7600
- parameters: [{
7601
- name: "request",
7602
- wire: "request",
7603
- source: "json",
7604
- codec: {
7605
- mode: "strict",
7606
- typeSymbol: "@awiki/dsh-plugin/types#AwikiRevokeDeviceRequest",
7607
- schema: _awiki_dsh_plugin_awiki_revokeDevice_parameter_0$schema
7608
- }
7609
- }],
7610
- result: {
7611
- mode: "strict",
7612
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7613
- schema: _awiki_dsh_plugin_awiki_revokeDevice_result$schema
7614
- },
7615
- sourceLocation: {
7616
- "file": "packages/dsh-awiki/src/index.ts",
7617
- "line": 139,
7163
+ "line": 125,
7618
7164
  "column": 9
7619
7165
  }
7620
7166
  },
@@ -7641,7 +7187,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7641
7187
  },
7642
7188
  sourceLocation: {
7643
7189
  "file": "packages/dsh-awiki/src/index.ts",
7644
- "line": 226,
7190
+ "line": 186,
7645
7191
  "column": 9
7646
7192
  }
7647
7193
  },
@@ -7668,7 +7214,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7668
7214
  },
7669
7215
  sourceLocation: {
7670
7216
  "file": "packages/dsh-awiki/src/index.ts",
7671
- "line": 244,
7217
+ "line": 204,
7672
7218
  "column": 9
7673
7219
  }
7674
7220
  },
@@ -7695,7 +7241,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7695
7241
  },
7696
7242
  sourceLocation: {
7697
7243
  "file": "packages/dsh-awiki/src/index.ts",
7698
- "line": 153,
7244
+ "line": 113,
7699
7245
  "column": 3
7700
7246
  }
7701
7247
  },
@@ -7722,8 +7268,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7722
7268
  },
7723
7269
  sourceLocation: {
7724
7270
  "file": "packages/dsh-awiki/src/index.ts",
7725
- "line": 106,
7726
- "column": 9
7271
+ "line": 98,
7272
+ "column": 3
7727
7273
  }
7728
7274
  },
7729
7275
  {
@@ -7749,37 +7295,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7749
7295
  },
7750
7296
  sourceLocation: {
7751
7297
  "file": "packages/dsh-awiki/src/index.ts",
7752
- "line": 223,
7298
+ "line": 183,
7753
7299
  "column": 3
7754
7300
  }
7755
7301
  },
7756
- {
7757
- id: "@awiki/dsh-plugin#awiki/startDeviceJoinVerification",
7758
- service: "awiki",
7759
- namespace: "awiki",
7760
- method: "startDeviceJoinVerification",
7761
- invocation: { kind: "direct" },
7762
- parameters: [{
7763
- name: "request",
7764
- wire: "request",
7765
- source: "json",
7766
- codec: {
7767
- mode: "strict",
7768
- typeSymbol: "@awiki/dsh-plugin/types#AwikiRequestRefInput",
7769
- schema: _awiki_dsh_plugin_awiki_startDeviceJoinVerification_parameter_0$schema
7770
- }
7771
- }],
7772
- result: {
7773
- mode: "strict",
7774
- typeSymbol: "@awiki/dsh-plugin/types#AwikiResult",
7775
- schema: _awiki_dsh_plugin_awiki_startDeviceJoinVerification_result$schema
7776
- },
7777
- sourceLocation: {
7778
- "file": "packages/dsh-awiki/src/index.ts",
7779
- "line": 124,
7780
- "column": 9
7781
- }
7782
- },
7783
7302
  {
7784
7303
  id: "@awiki/dsh-plugin#awiki/summarizeConversation",
7785
7304
  service: "awiki",
@@ -7803,7 +7322,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7803
7322
  },
7804
7323
  sourceLocation: {
7805
7324
  "file": "packages/dsh-awiki/src/index.ts",
7806
- "line": 215,
7325
+ "line": 175,
7807
7326
  "column": 9
7808
7327
  }
7809
7328
  },
@@ -7830,7 +7349,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7830
7349
  },
7831
7350
  sourceLocation: {
7832
7351
  "file": "packages/dsh-awiki/src/index.ts",
7833
- "line": 201,
7352
+ "line": 161,
7834
7353
  "column": 3
7835
7354
  }
7836
7355
  },
@@ -7857,7 +7376,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7857
7376
  },
7858
7377
  sourceLocation: {
7859
7378
  "file": "packages/dsh-awiki/src/index.ts",
7860
- "line": 144,
7379
+ "line": 104,
7861
7380
  "column": 9
7862
7381
  }
7863
7382
  },
@@ -7884,7 +7403,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7884
7403
  },
7885
7404
  sourceLocation: {
7886
7405
  "file": "packages/dsh-awiki/src/index.ts",
7887
- "line": 150,
7406
+ "line": 110,
7888
7407
  "column": 3
7889
7408
  }
7890
7409
  }
@@ -7913,13 +7432,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7913
7432
  const AWIKI_CLEAR_LOCAL_DATA_CONFIRMATION = "clear-awiki-local-data";
7914
7433
  //#endregion
7915
7434
  //#region \0dsh-awiki-css:AwikiIdentityPage.module.css.mjs
7916
- 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}}";
7917
- const tagId$5 = "@awiki/dsh-plugin/AwikiIdentityPage.module.css";
7918
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
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) {
7919
7438
  const tag = document.createElement("style");
7920
7439
  tag.dataset.plugin = "@awiki/dsh-plugin";
7921
- tag.dataset.pluginCss = tagId$5;
7922
- tag.textContent = css$5;
7440
+ tag.dataset.pluginCss = tagId$4;
7441
+ tag.textContent = css$4;
7923
7442
  document.head.appendChild(tag);
7924
7443
  }
7925
7444
  var _dsh_awiki_css_AwikiIdentityPage_module_css_default = {
@@ -7957,13 +7476,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7957
7476
  }
7958
7477
  //#endregion
7959
7478
  //#region \0dsh-awiki-css:AwikiOverlay.module.css.mjs
7960
- 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_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}}";
7961
- const tagId$4 = "@awiki/dsh-plugin/AwikiOverlay.module.css";
7962
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
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) {
7963
7482
  const tag = document.createElement("style");
7964
7483
  tag.dataset.plugin = "@awiki/dsh-plugin";
7965
- tag.dataset.pluginCss = tagId$4;
7966
- tag.textContent = css$4;
7484
+ tag.dataset.pluginCss = tagId$3;
7485
+ tag.textContent = css$3;
7967
7486
  document.head.appendChild(tag);
7968
7487
  }
7969
7488
  var _dsh_awiki_css_AwikiOverlay_module_css_default = {
@@ -8444,13 +7963,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8444
7963
  }
8445
7964
  //#endregion
8446
7965
  //#region \0dsh-awiki-css:AwikiIdentityAccess.module.css.mjs
8447
- 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}}";
8448
- const tagId$3 = "@awiki/dsh-plugin/AwikiIdentityAccess.module.css";
8449
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
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) {
8450
7969
  const tag = document.createElement("style");
8451
7970
  tag.dataset.plugin = "@awiki/dsh-plugin";
8452
- tag.dataset.pluginCss = tagId$3;
8453
- tag.textContent = css$3;
7971
+ tag.dataset.pluginCss = tagId$2;
7972
+ tag.textContent = css$2;
8454
7973
  document.head.appendChild(tag);
8455
7974
  }
8456
7975
  var _dsh_awiki_css_AwikiIdentityAccess_module_css_default = {
@@ -8472,7 +7991,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8472
7991
  "primary": "r_slHG_primary",
8473
7992
  "progressIcon": "r_slHG_progressIcon",
8474
7993
  "recoveryHelp": "r_slHG_recoveryHelp",
8475
- "sas": "r_slHG_sas",
8476
7994
  "secondary": "r_slHG_secondary"
8477
7995
  };
8478
7996
  //#endregion
@@ -8511,8 +8029,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8511
8029
  const [signedOutAlternative, setSignedOutAlternative] = (0, react.useState)("none");
8512
8030
  const [replaceConfirmed, setReplaceConfirmed] = (0, react.useState)(false);
8513
8031
  const [loginFailed, setLoginFailed] = (0, react.useState)(false);
8514
- const [joinContext, setJoinContext] = (0, react.useState)(null);
8515
- const [joinProgress, setJoinProgress] = (0, react.useState)(null);
8516
8032
  (0, react.useEffect)(() => {
8517
8033
  if (retryDeadline === null) return;
8518
8034
  const update = () => {
@@ -8557,7 +8073,36 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8557
8073
  setRetrySeconds(cooldownSeconds);
8558
8074
  setNotice(`注册验证码已发送;${cooldownSeconds} 秒后可重新获取。`);
8559
8075
  };
8560
- const requestIdentityOtp = requestRegistrationOtp;
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
+ };
8561
8106
  const completeRegistration = async () => {
8562
8107
  if (!registrationOtpSent) return;
8563
8108
  setError(null);
@@ -8570,77 +8115,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8570
8115
  setError(result.error);
8571
8116
  return;
8572
8117
  }
8573
- if (result.value.status === "join-required") {
8574
- setOtp("");
8575
- setJoinContext({
8576
- fullHandle: result.value.fullHandle,
8577
- phone: phone.trim()
8578
- });
8579
- return;
8580
- }
8581
8118
  setPhone("");
8582
8119
  setHandle("");
8583
8120
  resetIdentityEntry();
8584
8121
  };
8585
- const beginJoin = async () => {
8586
- setError(null);
8587
- const result = await props.beginDeviceJoin();
8588
- if (!result.ok) return setError(result.error);
8589
- setJoinProgress(result.value);
8590
- };
8591
- const cancelJoin = async () => {
8592
- setError(null);
8593
- const result = await props.cancelDeviceJoin();
8594
- if (!result.ok) return setError(result.error);
8595
- setJoinContext(null);
8596
- setJoinProgress(null);
8597
- resetIdentityEntry();
8598
- };
8599
- const chooseRecovery = async () => {
8600
- if (joinContext === null || !props.handleRecoveryPhoneEnabled) return;
8601
- setError(null);
8602
- const discarded = await props.cancelDeviceJoin();
8603
- if (!discarded.ok) return setError(discarded.error);
8604
- const recovery = await props.sendRecoveryOtp({
8605
- fullHandle: joinContext.fullHandle,
8606
- phone: joinContext.phone
8607
- });
8608
- if (!recovery.ok) return setError(recovery.error);
8609
- setRecoveryFactorContext({
8610
- fullHandle: recovery.value.fullHandle,
8611
- phone: joinContext.phone
8612
- });
8613
- setJoinContext(null);
8614
- };
8615
- (0, react.useEffect)(() => {
8616
- if (props.sessionStatus !== "unregistered" || joinContext !== null || joinProgress !== null || typeof props.getDeviceJoinStatus !== "function") return;
8617
- let active = true;
8618
- props.getDeviceJoinStatus().then((result) => {
8619
- if (!active) return;
8620
- if (!result.ok) setError(result.error);
8621
- else if (result.value !== null) setJoinProgress(result.value);
8622
- });
8623
- return () => {
8624
- active = false;
8625
- };
8626
- }, [props.sessionStatus]);
8627
- (0, react.useEffect)(() => {
8628
- if (joinProgress === null || [
8629
- "authorized",
8630
- "cancelled",
8631
- "rejected",
8632
- "expired"
8633
- ].includes(joinProgress.phase)) return;
8634
- const timer = setInterval(() => {
8635
- props.getDeviceJoinStatus().then((result) => {
8636
- if (!result.ok) setError(result.error);
8637
- else if (result.value !== null) setJoinProgress(result.value);
8638
- });
8639
- }, 2e3);
8640
- return () => {
8641
- clearInterval(timer);
8642
- };
8643
- }, [joinProgress?.phase]);
8644
8122
  const login = async () => {
8645
8123
  setError(null);
8646
8124
  setLoginFailed(false);
@@ -8686,94 +8164,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8686
8164
  requestTitle: "需要重新恢复身份",
8687
8165
  requestDescription: "这个 Handle 已在另一台设备完成了更新恢复,当前设备的旧凭证因此失效。验证绑定手机号后即可继续使用本机数据。"
8688
8166
  });
8689
- if (props.sessionStatus === "unregistered" && joinProgress !== null) {
8690
- const terminal = [
8691
- "cancelled",
8692
- "rejected",
8693
- "expired"
8694
- ].includes(joinProgress.phase);
8695
- return (0, react_jsx_runtime.jsx)(AwikiIdentityPage, { children: (0, react_jsx_runtime.jsxs)("div", {
8696
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.accessFlow,
8697
- children: [
8698
- (0, react_jsx_runtime.jsx)("div", {
8699
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.identityIcon,
8700
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconUserOutline16, { size: 24 })
8701
- }),
8702
- (0, react_jsx_runtime.jsxs)("div", {
8703
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8704
- 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 管理设备上处理加入请求。" })]
8705
- }),
8706
- joinProgress.phase === "sas-ready" && (0, react_jsx_runtime.jsx)("strong", {
8707
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.sas,
8708
- children: joinProgress.sas
8709
- }),
8710
- !terminal && (0, react_jsx_runtime.jsxs)("small", {
8711
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.notice,
8712
- role: "status",
8713
- children: ["有效期至 ", joinProgress.expiresAt]
8714
- }),
8715
- (0, react_jsx_runtime.jsx)("button", {
8716
- type: "button",
8717
- className: terminal ? _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary : _dsh_awiki_css_AwikiIdentityAccess_module_css_default.secondary,
8718
- disabled: props.pending,
8719
- onClick: () => {
8720
- cancelJoin();
8721
- },
8722
- children: terminal ? "返回身份入口" : "取消加入"
8723
- }),
8724
- error !== null && (0, react_jsx_runtime.jsx)("small", {
8725
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.error,
8726
- role: "alert",
8727
- children: error
8728
- })
8729
- ]
8730
- }) });
8731
- }
8732
- if (props.sessionStatus === "unregistered" && joinContext !== null) return (0, react_jsx_runtime.jsx)(AwikiIdentityPage, { children: (0, react_jsx_runtime.jsxs)("div", {
8733
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.accessFlow,
8734
- children: [
8735
- (0, react_jsx_runtime.jsx)("div", {
8736
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.identityIcon,
8737
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconUserOutline16, { size: 24 })
8738
- }),
8739
- (0, react_jsx_runtime.jsxs)("div", {
8740
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8741
- children: [(0, react_jsx_runtime.jsx)("h3", { children: "这个 Handle 已存在" }), (0, react_jsx_runtime.jsx)("p", { children: "推荐把当前 DSH 作为新设备加入,原身份和其他设备会继续有效。" })]
8742
- }),
8743
- (0, react_jsx_runtime.jsx)("button", {
8744
- type: "button",
8745
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary,
8746
- disabled: props.pending,
8747
- onClick: () => {
8748
- beginJoin();
8749
- },
8750
- children: "加入新设备(推荐)"
8751
- }),
8752
- props.handleRecoveryPhoneEnabled && (0, react_jsx_runtime.jsx)("button", {
8753
- type: "button",
8754
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.dangerLink,
8755
- disabled: props.pending,
8756
- onClick: () => {
8757
- chooseRecovery();
8758
- },
8759
- children: "恢复 Handle(会替换 DID)"
8760
- }),
8761
- (0, react_jsx_runtime.jsx)("button", {
8762
- type: "button",
8763
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.secondary,
8764
- disabled: props.pending,
8765
- onClick: () => {
8766
- cancelJoin();
8767
- },
8768
- children: "取消"
8769
- }),
8770
- error !== null && (0, react_jsx_runtime.jsx)("small", {
8771
- className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.error,
8772
- role: "alert",
8773
- children: error
8774
- })
8775
- ]
8776
- }) });
8777
8167
  if (props.sessionStatus === "signed-out") {
8778
8168
  if (signedOutAlternative === "recover") return (0, react_jsx_runtime.jsx)(Recovery, {
8779
8169
  ...props,
@@ -8902,7 +8292,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8902
8292
  }),
8903
8293
  (0, react_jsx_runtime.jsxs)("div", {
8904
8294
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.headingGroup,
8905
- children: [(0, react_jsx_runtime.jsx)("h3", { children: registrationOtpSent ? "验证身份" : "进入 AWiki" }), (0, react_jsx_runtime.jsx)("p", { children: registrationOtpSent ? "输入注册验证码。新 Handle 会创建身份,已有 Handle 会进入设备加入选择。" : "输入 Handle 和手机号,统一获取注册验证码。" })]
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
+ ] })]
8906
8305
  }),
8907
8306
  (0, react_jsx_runtime.jsxs)("label", {
8908
8307
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.field,
@@ -8945,7 +8344,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8945
8344
  type: "submit",
8946
8345
  className: _dsh_awiki_css_AwikiIdentityAccess_module_css_default.primary,
8947
8346
  disabled: props.pending || handle.trim() === "" || phone.trim() === "" || registrationOtpSent && otp.trim() === "",
8948
- children: registrationOtpSent ? "继续" : "获取验证码"
8347
+ children: registrationOtpSent ? "创建身份" : "获取验证码"
8949
8348
  }),
8950
8349
  registrationOtpSent && (0, react_jsx_runtime.jsx)("button", {
8951
8350
  type: "button",
@@ -9229,7 +8628,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9229
8628
  pending: null,
9230
8629
  error: null,
9231
8630
  attachmentMaxBytes: 0,
9232
- handleRecoveryPhoneEnabled: false,
8631
+ profileName: null,
8632
+ legacySharedStateDetected: false,
9233
8633
  summaries: Object.freeze({}),
9234
8634
  recoveryOperationId: null,
9235
8635
  recoveryProgress: null
@@ -9504,18 +8904,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9504
8904
  ];
9505
8905
  /** Runtime-only decoded-byte budget that prevents repeat Host calls while browsing. */
9506
8906
  const BROWSER_IMAGE_ATTACHMENT_CACHE_MAX_BYTES = 33554432;
9507
- const RECOVERY_OPERATION_STORAGE_KEY = "awiki.handle-recovery.operation.v1";
9508
- function storedRecoveryOperation() {
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) {
9509
8912
  try {
9510
- return globalThis.localStorage?.getItem(RECOVERY_OPERATION_STORAGE_KEY) ?? null;
8913
+ return globalThis.localStorage?.getItem(recoveryOperationStorageKey(tenantDomain)) ?? null;
9511
8914
  } catch {
9512
8915
  return null;
9513
8916
  }
9514
8917
  }
9515
- function storeRecoveryOperation(operationId) {
8918
+ function storeRecoveryOperation(tenantDomain, operationId) {
8919
+ if (tenantDomain === void 0) return;
9516
8920
  try {
9517
- if (operationId === null) globalThis.localStorage?.removeItem(RECOVERY_OPERATION_STORAGE_KEY);
9518
- else globalThis.localStorage?.setItem(RECOVERY_OPERATION_STORAGE_KEY, operationId);
8921
+ const key = recoveryOperationStorageKey(tenantDomain);
8922
+ if (operationId === null) globalThis.localStorage?.removeItem(key);
8923
+ else globalThis.localStorage?.setItem(key, operationId);
9519
8924
  } catch {}
9520
8925
  }
9521
8926
  /** Wait between group-history readiness probes without retaining controller state. */
@@ -9649,10 +9054,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9649
9054
  identity: session.value.status === "active" ? session.value.identity : null,
9650
9055
  error: null,
9651
9056
  attachmentMaxBytes: config.value.attachmentMaxBytes,
9652
- handleRecoveryPhoneEnabled: config.value.handleRecoveryPhoneEnabled,
9653
- recoveryOperationId: storedRecoveryOperation()
9057
+ profileName: config.value.profileName ?? null,
9058
+ legacySharedStateDetected: config.value.legacySharedStateDetected ?? false,
9059
+ recoveryOperationId: storedRecoveryOperation(config.value.tenantDomain)
9654
9060
  });
9655
- const operationId = storedRecoveryOperation();
9061
+ const operationId = storedRecoveryOperation(config.value.tenantDomain);
9656
9062
  if (operationId !== null) {
9657
9063
  const recovery = await call(() => this.remote.getRecoveryStatus({ operationId }));
9658
9064
  if (this.current(generation) && recovery.ok) {
@@ -9662,7 +9068,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9662
9068
  recoveryProgress: recovery.value
9663
9069
  });
9664
9070
  if (recovery.value.phase === "applied") {
9665
- storeRecoveryOperation(null);
9071
+ storeRecoveryOperation(config.value.tenantDomain, null);
9666
9072
  this.publish({
9667
9073
  ...this.view,
9668
9074
  recoveryOperationId: null,
@@ -9722,8 +9128,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9722
9128
  ...INITIAL_VIEW,
9723
9129
  status: "ready",
9724
9130
  sessionStatus: "signed-out",
9725
- attachmentMaxBytes: this.config?.attachmentMaxBytes ?? 0,
9726
- handleRecoveryPhoneEnabled: this.config?.handleRecoveryPhoneEnabled ?? false
9131
+ attachmentMaxBytes: this.config?.attachmentMaxBytes ?? 0
9727
9132
  });
9728
9133
  return result;
9729
9134
  }
@@ -9777,49 +9182,15 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9777
9182
  const result = await this.withPending("注册身份", () => call(() => this.remote.registerIdentity(request), registrationFailureMessage));
9778
9183
  if (!result.ok) return result;
9779
9184
  if (!this.current(generation)) return result;
9780
- if (result.value.status === "registered") {
9781
- this.activatePresentationCache(result.value.identity);
9782
- this.publish({
9783
- ...this.view,
9784
- sessionStatus: "active",
9785
- identity: result.value.identity,
9786
- error: null
9787
- });
9788
- await this.refreshConversationsAndRecoverGroups(generation);
9789
- }
9790
- return result;
9791
- }
9792
- beginDeviceJoin() {
9793
- return this.withPending("开始加入设备", () => call(() => this.remote.beginDeviceJoin()));
9794
- }
9795
- async getDeviceJoinStatus() {
9796
- const result = await call(() => this.remote.getDeviceJoinStatus());
9797
- if (result.ok && result.value?.completed) await this.loadSession();
9798
- return result;
9799
- }
9800
- cancelDeviceJoin() {
9801
- return this.withPending("取消加入设备", async () => {
9802
- const result = await call(() => this.remote.cancelDeviceJoin());
9803
- return result.ok ? {
9804
- ok: true,
9805
- value: void 0
9806
- } : result;
9185
+ this.activatePresentationCache(result.value);
9186
+ this.publish({
9187
+ ...this.view,
9188
+ sessionStatus: "active",
9189
+ identity: result.value,
9190
+ error: null
9807
9191
  });
9808
- }
9809
- refreshDeviceManagement() {
9810
- return call(() => this.remote.refreshDeviceManagement());
9811
- }
9812
- startDeviceJoinVerification(request) {
9813
- return this.withPending("开始设备验证", () => call(() => this.remote.startDeviceJoinVerification(request)));
9814
- }
9815
- approveDeviceJoin(request) {
9816
- return this.withPending("批准设备", () => call(() => this.remote.approveDeviceJoin(request)));
9817
- }
9818
- rejectDeviceJoin(request) {
9819
- return this.withPending("拒绝设备", () => call(() => this.remote.rejectDeviceJoin(request)));
9820
- }
9821
- revokeDevice(request) {
9822
- return this.withPending("撤销设备", () => call(() => this.remote.revokeDevice(request)));
9192
+ await this.refreshConversationsAndRecoverGroups(generation);
9193
+ return result;
9823
9194
  }
9824
9195
  /**
9825
9196
  * Update the deployment identity's public display name.
@@ -9872,7 +9243,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9872
9243
  async sendRecoveryOtp(request) {
9873
9244
  const result = await this.withPending("发送恢复验证码", () => call(() => this.remote.sendRecoveryOtp(request), registrationOtpFailureMessage), { publishFailure: false });
9874
9245
  if (!result.ok) return result;
9875
- storeRecoveryOperation(result.value.operationId);
9246
+ storeRecoveryOperation(this.config?.tenantDomain, result.value.operationId);
9876
9247
  this.publish({
9877
9248
  ...this.view,
9878
9249
  recoveryOperationId: result.value.operationId,
@@ -9907,7 +9278,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9907
9278
  recoveryProgress: result.value
9908
9279
  });
9909
9280
  if (result.value.phase === "applied") {
9910
- storeRecoveryOperation(null);
9281
+ storeRecoveryOperation(this.config?.tenantDomain, null);
9911
9282
  this.publish({
9912
9283
  ...this.view,
9913
9284
  recoveryOperationId: null,
@@ -9928,7 +9299,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9928
9299
  recoveryProgress: result.value
9929
9300
  });
9930
9301
  if (result.value.phase === "applied") {
9931
- storeRecoveryOperation(null);
9302
+ storeRecoveryOperation(this.config?.tenantDomain, null);
9932
9303
  this.publish({
9933
9304
  ...this.view,
9934
9305
  recoveryOperationId: null,
@@ -9955,7 +9326,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9955
9326
  recoveryProgress: result.value
9956
9327
  });
9957
9328
  if (result.value.phase === "applied") {
9958
- storeRecoveryOperation(null);
9329
+ storeRecoveryOperation(this.config?.tenantDomain, null);
9959
9330
  this.publish({
9960
9331
  ...this.view,
9961
9332
  recoveryOperationId: null,
@@ -9976,7 +9347,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9976
9347
  if (phase !== void 0 && phase !== "awaiting_factor" && phase !== "ready_to_commit") return this.fail("当前恢复状态不能取消");
9977
9348
  const result = await this.withPending("取消身份恢复", () => call(() => this.remote.discardRecovery({ operationId })), { publishFailure: false });
9978
9349
  if (!result.ok) return result;
9979
- storeRecoveryOperation(null);
9350
+ storeRecoveryOperation(this.config?.tenantDomain, null);
9980
9351
  this.publish({
9981
9352
  ...this.view,
9982
9353
  recoveryOperationId: null,
@@ -9987,6 +9358,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9987
9358
  value: void 0
9988
9359
  };
9989
9360
  }
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
+ }
9990
9371
  /** Read the active deployment identity's public mailbox state. */
9991
9372
  getMailAccount() {
9992
9373
  return call(() => this.remote.getMailAccount(), mailFailureMessage);
@@ -10007,6 +9388,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10007
9388
  sendMail(request) {
10008
9389
  return call(() => this.remote.sendMail(request), mailFailureMessage);
10009
9390
  }
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
+ }
10010
9405
  /**
10011
9406
  * Load another page of the conversation roster.
10012
9407
  * @returns successful pagination or one display-safe failure.
@@ -10842,13 +10237,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10842
10237
  if (!result.ok) return result;
10843
10238
  await this.persistentImageCache.clear().catch(() => void 0);
10844
10239
  this.close();
10240
+ const tenantDomain = this.config?.tenantDomain;
10845
10241
  this.config = null;
10846
10242
  this.conversationsCursor = void 0;
10847
10243
  this.historyCursor = void 0;
10848
10244
  this.unreadAtOpen.clear();
10849
10245
  this.summaryBaselines.clear();
10850
10246
  this.clearPresentationCache();
10851
- storeRecoveryOperation(null);
10247
+ storeRecoveryOperation(tenantDomain, null);
10852
10248
  this.publish({
10853
10249
  ...INITIAL_VIEW,
10854
10250
  status: "ready"
@@ -11578,22 +10974,160 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11578
10974
  } catch {}
11579
10975
  }
11580
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;
11069
+ try {
11070
+ binary = atob(value.bytesBase64);
11071
+ } catch {
11072
+ invalid("下载附件编码无效。");
11073
+ }
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
+ }
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");
11088
+ 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;
11108
+ }
11109
+ //#endregion
11581
11110
  //#region \0dsh-awiki-css:AwikiMail.module.css.mjs
11582
- 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}}";
11583
- const tagId$2 = "@awiki/dsh-plugin/AwikiMail.module.css";
11584
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$2) + "]") === null) {
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) {
11585
11114
  const tag = document.createElement("style");
11586
11115
  tag.dataset.plugin = "@awiki/dsh-plugin";
11587
- tag.dataset.pluginCss = tagId$2;
11588
- tag.textContent = css$2;
11116
+ tag.dataset.pluginCss = tagId$1;
11117
+ tag.textContent = css$1;
11589
11118
  document.head.appendChild(tag);
11590
11119
  }
11591
11120
  var _dsh_awiki_css_AwikiMail_module_css_default = {
11592
11121
  "accountCard": "eMUW5a_accountCard",
11593
11122
  "accountStatus": "eMUW5a_accountStatus",
11123
+ "attachmentDownloadError": "eMUW5a_attachmentDownloadError",
11124
+ "attachmentInput": "eMUW5a_attachmentInput",
11125
+ "attachmentPicker": "eMUW5a_attachmentPicker",
11126
+ "attachmentPickerRow": "eMUW5a_attachmentPickerRow",
11594
11127
  "attachments": "eMUW5a_attachments",
11595
11128
  "bodyField": "eMUW5a_bodyField",
11596
11129
  "cancelButton": "eMUW5a_cancelButton",
11130
+ "composeAttachments": "eMUW5a_composeAttachments",
11597
11131
  "composeError": "eMUW5a_composeError",
11598
11132
  "composeFields": "eMUW5a_composeFields",
11599
11133
  "composeFooter": "eMUW5a_composeFooter",
@@ -11609,6 +11143,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11609
11143
  "folderNav": "eMUW5a_folderNav",
11610
11144
  "folderRow": "eMUW5a_folderRow",
11611
11145
  "inlineError": "eMUW5a_inlineError",
11146
+ "listBack": "eMUW5a_listBack",
11612
11147
  "listHeader": "eMUW5a_listHeader",
11613
11148
  "loadingState": "eMUW5a_loadingState",
11614
11149
  "loadMore": "eMUW5a_loadMore",
@@ -11629,6 +11164,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11629
11164
  "rows": "eMUW5a_rows",
11630
11165
  "rowSubject": "eMUW5a_rowSubject",
11631
11166
  "rowTop": "eMUW5a_rowTop",
11167
+ "selectedAttachments": "eMUW5a_selectedAttachments",
11632
11168
  "sendButton": "eMUW5a_sendButton",
11633
11169
  "sidebar": "eMUW5a_sidebar",
11634
11170
  "truncatedNotice": "eMUW5a_truncatedNotice",
@@ -11674,6 +11210,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11674
11210
  function utf8Bytes(value) {
11675
11211
  return new TextEncoder().encode(value).byteLength;
11676
11212
  }
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
+ }
11677
11218
  function browserLocalStorage() {
11678
11219
  try {
11679
11220
  return window.localStorage;
@@ -11810,6 +11351,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11810
11351
  const [cc, setCc] = (0, react.useState)("");
11811
11352
  const [subject, setSubject] = (0, react.useState)("");
11812
11353
  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)({});
11813
11358
  const [composeError, setComposeError] = (0, react.useState)(null);
11814
11359
  const [confirmOpen, setConfirmOpen] = (0, react.useState)(false);
11815
11360
  const [discardOpen, setDiscardOpen] = (0, react.useState)(false);
@@ -11820,6 +11365,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11820
11365
  const loadGeneration = (0, react.useRef)(0);
11821
11366
  const detailGeneration = (0, react.useRef)(0);
11822
11367
  const noticeRevision = (0, react.useRef)(0);
11368
+ const attachmentRevision = (0, react.useRef)(0);
11369
+ const fileInput = (0, react.useRef)(null);
11823
11370
  const visibleUnreadCount = (0, react.useMemo)(() => items.reduce((total, item) => total + (item.unread ? 1 : 0), 0), [items]);
11824
11371
  (0, react.useEffect)(() => {
11825
11372
  props.onUnreadCountChange(inboxUnreadCount);
@@ -11868,6 +11415,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11868
11415
  setListError(null);
11869
11416
  setNotice(null);
11870
11417
  const cacheVisible = hydrateListCache(requestedFolder);
11418
+ const configRequest = props.getConfig();
11871
11419
  const accountRequest = props.getMailAccount();
11872
11420
  const inboxRequest = props.listMailInbox({
11873
11421
  folder: requestedFolder,
@@ -11875,6 +11423,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11875
11423
  limit: 20,
11876
11424
  offset: 0
11877
11425
  });
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);
11878
11433
  const accountResult = await accountRequest;
11879
11434
  if (generation !== loadGeneration.current) return;
11880
11435
  if (accountResult.ok) setAccount(accountResult.value);
@@ -11920,6 +11475,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11920
11475
  setSelectedId(null);
11921
11476
  setMessage(null);
11922
11477
  setDetailError(null);
11478
+ setDownloadStates({});
11923
11479
  if (!hydrateListCache(nextFolder)) applyListPage(nextFolder, {
11924
11480
  items: [],
11925
11481
  hasMore: false
@@ -11932,6 +11488,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
11932
11488
  setCompose(false);
11933
11489
  setSelectedId(summary.id);
11934
11490
  setMessage(null);
11491
+ setDownloadStates({});
11935
11492
  setDetailLoading(true);
11936
11493
  setDetailError(null);
11937
11494
  setNotice(null);
@@ -12011,6 +11568,14 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12011
11568
  showNotice(result.value.updated > 0 ? "已标为已读。" : "该邮件已经是已读状态。");
12012
11569
  };
12013
11570
  const requestSend = () => {
11571
+ if (attachmentError !== null) {
11572
+ setComposeError(attachmentError);
11573
+ return;
11574
+ }
11575
+ if (attachments.length > 0 && attachmentLimits === null) {
11576
+ setComposeError("邮件附件限制暂不可用,请稍后刷新邮箱再试。");
11577
+ return;
11578
+ }
12014
11579
  const validated = validateDraft$1(to, cc, subject, bodyText);
12015
11580
  if (!validated.ok) {
12016
11581
  setComposeError(validated.error);
@@ -12024,6 +11589,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12024
11589
  setCc("");
12025
11590
  setSubject("");
12026
11591
  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);
12027
11618
  setComposeError(null);
12028
11619
  };
12029
11620
  const confirmSend = async () => {
@@ -12033,12 +11624,27 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12033
11624
  setComposeError(validated.error);
12034
11625
  return;
12035
11626
  }
11627
+ if (attachmentError !== null || attachments.length > 0 && attachmentLimits === null) {
11628
+ setConfirmOpen(false);
11629
+ setComposeError(attachmentError ?? "邮件附件限制暂不可用,请稍后刷新邮箱再试。");
11630
+ return;
11631
+ }
12036
11632
  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
+ }
12037
11642
  const request = {
12038
11643
  to: validated.value.to,
12039
11644
  cc: validated.value.cc,
12040
11645
  subject: validated.value.subject,
12041
- bodyText: validated.value.bodyText
11646
+ bodyText: validated.value.bodyText,
11647
+ ...encodedAttachments.length === 0 ? {} : { attachments: encodedAttachments }
12042
11648
  };
12043
11649
  const result = await props.sendMail(request);
12044
11650
  setSending(false);
@@ -12051,7 +11657,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12051
11657
  setComposeError("邮件服务没有接受本次发送,请检查内容后重试。");
12052
11658
  return;
12053
11659
  }
12054
- const warningText = result.value.warnings.length === 0 ? "" : `,服务返回 ${result.value.warnings.length} 条提示`;
11660
+ const acceptedWithWarning = result.value.warnings.length > 0;
12055
11661
  clearDraft();
12056
11662
  setFolder("sent");
12057
11663
  const storage = browserLocalStorage();
@@ -12064,9 +11670,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12064
11670
  setCompose(false);
12065
11671
  setPane("list");
12066
11672
  refresh("sent");
12067
- showNotice(`邮件已发送${warningText}。`);
11673
+ showNotice(acceptedWithWarning ? `邮件已被服务接受,但返回 ${result.value.warnings.length} 条本地记录提示,请勿立即重复发送。` : "邮件已发送。");
12068
11674
  };
12069
- const dirty = to.trim() !== "" || cc.trim() !== "" || subject.trim() !== "" || bodyText.trim() !== "";
11675
+ const dirty = to.trim() !== "" || cc.trim() !== "" || subject.trim() !== "" || bodyText.trim() !== "" || attachments.length > 0;
12070
11676
  const cancelCompose = () => {
12071
11677
  if (dirty) {
12072
11678
  setDiscardOpen(true);
@@ -12076,6 +11682,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12076
11682
  setPane("list");
12077
11683
  };
12078
11684
  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
+ };
12079
11718
  return (0, react_jsx_runtime.jsxs)("div", {
12080
11719
  className: _dsh_awiki_css_AwikiMail_module_css_default.mail,
12081
11720
  "data-pane": pane,
@@ -12141,19 +11780,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12141
11780
  children: [
12142
11781
  (0, react_jsx_runtime.jsxs)("header", {
12143
11782
  className: _dsh_awiki_css_AwikiMail_module_css_default.listHeader,
12144
- 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: [
12145
- items.length,
12146
- " 封邮件",
12147
- folder === "inbox" && visibleUnreadCount > 0 ? ` · ${visibleUnreadCount} 封未读` : ""
12148
- ] })] }), (0, react_jsx_runtime.jsx)("button", {
12149
- type: "button",
12150
- "aria-label": `刷新${MAIL_FOLDER_COPY[folder].title}`,
12151
- disabled: listLoading,
12152
- onClick: () => {
12153
- refresh();
12154
- },
12155
- 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 })
12156
- })]
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
+ ]
12157
11808
  }),
12158
11809
  listError !== null && (0, react_jsx_runtime.jsxs)("div", {
12159
11810
  className: _dsh_awiki_css_AwikiMail_module_css_default.inlineError,
@@ -12214,7 +11865,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12214
11865
  "aria-label": `返回${MAIL_FOLDER_COPY[folder].title}`,
12215
11866
  onClick: cancelCompose,
12216
11867
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, { size: 14 })
12217
- }), (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: "写邮件" }), (0, react_jsx_runtime.jsx)("small", { children: "发送纯文本邮件" })] })]
11868
+ }), (0, react_jsx_runtime.jsxs)("div", { children: [(0, react_jsx_runtime.jsx)("strong", { children: "写邮件" }), (0, react_jsx_runtime.jsx)("small", { children: "发送纯文本邮件,可添加附件" })] })]
12218
11869
  }),
12219
11870
  (0, react_jsx_runtime.jsxs)("div", {
12220
11871
  className: _dsh_awiki_css_AwikiMail_module_css_default.composeFields,
@@ -12222,6 +11873,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12222
11873
  (0, react_jsx_runtime.jsxs)("label", { children: ["收件人", (0, react_jsx_runtime.jsx)("textarea", {
12223
11874
  value: to,
12224
11875
  rows: 1,
11876
+ disabled: sending,
12225
11877
  autoFocus: true,
12226
11878
  placeholder: "alice@example.com,可用逗号或换行分隔",
12227
11879
  onChange: (event) => {
@@ -12232,6 +11884,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12232
11884
  (0, react_jsx_runtime.jsxs)("label", { children: ["抄送", (0, react_jsx_runtime.jsx)("textarea", {
12233
11885
  value: cc,
12234
11886
  rows: 1,
11887
+ disabled: sending,
12235
11888
  placeholder: "选填",
12236
11889
  onChange: (event) => {
12237
11890
  setCc(event.target.value);
@@ -12240,6 +11893,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12240
11893
  })] }),
12241
11894
  (0, react_jsx_runtime.jsxs)("label", { children: ["主题", (0, react_jsx_runtime.jsx)("input", {
12242
11895
  value: subject,
11896
+ disabled: sending,
12243
11897
  placeholder: "邮件主题",
12244
11898
  onChange: (event) => {
12245
11899
  setSubject(event.target.value);
@@ -12250,6 +11904,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12250
11904
  className: _dsh_awiki_css_AwikiMail_module_css_default.bodyField,
12251
11905
  children: ["正文", (0, react_jsx_runtime.jsx)("textarea", {
12252
11906
  value: bodyText,
11907
+ disabled: sending,
12253
11908
  placeholder: "输入纯文本邮件正文",
12254
11909
  onChange: (event) => {
12255
11910
  setBodyText(event.target.value);
@@ -12257,6 +11912,65 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12257
11912
  }
12258
11913
  })]
12259
11914
  }),
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
+ }),
12260
11974
  composeError !== null && (0, react_jsx_runtime.jsx)("p", {
12261
11975
  className: _dsh_awiki_css_AwikiMail_module_css_default.composeError,
12262
11976
  role: "alert",
@@ -12275,7 +11989,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12275
11989
  }), (0, react_jsx_runtime.jsxs)("button", {
12276
11990
  type: "submit",
12277
11991
  className: _dsh_awiki_css_AwikiMail_module_css_default.sendButton,
12278
- disabled: sending,
11992
+ disabled: sending || attachmentError !== null,
12279
11993
  children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconSendOutline16, { size: 15 }), "发送"]
12280
11994
  })]
12281
11995
  })
@@ -12300,8 +12014,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12300
12014
  className: _dsh_awiki_css_AwikiMail_module_css_default.detailBack,
12301
12015
  "aria-label": `返回${MAIL_FOLDER_COPY[folder].title}`,
12302
12016
  onClick: () => {
12017
+ detailGeneration.current += 1;
12303
12018
  setSelectedId(null);
12304
12019
  setMessage(null);
12020
+ setDownloadStates({});
12305
12021
  setPane("list");
12306
12022
  },
12307
12023
  children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconChevronLeftOutline14, { size: 14 })
@@ -12357,8 +12073,33 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12357
12073
  }),
12358
12074
  message.attachments.length > 0 && (0, react_jsx_runtime.jsxs)("section", {
12359
12075
  className: _dsh_awiki_css_AwikiMail_module_css_default.attachments,
12360
- "aria-label": "附件元数据",
12361
- 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))]
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
+ })]
12362
12103
  })
12363
12104
  ]
12364
12105
  })
@@ -12411,7 +12152,20 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12411
12152
  splitAddresses(cc).length,
12412
12153
  " 人"
12413
12154
  ] }),
12414
- (0, react_jsx_runtime.jsxs)("p", { children: ["主题:", subject.trim()] })
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))
12415
12169
  ]
12416
12170
  })
12417
12171
  }),
@@ -12422,7 +12176,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12422
12176
  },
12423
12177
  title: "放弃这封邮件?",
12424
12178
  closeLabel: "继续编辑",
12425
- description: "首版不会保存草稿,放弃后当前内容将被清空。",
12179
+ description: "当前不会保存草稿,放弃后文字和附件选择都会被清空。",
12426
12180
  footer: (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [(0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Button, {
12427
12181
  type: "button",
12428
12182
  variant: "outline",
@@ -12443,7 +12197,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12443
12197
  })] }),
12444
12198
  children: (0, react_jsx_runtime.jsx)("p", {
12445
12199
  className: _dsh_awiki_css_AwikiMail_module_css_default.discardText,
12446
- children: "收件人、主题和正文中的未发送内容都会丢失。"
12200
+ children: "收件人、主题、正文和已选择的附件都会丢失。"
12447
12201
  })
12448
12202
  })
12449
12203
  ]
@@ -13090,247 +12844,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13090
12844
  });
13091
12845
  }
13092
12846
  //#endregion
13093
- //#region \0dsh-awiki-css:AwikiDevices.module.css.mjs
13094
- 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)}";
13095
- const tagId$1 = "@awiki/dsh-plugin/AwikiDevices.module.css";
13096
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$1) + "]") === null) {
13097
- const tag = document.createElement("style");
13098
- tag.dataset.plugin = "@awiki/dsh-plugin";
13099
- tag.dataset.pluginCss = tagId$1;
13100
- tag.textContent = css$1;
13101
- document.head.appendChild(tag);
13102
- }
13103
- var _dsh_awiki_css_AwikiDevices_module_css_default = {
13104
- "actions": "xQ4iKW_actions",
13105
- "card": "xQ4iKW_card",
13106
- "error": "xQ4iKW_error",
13107
- "heading": "xQ4iKW_heading",
13108
- "page": "xQ4iKW_page",
13109
- "sas": "xQ4iKW_sas"
13110
- };
13111
- //#endregion
13112
- //#region lib/types/client/AwikiDevices.js
13113
- /** Foreground-only ready-admin device management. SAS remains component-local. */
13114
- function AwikiDevices(props) {
13115
- const [snapshot, setSnapshot] = (0, react.useState)(null);
13116
- const [progress, setProgress] = (0, react.useState)(null);
13117
- const [enteredSas, setEnteredSas] = (0, react.useState)("");
13118
- const [approval, setApproval] = (0, react.useState)("");
13119
- const [revokeRef, setRevokeRef] = (0, react.useState)(null);
13120
- const [revokeConfirmation, setRevokeConfirmation] = (0, react.useState)("");
13121
- const [error, setError] = (0, react.useState)(null);
13122
- const refresh = async () => {
13123
- const result = await props.refreshDeviceManagement();
13124
- if (!result.ok) return setError(result.error);
13125
- setSnapshot(result.value);
13126
- if (progress !== null && ![
13127
- "authorized",
13128
- "cancelled",
13129
- "rejected",
13130
- "expired"
13131
- ].includes(progress.phase)) {
13132
- const advanced = await props.startDeviceJoinVerification({ requestRef: progress.requestRef });
13133
- if (advanced.ok) setProgress(advanced.value);
13134
- }
13135
- setError(null);
13136
- };
13137
- (0, react.useEffect)(() => {
13138
- if (!props.active) return;
13139
- let alive = true;
13140
- props.refreshDeviceManagement().then((result) => {
13141
- if (!alive) return;
13142
- if (result.ok) setSnapshot(result.value);
13143
- else setError(result.error);
13144
- });
13145
- const timer = setInterval(() => {
13146
- if (alive) refresh();
13147
- }, 3e3);
13148
- return () => {
13149
- alive = false;
13150
- clearInterval(timer);
13151
- };
13152
- }, [
13153
- props.active,
13154
- progress?.phase,
13155
- progress?.requestRef
13156
- ]);
13157
- const start = async (requestRef) => {
13158
- const result = await props.startDeviceJoinVerification({ requestRef });
13159
- if (!result.ok) return setError(result.error);
13160
- setProgress(result.value);
13161
- setError(null);
13162
- };
13163
- const approve = async () => {
13164
- if (progress === null) return;
13165
- const result = await props.approveDeviceJoin({
13166
- requestRef: progress.requestRef,
13167
- enteredSas,
13168
- confirmation: approval
13169
- });
13170
- if (!result.ok) return setError(result.error);
13171
- setProgress(null);
13172
- setEnteredSas("");
13173
- setApproval("");
13174
- await refresh();
13175
- };
13176
- const reject = async (requestRef) => {
13177
- const result = await props.rejectDeviceJoin({
13178
- requestRef,
13179
- reason: "user_rejected"
13180
- });
13181
- if (!result.ok) return setError(result.error);
13182
- setProgress(null);
13183
- await refresh();
13184
- };
13185
- const revoke = async () => {
13186
- if (revokeRef === null) return;
13187
- const result = await props.revokeDevice({
13188
- deviceRef: revokeRef,
13189
- confirmation: revokeConfirmation
13190
- });
13191
- if (!result.ok) return setError(result.error);
13192
- setSnapshot(result.value);
13193
- setRevokeRef(null);
13194
- setRevokeConfirmation("");
13195
- setError(null);
13196
- };
13197
- return (0, react_jsx_runtime.jsxs)("section", {
13198
- className: _dsh_awiki_css_AwikiDevices_module_css_default.page,
13199
- "aria-label": "AWiki 设备管理",
13200
- children: [
13201
- props.modeTabs,
13202
- (0, react_jsx_runtime.jsxs)("header", {
13203
- className: _dsh_awiki_css_AwikiDevices_module_css_default.heading,
13204
- 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", {
13205
- type: "button",
13206
- disabled: props.pending,
13207
- onClick: () => {
13208
- refresh();
13209
- },
13210
- children: "刷新"
13211
- })]
13212
- }),
13213
- snapshot === null && (0, react_jsx_runtime.jsx)("p", {
13214
- role: "status",
13215
- children: "正在读取设备状态…"
13216
- }),
13217
- snapshot !== null && !snapshot.canManage && (0, react_jsx_runtime.jsx)("p", { children: "当前设备不是可用的管理设备,不能批准或撤销其他设备。" }),
13218
- snapshot?.canManage && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
13219
- (0, react_jsx_runtime.jsxs)("section", { children: [
13220
- (0, react_jsx_runtime.jsx)("h4", { children: "待加入" }),
13221
- snapshot.requests.length === 0 && (0, react_jsx_runtime.jsx)("p", { children: "没有待处理请求。" }),
13222
- snapshot.requests.map((request) => (0, react_jsx_runtime.jsxs)("article", {
13223
- className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
13224
- children: [
13225
- (0, react_jsx_runtime.jsx)("code", { children: request.candidateKeyFingerprint }),
13226
- (0, react_jsx_runtime.jsxs)("small", { children: [
13227
- request.state,
13228
- " · 有效期至 ",
13229
- request.expiresAt
13230
- ] }),
13231
- (0, react_jsx_runtime.jsxs)("div", {
13232
- className: _dsh_awiki_css_AwikiDevices_module_css_default.actions,
13233
- children: [(0, react_jsx_runtime.jsx)("button", {
13234
- type: "button",
13235
- disabled: props.pending || !request.canStartVerification && !request.claimedByCurrentDevice,
13236
- onClick: () => {
13237
- start(request.requestRef);
13238
- },
13239
- children: "开始验证"
13240
- }), (0, react_jsx_runtime.jsx)("button", {
13241
- type: "button",
13242
- disabled: props.pending,
13243
- onClick: () => {
13244
- reject(request.requestRef);
13245
- },
13246
- children: "拒绝"
13247
- })]
13248
- })
13249
- ]
13250
- }, request.requestRef))
13251
- ] }),
13252
- progress?.phase === "sas-ready" && (0, react_jsx_runtime.jsxs)("section", {
13253
- className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
13254
- children: [
13255
- (0, react_jsx_runtime.jsx)("h4", { children: "核对安全码" }),
13256
- (0, react_jsx_runtime.jsx)("strong", {
13257
- className: _dsh_awiki_css_AwikiDevices_module_css_default.sas,
13258
- children: progress.sas
13259
- }),
13260
- (0, react_jsx_runtime.jsx)("p", { children: "输入手机显示的 6 位码,并输入 APPROVE。" }),
13261
- (0, react_jsx_runtime.jsx)("input", {
13262
- "aria-label": "手机安全码",
13263
- value: enteredSas,
13264
- inputMode: "numeric",
13265
- maxLength: 6,
13266
- onChange: (event) => {
13267
- setEnteredSas(event.target.value);
13268
- }
13269
- }),
13270
- (0, react_jsx_runtime.jsx)("input", {
13271
- "aria-label": "批准确认词",
13272
- value: approval,
13273
- autoComplete: "off",
13274
- onChange: (event) => {
13275
- setApproval(event.target.value);
13276
- },
13277
- placeholder: "APPROVE"
13278
- }),
13279
- (0, react_jsx_runtime.jsx)("button", {
13280
- type: "button",
13281
- disabled: props.pending || enteredSas.length !== 6 || approval !== "APPROVE",
13282
- onClick: () => {
13283
- approve();
13284
- },
13285
- children: "批准为 member"
13286
- })
13287
- ]
13288
- }),
13289
- (0, react_jsx_runtime.jsxs)("section", { children: [(0, react_jsx_runtime.jsx)("h4", { children: "已登记设备" }), snapshot.devices.map((device) => (0, react_jsx_runtime.jsxs)("article", {
13290
- className: _dsh_awiki_css_AwikiDevices_module_css_default.card,
13291
- children: [(0, react_jsx_runtime.jsxs)("span", { children: [
13292
- device.isCurrent ? "当前设备" : "其他设备",
13293
- " · ",
13294
- device.role,
13295
- " · ",
13296
- device.status
13297
- ] }), !device.isCurrent && device.status === "active" && (revokeRef === device.deviceRef ? (0, react_jsx_runtime.jsxs)("div", {
13298
- className: _dsh_awiki_css_AwikiDevices_module_css_default.actions,
13299
- children: [(0, react_jsx_runtime.jsx)("input", {
13300
- "aria-label": "撤销确认词",
13301
- value: revokeConfirmation,
13302
- onChange: (event) => {
13303
- setRevokeConfirmation(event.target.value);
13304
- },
13305
- placeholder: "REVOKE"
13306
- }), (0, react_jsx_runtime.jsx)("button", {
13307
- type: "button",
13308
- disabled: props.pending || revokeConfirmation !== "REVOKE",
13309
- onClick: () => {
13310
- revoke();
13311
- },
13312
- children: "确认撤销"
13313
- })]
13314
- }) : (0, react_jsx_runtime.jsx)("button", {
13315
- type: "button",
13316
- disabled: props.pending,
13317
- onClick: () => {
13318
- setRevokeRef(device.deviceRef);
13319
- setRevokeConfirmation("");
13320
- },
13321
- children: "撤销"
13322
- }))]
13323
- }, device.deviceRef))] })
13324
- ] }),
13325
- error !== null && (0, react_jsx_runtime.jsx)("p", {
13326
- className: _dsh_awiki_css_AwikiDevices_module_css_default.error,
13327
- role: "alert",
13328
- children: error
13329
- })
13330
- ]
13331
- });
13332
- }
13333
- //#endregion
13334
12847
  //#region lib/types/client/AwikiProfileCard.js
13335
12848
  const MAX_DISPLAY_NAME = 50;
13336
12849
  const MAX_BIO = 100;
@@ -13799,35 +13312,23 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
13799
13312
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.modeTabs,
13800
13313
  role: "tablist",
13801
13314
  "aria-label": "AWiki 功能",
13802
- children: [
13803
- (0, react_jsx_runtime.jsx)("button", {
13804
- type: "button",
13805
- role: "tab",
13806
- "aria-selected": props.mode === "chat",
13807
- onClick: () => {
13808
- props.onChange("chat");
13809
- },
13810
- children: "会话"
13811
- }),
13812
- (0, react_jsx_runtime.jsxs)("button", {
13813
- type: "button",
13814
- role: "tab",
13815
- "aria-selected": props.mode === "mail",
13816
- onClick: () => {
13817
- props.onChange("mail");
13818
- },
13819
- children: ["邮件", props.mailUnreadCount > 0 && (0, react_jsx_runtime.jsx)("small", { children: props.mailUnreadCount > 99 ? "99+" : props.mailUnreadCount })]
13820
- }),
13821
- (0, react_jsx_runtime.jsx)("button", {
13822
- type: "button",
13823
- role: "tab",
13824
- "aria-selected": props.mode === "devices",
13825
- onClick: () => {
13826
- props.onChange("devices");
13827
- },
13828
- children: "设备"
13829
- })
13830
- ]
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
+ })]
13831
13332
  });
13832
13333
  }
13833
13334
  /** Incoming sender label: WNS display name, then Handle, then DID. */
@@ -15541,113 +15042,95 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
15541
15042
  recoveryOperationId: view.recoveryOperationId,
15542
15043
  recoveryProgress: view.recoveryProgress,
15543
15044
  pending: view.pending !== null,
15544
- handleRecoveryPhoneEnabled: view.handleRecoveryPhoneEnabled
15045
+ profileName: view.profileName,
15046
+ legacySharedStateDetected: view.legacySharedStateDetected
15545
15047
  })
15546
15048
  }),
15547
- view.status === "ready" && view.sessionStatus === "active" && view.identity !== null && (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
15548
- (0, react_jsx_runtime.jsx)("div", {
15549
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15550
- "data-active": mode === "chat" || void 0,
15551
- hidden: mode !== "chat",
15552
- children: (0, react_jsx_runtime.jsx)(Chat, {
15553
- ...props,
15554
- selectConversation,
15555
- view: {
15556
- ...view,
15557
- identity: view.identity
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);
15558
15069
  },
15559
- modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15560
- mode,
15561
- mailUnreadCount,
15562
- onChange: setMode
15563
- }),
15564
- composeMenu: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.Menu, {
15565
- open: menuOpen,
15566
- onClose: () => {
15567
- setMenuOpen(false);
15070
+ align: "end",
15071
+ portal: true,
15072
+ compact: true,
15073
+ items: [
15074
+ {
15075
+ id: "direct",
15076
+ label: "发起私聊"
15568
15077
  },
15569
- align: "end",
15570
- portal: true,
15571
- compact: true,
15572
- items: [
15573
- {
15574
- id: "direct",
15575
- label: "发起私聊"
15576
- },
15577
- {
15578
- id: "group",
15579
- label: "发起群聊"
15580
- },
15581
- {
15582
- id: "join-group",
15583
- label: "加入群聊"
15584
- }
15585
- ],
15586
- onSelect: (id) => {
15587
- setMenuOpen(false);
15588
- if (id === "direct") setComposeDirect(true);
15589
- if (id === "group") setComposeGroup(true);
15590
- if (id === "join-group") setJoinGroupOpen(true);
15078
+ {
15079
+ id: "group",
15080
+ label: "发起群聊"
15591
15081
  },
15592
- anchor: (0, react_jsx_runtime.jsx)("button", {
15593
- type: "button",
15594
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.rosterAction,
15595
- "aria-label": "发起会话",
15596
- "aria-expanded": menuOpen,
15597
- "aria-haspopup": "menu",
15598
- onClick: () => {
15599
- setMenuOpen((value) => !value);
15600
- },
15601
- children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, {})
15602
- })
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);
15101
+ },
15102
+ children: (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.IconPlusOutline16, {})
15603
15103
  })
15604
15104
  })
15605
- }),
15606
- (0, react_jsx_runtime.jsx)("div", {
15607
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15608
- "data-active": mode === "mail" || void 0,
15609
- hidden: mode !== "mail",
15610
- children: (0, react_jsx_runtime.jsx)(AwikiMail, {
15611
- active: mode === "mail",
15612
- cacheOwner: view.identity.did,
15613
- identityCard: mode === "mail" ? (0, react_jsx_runtime.jsx)(AwikiProfileCard, {
15614
- identity: view.identity,
15615
- profile: view.profile,
15616
- pending: view.pending !== null,
15617
- updateProfile: props.updateProfile
15618
- }) : null,
15619
- modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15620
- mode,
15621
- mailUnreadCount,
15622
- onChange: setMode
15623
- }),
15624
- onUnreadCountChange: setMailUnreadCount,
15625
- getMailAccount: props.getMailAccount,
15626
- listMailInbox: props.listMailInbox,
15627
- readMail: props.readMail,
15628
- markMailRead: props.markMailRead,
15629
- sendMail: props.sendMail
15630
- }, view.identity.did)
15631
- }),
15632
- mode === "devices" && (0, react_jsx_runtime.jsx)("div", {
15633
- className: _dsh_awiki_css_AwikiOverlay_module_css_default.modePanel,
15634
- "data-active": true,
15635
- children: (0, react_jsx_runtime.jsx)(AwikiDevices, {
15636
- active: true,
15637
- pending: view.pending !== null,
15638
- modeTabs: (0, react_jsx_runtime.jsx)(ModeTabs, {
15639
- mode,
15640
- mailUnreadCount,
15641
- onChange: setMode
15642
- }),
15643
- refreshDeviceManagement: props.refreshDeviceManagement,
15644
- startDeviceJoinVerification: props.startDeviceJoinVerification,
15645
- approveDeviceJoin: props.approveDeviceJoin,
15646
- rejectDeviceJoin: props.rejectDeviceJoin,
15647
- revokeDevice: props.revokeDevice
15648
- })
15649
15105
  })
15650
- ] }),
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,
15116
+ 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
+ })] }),
15651
15134
  composeDirect && (0, react_jsx_runtime.jsx)("div", {
15652
15135
  className: _dsh_awiki_css_AwikiOverlay_module_css_default.composeBackdrop,
15653
15136
  children: (0, react_jsx_runtime.jsxs)("form", {
@@ -16235,16 +15718,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16235
15718
  /** Bilingual copy for the AWiki identity and installation settings page. */
16236
15719
  const zh = {
16237
15720
  nav: "AWiki",
16238
- intro: "管理 AWiki 身份、域名与本地数据设置。",
16239
- domainLabel: "默认域名",
16240
- domainDescription: "输入纯域名,不要包含协议、路径或端口。",
15721
+ intro: "管理 AWiki 租户、身份与本地数据设置。",
15722
+ domainLabel: "租户域名",
15723
+ domainDescription: "输入纯域名;重启后 User、Message、Mail 与附件服务都会切换到该域名。",
16241
15724
  defaultValue: "默认值:{domain}",
16242
15725
  save: "保存",
16243
15726
  saving: "保存中…",
16244
15727
  reset: "恢复默认值",
16245
15728
  saved: "已保存。",
16246
15729
  restartNotice: "重启 DeepSeek Harness 后生效。",
16247
- identityNotice: "此设置仅影响后续注册和短 Handle 的域名补全,不会改写已经注册的 DID 或 Handle。",
15730
+ identityNotice: "不同域名使用相互隔离的本地身份、消息与身份恢复进度。切回原域名时会恢复该域名原有的本地状态。",
16248
15731
  invalidDomain: "请输入有效的域名,例如 awiki.ai。",
16249
15732
  saveFailed: "未能保存设置,请刷新后重试。",
16250
15733
  loading: "正在读取 AWiki 设置…",
@@ -16267,16 +15750,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16267
15750
  };
16268
15751
  const en = {
16269
15752
  nav: "AWiki",
16270
- intro: "Manage AWiki identity, domain, and local data settings.",
16271
- domainLabel: "Default domain",
16272
- domainDescription: "Enter a bare domain without a protocol, path, or port.",
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.",
16273
15756
  defaultValue: "Default: {domain}",
16274
15757
  save: "Save",
16275
15758
  saving: "Saving…",
16276
15759
  reset: "Restore default",
16277
15760
  saved: "Saved.",
16278
15761
  restartNotice: "Restart DeepSeek Harness for the change to take effect.",
16279
- identityNotice: "This affects future registrations and short-Handle completion. It does not rewrite an existing DID or Handle.",
15762
+ identityNotice: "Each domain uses isolated local identity, message, and identity-recovery state. Switching back restores that domain’s previous local state.",
16280
15763
  invalidDomain: "Enter a valid domain, such as awiki.ai.",
16281
15764
  saveFailed: "The setting could not be saved. Refresh and try again.",
16282
15765
  loading: "Loading AWiki settings…",
@@ -16525,14 +16008,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16525
16008
  inspectIdentityAccess: (request) => awiki.inspectIdentityAccess(request),
16526
16009
  sendRegistrationOtp: (request) => awiki.sendRegistrationOtp(request),
16527
16010
  registerIdentity: (request) => awiki.registerIdentity(request),
16528
- beginDeviceJoin: () => awiki.beginDeviceJoin(),
16529
- getDeviceJoinStatus: () => awiki.getDeviceJoinStatus(),
16530
- cancelDeviceJoin: () => awiki.cancelDeviceJoin(),
16531
- refreshDeviceManagement: () => awiki.refreshDeviceManagement(),
16532
- startDeviceJoinVerification: (request) => awiki.startDeviceJoinVerification(request),
16533
- approveDeviceJoin: (request) => awiki.approveDeviceJoin(request),
16534
- rejectDeviceJoin: (request) => awiki.rejectDeviceJoin(request),
16535
- revokeDevice: (request) => awiki.revokeDevice(request),
16536
16011
  updateDisplayName: (displayName) => awiki.updateDisplayName(displayName),
16537
16012
  updateProfile: (request) => awiki.updateProfile(request),
16538
16013
  sendRecoveryOtp: (request) => awiki.sendRecoveryOtp(request),
@@ -16573,11 +16048,13 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
16573
16048
  value: void 0
16574
16049
  } : result;
16575
16050
  },
16051
+ getConfig: () => awiki.getConfig(),
16576
16052
  getMailAccount: () => awiki.getMailAccount(),
16577
16053
  listMailInbox: (request) => awiki.listMailInbox(request),
16578
16054
  readMail: (request) => awiki.readMail(request),
16579
16055
  markMailRead: (request) => awiki.markMailRead(request),
16580
- sendMail: (request) => awiki.sendMail(request)
16056
+ sendMail: (request) => awiki.sendMail(request),
16057
+ downloadMailAttachment: (request) => awiki.downloadMailAttachment(request)
16581
16058
  })
16582
16059
  }, AwikiOverlay);
16583
16060
  });