schematex 0.3.0 → 0.3.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 (185) hide show
  1. package/dist/ai/ai-sdk.cjs +25 -25
  2. package/dist/ai/ai-sdk.d.cts +1 -1
  3. package/dist/ai/ai-sdk.d.ts +1 -1
  4. package/dist/ai/ai-sdk.js +20 -20
  5. package/dist/ai/index.cjs +28 -28
  6. package/dist/ai/index.d.cts +1 -1
  7. package/dist/ai/index.d.ts +1 -1
  8. package/dist/ai/index.js +20 -20
  9. package/dist/browser.cjs +22 -22
  10. package/dist/browser.js +20 -20
  11. package/dist/{chunk-TYCHEOQX.js → chunk-2J2QWNGI.js} +26 -20
  12. package/dist/chunk-2J2QWNGI.js.map +1 -0
  13. package/dist/{chunk-MCFQAUQV.cjs → chunk-2UJAVPA4.cjs} +58 -39
  14. package/dist/chunk-2UJAVPA4.cjs.map +1 -0
  15. package/dist/{chunk-5AEN2PLB.cjs → chunk-3YXXZ4LT.cjs} +33 -33
  16. package/dist/{chunk-5AEN2PLB.cjs.map → chunk-3YXXZ4LT.cjs.map} +1 -1
  17. package/dist/{chunk-RP5UATRA.js → chunk-56LXBM45.js} +4 -4
  18. package/dist/{chunk-RP5UATRA.js.map → chunk-56LXBM45.js.map} +1 -1
  19. package/dist/{chunk-OC22GGQN.js → chunk-6BKUD5EJ.js} +54 -4
  20. package/dist/chunk-6BKUD5EJ.js.map +1 -0
  21. package/dist/{chunk-ULYRO2KY.cjs → chunk-75BMFCP5.cjs} +44 -44
  22. package/dist/{chunk-ULYRO2KY.cjs.map → chunk-75BMFCP5.cjs.map} +1 -1
  23. package/dist/{chunk-ZNDIGQJD.js → chunk-7BEJHG43.js} +3 -3
  24. package/dist/{chunk-ZNDIGQJD.js.map → chunk-7BEJHG43.js.map} +1 -1
  25. package/dist/{chunk-WYFXOXVK.cjs → chunk-7MVDN5UC.cjs} +35 -35
  26. package/dist/{chunk-WYFXOXVK.cjs.map → chunk-7MVDN5UC.cjs.map} +1 -1
  27. package/dist/{chunk-JDTB7IKL.js → chunk-BJ65PKDU.js} +3 -3
  28. package/dist/{chunk-JDTB7IKL.js.map → chunk-BJ65PKDU.js.map} +1 -1
  29. package/dist/{chunk-FE6GAUNW.js → chunk-BJWMPPEA.js} +5 -5
  30. package/dist/{chunk-FE6GAUNW.js.map → chunk-BJWMPPEA.js.map} +1 -1
  31. package/dist/{chunk-MJGDP3CS.cjs → chunk-BUN3CRMP.cjs} +488 -109
  32. package/dist/chunk-BUN3CRMP.cjs.map +1 -0
  33. package/dist/{chunk-COLTVQWR.cjs → chunk-C3IVD7DI.cjs} +25 -25
  34. package/dist/{chunk-COLTVQWR.cjs.map → chunk-C3IVD7DI.cjs.map} +1 -1
  35. package/dist/{chunk-3YZ6FPQW.cjs → chunk-EYHD7LV3.cjs} +131 -131
  36. package/dist/{chunk-3YZ6FPQW.cjs.map → chunk-EYHD7LV3.cjs.map} +1 -1
  37. package/dist/{chunk-UGCUNADI.js → chunk-F6OROIHS.js} +35 -16
  38. package/dist/chunk-F6OROIHS.js.map +1 -0
  39. package/dist/{chunk-3FKS4KQK.cjs → chunk-GYTWJ6VB.cjs} +65 -59
  40. package/dist/chunk-GYTWJ6VB.cjs.map +1 -0
  41. package/dist/{chunk-VLMK7MQK.js → chunk-H4CJTKEH.js} +23 -4
  42. package/dist/chunk-H4CJTKEH.js.map +1 -0
  43. package/dist/{chunk-45KP67RR.js → chunk-HIQPEAL7.js} +5 -5
  44. package/dist/chunk-HIQPEAL7.js.map +1 -0
  45. package/dist/{chunk-NB56L5QK.js → chunk-IT2TVXC7.js} +4 -4
  46. package/dist/{chunk-NB56L5QK.js.map → chunk-IT2TVXC7.js.map} +1 -1
  47. package/dist/{chunk-2JDVJRR3.cjs → chunk-K5QG53GT.cjs} +28 -28
  48. package/dist/chunk-K5QG53GT.cjs.map +1 -0
  49. package/dist/{chunk-B37IKTI7.cjs → chunk-KUXOHLGC.cjs} +97 -47
  50. package/dist/chunk-KUXOHLGC.cjs.map +1 -0
  51. package/dist/{chunk-A5D2IMOX.cjs → chunk-L2KUGWFR.cjs} +47 -47
  52. package/dist/{chunk-A5D2IMOX.cjs.map → chunk-L2KUGWFR.cjs.map} +1 -1
  53. package/dist/{chunk-HDKDQAEQ.cjs → chunk-LFZZ4NCP.cjs} +14 -2
  54. package/dist/chunk-LFZZ4NCP.cjs.map +1 -0
  55. package/dist/{chunk-U6L3FAML.js → chunk-M3R6RCXY.js} +3 -3
  56. package/dist/{chunk-U6L3FAML.js.map → chunk-M3R6RCXY.js.map} +1 -1
  57. package/dist/{chunk-5YYAYW67.js → chunk-M5ZC3LFJ.js} +3 -3
  58. package/dist/{chunk-5YYAYW67.js.map → chunk-M5ZC3LFJ.js.map} +1 -1
  59. package/dist/{chunk-B6INLQBU.cjs → chunk-MKKFIPKU.cjs} +46 -46
  60. package/dist/{chunk-B6INLQBU.cjs.map → chunk-MKKFIPKU.cjs.map} +1 -1
  61. package/dist/{chunk-M5B2UUNW.js → chunk-NFT6VW73.js} +4 -4
  62. package/dist/{chunk-M5B2UUNW.js.map → chunk-NFT6VW73.js.map} +1 -1
  63. package/dist/{chunk-X7RPFTTR.cjs → chunk-OK5RYX55.cjs} +26 -26
  64. package/dist/{chunk-X7RPFTTR.cjs.map → chunk-OK5RYX55.cjs.map} +1 -1
  65. package/dist/{chunk-NNU4RGT3.js → chunk-RNGYXGHS.js} +39 -27
  66. package/dist/chunk-RNGYXGHS.js.map +1 -0
  67. package/dist/{chunk-SQKLKBBK.cjs → chunk-RODV6PC4.cjs} +25 -6
  68. package/dist/chunk-RODV6PC4.cjs.map +1 -0
  69. package/dist/{chunk-H2OEUBPO.js → chunk-SE23X5OE.js} +441 -62
  70. package/dist/chunk-SE23X5OE.js.map +1 -0
  71. package/dist/{chunk-FCGHV6ZK.js → chunk-SFSZUOFT.js} +4 -4
  72. package/dist/{chunk-FCGHV6ZK.js.map → chunk-SFSZUOFT.js.map} +1 -1
  73. package/dist/{chunk-NZH4GWE6.cjs → chunk-UK7JF5QB.cjs} +37 -37
  74. package/dist/{chunk-NZH4GWE6.cjs.map → chunk-UK7JF5QB.cjs.map} +1 -1
  75. package/dist/{chunk-QSQX77S2.cjs → chunk-W7GIQTJV.cjs} +21 -21
  76. package/dist/{chunk-QSQX77S2.cjs.map → chunk-W7GIQTJV.cjs.map} +1 -1
  77. package/dist/{chunk-KLJEK547.js → chunk-WHJXRLFD.js} +14 -3
  78. package/dist/chunk-WHJXRLFD.js.map +1 -0
  79. package/dist/{chunk-YQANC7HQ.js → chunk-X4F6VVEJ.js} +3 -3
  80. package/dist/{chunk-YQANC7HQ.js.map → chunk-X4F6VVEJ.js.map} +1 -1
  81. package/dist/{chunk-ZNOD4VZT.cjs → chunk-XI6JOG76.cjs} +46 -46
  82. package/dist/{chunk-ZNOD4VZT.cjs.map → chunk-XI6JOG76.cjs.map} +1 -1
  83. package/dist/{chunk-K2SOC3XF.cjs → chunk-XUEROLSB.cjs} +70 -19
  84. package/dist/chunk-XUEROLSB.cjs.map +1 -0
  85. package/dist/{chunk-XTATRNUN.cjs → chunk-YTEEZV6J.cjs} +442 -430
  86. package/dist/chunk-YTEEZV6J.cjs.map +1 -0
  87. package/dist/{chunk-XZNPAD6E.js → chunk-ZNLEUL7T.js} +58 -7
  88. package/dist/chunk-ZNLEUL7T.js.map +1 -0
  89. package/dist/{chunk-DNZFOCV7.js → chunk-ZTSO3S4P.js} +3 -3
  90. package/dist/{chunk-DNZFOCV7.js.map → chunk-ZTSO3S4P.js.map} +1 -1
  91. package/dist/diagrams/blockdiagram/index.cjs +6 -6
  92. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  93. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  94. package/dist/diagrams/blockdiagram/index.js +2 -2
  95. package/dist/diagrams/circuit/index.cjs +8 -8
  96. package/dist/diagrams/circuit/index.d.cts +1 -1
  97. package/dist/diagrams/circuit/index.d.ts +1 -1
  98. package/dist/diagrams/circuit/index.js +2 -2
  99. package/dist/diagrams/ecomap/index.cjs +8 -8
  100. package/dist/diagrams/ecomap/index.d.cts +1 -1
  101. package/dist/diagrams/ecomap/index.d.ts +1 -1
  102. package/dist/diagrams/ecomap/index.js +3 -3
  103. package/dist/diagrams/entity/index.cjs +6 -6
  104. package/dist/diagrams/entity/index.d.cts +1 -1
  105. package/dist/diagrams/entity/index.d.ts +1 -1
  106. package/dist/diagrams/entity/index.js +2 -2
  107. package/dist/diagrams/fishbone/index.cjs +8 -8
  108. package/dist/diagrams/fishbone/index.d.cts +1 -1
  109. package/dist/diagrams/fishbone/index.d.ts +1 -1
  110. package/dist/diagrams/fishbone/index.js +2 -2
  111. package/dist/diagrams/flowchart/index.cjs +8 -8
  112. package/dist/diagrams/flowchart/index.d.cts +2 -2
  113. package/dist/diagrams/flowchart/index.d.ts +2 -2
  114. package/dist/diagrams/flowchart/index.js +2 -2
  115. package/dist/diagrams/genogram/index.cjs +10 -10
  116. package/dist/diagrams/genogram/index.d.cts +1 -1
  117. package/dist/diagrams/genogram/index.d.ts +1 -1
  118. package/dist/diagrams/genogram/index.js +3 -3
  119. package/dist/diagrams/ladder/index.cjs +6 -6
  120. package/dist/diagrams/ladder/index.d.cts +1 -1
  121. package/dist/diagrams/ladder/index.d.ts +1 -1
  122. package/dist/diagrams/ladder/index.js +2 -2
  123. package/dist/diagrams/logic/index.cjs +6 -6
  124. package/dist/diagrams/logic/index.d.cts +1 -1
  125. package/dist/diagrams/logic/index.d.ts +1 -1
  126. package/dist/diagrams/logic/index.js +2 -2
  127. package/dist/diagrams/orgchart/index.cjs +7 -7
  128. package/dist/diagrams/orgchart/index.d.cts +1 -1
  129. package/dist/diagrams/orgchart/index.d.ts +1 -1
  130. package/dist/diagrams/orgchart/index.js +2 -2
  131. package/dist/diagrams/pedigree/index.cjs +8 -8
  132. package/dist/diagrams/pedigree/index.d.cts +1 -1
  133. package/dist/diagrams/pedigree/index.d.ts +1 -1
  134. package/dist/diagrams/pedigree/index.js +3 -3
  135. package/dist/diagrams/phylo/index.cjs +7 -7
  136. package/dist/diagrams/phylo/index.d.cts +1 -1
  137. package/dist/diagrams/phylo/index.d.ts +1 -1
  138. package/dist/diagrams/phylo/index.js +2 -2
  139. package/dist/diagrams/sld/index.cjs +6 -6
  140. package/dist/diagrams/sld/index.d.cts +1 -1
  141. package/dist/diagrams/sld/index.d.ts +1 -1
  142. package/dist/diagrams/sld/index.js +2 -2
  143. package/dist/diagrams/sociogram/index.cjs +7 -7
  144. package/dist/diagrams/sociogram/index.d.cts +1 -1
  145. package/dist/diagrams/sociogram/index.d.ts +1 -1
  146. package/dist/diagrams/sociogram/index.js +3 -3
  147. package/dist/diagrams/timing/index.cjs +5 -5
  148. package/dist/diagrams/timing/index.d.cts +1 -1
  149. package/dist/diagrams/timing/index.d.ts +1 -1
  150. package/dist/diagrams/timing/index.js +2 -2
  151. package/dist/diagrams/venn/index.cjs +9 -9
  152. package/dist/diagrams/venn/index.d.cts +1 -1
  153. package/dist/diagrams/venn/index.d.ts +1 -1
  154. package/dist/diagrams/venn/index.js +2 -2
  155. package/dist/{index-ivhNGsyU.d.cts → index-BrLxEzSQ.d.cts} +1 -1
  156. package/dist/{index-CUwp4GXI.d.ts → index-dWDwG6BW.d.ts} +1 -1
  157. package/dist/index.cjs +41 -41
  158. package/dist/index.d.cts +2 -2
  159. package/dist/index.d.ts +2 -2
  160. package/dist/index.js +19 -19
  161. package/dist/react.cjs +20 -20
  162. package/dist/react.cjs.map +1 -1
  163. package/dist/react.js +19 -19
  164. package/dist/react.js.map +1 -1
  165. package/dist/{types-Bl-Pn7Wj.d.cts → types-BtiUg7Gx.d.cts} +24 -3
  166. package/dist/{types-Bl-Pn7Wj.d.ts → types-BtiUg7Gx.d.ts} +24 -3
  167. package/package.json +1 -1
  168. package/dist/chunk-2JDVJRR3.cjs.map +0 -1
  169. package/dist/chunk-3FKS4KQK.cjs.map +0 -1
  170. package/dist/chunk-45KP67RR.js.map +0 -1
  171. package/dist/chunk-B37IKTI7.cjs.map +0 -1
  172. package/dist/chunk-H2OEUBPO.js.map +0 -1
  173. package/dist/chunk-HDKDQAEQ.cjs.map +0 -1
  174. package/dist/chunk-K2SOC3XF.cjs.map +0 -1
  175. package/dist/chunk-KLJEK547.js.map +0 -1
  176. package/dist/chunk-MCFQAUQV.cjs.map +0 -1
  177. package/dist/chunk-MJGDP3CS.cjs.map +0 -1
  178. package/dist/chunk-NNU4RGT3.js.map +0 -1
  179. package/dist/chunk-OC22GGQN.js.map +0 -1
  180. package/dist/chunk-SQKLKBBK.cjs.map +0 -1
  181. package/dist/chunk-TYCHEOQX.js.map +0 -1
  182. package/dist/chunk-UGCUNADI.js.map +0 -1
  183. package/dist/chunk-VLMK7MQK.js.map +0 -1
  184. package/dist/chunk-XTATRNUN.cjs.map +0 -1
  185. package/dist/chunk-XZNPAD6E.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkXTATRNUN_cjs = require('./chunk-XTATRNUN.cjs');
3
+ var chunkYTEEZV6J_cjs = require('./chunk-YTEEZV6J.cjs');
4
4
 
5
5
  // src/ai/registry.ts
6
6
  var DIAGRAM_REGISTRY = [
@@ -483,6 +483,25 @@ var EXAMPLES = [
483
483
  "dsl": 'genogram "BRCA1 Family"\n I_1 [male, 1930, 1995, deceased]\n I_2 [female, 1932, 1990, deceased, conditions: ovarian_cancer(full, #B388FF)]\n I_1 -- I_2\n II_1 [female, 1955, conditions: breast_cancer(full, #EC407A)]\n II_2 [male, 1958]\n II_3 [female, 1960]\n II_1 -- II_4 [male, 1954]\n III_1 [female, 1985, index, conditions: breast_cancer(full, #EC407A)]\n III_2 [male, 1988]',
484
484
  "notes": "## Scenario\n\nA family history genogram for hereditary breast/ovarian cancer, documented at the initial genetic counseling intake before formal pedigree analysis. For standardized clinical pedigree notation (NSGC), use the Pedigree diagram type instead.\n\n## Annotation key\n\n- `conditions: ovarian_cancer(full)` / `conditions: breast_cancer(full)` \u2014 medical conditions filling the symbol; color is optional hex\n- `deceased` with birth and death years \u2014 marks individuals with a slash and date range\n- `index` \u2014 marks the proband who triggered the clinical referral\n\n## How to read\n\nThe maternal grandmother (I_2) had ovarian cancer and is deceased. Her daughter (II_1) developed breast cancer. The proband (III_1, index) is a third-generation female with breast cancer \u2014 the inheritance pattern spanning three generations justifies BRCA genetic testing."
485
485
  },
486
+ {
487
+ "slug": "genogram-foster-care",
488
+ "diagram": "genogram",
489
+ "title": "Foster care / child protection",
490
+ "description": "Foster-care genogram for a real LATAM child-protection case \u2014 biological parents (cohabitation ended), abuse, current foster placement (dotted secondary link), unknown-count siblings, and a maternal uncle as known-relative-with-unknown-ancestry.",
491
+ "standard": "McGoldrick 2020 + Bennett 2022 (adopted-out / dual-parent convention)",
492
+ "tags": [
493
+ "foster-care",
494
+ "dual-parent",
495
+ "abuse",
496
+ "sibling-of",
497
+ "unknown-siblings",
498
+ "latam"
499
+ ],
500
+ "complexity": 3,
501
+ "featured": true,
502
+ "dsl": 'genogram "Familia Isa\xEDas"\n victor [male, label: "V\xEDctor Seguel"]\n monica [female, label: "M\xF3nica Barrientos"]\n victor ~/~ monica\n ?\n isaias [male, 2020, age: 6, label: "Isa\xEDas", index]\n pablo_sr [male, label: "Don Pablo"]\n priscila [female, label: "Do\xF1a Priscila"]\n pablo_sr -- priscila\n pablo_jr [male, label: "Pablo (jr)"]\n alanis [female, label: "Alanis"]\n isaias [foster]\n tio_materno [male, label: "T\xEDo materno", sibling-of: monica]\n victor -physical-abuse-> isaias\n monica -physical-abuse-> isaias\n tio_materno -nevermet- isaias',
503
+ "notes": '## Scenario\n\nA foster-care social worker in Chile is preparing the case file for Isa\xEDas, a 6-year-old boy removed from his biological parents (V\xEDctor and M\xF3nica) due to physical abuse from both. He currently lives with foster parents Don Pablo and Do\xF1a Priscila, who have two biological children of their own. The case file mentions Isa\xEDas has siblings whose names and ages are unknown, and a maternal uncle who is a potential reunification resource but currently has no contact.\n\nA judge or psychologist receiving this diagram must, at a glance, correctly conclude:\n\n1. Isa\xEDas is the **biological son** of V\xEDctor and M\xF3nica \u2014 solid parent-child line down from the bio couple.\n2. He **currently lives** with Don Pablo and Do\xF1a Priscila as a foster child \u2014 *secondary dotted link* from the foster couple, drawn without pulling Isa\xEDas away from his bio-parent position.\n3. He was **removed due to physical abuse** from both bio parents \u2014 directional red zigzag arrows.\n4. The **maternal uncle** is M\xF3nica\'s brother (`sibling-of: monica`) with **no current relationship** to Isa\xEDas \u2014 dashed bracket between M\xF3nica and T\xEDo + `nevermet` line.\n5. Isa\xEDas has **unknown-count siblings** still with the bio parents \u2014 single `?` diamond placeholder.\n6. **Isa\xEDas is the index person** \u2014 concentric outer border highlight.\n\n## Annotation key\n\n- `~/~` \u2014 cohabitation ended (never-married); standard for LATAM caseloads where bio parents lived together unmarried and the relationship has broken. Distinct from `-x-` divorce (no marriage) and `-/-` separation (still married).\n- Re-declaring `isaias [foster]` under the foster couple after declaring him under the bio couple \u2192 engine treats the second declaration as a **secondary "current caregiver" link** (dotted), preserving all attributes from the first declaration.\n- `?` on a child line \u2192 a single diamond with `?` glyph meaning "\u22651 siblings, count and identities unknown" (standard pedigree convention).\n- `[sibling-of: monica]` \u2192 places T\xEDo materno on M\xF3nica\'s generation with a dashed bracket between them, **without** synthesizing phantom maternal grandparents.\n- `-physical-abuse->` \u2192 directional red arrow; the `>` indicates the perpetrator (left side) and victim (right side).\n\n## Why this matters\n\nA genogram engine that quietly rendered Isa\xEDas as a third biological child of Don Pablo + Do\xF1a Priscila \u2014 or dropped his sex and label when the `[foster]` redeclaration overwrote the original \u2014 would invert the case story. This example exercises every fix from the 2026-04 foster-care brief: dual-parent rendering, same-id merge, sibling-of, cohabiting-ended, and the unknown-siblings placeholder.'
504
+ },
486
505
  {
487
506
  "slug": "genogram-medical-history",
488
507
  "diagram": "genogram",
@@ -940,7 +959,7 @@ var EXAMPLES = [
940
959
  var SYNTAX = {
941
960
  "genogram": {
942
961
  "title": "Genogram",
943
- "content": '## 1. Your first genogram\n\nThe smallest clinically useful genogram: two parents, one child.\n\n```\ngenogram\n alice [female, 1980]\n bob [male, 1978]\n alice -- bob "m. 2005"\n carol [female, 2008]\n```\n\nFour rules cover 80% of usage:\n\n1. Start with the keyword `genogram`, optionally followed by a quoted title.\n2. Declare each person on their own line: `id [attributes]`. Attributes go in square brackets, comma-separated.\n3. Connect two people with a **couple operator** \u2014 `--` (marriage) here; see \xA74.1 for all six. A trailing quoted string is the relationship label.\n4. **Indent under the couple line** to add their children.\n\n> Comments must be on their own line, starting with `#`. Trailing inline comments (`bob [male, 1978] # ...`) are not supported and will break the parser \u2014 see \xA78.\n\n---\n\n## 2. Individuals\n\nAn individual line is `id [attr1, attr2, \u2026]`. Attributes are comma-separated, order-independent, all optional.\n\n**ID rules.** Must match `[a-zA-Z][a-zA-Z0-9_-]*`. IDs are case-insensitive internally but preserve their original casing as the display label (override with `label:"\u2026"`).\n\n**Attributes accepted by the parser today:**\n\n| Attribute | Values | Effect |\n|---|---|---|\n| Sex | `male`, `female`, `unknown`, `other` | Shape: square, circle, diamond, diamond |\n| Status | `deceased`, `stillborn`, `miscarriage`, `abortion` | Visual modifier (X-out, scaled shape, etc.) |\n| Birth year | 4-digit number, e.g. `1980` | First 4-digit token = birth year |\n| Death year | 4-digit number after birth, e.g. `1980, 2055` | Second 4-digit token = death year |\n| `index` | flag | Concentric shape = identified patient |\n| `age:N` | e.g. `age:42` | Age shown inside shape |\n| `death:YYYY` | e.g. `death:2020` | Explicit death year |\n| `label:"\u2026"` | e.g. `label:"Dr. Smith"` | Display label override |\n| `conditions:\u2026` | see \xA75 | Medical/psychological conditions |\n| `key:value` | any custom | Stored as metadata |\n\n```\ngenogram\n grandma [female, 1920, 2002, deceased]\n dad [male, 1950, age:74]\n me [male, 1985, index]\n daughter [female, 2012, label:"Em"]\n```\n\n---\n\n## 3. Shapes\n\n| Visual | Sex value | Meaning |\n|---|---|---|\n| \u2610 Square | `male` | Male |\n| \u25CB Circle | `female` | Female |\n| \u25C7 Diamond | `unknown`, `other`, *or* attribute omitted | Unknown / unspecified |\n\nStatus modifiers layer on top of the base shape:\n\n```\ngenogram\n alive [male, 1960]\n passed [male, 1930, 2010, deceased]\n stillborn_child [unknown, stillborn]\n lost [unknown, miscarriage]\n```\n\n---\n\n## 4. Connections\n\n### 4.1 Couple operators\n\nThe parser tries these in order. The first one that matches wins \u2014 so `-x-` beats `--`.\n\n| Operator | Type | Example | Meaning |\n|---|---|---|---|\n| `-x-` | divorced | `a -x- b` | Divorce |\n| `-/-` | separated | `a -/- b` | Separation |\n| `-o-` | engaged | `a -o- b` | Engagement |\n| `==` | consanguineous | `a == b` | Blood-related couple |\n| `--` | married | `a -- b` | Marriage |\n| `~` | cohabiting | `a ~ b` | Cohabiting / LTR |\n\nA trailing quoted string becomes the relationship label (`a -- b "m. 2005"`).\n\n### 4.2 Inline individual on the right side\n\nIf the right-hand person hasn\'t been declared yet, you can declare them in-place:\n\n```\ngenogram\n ann [female, 1970]\n ann -- ben [male, 1968] "m. 1995"\n kim [female, 1997]\n```\n\n### 4.3 Children (indented under a couple)\n\nIndentation under a couple line = "these are the children of this couple." Any indent greater than the couple\'s indent works; by convention use 2 more spaces. Children are rendered in order of declaration (render also sorts by birth year when present).\n\n```\ngenogram\n dad [male, 1950]\n mom [female, 1952]\n dad -- mom\n eldest [male, 1975]\n middle [female, 1978, adopted]\n twin_a [male, 1985, twin-identical]\n twin_b [male, 1985, twin-identical]\n```\n\n**Special child attributes:**\n\n| Attribute | Effect |\n|---|---|\n| `adopted` | Adoption line style |\n| `foster` | Foster relationship |\n| `twin-identical` | Grouped with other `twin-identical` children of the same couple |\n| `twin-fraternal` | Grouped with other `twin-fraternal` children |\n\n### 4.4 Emotional relationships\n\nSeparate line, parser pattern `A -TYPE- B` (non-directional) or `A -TYPE-> B` (directional). An optional quoted label goes at the end. **Both individuals must already be declared** before the emotional line.\n\n```\nharry -cutoff- petunia # non-directional\nharry -hostile- dudley "since 1991"\nuncle -abuse-> nephew # directional (arrow)\n```\n\nAll 32 types the parser accepts today:\n\n| Category | Types |\n|---|---|\n| Positive / close | `harmony`, `close`, `bestfriends`, `love`, `inlove`, `friendship` |\n| Negative / hostile | `hostile`, `conflict`, `enmity`, `distant-hostile`, `cutoff` |\n| Ambivalent | `close-hostile`, `fused`, `fused-hostile` |\n| Distance | `distant`, `normal`, `nevermet` |\n| Abuse *(directional)* | `abuse`, `physical-abuse`, `emotional-abuse`, `sexual-abuse`, `neglect` |\n| Control *(directional)* | `manipulative`, `controlling`, `jealous` |\n| Special | `focused`, `focused-neg`, `distrust`, `admirer`, `limerence` |\n\n```\ngenogram\n dad [male, 1950]\n son [male, 1985]\n daughter [female, 1988]\n dad -close- daughter\n dad -conflict- son\n son -cutoff- dad "since 2010"\n```\n\n---\n\n## 5. Medical conditions\n\nSyntax: `conditions: name(fill) [+ name(fill, #color)]\u2026`\n\n```\nfather [male, 1945, conditions: heart(full, #E53935)]\nmother [female, 1948, conditions: diabetes(half-left) + anxiety(half-right, #26A69A)]\n```\n\n- **`name`** \u2014 any identifier you choose (displayed in legend/tooltip).\n- **`fill`** \u2014 required, controls which region of the shape is colored. See table below.\n- **`color`** \u2014 optional hex. Default depends on the renderer theme.\n- Multiple conditions are joined with `+`. Each needs its own `(fill)`.\n\n**Fill positions:**\n\n| `fill` value | Region |\n|---|---|\n| `full` | Entire shape |\n| `half-left` / `half-right` | Left / right half |\n| `half-top` / `half-bottom` | Top / bottom half |\n| `quad-tl` / `quad-tr` / `quad-bl` / `quad-br` | One quadrant |\n| `striped` | Diagonal stripe pattern (asymptomatic carrier) |\n| `dotted` | Dot pattern |\n\n```\ngenogram\n dad [male, 1950, conditions: heart(full, #E53935)]\n mom [female, 1952, conditions: diabetes(half-left) + depression(half-right, #5C6BC0)]\n dad -- mom\n son [male, 1980, conditions: carrier(striped)]\n```\n\n---\n\n## 6. Labels & comments\n\n- **Title:** `genogram "Smith Family"` \u2014 first line only.\n- **Person label override:** `alice [female, label:"Dr. Alice Smith"]`.\n- **Relationship label:** trailing quoted string on a couple or emotional line \u2014 `alice -- bob "m. 2005"`.\n- **Comments:** `#` at the start of a line (after leading whitespace). Inline comments are **not** supported.\n\n```\ngenogram "Smith Family"\n # this line is a comment \u2014 fine\n alice [female, 1980] # \u2190 THIS trailing comment breaks the parser\n```\n\n---\n\n## 7. Reserved words & escaping\n\n**Reserved at line start:** `genogram` (header keyword).\n\n**Reserved operator tokens** inside a line \u2014 avoid using these sequences in IDs:\n`--`, `~`, `==`, `-x-`, `-/-`, `-o-`, and any `-<type>-` / `-<type>->` matching an emotional-relationship type.\n\n**Strings with spaces** must be double-quoted: titles, labels, `label:"\u2026"`. Single quotes and backticks are not recognized.\n\n---\n\n## 8. Common mistakes\n\nReal parser errors, what triggers them, and how to fix.\n\n| You wrote | Parser says | Fix |\n|---|---|---|\n| `alex [nonbinary, 1995]` | `Unknown property \'nonbinary\'` | Use `unknown` or `other` (nonbinary is \xA713 Roadmap) |\n| `alice [female, transgender]` | `Unknown property \'transgender\'` | Not yet parseable (\xA713 Roadmap) |\n| `dad -- mom` \u2190 followed by `child [male, 2010]` at the **same indent** | Child parsed as a new top-level individual, not as their child | Indent the child line deeper than the couple line (2 spaces is enough) |\n| `A -- B` where `A` was never declared | `Unknown individual \'A\'` | Declare `A [sex, year]` on a line above |\n| `father -- mother "married"` on line 1 (no `genogram` header) | `Expected "genogram" header` | Start the file with `genogram` or `genogram "Title"` |\n| `conditions: diabetes + cancer` (no parens) | `Invalid condition format \'diabetes\'` | Add fill: `conditions: diabetes(half-left) + cancer(half-right)` |\n| `[triplet-identical]` | `Unknown property \'triplet-identical\'` | Triplets not yet parseable (\xA713 Roadmap) |\n| `dad -- mom # first marriage` | Trailing inline `#` comment is treated as part of the label / errors | Move the comment to its own line |\n\n---\n\n## 9. Grammar (EBNF)\n\n```text\ndocument = header (blank | comment | individual | couple-block | emotional)*\n\nheader = "genogram" ( WS quoted-string )? NEWLINE\nquoted-string = \'"\' any-char-but-quote* \'"\'\n\nindividual = INDENT id ( "[" attrs "]" )? NEWLINE\ncouple-block = INDENT id WS coupleOp WS right-side ( WS quoted-string )? NEWLINE\n ( deeper-indent child )*\nchild = INDENT id ( "[" attrs "]" )? NEWLINE\nright-side = id ( "[" attrs "]" )?\n\nemotional = INDENT id WS "-" type "-" id ( WS quoted-string )? NEWLINE\n | INDENT id WS "-" type "->" id ( WS quoted-string )? NEWLINE\n\ncoupleOp = "-x-" | "-/-" | "-o-" | "==" | "--" | "~"\ntype = "harmony" | "close" | "bestfriends" | "love" | "inlove"\n | "friendship" | "hostile" | "conflict" | "enmity"\n | "distant-hostile" | "cutoff" | "close-hostile" | "fused"\n | "fused-hostile" | "distant" | "normal" | "nevermet"\n | "abuse" | "physical-abuse" | "emotional-abuse"\n | "sexual-abuse" | "neglect" | "manipulative" | "controlling"\n | "jealous" | "focused" | "focused-neg" | "distrust"\n | "admirer" | "limerence"\n\nid = [a-zA-Z] [a-zA-Z0-9_-]*\nattrs = attr ("," attr)*\nattr = "male" | "female" | "unknown" | "other"\n | "deceased" | "stillborn" | "miscarriage" | "abortion"\n | "adopted" | "foster" | "twin-identical" | "twin-fraternal"\n | "index"\n | digit digit digit digit // year\n | "age" ":" digits\n | "death" ":" digit digit digit digit\n | "label" ":" quoted-string\n | "conditions" ":" condition ("+" condition)*\n | key ":" value // custom\ncondition = name "(" fill ("," "#" hex)? ")"\nfill = "full" | "half-left" | "half-right" | "half-top" | "half-bottom"\n | "quad-tl" | "quad-tr" | "quad-bl" | "quad-br"\n | "striped" | "dotted"\n\ncomment = INDENT "#" any NEWLINE\n```\n\nAuthoritative source: `src/diagrams/genogram/parser.ts`. If this diverges from the parser, the parser wins \u2014 please open an issue.\n\n---'
962
+ "content": '## 1. Your first genogram\n\nThe smallest clinically useful genogram: two parents, one child.\n\n```\ngenogram\n alice [female, 1980]\n bob [male, 1978]\n alice -- bob "m. 2005"\n carol [female, 2008]\n```\n\nFour rules cover 80% of usage:\n\n1. Start with the keyword `genogram`, optionally followed by a quoted title.\n2. Declare each person on their own line: `id [attributes]`. Attributes go in square brackets, comma-separated.\n3. Connect two people with a **couple operator** \u2014 `--` (marriage) here; see \xA74.1 for all six. A trailing quoted string is the relationship label.\n4. **Indent under the couple line** to add their children.\n\n> Comments must be on their own line, starting with `#`. Trailing inline comments (`bob [male, 1978] # ...`) are not supported and will break the parser \u2014 see \xA78.\n\n---\n\n## 2. Individuals\n\nAn individual line is `id [attr1, attr2, \u2026]`. Attributes are comma-separated, order-independent, all optional.\n\n**ID rules.** Must match `[a-zA-Z][a-zA-Z0-9_-]*`. IDs are case-insensitive internally but preserve their original casing as the display label (override with `label:"\u2026"`).\n\n**Attributes accepted by the parser today:**\n\n| Attribute | Values | Effect |\n|---|---|---|\n| Sex | `male`, `female`, `unknown`, `other` | Shape: square, circle, diamond, diamond |\n| Status | `deceased`, `stillborn`, `miscarriage`, `abortion` | Visual modifier (X-out, scaled shape, etc.) |\n| Birth year | 4-digit number, e.g. `1980` | First 4-digit token = birth year |\n| Death year | 4-digit number after birth, e.g. `1980, 2055` | Second 4-digit token = death year |\n| `index` | flag | Concentric shape = identified patient |\n| `unknown-siblings` | flag | Diamond with `?` \u2014 placeholder for \u22651 siblings of unknown count |\n| `age:N` | e.g. `age:42` | Age shown inside shape |\n| `death:YYYY` | e.g. `death:2020` | Explicit death year |\n| `label:"\u2026"` | e.g. `label:"Dr. Smith"` | Display label override |\n| `sibling-of:<id>` | e.g. `sibling-of:monica` | Pins same generation as the referenced sibling, draws a dashed bracket \u2014 for known relatives with unknown ancestry. |\n| `conditions:\u2026` | see \xA75 | Medical/psychological conditions |\n| `key:value` | any custom | Stored as metadata |\n\n```\ngenogram\n grandma [female, 1920, 2002, deceased]\n dad [male, 1950, age:74]\n me [male, 1985, index]\n daughter [female, 2012, label:"Em"]\n```\n\n---\n\n## 3. Shapes\n\n| Visual | Sex value | Meaning |\n|---|---|---|\n| \u2610 Square | `male` | Male |\n| \u25CB Circle | `female` | Female |\n| \u25C7 Diamond | `unknown`, `other`, *or* attribute omitted | Unknown / unspecified |\n\nStatus modifiers layer on top of the base shape:\n\n```\ngenogram\n alive [male, 1960]\n passed [male, 1930, 2010, deceased]\n stillborn_child [unknown, stillborn]\n lost [unknown, miscarriage]\n```\n\n---\n\n## 4. Connections\n\n### 4.1 Couple operators\n\nThe parser tries these in order. The first one that matches wins \u2014 so `-x-` beats `--`.\n\n| Operator | Type | Example | Meaning |\n|---|---|---|---|\n| `-x-` | divorced | `a -x- b` | Divorce |\n| `-/-` | separated | `a -/- b` | Separation (married) |\n| `-//` | separated | `a -// b` | Separation (alias for `-/-`) |\n| `-o-` | engaged | `a -o- b` | Engagement |\n| `==` | consanguineous | `a == b` | Blood-related couple |\n| `--` | married | `a -- b` | Marriage |\n| `~` | cohabiting | `a ~ b` | Cohabiting / LTR (current) |\n| `~/~` | cohabiting-ended | `a ~/~ b` | Cohabitation has ended (never-married). Common in LATAM child-protection caseloads where biological parents lived together unmarried and the relationship has since broken \u2014 distinct from `-x-` divorce (no marriage) and `-/-` separation (still married). |\n\nA trailing quoted string becomes the relationship label (`a -- b "m. 2005"`).\n\n### 4.2 Inline individual on the right side\n\nIf the right-hand person hasn\'t been declared yet, you can declare them in-place:\n\n```\ngenogram\n ann [female, 1970]\n ann -- ben [male, 1968] "m. 1995"\n kim [female, 1997]\n```\n\n### 4.3 Children (indented under a couple)\n\nIndentation under a couple line = "these are the children of this couple." Any indent greater than the couple\'s indent works; by convention use 2 more spaces. Children are rendered in order of declaration (render also sorts by birth year when present).\n\n```\ngenogram\n dad [male, 1950]\n mom [female, 1952]\n dad -- mom\n eldest [male, 1975]\n middle [female, 1978, adopted]\n twin_a [male, 1985, twin-identical]\n twin_b [male, 1985, twin-identical]\n```\n\n**Special child attributes:**\n\n| Attribute | Effect |\n|---|---|\n| `adopted` | Adoption line style |\n| `foster` | Foster relationship |\n| `guardian` | Guardianship by a non-parent relative (e.g. grandparent custody). Same primitive as `foster` \u2014 drawn as a secondary "current caregiver" link when biological parents are also declared. |\n| `twin-identical` | Grouped with other `twin-identical` children of the same couple |\n| `twin-fraternal` | Grouped with other `twin-fraternal` children |\n| `unknown-siblings` | Single diamond with `?` glyph \u2014 "\u22651 siblings, count and identities unknown" (pedigree convention). |\n\n### 4.3.1 Dual-parent families (foster, adoption, guardianship)\n\nChildren placed with a non-biological caregiver while biological parents are still part of the case can be declared under both couples. **Declare the child with full attributes the first time** (under the biological couple), then **redeclare with just `[foster]` / `[adopted]` / `[guardian]`** under the current caregiver. The first declaration wins layout; the second is drawn as a secondary dotted "current caregiver" link that does not pull the child away from their biological position.\n\n```\ngenogram "Foster placement"\n bp1 [male, label: "Bio dad"]\n bp2 [female, label: "Bio mom"]\n bp1 ~/~ bp2\n child [male, 2018, index]\n fp1 [male, label: "Foster dad"]\n fp2 [female, label: "Foster mom"]\n fp1 -- fp2\n own [male, 2010]\n child [foster]\n```\n\nThe same primitive serves adoption (closed/open), foster placement, and guardianship by a relative \u2014 only the keyword differs. Re-declaration **merges** non-conflicting attributes (sex, birth year, label, `index` marker) into the original; declaring a conflicting `male` vs `female` raises a parse error rather than silently overwriting.\n\n### 4.3.2 Unknown-count siblings\n\nWhen a case file mentions "the child has siblings" without naming them, use either the `?` shorthand on its own line, or `[unknown-siblings]` on a regular id. Both render as a single diamond with a "?" glyph \u2014 the standard pedigree marker for "one or more siblings, identities unknown."\n\n```\ngenogram\n dad [male]\n mom [female]\n dad -- mom\n ?\n known_kid [male, 2018]\n```\n\n### 4.3.3 Sibling-of (known relative, unknown ancestry)\n\nTo express "X is a sibling of Y" without inventing parents, use the `sibling-of: <id>` property. The renderer pins X to Y\'s generation and draws a dashed bracket above the two \u2014 the standard pedigree convention for a known relative whose ancestry is not part of the case.\n\n```\ngenogram\n monica [female, 1990]\n uncle [male, label: "T\xEDo materno", sibling-of: monica]\n```\n\n### 4.4 Emotional relationships\n\nSeparate line, parser pattern `A -TYPE- B` (non-directional) or `A -TYPE-> B` (directional). An optional quoted label goes at the end. **Both individuals must already be declared** before the emotional line.\n\n```\nharry -cutoff- petunia # non-directional\nharry -hostile- dudley "since 1991"\nuncle -abuse-> nephew # directional (arrow)\n```\n\nAll 32 types the parser accepts today:\n\n| Category | Types |\n|---|---|\n| Positive / close | `harmony`, `close`, `bestfriends`, `love`, `inlove`, `friendship` |\n| Negative / hostile | `hostile`, `conflict`, `enmity`, `distant-hostile`, `cutoff` |\n| Ambivalent | `close-hostile`, `fused`, `fused-hostile` |\n| Distance | `distant`, `normal`, `nevermet` |\n| Abuse *(directional)* | `abuse`, `physical-abuse`, `emotional-abuse`, `sexual-abuse`, `neglect` |\n| Control *(directional)* | `manipulative`, `controlling`, `jealous` |\n| Special | `focused`, `focused-neg`, `distrust`, `admirer`, `limerence` |\n\n```\ngenogram\n dad [male, 1950]\n son [male, 1985]\n daughter [female, 1988]\n dad -close- daughter\n dad -conflict- son\n son -cutoff- dad "since 2010"\n```\n\n---\n\n## 5. Medical conditions\n\nSyntax: `conditions: name(fill) [+ name(fill, #color)]\u2026`\n\n```\nfather [male, 1945, conditions: heart(full, #E53935)]\nmother [female, 1948, conditions: diabetes(half-left) + anxiety(half-right, #26A69A)]\n```\n\n- **`name`** \u2014 any identifier you choose (displayed in legend/tooltip).\n- **`fill`** \u2014 required, controls which region of the shape is colored. See table below.\n- **`color`** \u2014 optional hex. Default depends on the renderer theme.\n- Multiple conditions are joined with `+`. Each needs its own `(fill)`.\n\n**Fill positions:**\n\n| `fill` value | Region |\n|---|---|\n| `full` | Entire shape |\n| `half-left` / `half-right` | Left / right half |\n| `half-top` / `half-bottom` | Top / bottom half |\n| `quad-tl` / `quad-tr` / `quad-bl` / `quad-br` | One quadrant |\n| `striped` | Diagonal stripe pattern (asymptomatic carrier) |\n| `dotted` | Dot pattern |\n\n```\ngenogram\n dad [male, 1950, conditions: heart(full, #E53935)]\n mom [female, 1952, conditions: diabetes(half-left) + depression(half-right, #5C6BC0)]\n dad -- mom\n son [male, 1980, conditions: carrier(striped)]\n```\n\n---\n\n## 6. Labels & comments\n\n- **Title:** `genogram "Smith Family"` \u2014 first line only.\n- **Person label override:** `alice [female, label:"Dr. Alice Smith"]`.\n- **Relationship label:** trailing quoted string on a couple or emotional line \u2014 `alice -- bob "m. 2005"`.\n- **Comments:** `#` at the start of a line (after leading whitespace). Inline comments are **not** supported.\n\n```\ngenogram "Smith Family"\n # this line is a comment \u2014 fine\n alice [female, 1980] # \u2190 THIS trailing comment breaks the parser\n```\n\n---\n\n## 7. Reserved words & escaping\n\n**Reserved at line start:** `genogram` (header keyword).\n\n**Reserved operator tokens** inside a line \u2014 avoid using these sequences in IDs:\n`--`, `~`, `~/~`, `==`, `-x-`, `-/-`, `-//`, `-o-`, and any `-<type>-` / `-<type>->` matching an emotional-relationship type.\n\n**Reserved id `?`** \u2014 bare `?` on a child line auto-generates a synthetic placeholder with the `unknown-siblings` marker. Do not use `?` as a real id.\n\n**Strings with spaces** must be double-quoted: titles, labels, `label:"\u2026"`. Single quotes and backticks are not recognized.\n\n---\n\n## 8. Common mistakes\n\nReal parser errors, what triggers them, and how to fix.\n\n| You wrote | Parser says | Fix |\n|---|---|---|\n| `alex [nonbinary, 1995]` | `Unknown property \'nonbinary\'` | Use `unknown` or `other` (nonbinary is \xA713 Roadmap) |\n| `alice [female, transgender]` | `Unknown property \'transgender\'` | Not yet parseable (\xA713 Roadmap) |\n| `dad -- mom` \u2190 followed by `child [male, 2010]` at the **same indent** | Child parsed as a new top-level individual, not as their child | Indent the child line deeper than the couple line (2 spaces is enough) |\n| `A -- B` where `A` was never declared | `Unknown individual \'A\'` | Declare `A [sex, year]` on a line above |\n| `father -- mother "married"` on line 1 (no `genogram` header) | `Expected "genogram" header` | Start the file with `genogram` or `genogram "Title"` |\n| `conditions: diabetes + cancer` (no parens) | `Invalid condition format \'diabetes\'` | Add fill: `conditions: diabetes(half-left) + cancer(half-right)` |\n| `[triplet-identical]` | `Unknown property \'triplet-identical\'` | Triplets not yet parseable (\xA713 Roadmap) |\n| `dad -- mom # first marriage` | Trailing inline `#` comment is treated as part of the label / errors | Move the comment to its own line |\n| Same id declared twice with different sex (`x [male]` then `x [female]`) | `Conflicting sex for \'x\': previously \'male\', now \'female\'` | Pick one or rename one of the ids |\n| `child [foster]` redeclared but biological parents never declared | `child` becomes the foster couple\'s regular child (no secondary link drawn) | This is intentional \u2014 secondary links require an existing primary parent-child rel from a prior declaration |\n\n---\n\n## 9. Grammar (EBNF)\n\n```text\ndocument = header (blank | comment | individual | couple-block | emotional)*\n\nheader = "genogram" ( WS quoted-string )? NEWLINE\nquoted-string = \'"\' any-char-but-quote* \'"\'\n\nindividual = INDENT id ( "[" attrs "]" )? NEWLINE\ncouple-block = INDENT id WS coupleOp WS right-side ( WS quoted-string )? NEWLINE\n ( deeper-indent child )*\nchild = INDENT id ( "[" attrs "]" )? NEWLINE\n | INDENT "?" NEWLINE // unknown-count sibling shorthand\nright-side = id ( "[" attrs "]" )?\n\nemotional = INDENT id WS "-" type "-" id ( WS quoted-string )? NEWLINE\n | INDENT id WS "-" type "->" id ( WS quoted-string )? NEWLINE\n\ncoupleOp = "~/~" | "-//" | "-x-" | "-/-" | "-o-" | "==" | "--" | "~"\ntype = "harmony" | "close" | "bestfriends" | "love" | "inlove"\n | "friendship" | "hostile" | "conflict" | "enmity"\n | "distant-hostile" | "cutoff" | "close-hostile" | "fused"\n | "fused-hostile" | "distant" | "normal" | "nevermet"\n | "abuse" | "physical-abuse" | "emotional-abuse"\n | "sexual-abuse" | "neglect" | "manipulative" | "controlling"\n | "jealous" | "focused" | "focused-neg" | "distrust"\n | "admirer" | "limerence"\n\nid = [a-zA-Z] [a-zA-Z0-9_-]*\nattrs = attr ("," attr)*\nattr = "male" | "female" | "unknown" | "other"\n | "deceased" | "stillborn" | "miscarriage" | "abortion"\n | "adopted" | "foster" | "guardian"\n | "twin-identical" | "twin-fraternal"\n | "index" | "unknown-siblings"\n | digit digit digit digit // year\n | "age" ":" digits\n | "death" ":" digit digit digit digit\n | "label" ":" quoted-string\n | "sibling-of" ":" id\n | "conditions" ":" condition ("+" condition)*\n | key ":" value // custom\ncondition = name "(" fill ("," "#" hex)? ")"\nfill = "full" | "half-left" | "half-right" | "half-top" | "half-bottom"\n | "quad-tl" | "quad-tr" | "quad-bl" | "quad-br"\n | "striped" | "dotted"\n\ncomment = INDENT "#" any NEWLINE\n```\n\nAuthoritative source: `src/diagrams/genogram/parser.ts`. If this diverges from the parser, the parser wins \u2014 please open an issue.\n\n---'
944
963
  },
945
964
  "ecomap": {
946
965
  "title": "Ecomap",
@@ -1104,7 +1123,7 @@ function getExamples(type, opts = {}) {
1104
1123
  function validateDsl(type, dsl) {
1105
1124
  const config = type ? { type } : void 0;
1106
1125
  try {
1107
- chunkXTATRNUN_cjs.parse(dsl, config);
1126
+ chunkYTEEZV6J_cjs.parse(dsl, config);
1108
1127
  return { ok: true, type: type ?? resolveTypeFromText(dsl) };
1109
1128
  } catch (err) {
1110
1129
  return {
@@ -1120,7 +1139,7 @@ function renderDsl(type, dsl, options = {}) {
1120
1139
  ...type ? { type } : {}
1121
1140
  };
1122
1141
  try {
1123
- const svg = chunkXTATRNUN_cjs.render(dsl, config);
1142
+ const svg = chunkYTEEZV6J_cjs.render(dsl, config);
1124
1143
  return { ok: true, type: type ?? resolveTypeFromText(dsl), svg };
1125
1144
  } catch (err) {
1126
1145
  return {
@@ -1144,5 +1163,5 @@ exports.getSyntax = getSyntax;
1144
1163
  exports.listDiagrams = listDiagrams;
1145
1164
  exports.renderDsl = renderDsl;
1146
1165
  exports.validateDsl = validateDsl;
1147
- //# sourceMappingURL=chunk-SQKLKBBK.cjs.map
1148
- //# sourceMappingURL=chunk-SQKLKBBK.cjs.map
1166
+ //# sourceMappingURL=chunk-RODV6PC4.cjs.map
1167
+ //# sourceMappingURL=chunk-RODV6PC4.cjs.map