schematex 0.3.0 → 0.3.3

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 (186) 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-HDKDQAEQ.cjs → chunk-3WNW5Y7P.cjs} +54 -2
  12. package/dist/chunk-3WNW5Y7P.cjs.map +1 -0
  13. package/dist/{chunk-B6INLQBU.cjs → chunk-55UEHL57.cjs} +46 -46
  14. package/dist/{chunk-B6INLQBU.cjs.map → chunk-55UEHL57.cjs.map} +1 -1
  15. package/dist/{chunk-JDTB7IKL.js → chunk-5U2W3HQA.js} +3 -3
  16. package/dist/{chunk-JDTB7IKL.js.map → chunk-5U2W3HQA.js.map} +1 -1
  17. package/dist/{chunk-ULYRO2KY.cjs → chunk-5UCXMYE7.cjs} +44 -44
  18. package/dist/{chunk-ULYRO2KY.cjs.map → chunk-5UCXMYE7.cjs.map} +1 -1
  19. package/dist/{chunk-UGCUNADI.js → chunk-66XQBGX7.js} +35 -16
  20. package/dist/chunk-66XQBGX7.js.map +1 -0
  21. package/dist/{chunk-45KP67RR.js → chunk-6TIN33CA.js} +5 -5
  22. package/dist/chunk-6TIN33CA.js.map +1 -0
  23. package/dist/{chunk-NNU4RGT3.js → chunk-6YUP3QMA.js} +39 -27
  24. package/dist/chunk-6YUP3QMA.js.map +1 -0
  25. package/dist/{chunk-COLTVQWR.cjs → chunk-7EWFVNYD.cjs} +25 -25
  26. package/dist/{chunk-COLTVQWR.cjs.map → chunk-7EWFVNYD.cjs.map} +1 -1
  27. package/dist/{chunk-RP5UATRA.js → chunk-AC3XH3LB.js} +4 -4
  28. package/dist/{chunk-RP5UATRA.js.map → chunk-AC3XH3LB.js.map} +1 -1
  29. package/dist/{chunk-XTATRNUN.cjs → chunk-APV4AWQ5.cjs} +442 -430
  30. package/dist/chunk-APV4AWQ5.cjs.map +1 -0
  31. package/dist/{chunk-NZH4GWE6.cjs → chunk-AVIKQZSX.cjs} +37 -37
  32. package/dist/{chunk-NZH4GWE6.cjs.map → chunk-AVIKQZSX.cjs.map} +1 -1
  33. package/dist/{chunk-X7RPFTTR.cjs → chunk-CWZKP3CJ.cjs} +26 -26
  34. package/dist/{chunk-X7RPFTTR.cjs.map → chunk-CWZKP3CJ.cjs.map} +1 -1
  35. package/dist/{chunk-TYCHEOQX.js → chunk-FIVUMDLF.js} +49 -24
  36. package/dist/chunk-FIVUMDLF.js.map +1 -0
  37. package/dist/{chunk-DNZFOCV7.js → chunk-FO7BLCEW.js} +3 -3
  38. package/dist/{chunk-DNZFOCV7.js.map → chunk-FO7BLCEW.js.map} +1 -1
  39. package/dist/{chunk-OC22GGQN.js → chunk-GLFBHQSQ.js} +54 -4
  40. package/dist/chunk-GLFBHQSQ.js.map +1 -0
  41. package/dist/{chunk-XZNPAD6E.js → chunk-GVCPFBAV.js} +59 -8
  42. package/dist/chunk-GVCPFBAV.js.map +1 -0
  43. package/dist/{chunk-B37IKTI7.cjs → chunk-HOI6QKC6.cjs} +97 -47
  44. package/dist/chunk-HOI6QKC6.cjs.map +1 -0
  45. package/dist/{chunk-A5D2IMOX.cjs → chunk-IAEABLIV.cjs} +47 -47
  46. package/dist/{chunk-A5D2IMOX.cjs.map → chunk-IAEABLIV.cjs.map} +1 -1
  47. package/dist/{chunk-5YYAYW67.js → chunk-IQRRZPVZ.js} +3 -3
  48. package/dist/{chunk-5YYAYW67.js.map → chunk-IQRRZPVZ.js.map} +1 -1
  49. package/dist/{chunk-VLMK7MQK.js → chunk-MNOO7STY.js} +25 -6
  50. package/dist/chunk-MNOO7STY.js.map +1 -0
  51. package/dist/{chunk-ZNOD4VZT.cjs → chunk-N56YC75X.cjs} +46 -46
  52. package/dist/{chunk-ZNOD4VZT.cjs.map → chunk-N56YC75X.cjs.map} +1 -1
  53. package/dist/{chunk-YQANC7HQ.js → chunk-PAG3BNIV.js} +3 -3
  54. package/dist/{chunk-YQANC7HQ.js.map → chunk-PAG3BNIV.js.map} +1 -1
  55. package/dist/{chunk-QSQX77S2.cjs → chunk-PG6TDGKI.cjs} +21 -21
  56. package/dist/{chunk-QSQX77S2.cjs.map → chunk-PG6TDGKI.cjs.map} +1 -1
  57. package/dist/{chunk-WYFXOXVK.cjs → chunk-Q5OFA4I2.cjs} +35 -35
  58. package/dist/{chunk-WYFXOXVK.cjs.map → chunk-Q5OFA4I2.cjs.map} +1 -1
  59. package/dist/{chunk-MJGDP3CS.cjs → chunk-QOLBWCF5.cjs} +488 -109
  60. package/dist/chunk-QOLBWCF5.cjs.map +1 -0
  61. package/dist/{chunk-MCFQAUQV.cjs → chunk-QXL7AY2H.cjs} +58 -39
  62. package/dist/chunk-QXL7AY2H.cjs.map +1 -0
  63. package/dist/chunk-SYYBKDL7.js +122 -0
  64. package/dist/chunk-SYYBKDL7.js.map +1 -0
  65. package/dist/{chunk-H2OEUBPO.js → chunk-TQU44E46.js} +441 -62
  66. package/dist/chunk-TQU44E46.js.map +1 -0
  67. package/dist/{chunk-FCGHV6ZK.js → chunk-U3KRKXF7.js} +4 -4
  68. package/dist/{chunk-FCGHV6ZK.js.map → chunk-U3KRKXF7.js.map} +1 -1
  69. package/dist/{chunk-3YZ6FPQW.cjs → chunk-UDGU73RL.cjs} +131 -131
  70. package/dist/{chunk-3YZ6FPQW.cjs.map → chunk-UDGU73RL.cjs.map} +1 -1
  71. package/dist/{chunk-U6L3FAML.js → chunk-UDJ2KN2A.js} +3 -3
  72. package/dist/{chunk-U6L3FAML.js.map → chunk-UDJ2KN2A.js.map} +1 -1
  73. package/dist/{chunk-FE6GAUNW.js → chunk-UT4TIDAA.js} +5 -5
  74. package/dist/{chunk-FE6GAUNW.js.map → chunk-UT4TIDAA.js.map} +1 -1
  75. package/dist/{chunk-SQKLKBBK.cjs → chunk-UWRTV6IV.cjs} +27 -8
  76. package/dist/chunk-UWRTV6IV.cjs.map +1 -0
  77. package/dist/{chunk-NB56L5QK.js → chunk-WTF6JXHN.js} +4 -4
  78. package/dist/{chunk-NB56L5QK.js.map → chunk-WTF6JXHN.js.map} +1 -1
  79. package/dist/{chunk-ZNDIGQJD.js → chunk-X5QJO4ZD.js} +3 -3
  80. package/dist/{chunk-ZNDIGQJD.js.map → chunk-X5QJO4ZD.js.map} +1 -1
  81. package/dist/{chunk-M5B2UUNW.js → chunk-XV2DTN6G.js} +4 -4
  82. package/dist/{chunk-M5B2UUNW.js.map → chunk-XV2DTN6G.js.map} +1 -1
  83. package/dist/{chunk-K2SOC3XF.cjs → chunk-YUPG2M3I.cjs} +71 -20
  84. package/dist/chunk-YUPG2M3I.cjs.map +1 -0
  85. package/dist/{chunk-2JDVJRR3.cjs → chunk-ZCW7YH3C.cjs} +28 -28
  86. package/dist/chunk-ZCW7YH3C.cjs.map +1 -0
  87. package/dist/{chunk-3FKS4KQK.cjs → chunk-ZFNZ2FYI.cjs} +88 -63
  88. package/dist/chunk-ZFNZ2FYI.cjs.map +1 -0
  89. package/dist/{chunk-5AEN2PLB.cjs → chunk-ZZJDGGC3.cjs} +33 -33
  90. package/dist/{chunk-5AEN2PLB.cjs.map → chunk-ZZJDGGC3.cjs.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-CUwp4GXI.d.ts → index-D3u6vcA4.d.ts} +1 -1
  156. package/dist/{index-ivhNGsyU.d.cts → index-bdfj6FpQ.d.cts} +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-DnU2UlWz.d.cts} +26 -3
  166. package/dist/{types-Bl-Pn7Wj.d.ts → types-DnU2UlWz.d.ts} +26 -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 +0 -71
  176. package/dist/chunk-KLJEK547.js.map +0 -1
  177. package/dist/chunk-MCFQAUQV.cjs.map +0 -1
  178. package/dist/chunk-MJGDP3CS.cjs.map +0 -1
  179. package/dist/chunk-NNU4RGT3.js.map +0 -1
  180. package/dist/chunk-OC22GGQN.js.map +0 -1
  181. package/dist/chunk-SQKLKBBK.cjs.map +0 -1
  182. package/dist/chunk-TYCHEOQX.js.map +0 -1
  183. package/dist/chunk-UGCUNADI.js.map +0 -1
  184. package/dist/chunk-VLMK7MQK.js.map +0 -1
  185. package/dist/chunk-XTATRNUN.cjs.map +0 -1
  186. package/dist/chunk-XZNPAD6E.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"names":["useMemo","render","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAMA,cAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAOC,yBAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.cjs","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/react.tsx"],"names":["useMemo","render","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAMA,cAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAOC,yBAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.cjs","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
package/dist/react.js CHANGED
@@ -1,23 +1,23 @@
1
- import { render } from './chunk-NNU4RGT3.js';
2
- import './chunk-FCGHV6ZK.js';
3
- import './chunk-XZNPAD6E.js';
4
- import './chunk-UGCUNADI.js';
5
- import './chunk-U6L3FAML.js';
6
- import './chunk-FE6GAUNW.js';
7
- import './chunk-M5B2UUNW.js';
8
- import './chunk-ZNDIGQJD.js';
9
- import './chunk-JDTB7IKL.js';
10
- import './chunk-TYCHEOQX.js';
11
- import './chunk-H2OEUBPO.js';
12
- import './chunk-NB56L5QK.js';
13
- import './chunk-OC22GGQN.js';
14
- import './chunk-YQANC7HQ.js';
15
- import './chunk-RP5UATRA.js';
16
- import './chunk-DNZFOCV7.js';
17
- import './chunk-45KP67RR.js';
18
- import './chunk-5YYAYW67.js';
1
+ import { render } from './chunk-6YUP3QMA.js';
2
+ import './chunk-U3KRKXF7.js';
3
+ import './chunk-GVCPFBAV.js';
4
+ import './chunk-66XQBGX7.js';
5
+ import './chunk-UDJ2KN2A.js';
6
+ import './chunk-UT4TIDAA.js';
7
+ import './chunk-XV2DTN6G.js';
8
+ import './chunk-X5QJO4ZD.js';
9
+ import './chunk-5U2W3HQA.js';
10
+ import './chunk-FIVUMDLF.js';
11
+ import './chunk-TQU44E46.js';
12
+ import './chunk-WTF6JXHN.js';
13
+ import './chunk-GLFBHQSQ.js';
14
+ import './chunk-PAG3BNIV.js';
15
+ import './chunk-AC3XH3LB.js';
16
+ import './chunk-FO7BLCEW.js';
17
+ import './chunk-6TIN33CA.js';
18
+ import './chunk-IQRRZPVZ.js';
19
19
  import './chunk-2VNMKOUO.js';
20
- import './chunk-KLJEK547.js';
20
+ import './chunk-SYYBKDL7.js';
21
21
  import { useMemo } from 'react';
22
22
  import { jsx } from 'react/jsx-runtime';
23
23
 
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.js","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/react.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqCO,SAAS,gBAAA,CAAiB;AAAA,EAC/B,GAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA0B;AACxB,EAAA,MAAM,GAAA,GAAM,QAAQ,MAAM;AACxB,IAAA,IAAI;AACF,MAAA,OAAO,OAAO,GAAA,EAAK,EAAE,MAAM,KAAA,EAAO,UAAA,EAAY,SAAS,CAAA;AAAA,IACzD,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,CAAA,GAAI,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AAC5D,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EAEF,GAAG,CAAC,GAAA,EAAK,MAAM,KAAA,EAAO,UAAA,EAAY,OAAO,CAAC,CAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA;AAAA,MACA,KAAA;AAAA,MAEA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,GAAA,IAAO,EAAA;AAAG;AAAA,GAC/C;AAEJ","file":"react.js","sourcesContent":["/**\n * React component for Schematex diagrams.\n *\n * @example\n * ```tsx\n * import { SchematexDiagram } from 'schematex/react';\n *\n * <SchematexDiagram\n * dsl=\"genogram\\n alice [female]\"\n * theme=\"monochrome\"\n * className=\"my-diagram\"\n * />\n * ```\n */\n\nimport { useMemo } from \"react\";\nimport { render, type SchematexConfig } from \"./core/api\";\n\nexport interface SchematexDiagramProps {\n /** DSL text to render */\n dsl: string;\n /** Diagram type override (auto-detected from DSL if omitted) */\n type?: SchematexConfig[\"type\"];\n /** Theme name: 'default' | 'monochrome' | 'dark' */\n theme?: string;\n /** Font family override */\n fontFamily?: string;\n /** Canvas padding in px */\n padding?: number;\n /** className for the wrapper div */\n className?: string;\n /** Inline style for the wrapper div */\n style?: React.CSSProperties;\n /** Called when render throws a parse/layout error */\n onError?: (error: Error) => void;\n}\n\nexport function SchematexDiagram({\n dsl,\n type,\n theme,\n fontFamily,\n padding,\n className,\n style,\n onError,\n}: SchematexDiagramProps) {\n const svg = useMemo(() => {\n try {\n return render(dsl, { type, theme, fontFamily, padding });\n } catch (err) {\n const e = err instanceof Error ? err : new Error(String(err));\n onError?.(e);\n return null;\n }\n // onError excluded — a fresh callback shouldn't bust the memo.\n }, [dsl, type, theme, fontFamily, padding]);\n\n return (\n <div\n className={className}\n style={style}\n // SVG is generated by our own renderer — safe\n dangerouslySetInnerHTML={{ __html: svg ?? \"\" }}\n />\n );\n}\n"]}
@@ -110,6 +110,20 @@ interface Individual {
110
110
  annotations?: Record<string, string>;
111
111
  /** Whether this individual is external/non-family (dashed border) */
112
112
  external?: boolean;
113
+ /**
114
+ * Optional shape override. By default the shape is derived from `sex`
115
+ * (male=square, female=circle, other=diamond). Some kinship/anthropology
116
+ * conventions use triangles for males, etc. This field lets the DSL request
117
+ * a specific shape regardless of sex.
118
+ */
119
+ shape?: "square" | "circle" | "diamond" | "triangle" | "triangle-down";
120
+ /**
121
+ * Pedigree convention for "known relative, unknown ancestry":
122
+ * id of another individual whose generation this person shares as a sibling.
123
+ * No phantom parents are synthesized — layout pins generation, renderer
124
+ * draws a dashed bracket between the two.
125
+ */
126
+ siblingOf?: string;
113
127
  /** Custom properties for extensibility */
114
128
  properties?: Record<string, string>;
115
129
  }
@@ -117,7 +131,7 @@ type Sex = "male" | "female" | "unknown" | "other" | "nonbinary" | "intersex";
117
131
  type IndividualStatus = "alive" | "deceased" | "stillborn" | "miscarriage" | "abortion" | "pregnancy" | "sab" | "tab" | "ectopic";
118
132
  type GeneticStatus = "unaffected" | "affected" | "carrier" | "carrier-x" | "obligate-carrier" | "presymptomatic";
119
133
  type ChildType = "biological" | "adopted" | "adopted-in" | "adopted-out" | "foster" | "step" | "surrogate" | "donor" | "donor-egg" | "donor-sperm" | "donor-embryo";
120
- type IndividualMarker = "proband" | "consultand" | "evaluated" | "index-person" | "transgender" | "no-children" | "infertile";
134
+ type IndividualMarker = "proband" | "consultand" | "evaluated" | "index-person" | "transgender" | "no-children" | "infertile" | "unknown-siblings";
121
135
  interface Condition {
122
136
  label: string;
123
137
  /** Fill pattern for condition display */
@@ -246,7 +260,7 @@ interface PhyloLayoutNode {
246
260
  /** Radius from center (for circular/unrooted layouts) */
247
261
  radius?: number;
248
262
  }
249
- type RelationshipType = "married" | "divorced" | "separated" | "engaged" | "cohabiting" | "domestic-partnership" | "consanguineous" | "parent-child" | "adopted" | "foster" | "twin-identical" | "twin-fraternal" | "harmony" | "close" | "bestfriends" | "love" | "inlove" | "friendship" | "hostile" | "conflict" | "enmity" | "distant-hostile" | "cutoff" | "close-hostile" | "fused" | "fused-hostile" | "distant" | "normal" | "nevermet" | "abuse" | "physical-abuse" | "emotional-abuse" | "sexual-abuse" | "neglect" | "manipulative" | "controlling" | "jealous" | "focused" | "focused-neg" | "distrust" | "admirer" | "limerence" | "strong" | "moderate" | "weak" | "stressful" | "stressful-strong" | "conflictual" | "broken" | "reciprocal";
263
+ type RelationshipType = "married" | "divorced" | "separated" | "engaged" | "cohabiting" | "cohabiting-ended" | "domestic-partnership" | "consanguineous" | "parent-child" | "adopted" | "foster" | "twin-identical" | "twin-fraternal" | "harmony" | "close" | "bestfriends" | "love" | "inlove" | "friendship" | "hostile" | "conflict" | "enmity" | "distant-hostile" | "cutoff" | "close-hostile" | "fused" | "fused-hostile" | "distant" | "normal" | "nevermet" | "abuse" | "physical-abuse" | "emotional-abuse" | "sexual-abuse" | "neglect" | "manipulative" | "controlling" | "jealous" | "focused" | "focused-neg" | "distrust" | "admirer" | "limerence" | "strong" | "moderate" | "weak" | "stressful" | "stressful-strong" | "conflictual" | "broken" | "reciprocal";
250
264
  interface Relationship {
251
265
  type: RelationshipType;
252
266
  from: string;
@@ -258,6 +272,13 @@ interface Relationship {
258
272
  weight?: number;
259
273
  /** For ecomap: energy flow direction */
260
274
  energyFlow?: "from" | "to" | "mutual" | "none";
275
+ /**
276
+ * Genogram parent-child only. When true, this link is data-true but
277
+ * does NOT dominate layout — used for foster/adopted/guardian "current
278
+ * caregiver" relationships when biological parents already claim the
279
+ * child structurally. Renderer draws it as a dotted line.
280
+ */
281
+ secondary?: boolean;
261
282
  }
262
283
  interface LayoutResult {
263
284
  width: number;
@@ -385,7 +406,7 @@ interface LogicGateAST {
385
406
  modules?: LogicGateModule[];
386
407
  metadata?: Record<string, string>;
387
408
  }
388
- type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
409
+ type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "terminal_block" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
389
410
  type CircuitDirection = "right" | "left" | "up" | "down";
390
411
  interface CircuitComponent {
391
412
  id: string;
@@ -778,6 +799,8 @@ interface FlowchartLayoutEdge {
778
799
  y: number;
779
800
  textAnchor?: "start" | "middle" | "end";
780
801
  };
802
+ /** Position in `ast.edges` (declaration order) — used by linkStyle index targeting */
803
+ index?: number;
781
804
  }
782
805
  interface FlowchartLayoutCluster {
783
806
  subgraph: FlowchartSubgraph;
@@ -110,6 +110,20 @@ interface Individual {
110
110
  annotations?: Record<string, string>;
111
111
  /** Whether this individual is external/non-family (dashed border) */
112
112
  external?: boolean;
113
+ /**
114
+ * Optional shape override. By default the shape is derived from `sex`
115
+ * (male=square, female=circle, other=diamond). Some kinship/anthropology
116
+ * conventions use triangles for males, etc. This field lets the DSL request
117
+ * a specific shape regardless of sex.
118
+ */
119
+ shape?: "square" | "circle" | "diamond" | "triangle" | "triangle-down";
120
+ /**
121
+ * Pedigree convention for "known relative, unknown ancestry":
122
+ * id of another individual whose generation this person shares as a sibling.
123
+ * No phantom parents are synthesized — layout pins generation, renderer
124
+ * draws a dashed bracket between the two.
125
+ */
126
+ siblingOf?: string;
113
127
  /** Custom properties for extensibility */
114
128
  properties?: Record<string, string>;
115
129
  }
@@ -117,7 +131,7 @@ type Sex = "male" | "female" | "unknown" | "other" | "nonbinary" | "intersex";
117
131
  type IndividualStatus = "alive" | "deceased" | "stillborn" | "miscarriage" | "abortion" | "pregnancy" | "sab" | "tab" | "ectopic";
118
132
  type GeneticStatus = "unaffected" | "affected" | "carrier" | "carrier-x" | "obligate-carrier" | "presymptomatic";
119
133
  type ChildType = "biological" | "adopted" | "adopted-in" | "adopted-out" | "foster" | "step" | "surrogate" | "donor" | "donor-egg" | "donor-sperm" | "donor-embryo";
120
- type IndividualMarker = "proband" | "consultand" | "evaluated" | "index-person" | "transgender" | "no-children" | "infertile";
134
+ type IndividualMarker = "proband" | "consultand" | "evaluated" | "index-person" | "transgender" | "no-children" | "infertile" | "unknown-siblings";
121
135
  interface Condition {
122
136
  label: string;
123
137
  /** Fill pattern for condition display */
@@ -246,7 +260,7 @@ interface PhyloLayoutNode {
246
260
  /** Radius from center (for circular/unrooted layouts) */
247
261
  radius?: number;
248
262
  }
249
- type RelationshipType = "married" | "divorced" | "separated" | "engaged" | "cohabiting" | "domestic-partnership" | "consanguineous" | "parent-child" | "adopted" | "foster" | "twin-identical" | "twin-fraternal" | "harmony" | "close" | "bestfriends" | "love" | "inlove" | "friendship" | "hostile" | "conflict" | "enmity" | "distant-hostile" | "cutoff" | "close-hostile" | "fused" | "fused-hostile" | "distant" | "normal" | "nevermet" | "abuse" | "physical-abuse" | "emotional-abuse" | "sexual-abuse" | "neglect" | "manipulative" | "controlling" | "jealous" | "focused" | "focused-neg" | "distrust" | "admirer" | "limerence" | "strong" | "moderate" | "weak" | "stressful" | "stressful-strong" | "conflictual" | "broken" | "reciprocal";
263
+ type RelationshipType = "married" | "divorced" | "separated" | "engaged" | "cohabiting" | "cohabiting-ended" | "domestic-partnership" | "consanguineous" | "parent-child" | "adopted" | "foster" | "twin-identical" | "twin-fraternal" | "harmony" | "close" | "bestfriends" | "love" | "inlove" | "friendship" | "hostile" | "conflict" | "enmity" | "distant-hostile" | "cutoff" | "close-hostile" | "fused" | "fused-hostile" | "distant" | "normal" | "nevermet" | "abuse" | "physical-abuse" | "emotional-abuse" | "sexual-abuse" | "neglect" | "manipulative" | "controlling" | "jealous" | "focused" | "focused-neg" | "distrust" | "admirer" | "limerence" | "strong" | "moderate" | "weak" | "stressful" | "stressful-strong" | "conflictual" | "broken" | "reciprocal";
250
264
  interface Relationship {
251
265
  type: RelationshipType;
252
266
  from: string;
@@ -258,6 +272,13 @@ interface Relationship {
258
272
  weight?: number;
259
273
  /** For ecomap: energy flow direction */
260
274
  energyFlow?: "from" | "to" | "mutual" | "none";
275
+ /**
276
+ * Genogram parent-child only. When true, this link is data-true but
277
+ * does NOT dominate layout — used for foster/adopted/guardian "current
278
+ * caregiver" relationships when biological parents already claim the
279
+ * child structurally. Renderer draws it as a dotted line.
280
+ */
281
+ secondary?: boolean;
261
282
  }
262
283
  interface LayoutResult {
263
284
  width: number;
@@ -385,7 +406,7 @@ interface LogicGateAST {
385
406
  modules?: LogicGateModule[];
386
407
  metadata?: Record<string, string>;
387
408
  }
388
- type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
409
+ type CircuitComponentType = "resistor" | "potentiometer" | "rheostat" | "thermistor_ntc" | "thermistor_ptc" | "ldr" | "varistor" | "fuse" | "fuse_slow" | "capacitor" | "electrolytic_cap" | "variable_cap" | "inductor" | "inductor_iron" | "inductor_ferrite" | "variable_inductor" | "ferrite_bead" | "crystal" | "transformer" | "diode" | "zener" | "schottky" | "led" | "photodiode" | "varactor" | "tvs_diode" | "bridge_rectifier" | "npn" | "pnp" | "darlington_npn" | "darlington_pnp" | "nmos" | "pmos" | "nmos_depletion" | "jfet_n" | "jfet_p" | "igbt" | "scr" | "triac" | "diac" | "phototransistor" | "optocoupler" | "opamp" | "comparator" | "schmitt_buffer" | "tri_state_buffer" | "instrumentation_amp" | "generic_ic" | "voltage_regulator" | "dc_dc_converter" | "555_timer" | "terminal_block" | "voltage_source" | "current_source" | "ac_source" | "battery" | "vcc" | "ground" | "gnd_signal" | "gnd_chassis" | "gnd_digital" | "switch_spst" | "switch_spdt" | "switch_dpdt" | "push_no" | "push_nc" | "relay_coil" | "relay_no" | "relay_nc" | "motor" | "speaker" | "microphone" | "buzzer" | "ammeter" | "voltmeter" | "wattmeter" | "oscilloscope" | "wire" | "dot" | "label" | "port" | "test_point" | "no_connect" | "antenna";
389
410
  type CircuitDirection = "right" | "left" | "up" | "down";
390
411
  interface CircuitComponent {
391
412
  id: string;
@@ -778,6 +799,8 @@ interface FlowchartLayoutEdge {
778
799
  y: number;
779
800
  textAnchor?: "start" | "middle" | "end";
780
801
  };
802
+ /** Position in `ast.edges` (declaration order) — used by linkStyle index targeting */
803
+ index?: number;
781
804
  }
782
805
  interface FlowchartLayoutCluster {
783
806
  subgraph: FlowchartSubgraph;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "schematex",
3
- "version": "0.3.0",
3
+ "version": "0.3.3",
4
4
  "description": "Every diagram a doctor, engineer, or lawyer would actually use. 22 industry-standard diagrams (genogram, pedigree, ladder logic, SLD, P&ID, UML state diagram, phylo, fishbone, entity structure, ...) from a text DSL. Free, fully open source, made for AI. Pure SVG, zero dependencies.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/diagrams/timing/parser.ts","../src/diagrams/timing/renderer.ts","../src/diagrams/timing/index.ts"],"names":["text","title","el","group","svgRoot","desc","defs"],"mappings":"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","file":"chunk-2JDVJRR3.cjs","sourcesContent":["import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\n\nexport class TimingParseError extends Error {\n constructor(\n message: string,\n public line?: number,\n public column?: number,\n public source?: string\n ) {\n super(line !== undefined ? `Line ${line}: ${message}` : message);\n this.name = \"TimingParseError\";\n }\n}\n\nconst VALID_STATES = /^[01xzpPnNhHlLudD=\\.23456789]+$/;\n\nfunction splitDataList(rest: string): { wave: string; data: string[] } {\n // Wave string is first token; remaining tokens are quoted strings or a `data: [...]` form\n const trimmed = rest.trim();\n // Accept: `wave data: [\"a\",\"b\"]` or `wave \"a\" \"b\" \"c\"`\n const m = trimmed.match(/^(\\S+)\\s*(.*)$/);\n if (!m) return { wave: trimmed, data: [] };\n const wave = m[1];\n const remainder = m[2].trim();\n if (!remainder) return { wave, data: [] };\n\n const data: string[] = [];\n // Strip `data:` prefix + optional brackets\n let r = remainder.replace(/^data\\s*:\\s*/, \"\").trim();\n if (r.startsWith(\"[\") && r.endsWith(\"]\")) r = r.slice(1, -1);\n const re = /\"([^\"]*)\"/g;\n let match: RegExpExecArray | null;\n while ((match = re.exec(r)) !== null) data.push(match[1]);\n return { wave, data };\n}\n\nexport function parseTiming(text: string): TimingAST {\n const lines = text.split(\"\\n\").map((l) => l.replace(/\\r$/, \"\"));\n const signals: Array<TimingSignal | TimingGroup> = [];\n let title: string | undefined;\n let hscale: number | undefined;\n let currentGroup: TimingGroup | null = null;\n\n for (let i = 0; i < lines.length; i++) {\n const raw = lines[i] ?? \"\";\n const lineNo = i + 1;\n const line = raw.trim();\n if (!line || line.startsWith(\"#\")) continue;\n\n // Header: `timing \"title\" [hscale: 2]`\n if (/^timing\\b/i.test(line)) {\n const titleMatch = line.match(/\"([^\"]*)\"/);\n if (titleMatch) title = titleMatch[1];\n const hs = line.match(/hscale\\s*:\\s*(\\d+(?:\\.\\d+)?)/);\n if (hs) hscale = parseFloat(hs[1]);\n continue;\n }\n\n // Group start: `[GroupName]` or `group \"name\" {`\n const groupOpen = line.match(/^\\[([^\\]]+)\\]$/) || line.match(/^group\\s+\"([^\"]+)\"\\s*\\{?$/);\n if (groupOpen) {\n currentGroup = { label: groupOpen[1], signals: [] };\n signals.push(currentGroup);\n continue;\n }\n if (line === \"}\") {\n currentGroup = null;\n continue;\n }\n if (line === \"---\") {\n currentGroup = null;\n continue;\n }\n\n // Signal: `NAME: wave ...`\n const sigMatch = line.match(/^([^:]+):\\s*(.+)$/);\n if (sigMatch) {\n const name = sigMatch[1].trim();\n const { wave, data } = splitDataList(sigMatch[2]);\n if (!VALID_STATES.test(wave)) {\n throw new TimingParseError(`Invalid wave string \"${wave}\" for signal ${name}`, lineNo, undefined, line);\n }\n const signal: TimingSignal = { name, wave, data: data.length ? data : undefined };\n if (currentGroup) currentGroup.signals.push(signal);\n else signals.push(signal);\n continue;\n }\n }\n\n return { type: \"timing\", title, hscale, signals };\n}\n","import type { TimingAST, TimingSignal, TimingGroup } from \"../../core/types\";\nimport { svgRoot, defs, group, el, text, title as titleEl, desc } from \"../../core/svg\";\n\nconst NAME_W = 120;\nconst SIG_H = 36;\nconst PAD_TOP = 12;\nconst PAD_BOT = 12;\nconst PAD_V = 6; // vertical padding inside band for rail spacing\nconst DEFAULT_PW = 40;\nconst GROUP_LABEL_H = 22;\n\ntype FlatRow =\n | { kind: \"signal\"; signal: TimingSignal; indent: number }\n | { kind: \"group\"; label: string; indent: number };\n\nfunction flatten(items: Array<TimingSignal | TimingGroup>, indent = 0): FlatRow[] {\n const out: FlatRow[] = [];\n for (const item of items) {\n if (\"wave\" in item) {\n out.push({ kind: \"signal\", signal: item, indent });\n } else {\n out.push({ kind: \"group\", label: item.label, indent });\n out.push(...flatten(item.signals, indent + 1));\n }\n }\n return out;\n}\n\ninterface WaveCtx {\n pw: number;\n yHi: number;\n yLo: number;\n yMid: number;\n h: number;\n}\n\ntype PrevState = \"hi\" | \"lo\" | \"bus\" | \"z\" | \"x\" | \"none\";\n\nfunction renderWave(signal: TimingSignal, ctx: WaveCtx): { svg: string; labels: string } {\n const { pw, yHi, yLo, yMid } = ctx;\n const wave = signal.wave;\n const paths: string[] = [];\n const busRects: string[] = [];\n const busTexts: string[] = [];\n const xPatchRects: string[] = [];\n const zLines: string[] = [];\n\n let prev: PrevState = \"none\";\n let prevChar = \"\";\n let busStartX = 0;\n let busIndex = 0;\n let dataIdx = 0;\n let linePath = \"\";\n\n const startLine = (x: number, y: number) => {\n if (linePath) paths.push(linePath);\n linePath = `M ${x},${y}`;\n };\n const extendLineTo = (x: number, y: number) => {\n linePath += ` L ${x},${y}`;\n };\n const flushLine = () => {\n if (linePath) {\n paths.push(linePath);\n linePath = \"\";\n }\n };\n\n const closeBus = (x: number) => {\n const start = busStartX;\n const end = x;\n const inset = Math.min(5, (end - start) / 2);\n // Trapezoid outline\n const d = `M ${start + inset},${yHi} L ${end - inset},${yHi} L ${end},${yMid} L ${end - inset},${yLo} L ${start + inset},${yLo} L ${start},${yMid} Z`;\n busRects.push(\n el(\"path\", { class: \"schematex-timing-bus\", d, \"data-bus-index\": String(busIndex) })\n );\n // Data label\n const label = signal.data?.[dataIdx] ?? \"\";\n if (label) {\n busTexts.push(\n text(\n {\n x: (start + end) / 2,\n y: yMid + 4,\n class: \"schematex-timing-bus-label\",\n \"text-anchor\": \"middle\",\n },\n label\n )\n );\n }\n dataIdx++;\n busIndex++;\n };\n\n for (let i = 0; i < wave.length; i++) {\n const ch = wave[i];\n const x = i * pw;\n const xNext = x + pw;\n\n // Handle continuation '.'\n const effective = ch === \".\" ? prevChar : ch;\n\n switch (effective) {\n case \"0\":\n case \"l\":\n case \"L\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yLo);\n } else if (prev === \"hi\") {\n extendLineTo(x, yLo);\n }\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"1\":\n case \"h\":\n case \"H\": {\n if (prev === \"bus\") closeBus(x);\n if (prev === \"x\" || prev === \"z\" || prev === \"none\" || prev === \"bus\") {\n flushLine();\n startLine(x, yHi);\n } else if (prev === \"lo\") {\n extendLineTo(x, yHi);\n }\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"p\":\n case \"P\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n // One-period positive clock: lo→hi at x, hi until midpoint, lo at mid, lo until xNext\n startLine(x, yLo);\n extendLineTo(x, yHi);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(xNext, yLo);\n flushLine();\n prev = \"lo\";\n break;\n }\n case \"n\":\n case \"N\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(x, yLo);\n extendLineTo(x + pw / 2, yLo);\n extendLineTo(x + pw / 2, yHi);\n extendLineTo(xNext, yHi);\n flushLine();\n prev = \"hi\";\n break;\n }\n case \"u\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yLo);\n extendLineTo(xNext, yHi);\n prev = \"hi\";\n break;\n }\n case \"d\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n startLine(x, yHi);\n extendLineTo(xNext, yLo);\n prev = \"lo\";\n break;\n }\n case \"z\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n zLines.push(\n el(\"line\", {\n x1: x,\n y1: yMid,\n x2: xNext,\n y2: yMid,\n class: \"schematex-timing-hiz\",\n })\n );\n prev = \"z\";\n break;\n }\n case \"x\": {\n if (prev === \"bus\") closeBus(x);\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n break;\n }\n case \"=\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\": {\n // Each fresh bus char (not '.') begins a new segment.\n const isContinuation = ch === \".\";\n if (!isContinuation && prev === \"bus\") closeBus(x);\n if (prev !== \"bus\" || !isContinuation) {\n flushLine();\n busStartX = x;\n }\n prev = \"bus\";\n break;\n }\n default: {\n // unknown char -> treat as x\n flushLine();\n xPatchRects.push(\n el(\"rect\", {\n x,\n y: yHi,\n width: pw,\n height: yLo - yHi,\n class: \"schematex-timing-unknown\",\n fill: \"url(#schematex-timing-xhatch)\",\n })\n );\n prev = \"x\";\n }\n }\n\n prevChar = effective;\n }\n\n // Close trailing bus\n if (prev === \"bus\") closeBus(wave.length * pw);\n flushLine();\n\n const waveSvg = paths\n .map((d) => el(\"path\", { class: \"schematex-timing-wave\", d }))\n .concat(xPatchRects, zLines, busRects)\n .join(\"\");\n\n return { svg: waveSvg, labels: busTexts.join(\"\") };\n}\n\nexport function renderTiming(ast: TimingAST): string {\n const pw = DEFAULT_PW * (ast.hscale ?? 1);\n const rows = flatten(ast.signals);\n const maxWaveLen = Math.max(\n 1,\n ...rows.filter((r) => r.kind === \"signal\").map((r) => (r as any).signal.wave.length)\n );\n const waveAreaW = maxWaveLen * pw;\n const width = NAME_W + waveAreaW + 20;\n\n let y = PAD_TOP;\n const rowYs: number[] = [];\n for (const r of rows) {\n rowYs.push(y);\n y += r.kind === \"group\" ? GROUP_LABEL_H : SIG_H;\n }\n const height = y + PAD_BOT + 10;\n\n // Render rows\n const waveSvgs: string[] = [];\n const labelSvgs: string[] = [];\n const nameSvgs: string[] = [];\n const gridLines: string[] = [];\n\n // Grid: vertical period ticks across signal area\n for (let i = 0; i <= maxWaveLen; i++) {\n const xg = NAME_W + i * pw;\n gridLines.push(\n el(\"line\", {\n x1: xg,\n y1: PAD_TOP,\n x2: xg,\n y2: height - PAD_BOT,\n class: \"schematex-timing-grid\",\n })\n );\n }\n\n for (let i = 0; i < rows.length; i++) {\n const row = rows[i];\n const ry = rowYs[i];\n\n if (row.kind === \"group\") {\n nameSvgs.push(\n text(\n {\n x: 6 + row.indent * 10,\n y: ry + GROUP_LABEL_H - 6,\n class: \"schematex-timing-group-label\",\n },\n row.label\n )\n );\n continue;\n }\n\n const signal = row.signal;\n const yHi = ry + PAD_V;\n const yLo = ry + SIG_H - PAD_V;\n const yMid = ry + SIG_H / 2;\n\n // Signal name (right-aligned in name column). `~NAME` or `/NAME` → overlined active-low.\n const activeLow = signal.name.startsWith(\"~\") || signal.name.startsWith(\"/\");\n const displayName = activeLow ? signal.name.slice(1) : signal.name;\n nameSvgs.push(\n text(\n {\n x: NAME_W - 8,\n y: yMid + 4,\n class: activeLow\n ? \"schematex-timing-name schematex-timing-name-activelow\"\n : \"schematex-timing-name\",\n \"text-anchor\": \"end\",\n },\n displayName\n )\n );\n\n const { svg, labels } = renderWave(signal, {\n pw,\n yHi,\n yLo,\n yMid,\n h: SIG_H - 2 * PAD_V,\n });\n\n waveSvgs.push(\n group(\n {\n transform: `translate(${NAME_W}, 0)`,\n \"data-signal\": signal.name,\n },\n [svg]\n )\n );\n labelSvgs.push(\n group({ transform: `translate(${NAME_W}, 0)` }, [labels])\n );\n }\n\n const xhatch = el(\n \"pattern\",\n {\n id: \"schematex-timing-xhatch\",\n patternUnits: \"userSpaceOnUse\",\n width: 6,\n height: 6,\n },\n [\n el(\"rect\", { x: 0, y: 0, width: 6, height: 6, fill: \"#f5f5f5\" }),\n el(\"path\", {\n d: \"M 0,6 L 6,0 M -1,1 L 1,-1 M 5,7 L 7,5\",\n stroke: \"#999\",\n \"stroke-width\": 0.8,\n }),\n ]\n );\n\n const css = `\n.schematex-timing { background: #fff; font-family: system-ui, -apple-system, sans-serif; }\n.schematex-timing-name { font: 12px monospace; fill: #111; }\n.schematex-timing-name-activelow { text-decoration: overline; }\n.schematex-timing-group-label { font: bold 12px sans-serif; fill: #111; }\n.schematex-timing-wave { stroke: #111; stroke-width: 1.75; fill: none; stroke-linejoin: miter; stroke-linecap: square; }\n.schematex-timing-bus { fill: none; stroke: #111; stroke-width: 1.5; }\n.schematex-timing-bus-label { font: 11px monospace; fill: #111; }\n.schematex-timing-unknown { stroke: #555; stroke-width: 0.5; }\n.schematex-timing-hiz { stroke: #555; stroke-width: 1.5; stroke-dasharray: 4 3; }\n.schematex-timing-grid { stroke: #eee; stroke-width: 0.5; }\n`.trim();\n\n return svgRoot(\n {\n class: \"schematex-timing\",\n viewBox: `0 0 ${width} ${height}`,\n width,\n height,\n role: \"img\",\n \"data-diagram-type\": \"timing\",\n },\n [\n titleEl(ast.title ?? \"Timing Diagram\"),\n desc(`Digital timing diagram with ${rows.filter((r) => r.kind === \"signal\").length} signals`),\n defs([xhatch, el(\"style\", {}, css)]),\n group({ class: \"schematex-timing-grid-g\" }, gridLines),\n group({ class: \"schematex-timing-waves\" }, waveSvgs),\n group({ class: \"schematex-timing-labels\" }, labelSvgs),\n group({ class: \"schematex-timing-names\" }, nameSvgs),\n ast.title\n ? text(\n {\n x: width / 2,\n y: 14,\n \"text-anchor\": \"middle\",\n class: \"schematex-timing-title\",\n style: \"font: bold 13px sans-serif; fill: #333;\",\n },\n ast.title\n )\n : \"\",\n ]\n );\n}\n","import type { DiagramPlugin } from \"../../core/types\";\nimport { parseTiming } from \"./parser\";\nimport { renderTiming } from \"./renderer\";\n\nexport const timing: DiagramPlugin = {\n type: \"timing\",\n detect(text: string): boolean {\n const first = text.trim().split(\"\\n\")[0]?.trim().toLowerCase() ?? \"\";\n return first.startsWith(\"timing\");\n },\n parse: parseTiming,\n\n render(text: string): string {\n const ast = parseTiming(text);\n return renderTiming(ast);\n },\n};\n\nexport { parseTiming } from \"./parser\";\nexport { renderTiming } from \"./renderer\";\n"]}