@loopstack/loopstack-studio 0.25.0 → 0.25.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/components/ai-elements/message.js +2 -2
  2. package/dist/components/ai-elements/reasoning.js +9 -9
  3. package/dist/loopstack-studio.css +1 -1
  4. package/dist/node_modules/@chevrotain/gast/lib/src/helpers.js +2 -5
  5. package/dist/node_modules/@chevrotain/gast/lib/src/model.js +69 -72
  6. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{architecture-7HQA4BMR.js → architecture-YZFGNWBL.js} +2 -2
  7. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-TQ3KTPDO.js → chunk-2KRD3SAO.js} +1 -1
  8. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-4F5CHEZ2.js → chunk-67CJDMHE.js} +1 -1
  9. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-UMXZTB3W.js → chunk-7N4EOEYR.js} +5 -2
  10. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-PL6DKKU2.js → chunk-AA7GKIK3.js} +1 -1
  11. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-CIAEETIT.js +23 -0
  12. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-SJTYNZTY.js → chunk-FOC6F5B3.js} +1 -1
  13. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-K5T4RW27.js +1197 -0
  14. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-FRFDVMJY.js → chunk-KGLVRYIC.js} +1 -1
  15. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{chunk-B2363JML.js → chunk-LIHQZDEY.js} +1 -1
  16. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-ORNJ4GCN.js +29 -0
  17. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/{gitGraph-G5XIXVHT.js → gitGraph-7Q5UKJZL.js} +2 -2
  18. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/info-OMHHGYJF.js +3 -0
  19. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/packet-4T2RLAQJ.js +3 -0
  20. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/pie-ZZUOXDRM.js +3 -0
  21. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/radar-PYXPWWZC.js +3 -0
  22. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/treeView-SZITEDCU.js +3 -0
  23. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/treemap-W4RFUUIX.js +3 -0
  24. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/wardley-RL74JXVD.js +3 -0
  25. package/dist/node_modules/@mermaid-js/parser/dist/mermaid-parser.core.js +27 -17
  26. package/dist/node_modules/@upsetjs/venn.js/build/venn.esm.js +903 -0
  27. package/dist/node_modules/@xyflow/react/dist/esm/index.js +76 -75
  28. package/dist/node_modules/@xyflow/system/dist/esm/index.js +30 -28
  29. package/dist/node_modules/chevrotain/lib/src/parse/cst/cst_visitor.js +31 -40
  30. package/dist/node_modules/chevrotain/lib/src/parse/errors_public.js +23 -26
  31. package/dist/node_modules/chevrotain/lib/src/parse/exceptions_public.js +12 -13
  32. package/dist/node_modules/chevrotain/lib/src/parse/grammar/checks.js +181 -205
  33. package/dist/node_modules/chevrotain/lib/src/parse/grammar/first.js +11 -13
  34. package/dist/node_modules/chevrotain/lib/src/parse/grammar/follow.js +12 -13
  35. package/dist/node_modules/chevrotain/lib/src/parse/grammar/gast/gast_resolver_public.js +8 -9
  36. package/dist/node_modules/chevrotain/lib/src/parse/grammar/interpreter.js +176 -183
  37. package/dist/node_modules/chevrotain/lib/src/parse/grammar/llk_lookahead.js +17 -19
  38. package/dist/node_modules/chevrotain/lib/src/parse/grammar/lookahead.js +153 -160
  39. package/dist/node_modules/chevrotain/lib/src/parse/grammar/resolver.js +10 -12
  40. package/dist/node_modules/chevrotain/lib/src/parse/grammar/rest.js +36 -38
  41. package/dist/node_modules/chevrotain/lib/src/parse/parser/parser.js +37 -45
  42. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/error_handler.js +12 -14
  43. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/gast_recorder.js +80 -86
  44. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/lexer_adapter.js +6 -2
  45. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/looksahead.js +39 -41
  46. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/perf_tracer.js +7 -8
  47. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_api.js +69 -70
  48. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/recognizer_engine.js +215 -205
  49. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/recoverable.js +76 -76
  50. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/tree_builder.js +29 -39
  51. package/dist/node_modules/chevrotain/lib/src/scan/lexer.js +252 -274
  52. package/dist/node_modules/chevrotain/lib/src/scan/lexer_public.js +93 -106
  53. package/dist/node_modules/chevrotain/lib/src/scan/reg_exp.js +61 -61
  54. package/dist/node_modules/chevrotain/lib/src/scan/tokens.js +31 -41
  55. package/dist/node_modules/chevrotain/lib/src/scan/tokens_public.js +15 -18
  56. package/dist/node_modules/chevrotain-allstar/lib/all-star-lookahead.js +226 -226
  57. package/dist/node_modules/chevrotain-allstar/lib/atn.js +17 -17
  58. package/dist/node_modules/cytoscape/dist/cytoscape.esm.js +17 -14
  59. package/dist/node_modules/dagre-d3-es/src/dagre/greedy-fas.js +19 -19
  60. package/dist/node_modules/dagre-d3-es/src/dagre/layout.js +48 -48
  61. package/dist/node_modules/dagre-d3-es/src/dagre/nesting-graph.js +9 -9
  62. package/dist/node_modules/dagre-d3-es/src/dagre/order/cross-count.js +3 -3
  63. package/dist/node_modules/dagre-d3-es/src/dagre/order/index.js +11 -11
  64. package/dist/node_modules/dagre-d3-es/src/dagre/order/init-order.js +4 -4
  65. package/dist/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js +4 -4
  66. package/dist/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js +8 -8
  67. package/dist/node_modules/dagre-d3-es/src/dagre/order/sort.js +5 -5
  68. package/dist/node_modules/dagre-d3-es/src/dagre/position/bk.js +61 -61
  69. package/dist/node_modules/dagre-d3-es/src/dagre/position/index.js +1 -1
  70. package/dist/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js +25 -25
  71. package/dist/node_modules/dagre-d3-es/src/dagre/rank/util.js +8 -8
  72. package/dist/node_modules/dagre-d3-es/src/dagre/util.js +48 -48
  73. package/dist/node_modules/dagre-d3-es/src/graphlib/graph.js +109 -109
  74. package/dist/node_modules/dagre-d3-es/src/graphlib/json.js +17 -17
  75. package/dist/node_modules/dompurify/dist/purify.es.js +67 -67
  76. package/dist/node_modules/katex/dist/katex.js +1256 -1209
  77. package/dist/node_modules/khroma/dist/methods/transparentize.js +3 -0
  78. package/dist/node_modules/lodash-es/_baseClone.js +2 -2
  79. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +6 -6
  80. package/dist/node_modules/lodash-es/_baseToString.js +1 -1
  81. package/dist/node_modules/lodash-es/_baseUniq.js +1 -1
  82. package/dist/node_modules/lodash-es/_createSet.js +1 -1
  83. package/dist/node_modules/lodash-es/_getAllKeys.js +2 -2
  84. package/dist/node_modules/lodash-es/_getAllKeysIn.js +1 -1
  85. package/dist/node_modules/lodash-es/findIndex.js +2 -2
  86. package/dist/node_modules/lodash-es/flatMap.js +1 -1
  87. package/dist/node_modules/lodash-es/forEach.js +1 -1
  88. package/dist/node_modules/lodash-es/max.js +1 -1
  89. package/dist/node_modules/lodash-es/min.js +1 -1
  90. package/dist/node_modules/lodash-es/minBy.js +1 -1
  91. package/dist/node_modules/lodash-es/reduce.js +1 -1
  92. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/architectureDiagram-Q4EWVU46.js +691 -0
  93. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{blockDiagram-VD42YOAC.js → blockDiagram-DXYQGD6D.js} +183 -157
  94. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{c4Diagram-YG6GDRKO.js → c4Diagram-AHTNJAMY.js} +65 -63
  95. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-336JU56O.js +47 -0
  96. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-EXTU4WIE.js → chunk-426QAEUC.js} +1 -1
  97. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-B4BG7PRW.js → chunk-4TB4RGXK.js} +533 -393
  98. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-5FUZZQ4R.js +3638 -0
  99. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-S3R3BYOJ.js → chunk-5PVQY5BW.js} +1 -1
  100. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-HN2XXSSU.js → chunk-BSJP7CBP.js} +20 -14
  101. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-QN33PNHL.js → chunk-EDXVE4YY.js} +1 -1
  102. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ENJZ2VHE.js +568 -0
  103. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ICPOFSXX.js +2320 -0
  104. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-DI55MBZ5.js → chunk-OYMX7WX6.js} +35 -21
  105. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-U2HBQHQK.js +272 -0
  106. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-ATLVNIR6.js → chunk-X2U36JSP.js} +1 -1
  107. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{chunk-MI3HLSF2.js → chunk-XPW4576I.js} +11 -7
  108. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-YZCP3GAM.js +60 -0
  109. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ZZ45TVLE.js +30 -0
  110. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-2ON5EDUG.js → classDiagram-6PBFFD2Q.js} +12 -11
  111. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{classDiagram-v2-WZHVMYZB.js → classDiagram-v2-HSJHXN6E.js} +12 -11
  112. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{dagre-6UL2VRFP.js → dagre-KV5264BT.js} +8 -8
  113. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/diagram-5BDNPKRD.js +99 -0
  114. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-PSM6KHXK.js → diagram-G4DWMVQ6.js} +20 -23
  115. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/diagram-MMDJMWI5.js +211 -0
  116. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{diagram-S2PKOQOG.js → diagram-TYMM5635.js} +4 -4
  117. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{erDiagram-Q2GNP2WA.js → erDiagram-SMLLAGMA.js} +486 -386
  118. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{flowDiagram-NV44I4VS.js → flowDiagram-DWJPFMVM.js} +915 -898
  119. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{ganttDiagram-JELNMOA3.js → ganttDiagram-T4ZO3ILL.js} +59 -29
  120. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-UUTBAWPF.js +728 -0
  121. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/infoDiagram-42DDH7IO.js +17 -0
  122. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ishikawaDiagram-UXIWVN3A.js +714 -0
  123. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{journeyDiagram-XKPGCS4Q.js → journeyDiagram-VCZTEJTY.js} +32 -32
  124. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{kanban-definition-3W4ZIXB7.js → kanban-definition-6JOO6SKY.js} +13 -9
  125. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{mindmap-definition-VGOIOE7T.js → mindmap-definition-QFDTVHPH.js} +105 -59
  126. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/pieDiagram-DEJITSTG.js +117 -0
  127. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{quadrantDiagram-AYHSOK5B.js → quadrantDiagram-34T5L4WZ.js} +1 -1
  128. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{requirementDiagram-UZGBJVZJ.js → requirementDiagram-MS252O5E.js} +49 -19
  129. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{sankeyDiagram-TZEHDZUN.js → sankeyDiagram-XADWPNL6.js} +1 -1
  130. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-FGHM5R23.js +4155 -0
  131. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-FKZM4ZOC.js → stateDiagram-FHFEXIEX.js} +12 -12
  132. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{stateDiagram-v2-4FDKWEC3.js → stateDiagram-v2-QKLJ7IA2.js} +11 -11
  133. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/timeline-definition-GMOUNBTQ.js +1071 -0
  134. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/vennDiagram-DHZGUBPP.js +959 -0
  135. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/wardleyDiagram-NUSXRM2D.js +574 -0
  136. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/{xychartDiagram-PRI3JC2R.js → xychartDiagram-5P7HB3ND.js} +38 -35
  137. package/dist/node_modules/mermaid/dist/mermaid.core.js +235 -192
  138. package/dist/node_modules/nanoid/url-alphabet/index.js +1 -1
  139. package/dist/node_modules/remend/dist/index.js +333 -264
  140. package/dist/node_modules/streamdown/dist/chunk-BO2N2NFS.js +2498 -0
  141. package/dist/node_modules/streamdown/dist/highlighted-body-OFNGDK62.js +35 -0
  142. package/dist/node_modules/streamdown/dist/index.js +1 -1
  143. package/dist/node_modules/streamdown/dist/mermaid-GHXKKRXX.js +3 -0
  144. package/dist/node_modules/streamdown/node_modules/marked/lib/marked.esm.js +672 -667
  145. package/dist/pages/DashboardPage.js +3 -3
  146. package/package.json +2 -2
  147. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/chunk-TCCFYFTB.js +0 -787
  148. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/info-VBDWY6EO.js +0 -3
  149. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/packet-DYOGHKS2.js +0 -3
  150. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/pie-VRWISCQL.js +0 -3
  151. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/radar-ZZBFDIW7.js +0 -3
  152. package/dist/node_modules/@mermaid-js/parser/dist/chunks/mermaid-parser.core/treemap-GDKQZRPO.js +0 -3
  153. package/dist/node_modules/chevrotain/lib/src/parse/parser/traits/context_assist.js +0 -16
  154. package/dist/node_modules/lodash-es/_arrayAggregator.js +0 -9
  155. package/dist/node_modules/lodash-es/_arrayEvery.js +0 -6
  156. package/dist/node_modules/lodash-es/_baseAggregator.js +0 -8
  157. package/dist/node_modules/lodash-es/_baseDifference.js +0 -22
  158. package/dist/node_modules/lodash-es/_baseEvery.js +0 -9
  159. package/dist/node_modules/lodash-es/_baseIsRegExp.js +0 -8
  160. package/dist/node_modules/lodash-es/_baseSlice.js +0 -8
  161. package/dist/node_modules/lodash-es/_baseSome.js +0 -9
  162. package/dist/node_modules/lodash-es/_createAggregator.js +0 -12
  163. package/dist/node_modules/lodash-es/assign.js +0 -14
  164. package/dist/node_modules/lodash-es/compact.js +0 -9
  165. package/dist/node_modules/lodash-es/difference.js +0 -8
  166. package/dist/node_modules/lodash-es/drop.js +0 -8
  167. package/dist/node_modules/lodash-es/dropRight.js +0 -8
  168. package/dist/node_modules/lodash-es/every.js +0 -11
  169. package/dist/node_modules/lodash-es/groupBy.js +0 -6
  170. package/dist/node_modules/lodash-es/head.js +0 -5
  171. package/dist/node_modules/lodash-es/includes.js +0 -13
  172. package/dist/node_modules/lodash-es/indexOf.js +0 -11
  173. package/dist/node_modules/lodash-es/isRegExp.js +0 -5
  174. package/dist/node_modules/lodash-es/negate.js +0 -16
  175. package/dist/node_modules/lodash-es/pickBy.js +0 -15
  176. package/dist/node_modules/lodash-es/reject.js +0 -10
  177. package/dist/node_modules/lodash-es/some.js +0 -11
  178. package/dist/node_modules/lodash-es/uniq.js +0 -6
  179. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/architectureDiagram-VXUJARFQ.js +0 -673
  180. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-ABZYJK2D.js +0 -1547
  181. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-CVBHYZKI.js +0 -10
  182. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-DR5Q36YT.js +0 -135
  183. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-JA3XYJ7Z.js +0 -247
  184. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-JZLCHNYA.js +0 -3516
  185. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-N4CR4FBY.js +0 -39
  186. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-QXUST7PY.js +0 -497
  187. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-TZMSLE5B.js +0 -55
  188. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/diagram-QEK2KX5R.js +0 -211
  189. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/gitGraphDiagram-V2S2FVAM.js +0 -621
  190. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/infoDiagram-HS3SLOUP.js +0 -18
  191. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/pieDiagram-ADFJNKIX.js +0 -117
  192. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-WL72ISMW.js +0 -3560
  193. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/timeline-definition-IT6M3QCI.js +0 -833
  194. package/dist/node_modules/streamdown/dist/chunk-RLXIAIE6.js +0 -2189
  195. package/dist/node_modules/streamdown/dist/highlighted-body-B3W2YXNL.js +0 -33
  196. package/dist/node_modules/streamdown/dist/mermaid-3ZIDBTTL.js +0 -3
@@ -0,0 +1,903 @@
1
+ var SMALL$1 = 1e-10;
2
+ function intersectionArea(d, g) {
3
+ let _ = getIntersectionPoints(d), y = _.filter((e) => containedInCircles(e, d)), b = 0, x = 0, S = [];
4
+ if (y.length > 1) {
5
+ let e = getCenter(y);
6
+ for (let d = 0; d < y.length; ++d) {
7
+ let f = y[d];
8
+ f.angle = Math.atan2(f.x - e.x, f.y - e.y);
9
+ }
10
+ y.sort((e, d) => d.angle - e.angle);
11
+ let f = y[y.length - 1];
12
+ for (let e = 0; e < y.length; ++e) {
13
+ let p = y[e];
14
+ x += (f.x + p.x) * (p.y - f.y);
15
+ let g = {
16
+ x: (p.x + f.x) / 2,
17
+ y: (p.y + f.y) / 2
18
+ }, _ = null;
19
+ for (let e = 0; e < p.parentIndex.length; ++e) if (f.parentIndex.includes(p.parentIndex[e])) {
20
+ let m = d[p.parentIndex[e]], v = Math.atan2(p.x - m.x, p.y - m.y), y = Math.atan2(f.x - m.x, f.y - m.y), b = y - v;
21
+ b < 0 && (b += 2 * Math.PI);
22
+ let x = y - b / 2, S = distance(g, {
23
+ x: m.x + m.radius * Math.sin(x),
24
+ y: m.y + m.radius * Math.cos(x)
25
+ });
26
+ S > m.radius * 2 && (S = m.radius * 2), (_ == null || _.width > S) && (_ = {
27
+ circle: m,
28
+ width: S,
29
+ p1: p,
30
+ p2: f,
31
+ large: S > m.radius,
32
+ sweep: !0
33
+ });
34
+ }
35
+ _ != null && (S.push(_), b += circleArea(_.circle.radius, _.width), f = p);
36
+ }
37
+ } else {
38
+ let f = d[0];
39
+ for (let e = 1; e < d.length; ++e) d[e].radius < f.radius && (f = d[e]);
40
+ let p = !1;
41
+ for (let e = 0; e < d.length; ++e) if (distance(d[e], f) > Math.abs(f.radius - d[e].radius)) {
42
+ p = !0;
43
+ break;
44
+ }
45
+ p ? b = x = 0 : (b = f.radius * f.radius * Math.PI, S.push({
46
+ circle: f,
47
+ p1: {
48
+ x: f.x,
49
+ y: f.y + f.radius
50
+ },
51
+ p2: {
52
+ x: f.x - SMALL$1,
53
+ y: f.y + f.radius
54
+ },
55
+ width: f.radius * 2,
56
+ large: !0,
57
+ sweep: !0
58
+ }));
59
+ }
60
+ return x /= 2, g && (g.area = b + x, g.arcArea = b, g.polygonArea = x, g.arcs = S, g.innerPoints = y, g.intersectionPoints = _), b + x;
61
+ }
62
+ function containedInCircles(d, f) {
63
+ return f.every((f) => distance(d, f) < f.radius + SMALL$1);
64
+ }
65
+ function getIntersectionPoints(e) {
66
+ let d = [];
67
+ for (let f = 0; f < e.length; ++f) for (let p = f + 1; p < e.length; ++p) {
68
+ let m = circleCircleIntersection(e[f], e[p]);
69
+ for (let e of m) e.parentIndex = [f, p], d.push(e);
70
+ }
71
+ return d;
72
+ }
73
+ function circleArea(e, d) {
74
+ return e * e * Math.acos(1 - d / e) - (e - d) * Math.sqrt(d * (2 * e - d));
75
+ }
76
+ function distance(e, d) {
77
+ return Math.sqrt((e.x - d.x) * (e.x - d.x) + (e.y - d.y) * (e.y - d.y));
78
+ }
79
+ function circleOverlap(e, d, f) {
80
+ if (f >= e + d) return 0;
81
+ if (f <= Math.abs(e - d)) return Math.PI * Math.min(e, d) * Math.min(e, d);
82
+ let p = e - (f * f - d * d + e * e) / (2 * f), h = d - (f * f - e * e + d * d) / (2 * f);
83
+ return circleArea(e, p) + circleArea(d, h);
84
+ }
85
+ function circleCircleIntersection(e, d) {
86
+ let f = distance(e, d), p = e.radius, m = d.radius;
87
+ if (f >= p + m || f <= Math.abs(p - m)) return [];
88
+ let g = (p * p - m * m + f * f) / (2 * f), _ = Math.sqrt(p * p - g * g), v = e.x + g * (d.x - e.x) / f, y = e.y + g * (d.y - e.y) / f, b = -(d.y - e.y) * (_ / f), x = -(d.x - e.x) * (_ / f);
89
+ return [{
90
+ x: v + b,
91
+ y: y - x
92
+ }, {
93
+ x: v - b,
94
+ y: y + x
95
+ }];
96
+ }
97
+ function getCenter(e) {
98
+ let d = {
99
+ x: 0,
100
+ y: 0
101
+ };
102
+ for (let f of e) d.x += f.x, d.y += f.y;
103
+ return d.x /= e.length, d.y /= e.length, d;
104
+ }
105
+ function bisect(e, d, f, p) {
106
+ p ||= {};
107
+ let m = p.maxIterations || 100, h = p.tolerance || 1e-10, g = e(d), _ = e(f), v = f - d;
108
+ if (g * _ > 0) throw "Initial bisect points must have opposite signs";
109
+ if (g === 0) return d;
110
+ if (_ === 0) return f;
111
+ for (let f = 0; f < m; ++f) {
112
+ v /= 2;
113
+ let f = d + v, p = e(f);
114
+ if (p * g >= 0 && (d = f), Math.abs(v) < h || p === 0) return f;
115
+ }
116
+ return d + v;
117
+ }
118
+ function zeros(e) {
119
+ let d = Array(e);
120
+ for (let f = 0; f < e; ++f) d[f] = 0;
121
+ return d;
122
+ }
123
+ function zerosM(e, d) {
124
+ return zeros(e).map(() => zeros(d));
125
+ }
126
+ function dot(e, d) {
127
+ let f = 0;
128
+ for (let p = 0; p < e.length; ++p) f += e[p] * d[p];
129
+ return f;
130
+ }
131
+ function norm2(e) {
132
+ return Math.sqrt(dot(e, e));
133
+ }
134
+ function scale(e, d, f) {
135
+ for (let p = 0; p < d.length; ++p) e[p] = d[p] * f;
136
+ }
137
+ function weightedSum(e, d, f, p, m) {
138
+ for (let h = 0; h < e.length; ++h) e[h] = d * f[h] + p * m[h];
139
+ }
140
+ function nelderMead(e, d, f) {
141
+ f ||= {};
142
+ let p = f.maxIterations || d.length * 200, m = f.nonZeroDelta || 1.05, h = f.zeroDelta || .001, g = f.minErrorDelta || 1e-6, _ = f.minErrorDelta || 1e-5, v = f.rho === void 0 ? 1 : f.rho, y = f.chi === void 0 ? 2 : f.chi, b = f.psi === void 0 ? -.5 : f.psi, x = f.sigma === void 0 ? .5 : f.sigma, S, C = d.length, w = Array(C + 1);
143
+ w[0] = d, w[0].fx = e(d), w[0].id = 0;
144
+ for (let f = 0; f < C; ++f) {
145
+ let p = d.slice();
146
+ p[f] = p[f] ? p[f] * m : h, w[f + 1] = p, w[f + 1].fx = e(p), w[f + 1].id = f + 1;
147
+ }
148
+ function E(e) {
149
+ for (let d = 0; d < e.length; d++) w[C][d] = e[d];
150
+ w[C].fx = e.fx;
151
+ }
152
+ let D = (e, d) => e.fx - d.fx, O = d.slice(), k = d.slice(), A = d.slice(), j = d.slice();
153
+ for (let d = 0; d < p; ++d) {
154
+ if (w.sort(D), f.history) {
155
+ let e = w.map((e) => {
156
+ let d = e.slice();
157
+ return d.fx = e.fx, d.id = e.id, d;
158
+ });
159
+ e.sort((e, d) => e.id - d.id), f.history.push({
160
+ x: w[0].slice(),
161
+ fx: w[0].fx,
162
+ simplex: e
163
+ });
164
+ }
165
+ S = 0;
166
+ for (let e = 0; e < C; ++e) S = Math.max(S, Math.abs(w[0][e] - w[1][e]));
167
+ if (Math.abs(w[0].fx - w[C].fx) < g && S < _) break;
168
+ for (let e = 0; e < C; ++e) {
169
+ O[e] = 0;
170
+ for (let d = 0; d < C; ++d) O[e] += w[d][e];
171
+ O[e] /= C;
172
+ }
173
+ let d = w[C];
174
+ if (weightedSum(k, 1 + v, O, -v, d), k.fx = e(k), k.fx < w[0].fx) weightedSum(j, 1 + y, O, -y, d), j.fx = e(j), j.fx < k.fx ? E(j) : E(k);
175
+ else if (k.fx >= w[C - 1].fx) {
176
+ let f = !1;
177
+ if (k.fx > d.fx ? (weightedSum(A, 1 + b, O, -b, d), A.fx = e(A), A.fx < d.fx ? E(A) : f = !0) : (weightedSum(A, 1 - b * v, O, b * v, d), A.fx = e(A), A.fx < k.fx ? E(A) : f = !0), f) {
178
+ if (x >= 1) break;
179
+ for (let d = 1; d < w.length; ++d) weightedSum(w[d], 1 - x, w[0], x, w[d]), w[d].fx = e(w[d]);
180
+ }
181
+ } else E(k);
182
+ }
183
+ return w.sort(D), {
184
+ fx: w[0].fx,
185
+ x: w[0]
186
+ };
187
+ }
188
+ function wolfeLineSearch(e, d, f, p, m, h, g) {
189
+ let _ = f.fx, v = dot(f.fxprime, d), y = _, b = _, x = v, C = 0;
190
+ m ||= 1, h ||= 1e-6, g ||= .1;
191
+ function w(b, C, w) {
192
+ for (let E = 0; E < 16; ++E) if (m = (b + C) / 2, weightedSum(p.x, 1, f.x, m, d), y = p.fx = e(p.x, p.fxprime), x = dot(p.fxprime, d), y > _ + h * m * v || y >= w) C = m;
193
+ else {
194
+ if (Math.abs(x) <= -g * v) return m;
195
+ x * (C - b) >= 0 && (C = b), b = m, w = y;
196
+ }
197
+ return 0;
198
+ }
199
+ for (let E = 0; E < 10; ++E) {
200
+ if (weightedSum(p.x, 1, f.x, m, d), y = p.fx = e(p.x, p.fxprime), x = dot(p.fxprime, d), y > _ + h * m * v || E && y >= b) return w(C, m, b);
201
+ if (Math.abs(x) <= -g * v) return m;
202
+ if (x >= 0) return w(m, C, y);
203
+ b = y, C = m, m *= 2;
204
+ }
205
+ return m;
206
+ }
207
+ function conjugateGradient(e, d, f) {
208
+ let p = {
209
+ x: d.slice(),
210
+ fx: 0,
211
+ fxprime: d.slice()
212
+ }, m = {
213
+ x: d.slice(),
214
+ fx: 0,
215
+ fxprime: d.slice()
216
+ }, h = d.slice(), g, _, v = 1, y;
217
+ f ||= {}, y = f.maxIterations || d.length * 20, p.fx = e(p.x, p.fxprime), g = p.fxprime.slice(), scale(g, p.fxprime, -1);
218
+ for (let d = 0; d < y; ++d) {
219
+ if (v = wolfeLineSearch(e, g, p, m, v), f.history && f.history.push({
220
+ x: p.x.slice(),
221
+ fx: p.fx,
222
+ fxprime: p.fxprime.slice(),
223
+ alpha: v
224
+ }), !v) scale(g, p.fxprime, -1);
225
+ else {
226
+ weightedSum(h, 1, m.fxprime, -1, p.fxprime);
227
+ let e = dot(p.fxprime, p.fxprime), d = Math.max(0, dot(h, m.fxprime) / e);
228
+ weightedSum(g, d, g, -1, m.fxprime), _ = p, p = m, m = _;
229
+ }
230
+ if (norm2(p.fxprime) <= 1e-5) break;
231
+ }
232
+ return f.history && f.history.push({
233
+ x: p.x.slice(),
234
+ fx: p.fx,
235
+ fxprime: p.fxprime.slice(),
236
+ alpha: v
237
+ }), p;
238
+ }
239
+ function venn(e, d = {}) {
240
+ d.maxIterations = d.maxIterations || 500;
241
+ let f = d.initialLayout || bestInitialLayout, p = d.lossFunction || lossFunction, m = addMissingAreas(e, d), h = f(m, d), g = Object.keys(h), _ = [];
242
+ for (let e of g) _.push(h[e].x), _.push(h[e].y);
243
+ let v = nelderMead((e) => {
244
+ let d = {};
245
+ for (let f = 0; f < g.length; ++f) {
246
+ let p = g[f];
247
+ d[p] = {
248
+ x: e[2 * f],
249
+ y: e[2 * f + 1],
250
+ radius: h[p].radius
251
+ };
252
+ }
253
+ return p(d, m);
254
+ }, _, d).x;
255
+ for (let e = 0; e < g.length; ++e) {
256
+ let d = g[e];
257
+ h[d].x = v[2 * e], h[d].y = v[2 * e + 1];
258
+ }
259
+ return h;
260
+ }
261
+ var SMALL = 1e-10;
262
+ function distanceFromIntersectArea(e, d, f) {
263
+ return Math.min(e, d) * Math.min(e, d) * Math.PI <= f + SMALL ? Math.abs(e - d) : bisect((p) => circleOverlap(e, d, p) - f, 0, e + d);
264
+ }
265
+ function addMissingAreas(e, d = {}) {
266
+ let f = d.distinct, p = e.map((e) => Object.assign({}, e));
267
+ function m(e) {
268
+ return e.join(";");
269
+ }
270
+ if (f) {
271
+ let e = /* @__PURE__ */ new Map();
272
+ for (let d of p) for (let f = 0; f < d.sets.length; f++) {
273
+ let p = String(d.sets[f]);
274
+ e.set(p, d.size + (e.get(p) || 0));
275
+ for (let m = f + 1; m < d.sets.length; m++) {
276
+ let f = String(d.sets[m]), h = `${p};${f}`, g = `${f};${p}`;
277
+ e.set(h, d.size + (e.get(h) || 0)), e.set(g, d.size + (e.get(g) || 0));
278
+ }
279
+ }
280
+ for (let d of p) d.sets.length < 3 && (d.size = e.get(m(d.sets)));
281
+ }
282
+ let h = [], g = /* @__PURE__ */ new Set();
283
+ for (let e of p) if (e.sets.length === 1) h.push(e.sets[0]);
284
+ else if (e.sets.length === 2) {
285
+ let d = e.sets[0], f = e.sets[1];
286
+ g.add(m(e.sets)), g.add(m([f, d]));
287
+ }
288
+ h.sort((e, d) => e === d ? 0 : e < d ? -1 : 1);
289
+ for (let e = 0; e < h.length; ++e) {
290
+ let d = h[e];
291
+ for (let f = e + 1; f < h.length; ++f) {
292
+ let e = h[f];
293
+ g.has(m([d, e])) || p.push({
294
+ sets: [d, e],
295
+ size: 0
296
+ });
297
+ }
298
+ }
299
+ return p;
300
+ }
301
+ function getDistanceMatrices(e, d, f) {
302
+ let p = zerosM(d.length, d.length), m = zerosM(d.length, d.length);
303
+ return e.filter((e) => e.sets.length === 2).forEach((e) => {
304
+ let h = f[e.sets[0]], g = f[e.sets[1]], _ = distanceFromIntersectArea(Math.sqrt(d[h].size / Math.PI), Math.sqrt(d[g].size / Math.PI), e.size);
305
+ p[h][g] = p[g][h] = _;
306
+ let v = 0;
307
+ e.size + 1e-10 >= Math.min(d[h].size, d[g].size) ? v = 1 : e.size <= 1e-10 && (v = -1), m[h][g] = m[g][h] = v;
308
+ }), {
309
+ distances: p,
310
+ constraints: m
311
+ };
312
+ }
313
+ function constrainedMDSGradient(e, d, f, p) {
314
+ for (let e = 0; e < d.length; ++e) d[e] = 0;
315
+ let m = 0;
316
+ for (let h = 0; h < f.length; ++h) {
317
+ let g = e[2 * h], _ = e[2 * h + 1];
318
+ for (let v = h + 1; v < f.length; ++v) {
319
+ let y = e[2 * v], b = e[2 * v + 1], x = f[h][v], S = p[h][v], C = (y - g) * (y - g) + (b - _) * (b - _), w = Math.sqrt(C), T = C - x * x;
320
+ S > 0 && w <= x || S < 0 && w >= x || (m += 2 * T * T, d[2 * h] += 4 * T * (g - y), d[2 * h + 1] += 4 * T * (_ - b), d[2 * v] += 4 * T * (y - g), d[2 * v + 1] += 4 * T * (b - _));
321
+ }
322
+ }
323
+ return m;
324
+ }
325
+ function bestInitialLayout(e, d = {}) {
326
+ let f = greedyLayout(e, d), p = d.lossFunction || lossFunction;
327
+ if (e.length >= 8) {
328
+ let m = constrainedMDSLayout(e, d), h = p(m, e), g = p(f, e);
329
+ h + 1e-8 < g && (f = m);
330
+ }
331
+ return f;
332
+ }
333
+ function constrainedMDSLayout(e, d = {}) {
334
+ let f = d.restarts || 10, p = [], m = {};
335
+ for (let d of e) d.sets.length === 1 && (m[d.sets[0]] = p.length, p.push(d));
336
+ let { distances: h, constraints: g } = getDistanceMatrices(e, p, m), _ = norm2(h.map(norm2)) / h.length;
337
+ h = h.map((e) => e.map((e) => e / _));
338
+ let v = (e, d) => constrainedMDSGradient(e, d, h, g), y = null;
339
+ for (let e = 0; e < f; ++e) {
340
+ let e = conjugateGradient(v, zeros(h.length * 2).map(Math.random), d);
341
+ (!y || e.fx < y.fx) && (y = e);
342
+ }
343
+ let x = y.x, S = {};
344
+ for (let e = 0; e < p.length; ++e) {
345
+ let d = p[e];
346
+ S[d.sets[0]] = {
347
+ x: x[2 * e] * _,
348
+ y: x[2 * e + 1] * _,
349
+ radius: Math.sqrt(d.size / Math.PI)
350
+ };
351
+ }
352
+ if (d.history) for (let e of d.history) scale(e.x, _);
353
+ return S;
354
+ }
355
+ function greedyLayout(e, d) {
356
+ let f = d && d.lossFunction ? d.lossFunction : lossFunction, p = {}, m = {};
357
+ for (let d of e) if (d.sets.length === 1) {
358
+ let e = d.sets[0];
359
+ p[e] = {
360
+ x: 1e10,
361
+ y: 1e10,
362
+ rowid: p.length,
363
+ size: d.size,
364
+ radius: Math.sqrt(d.size / Math.PI)
365
+ }, m[e] = [];
366
+ }
367
+ e = e.filter((e) => e.sets.length === 2);
368
+ for (let d of e) {
369
+ let e = d.weight == null ? 1 : d.weight, f = d.sets[0], h = d.sets[1];
370
+ d.size + SMALL >= Math.min(p[f].size, p[h].size) && (e = 0), m[f].push({
371
+ set: h,
372
+ size: d.size,
373
+ weight: e
374
+ }), m[h].push({
375
+ set: f,
376
+ size: d.size,
377
+ weight: e
378
+ });
379
+ }
380
+ let h = [];
381
+ Object.keys(m).forEach((e) => {
382
+ let d = 0;
383
+ for (let f = 0; f < m[e].length; ++f) d += m[e][f].size * m[e][f].weight;
384
+ h.push({
385
+ set: e,
386
+ size: d
387
+ });
388
+ });
389
+ function g(e, d) {
390
+ return d.size - e.size;
391
+ }
392
+ h.sort(g);
393
+ let v = {};
394
+ function y(e) {
395
+ return e.set in v;
396
+ }
397
+ function b(e, d) {
398
+ p[d].x = e.x, p[d].y = e.y, v[d] = !0;
399
+ }
400
+ b({
401
+ x: 0,
402
+ y: 0
403
+ }, h[0].set);
404
+ for (let d = 1; d < h.length; ++d) {
405
+ let v = h[d].set, S = m[v].filter(y), C = p[v];
406
+ if (S.sort(g), S.length === 0) throw "ERROR: missing pairwise overlap information";
407
+ let w = [];
408
+ for (var x = 0; x < S.length; ++x) {
409
+ let e = p[S[x].set], d = distanceFromIntersectArea(C.radius, e.radius, S[x].size);
410
+ w.push({
411
+ x: e.x + d,
412
+ y: e.y
413
+ }), w.push({
414
+ x: e.x - d,
415
+ y: e.y
416
+ }), w.push({
417
+ y: e.y + d,
418
+ x: e.x
419
+ }), w.push({
420
+ y: e.y - d,
421
+ x: e.x
422
+ });
423
+ for (let f = x + 1; f < S.length; ++f) {
424
+ let m = p[S[f].set], h = distanceFromIntersectArea(C.radius, m.radius, S[f].size), g = circleCircleIntersection({
425
+ x: e.x,
426
+ y: e.y,
427
+ radius: d
428
+ }, {
429
+ x: m.x,
430
+ y: m.y,
431
+ radius: h
432
+ });
433
+ w.push(...g);
434
+ }
435
+ }
436
+ let T = 1e50, E = w[0];
437
+ for (let d of w) {
438
+ p[v].x = d.x, p[v].y = d.y;
439
+ let m = f(p, e);
440
+ m < T && (T = m, E = d);
441
+ }
442
+ b(E, v);
443
+ }
444
+ return p;
445
+ }
446
+ function lossFunction(e, f) {
447
+ let p = 0;
448
+ for (let m of f) {
449
+ if (m.sets.length === 1) continue;
450
+ let f;
451
+ if (m.sets.length === 2) {
452
+ let d = e[m.sets[0]], p = e[m.sets[1]];
453
+ f = circleOverlap(d.radius, p.radius, distance(d, p));
454
+ } else f = intersectionArea(m.sets.map((d) => e[d]));
455
+ let _ = m.weight == null ? 1 : m.weight;
456
+ p += _ * (f - m.size) * (f - m.size);
457
+ }
458
+ return p;
459
+ }
460
+ function logRatioLossFunction(e, f) {
461
+ let p = 0;
462
+ for (let m of f) {
463
+ if (m.sets.length === 1) continue;
464
+ let f;
465
+ if (m.sets.length === 2) {
466
+ let d = e[m.sets[0]], p = e[m.sets[1]];
467
+ f = circleOverlap(d.radius, p.radius, distance(d, p));
468
+ } else f = intersectionArea(m.sets.map((d) => e[d]));
469
+ let _ = m.weight == null ? 1 : m.weight, v = Math.log((f + 1) / (m.size + 1));
470
+ p += _ * v * v;
471
+ }
472
+ return p;
473
+ }
474
+ function orientateCircles(e, d, f) {
475
+ if (f == null ? e.sort((e, d) => d.radius - e.radius) : e.sort(f), e.length > 0) {
476
+ let d = e[0].x, f = e[0].y;
477
+ for (let p of e) p.x -= d, p.y -= f;
478
+ }
479
+ if (e.length === 2 && distance(e[0], e[1]) < Math.abs(e[1].radius - e[0].radius) && (e[1].x = e[0].x + e[0].radius - e[1].radius - 1e-10, e[1].y = e[0].y), e.length > 1) {
480
+ let f = Math.atan2(e[1].x, e[1].y) - d, p = Math.cos(f), m = Math.sin(f);
481
+ for (let d of e) {
482
+ let e = d.x, f = d.y;
483
+ d.x = p * e - m * f, d.y = m * e + p * f;
484
+ }
485
+ }
486
+ if (e.length > 2) {
487
+ let f = Math.atan2(e[2].x, e[2].y) - d;
488
+ for (; f < 0;) f += 2 * Math.PI;
489
+ for (; f > 2 * Math.PI;) f -= 2 * Math.PI;
490
+ if (f > Math.PI) {
491
+ let d = e[1].y / (1e-10 + e[1].x);
492
+ for (let f of e) {
493
+ var p = (f.x + d * f.y) / (1 + d * d);
494
+ f.x = 2 * p - f.x, f.y = 2 * p * d - f.y;
495
+ }
496
+ }
497
+ }
498
+ }
499
+ function disjointCluster(e) {
500
+ e.forEach((e) => {
501
+ e.parent = e;
502
+ });
503
+ function d(e) {
504
+ return e.parent !== e && (e.parent = d(e.parent)), e.parent;
505
+ }
506
+ function f(e, f) {
507
+ let p = d(e);
508
+ p.parent = d(f);
509
+ }
510
+ for (let d = 0; d < e.length; ++d) for (let p = d + 1; p < e.length; ++p) {
511
+ let m = e[d].radius + e[p].radius;
512
+ distance(e[d], e[p]) + 1e-10 < m && f(e[p], e[d]);
513
+ }
514
+ let p = /* @__PURE__ */ new Map();
515
+ for (let f = 0; f < e.length; ++f) {
516
+ let m = d(e[f]).parent.setid;
517
+ p.has(m) || p.set(m, []), p.get(m).push(e[f]);
518
+ }
519
+ return e.forEach((e) => {
520
+ delete e.parent;
521
+ }), Array.from(p.values());
522
+ }
523
+ function getBoundingBox(e) {
524
+ let d = (d) => ({
525
+ max: e.reduce((e, f) => Math.max(e, f[d] + f.radius), -Infinity),
526
+ min: e.reduce((e, f) => Math.min(e, f[d] - f.radius), Infinity)
527
+ });
528
+ return {
529
+ xRange: d("x"),
530
+ yRange: d("y")
531
+ };
532
+ }
533
+ function normalizeSolution(e, d, f) {
534
+ d ??= Math.PI / 2;
535
+ let p = fromObjectNotation(e).map((e) => Object.assign({}, e)), m = disjointCluster(p);
536
+ for (let e of m) {
537
+ orientateCircles(e, d, f);
538
+ let p = getBoundingBox(e);
539
+ e.size = (p.xRange.max - p.xRange.min) * (p.yRange.max - p.yRange.min), e.bounds = p;
540
+ }
541
+ m.sort((e, d) => d.size - e.size), p = m[0];
542
+ let h = p.bounds, g = (h.xRange.max - h.xRange.min) / 50;
543
+ function _(e, d, f) {
544
+ if (!e) return;
545
+ let m = e.bounds, _, v;
546
+ if (d) _ = h.xRange.max - m.xRange.min + g;
547
+ else {
548
+ _ = h.xRange.max - m.xRange.max;
549
+ let e = (m.xRange.max - m.xRange.min) / 2 - (h.xRange.max - h.xRange.min) / 2;
550
+ e < 0 && (_ += e);
551
+ }
552
+ if (f) v = h.yRange.max - m.yRange.min + g;
553
+ else {
554
+ v = h.yRange.max - m.yRange.max;
555
+ let e = (m.yRange.max - m.yRange.min) / 2 - (h.yRange.max - h.yRange.min) / 2;
556
+ e < 0 && (v += e);
557
+ }
558
+ for (let d of e) d.x += _, d.y += v, p.push(d);
559
+ }
560
+ let v = 1;
561
+ for (; v < m.length;) _(m[v], !0, !1), _(m[v + 1], !1, !0), _(m[v + 2], !0, !0), v += 3, h = getBoundingBox(p);
562
+ return toObjectNotation(p);
563
+ }
564
+ function scaleSolution(e, d, f, p, m) {
565
+ let h = fromObjectNotation(e);
566
+ d -= 2 * p, f -= 2 * p;
567
+ let { xRange: g, yRange: _ } = getBoundingBox(h);
568
+ if (g.max === g.min || _.max === _.min) return console.log("not scaling solution: zero size detected"), e;
569
+ let v, y;
570
+ if (m) {
571
+ let e = Math.sqrt(m / Math.PI) * 2;
572
+ v = d / e, y = f / e;
573
+ } else v = d / (g.max - g.min), y = f / (_.max - _.min);
574
+ let b = Math.min(y, v), x = (d - (g.max - g.min) * b) / 2, S = (f - (_.max - _.min) * b) / 2;
575
+ return toObjectNotation(h.map((e) => ({
576
+ radius: b * e.radius,
577
+ x: p + x + (e.x - g.min) * b,
578
+ y: p + S + (e.y - _.min) * b,
579
+ setid: e.setid
580
+ })));
581
+ }
582
+ function toObjectNotation(e) {
583
+ let d = {};
584
+ for (let f of e) d[f.setid] = f;
585
+ return d;
586
+ }
587
+ function fromObjectNotation(e) {
588
+ return Object.keys(e).map((d) => Object.assign(e[d], { setid: d }));
589
+ }
590
+ function VennDiagram(e = {}) {
591
+ let d = !1, f = 600, p = 350, m = 15, h = 1e3, g = Math.PI / 2, _ = !0, v = null, y = !0, b = !0, x = null, S = null, C = !1, w = null, T = e && e.symmetricalTextCentre ? e.symmetricalTextCentre : !1, E = {}, D = e && e.colourScheme ? e.colourScheme : e && e.colorScheme ? e.colorScheme : [
592
+ "#1f77b4",
593
+ "#ff7f0e",
594
+ "#2ca02c",
595
+ "#d62728",
596
+ "#9467bd",
597
+ "#8c564b",
598
+ "#e377c2",
599
+ "#7f7f7f",
600
+ "#bcbd22",
601
+ "#17becf"
602
+ ], O = 0, A = function(e) {
603
+ if (e in E) return E[e];
604
+ var d = E[e] = D[O];
605
+ return O += 1, O >= D.length && (O = 0), d;
606
+ }, j = venn, M = lossFunction;
607
+ function N(E) {
608
+ let D = E.datum(), O = /* @__PURE__ */ new Set();
609
+ D.forEach((e) => {
610
+ e.size == 0 && e.sets.length == 1 && O.add(e.sets[0]);
611
+ }), D = D.filter((e) => !e.sets.some((e) => O.has(e)));
612
+ let k = {}, N = {};
613
+ if (D.length > 0) {
614
+ let e = j(D, {
615
+ lossFunction: M,
616
+ distinct: C
617
+ });
618
+ _ && (e = normalizeSolution(e, g, S)), k = scaleSolution(e, f, p, m, v), N = computeTextCentres(k, D, T);
619
+ }
620
+ let P = {};
621
+ D.forEach((e) => {
622
+ e.label && (P[e.sets] = e.label);
623
+ });
624
+ function F(e) {
625
+ if (e.sets in P) return P[e.sets];
626
+ if (e.sets.length == 1) return "" + e.sets[0];
627
+ }
628
+ E.selectAll("svg").data([k]).enter().append("svg");
629
+ let I = E.select("svg");
630
+ d ? I.attr("viewBox", `0 0 ${f} ${p}`) : I.attr("width", f).attr("height", p);
631
+ let L = {}, R = !1;
632
+ I.selectAll(".venn-area path").each(function(e) {
633
+ let d = this.getAttribute("d");
634
+ e.sets.length == 1 && d && !C && (R = !0, L[e.sets[0]] = circleFromPath(d));
635
+ });
636
+ function z(e) {
637
+ return (d) => intersectionAreaPath(e.sets.map((e) => {
638
+ let m = L[e], h = k[e];
639
+ return m ||= {
640
+ x: f / 2,
641
+ y: p / 2,
642
+ radius: 1
643
+ }, h ||= {
644
+ x: f / 2,
645
+ y: p / 2,
646
+ radius: 1
647
+ }, {
648
+ x: m.x * (1 - d) + h.x * d,
649
+ y: m.y * (1 - d) + h.y * d,
650
+ radius: m.radius * (1 - d) + h.radius * d
651
+ };
652
+ }), w);
653
+ }
654
+ let B = I.selectAll(".venn-area").data(D, (e) => e.sets), V = B.enter().append("g").attr("class", (e) => `venn-area venn-${e.sets.length == 1 ? "circle" : "intersection"}${e.colour || e.color ? " venn-coloured" : ""}`).attr("data-venn-sets", (e) => e.sets.join("_")), H = V.append("path"), U = V.append("text").attr("class", "label").text((e) => F(e)).attr("text-anchor", "middle").attr("dy", ".35em").attr("x", f / 2).attr("y", p / 2);
655
+ b && (H.style("fill-opacity", "0").filter((e) => e.sets.length == 1).style("fill", (e) => e.colour ? e.colour : e.color ? e.color : A(e.sets)).style("fill-opacity", ".25"), U.style("fill", (d) => d.colour || d.color ? "#FFF" : e.textFill ? e.textFill : d.sets.length == 1 ? A(d.sets) : "#444"));
656
+ function W(e) {
657
+ return typeof e.transition == "function" ? e.transition("venn").duration(h) : e;
658
+ }
659
+ let G = E;
660
+ R && typeof G.transition == "function" ? (G = W(E), G.selectAll("path").attrTween("d", z)) : G.selectAll("path").attr("d", (e) => intersectionAreaPath(e.sets.map((e) => k[e])), w);
661
+ let K = G.selectAll("text").filter((e) => e.sets in N).text((e) => F(e)).attr("x", (e) => Math.floor(N[e.sets].x)).attr("y", (e) => Math.floor(N[e.sets].y));
662
+ y && (R ? "on" in K ? K.on("end", wrapText(k, F)) : K.each("end", wrapText(k, F)) : K.each(wrapText(k, F)));
663
+ let q = W(B.exit()).remove();
664
+ typeof B.transition == "function" && q.selectAll("path").attrTween("d", z);
665
+ let J = q.selectAll("text").attr("x", f / 2).attr("y", p / 2);
666
+ return x !== null && (U.style("font-size", "0px"), K.style("font-size", x), J.style("font-size", "0px")), {
667
+ circles: k,
668
+ textCentres: N,
669
+ nodes: B,
670
+ enter: V,
671
+ update: G,
672
+ exit: q
673
+ };
674
+ }
675
+ return N.wrap = function(e) {
676
+ return arguments.length ? (y = e, N) : y;
677
+ }, N.useViewBox = function() {
678
+ return d = !0, N;
679
+ }, N.width = function(e) {
680
+ return arguments.length ? (f = e, N) : f;
681
+ }, N.height = function(e) {
682
+ return arguments.length ? (p = e, N) : p;
683
+ }, N.padding = function(e) {
684
+ return arguments.length ? (m = e, N) : m;
685
+ }, N.distinct = function(e) {
686
+ return arguments.length ? (C = e, N) : C;
687
+ }, N.colours = function(e) {
688
+ return arguments.length ? (A = e, N) : A;
689
+ }, N.colors = function(e) {
690
+ return arguments.length ? (A = e, N) : A;
691
+ }, N.fontSize = function(e) {
692
+ return arguments.length ? (x = e, N) : x;
693
+ }, N.round = function(e) {
694
+ return arguments.length ? (w = e, N) : w;
695
+ }, N.duration = function(e) {
696
+ return arguments.length ? (h = e, N) : h;
697
+ }, N.layoutFunction = function(e) {
698
+ return arguments.length ? (j = e, N) : j;
699
+ }, N.normalize = function(e) {
700
+ return arguments.length ? (_ = e, N) : _;
701
+ }, N.scaleToFit = function(e) {
702
+ return arguments.length ? (v = e, N) : v;
703
+ }, N.styled = function(e) {
704
+ return arguments.length ? (b = e, N) : b;
705
+ }, N.orientation = function(e) {
706
+ return arguments.length ? (g = e, N) : g;
707
+ }, N.orientationOrder = function(e) {
708
+ return arguments.length ? (S = e, N) : S;
709
+ }, N.lossFunction = function(e) {
710
+ return arguments.length ? (M = e === "default" ? lossFunction : e === "logRatio" ? logRatioLossFunction : e, N) : M;
711
+ }, N;
712
+ }
713
+ function wrapText(e, d) {
714
+ return function(f) {
715
+ let p = this, m = e[f.sets[0]].radius || 50, h = d(f) || "", g = h.split(/\s+/).reverse(), _ = (h.length + g.length) / 3, v = g.pop(), y = [v], b = 0, x = 1.1;
716
+ p.textContent = null;
717
+ let S = [];
718
+ function C(e) {
719
+ let d = p.ownerDocument.createElementNS(p.namespaceURI, "tspan");
720
+ return d.textContent = e, S.push(d), p.append(d), d;
721
+ }
722
+ let w = C(v);
723
+ for (; v = g.pop(), v;) {
724
+ y.push(v);
725
+ let e = y.join(" ");
726
+ w.textContent = e, e.length > _ && w.getComputedTextLength() > m && (y.pop(), w.textContent = y.join(" "), y = [v], w = C(v), b++);
727
+ }
728
+ let T = .35 - b * x / 2, E = p.getAttribute("x"), D = p.getAttribute("y");
729
+ S.forEach((e, d) => {
730
+ e.setAttribute("x", E), e.setAttribute("y", D), e.setAttribute("dy", `${T + d * x}em`);
731
+ });
732
+ };
733
+ }
734
+ function circleMargin(e, d, f) {
735
+ let p = d[0].radius - distance(d[0], e);
736
+ for (let f = 1; f < d.length; ++f) {
737
+ let m = d[f].radius - distance(d[f], e);
738
+ m <= p && (p = m);
739
+ }
740
+ for (let d = 0; d < f.length; ++d) {
741
+ let m = distance(f[d], e) - f[d].radius;
742
+ m <= p && (p = m);
743
+ }
744
+ return p;
745
+ }
746
+ function computeTextCentre(e, f, p) {
747
+ let m = [];
748
+ for (let d of e) m.push({
749
+ x: d.x,
750
+ y: d.y
751
+ }), m.push({
752
+ x: d.x + d.radius / 2,
753
+ y: d.y
754
+ }), m.push({
755
+ x: d.x - d.radius / 2,
756
+ y: d.y
757
+ }), m.push({
758
+ x: d.x,
759
+ y: d.y + d.radius / 2
760
+ }), m.push({
761
+ x: d.x,
762
+ y: d.y - d.radius / 2
763
+ });
764
+ let g = m[0], _ = circleMargin(m[0], e, f);
765
+ for (let d = 1; d < m.length; ++d) {
766
+ let p = circleMargin(m[d], e, f);
767
+ p >= _ && (g = m[d], _ = p);
768
+ }
769
+ let y = nelderMead((d) => -1 * circleMargin({
770
+ x: d[0],
771
+ y: d[1]
772
+ }, e, f), [g.x, g.y], {
773
+ maxIterations: 500,
774
+ minErrorDelta: 1e-10
775
+ }).x, b = {
776
+ x: p ? 0 : y[0],
777
+ y: y[1]
778
+ }, x = !0;
779
+ for (let d of e) if (distance(b, d) > d.radius) {
780
+ x = !1;
781
+ break;
782
+ }
783
+ for (let e of f) if (distance(b, e) < e.radius) {
784
+ x = !1;
785
+ break;
786
+ }
787
+ if (x) return b;
788
+ if (e.length == 1) return {
789
+ x: e[0].x,
790
+ y: e[0].y
791
+ };
792
+ let S = {};
793
+ return intersectionArea(e, S), S.arcs.length === 0 ? {
794
+ x: 0,
795
+ y: -1e3,
796
+ disjoint: !0
797
+ } : S.arcs.length == 1 ? {
798
+ x: S.arcs[0].circle.x,
799
+ y: S.arcs[0].circle.y
800
+ } : f.length ? computeTextCentre(e, []) : getCenter(S.arcs.map((e) => e.p1));
801
+ }
802
+ function getOverlappingCircles(e) {
803
+ let d = {}, f = Object.keys(e);
804
+ for (let e of f) d[e] = [];
805
+ for (let p = 0; p < f.length; p++) {
806
+ let m = f[p], g = e[m];
807
+ for (let _ = p + 1; _ < f.length; ++_) {
808
+ let p = f[_], v = e[p], y = distance(g, v);
809
+ y + v.radius <= g.radius + 1e-10 ? d[p].push(m) : y + g.radius <= v.radius + 1e-10 && d[m].push(p);
810
+ }
811
+ }
812
+ return d;
813
+ }
814
+ function computeTextCentres(e, d, f) {
815
+ let p = {}, m = getOverlappingCircles(e);
816
+ for (let h = 0; h < d.length; ++h) {
817
+ let g = d[h].sets, _ = {}, v = {};
818
+ for (let e = 0; e < g.length; ++e) {
819
+ _[g[e]] = !0;
820
+ let d = m[g[e]];
821
+ for (let e = 0; e < d.length; ++e) v[d[e]] = !0;
822
+ }
823
+ let y = [], b = [];
824
+ for (let d in e) d in _ ? y.push(e[d]) : d in v || b.push(e[d]);
825
+ let x = computeTextCentre(y, b, f);
826
+ p[g] = x, x.disjoint && d[h].size > 0 && console.log("WARNING: area " + g + " not represented on screen");
827
+ }
828
+ return p;
829
+ }
830
+ function circlePath(e, d, f) {
831
+ let p = [];
832
+ return p.push("\nM", e, d), p.push("\nm", -f, 0), p.push("\na", f, f, 0, 1, 0, f * 2, 0), p.push("\na", f, f, 0, 1, 0, -f * 2, 0), p.join(" ");
833
+ }
834
+ function circleFromPath(e) {
835
+ let d = e.split(" ");
836
+ return {
837
+ x: Number.parseFloat(d[1]),
838
+ y: Number.parseFloat(d[2]),
839
+ radius: -Number.parseFloat(d[4])
840
+ };
841
+ }
842
+ function intersectionAreaArcs(e) {
843
+ if (e.length === 0) return [];
844
+ let f = {};
845
+ return intersectionArea(e, f), f.arcs;
846
+ }
847
+ function arcsToPath(e, d) {
848
+ if (e.length === 0) return "M 0 0";
849
+ let f = 10 ** (d || 0), p = d == null ? (e) => e : (e) => Math.round(e * f) / f;
850
+ if (e.length == 1) {
851
+ let d = e[0].circle;
852
+ return circlePath(p(d.x), p(d.y), p(d.radius));
853
+ }
854
+ let m = [
855
+ "\nM",
856
+ p(e[0].p2.x),
857
+ p(e[0].p2.y)
858
+ ];
859
+ for (let d of e) {
860
+ let e = p(d.circle.radius);
861
+ m.push("\nA", e, e, 0, d.large ? 1 : 0, d.sweep ? 1 : 0, p(d.p1.x), p(d.p1.y));
862
+ }
863
+ return m.join(" ");
864
+ }
865
+ function intersectionAreaPath(e, d) {
866
+ return arcsToPath(intersectionAreaArcs(e), d);
867
+ }
868
+ function layout(e, d = {}) {
869
+ let { lossFunction: f, layoutFunction: p = venn, normalize: m = !0, orientation: h = Math.PI / 2, orientationOrder: g, width: _ = 600, height: v = 350, padding: y = 15, scaleToFit: b = !1, symmetricalTextCentre: x = !1, distinct: S, round: C = 2 } = d, w = p(e, {
870
+ lossFunction: f === "default" || !f ? lossFunction : f === "logRatio" ? logRatioLossFunction : f,
871
+ distinct: S
872
+ });
873
+ m && (w = normalizeSolution(w, h, g));
874
+ let T = scaleSolution(w, _, v, y, b), E = computeTextCentres(T, e, x), D = new Map(Object.keys(T).map((e) => [e, {
875
+ set: e,
876
+ x: T[e].x,
877
+ y: T[e].y,
878
+ radius: T[e].radius
879
+ }])), O = e.map((e) => {
880
+ let d = e.sets.map((e) => D.get(e)), f = intersectionAreaArcs(d);
881
+ return {
882
+ circles: d,
883
+ arcs: f,
884
+ path: arcsToPath(f, C),
885
+ area: e,
886
+ has: new Set(e.sets)
887
+ };
888
+ });
889
+ function A(e) {
890
+ let d = "";
891
+ for (let f of O) f.has.size > e.length && e.every((e) => f.has.has(e)) && (d += " " + f.path);
892
+ return d;
893
+ }
894
+ return O.map(({ circles: e, arcs: d, path: f, area: p }) => ({
895
+ data: p,
896
+ text: E[p.sets],
897
+ circles: e,
898
+ arcs: d,
899
+ path: f,
900
+ distinctPath: f + A(p.sets)
901
+ }));
902
+ }
903
+ export { VennDiagram, layout };