@yadsh/dsh-qa-surface 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/admin/service.js +254 -52
  2. package/lib/admin/service.js.map +1 -1
  3. package/lib/client/QaAccountsController.js +19 -1
  4. package/lib/client/QaAccountsController.js.map +1 -1
  5. package/lib/client/admin/pages/Conversations.js +9 -2
  6. package/lib/client/admin/pages/Conversations.js.map +1 -1
  7. package/lib/client/admin/pages/Overview.js +1 -1
  8. package/lib/client/admin/pages/Overview.js.map +1 -1
  9. package/lib/client/admin/pages/Quality.js +1 -1
  10. package/lib/client/admin/pages/Quality.js.map +1 -1
  11. package/lib/client/admin/pages/Review.js +8 -4
  12. package/lib/client/admin/pages/Review.js.map +1 -1
  13. package/lib/client/admin/shared.js +42 -4
  14. package/lib/client/admin/shared.js.map +1 -1
  15. package/lib/client/components/QaChangelog.js +23 -0
  16. package/lib/client/components/QaChangelog.js.map +1 -1
  17. package/lib/client/index.js +18 -4
  18. package/lib/client/index.js.map +1 -1
  19. package/lib/client/markdown/MermaidBlock.js +80 -0
  20. package/lib/client/markdown/MermaidBlock.js.map +1 -0
  21. package/lib/client/markdown/render.js +4 -0
  22. package/lib/client/markdown/render.js.map +1 -1
  23. package/lib/client/rating-harvest.js +138 -0
  24. package/lib/client/rating-harvest.js.map +1 -0
  25. package/lib/client/styles.js +23 -0
  26. package/lib/client/styles.js.map +1 -1
  27. package/lib/client/types.js.map +1 -1
  28. package/lib/client.js +2289 -107
  29. package/lib/client.js.map +1 -1
  30. package/lib/index.js +26 -9
  31. package/lib/index.js.map +1 -1
  32. package/lib/provenance/extractors.js +1 -1
  33. package/lib/provenance/extractors.js.map +1 -1
  34. package/lib/provenance/host-store.js +5 -1
  35. package/lib/provenance/host-store.js.map +1 -1
  36. package/lib/qa-tools/docs-tools.js +63 -10
  37. package/lib/qa-tools/docs-tools.js.map +1 -1
  38. package/lib/typert.host.js +137 -72
  39. package/lib/typert.remote-client.d.ts +11 -9
  40. package/lib/typert.remote-client.js +117 -67
  41. package/lib/types/admin/service.d.ts +60 -9
  42. package/lib/types/client/QaAccountsController.d.ts +12 -1
  43. package/lib/types/client/admin/shared.d.ts +16 -1
  44. package/lib/types/client/markdown/MermaidBlock.d.ts +6 -0
  45. package/lib/types/client/rating-harvest.d.ts +49 -0
  46. package/lib/types/client/types.d.ts +11 -4
  47. package/lib/types/index.d.ts +18 -6
  48. package/lib/types/qa-tools/docs-tools.d.ts +2 -2
  49. package/lib/types/types.d.ts +20 -0
  50. package/package.json +5 -4
package/lib/client.js CHANGED
@@ -4,6 +4,21 @@ window.__ModuleLoader__.load({
4
4
  var module = { exports: {} };
5
5
  var exports = module.exports;
6
6
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
7
+ const require_src = require("./src-DYN0ucCI.cjs");
8
+ const require_chunk_Y2CYZVJY = require("./chunk-Y2CYZVJY-CKJMflD1.cjs");
9
+ const require_chunk_DU6HZSFF = require("./chunk-DU6HZSFF-DH5Rw2xo.cjs");
10
+ const require_chunk_75Z2AOVW = require("./chunk-75Z2AOVW-DloyPyHI.cjs");
11
+ const require_chunk_CLGD4ZFX = require("./chunk-CLGD4ZFX-Bvury_Vx.cjs");
12
+ require("./chunk-P2QGCYS3-CY9swMLN.cjs");
13
+ const require_chunk_PWAF6VOD = require("./chunk-PWAF6VOD-Di_8tji9.cjs");
14
+ const require_chunk_GMAD6QVW = require("./chunk-GMAD6QVW-LWv7apx8.cjs");
15
+ require("./chunk-4HAMMTFA-Zu1h-E11.cjs");
16
+ require("./chunk-GVQU2GXP-C4pqETtp.cjs");
17
+ require("./chunk-L3NEJ4N5-C_zR5ZWg.cjs");
18
+ require("./chunk-OSK3NFVY-BiIp85OT.cjs");
19
+ require("./chunk-2E4U76K2-BlQgyl-u.cjs");
20
+ const require_chunk_LNGE3PJU = require("./chunk-LNGE3PJU-Ihy6PCu-.cjs");
21
+ const require_chunk_TLUHSLCS = require("./chunk-TLUHSLCS-qlu0Jjmx.cjs");
7
22
  let react_jsx_runtime = require("react/jsx-runtime");
8
23
  let react = require("react");
9
24
  let react_dom = require("react-dom");
@@ -671,7 +686,7 @@ window.__ModuleLoader__.load({
671
686
  /** Get-or-create `obj[key]` as an own data property. A path segment naming an inherited member
672
687
  * ("toString", "constructor") would otherwise read through to the prototype, and assigning
673
688
  * "__proto__" would hit the setter instead of creating a key. */
674
- function node(obj, key, make) {
689
+ function node$1(obj, key, make) {
675
690
  if (!Object.prototype.hasOwnProperty.call(obj, key)) {
676
691
  if (key === "__proto__") Object.defineProperty(obj, key, {
677
692
  value: make(),
@@ -686,7 +701,7 @@ window.__ModuleLoader__.load({
686
701
  function flattenError(error, mapper = (issue) => issue.message) {
687
702
  const fieldErrors = {};
688
703
  const formErrors = [];
689
- for (const sub of error.issues) if (sub.path.length > 0) node(fieldErrors, sub.path[0], () => []).push(mapper(sub));
704
+ for (const sub of error.issues) if (sub.path.length > 0) node$1(fieldErrors, sub.path[0], () => []).push(mapper(sub));
690
705
  else formErrors.push(mapper(sub));
691
706
  return {
692
707
  formErrors,
@@ -2736,7 +2751,7 @@ window.__ModuleLoader__.load({
2736
2751
  }
2737
2752
  let handoff;
2738
2753
  const open$1 = [];
2739
- const memo$10 = {
2754
+ const memo$11 = {
2740
2755
  alloc(_inst, payload, empty) {
2741
2756
  const bucket = handoff;
2742
2757
  if (!bucket) return empty;
@@ -2827,7 +2842,7 @@ window.__ModuleLoader__.load({
2827
2842
  };
2828
2843
  /** The memoizer that gives containers cycle support. `zod` installs it by default; `zod/mini` opts in with `config({ memoizer: memoizer() })`. */
2829
2844
  function memoizer() {
2830
- return memo$10;
2845
+ return memo$11;
2831
2846
  }
2832
2847
  /** Whether this value is a node a back-edge resolved to before it finished. */
2833
2848
  function isBackEdge(ctx, value) {
@@ -4300,7 +4315,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4300
4315
  const ZodRealError = /*@__PURE__*/ $constructor("ZodError", initializer, void 0, { Parent: Error });
4301
4316
  //#endregion
4302
4317
  //#region ../../node_modules/.pnpm/zod@4.5.2/node_modules/zod/v4/classic/parse.js
4303
- const parse = /* @__PURE__ */ _parse(ZodRealError);
4318
+ const parse$2 = /* @__PURE__ */ _parse(ZodRealError);
4304
4319
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
4305
4320
  const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
4306
4321
  const safeParseAsync = /* @__PURE__ */ _safeParseAsync(ZodRealError);
@@ -4432,7 +4447,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
4432
4447
  own(this, "~standard", value);
4433
4448
  },
4434
4449
  parse: function _parse(data, params) {
4435
- return parse(this, data, params, { callee: _parse });
4450
+ return parse$2(this, data, params, { callee: _parse });
4436
4451
  },
4437
4452
  parseAsync: async function _parseAsync(data, params) {
4438
4453
  return await parseAsync(this, data, params, { callee: _parseAsync });
@@ -6254,6 +6269,17 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
6254
6269
  "nextCursor": union([literal(null), string()]).readonly(),
6255
6270
  "total": number().readonly()
6256
6271
  });
6272
+ const _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_parameter_0$schema = string();
6273
+ const _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_parameter_1$schema = array(object({
6274
+ "conversationId": string().readonly(),
6275
+ "messageId": string().readonly(),
6276
+ "rating": union([literal("positive"), literal("negative")]).readonly()
6277
+ }));
6278
+ const _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_result$schema = object({
6279
+ "recorded": number().readonly(),
6280
+ "present": number().readonly(),
6281
+ "rejected": number().readonly()
6282
+ });
6257
6283
  const _yadsh_dsh_qa_surface_qaSurface_adminMetrics_parameter_0$schema = string();
6258
6284
  const _yadsh_dsh_qa_surface_qaSurface_adminMetrics_result$schema = object({
6259
6285
  "conversations": number().readonly(),
@@ -7973,7 +7999,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
7973
7999
  },
7974
8000
  sourceLocation: {
7975
8001
  "file": "packages/dsh-qa-surface/src/index.ts",
7976
- "line": 915,
8002
+ "line": 917,
7977
8003
  "column": 9
7978
8004
  }
7979
8005
  },
@@ -8009,7 +8035,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8009
8035
  },
8010
8036
  sourceLocation: {
8011
8037
  "file": "packages/dsh-qa-surface/src/index.ts",
8012
- "line": 926,
8038
+ "line": 928,
8013
8039
  "column": 3
8014
8040
  }
8015
8041
  },
@@ -8036,7 +8062,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8036
8062
  },
8037
8063
  sourceLocation: {
8038
8064
  "file": "packages/dsh-qa-surface/src/index.ts",
8039
- "line": 900,
8065
+ "line": 902,
8040
8066
  "column": 3
8041
8067
  }
8042
8068
  },
@@ -8085,7 +8111,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8085
8111
  },
8086
8112
  sourceLocation: {
8087
8113
  "file": "packages/dsh-qa-surface/src/index.ts",
8088
- "line": 940,
8114
+ "line": 942,
8089
8115
  "column": 3
8090
8116
  }
8091
8117
  },
@@ -8121,7 +8147,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8121
8147
  },
8122
8148
  sourceLocation: {
8123
8149
  "file": "packages/dsh-qa-surface/src/index.ts",
8124
- "line": 906,
8150
+ "line": 908,
8125
8151
  "column": 3
8126
8152
  }
8127
8153
  },
@@ -8157,7 +8183,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8157
8183
  },
8158
8184
  sourceLocation: {
8159
8185
  "file": "packages/dsh-qa-surface/src/index.ts",
8160
- "line": 985,
8186
+ "line": 987,
8161
8187
  "column": 3
8162
8188
  }
8163
8189
  },
@@ -8206,7 +8232,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8206
8232
  },
8207
8233
  sourceLocation: {
8208
8234
  "file": "packages/dsh-qa-surface/src/index.ts",
8209
- "line": 962,
8235
+ "line": 964,
8210
8236
  "column": 3
8211
8237
  }
8212
8238
  },
@@ -8242,7 +8268,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8242
8268
  },
8243
8269
  sourceLocation: {
8244
8270
  "file": "packages/dsh-qa-surface/src/index.ts",
8245
- "line": 952,
8271
+ "line": 954,
8246
8272
  "column": 3
8247
8273
  }
8248
8274
  },
@@ -8278,7 +8304,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8278
8304
  },
8279
8305
  sourceLocation: {
8280
8306
  "file": "packages/dsh-qa-surface/src/index.ts",
8281
- "line": 974,
8307
+ "line": 976,
8282
8308
  "column": 3
8283
8309
  }
8284
8310
  },
@@ -8327,7 +8353,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8327
8353
  },
8328
8354
  sourceLocation: {
8329
8355
  "file": "packages/dsh-qa-surface/src/index.ts",
8330
- "line": 933,
8356
+ "line": 935,
8331
8357
  "column": 3
8332
8358
  }
8333
8359
  },
@@ -8376,7 +8402,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8376
8402
  },
8377
8403
  sourceLocation: {
8378
8404
  "file": "packages/dsh-qa-surface/src/index.ts",
8379
- "line": 656,
8405
+ "line": 658,
8380
8406
  "column": 3
8381
8407
  }
8382
8408
  },
@@ -8412,7 +8438,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8412
8438
  },
8413
8439
  sourceLocation: {
8414
8440
  "file": "packages/dsh-qa-surface/src/index.ts",
8415
- "line": 690,
8441
+ "line": 692,
8416
8442
  "column": 3
8417
8443
  }
8418
8444
  },
@@ -8448,7 +8474,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8448
8474
  },
8449
8475
  sourceLocation: {
8450
8476
  "file": "packages/dsh-qa-surface/src/index.ts",
8451
- "line": 763,
8477
+ "line": 765,
8452
8478
  "column": 3
8453
8479
  }
8454
8480
  },
@@ -8475,7 +8501,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8475
8501
  },
8476
8502
  sourceLocation: {
8477
8503
  "file": "packages/dsh-qa-surface/src/index.ts",
8478
- "line": 711,
8504
+ "line": 713,
8479
8505
  "column": 3
8480
8506
  }
8481
8507
  },
@@ -8502,7 +8528,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8502
8528
  },
8503
8529
  sourceLocation: {
8504
8530
  "file": "packages/dsh-qa-surface/src/index.ts",
8505
- "line": 750,
8531
+ "line": 752,
8506
8532
  "column": 3
8507
8533
  }
8508
8534
  },
@@ -8538,7 +8564,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8538
8564
  },
8539
8565
  sourceLocation: {
8540
8566
  "file": "packages/dsh-qa-surface/src/index.ts",
8541
- "line": 650,
8567
+ "line": 652,
8542
8568
  "column": 3
8543
8569
  }
8544
8570
  },
@@ -8565,7 +8591,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8565
8591
  },
8566
8592
  sourceLocation: {
8567
8593
  "file": "packages/dsh-qa-surface/src/index.ts",
8568
- "line": 701,
8594
+ "line": 703,
8569
8595
  "column": 3
8570
8596
  }
8571
8597
  },
@@ -8601,7 +8627,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8601
8627
  },
8602
8628
  sourceLocation: {
8603
8629
  "file": "packages/dsh-qa-surface/src/index.ts",
8604
- "line": 645,
8630
+ "line": 647,
8605
8631
  "column": 3
8606
8632
  }
8607
8633
  },
@@ -8628,7 +8654,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8628
8654
  },
8629
8655
  sourceLocation: {
8630
8656
  "file": "packages/dsh-qa-surface/src/index.ts",
8631
- "line": 674,
8657
+ "line": 676,
8632
8658
  "column": 3
8633
8659
  }
8634
8660
  },
@@ -8664,7 +8690,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8664
8690
  },
8665
8691
  sourceLocation: {
8666
8692
  "file": "packages/dsh-qa-surface/src/index.ts",
8667
- "line": 776,
8693
+ "line": 778,
8668
8694
  "column": 3
8669
8695
  }
8670
8696
  },
@@ -8700,7 +8726,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8700
8726
  },
8701
8727
  sourceLocation: {
8702
8728
  "file": "packages/dsh-qa-surface/src/index.ts",
8703
- "line": 724,
8729
+ "line": 726,
8704
8730
  "column": 3
8705
8731
  }
8706
8732
  },
@@ -8736,7 +8762,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8736
8762
  },
8737
8763
  sourceLocation: {
8738
8764
  "file": "packages/dsh-qa-surface/src/index.ts",
8739
- "line": 737,
8765
+ "line": 739,
8740
8766
  "column": 3
8741
8767
  }
8742
8768
  },
@@ -8763,7 +8789,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8763
8789
  },
8764
8790
  sourceLocation: {
8765
8791
  "file": "packages/dsh-qa-surface/src/index.ts",
8766
- "line": 680,
8792
+ "line": 682,
8767
8793
  "column": 3
8768
8794
  }
8769
8795
  },
@@ -8822,7 +8848,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8822
8848
  },
8823
8849
  sourceLocation: {
8824
8850
  "file": "packages/dsh-qa-surface/src/index.ts",
8825
- "line": 1251,
8851
+ "line": 1286,
8826
8852
  "column": 3
8827
8853
  }
8828
8854
  },
@@ -8858,7 +8884,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8858
8884
  },
8859
8885
  sourceLocation: {
8860
8886
  "file": "packages/dsh-qa-surface/src/index.ts",
8861
- "line": 1153,
8887
+ "line": 1166,
8862
8888
  "column": 3
8863
8889
  }
8864
8890
  },
@@ -8910,6 +8936,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8910
8936
  }
8911
8937
  }
8912
8938
  ],
8939
+ cancellation: { parameter: "signal" },
8913
8940
  result: {
8914
8941
  mode: "strict",
8915
8942
  typeSymbol: "@yadsh/dsh-qa-surface/types#QaAdminPage",
@@ -8917,7 +8944,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8917
8944
  },
8918
8945
  sourceLocation: {
8919
8946
  "file": "packages/dsh-qa-surface/src/index.ts",
8920
- "line": 1135,
8947
+ "line": 1146,
8921
8948
  "column": 3
8922
8949
  }
8923
8950
  },
@@ -8953,7 +8980,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
8953
8980
  },
8954
8981
  sourceLocation: {
8955
8982
  "file": "packages/dsh-qa-surface/src/index.ts",
8956
- "line": 1168,
8983
+ "line": 1181,
8957
8984
  "column": 3
8958
8985
  }
8959
8986
  },
@@ -9012,7 +9039,43 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9012
9039
  },
9013
9040
  sourceLocation: {
9014
9041
  "file": "packages/dsh-qa-surface/src/index.ts",
9015
- "line": 1178,
9042
+ "line": 1191,
9043
+ "column": 3
9044
+ }
9045
+ },
9046
+ {
9047
+ id: "@yadsh/dsh-qa-surface#qaSurface/adminHarvestFeedback",
9048
+ service: "qaSurface",
9049
+ namespace: "qaSurface",
9050
+ method: "adminHarvestFeedback",
9051
+ invocation: { kind: "direct" },
9052
+ parameters: [{
9053
+ name: "token",
9054
+ wire: "token",
9055
+ source: "json",
9056
+ codec: {
9057
+ mode: "strict",
9058
+ typeSymbol: "@yadsh/dsh-qa-surface#qaSurface/adminHarvestFeedback:token",
9059
+ schema: _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_parameter_0$schema
9060
+ }
9061
+ }, {
9062
+ name: "entries",
9063
+ wire: "entries",
9064
+ source: "json",
9065
+ codec: {
9066
+ mode: "strict",
9067
+ typeSymbol: "@yadsh/dsh-qa-surface#qaSurface/adminHarvestFeedback:entries",
9068
+ schema: _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_parameter_1$schema
9069
+ }
9070
+ }],
9071
+ result: {
9072
+ mode: "strict",
9073
+ typeSymbol: "@yadsh/dsh-qa-surface/types#QaFeedbackHarvestResult",
9074
+ schema: _yadsh_dsh_qa_surface_qaSurface_adminHarvestFeedback_result$schema
9075
+ },
9076
+ sourceLocation: {
9077
+ "file": "packages/dsh-qa-surface/src/index.ts",
9078
+ "line": 1228,
9016
9079
  "column": 3
9017
9080
  }
9018
9081
  },
@@ -9032,6 +9095,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9032
9095
  schema: _yadsh_dsh_qa_surface_qaSurface_adminMetrics_parameter_0$schema
9033
9096
  }
9034
9097
  }],
9098
+ cancellation: { parameter: "signal" },
9035
9099
  result: {
9036
9100
  mode: "strict",
9037
9101
  typeSymbol: "@yadsh/dsh-qa-surface/types#QaQualityMetrics",
@@ -9039,7 +9103,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9039
9103
  },
9040
9104
  sourceLocation: {
9041
9105
  "file": "packages/dsh-qa-surface/src/index.ts",
9042
- "line": 1246,
9106
+ "line": 1279,
9043
9107
  "column": 3
9044
9108
  }
9045
9109
  },
@@ -9059,6 +9123,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9059
9123
  schema: _yadsh_dsh_qa_surface_qaSurface_adminOverview_parameter_0$schema
9060
9124
  }
9061
9125
  }],
9126
+ cancellation: { parameter: "signal" },
9062
9127
  result: {
9063
9128
  mode: "strict",
9064
9129
  typeSymbol: "@yadsh/dsh-qa-surface/types#QaAdminOverview",
@@ -9066,7 +9131,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9066
9131
  },
9067
9132
  sourceLocation: {
9068
9133
  "file": "packages/dsh-qa-surface/src/index.ts",
9069
- "line": 1081,
9134
+ "line": 1090,
9070
9135
  "column": 3
9071
9136
  }
9072
9137
  },
@@ -9093,7 +9158,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9093
9158
  },
9094
9159
  sourceLocation: {
9095
9160
  "file": "packages/dsh-qa-surface/src/index.ts",
9096
- "line": 1115,
9161
+ "line": 1126,
9097
9162
  "column": 3
9098
9163
  }
9099
9164
  },
@@ -9142,7 +9207,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9142
9207
  },
9143
9208
  sourceLocation: {
9144
9209
  "file": "packages/dsh-qa-surface/src/index.ts",
9145
- "line": 1223,
9210
+ "line": 1256,
9146
9211
  "column": 3
9147
9212
  }
9148
9213
  },
@@ -9201,7 +9266,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9201
9266
  },
9202
9267
  sourceLocation: {
9203
9268
  "file": "packages/dsh-qa-surface/src/index.ts",
9204
- "line": 1199,
9269
+ "line": 1212,
9205
9270
  "column": 3
9206
9271
  }
9207
9272
  },
@@ -9250,7 +9315,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9250
9315
  },
9251
9316
  sourceLocation: {
9252
9317
  "file": "packages/dsh-qa-surface/src/index.ts",
9253
- "line": 1124,
9318
+ "line": 1135,
9254
9319
  "column": 3
9255
9320
  }
9256
9321
  },
@@ -9292,6 +9357,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9292
9357
  }
9293
9358
  }
9294
9359
  ],
9360
+ cancellation: { parameter: "signal" },
9295
9361
  result: {
9296
9362
  mode: "strict",
9297
9363
  typeSymbol: "@yadsh/dsh-qa-surface/types#QaAdminPage",
@@ -9299,7 +9365,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9299
9365
  },
9300
9366
  sourceLocation: {
9301
9367
  "file": "packages/dsh-qa-surface/src/index.ts",
9302
- "line": 1211,
9368
+ "line": 1238,
9303
9369
  "column": 3
9304
9370
  }
9305
9371
  },
@@ -9335,7 +9401,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9335
9401
  },
9336
9402
  sourceLocation: {
9337
9403
  "file": "packages/dsh-qa-surface/src/index.ts",
9338
- "line": 1238,
9404
+ "line": 1271,
9339
9405
  "column": 3
9340
9406
  }
9341
9407
  },
@@ -9384,7 +9450,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9384
9450
  },
9385
9451
  sourceLocation: {
9386
9452
  "file": "packages/dsh-qa-surface/src/index.ts",
9387
- "line": 1015,
9453
+ "line": 1017,
9388
9454
  "column": 3
9389
9455
  }
9390
9456
  },
@@ -9443,7 +9509,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9443
9509
  },
9444
9510
  sourceLocation: {
9445
9511
  "file": "packages/dsh-qa-surface/src/index.ts",
9446
- "line": 1043,
9512
+ "line": 1045,
9447
9513
  "column": 3
9448
9514
  }
9449
9515
  },
@@ -9479,7 +9545,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9479
9545
  },
9480
9546
  sourceLocation: {
9481
9547
  "file": "packages/dsh-qa-surface/src/index.ts",
9482
- "line": 1006,
9548
+ "line": 1008,
9483
9549
  "column": 3
9484
9550
  }
9485
9551
  },
@@ -9538,7 +9604,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9538
9604
  },
9539
9605
  sourceLocation: {
9540
9606
  "file": "packages/dsh-qa-surface/src/index.ts",
9541
- "line": 1030,
9607
+ "line": 1032,
9542
9608
  "column": 3
9543
9609
  }
9544
9610
  },
@@ -9574,7 +9640,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9574
9640
  },
9575
9641
  sourceLocation: {
9576
9642
  "file": "packages/dsh-qa-surface/src/index.ts",
9577
- "line": 1069,
9643
+ "line": 1071,
9578
9644
  "column": 9
9579
9645
  }
9580
9646
  },
@@ -9633,7 +9699,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9633
9699
  },
9634
9700
  sourceLocation: {
9635
9701
  "file": "packages/dsh-qa-surface/src/index.ts",
9636
- "line": 1056,
9702
+ "line": 1058,
9637
9703
  "column": 3
9638
9704
  }
9639
9705
  },
@@ -9682,7 +9748,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9682
9748
  },
9683
9749
  sourceLocation: {
9684
9750
  "file": "packages/dsh-qa-surface/src/index.ts",
9685
- "line": 1104,
9751
+ "line": 1115,
9686
9752
  "column": 3
9687
9753
  }
9688
9754
  },
@@ -9718,7 +9784,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9718
9784
  },
9719
9785
  sourceLocation: {
9720
9786
  "file": "packages/dsh-qa-surface/src/index.ts",
9721
- "line": 1098,
9787
+ "line": 1109,
9722
9788
  "column": 3
9723
9789
  }
9724
9790
  },
@@ -9777,7 +9843,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9777
9843
  },
9778
9844
  sourceLocation: {
9779
9845
  "file": "packages/dsh-qa-surface/src/index.ts",
9780
- "line": 1086,
9846
+ "line": 1097,
9781
9847
  "column": 3
9782
9848
  }
9783
9849
  },
@@ -9836,7 +9902,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9836
9902
  },
9837
9903
  sourceLocation: {
9838
9904
  "file": "packages/dsh-qa-surface/src/index.ts",
9839
- "line": 1327,
9905
+ "line": 1362,
9840
9906
  "column": 9
9841
9907
  }
9842
9908
  },
@@ -9895,7 +9961,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9895
9961
  },
9896
9962
  sourceLocation: {
9897
9963
  "file": "packages/dsh-qa-surface/src/index.ts",
9898
- "line": 1356,
9964
+ "line": 1391,
9899
9965
  "column": 9
9900
9966
  }
9901
9967
  },
@@ -9944,7 +10010,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9944
10010
  },
9945
10011
  sourceLocation: {
9946
10012
  "file": "packages/dsh-qa-surface/src/index.ts",
9947
- "line": 1368,
10013
+ "line": 1403,
9948
10014
  "column": 9
9949
10015
  }
9950
10016
  },
@@ -9993,7 +10059,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
9993
10059
  },
9994
10060
  sourceLocation: {
9995
10061
  "file": "packages/dsh-qa-surface/src/index.ts",
9996
- "line": 801,
10062
+ "line": 803,
9997
10063
  "column": 9
9998
10064
  }
9999
10065
  },
@@ -10011,7 +10077,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10011
10077
  },
10012
10078
  sourceLocation: {
10013
10079
  "file": "packages/dsh-qa-surface/src/index.ts",
10014
- "line": 791,
10080
+ "line": 793,
10015
10081
  "column": 3
10016
10082
  }
10017
10083
  },
@@ -10060,7 +10126,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10060
10126
  },
10061
10127
  sourceLocation: {
10062
10128
  "file": "packages/dsh-qa-surface/src/index.ts",
10063
- "line": 1436,
10129
+ "line": 1471,
10064
10130
  "column": 9
10065
10131
  }
10066
10132
  },
@@ -10096,7 +10162,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10096
10162
  },
10097
10163
  sourceLocation: {
10098
10164
  "file": "packages/dsh-qa-surface/src/index.ts",
10099
- "line": 1313,
10165
+ "line": 1348,
10100
10166
  "column": 9
10101
10167
  }
10102
10168
  },
@@ -10132,7 +10198,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10132
10198
  },
10133
10199
  sourceLocation: {
10134
10200
  "file": "packages/dsh-qa-surface/src/index.ts",
10135
- "line": 1342,
10201
+ "line": 1377,
10136
10202
  "column": 9
10137
10203
  }
10138
10204
  },
@@ -10181,7 +10247,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10181
10247
  },
10182
10248
  sourceLocation: {
10183
10249
  "file": "packages/dsh-qa-surface/src/index.ts",
10184
- "line": 1497,
10250
+ "line": 1532,
10185
10251
  "column": 9
10186
10252
  }
10187
10253
  },
@@ -10230,7 +10296,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10230
10296
  },
10231
10297
  sourceLocation: {
10232
10298
  "file": "packages/dsh-qa-surface/src/index.ts",
10233
- "line": 1387,
10299
+ "line": 1422,
10234
10300
  "column": 9
10235
10301
  }
10236
10302
  },
@@ -10279,7 +10345,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10279
10345
  },
10280
10346
  sourceLocation: {
10281
10347
  "file": "packages/dsh-qa-surface/src/index.ts",
10282
- "line": 1463,
10348
+ "line": 1498,
10283
10349
  "column": 9
10284
10350
  }
10285
10351
  },
@@ -10315,7 +10381,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10315
10381
  },
10316
10382
  sourceLocation: {
10317
10383
  "file": "packages/dsh-qa-surface/src/index.ts",
10318
- "line": 1264,
10384
+ "line": 1299,
10319
10385
  "column": 9
10320
10386
  }
10321
10387
  },
@@ -10351,7 +10417,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10351
10417
  },
10352
10418
  sourceLocation: {
10353
10419
  "file": "packages/dsh-qa-surface/src/index.ts",
10354
- "line": 1567,
10420
+ "line": 1602,
10355
10421
  "column": 3
10356
10422
  }
10357
10423
  },
@@ -10387,7 +10453,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10387
10453
  },
10388
10454
  sourceLocation: {
10389
10455
  "file": "packages/dsh-qa-surface/src/index.ts",
10390
- "line": 1561,
10456
+ "line": 1596,
10391
10457
  "column": 3
10392
10458
  }
10393
10459
  },
@@ -10414,7 +10480,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10414
10480
  },
10415
10481
  sourceLocation: {
10416
10482
  "file": "packages/dsh-qa-surface/src/index.ts",
10417
- "line": 1555,
10483
+ "line": 1590,
10418
10484
  "column": 3
10419
10485
  }
10420
10486
  },
@@ -10463,7 +10529,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10463
10529
  },
10464
10530
  sourceLocation: {
10465
10531
  "file": "packages/dsh-qa-surface/src/index.ts",
10466
- "line": 1586,
10532
+ "line": 1621,
10467
10533
  "column": 3
10468
10534
  }
10469
10535
  },
@@ -10490,7 +10556,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10490
10556
  },
10491
10557
  sourceLocation: {
10492
10558
  "file": "packages/dsh-qa-surface/src/index.ts",
10493
- "line": 1612,
10559
+ "line": 1647,
10494
10560
  "column": 3
10495
10561
  }
10496
10562
  },
@@ -10539,7 +10605,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10539
10605
  },
10540
10606
  sourceLocation: {
10541
10607
  "file": "packages/dsh-qa-surface/src/index.ts",
10542
- "line": 1576,
10608
+ "line": 1611,
10543
10609
  "column": 3
10544
10610
  }
10545
10611
  },
@@ -10588,7 +10654,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10588
10654
  },
10589
10655
  sourceLocation: {
10590
10656
  "file": "packages/dsh-qa-surface/src/index.ts",
10591
- "line": 1599,
10657
+ "line": 1634,
10592
10658
  "column": 3
10593
10659
  }
10594
10660
  },
@@ -10624,7 +10690,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10624
10690
  },
10625
10691
  sourceLocation: {
10626
10692
  "file": "packages/dsh-qa-surface/src/index.ts",
10627
- "line": 1629,
10693
+ "line": 1664,
10628
10694
  "column": 3
10629
10695
  }
10630
10696
  },
@@ -10683,7 +10749,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10683
10749
  },
10684
10750
  sourceLocation: {
10685
10751
  "file": "packages/dsh-qa-surface/src/index.ts",
10686
- "line": 1644,
10752
+ "line": 1679,
10687
10753
  "column": 3
10688
10754
  }
10689
10755
  },
@@ -10719,7 +10785,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
10719
10785
  },
10720
10786
  sourceLocation: {
10721
10787
  "file": "packages/dsh-qa-surface/src/index.ts",
10722
- "line": 1300,
10788
+ "line": 1335,
10723
10789
  "column": 9
10724
10790
  }
10725
10791
  }
@@ -12825,20 +12891,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12825
12891
  });
12826
12892
  }
12827
12893
  }
12828
- /** Own the account, migrate the legacy index, then project authed. */
12894
+ /** Own the account, migrate the legacy index, replay held ratings, then auth. */
12829
12895
  async enterSession(token, user) {
12830
12896
  const migration = this.options.legacyChatIds?.() ?? [];
12831
12897
  let ownedIds = [];
12832
12898
  let ownership = [];
12899
+ let ownershipKnown = false;
12833
12900
  try {
12834
12901
  const claimed = await this.options.remote.accountsClaimSessions(token, migration);
12835
12902
  for (const conflict of claimed.ok ? claimed.value.conflicts : []) this.options.forgetChat?.(conflict);
12836
12903
  const ids = await this.options.remote.accountsOwnedSessions(token);
12837
12904
  ownedIds = ids.ok ? ids.value.ids : [];
12905
+ ownershipKnown = ids.ok;
12838
12906
  if (user.role === "admin" && this.options.config().accounts.showOtherUsersChats) ownership = await this.fetchOwnership(token);
12839
12907
  } catch (error) {
12840
12908
  console.warn("dsh-qa-surface: chat migration claim failed", error);
12841
12909
  }
12910
+ if (ownershipKnown) try {
12911
+ await this.options.harvestRatings?.({
12912
+ token,
12913
+ accountId: user.id,
12914
+ ownedIds
12915
+ });
12916
+ } catch (error) {
12917
+ console.warn("dsh-qa-surface: rating harvest failed", error);
12918
+ }
12842
12919
  if (this.disposed) return;
12843
12920
  this.publish({
12844
12921
  stage: "authed",
@@ -12994,6 +13071,138 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
12994
13071
  }
12995
13072
  };
12996
13073
  //#endregion
13074
+ //#region src/client/rating-harvest.ts
13075
+ /**
13076
+ * One-shot replay of the ratings this browser still holds locally.
13077
+ *
13078
+ * A thumbs given before the surface could file it lives in the chat's ratings
13079
+ * map and nowhere else. That map carries no timestamp and no reasons, so it
13080
+ * cannot tell a lost rating from one the Host already holds a fuller version
13081
+ * of — which is why the harvest writes through an insert-only call, offers only
13082
+ * the ratings of the chats the signing-in account owns, and marks an account as
13083
+ * read rather than re-offering its verdicts on every login.
13084
+ */
13085
+ /** Chat-scoped ratings keys sit under this marker: `<ns>:chat:<id>:ratings`. */
13086
+ const CHAT_MARKER = ":chat:";
13087
+ /** The suffix the message row writes its ratings map under. */
13088
+ const RATINGS_SUFFIX = ":ratings";
13089
+ /** Prefix of the per-account marker: `<ns>:ratings-harvested:<account>`. */
13090
+ const HARVESTED_MARKER = ":ratings-harvested:";
13091
+ /** How many ratings one request carries. */
13092
+ const BATCH_SIZE = 100;
13093
+ /** The durable log position an answer row's browser id carries. */
13094
+ const RATED_ANSWER = /^assistant:(\d+)$/u;
13095
+ const ALREADY_HARVESTED = Object.freeze({
13096
+ status: "already-harvested",
13097
+ entries: 0,
13098
+ recorded: 0
13099
+ });
13100
+ function harvestedKey(namespace, accountId) {
13101
+ return `${namespace}${HARVESTED_MARKER}${accountId}`;
13102
+ }
13103
+ /** Whether this browser has already been read out for that account. */
13104
+ function ratingsHarvested(storage, namespace, accountId) {
13105
+ try {
13106
+ return storage.getItem(harvestedKey(namespace, accountId)) === "1";
13107
+ } catch {
13108
+ return false;
13109
+ }
13110
+ }
13111
+ function markRatingsHarvested(storage, namespace, accountId) {
13112
+ try {
13113
+ storage.setItem(harvestedKey(namespace, accountId), "1");
13114
+ } catch {}
13115
+ }
13116
+ function readKeys(storage) {
13117
+ const keys = [];
13118
+ try {
13119
+ for (let index = 0; index < storage.length; index += 1) {
13120
+ const key = storage.key(index);
13121
+ if (typeof key === "string") keys.push(key);
13122
+ }
13123
+ } catch {}
13124
+ return keys;
13125
+ }
13126
+ function parseRatings(raw) {
13127
+ if (raw === null) return {};
13128
+ try {
13129
+ const parsed = JSON.parse(raw);
13130
+ return typeof parsed === "object" && parsed !== null && !Array.isArray(parsed) ? parsed : {};
13131
+ } catch {
13132
+ return {};
13133
+ }
13134
+ }
13135
+ function ratingOf(thumbs) {
13136
+ if (thumbs === "up") return "positive";
13137
+ return thumbs === "down" ? "negative" : void 0;
13138
+ }
13139
+ /**
13140
+ * Every rating this browser holds for that namespace, addressed by the
13141
+ * conversation and by the durable log position the Host files a verdict under.
13142
+ *
13143
+ * An answer row's browser id is `assistant:<position>`, so those keys are
13144
+ * addressable. Anything else — a work row, a half-streamed answer, an id the
13145
+ * Host named rather than numbered — cannot be traced back to a log position,
13146
+ * and is left where it is instead of guessed at.
13147
+ */
13148
+ function collectLocalRatings(storage, namespace) {
13149
+ const prefix = `${namespace}${CHAT_MARKER}`;
13150
+ const entries = [];
13151
+ for (const key of readKeys(storage)) {
13152
+ if (!key.startsWith(prefix) || !key.endsWith(RATINGS_SUFFIX)) continue;
13153
+ const conversationId = key.slice(prefix.length, -8);
13154
+ if (conversationId === "") continue;
13155
+ for (const [messageId, thumbs] of Object.entries(parseRatings(storage.getItem(key)))) {
13156
+ const position = RATED_ANSWER.exec(messageId)?.[1];
13157
+ const rating = ratingOf(thumbs);
13158
+ if (position === void 0 || rating === void 0) continue;
13159
+ entries.push({
13160
+ conversationId,
13161
+ messageId: position,
13162
+ rating
13163
+ });
13164
+ }
13165
+ }
13166
+ return entries;
13167
+ }
13168
+ /**
13169
+ * Read this browser's ratings out through `send`, once per account.
13170
+ *
13171
+ * `send` is the Host call; the caller chooses the token and the remote it
13172
+ * travels on. The marker is written only after every batch landed, so a
13173
+ * half-failed harvest is retried by the next login rather than lost.
13174
+ */
13175
+ async function harvestLocalRatings(options) {
13176
+ const { storage, namespace, accountId, ownedIds, send } = options;
13177
+ if (ratingsHarvested(storage, namespace, accountId)) return ALREADY_HARVESTED;
13178
+ const owned = new Set(ownedIds);
13179
+ const entries = collectLocalRatings(storage, namespace).filter((entry) => owned.has(entry.conversationId));
13180
+ if (entries.length === 0) {
13181
+ markRatingsHarvested(storage, namespace, accountId);
13182
+ return {
13183
+ status: "nothing-to-harvest",
13184
+ entries: 0,
13185
+ recorded: 0
13186
+ };
13187
+ }
13188
+ let recorded = 0;
13189
+ for (let offset = 0; offset < entries.length; offset += BATCH_SIZE) {
13190
+ const result = await send(entries.slice(offset, offset + BATCH_SIZE));
13191
+ if (!result.ok) return {
13192
+ status: "failed",
13193
+ entries: entries.length,
13194
+ recorded
13195
+ };
13196
+ recorded += result.value.recorded;
13197
+ }
13198
+ markRatingsHarvested(storage, namespace, accountId);
13199
+ return {
13200
+ status: "harvested",
13201
+ entries: entries.length,
13202
+ recorded
13203
+ };
13204
+ }
13205
+ //#endregion
12997
13206
  //#region src/client/lineage.ts
12998
13207
  /**
12999
13208
  * Whether one session-list entry is a delegated child — a subagent's session —
@@ -14496,7 +14705,11 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
14496
14705
  id: "dsh-web-fetch",
14497
14706
  matches(context) {
14498
14707
  const meta = presentationRecord(context.presentation);
14499
- return context.toolName === "web_fetch" || typeof meta?.url === "string" && typeof meta.statusCode === "number";
14708
+ return [
14709
+ "web_fetch",
14710
+ "web_fetch_file",
14711
+ "web_fetch_image"
14712
+ ].includes(context.toolName) || typeof meta?.url === "string" && typeof meta.statusCode === "number";
14500
14713
  },
14501
14714
  extract(context) {
14502
14715
  const args = parsedArgs(context.args);
@@ -20304,7 +20517,1872 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20304
20517
  });
20305
20518
  }
20306
20519
  //#endregion
20520
+ //#region ../../node_modules/.pnpm/es-toolkit@1.52.0/node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs
20521
+ function isPrototype(value) {
20522
+ const constructor = value?.constructor;
20523
+ return value === (typeof constructor === "function" ? constructor.prototype : Object.prototype);
20524
+ }
20525
+ //#endregion
20526
+ //#region ../../node_modules/.pnpm/es-toolkit@1.52.0/node_modules/es-toolkit/dist/compat/predicate/isEmpty.mjs
20527
+ /**
20528
+ * Checks if a given value is empty.
20529
+ *
20530
+ * - If the given value is a string, checks if it is an empty string.
20531
+ * - If the given value is an array, `Map`, or `Set`, checks if its size is 0.
20532
+ * - If the given value is an [array-like object](../predicate/isArrayLike.md), checks if its length is 0.
20533
+ * - If the given value is an object, checks if it is an empty object with no properties.
20534
+ * - Primitive values (booleans, numbers, or bigints) are considered empty.
20535
+ *
20536
+ * @param [value] - The value to check.
20537
+ * @returns `true` if the value is empty, `false` otherwise.
20538
+ *
20539
+ * @example
20540
+ * isEmpty(); // true
20541
+ * isEmpty(null); // true
20542
+ * isEmpty(""); // true
20543
+ * isEmpty([]); // true
20544
+ * isEmpty({}); // true
20545
+ * isEmpty(new Map()); // true
20546
+ * isEmpty(new Set()); // true
20547
+ * isEmpty("hello"); // false
20548
+ * isEmpty([1, 2, 3]); // false
20549
+ * isEmpty({ a: 1 }); // false
20550
+ * isEmpty(new Map([["key", "value"]])); // false
20551
+ * isEmpty(new Set([1, 2, 3])); // false
20552
+ */
20553
+ function isEmpty(value) {
20554
+ if (value == null) return true;
20555
+ if (require_chunk_75Z2AOVW.isArrayLike(value)) {
20556
+ if (typeof value.splice !== "function" && typeof value !== "string" && !require_chunk_75Z2AOVW.isBuffer(value) && !require_chunk_75Z2AOVW.isTypedArray(value) && !require_chunk_75Z2AOVW.isArguments(value)) return false;
20557
+ return value.length === 0;
20558
+ }
20559
+ if (typeof value === "object" || typeof value === "function") {
20560
+ if (value instanceof Map || value instanceof Set) return value.size === 0;
20561
+ const keys = Object.keys(value);
20562
+ if (isPrototype(value)) return keys.filter((x) => x !== "constructor").length === 0;
20563
+ return keys.length === 0;
20564
+ }
20565
+ return true;
20566
+ }
20567
+ //#endregion
20568
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Enum.js
20569
+ var COMMENT = "comm";
20570
+ var RULESET = "rule";
20571
+ var DECLARATION = "decl";
20572
+ var IMPORT = "@import";
20573
+ var NAMESPACE = "@namespace";
20574
+ var KEYFRAMES = "@keyframes";
20575
+ var LAYER = "@layer";
20576
+ //#endregion
20577
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Utility.js
20578
+ /**
20579
+ * @param {number}
20580
+ * @return {number}
20581
+ */
20582
+ var abs = Math.abs;
20583
+ /**
20584
+ * @param {number}
20585
+ * @return {string}
20586
+ */
20587
+ var from = String.fromCharCode;
20588
+ /**
20589
+ * @param {string} value
20590
+ * @return {string}
20591
+ */
20592
+ function trim(value) {
20593
+ return value.trim();
20594
+ }
20595
+ /**
20596
+ * @param {string} value
20597
+ * @param {(string|RegExp)} pattern
20598
+ * @param {string} replacement
20599
+ * @return {string}
20600
+ */
20601
+ function replace(value, pattern, replacement) {
20602
+ return value.replace(pattern, replacement);
20603
+ }
20604
+ /**
20605
+ * @param {string} value
20606
+ * @param {number} index
20607
+ * @return {number}
20608
+ */
20609
+ function charat(value, index) {
20610
+ return value.charCodeAt(index) | 0;
20611
+ }
20612
+ /**
20613
+ * @param {string} value
20614
+ * @param {number} begin
20615
+ * @param {number} end
20616
+ * @return {string}
20617
+ */
20618
+ function substr(value, begin, end) {
20619
+ return value.slice(begin, end);
20620
+ }
20621
+ /**
20622
+ * @param {string} value
20623
+ * @return {number}
20624
+ */
20625
+ function strlen(value) {
20626
+ return value.length;
20627
+ }
20628
+ /**
20629
+ * @param {any[]} value
20630
+ * @return {number}
20631
+ */
20632
+ function sizeof(value) {
20633
+ return value.length;
20634
+ }
20635
+ /**
20636
+ * @param {any} value
20637
+ * @param {any[]} array
20638
+ * @return {any}
20639
+ */
20640
+ function append(value, array) {
20641
+ return array.push(value), value;
20642
+ }
20643
+ //#endregion
20644
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Tokenizer.js
20645
+ var line = 1;
20646
+ var column = 1;
20647
+ var length = 0;
20648
+ var position = 0;
20649
+ var character = 0;
20650
+ var characters = "";
20651
+ /**
20652
+ * @param {string} value
20653
+ * @param {object | null} root
20654
+ * @param {object | null} parent
20655
+ * @param {string} type
20656
+ * @param {string[] | string} props
20657
+ * @param {object[] | string} children
20658
+ * @param {object[]} siblings
20659
+ * @param {number} length
20660
+ */
20661
+ function node(value, root, parent, type, props, children, length, siblings) {
20662
+ return {
20663
+ value,
20664
+ root,
20665
+ parent,
20666
+ type,
20667
+ props,
20668
+ children,
20669
+ line,
20670
+ column,
20671
+ length,
20672
+ return: "",
20673
+ siblings
20674
+ };
20675
+ }
20676
+ /**
20677
+ * @return {number}
20678
+ */
20679
+ function char() {
20680
+ return character;
20681
+ }
20682
+ /**
20683
+ * @return {number}
20684
+ */
20685
+ function prev() {
20686
+ character = position > 0 ? charat(characters, --position) : 0;
20687
+ if (column--, character === 10) column = 1, line--;
20688
+ return character;
20689
+ }
20690
+ /**
20691
+ * @return {number}
20692
+ */
20693
+ function next() {
20694
+ character = position < length ? charat(characters, position++) : 0;
20695
+ if (column++, character === 10) column = 1, line++;
20696
+ return character;
20697
+ }
20698
+ /**
20699
+ * @return {number}
20700
+ */
20701
+ function peek() {
20702
+ return charat(characters, position);
20703
+ }
20704
+ /**
20705
+ * @return {number}
20706
+ */
20707
+ function caret() {
20708
+ return position;
20709
+ }
20710
+ /**
20711
+ * @param {number} begin
20712
+ * @param {number} end
20713
+ * @return {string}
20714
+ */
20715
+ function slice(begin, end) {
20716
+ return substr(characters, begin, end);
20717
+ }
20718
+ /**
20719
+ * @param {number} type
20720
+ * @return {number}
20721
+ */
20722
+ function token(type) {
20723
+ switch (type) {
20724
+ case 0:
20725
+ case 9:
20726
+ case 10:
20727
+ case 13:
20728
+ case 32: return 5;
20729
+ case 33:
20730
+ case 43:
20731
+ case 44:
20732
+ case 47:
20733
+ case 62:
20734
+ case 64:
20735
+ case 126:
20736
+ case 59:
20737
+ case 123:
20738
+ case 125: return 4;
20739
+ case 58: return 3;
20740
+ case 34:
20741
+ case 39:
20742
+ case 40:
20743
+ case 91: return 2;
20744
+ case 41:
20745
+ case 93: return 1;
20746
+ }
20747
+ return 0;
20748
+ }
20749
+ /**
20750
+ * @param {string} value
20751
+ * @return {any[]}
20752
+ */
20753
+ function alloc(value) {
20754
+ return line = column = 1, length = strlen(characters = value), position = 0, [];
20755
+ }
20756
+ /**
20757
+ * @param {any} value
20758
+ * @return {any}
20759
+ */
20760
+ function dealloc(value) {
20761
+ return characters = "", value;
20762
+ }
20763
+ /**
20764
+ * @param {number} type
20765
+ * @return {string}
20766
+ */
20767
+ function delimit(type) {
20768
+ return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)));
20769
+ }
20770
+ /**
20771
+ * @param {number} type
20772
+ * @return {string}
20773
+ */
20774
+ function whitespace(type) {
20775
+ while (character = peek()) if (character < 33) next();
20776
+ else break;
20777
+ return token(type) > 2 || token(character) > 3 ? "" : " ";
20778
+ }
20779
+ /**
20780
+ * @param {number} index
20781
+ * @param {number} count
20782
+ * @return {string}
20783
+ */
20784
+ function escaping(index, count) {
20785
+ while (--count && next()) if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) break;
20786
+ return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32));
20787
+ }
20788
+ /**
20789
+ * @param {number} type
20790
+ * @return {number}
20791
+ */
20792
+ function delimiter(type) {
20793
+ while (next()) switch (character) {
20794
+ case type: return position;
20795
+ case 34:
20796
+ case 39:
20797
+ if (type !== 34 && type !== 39) delimiter(character);
20798
+ break;
20799
+ case 40:
20800
+ if (type === 41) delimiter(type);
20801
+ break;
20802
+ case 92: next();
20803
+ }
20804
+ return position;
20805
+ }
20806
+ /**
20807
+ * @param {number} type
20808
+ * @param {number} index
20809
+ * @return {number}
20810
+ */
20811
+ function commenter(type, index) {
20812
+ while (next()) if (type + character === 57) break;
20813
+ else if (type + character === 84 && peek() === 47) break;
20814
+ return "/*" + slice(index, position - 1) + "*" + from(type === 47 ? type : next());
20815
+ }
20816
+ /**
20817
+ * @param {number} index
20818
+ * @return {string}
20819
+ */
20820
+ function identifier(index) {
20821
+ while (!token(peek())) next();
20822
+ return slice(index, position);
20823
+ }
20824
+ //#endregion
20825
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Parser.js
20826
+ /**
20827
+ * @param {string} value
20828
+ * @return {object[]}
20829
+ */
20830
+ function compile(value) {
20831
+ return dealloc(parse$1("", null, null, null, [""], value = alloc(value), 0, [0], value));
20832
+ }
20833
+ /**
20834
+ * @param {string} value
20835
+ * @param {object} root
20836
+ * @param {object?} parent
20837
+ * @param {string[]} rule
20838
+ * @param {string[]} rules
20839
+ * @param {string[]} rulesets
20840
+ * @param {number[]} pseudo
20841
+ * @param {number[]} points
20842
+ * @param {string[]} declarations
20843
+ * @return {object}
20844
+ */
20845
+ function parse$1(value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {
20846
+ var index = 0;
20847
+ var offset = 0;
20848
+ var length = pseudo;
20849
+ var atrule = 0;
20850
+ var property = 0;
20851
+ var previous = 0;
20852
+ var variable = 1;
20853
+ var scanning = 1;
20854
+ var ampersand = 1;
20855
+ var parens = 0;
20856
+ var character = 0;
20857
+ var type = "";
20858
+ var props = rules;
20859
+ var children = rulesets;
20860
+ var reference = rule;
20861
+ var characters = type;
20862
+ while (scanning) switch (previous = character, character = next()) {
20863
+ case 40:
20864
+ if (previous != 108 && charat(characters, length - 1) == 58) parens++, characters += "(";
20865
+ else characters += delimit(character);
20866
+ break;
20867
+ case 41:
20868
+ parens--, characters += ")";
20869
+ break;
20870
+ case 34:
20871
+ case 39:
20872
+ case 91:
20873
+ characters += delimit(character);
20874
+ break;
20875
+ case 9:
20876
+ case 10:
20877
+ case 13:
20878
+ case 32:
20879
+ if (parens > 0) {
20880
+ characters += from(character);
20881
+ break;
20882
+ }
20883
+ characters += whitespace(previous);
20884
+ break;
20885
+ case 92:
20886
+ characters += escaping(caret() - 1, 7);
20887
+ continue;
20888
+ case 47:
20889
+ switch (peek()) {
20890
+ case 42:
20891
+ case 47:
20892
+ append(comment(commenter(next(), caret()), root, parent, declarations), declarations);
20893
+ if ((token(previous || 1) == 5 || token(peek() || 1) == 5) && strlen(characters) && substr(characters, -1, void 0) !== " ") characters += " ";
20894
+ break;
20895
+ default: characters += "/";
20896
+ }
20897
+ break;
20898
+ case 123 * variable: points[index++] = strlen(characters) * ampersand;
20899
+ case 125 * variable:
20900
+ case 59:
20901
+ case 0:
20902
+ if (parens > 0 && character) {
20903
+ characters += from(character);
20904
+ break;
20905
+ }
20906
+ switch (character) {
20907
+ case 0:
20908
+ case 125: scanning = 0;
20909
+ case 59 + offset:
20910
+ if (ampersand == -1) characters = replace(characters, /\f/g, "");
20911
+ if (property > 0 && (strlen(characters) - length || variable === 0)) append(property > 32 ? declaration(characters + ";", rule, parent, length - 1, declarations) : declaration(replace(characters, " ", "") + ";", rule, parent, length - 2, declarations), declarations);
20912
+ break;
20913
+ case 59: characters += ";";
20914
+ default:
20915
+ append(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length, rulesets), rulesets);
20916
+ if (character === 123) if (offset === 0) parse$1(characters, root, reference, reference, props, rulesets, length, points, children);
20917
+ else {
20918
+ switch (atrule) {
20919
+ case 99: if (charat(characters, 3) === 110) break;
20920
+ case 108: if (charat(characters, 2) === 97) break;
20921
+ default: offset = 0;
20922
+ case 100:
20923
+ case 109:
20924
+ case 115:
20925
+ }
20926
+ if (offset) parse$1(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length, children), children), rules, children, length, points, rule ? props : children);
20927
+ else parse$1(characters, reference, reference, reference, [""], children, 0, points, children);
20928
+ }
20929
+ }
20930
+ index = offset = property = 0, variable = ampersand = 1, type = characters = "", length = pseudo;
20931
+ break;
20932
+ case 58: length = 1 + strlen(characters), property = previous;
20933
+ default:
20934
+ if (variable < 1) {
20935
+ if (character == 123) --variable;
20936
+ else if (character == 125 && variable++ == 0 && prev() == 125) continue;
20937
+ }
20938
+ switch (characters += from(character), character * variable) {
20939
+ case 38:
20940
+ ampersand = offset > 0 ? 1 : (characters += "\f", -1);
20941
+ break;
20942
+ case 44:
20943
+ if (parens > 0) break;
20944
+ points[index++] = (strlen(characters) - 1) * ampersand, ampersand = 1;
20945
+ break;
20946
+ case 64:
20947
+ if (peek() === 45) characters += delimit(next());
20948
+ atrule = peek(), offset = length = strlen(type = characters += identifier(caret())), character++;
20949
+ break;
20950
+ case 45: if (previous === 45 && strlen(characters) == 2) variable = 0;
20951
+ }
20952
+ }
20953
+ return rulesets;
20954
+ }
20955
+ /**
20956
+ * @param {string} value
20957
+ * @param {object} root
20958
+ * @param {object?} parent
20959
+ * @param {number} index
20960
+ * @param {number} offset
20961
+ * @param {string[]} rules
20962
+ * @param {number[]} points
20963
+ * @param {string} type
20964
+ * @param {string[]} props
20965
+ * @param {string[]} children
20966
+ * @param {number} length
20967
+ * @param {object[]} siblings
20968
+ * @return {object}
20969
+ */
20970
+ function ruleset(value, root, parent, index, offset, rules, points, type, props, children, length, siblings) {
20971
+ var post = offset - 1;
20972
+ var rule = offset === 0 ? rules : [""];
20973
+ var size = sizeof(rule);
20974
+ for (var i = 0, j = 0, k = 0; i < index; ++i) for (var x = 0, y = substr(value, post + 1, post = abs(j = points[i])), z = value; x < size; ++x) if (z = trim(j > 0 ? rule[x] + " " + y : replace(y, /&\f/g, rule[x]))) props[k++] = z;
20975
+ return node(value, root, parent, offset === 0 ? RULESET : type, props, children, length, siblings);
20976
+ }
20977
+ /**
20978
+ * @param {number} value
20979
+ * @param {object} root
20980
+ * @param {object?} parent
20981
+ * @param {object[]} siblings
20982
+ * @return {object}
20983
+ */
20984
+ function comment(value, root, parent, siblings) {
20985
+ return node(value, root, parent, COMMENT, from(char()), substr(value, 2, -2), 0, siblings);
20986
+ }
20987
+ /**
20988
+ * @param {string} value
20989
+ * @param {object} root
20990
+ * @param {object?} parent
20991
+ * @param {number} length
20992
+ * @param {object[]} siblings
20993
+ * @return {object}
20994
+ */
20995
+ function declaration(value, root, parent, length, siblings) {
20996
+ return node(value, root, parent, DECLARATION, substr(value, 0, length), substr(value, length + 1, -1), length, siblings);
20997
+ }
20998
+ //#endregion
20999
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Serializer.js
21000
+ /**
21001
+ * @param {object[]} children
21002
+ * @param {function} callback
21003
+ * @return {string}
21004
+ */
21005
+ function serialize(children, callback) {
21006
+ var output = "";
21007
+ for (var i = 0; i < children.length; i++) output += callback(children[i], i, children, callback) || "";
21008
+ return output;
21009
+ }
21010
+ /**
21011
+ * @param {object} element
21012
+ * @param {number} index
21013
+ * @param {object[]} children
21014
+ * @param {function} callback
21015
+ * @return {string}
21016
+ */
21017
+ function stringify(element, index, children, callback) {
21018
+ switch (element.type) {
21019
+ case LAYER: if (element.children.length) break;
21020
+ case IMPORT:
21021
+ case NAMESPACE:
21022
+ case DECLARATION: return element.return = element.return || element.value;
21023
+ case COMMENT: return "";
21024
+ case KEYFRAMES: return element.return = element.value + "{" + serialize(element.children, callback) + "}";
21025
+ case RULESET: if (!strlen(element.value = element.props.join(","))) return "";
21026
+ }
21027
+ return strlen(children = serialize(element.children, callback)) ? element.return = element.value + "{" + children + "}" : "";
21028
+ }
21029
+ //#endregion
21030
+ //#region ../../node_modules/.pnpm/stylis@4.4.0/node_modules/stylis/src/Middleware.js
21031
+ /**
21032
+ * @param {function[]} collection
21033
+ * @return {function}
21034
+ */
21035
+ function middleware(collection) {
21036
+ var length = sizeof(collection);
21037
+ return function(element, index, children, callback) {
21038
+ var output = "";
21039
+ for (var i = 0; i < length; i++) output += collection[i](element, index, children, callback) || "";
21040
+ return output;
21041
+ };
21042
+ }
21043
+ //#endregion
21044
+ //#region ../../node_modules/.pnpm/mermaid@11.17.2/node_modules/mermaid/dist/mermaid.core.mjs
21045
+ var id = "c4";
21046
+ var c4Detector_default = {
21047
+ id,
21048
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21049
+ return /^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/.test(txt);
21050
+ }, "detector"),
21051
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21052
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./c4Diagram-7LVT6UL2-CFvYVb_D.cjs"));
21053
+ return {
21054
+ id,
21055
+ diagram: diagram2
21056
+ };
21057
+ }, "loader")
21058
+ };
21059
+ var id2 = "flowchart";
21060
+ var flowDetector_default = {
21061
+ id: id2,
21062
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21063
+ if (config?.flowchart?.defaultRenderer === "dagre-wrapper" || config?.flowchart?.defaultRenderer === "elk") return false;
21064
+ return /^\s*graph/.test(txt);
21065
+ }, "detector"),
21066
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21067
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./flowDiagram-HODETNUW-VH2Rn6lb.cjs"));
21068
+ return {
21069
+ id: id2,
21070
+ diagram: diagram2
21071
+ };
21072
+ }, "loader")
21073
+ };
21074
+ var id3 = "flowchart-v2";
21075
+ var flowDetector_v2_default = {
21076
+ id: id3,
21077
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21078
+ if (config?.flowchart?.defaultRenderer === "dagre-d3") return false;
21079
+ if (config?.flowchart?.defaultRenderer === "elk") config.layout = "elk";
21080
+ if (/^\s*graph/.test(txt) && config?.flowchart?.defaultRenderer === "dagre-wrapper") return true;
21081
+ return /^\s*flowchart/.test(txt);
21082
+ }, "detector"),
21083
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21084
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./flowDiagram-HODETNUW-VH2Rn6lb.cjs"));
21085
+ return {
21086
+ id: id3,
21087
+ diagram: diagram2
21088
+ };
21089
+ }, "loader")
21090
+ };
21091
+ var id4 = "swimlane";
21092
+ var detector_default = {
21093
+ id: id4,
21094
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21095
+ return /^\s*swimlane-beta\b/.test(txt);
21096
+ }, "detector"),
21097
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21098
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./swimlanesDiagram-VR7AAH4N-BBHpr-0x.cjs"));
21099
+ return {
21100
+ id: id4,
21101
+ diagram: diagram2
21102
+ };
21103
+ }, "loader")
21104
+ };
21105
+ var id5 = "er";
21106
+ var erDetector_default = {
21107
+ id: id5,
21108
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21109
+ return /^\s*erDiagram/.test(txt);
21110
+ }, "detector"),
21111
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21112
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./erDiagram-RLTQ6QDP-CCudjekz.cjs"));
21113
+ return {
21114
+ id: id5,
21115
+ diagram: diagram2
21116
+ };
21117
+ }, "loader")
21118
+ };
21119
+ var id6 = "gitGraph";
21120
+ var gitGraphDetector_default = {
21121
+ id: id6,
21122
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21123
+ return /^\s*gitGraph/.test(txt);
21124
+ }, "detector"),
21125
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21126
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./gitGraphDiagram-WWUBYQGX-CJXV-l6A.cjs"));
21127
+ return {
21128
+ id: id6,
21129
+ diagram: diagram2
21130
+ };
21131
+ }, "loader")
21132
+ };
21133
+ var id7 = "gantt";
21134
+ var ganttDetector_default = {
21135
+ id: id7,
21136
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21137
+ return /^\s*gantt/.test(txt);
21138
+ }, "detector"),
21139
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21140
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./ganttDiagram-EL5Y4UJY-Kpz6vAiy.cjs"));
21141
+ return {
21142
+ id: id7,
21143
+ diagram: diagram2
21144
+ };
21145
+ }, "loader")
21146
+ };
21147
+ var id8 = "info";
21148
+ var info = {
21149
+ id: id8,
21150
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21151
+ return /^\s*info/.test(txt);
21152
+ }, "detector"),
21153
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21154
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./infoDiagram-27XIBGKW-BOI_kUgt.cjs"));
21155
+ return {
21156
+ id: id8,
21157
+ diagram: diagram2
21158
+ };
21159
+ }, "loader")
21160
+ };
21161
+ var id9 = "pie";
21162
+ var pie = {
21163
+ id: id9,
21164
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21165
+ return /^\s*pie/.test(txt);
21166
+ }, "detector"),
21167
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21168
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./pieDiagram-E7YTZNPT-B2ZJ3K5b.cjs"));
21169
+ return {
21170
+ id: id9,
21171
+ diagram: diagram2
21172
+ };
21173
+ }, "loader")
21174
+ };
21175
+ var id10 = "quadrantChart";
21176
+ var quadrantDetector_default = {
21177
+ id: id10,
21178
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21179
+ return /^\s*quadrantChart/.test(txt);
21180
+ }, "detector"),
21181
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21182
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./quadrantDiagram-AXDQQJYC-CUbgXii0.cjs"));
21183
+ return {
21184
+ id: id10,
21185
+ diagram: diagram2
21186
+ };
21187
+ }, "loader")
21188
+ };
21189
+ var id11 = "xychart";
21190
+ var xychartDetector_default = {
21191
+ id: id11,
21192
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21193
+ return /^\s*xychart(-beta)?/.test(txt);
21194
+ }, "detector"),
21195
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21196
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./xychartDiagram-S5SC5T6Z-iYUZjZwr.cjs"));
21197
+ return {
21198
+ id: id11,
21199
+ diagram: diagram2
21200
+ };
21201
+ }, "loader")
21202
+ };
21203
+ var id12 = "requirement";
21204
+ var requirementDetector_default = {
21205
+ id: id12,
21206
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21207
+ return /^\s*requirement(Diagram)?/.test(txt);
21208
+ }, "detector"),
21209
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21210
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./requirementDiagram-BXWQKSXE-B8yziCAV.cjs"));
21211
+ return {
21212
+ id: id12,
21213
+ diagram: diagram2
21214
+ };
21215
+ }, "loader")
21216
+ };
21217
+ var id13 = "sequence";
21218
+ var sequenceDetector_default = {
21219
+ id: id13,
21220
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21221
+ return /^\s*sequenceDiagram/.test(txt);
21222
+ }, "detector"),
21223
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21224
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./sequenceDiagram-WJ2MYXX4-BjVAVAeI.cjs"));
21225
+ return {
21226
+ id: id13,
21227
+ diagram: diagram2
21228
+ };
21229
+ }, "loader")
21230
+ };
21231
+ var id14 = "class";
21232
+ var classDetector_default = {
21233
+ id: id14,
21234
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21235
+ if (config?.class?.defaultRenderer === "dagre-wrapper") return false;
21236
+ return /^\s*classDiagram/.test(txt);
21237
+ }, "detector"),
21238
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21239
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./classDiagram-ZZMXUADV-Bz4P2oRX.cjs"));
21240
+ return {
21241
+ id: id14,
21242
+ diagram: diagram2
21243
+ };
21244
+ }, "loader")
21245
+ };
21246
+ var id15 = "classDiagram";
21247
+ var classDetector_V2_default = {
21248
+ id: id15,
21249
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21250
+ if (/^\s*classDiagram/.test(txt) && config?.class?.defaultRenderer === "dagre-wrapper") return true;
21251
+ return /^\s*classDiagram-v2/.test(txt);
21252
+ }, "detector"),
21253
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21254
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./classDiagram-v2-VYDZK3BY-Bz4P2oRX.cjs"));
21255
+ return {
21256
+ id: id15,
21257
+ diagram: diagram2
21258
+ };
21259
+ }, "loader")
21260
+ };
21261
+ var id16 = "state";
21262
+ var stateDetector_default = {
21263
+ id: id16,
21264
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21265
+ if (config?.state?.defaultRenderer === "dagre-wrapper") return false;
21266
+ return /^\s*stateDiagram/.test(txt);
21267
+ }, "detector"),
21268
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21269
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./stateDiagram-D77RDMKH-CjJPJLAB.cjs"));
21270
+ return {
21271
+ id: id16,
21272
+ diagram: diagram2
21273
+ };
21274
+ }, "loader")
21275
+ };
21276
+ var id17 = "stateDiagram";
21277
+ var stateDetector_V2_default = {
21278
+ id: id17,
21279
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config) => {
21280
+ if (/^\s*stateDiagram-v2/.test(txt)) return true;
21281
+ if (/^\s*stateDiagram/.test(txt) && config?.state?.defaultRenderer === "dagre-wrapper") return true;
21282
+ return false;
21283
+ }, "detector"),
21284
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21285
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./stateDiagram-v2-MP3YSRHH-DLVXgDR-.cjs"));
21286
+ return {
21287
+ id: id17,
21288
+ diagram: diagram2
21289
+ };
21290
+ }, "loader")
21291
+ };
21292
+ var id18 = "journey";
21293
+ var journeyDetector_default = {
21294
+ id: id18,
21295
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21296
+ return /^\s*journey/.test(txt);
21297
+ }, "detector"),
21298
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21299
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./journeyDiagram-3NMN7TZE-BoyV_lYH.cjs"));
21300
+ return {
21301
+ id: id18,
21302
+ diagram: diagram2
21303
+ };
21304
+ }, "loader")
21305
+ };
21306
+ var renderer = { draw: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((_text, id39, version) => {
21307
+ require_src.log.debug("rendering svg for syntax error\n");
21308
+ const svg = require_chunk_CLGD4ZFX.selectSvgElement(id39);
21309
+ const g = svg.append("g");
21310
+ svg.attr("viewBox", "0 0 2412 512");
21311
+ require_chunk_DU6HZSFF.configureSvgSize(svg, 100, 512, true);
21312
+ g.append("path").attr("class", "error-icon").attr("d", "m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z");
21313
+ g.append("path").attr("class", "error-icon").attr("d", "m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z");
21314
+ g.append("path").attr("class", "error-icon").attr("d", "m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z");
21315
+ g.append("path").attr("class", "error-icon").attr("d", "m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z");
21316
+ g.append("path").attr("class", "error-icon").attr("d", "m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z");
21317
+ g.append("path").attr("class", "error-icon").attr("d", "m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z");
21318
+ g.append("text").attr("class", "error-text").attr("x", 1440).attr("y", 250).attr("font-size", "150px").style("text-anchor", "middle").text("Syntax error in text");
21319
+ g.append("text").attr("class", "error-text").attr("x", 1250).attr("y", 400).attr("font-size", "100px").style("text-anchor", "middle").text(`mermaid version ${version}`);
21320
+ }, "draw") };
21321
+ var errorRenderer_default = renderer;
21322
+ var errorDiagram_default = {
21323
+ db: {},
21324
+ renderer,
21325
+ parser: { parse: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {}, "parse") }
21326
+ };
21327
+ var id19 = "flowchart-elk";
21328
+ var detector_default2 = {
21329
+ id: id19,
21330
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt, config = {}) => {
21331
+ if (/^\s*flowchart-elk/.test(txt) || /^\s*(flowchart|graph)/.test(txt) && config?.flowchart?.defaultRenderer === "elk") {
21332
+ config.layout = "elk";
21333
+ return true;
21334
+ }
21335
+ return false;
21336
+ }, "detector"),
21337
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21338
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./flowDiagram-HODETNUW-VH2Rn6lb.cjs"));
21339
+ return {
21340
+ id: id19,
21341
+ diagram: diagram2
21342
+ };
21343
+ }, "loader")
21344
+ };
21345
+ var id20 = "timeline";
21346
+ var detector_default3 = {
21347
+ id: id20,
21348
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21349
+ return /^\s*timeline/.test(txt);
21350
+ }, "detector"),
21351
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21352
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./timeline-definition-24CTP7MA-B6FLO9fn.cjs"));
21353
+ return {
21354
+ id: id20,
21355
+ diagram: diagram2
21356
+ };
21357
+ }, "loader")
21358
+ };
21359
+ var id21 = "mindmap";
21360
+ var detector_default4 = {
21361
+ id: id21,
21362
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21363
+ return /^\s*mindmap/.test(txt);
21364
+ }, "detector"),
21365
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21366
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./mindmap-definition-YA3MSWOX-7X_4_0S6.cjs"));
21367
+ return {
21368
+ id: id21,
21369
+ diagram: diagram2
21370
+ };
21371
+ }, "loader")
21372
+ };
21373
+ var id22 = "kanban";
21374
+ var detector_default5 = {
21375
+ id: id22,
21376
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21377
+ return /^\s*kanban/.test(txt);
21378
+ }, "detector"),
21379
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21380
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./kanban-definition-UXKFOSKX-Cp5PiN69.cjs"));
21381
+ return {
21382
+ id: id22,
21383
+ diagram: diagram2
21384
+ };
21385
+ }, "loader")
21386
+ };
21387
+ var id23 = "sankey";
21388
+ var sankeyDetector_default = {
21389
+ id: id23,
21390
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21391
+ return /^\s*sankey(-beta)?/.test(txt);
21392
+ }, "detector"),
21393
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21394
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./sankeyDiagram-P5KCCOFB-am60dMKk.cjs"));
21395
+ return {
21396
+ id: id23,
21397
+ diagram: diagram2
21398
+ };
21399
+ }, "loader")
21400
+ };
21401
+ var id24 = "packet";
21402
+ var packet = {
21403
+ id: id24,
21404
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21405
+ return /^\s*packet(-beta)?/.test(txt);
21406
+ }, "detector"),
21407
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21408
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./diagram-Z3DM3KII-8uxj8GzQ.cjs"));
21409
+ return {
21410
+ id: id24,
21411
+ diagram: diagram2
21412
+ };
21413
+ }, "loader")
21414
+ };
21415
+ var id25 = "radar";
21416
+ var radar = {
21417
+ id: id25,
21418
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21419
+ return /^\s*radar-beta/.test(txt);
21420
+ }, "detector"),
21421
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21422
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./diagram-UQ7AKVKN-BnGYpddE.cjs"));
21423
+ return {
21424
+ id: id25,
21425
+ diagram: diagram2
21426
+ };
21427
+ }, "loader")
21428
+ };
21429
+ var id26 = "block";
21430
+ var blockDetector_default = {
21431
+ id: id26,
21432
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21433
+ return /^\s*block(-beta)?/.test(txt);
21434
+ }, "detector"),
21435
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21436
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./blockDiagram-I7D4REHJ-CN12kJVh.cjs"));
21437
+ return {
21438
+ id: id26,
21439
+ diagram: diagram2
21440
+ };
21441
+ }, "loader")
21442
+ };
21443
+ var id27 = "treeView";
21444
+ var detector_default6 = {
21445
+ id: id27,
21446
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21447
+ return /^\s*treeView-beta/.test(txt);
21448
+ }, "detector"),
21449
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21450
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./diagram-S7CK7UJ4-BSYI0VgZ.cjs"));
21451
+ return {
21452
+ id: id27,
21453
+ diagram: diagram2
21454
+ };
21455
+ }, "loader")
21456
+ };
21457
+ var id28 = "architecture";
21458
+ var architectureDetector_default = {
21459
+ id: id28,
21460
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21461
+ return /^\s*architecture/.test(txt);
21462
+ }, "detector"),
21463
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21464
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./architectureDiagram-5GKGNRK7-NVjH6XTq.cjs"));
21465
+ return {
21466
+ id: id28,
21467
+ diagram: diagram2
21468
+ };
21469
+ }, "loader")
21470
+ };
21471
+ var id29 = "eventmodeling";
21472
+ var detector_default7 = {
21473
+ id: id29,
21474
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21475
+ return /^\s*eventmodeling/.test(txt);
21476
+ }, "detector"),
21477
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21478
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./diagram-VSXAHHWV-B-hbzZAq.cjs"));
21479
+ return {
21480
+ id: id29,
21481
+ diagram: diagram2
21482
+ };
21483
+ }, "loader")
21484
+ };
21485
+ var id30 = "ishikawa";
21486
+ var ishikawa = {
21487
+ id: id30,
21488
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21489
+ return /^\s*ishikawa(-beta)?\b/i.test(txt);
21490
+ }, "detector"),
21491
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21492
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./ishikawaDiagram-5VMMS53U-C1otik_b.cjs"));
21493
+ return {
21494
+ id: id30,
21495
+ diagram: diagram2
21496
+ };
21497
+ }, "loader")
21498
+ };
21499
+ var id31 = "venn";
21500
+ var vennDetector_default = {
21501
+ id: id31,
21502
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21503
+ return /^\s*venn-beta/.test(txt);
21504
+ }, "detector"),
21505
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21506
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./vennDiagram-4TSXK5OY-BoPrSQa4.cjs"));
21507
+ return {
21508
+ id: id31,
21509
+ diagram: diagram2
21510
+ };
21511
+ }, "loader")
21512
+ };
21513
+ var id32 = "treemap";
21514
+ var treemap = {
21515
+ id: id32,
21516
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21517
+ return /^\s*treemap/.test(txt);
21518
+ }, "detector"),
21519
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21520
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./diagram-VX7I27RA-DmtZpJBQ.cjs"));
21521
+ return {
21522
+ id: id32,
21523
+ diagram: diagram2
21524
+ };
21525
+ }, "loader")
21526
+ };
21527
+ var id33 = "wardley";
21528
+ var wardleyDetector_default = {
21529
+ id: id33,
21530
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((text) => {
21531
+ return /^\s*wardley-beta/i.test(text);
21532
+ }, "detector"),
21533
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21534
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./wardleyDiagram-VM6X3IG4-pRLM7H2c.cjs"));
21535
+ return {
21536
+ id: id33,
21537
+ diagram: diagram2
21538
+ };
21539
+ }, "loader")
21540
+ };
21541
+ var id34 = "cynefin";
21542
+ var cynefin = {
21543
+ id: id34,
21544
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21545
+ return /^\s*cynefin-beta(?:[\s:]|$)/.test(txt);
21546
+ }, "detector"),
21547
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21548
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./cynefinDiagram-5FMLGOSQ-Ap6hVoa3.cjs"));
21549
+ return {
21550
+ id: id34,
21551
+ diagram: diagram2
21552
+ };
21553
+ }, "loader")
21554
+ };
21555
+ var id35 = "railroad";
21556
+ var railroad = {
21557
+ id: id35,
21558
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21559
+ return /^\s*railroad-beta/i.test(txt);
21560
+ }, "detector"),
21561
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21562
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./railroadDiagram-O6MQD6OU-B1_htIeQ.cjs"));
21563
+ return {
21564
+ id: id35,
21565
+ diagram: diagram2
21566
+ };
21567
+ }, "loader")
21568
+ };
21569
+ var id36 = "railroadEbnf";
21570
+ var railroadEbnf = {
21571
+ id: id36,
21572
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21573
+ return /^\s*railroad-ebnf-beta/i.test(txt);
21574
+ }, "detector"),
21575
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21576
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./ebnfDiagram-PWID7BFC-C447qgdc.cjs"));
21577
+ return {
21578
+ id: id36,
21579
+ diagram: diagram2
21580
+ };
21581
+ }, "loader")
21582
+ };
21583
+ var id37 = "railroadAbnf";
21584
+ var railroadAbnf = {
21585
+ id: id37,
21586
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21587
+ return /^\s*railroad-abnf-beta/i.test(txt);
21588
+ }, "detector"),
21589
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21590
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./abnfDiagram-VCTEODGH-B_j4_Ip0.cjs"));
21591
+ return {
21592
+ id: id37,
21593
+ diagram: diagram2
21594
+ };
21595
+ }, "loader")
21596
+ };
21597
+ var id38 = "railroadPeg";
21598
+ var railroadPeg = {
21599
+ id: id38,
21600
+ detector: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((txt) => {
21601
+ return /^\s*railroad-peg-beta/i.test(txt);
21602
+ }, "detector"),
21603
+ loader: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21604
+ const { diagram: diagram2 } = await Promise.resolve().then(() => require("./pegDiagram-XKGWAZYB-CguB2tzQ.cjs"));
21605
+ return {
21606
+ id: id38,
21607
+ diagram: diagram2
21608
+ };
21609
+ }, "loader")
21610
+ };
21611
+ var hasLoadedDiagrams = false;
21612
+ var addDiagrams = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
21613
+ if (hasLoadedDiagrams) return;
21614
+ hasLoadedDiagrams = true;
21615
+ require_chunk_DU6HZSFF.registerDiagram("error", errorDiagram_default, (text) => {
21616
+ return text.toLowerCase().trim() === "error";
21617
+ });
21618
+ require_chunk_DU6HZSFF.registerDiagram("---", {
21619
+ db: { clear: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {}, "clear") },
21620
+ styles: {},
21621
+ renderer: { draw: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {}, "draw") },
21622
+ parser: { parse: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
21623
+ throw new Error("Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with un-indented `---` blocks");
21624
+ }, "parse") },
21625
+ init: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => null, "init")
21626
+ }, (text) => {
21627
+ return text.toLowerCase().trimStart().startsWith("---");
21628
+ });
21629
+ require_chunk_DU6HZSFF.registerLazyLoadedDiagrams(detector_default2, detector_default4, architectureDetector_default);
21630
+ require_chunk_DU6HZSFF.registerLazyLoadedDiagrams(c4Detector_default, detector_default5, classDetector_V2_default, classDetector_default, erDetector_default, ganttDetector_default, info, pie, requirementDetector_default, sequenceDetector_default, detector_default, flowDetector_v2_default, flowDetector_default, detector_default3, gitGraphDetector_default, stateDetector_V2_default, stateDetector_default, journeyDetector_default, quadrantDetector_default, sankeyDetector_default, packet, xychartDetector_default, blockDetector_default, detector_default7, detector_default6, radar, ishikawa, treemap, railroad, railroadEbnf, railroadAbnf, railroadPeg, vennDetector_default, wardleyDetector_default, cynefin);
21631
+ }, "addDiagrams");
21632
+ var loadRegisteredDiagrams = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
21633
+ require_src.log.debug(`Loading registered diagrams`);
21634
+ const failed = (await Promise.allSettled(Object.entries(require_chunk_DU6HZSFF.detectors).map(async ([key, { detector: detector39, loader: loader39 }]) => {
21635
+ if (!loader39) return;
21636
+ try {
21637
+ require_chunk_DU6HZSFF.getDiagram(key);
21638
+ } catch {
21639
+ try {
21640
+ const { diagram: diagram2, id: id39 } = await loader39();
21641
+ require_chunk_DU6HZSFF.registerDiagram(id39, diagram2, detector39);
21642
+ } catch (err) {
21643
+ require_src.log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
21644
+ delete require_chunk_DU6HZSFF.detectors[key];
21645
+ throw err;
21646
+ }
21647
+ }
21648
+ }))).filter((result) => result.status === "rejected");
21649
+ if (failed.length > 0) {
21650
+ require_src.log.error(`Failed to load ${failed.length} external diagrams`);
21651
+ for (const res of failed) require_src.log.error(res);
21652
+ throw new Error(`Failed to load ${failed.length} external diagrams`);
21653
+ }
21654
+ }, "loadRegisteredDiagrams");
21655
+ var SVG_ROLE = "graphics-document document";
21656
+ function setA11yDiagramInfo(svg, diagramType) {
21657
+ svg.attr("role", SVG_ROLE);
21658
+ if (diagramType !== "") svg.attr("aria-roledescription", diagramType);
21659
+ }
21660
+ require_chunk_Y2CYZVJY.__name(setA11yDiagramInfo, "setA11yDiagramInfo");
21661
+ function addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {
21662
+ if (svg.insert === void 0) return;
21663
+ if (a11yDesc) {
21664
+ const descId = `chart-desc-${baseId}`;
21665
+ svg.attr("aria-describedby", descId);
21666
+ svg.insert("desc", ":first-child").attr("id", descId).text(a11yDesc);
21667
+ }
21668
+ if (a11yTitle) {
21669
+ const titleId = `chart-title-${baseId}`;
21670
+ svg.attr("aria-labelledby", titleId);
21671
+ svg.insert("title", ":first-child").attr("id", titleId).text(a11yTitle);
21672
+ }
21673
+ }
21674
+ require_chunk_Y2CYZVJY.__name(addSVGa11yTitleDescription, "addSVGa11yTitleDescription");
21675
+ var Diagram = class _Diagram {
21676
+ constructor(type, text, db, parser, renderer2) {
21677
+ this.type = type;
21678
+ this.text = text;
21679
+ this.db = db;
21680
+ this.parser = parser;
21681
+ this.renderer = renderer2;
21682
+ }
21683
+ static {
21684
+ require_chunk_Y2CYZVJY.__name(this, "Diagram");
21685
+ }
21686
+ static async fromText(text, metadata = {}) {
21687
+ const config = require_chunk_DU6HZSFF.getConfig();
21688
+ const type = require_chunk_DU6HZSFF.detectType(text, config);
21689
+ text = require_chunk_75Z2AOVW.encodeEntities(text) + "\n";
21690
+ try {
21691
+ require_chunk_DU6HZSFF.getDiagram(type);
21692
+ } catch {
21693
+ const loader39 = require_chunk_DU6HZSFF.getDiagramLoader(type);
21694
+ if (!loader39) throw new require_chunk_DU6HZSFF.UnknownDiagramError(`Diagram ${type} not found.`);
21695
+ const { id: id39, diagram: diagram2 } = await loader39();
21696
+ require_chunk_DU6HZSFF.registerDiagram(id39, diagram2);
21697
+ }
21698
+ const { db, parser, renderer: renderer2, init: init2 } = require_chunk_DU6HZSFF.getDiagram(type);
21699
+ if (parser.parser) parser.parser.yy = db;
21700
+ db.clear?.();
21701
+ init2?.(config);
21702
+ if (metadata.title) db.setDiagramTitle?.(metadata.title);
21703
+ await parser.parse(text);
21704
+ return new _Diagram(type, text, db, parser, renderer2);
21705
+ }
21706
+ async render(id39, version) {
21707
+ await this.renderer.draw(this.text, id39, version, this);
21708
+ }
21709
+ getParser() {
21710
+ return this.parser;
21711
+ }
21712
+ getType() {
21713
+ return this.type;
21714
+ }
21715
+ };
21716
+ var interactionFunctions = [];
21717
+ var attachFunctions = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
21718
+ interactionFunctions.forEach((f) => {
21719
+ f();
21720
+ });
21721
+ interactionFunctions = [];
21722
+ }, "attachFunctions");
21723
+ var cleanupComments = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((text) => {
21724
+ return text.replace(/^\s*%%(?!{)[^\n]+\n?/gm, "").trimStart();
21725
+ }, "cleanupComments");
21726
+ function extractFrontMatter(text) {
21727
+ const matches = text.match(require_chunk_DU6HZSFF.frontMatterRegex);
21728
+ if (!matches) return {
21729
+ text,
21730
+ metadata: {}
21731
+ };
21732
+ const indent = matches[1];
21733
+ const yamlBody = indent ? matches[2].split("\n").map((line) => line.startsWith(indent) ? line.slice(indent.length) : line).join("\n") : matches[2];
21734
+ let parsed = require_chunk_LNGE3PJU.load(yamlBody, { schema: require_chunk_LNGE3PJU.JSON_SCHEMA }) ?? {};
21735
+ parsed = typeof parsed === "object" && !Array.isArray(parsed) ? parsed : {};
21736
+ const metadata = {};
21737
+ if (parsed.displayMode) metadata.displayMode = parsed.displayMode.toString();
21738
+ if (parsed.title) metadata.title = parsed.title.toString();
21739
+ if (parsed.config) metadata.config = parsed.config;
21740
+ return {
21741
+ text: text.slice(matches[0].length),
21742
+ metadata
21743
+ };
21744
+ }
21745
+ require_chunk_Y2CYZVJY.__name(extractFrontMatter, "extractFrontMatter");
21746
+ var cleanupText = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((code) => {
21747
+ return code.replace(/\r\n?/g, "\n").replace(/<(\w+)([^>]*)>/g, (match, tag, attributes) => "<" + tag + attributes.replace(/="([^"]*)"/g, "='$1'") + ">");
21748
+ }, "cleanupText");
21749
+ var processFrontmatter = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((code) => {
21750
+ const { text, metadata } = extractFrontMatter(code);
21751
+ const { displayMode, title, config = {} } = metadata;
21752
+ if (displayMode) {
21753
+ if (!config.gantt) config.gantt = {};
21754
+ config.gantt.displayMode = displayMode;
21755
+ }
21756
+ return {
21757
+ title,
21758
+ config,
21759
+ text
21760
+ };
21761
+ }, "processFrontmatter");
21762
+ var processDirectives = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((code) => {
21763
+ const initDirective = require_chunk_75Z2AOVW.utils_default.detectInit(code) ?? {};
21764
+ const wrapDirectives = require_chunk_75Z2AOVW.utils_default.detectDirective(code, "wrap");
21765
+ if (Array.isArray(wrapDirectives)) initDirective.wrap = wrapDirectives.some(({ type }) => type === "wrap");
21766
+ else if (wrapDirectives?.type === "wrap") initDirective.wrap = true;
21767
+ return {
21768
+ text: require_chunk_75Z2AOVW.removeDirectives(code),
21769
+ directive: initDirective
21770
+ };
21771
+ }, "processDirectives");
21772
+ function preprocessDiagram(code) {
21773
+ const frontMatterResult = processFrontmatter(cleanupText(code));
21774
+ const directiveResult = processDirectives(frontMatterResult.text);
21775
+ const config = require_chunk_75Z2AOVW.cleanAndMerge(frontMatterResult.config, directiveResult.directive);
21776
+ code = cleanupComments(directiveResult.text);
21777
+ return {
21778
+ code,
21779
+ title: frontMatterResult.title,
21780
+ config
21781
+ };
21782
+ }
21783
+ require_chunk_Y2CYZVJY.__name(preprocessDiagram, "preprocessDiagram");
21784
+ function toBase64(str) {
21785
+ const utf8Bytes = new TextEncoder().encode(str);
21786
+ const utf8Str = Array.from(utf8Bytes, (byte) => String.fromCodePoint(byte)).join("");
21787
+ return btoa(utf8Str);
21788
+ }
21789
+ require_chunk_Y2CYZVJY.__name(toBase64, "toBase64");
21790
+ var MAX_TEXTLENGTH = 5e4;
21791
+ var MAX_TEXTLENGTH_EXCEEDED_MSG = "graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa";
21792
+ var SECURITY_LVL_SANDBOX = "sandbox";
21793
+ var SECURITY_LVL_LOOSE = "loose";
21794
+ var XMLNS_SVG_STD = "http://www.w3.org/2000/svg";
21795
+ var XMLNS_XLINK_STD = "http://www.w3.org/1999/xlink";
21796
+ var XMLNS_XHTML_STD = "http://www.w3.org/1999/xhtml";
21797
+ var IFRAME_WIDTH = "100%";
21798
+ var IFRAME_HEIGHT = "100%";
21799
+ var IFRAME_STYLES = "border:0;margin:0;";
21800
+ var IFRAME_BODY_STYLE = "margin:0";
21801
+ var IFRAME_SANDBOX_OPTS = "allow-top-navigation-by-user-activation allow-popups";
21802
+ var IFRAME_NOT_SUPPORTED_MSG = "The \"iframe\" tag is not supported by your browser.";
21803
+ var DOMPURIFY_TAGS = ["foreignobject"];
21804
+ var DOMPURIFY_ATTR = ["dominant-baseline"];
21805
+ function processAndSetConfigs(text) {
21806
+ const processed = preprocessDiagram(text);
21807
+ require_chunk_DU6HZSFF.reset();
21808
+ require_chunk_DU6HZSFF.addDirective(processed.config ?? {});
21809
+ return processed;
21810
+ }
21811
+ require_chunk_Y2CYZVJY.__name(processAndSetConfigs, "processAndSetConfigs");
21812
+ async function parse(text, parseOptions) {
21813
+ addDiagrams();
21814
+ try {
21815
+ const { code, config } = processAndSetConfigs(text);
21816
+ return {
21817
+ diagramType: (await getDiagramFromText(code)).type,
21818
+ config
21819
+ };
21820
+ } catch (error) {
21821
+ if (parseOptions?.suppressErrors) return false;
21822
+ throw error;
21823
+ }
21824
+ }
21825
+ require_chunk_Y2CYZVJY.__name(parse, "parse");
21826
+ var cssImportantStyles = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((cssClass, element, cssClasses = []) => {
21827
+ return `.${cssClass} ${element} ${require_chunk_DU6HZSFF.sanitizeCss(`{ ${cssClasses.join(" !important; ")} !important; }`)}`;
21828
+ }, "cssImportantStyles");
21829
+ var createCssStyles = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((config, classDefs = /* @__PURE__ */ new Map()) => {
21830
+ const cssStyles = new CSSStyleSheet();
21831
+ if (config.fontFamily !== void 0) cssStyles.insertRule(`:root { --mermaid-font-family: ${config.fontFamily}}`, cssStyles.cssRules.length);
21832
+ if (config.altFontFamily !== void 0) cssStyles.insertRule(`:root { --mermaid-alt-font-family: ${config.altFontFamily}}`, cssStyles.cssRules.length);
21833
+ if (classDefs instanceof Map) {
21834
+ const cssElements = require_chunk_DU6HZSFF.getEffectiveHtmlLabels(config) ? ["> *", "span"] : [
21835
+ "rect",
21836
+ "polygon",
21837
+ "ellipse",
21838
+ "circle",
21839
+ "path"
21840
+ ];
21841
+ classDefs.forEach((styleClassDef) => {
21842
+ if (!isEmpty(styleClassDef.styles)) cssElements.forEach((cssElement) => {
21843
+ cssStyles.insertRule(cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles), cssStyles.cssRules.length);
21844
+ });
21845
+ if (!isEmpty(styleClassDef.textStyles)) cssStyles.insertRule(cssImportantStyles(styleClassDef.id, "tspan", (styleClassDef?.textStyles || []).map((s) => s.replace("color", "fill"))), cssStyles.cssRules.length);
21846
+ });
21847
+ }
21848
+ let cssString = "";
21849
+ if (config.themeCSS !== void 0) {
21850
+ if (typeof cssStyles.replaceSync === "function") {
21851
+ const themeCssStyleSheet = new CSSStyleSheet();
21852
+ themeCssStyleSheet.replaceSync(config.themeCSS);
21853
+ cssString = require_chunk_DU6HZSFF.cssStyleSheetToString(themeCssStyleSheet) + "\n";
21854
+ } else cssString += `${config.themeCSS}
21855
+ `;
21856
+ }
21857
+ return cssString + require_chunk_DU6HZSFF.cssStyleSheetToString(cssStyles);
21858
+ }, "createCssStyles");
21859
+ var compileCSS = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((namespace, css) => {
21860
+ return serialize(compile(`${namespace}{${css}}`), middleware([/* @__PURE__ */ require_chunk_Y2CYZVJY.__name(function addNamespace(element, _index, _children, _callback) {
21861
+ if (element.type === "rule" && Array.isArray(element.props)) {
21862
+ if (element.parent && element.parent.type === "@keyframes") return;
21863
+ element.props = element.props.map((prop) => {
21864
+ if (prop === namespace && Array.isArray(element.children) && element.children.every((child) => {
21865
+ if (child.type !== "decl") return false;
21866
+ return (/* @__PURE__ */ new Set([
21867
+ "font-family",
21868
+ "font-size",
21869
+ "fill"
21870
+ ])).has(child.props);
21871
+ })) return prop;
21872
+ if (!((prop.startsWith(`${namespace} `) || prop.startsWith(`${namespace}>`)) && !prop.startsWith(`${namespace} ||`))) return `${namespace} ${prop}`;
21873
+ return prop;
21874
+ });
21875
+ } else if (element.type.startsWith("@")) {
21876
+ if (![...[
21877
+ "@media",
21878
+ "@supports",
21879
+ "@layer",
21880
+ "@scope",
21881
+ "@container",
21882
+ "@starting-style"
21883
+ ], "@keyframes"].includes(element.type)) {
21884
+ require_src.log.warn(`Removing unsupported at-rule ${element.type} from CSS`);
21885
+ element.type = COMMENT;
21886
+ }
21887
+ }
21888
+ }, "addNamespace"), stringify]));
21889
+ }, "compileCSS");
21890
+ var createUserStyles = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((config, graphType, classDefs, svgId) => {
21891
+ const userCSSstyles = createCssStyles(config, classDefs);
21892
+ return compileCSS(svgId, require_chunk_DU6HZSFF.styles_default(graphType, userCSSstyles, {
21893
+ ...config.themeVariables,
21894
+ theme: config.theme,
21895
+ look: config.look
21896
+ }, svgId));
21897
+ }, "createUserStyles");
21898
+ var cleanUpSvgCode = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((svgCode = "", inSandboxMode, useArrowMarkerUrls) => {
21899
+ let cleanedUpSvg = svgCode;
21900
+ if (!useArrowMarkerUrls && !inSandboxMode) cleanedUpSvg = cleanedUpSvg.replace(/marker-end="url\([\d+./:=?A-Za-z-]*?#/g, "marker-end=\"url(#");
21901
+ cleanedUpSvg = require_chunk_75Z2AOVW.decodeEntities(cleanedUpSvg);
21902
+ cleanedUpSvg = cleanedUpSvg.replace(/<br>/g, "<br/>");
21903
+ return cleanedUpSvg;
21904
+ }, "cleanUpSvgCode");
21905
+ var putIntoIFrame = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((svgCode = "", svgElement) => {
21906
+ return `<iframe style="width:${IFRAME_WIDTH};height:${svgElement?.viewBox?.baseVal?.height ? svgElement.viewBox.baseVal.height + "px" : IFRAME_HEIGHT};${IFRAME_STYLES}" src="data:text/html;charset=UTF-8;base64,${toBase64(`<body style="${IFRAME_BODY_STYLE}">${svgCode}</body>`)}" sandbox="${IFRAME_SANDBOX_OPTS}">
21907
+ ${IFRAME_NOT_SUPPORTED_MSG}
21908
+ </iframe>`;
21909
+ }, "putIntoIFrame");
21910
+ var appendDivSvgG = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((parentRoot, id39, enclosingDivId, divStyle, svgXlink) => {
21911
+ const enclosingDiv = parentRoot.append("div");
21912
+ enclosingDiv.attr("id", enclosingDivId);
21913
+ if (divStyle) enclosingDiv.attr("style", divStyle);
21914
+ const svgNode = enclosingDiv.append("svg").attr("id", id39).attr("width", "100%").attr("xmlns", XMLNS_SVG_STD);
21915
+ if (svgXlink) svgNode.attr("xmlns:xlink", svgXlink);
21916
+ svgNode.append("g");
21917
+ return parentRoot;
21918
+ }, "appendDivSvgG");
21919
+ function sandboxedIframe(parentNode, iFrameId) {
21920
+ return parentNode.append("iframe").attr("id", iFrameId).attr("style", "width: 100%; height: 100%;").attr("sandbox", "");
21921
+ }
21922
+ require_chunk_Y2CYZVJY.__name(sandboxedIframe, "sandboxedIframe");
21923
+ var removeExistingElements = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((doc, id39, divId, iFrameId) => {
21924
+ doc.getElementById(id39)?.remove();
21925
+ doc.getElementById(divId)?.remove();
21926
+ doc.getElementById(iFrameId)?.remove();
21927
+ }, "removeExistingElements");
21928
+ var render$1 = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async function(id39, text, svgContainingElement) {
21929
+ addDiagrams();
21930
+ const processed = processAndSetConfigs(text);
21931
+ text = processed.code;
21932
+ const config = require_chunk_DU6HZSFF.getConfig();
21933
+ require_src.log.debug(config);
21934
+ if (text.length > (config?.maxTextSize ?? MAX_TEXTLENGTH)) text = MAX_TEXTLENGTH_EXCEEDED_MSG;
21935
+ const idSelector = `#${id39}`;
21936
+ const iFrameID = "i" + id39;
21937
+ const iFrameID_selector = "#" + iFrameID;
21938
+ const enclosingDivID = "d" + id39;
21939
+ const enclosingDivID_selector = "#" + enclosingDivID;
21940
+ const removeTempElements = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
21941
+ const node = require_src.select_default(isSandboxed ? iFrameID_selector : enclosingDivID_selector).node();
21942
+ if (node && "remove" in node) node.remove();
21943
+ }, "removeTempElements");
21944
+ let root = require_src.select_default(document.body);
21945
+ const isSandboxed = config.securityLevel === SECURITY_LVL_SANDBOX;
21946
+ const isLooseSecurityLevel = config.securityLevel === SECURITY_LVL_LOOSE;
21947
+ const fontFamily = config.fontFamily;
21948
+ if (svgContainingElement !== void 0) {
21949
+ if (svgContainingElement) svgContainingElement.innerHTML = "";
21950
+ if (isSandboxed) {
21951
+ const iframe = sandboxedIframe(require_src.select_default(svgContainingElement), iFrameID);
21952
+ root = require_src.select_default(iframe.nodes()[0].contentDocument.body);
21953
+ root.node().style.margin = "0";
21954
+ } else root = require_src.select_default(svgContainingElement);
21955
+ appendDivSvgG(root, id39, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
21956
+ } else {
21957
+ removeExistingElements(document, id39, enclosingDivID, iFrameID);
21958
+ if (isSandboxed) {
21959
+ const iframe = sandboxedIframe(require_src.select_default(document.body), iFrameID);
21960
+ root = require_src.select_default(iframe.nodes()[0].contentDocument.body);
21961
+ root.node().style.margin = "0";
21962
+ } else root = require_src.select_default("body");
21963
+ appendDivSvgG(root, id39, enclosingDivID);
21964
+ }
21965
+ let diag;
21966
+ let parseEncounteredException;
21967
+ try {
21968
+ diag = await Diagram.fromText(text, { title: processed.title });
21969
+ } catch (error) {
21970
+ if (config.suppressErrorRendering) {
21971
+ removeTempElements();
21972
+ throw error;
21973
+ }
21974
+ diag = await Diagram.fromText("error");
21975
+ parseEncounteredException = error;
21976
+ }
21977
+ const element = root.select(enclosingDivID_selector).node();
21978
+ const diagramType = diag.type;
21979
+ const svg = element.firstChild;
21980
+ const firstChild = svg.firstChild;
21981
+ const diagramClassDefs = diag.renderer.getClasses?.(text, diag);
21982
+ const rules = createUserStyles(config, diagramType, diagramClassDefs, idSelector);
21983
+ const style1 = document.createElement("style");
21984
+ style1.innerHTML = rules;
21985
+ svg.insertBefore(style1, firstChild);
21986
+ try {
21987
+ await diag.renderer.draw(text, id39, "11.17.2", diag);
21988
+ } catch (e) {
21989
+ if (config.suppressErrorRendering) removeTempElements();
21990
+ else errorRenderer_default.draw(text, id39, "11.17.2");
21991
+ throw e;
21992
+ }
21993
+ const svgNode = root.select(`${enclosingDivID_selector} svg`);
21994
+ const a11yTitle = diag.db.getAccTitle?.();
21995
+ const a11yDescr = diag.db.getAccDescription?.();
21996
+ addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr);
21997
+ const svgCode = (/* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
21998
+ root.select(`[id="${id39}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD);
21999
+ let code = root.select(enclosingDivID_selector).node().innerHTML;
22000
+ require_src.log.debug("config.arrowMarkerAbsolute", config.arrowMarkerAbsolute);
22001
+ code = cleanUpSvgCode(code, isSandboxed, require_chunk_DU6HZSFF.evaluate(config.arrowMarkerAbsolute));
22002
+ if (isSandboxed) {
22003
+ const svgEl = root.select(enclosingDivID_selector + " svg").node();
22004
+ code = putIntoIFrame(code, svgEl);
22005
+ } else if (!isLooseSecurityLevel) code = require_chunk_DU6HZSFF.purify_default.sanitize(code, {
22006
+ ADD_TAGS: DOMPURIFY_TAGS,
22007
+ ADD_ATTR: DOMPURIFY_ATTR,
22008
+ HTML_INTEGRATION_POINTS: { foreignobject: true }
22009
+ });
22010
+ attachFunctions();
22011
+ return code;
22012
+ }, "serializeSvg"))();
22013
+ if (parseEncounteredException) throw parseEncounteredException;
22014
+ removeTempElements();
22015
+ return {
22016
+ diagramType,
22017
+ svg: svgCode,
22018
+ bindFunctions: diag.db.bindFunctions
22019
+ };
22020
+ }, "render");
22021
+ function initialize(userOptions = {}) {
22022
+ const options = require_chunk_DU6HZSFF.assignWithDepth_default({}, userOptions);
22023
+ if (options?.fontFamily && !options.themeVariables?.fontFamily) {
22024
+ if (!options.themeVariables) options.themeVariables = {};
22025
+ options.themeVariables.fontFamily = options.fontFamily;
22026
+ }
22027
+ require_chunk_DU6HZSFF.saveConfigFromInitialize(options);
22028
+ if (options?.theme && options.theme in require_chunk_DU6HZSFF.themes_default) options.themeVariables = require_chunk_DU6HZSFF.themes_default[options.theme].getThemeVariables(options.themeVariables);
22029
+ else if (options) options.themeVariables = require_chunk_DU6HZSFF.themes_default.default.getThemeVariables(options.themeVariables);
22030
+ const config = typeof options === "object" ? require_chunk_DU6HZSFF.setSiteConfig(options) : require_chunk_DU6HZSFF.getSiteConfig();
22031
+ require_src.setLogLevel(config.logLevel);
22032
+ addDiagrams();
22033
+ }
22034
+ require_chunk_Y2CYZVJY.__name(initialize, "initialize");
22035
+ var getDiagramFromText = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((text, metadata = {}) => {
22036
+ const { code } = preprocessDiagram(text);
22037
+ return Diagram.fromText(code, metadata);
22038
+ }, "getDiagramFromText");
22039
+ function addA11yInfo(diagramType, svgNode, a11yTitle, a11yDescr) {
22040
+ setA11yDiagramInfo(svgNode, diagramType);
22041
+ addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr("id"));
22042
+ }
22043
+ require_chunk_Y2CYZVJY.__name(addA11yInfo, "addA11yInfo");
22044
+ var mermaidAPI = Object.freeze({
22045
+ render: render$1,
22046
+ parse,
22047
+ getDiagramFromText,
22048
+ initialize,
22049
+ getConfig: require_chunk_DU6HZSFF.getConfig,
22050
+ /**
22051
+ * @deprecated This function does nothing. It will be overwritten by the next
22052
+ * call to {@link render} or {@link parse}.
22053
+ */
22054
+ setConfig: require_chunk_DU6HZSFF.setConfig,
22055
+ getSiteConfig: require_chunk_DU6HZSFF.getSiteConfig,
22056
+ updateSiteConfig: require_chunk_DU6HZSFF.updateSiteConfig,
22057
+ reset: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
22058
+ require_chunk_DU6HZSFF.reset();
22059
+ }, "reset"),
22060
+ globalReset: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
22061
+ require_chunk_DU6HZSFF.reset(require_chunk_DU6HZSFF.defaultConfig);
22062
+ }, "globalReset"),
22063
+ defaultConfig: require_chunk_DU6HZSFF.defaultConfig
22064
+ });
22065
+ require_src.setLogLevel(require_chunk_DU6HZSFF.getConfig().logLevel);
22066
+ require_chunk_DU6HZSFF.reset(require_chunk_DU6HZSFF.getConfig());
22067
+ var handleError = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((error, errors, parseError) => {
22068
+ require_src.log.warn(error);
22069
+ if (require_chunk_75Z2AOVW.isDetailedError(error)) {
22070
+ if (parseError) parseError(error.str, error.hash);
22071
+ errors.push({
22072
+ ...error,
22073
+ message: error.str,
22074
+ error
22075
+ });
22076
+ } else {
22077
+ if (parseError) parseError(error);
22078
+ if (error instanceof Error) errors.push({
22079
+ str: error.message,
22080
+ message: error.message,
22081
+ hash: error.name,
22082
+ error
22083
+ });
22084
+ }
22085
+ }, "handleError");
22086
+ var run = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async function(options = { querySelector: ".mermaid" }) {
22087
+ try {
22088
+ await runThrowsErrors(options);
22089
+ } catch (e) {
22090
+ if (require_chunk_75Z2AOVW.isDetailedError(e)) require_src.log.error(e.str);
22091
+ if (mermaid.parseError) mermaid.parseError(e);
22092
+ if (!options.suppressErrors) {
22093
+ require_src.log.error("Use the suppressErrors option to suppress these errors");
22094
+ throw e;
22095
+ }
22096
+ }
22097
+ }, "run");
22098
+ var runThrowsErrors = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async function({ postRenderCallback, querySelector, nodes } = { querySelector: ".mermaid" }) {
22099
+ const conf = mermaidAPI.getConfig();
22100
+ require_src.log.debug(`${!postRenderCallback ? "No " : ""}Callback function found`);
22101
+ let nodesToProcess;
22102
+ if (nodes) nodesToProcess = nodes;
22103
+ else if (querySelector) nodesToProcess = document.querySelectorAll(querySelector);
22104
+ else throw new Error("Nodes and querySelector are both undefined");
22105
+ require_src.log.debug(`Found ${nodesToProcess.length} diagrams`);
22106
+ if (conf?.startOnLoad !== void 0) {
22107
+ require_src.log.debug("Start On Load: " + conf?.startOnLoad);
22108
+ mermaidAPI.updateSiteConfig({ startOnLoad: conf?.startOnLoad });
22109
+ }
22110
+ const idGenerator = new require_chunk_75Z2AOVW.utils_default.InitIDGenerator(conf.deterministicIds, conf.deterministicIDSeed);
22111
+ let txt;
22112
+ const errors = [];
22113
+ for (const element of Array.from(nodesToProcess)) {
22114
+ require_src.log.info("Rendering diagram: " + element.id);
22115
+ if (element.getAttribute("data-processed")) continue;
22116
+ element.setAttribute("data-processed", "true");
22117
+ const id39 = `mermaid-${idGenerator.next()}`;
22118
+ txt = element.innerHTML;
22119
+ txt = require_chunk_GMAD6QVW.dedent(require_chunk_75Z2AOVW.utils_default.entityDecode(txt)).trim().replace(/<br\s*\/?>/gi, "<br/>");
22120
+ const init2 = require_chunk_75Z2AOVW.utils_default.detectInit(txt);
22121
+ if (init2) require_src.log.debug("Detected early reinit: ", init2);
22122
+ try {
22123
+ const { svg, bindFunctions } = await render2(id39, txt, element);
22124
+ element.innerHTML = svg;
22125
+ if (postRenderCallback) await postRenderCallback(id39);
22126
+ if (bindFunctions) bindFunctions(element);
22127
+ } catch (error) {
22128
+ handleError(error, errors, mermaid.parseError);
22129
+ }
22130
+ }
22131
+ if (errors.length > 0) throw errors[0];
22132
+ }, "runThrowsErrors");
22133
+ var initialize2 = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(function(config) {
22134
+ mermaidAPI.initialize(config);
22135
+ }, "initialize");
22136
+ var init = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async function(config, nodes, callback) {
22137
+ require_src.log.warn("mermaid.init is deprecated. Please use run instead.");
22138
+ if (config) initialize2(config);
22139
+ const runOptions = {
22140
+ postRenderCallback: callback,
22141
+ querySelector: ".mermaid"
22142
+ };
22143
+ if (typeof nodes === "string") runOptions.querySelector = nodes;
22144
+ else if (nodes) {
22145
+ if (nodes instanceof HTMLElement) runOptions.nodes = [nodes];
22146
+ else runOptions.nodes = nodes;
22147
+ }
22148
+ await run(runOptions);
22149
+ }, "init");
22150
+ var registerExternalDiagrams = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async (diagrams, { lazyLoad = true } = {}) => {
22151
+ addDiagrams();
22152
+ require_chunk_DU6HZSFF.registerLazyLoadedDiagrams(...diagrams);
22153
+ if (lazyLoad === false) await loadRegisteredDiagrams();
22154
+ }, "registerExternalDiagrams");
22155
+ var contentLoaded = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(function() {
22156
+ if (mermaid.startOnLoad) {
22157
+ const { startOnLoad } = mermaidAPI.getConfig();
22158
+ if (startOnLoad) mermaid.run().catch((err) => require_src.log.error("Mermaid failed to initialize", err));
22159
+ }
22160
+ }, "contentLoaded");
22161
+ if (typeof document !== "undefined") window.addEventListener("load", contentLoaded, false);
22162
+ var setParseErrorHandler = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(function(parseErrorHandler) {
22163
+ mermaid.parseError = parseErrorHandler;
22164
+ }, "setParseErrorHandler");
22165
+ var executionQueue = [];
22166
+ var executionQueueRunning = false;
22167
+ var executeQueue = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async () => {
22168
+ if (executionQueueRunning) return;
22169
+ executionQueueRunning = true;
22170
+ while (executionQueue.length > 0) {
22171
+ const f = executionQueue.shift();
22172
+ if (f) try {
22173
+ await f();
22174
+ } catch (e) {
22175
+ require_src.log.error("Error executing queue", e);
22176
+ }
22177
+ }
22178
+ executionQueueRunning = false;
22179
+ }, "executeQueue");
22180
+ var parse2 = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(async (text, parseOptions) => {
22181
+ return new Promise((resolve, reject) => {
22182
+ const performCall = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => new Promise((res, rej) => {
22183
+ mermaidAPI.parse(text, parseOptions).then((r) => {
22184
+ res(r);
22185
+ resolve(r);
22186
+ }, (e) => {
22187
+ require_src.log.error("Error parsing", e);
22188
+ mermaid.parseError?.(e);
22189
+ rej(e);
22190
+ reject(e);
22191
+ });
22192
+ }), "performCall");
22193
+ executionQueue.push(performCall);
22194
+ executeQueue().catch(reject);
22195
+ });
22196
+ }, "parse");
22197
+ var render2 = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name((id39, text, container) => {
22198
+ return new Promise((resolve, reject) => {
22199
+ const performCall = /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => new Promise((res, rej) => {
22200
+ mermaidAPI.render(id39, text, container).then((r) => {
22201
+ res(r);
22202
+ resolve(r);
22203
+ }, (e) => {
22204
+ require_src.log.error("Error parsing", e);
22205
+ mermaid.parseError?.(e);
22206
+ rej(e);
22207
+ reject(e);
22208
+ });
22209
+ }), "performCall");
22210
+ executionQueue.push(performCall);
22211
+ executeQueue().catch(reject);
22212
+ });
22213
+ }, "render");
22214
+ var mermaid = {
22215
+ startOnLoad: true,
22216
+ mermaidAPI,
22217
+ parse: parse2,
22218
+ render: render2,
22219
+ init,
22220
+ run,
22221
+ registerExternalDiagrams,
22222
+ registerLayoutLoaders: require_chunk_TLUHSLCS.registerLayoutLoaders,
22223
+ initialize: initialize2,
22224
+ parseError: void 0,
22225
+ contentLoaded,
22226
+ setParseErrorHandler,
22227
+ detectType: require_chunk_DU6HZSFF.detectType,
22228
+ registerIconPacks: require_chunk_PWAF6VOD.registerIconPacks,
22229
+ getRegisteredDiagramsMetadata: /* @__PURE__ */ require_chunk_Y2CYZVJY.__name(() => {
22230
+ return Object.keys(require_chunk_DU6HZSFF.detectors).map((id39) => ({ id: id39 }));
22231
+ }, "getRegisteredDiagramsMetadata")
22232
+ };
22233
+ var mermaid_default = mermaid;
22234
+ /*! Check if previously processed */
22235
+ /*!
22236
+ * Wait for document loaded before starting the execution
22237
+ */
22238
+ //#endregion
22239
+ //#region src/client/markdown/MermaidBlock.tsx
22240
+ mermaid_default.initialize({
22241
+ startOnLoad: false,
22242
+ securityLevel: "strict",
22243
+ suppressErrorRendering: true,
22244
+ theme: "neutral",
22245
+ flowchart: { htmlLabels: false }
22246
+ });
22247
+ /** Remove executable and remotely loading SVG features before DOM insertion. */
22248
+ function sanitizeMermaidSvg(svg) {
22249
+ const document = new DOMParser().parseFromString(svg, "image/svg+xml");
22250
+ const root = document.documentElement;
22251
+ if (root.nodeName.toLowerCase() !== "svg") throw new Error("Mermaid returned invalid SVG");
22252
+ for (const element of document.querySelectorAll("script,foreignObject,iframe,object,embed,audio,video,image")) element.remove();
22253
+ for (const element of document.querySelectorAll("*")) for (const attribute of [...element.attributes]) {
22254
+ const name = attribute.name.toLowerCase();
22255
+ const value = attribute.value.trim();
22256
+ if (name.startsWith("on")) element.removeAttribute(attribute.name);
22257
+ if ((name === "href" || name === "xlink:href") && !value.startsWith("#")) element.removeAttribute(attribute.name);
22258
+ if (name === "style" && /url\(\s*["']?(?!#)/iu.test(attribute.value)) element.removeAttribute(attribute.name);
22259
+ }
22260
+ return root;
22261
+ }
22262
+ function MermaidCanvas({ diagram, zoom }) {
22263
+ const canvas = (0, react.useRef)(null);
22264
+ (0, react.useEffect)(() => {
22265
+ canvas.current?.replaceChildren(diagram.cloneNode(true));
22266
+ }, [diagram]);
22267
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
22268
+ ref: canvas,
22269
+ className: "dsh-qa-mermaid__canvas",
22270
+ style: { width: `${zoom * 100}%` }
22271
+ });
22272
+ }
22273
+ const MermaidBlock = (0, react.memo)(function MermaidBlock({ code }) {
22274
+ const reactId = (0, react.useId)();
22275
+ const renderId = (0, react.useMemo)(() => `dsh-qa-mermaid-${reactId.replace(/[^a-z0-9_-]/giu, "")}`, [reactId]);
22276
+ const [diagram, setDiagram] = (0, react.useState)();
22277
+ const [failed, setFailed] = (0, react.useState)(false);
22278
+ const [showCode, setShowCode] = (0, react.useState)(false);
22279
+ const [expanded, setExpanded] = (0, react.useState)(false);
22280
+ const [zoom, setZoom] = (0, react.useState)(1);
22281
+ (0, react.useEffect)(() => {
22282
+ let active = true;
22283
+ setDiagram(void 0);
22284
+ setFailed(false);
22285
+ mermaid_default.render(renderId, code).then(({ svg: rendered }) => {
22286
+ if (!active) return;
22287
+ try {
22288
+ setDiagram(sanitizeMermaidSvg(rendered));
22289
+ } catch {
22290
+ setFailed(true);
22291
+ }
22292
+ }, () => {
22293
+ if (active) setFailed(true);
22294
+ });
22295
+ return () => {
22296
+ active = false;
22297
+ };
22298
+ }, [code, renderId]);
22299
+ if (failed) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
22300
+ className: "dsh-qa-mermaid dsh-qa-mermaid--error",
22301
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
22302
+ role: "status",
22303
+ children: "Не удалось отобразить Mermaid-диаграмму. Показан исходный код."
22304
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlock, {
22305
+ code,
22306
+ lang: "mermaid"
22307
+ })]
22308
+ });
22309
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
22310
+ className: `dsh-qa-mermaid${expanded ? " dsh-qa-mermaid--expanded" : ""}`,
22311
+ "aria-label": "Диаграмма Mermaid",
22312
+ children: [
22313
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("header", {
22314
+ className: "dsh-qa-mermaid__toolbar",
22315
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", { children: "Mermaid" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
22316
+ className: "dsh-qa-mermaid__actions",
22317
+ children: [
22318
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
22319
+ type: "button",
22320
+ onClick: () => setZoom((value) => Math.max(.5, value - .25)),
22321
+ "aria-label": "Уменьшить диаграмму",
22322
+ children: "−"
22323
+ }),
22324
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
22325
+ type: "button",
22326
+ onClick: () => setZoom(1),
22327
+ children: "По размеру"
22328
+ }),
22329
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
22330
+ type: "button",
22331
+ onClick: () => setZoom((value) => Math.min(2.5, value + .25)),
22332
+ "aria-label": "Увеличить диаграмму",
22333
+ children: "+"
22334
+ }),
22335
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
22336
+ type: "button",
22337
+ "aria-pressed": showCode,
22338
+ onClick: () => setShowCode((value) => !value),
22339
+ children: showCode ? "Скрыть код" : "Код"
22340
+ }),
22341
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
22342
+ type: "button",
22343
+ "aria-expanded": expanded,
22344
+ onClick: () => setExpanded((value) => !value),
22345
+ children: expanded ? "Закрыть" : "Во весь экран"
22346
+ })
22347
+ ]
22348
+ })]
22349
+ }),
22350
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
22351
+ className: "dsh-qa-mermaid__viewport",
22352
+ children: diagram === void 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
22353
+ className: "dsh-qa-mermaid__loading",
22354
+ role: "status",
22355
+ children: "Строим диаграмму…"
22356
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MermaidCanvas, {
22357
+ diagram,
22358
+ zoom
22359
+ })
22360
+ }),
22361
+ showCode ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlock, {
22362
+ code,
22363
+ lang: "mermaid"
22364
+ }) : null
22365
+ ]
22366
+ });
22367
+ });
22368
+ //#endregion
20307
22369
  //#region ../../node_modules/.pnpm/katex@0.16.47/node_modules/katex/dist/katex.mjs
22370
+ var katex_exports = /* @__PURE__ */ require_src.__exportAll({
22371
+ ParseError: () => ParseError,
22372
+ SETTINGS_SCHEMA: () => SETTINGS_SCHEMA,
22373
+ __defineFunction: () => defineFunction,
22374
+ __defineMacro: () => defineMacro,
22375
+ __defineSymbol: () => defineSymbol,
22376
+ __domTree: () => __domTree,
22377
+ __parse: () => generateParseTree,
22378
+ __renderToDomTree: () => renderToDomTree,
22379
+ __renderToHTMLTree: () => renderToHTMLTree,
22380
+ __setFontMetrics: () => setFontMetrics,
22381
+ default: () => katex,
22382
+ render: () => render,
22383
+ renderToString: () => renderToString,
22384
+ version: () => version
22385
+ });
20308
22386
  /**
20309
22387
  * This is the ParseError class, which is the main error thrown by KaTeX
20310
22388
  * functions when something has gone wrong. This is used to distinguish internal
@@ -46654,11 +48732,32 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
46654
48732
  return renderError(error, expression, settings);
46655
48733
  }
46656
48734
  };
48735
+ /**
48736
+ * Generates and returns the katex build tree, with just HTML (no MathML).
48737
+ * This is used for advanced use cases (like rendering to custom output).
48738
+ */
48739
+ var renderToHTMLTree = function renderToHTMLTree(expression, options) {
48740
+ var settings = new Settings(options);
48741
+ try {
48742
+ return buildHTMLTree(parseTree(expression, settings), expression, settings);
48743
+ } catch (error) {
48744
+ return renderError(error, expression, settings);
48745
+ }
48746
+ };
48747
+ var version = "0.16.47";
48748
+ var __domTree = {
48749
+ Span,
48750
+ Anchor,
48751
+ SymbolNode,
48752
+ SvgNode,
48753
+ PathNode,
48754
+ LineNode
48755
+ };
46657
48756
  var katex = {
46658
48757
  /**
46659
48758
  * Current KaTeX version
46660
48759
  */
46661
- version: "0.16.47",
48760
+ version,
46662
48761
  /**
46663
48762
  * Renders the given LaTeX into an HTML+MathML combination, and adds
46664
48763
  * it as a child to the specified DOM node.
@@ -46703,14 +48802,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
46703
48802
  * The internal tree representation is unstable and is very likely
46704
48803
  * to change. Use at your own risk.
46705
48804
  */
46706
- __renderToHTMLTree: function renderToHTMLTree(expression, options) {
46707
- var settings = new Settings(options);
46708
- try {
46709
- return buildHTMLTree(parseTree(expression, settings), expression, settings);
46710
- } catch (error) {
46711
- return renderError(error, expression, settings);
46712
- }
46713
- },
48805
+ __renderToHTMLTree: renderToHTMLTree,
46714
48806
  /**
46715
48807
  * extends internal font metrics object with a new object
46716
48808
  * each key in the new object represents a font name
@@ -46737,14 +48829,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
46737
48829
  * The internal tree representation is unstable and is very likely
46738
48830
  * to change. Use at your own risk.
46739
48831
  */
46740
- __domTree: {
46741
- Span,
46742
- Anchor,
46743
- SymbolNode,
46744
- SvgNode,
46745
- PathNode,
46746
- LineNode
46747
- }
48832
+ __domTree
46748
48833
  };
46749
48834
  //#endregion
46750
48835
  //#region src/client/markdown/math.tsx
@@ -47071,6 +49156,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
47071
49156
  className: "dsh-qa-md-math",
47072
49157
  children: renderTexToReact(block.text, true)
47073
49158
  }, key);
49159
+ if (block.lang?.toLowerCase() === "mermaid") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MermaidBlock, { code: block.text }, key);
47074
49160
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CodeBlock, {
47075
49161
  code: block.text,
47076
49162
  ...block.lang === void 0 ? {} : { lang: block.lang }
@@ -50087,8 +52173,25 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
50087
52173
  }
50088
52174
  //#endregion
50089
52175
  //#region src/client/components/QaChangelog.tsx
50090
- const QA_VERSION = "0.12.0";
52176
+ const QA_VERSION = "0.13.0";
50091
52177
  const QA_CHANGELOG = [
52178
+ {
52179
+ version: "0.13.0",
52180
+ date: "2026-09-24",
52181
+ sections: [{
52182
+ title: "Новое",
52183
+ items: ["Диаграммы в блоках Mermaid теперь открываются прямо в ответе: их можно увеличить, подогнать по ширине, развернуть на весь экран и переключить на исходный код. Если синтаксис диаграммы неверен, чат не ломается и показывает код с понятным предупреждением.", "Стенд добирает оценки, которые нажимали до исправления. Пока отзыв не умел передаваться на стенд, 👍 и 👎 оставались только в браузере того, кто их нажал: в списке оценок, в очереди на разбор и в метриках качества не было ни одной. Теперь при первом входе в свою учётную запись браузер один раз передаёт стенду те из своих оценок, которые относятся к чатам этой учётной записи и которые можно сопоставить с ответом в журнале. Уже записанный отзыв стенд не перезаписывает: оценка с причиной и комментарием остаётся такой, какой её сдали в момент нажатия, — а разовость сбора помечается у себя, чтобы при следующем входе то же самое не предлагать. Учётная запись на другом браузере добирает свои оценки сама. Оценки самых первых версий, где список отзывов был один на весь стенд и не был привязан к чату, остаются в браузере: по ним нельзя понять, к какому разговору их нажимали, а угадывать стенд не стал."]
52184
+ }, {
52185
+ title: "Исправления",
52186
+ items: [
52187
+ "Диалог смены роли получил оформление стенда: кнопки, состояния наведения и фокуса больше не выглядят как элементы браузера без стилей.",
52188
+ "Поиск по документации принимает безопасные регулярные выражения: варианты слова можно перечислить через |, например бригадир|бригадира|бригада. Путь может быть относительным внутри docs или абсолютным внутри опубликованного дерева; версия и модуль продолжают ограничивать область поиска.",
52189
+ "Загрузки через web_fetch_file и web_fetch_image теперь сохраняются среди источников ответа, даже когда инструмент не передал отдельные метаданные представления.",
52190
+ "Страницы консоли администратора — «Обзор», «Разговоры», «Аналитика» и «Очередь разбора» — открываются сразу, а не минутами, и больше не задерживают всё остальное. На стенде с настоящей историей эти страницы ждали больше четырёх с половиной минут, и пока одна из них грузилась, остальные вызовы админки стояли в очереди: браузер держит с одного адреса не больше нескольких соединений. Причина была в том, сколько журналов разговоров страница перечитывает. Список разговоров открывал журнал каждого разговора стенда, чтобы отфильтровать список, который ни о чём не спрашивали, — название разговора нужно только когда кто-то ищет, а на странице двадцать пять строк. Агрегатные страницы перечитывали две сотни свежих журналов при каждой загрузке, хотя чтение одного журнала на стенде перед собой перечисляет все сохранённые разговоры развёртывания и проигрывает журнал целиком; при этом кэш журналов был меньше окна, которое этими страницами сканируется, поэтому одна страница выбрасывала то, что только что прочитала другая. Теперь журнал читается только там, где фильтр действительно о нём спрашивает: список без поиска стоит ровно его показанные строки. Разговор, который стенд уже не держит открытым, не может получить новых сообщений, поэтому его проекция остаётся в кэше, а не устаревает каждые тридцать секунд — для разговора, который пишется прямо сейчас, устаревание сохранено. Счётчики сообщений и сбои инструментов собираются за один проход по окну, а страница, которой нужно то же окно, присоединяется к уже идущему проходу вместо второго скана по тем же журналам. И все четыре страницы теперь слышат отмену: ушли со страницы, которая не отвечает, — чтение журналов останавливается на следующем разговоре, а не дочитывает их все ради ответа, который уже никто не ждёт.",
52191
+ "Источники ответа снова собираются в настоящем чате. Правая рейка, доказательства чата и превью файлов опираются на список источников разговора: стенд ведёт его за спиной помощника и записывает туда каждый прочитанный файл, открытую страницу и вызванный инструмент. На развёрнутом стенде этот список оставался пустым — стенд сопоставлял ответ инструмента с его вызовом по одному имени поля, а харнесс подписывает это сопоставление другим; инструменты отрабатывали, ответ приходил, а источников в нём не было. Теперь сопоставление читается правильно: в ответе видны источники, по клику открывается превью только что прочитанного файла, и отказ «источник больше не входит в доказательства этого чата» перестаёт звучать на файл, который только что был в ответе."
52192
+ ]
52193
+ }]
52194
+ },
50092
52195
  {
50093
52196
  version: "0.12.0",
50094
52197
  date: "2026-09-22",
@@ -50513,7 +52616,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
50513
52616
  className: "dsh-qa-changelog__date",
50514
52617
  children: entry.date
50515
52618
  }),
50516
- entry.version === "0.12.0" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52619
+ entry.version === "0.13.0" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
50517
52620
  className: "dsh-qa-changelog__current",
50518
52621
  children: "текущая"
50519
52622
  }) : null
@@ -55272,35 +57375,69 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55272
57375
  return message;
55273
57376
  }
55274
57377
  /**
57378
+ * One cancellable request slot. A page that starts a second request has stopped
57379
+ * waiting for the first, and a page that is gone waits for nothing at all —
57380
+ * either way the abandoned call should end instead of holding its connection and
57381
+ * the deployment's log reader open. The aggregate pages take minutes to answer on
57382
+ * a real store, so an abandoned page used to keep working long after the reviewer
57383
+ * moved on, and the calls it queued behind it paid for that.
57384
+ */
57385
+ function useRequestSlot() {
57386
+ const current = (0, react.useRef)(void 0);
57387
+ const start = (0, react.useCallback)(() => {
57388
+ current.current?.abort();
57389
+ const controller = new AbortController();
57390
+ current.current = controller;
57391
+ return controller;
57392
+ }, []);
57393
+ const cancel = (0, react.useCallback)(() => {
57394
+ current.current?.abort();
57395
+ current.current = void 0;
57396
+ }, []);
57397
+ (0, react.useEffect)(() => cancel, [cancel]);
57398
+ return (0, react.useMemo)(() => ({
57399
+ start,
57400
+ cancel
57401
+ }), [start, cancel]);
57402
+ }
57403
+ /**
55275
57404
  * Load one administrative resource, keeping the previous value visible while
55276
57405
  * it refreshes. Reviewers page through lists while new conversations arrive;
55277
57406
  * blanking the table on every reload would make that unusable.
57407
+ *
57408
+ * `load` receives the cancellation of the call it is making: pass it on to the
57409
+ * Remote, and a page the reviewer left stops being read on the server.
55278
57410
  */
55279
57411
  function useAdminResource(load, deps) {
55280
57412
  const [data, setData] = (0, react.useState)();
55281
57413
  const [error, setError] = (0, react.useState)();
55282
57414
  const [loading, setLoading] = (0, react.useState)(true);
57415
+ const request = useRequestSlot();
55283
57416
  const apply = (0, react.useCallback)((value) => {
55284
57417
  setData(value);
55285
57418
  setError(void 0);
55286
57419
  }, []);
55287
57420
  const reload = (0, react.useCallback)(async () => {
57421
+ const controller = request.start();
55288
57422
  setLoading(true);
55289
57423
  try {
55290
- const result = await load();
57424
+ const result = await load(controller.signal);
57425
+ if (controller.signal.aborted) return;
55291
57426
  if (result.ok) {
55292
57427
  setData(result.value);
55293
57428
  setError(void 0);
55294
57429
  } else setError(errorMessage$1(result.error));
55295
57430
  } catch (cause) {
57431
+ if (controller.signal.aborted) return;
55296
57432
  setError(errorMessage$1(cause));
55297
57433
  } finally {
55298
- setLoading(false);
57434
+ if (!controller.signal.aborted) setLoading(false);
55299
57435
  }
55300
57436
  }, deps);
55301
57437
  (0, react.useEffect)(() => {
55302
57438
  reload();
55303
- }, [reload]);
57439
+ return request.cancel;
57440
+ }, [reload, request]);
55304
57441
  return {
55305
57442
  data,
55306
57443
  error,
@@ -55401,7 +57538,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55401
57538
  });
55402
57539
  }
55403
57540
  function AdminOverview(props) {
55404
- const { data, error, reload } = useAdminResource(() => props.api.overview(props.token), [props.api, props.token]);
57541
+ const { data, error, reload } = useAdminResource((signal) => props.api.overview(props.token, signal), [props.api, props.token]);
55405
57542
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
55406
57543
  className: "dsh-qa-admin__page",
55407
57544
  "aria-label": "Обзор",
@@ -55555,14 +57692,16 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55555
57692
  const [rows, setRows] = (0, react.useState)([]);
55556
57693
  const [cursor, setCursor] = (0, react.useState)(null);
55557
57694
  const [total, setTotal] = (0, react.useState)(0);
57695
+ const request = useRequestSlot();
55558
57696
  const load = async (next, append) => {
55559
- const result = await props.api.reviewQueue(props.token, next, PAGE_SIZE$3);
55560
- if (!result.ok) return;
57697
+ const controller = request.start();
57698
+ const result = await props.api.reviewQueue(props.token, next, PAGE_SIZE$3, controller.signal);
57699
+ if (controller.signal.aborted || !result.ok) return;
55561
57700
  setTotal(result.value.total);
55562
57701
  setCursor(result.value.nextCursor);
55563
57702
  setRows((current) => append ? [...current, ...result.value.items] : result.value.items);
55564
57703
  };
55565
- const resource = useAdminResource(() => props.api.reviewQueue(props.token, null, PAGE_SIZE$3), [props.api, props.token]);
57704
+ const resource = useAdminResource((signal) => props.api.reviewQueue(props.token, null, PAGE_SIZE$3, signal), [props.api, props.token]);
55566
57705
  const items = resource.data?.items ?? rows;
55567
57706
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
55568
57707
  className: "dsh-qa-admin__page",
@@ -55824,7 +57963,9 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55824
57963
  const [total, setTotal] = (0, react.useState)(0);
55825
57964
  const [error, setError] = (0, react.useState)();
55826
57965
  const [loading, setLoading] = (0, react.useState)(true);
57966
+ const request = useRequestSlot();
55827
57967
  const load = (0, react.useCallback)(async (next, append) => {
57968
+ const controller = request.start();
55828
57969
  setLoading(true);
55829
57970
  const query = {
55830
57971
  userId: props.userId ?? null,
@@ -55834,7 +57975,8 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55834
57975
  from: from === "" ? null : new Date(from).toISOString(),
55835
57976
  to: to === "" ? null : (/* @__PURE__ */ new Date(`${to}T23:59:59.999Z`)).toISOString()
55836
57977
  };
55837
- const result = await props.api.conversations(props.token, query, next, PAGE_SIZE$2);
57978
+ const result = await props.api.conversations(props.token, query, next, PAGE_SIZE$2, controller.signal);
57979
+ if (controller.signal.aborted) return;
55838
57980
  setLoading(false);
55839
57981
  if (!result.ok) {
55840
57982
  setError(adminErrorMessage(result.error));
@@ -55845,6 +57987,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
55845
57987
  setCursor(result.value.nextCursor);
55846
57988
  setRows((current) => append ? [...current, ...result.value.items] : result.value.items);
55847
57989
  }, [
57990
+ request,
55848
57991
  props.api,
55849
57992
  props.token,
55850
57993
  props.userId,
@@ -56405,7 +58548,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
56405
58548
  }
56406
58549
  /** Issue distribution, per-subrole satisfaction and the trend over time. */
56407
58550
  function AdminQuality(props) {
56408
- const resource = useAdminResource(() => props.api.metrics(props.token), [props.api, props.token]);
58551
+ const resource = useAdminResource((signal) => props.api.metrics(props.token, signal), [props.api, props.token]);
56409
58552
  const metrics = resource.data;
56410
58553
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
56411
58554
  className: "dsh-qa-admin__page",
@@ -59729,6 +61872,12 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
59729
61872
  .dsh-qa-audit-dialog__body .dsh-audit-json{height:100%;min-height:320px}
59730
61873
  .dsh-qa-modal__body{flex:1;min-height:0;overflow-y:auto;overscroll-behavior:contain;padding:6px 18px 18px}
59731
61874
  .dsh-qa-modal__footer{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex:none;padding:12px 18px;border-top:1px solid var(--dsw-alias-border-l2)}
61875
+ .dsh-qa-modal__footer button{appearance:none;padding:8px 14px;border:1px solid var(--dsw-alias-border-l2);border-radius:9px;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-secondary);font:inherit;font-size:13px;font-weight:500;line-height:19px;cursor:pointer;transition:border-color .12s,background .12s,color .12s}
61876
+ .dsh-qa-modal__footer button:hover:not(:disabled){border-color:var(--dsw-alias-label-dimmed);background:var(--dsw-alias-interactive-bg-hover);color:var(--dsw-alias-label-primary)}
61877
+ .dsh-qa-modal__footer button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
61878
+ .dsh-qa-modal__footer button:disabled{opacity:.5;cursor:default}
61879
+ .dsh-qa-modal__footer .dsh-qa-modal__primary{border-color:transparent;background:var(--dsh-qa-accent);color:var(--dsh-qa-accent-contrast)}
61880
+ .dsh-qa-modal__footer .dsh-qa-modal__primary:hover:not(:disabled){border-color:transparent;background:var(--dsh-qa-accent-hover);color:var(--dsh-qa-accent-contrast)}
59732
61881
  .dsh-qa-changelog__entry{padding-top:10px}
59733
61882
  .dsh-qa-changelog__version{display:flex;align-items:baseline;gap:8px;margin:0 0 2px;color:var(--dsw-alias-label-primary);font-size:13px;font-weight:600;line-height:20px}
59734
61883
  .dsh-qa-changelog__date{color:var(--dsw-alias-label-tertiary);font-size:12px;font-weight:400;line-height:16px}
@@ -59839,6 +61988,7 @@ body[data-dsh-qa-surface="active"] div:has(>[data-shell-overlay])>:not([data-she
59839
61988
  .dsh-qa-toolpicker__description{display:-webkit-box;overflow:hidden;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:18px;min-width:0;-webkit-box-orient:vertical;-webkit-line-clamp:2}
59840
61989
  .dsh-qa-toolpicker__selected{margin-right:auto;color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:17px}
59841
61990
  @media (max-width:720px){.dsh-qa-modal__panel--settings{height:min(640px,calc(100vh - 48px))}.dsh-qa-settings{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.dsh-qa-settings__nav{flex-direction:row;gap:4px;padding:8px 10px;border-right:0;border-bottom:1px solid var(--dsw-alias-border-l2);overflow-x:auto;overflow-y:hidden}.dsh-qa-settings__tab{white-space:nowrap}.dsh-qa-settings__content{padding:12px 14px 0}.dsh-qa-settings__page{padding-bottom:18px}.dsh-qa-settings__actions{margin:auto -14px -18px;padding:10px 14px}}
61991
+ @media (max-width:520px){.dsh-qa-modal{padding:12px}.dsh-qa-modal__footer{align-items:stretch;flex-direction:column-reverse}.dsh-qa-modal__footer button{width:100%}}
59842
61992
  .dsh-qa-surface *{box-sizing:border-box}
59843
61993
  .dsh-qa-surface ::selection{background:var(--dsh-qa-text-select)}
59844
61994
  .dsh-qa-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@@ -60215,6 +62365,22 @@ a.dsh-qa-srcref:hover,button.dsh-qa-srcref:hover{border-color:var(--dsw-alias-la
60215
62365
  .dsh-qa-md-code__copy:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:2px}
60216
62366
  .dsh-qa-md-code pre{overflow-x:auto;margin:0;padding:16px;border:0;border-radius:0 0 12px 12px;background:transparent;font-family:var(--ds-font-family-code,ui-monospace,SFMono-Regular,Consolas,monospace);font-size:var(--dsw-font-markdown-code-block-font-size,11px);line-height:var(--dsw-font-markdown-code-block-line-height,19px);white-space:pre-wrap;word-break:break-word}
60217
62367
  .dsh-qa-md-code pre code{display:block;padding:0;border:0;background:transparent;font:inherit}
62368
+ .dsh-qa-mermaid{position:relative;overflow:hidden;margin:16px 0;border:1px solid var(--dsw-alias-border-l2);border-radius:12px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-primary)}
62369
+ .dsh-qa-mermaid__toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 14px;border-bottom:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);font-size:12px;line-height:20px}
62370
+ .dsh-qa-mermaid__actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap;justify-content:flex-end}
62371
+ .dsh-qa-mermaid__actions button{appearance:none;padding:3px 8px;border:1px solid var(--dsw-alias-border-l2);border-radius:7px;background:var(--dsw-alias-bg-layer-2);color:var(--dsw-alias-label-secondary);font:inherit;cursor:pointer}
62372
+ .dsh-qa-mermaid__actions button:hover{border-color:var(--dsw-alias-label-dimmed);color:var(--dsw-alias-label-primary)}
62373
+ .dsh-qa-mermaid__actions button:focus-visible{outline:2px solid var(--dsh-qa-accent);outline-offset:1px}
62374
+ .dsh-qa-mermaid__viewport{min-height:180px;max-height:68vh;overflow:auto;overscroll-behavior:contain;padding:20px;background:var(--dsw-alias-bg-layer-1)}
62375
+ .dsh-qa-mermaid__canvas{min-width:320px;margin:auto;transition:width .16s ease}
62376
+ .dsh-qa-mermaid__canvas svg{display:block;width:100%;max-width:none!important;height:auto;margin:auto}
62377
+ .dsh-qa-mermaid__loading{display:grid;place-items:center;min-height:140px;color:var(--dsw-alias-label-tertiary)}
62378
+ .dsh-qa-mermaid>.dsh-qa-md-code{margin:0;border-radius:0;border-top:1px solid var(--dsw-alias-border-l2)}
62379
+ .dsh-qa-mermaid--error{padding:12px}
62380
+ .dsh-qa-mermaid--error>p{margin:0 0 10px;color:var(--dsh-qa-error)}
62381
+ .dsh-qa-mermaid--error>.dsh-qa-md-code{margin:0;border-radius:10px;border-top:0}
62382
+ .dsh-qa-mermaid--expanded{position:fixed;inset:16px;z-index:1000;display:flex;flex-direction:column;margin:0;box-shadow:var(--dsw-shadow-lv3)}
62383
+ .dsh-qa-mermaid--expanded .dsh-qa-mermaid__viewport{flex:1;max-height:none}
60218
62384
  .dsh-qa-md-tok[data-tok="comment"]{color:var(--shiki-token-comment)}
60219
62385
  .dsh-qa-md-tok[data-tok="string"]{color:var(--shiki-token-string)}
60220
62386
  .dsh-qa-md-tok[data-tok="keyword"]{color:var(--shiki-token-keyword)}
@@ -63354,21 +65520,21 @@ textarea.qa-card-control{height:auto;padding:8px 12px;line-height:1.5;resize:ver
63354
65520
  skillActivations: (token, sessionId) => policyRemote.accessSkillActivations(token, sessionId)
63355
65521
  };
63356
65522
  const adminApi = {
63357
- overview: (token) => policyRemote.adminOverview(token),
65523
+ overview: (token, signal) => policyRemote.adminOverview(token, signal),
63358
65524
  users: (token, query, cursor, limit) => policyRemote.adminUsers(token, query, cursor, limit),
63359
65525
  user: (token, userId) => policyRemote.adminUser(token, userId),
63360
65526
  updateUser: (token, userId, update) => policyRemote.adminUpdateUser(token, userId, update),
63361
65527
  passwordResetRequests: (token) => policyRemote.adminPasswordResetRequests(token),
63362
65528
  resetPassword: (token, userId, password) => policyRemote.adminResetPassword(token, userId, password),
63363
- conversations: (token, query, cursor, limit) => policyRemote.adminConversations(token, query, cursor, limit),
65529
+ conversations: (token, query, cursor, limit, signal) => policyRemote.adminConversations(token, query, cursor, limit, signal),
63364
65530
  conversation: (token, conversationId) => policyRemote.adminConversation(token, conversationId),
63365
65531
  deleteConversation: (token, conversationId) => policyRemote.adminDeleteConversation(token, conversationId),
63366
65532
  feedback: (token, query, cursor, limit) => policyRemote.adminFeedback(token, query, cursor, limit),
63367
65533
  rateMessage: (token, conversationId, messageId, input) => policyRemote.adminRateMessage(token, conversationId, messageId, input),
63368
- reviewQueue: (token, cursor, limit) => policyRemote.adminReviewQueue(token, cursor, limit),
65534
+ reviewQueue: (token, cursor, limit, signal) => policyRemote.adminReviewQueue(token, cursor, limit, signal),
63369
65535
  queueConversation: (token, conversationId, messageId) => policyRemote.adminQueueConversation(token, conversationId, messageId),
63370
65536
  saveReview: (token, input) => policyRemote.adminSaveReview(token, input),
63371
- metrics: (token) => policyRemote.adminMetrics(token),
65537
+ metrics: (token, signal) => policyRemote.adminMetrics(token, signal),
63372
65538
  audit: (token, query, cursor, limit) => policyRemote.adminAudit(token, query, cursor, limit),
63373
65539
  skills: (token, scope) => policyRemote.adminSkills(token, scope),
63374
65540
  skill: (token, scope, name) => policyRemote.adminSkill(token, scope, name),
@@ -63432,6 +65598,16 @@ textarea.qa-card-control{height:auto;padding:8px 12px;line-height:1.5;resize:ver
63432
65598
  forgetChat: (sessionId) => {
63433
65599
  const snapshot = config.getSnapshot().config;
63434
65600
  new QaChatIndex(window.localStorage, qaStorageNamespace(snapshot)).forgetChat(sessionId);
65601
+ },
65602
+ harvestRatings: async ({ token, accountId, ownedIds }) => {
65603
+ const snapshot = config.getSnapshot().config;
65604
+ await harvestLocalRatings({
65605
+ storage: window.localStorage,
65606
+ namespace: qaStorageNamespace(snapshot),
65607
+ accountId,
65608
+ ownedIds,
65609
+ send: (batch) => policyRemote.adminHarvestFeedback(token, batch)
65610
+ });
63435
65611
  }
63436
65612
  });
63437
65613
  userSession.attach(accounts);
@@ -63580,6 +65756,12 @@ textarea.qa-card-control{height:auto;padding:8px 12px;line-height:1.5;resize:ver
63580
65756
  exports.QaSessionController = QaSessionController;
63581
65757
  exports.apply = apply;
63582
65758
  exports.inject = inject;
65759
+ Object.defineProperty(exports, "katex_exports", {
65760
+ enumerable: true,
65761
+ get: function() {
65762
+ return katex_exports;
65763
+ }
65764
+ });
63583
65765
  exports.matchesQaRoute = matchesQaRoute;
63584
65766
  exports.projectTranscript = projectTranscript;
63585
65767
  return module.exports;