schematex 0.4.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +24 -3
  2. package/dist/ai/ai-sdk.cjs +17 -15
  3. package/dist/ai/ai-sdk.cjs.map +1 -1
  4. package/dist/ai/ai-sdk.d.cts +2 -2
  5. package/dist/ai/ai-sdk.d.ts +2 -2
  6. package/dist/ai/ai-sdk.js +12 -10
  7. package/dist/ai/ai-sdk.js.map +1 -1
  8. package/dist/ai/index.cjs +20 -18
  9. package/dist/ai/index.d.cts +3 -3
  10. package/dist/ai/index.d.ts +3 -3
  11. package/dist/ai/index.js +12 -10
  12. package/dist/{api-BIj9t4Oc.d.cts → api-C5UcmT7n.d.cts} +1 -1
  13. package/dist/{api-BIj9t4Oc.d.ts → api-C5UcmT7n.d.ts} +1 -1
  14. package/dist/browser.cjs +14 -12
  15. package/dist/browser.cjs.map +1 -1
  16. package/dist/browser.d.cts +2 -2
  17. package/dist/browser.d.ts +2 -2
  18. package/dist/browser.js +12 -10
  19. package/dist/browser.js.map +1 -1
  20. package/dist/chunk-2KTQ75LN.js +67 -0
  21. package/dist/chunk-2KTQ75LN.js.map +1 -0
  22. package/dist/chunk-3KRL2EGN.cjs +70 -0
  23. package/dist/chunk-3KRL2EGN.cjs.map +1 -0
  24. package/dist/{chunk-YWDODCW2.js → chunk-3M6T7KB4.js} +60 -14
  25. package/dist/chunk-3M6T7KB4.js.map +1 -0
  26. package/dist/{chunk-OIZ4MYSF.cjs → chunk-3M6WB62Y.cjs} +43 -9
  27. package/dist/chunk-3M6WB62Y.cjs.map +1 -0
  28. package/dist/{chunk-DHHVYSQX.cjs → chunk-3YUUC6RN.cjs} +5145 -295
  29. package/dist/chunk-3YUUC6RN.cjs.map +1 -0
  30. package/dist/{chunk-JDBG5DU2.js → chunk-6OSUNBZY.js} +43 -9
  31. package/dist/chunk-6OSUNBZY.js.map +1 -0
  32. package/dist/{chunk-O5POCPXZ.cjs → chunk-EGSUMHCS.cjs} +21 -10
  33. package/dist/chunk-EGSUMHCS.cjs.map +1 -0
  34. package/dist/{chunk-Z5NGIM4Z.js → chunk-GTDQAN2Z.js} +5134 -287
  35. package/dist/chunk-GTDQAN2Z.js.map +1 -0
  36. package/dist/{chunk-J7JWMQD5.js → chunk-HUPDIRBX.js} +119 -4
  37. package/dist/chunk-HUPDIRBX.js.map +1 -0
  38. package/dist/{chunk-5FF2IT3C.js → chunk-IBRW3UOA.js} +51 -10
  39. package/dist/chunk-IBRW3UOA.js.map +1 -0
  40. package/dist/{chunk-YTLGK5BZ.js → chunk-IM4RCUHA.js} +238 -1788
  41. package/dist/chunk-IM4RCUHA.js.map +1 -0
  42. package/dist/{chunk-LPKVIRYT.js → chunk-JHDR56XO.js} +18 -9
  43. package/dist/chunk-JHDR56XO.js.map +1 -0
  44. package/dist/{chunk-GZY4CJ23.cjs → chunk-N7W5KZK7.cjs} +51 -10
  45. package/dist/chunk-N7W5KZK7.cjs.map +1 -0
  46. package/dist/{chunk-Z5UECSNM.cjs → chunk-NWPCY65Z.cjs} +240 -1790
  47. package/dist/chunk-NWPCY65Z.cjs.map +1 -0
  48. package/dist/chunk-PIV2A3HG.js +55 -0
  49. package/dist/chunk-PIV2A3HG.js.map +1 -0
  50. package/dist/{chunk-E2EJRVWS.cjs → chunk-QTNPMIO2.cjs} +158 -15
  51. package/dist/chunk-QTNPMIO2.cjs.map +1 -0
  52. package/dist/chunk-SBB6C4OP.cjs +57 -0
  53. package/dist/chunk-SBB6C4OP.cjs.map +1 -0
  54. package/dist/{chunk-K6RAUXRQ.cjs → chunk-TZTCIAYW.cjs} +7 -6
  55. package/dist/chunk-TZTCIAYW.cjs.map +1 -0
  56. package/dist/{chunk-KVP7AORH.js → chunk-UFTYX73U.js} +158 -15
  57. package/dist/chunk-UFTYX73U.js.map +1 -0
  58. package/dist/{chunk-6WORZSL3.cjs → chunk-VFZOPRQP.cjs} +60 -14
  59. package/dist/chunk-VFZOPRQP.cjs.map +1 -0
  60. package/dist/{chunk-WHNIK4LK.js → chunk-VJGMEGMR.js} +7 -6
  61. package/dist/chunk-VJGMEGMR.js.map +1 -0
  62. package/dist/{chunk-3MJKJX27.cjs → chunk-VZ5LDNHK.cjs} +18 -9
  63. package/dist/chunk-VZ5LDNHK.cjs.map +1 -0
  64. package/dist/{chunk-2Z543TC3.cjs → chunk-XRCY75UV.cjs} +119 -4
  65. package/dist/chunk-XRCY75UV.cjs.map +1 -0
  66. package/dist/{chunk-6XGSEG3K.js → chunk-ZL5RB4UV.js} +21 -10
  67. package/dist/chunk-ZL5RB4UV.js.map +1 -0
  68. package/dist/diagrams/blockdiagram/index.d.cts +1 -1
  69. package/dist/diagrams/blockdiagram/index.d.ts +1 -1
  70. package/dist/diagrams/circuit/index.cjs +7 -7
  71. package/dist/diagrams/circuit/index.d.cts +1 -1
  72. package/dist/diagrams/circuit/index.d.ts +1 -1
  73. package/dist/diagrams/circuit/index.js +1 -1
  74. package/dist/diagrams/ecomap/index.cjs +7 -6
  75. package/dist/diagrams/ecomap/index.d.cts +1 -1
  76. package/dist/diagrams/ecomap/index.d.ts +1 -1
  77. package/dist/diagrams/ecomap/index.js +2 -1
  78. package/dist/diagrams/entity/index.d.cts +1 -1
  79. package/dist/diagrams/entity/index.d.ts +1 -1
  80. package/dist/diagrams/fishbone/index.cjs +8 -7
  81. package/dist/diagrams/fishbone/index.d.cts +1 -1
  82. package/dist/diagrams/fishbone/index.d.ts +1 -1
  83. package/dist/diagrams/fishbone/index.js +2 -1
  84. package/dist/diagrams/flowchart/index.cjs +8 -7
  85. package/dist/diagrams/flowchart/index.d.cts +2 -2
  86. package/dist/diagrams/flowchart/index.d.ts +2 -2
  87. package/dist/diagrams/flowchart/index.js +2 -1
  88. package/dist/diagrams/genogram/index.cjs +9 -8
  89. package/dist/diagrams/genogram/index.d.cts +1 -1
  90. package/dist/diagrams/genogram/index.d.ts +1 -1
  91. package/dist/diagrams/genogram/index.js +2 -1
  92. package/dist/diagrams/ladder/index.cjs +7 -5
  93. package/dist/diagrams/ladder/index.d.cts +1 -1
  94. package/dist/diagrams/ladder/index.d.ts +1 -1
  95. package/dist/diagrams/ladder/index.js +3 -1
  96. package/dist/diagrams/logic/index.d.cts +1 -1
  97. package/dist/diagrams/logic/index.d.ts +1 -1
  98. package/dist/diagrams/orgchart/index.d.cts +1 -1
  99. package/dist/diagrams/orgchart/index.d.ts +1 -1
  100. package/dist/diagrams/pedigree/index.cjs +7 -6
  101. package/dist/diagrams/pedigree/index.d.cts +1 -1
  102. package/dist/diagrams/pedigree/index.d.ts +1 -1
  103. package/dist/diagrams/pedigree/index.js +2 -1
  104. package/dist/diagrams/phylo/index.d.cts +1 -1
  105. package/dist/diagrams/phylo/index.d.ts +1 -1
  106. package/dist/diagrams/sld/index.cjs +7 -5
  107. package/dist/diagrams/sld/index.d.cts +1 -1
  108. package/dist/diagrams/sld/index.d.ts +1 -1
  109. package/dist/diagrams/sld/index.js +3 -1
  110. package/dist/diagrams/sociogram/index.d.cts +1 -1
  111. package/dist/diagrams/sociogram/index.d.ts +1 -1
  112. package/dist/diagrams/timing/index.d.cts +1 -1
  113. package/dist/diagrams/timing/index.d.ts +1 -1
  114. package/dist/diagrams/venn/index.d.cts +1 -1
  115. package/dist/diagrams/venn/index.d.ts +1 -1
  116. package/dist/{index-CGK0xVls.d.ts → index-C9A0h-CB.d.cts} +1 -2
  117. package/dist/{index-OW8eDrKj.d.cts → index-CJai_TEZ.d.ts} +1 -2
  118. package/dist/index.cjs +37 -23
  119. package/dist/index.d.cts +10 -4
  120. package/dist/index.d.ts +10 -4
  121. package/dist/index.js +11 -9
  122. package/dist/react.cjs +12 -10
  123. package/dist/react.cjs.map +1 -1
  124. package/dist/react.d.cts +1 -1
  125. package/dist/react.d.ts +1 -1
  126. package/dist/react.js +11 -9
  127. package/dist/react.js.map +1 -1
  128. package/dist/{types-Gkyab1sL.d.ts → types-BOAsqHoU.d.cts} +3 -3
  129. package/dist/{types-Gkyab1sL.d.cts → types-BOAsqHoU.d.ts} +3 -3
  130. package/package.json +2 -2
  131. package/dist/chunk-2Z543TC3.cjs.map +0 -1
  132. package/dist/chunk-3MJKJX27.cjs.map +0 -1
  133. package/dist/chunk-5FF2IT3C.js.map +0 -1
  134. package/dist/chunk-6WORZSL3.cjs.map +0 -1
  135. package/dist/chunk-6XGSEG3K.js.map +0 -1
  136. package/dist/chunk-DHHVYSQX.cjs.map +0 -1
  137. package/dist/chunk-E2EJRVWS.cjs.map +0 -1
  138. package/dist/chunk-GZY4CJ23.cjs.map +0 -1
  139. package/dist/chunk-J7JWMQD5.js.map +0 -1
  140. package/dist/chunk-JDBG5DU2.js.map +0 -1
  141. package/dist/chunk-K6RAUXRQ.cjs.map +0 -1
  142. package/dist/chunk-KVP7AORH.js.map +0 -1
  143. package/dist/chunk-LPKVIRYT.js.map +0 -1
  144. package/dist/chunk-O5POCPXZ.cjs.map +0 -1
  145. package/dist/chunk-OIZ4MYSF.cjs.map +0 -1
  146. package/dist/chunk-WHNIK4LK.js.map +0 -1
  147. package/dist/chunk-YTLGK5BZ.js.map +0 -1
  148. package/dist/chunk-YWDODCW2.js.map +0 -1
  149. package/dist/chunk-Z5NGIM4Z.js.map +0 -1
  150. package/dist/chunk-Z5UECSNM.cjs.map +0 -1
package/README.md CHANGED
@@ -29,14 +29,15 @@
29
29
 
30
30
  ---
31
31
 
32
- **Schematex** is the open-source rendering engine for the diagrams professionals actually use — medical, electrical, legal, and analytical. 27 diagram families across seven domains:
32
+ **Schematex** is the open-source rendering engine for the diagrams professionals actually use — medical, electrical, legal, and analytical. 30 diagram families across nine domains:
33
33
 
34
34
  - 👪 **Relationships** — genograms, ecomaps, pedigrees, sociograms, phylogenetic trees
35
35
  - ⚡ **Electrical & Industrial** — ladder logic, single-line diagrams, circuit schematics, logic gates, timing, block diagrams, **FBD**, **SFC**, breadboard, **P&ID** (ISA-5.1)
36
36
  - 🏢 **Corporate & Legal** — entity structures, cap tables
37
37
  - 🐟 **Causality & Analysis** — fishbone / Ishikawa, decision trees (Howard-Raiffa EV · CART/sklearn · taxonomy)
38
- - 🔄 **Behavior modeling** — UML 2.5 / Harel **state diagrams** (Mermaid-compatible superset), **BPMN 2.0** (OMG)
38
+ - 🔄 **Behavior modeling** — UML 2.5 / Harel **state diagrams** (Mermaid-compatible superset), **BPMN 2.0** (OMG), **use case diagrams** (UML 2.5.1 §18)
39
39
  - 🗄️ **Data modeling** — ERD crow's-foot notation
40
+ - 🗓️ **Project management** — **PERT / CPM** networks (PMBOK 7) that *compute* the schedule: ES/EF/LS/LF, slack, critical path, three-point estimation, swimlanes, time-scaled layout
40
41
  - 📅 **Timelines** — proportional / equidistant / log axis · swimlane · gantt · lollipop · BC dates · geological Ma scale
41
42
 
42
43
  Mermaid draws generic flowcharts. Schematex draws the diagrams doctors, engineers, and lawyers actually use — a genogram a genetic counselor accepts clinically, ladder logic that maps 1:1 to IEC 61131-3, a cap table that survives a Series A review.
@@ -72,7 +73,7 @@ import { render } from 'schematex/genogram';
72
73
 
73
74
  ## Gallery
74
75
 
75
- 27 diagram types, one unified pipeline. **Try any of these live at [schematex.dev/playground](https://schematex.dev/playground).**
76
+ 30 diagram types, one unified pipeline. **Try any of these live at [schematex.dev/playground](https://schematex.dev/playground).**
76
77
 
77
78
  ### 👪 Genogram — *McGoldrick family-systems standard*
78
79
 
@@ -481,6 +482,26 @@ config: style = gantt
481
482
 
482
483
  [Timeline syntax →](https://schematex.dev/docs/timeline)
483
484
 
485
+ ### 🗓️ PERT / CPM — *PMI PMBOK 7 activity-on-node network*
486
+
487
+ The only text-DSL PERT tool that **computes the schedule**. You write tasks, durations, and dependencies — the engine runs the forward and backward pass and returns Early/Late Start & Finish, total slack, project duration, and the critical path (highlighted in red). Supports FS/SS/FF/SF dependencies with lag/lead, three-point estimation (`te + variance`), milestones, swimlanes (`lane:`), and a time-scaled layout.
488
+
489
+ ```
490
+ pert
491
+ title: "Q3 Product Launch"
492
+ unit: days
493
+
494
+ task A "Market research" duration: 5
495
+ task B "Design mockups" duration: 8 after: A
496
+ task C "Backend API" duration: 15 after: A
497
+ task D "Frontend build" duration: 10 after: B, C
498
+ task E "QA / testing" duration: 5 after: D
499
+ task F "Marketing collateral" duration: 7 after: B
500
+ task G "Launch event" duration: 2 after: E, F
501
+ ```
502
+
503
+ [PERT / CPM syntax →](https://schematex.dev/docs/pert)
504
+
484
505
  ## Why SchemaTex?
485
506
 
486
507
  **Generic flowchart tools can't draw professional diagrams.** Every diagram domain has published standards — symbol conventions, layout rules, labelling grammars — and when you ignore them, domain experts reject the output:
@@ -1,19 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkZ5UECSNM_cjs = require('../chunk-Z5UECSNM.cjs');
4
- require('../chunk-DHHVYSQX.cjs');
3
+ var chunkNWPCY65Z_cjs = require('../chunk-NWPCY65Z.cjs');
4
+ require('../chunk-3YUUC6RN.cjs');
5
5
  require('../chunk-QUKVGHN4.cjs');
6
- require('../chunk-2Z543TC3.cjs');
6
+ require('../chunk-XRCY75UV.cjs');
7
7
  require('../chunk-SUIDD2C5.cjs');
8
- require('../chunk-GZY4CJ23.cjs');
9
- require('../chunk-OIZ4MYSF.cjs');
8
+ require('../chunk-N7W5KZK7.cjs');
9
+ require('../chunk-3M6WB62Y.cjs');
10
+ require('../chunk-SBB6C4OP.cjs');
10
11
  require('../chunk-RYVV5UVI.cjs');
11
- require('../chunk-6WORZSL3.cjs');
12
+ require('../chunk-VFZOPRQP.cjs');
12
13
  require('../chunk-BW4KGTV7.cjs');
13
- require('../chunk-E2EJRVWS.cjs');
14
- require('../chunk-K6RAUXRQ.cjs');
15
- require('../chunk-3MJKJX27.cjs');
16
- require('../chunk-O5POCPXZ.cjs');
14
+ require('../chunk-QTNPMIO2.cjs');
15
+ require('../chunk-TZTCIAYW.cjs');
16
+ require('../chunk-VZ5LDNHK.cjs');
17
+ require('../chunk-EGSUMHCS.cjs');
18
+ require('../chunk-3KRL2EGN.cjs');
17
19
  require('../chunk-S2KJRHDZ.cjs');
18
20
  require('../chunk-UUBNQV2T.cjs');
19
21
  require('../chunk-5UCXMYE7.cjs');
@@ -29,7 +31,7 @@ var schematexTools = {
29
31
  listDiagrams: ai.tool({
30
32
  description: "List every Schematex diagram type with a tagline, 'use when' hint, domain cluster, and authoritative standard. Call this first to discover what's available.",
31
33
  inputSchema: zod.z.object({}),
32
- execute: async () => chunkZ5UECSNM_cjs.listDiagrams()
34
+ execute: async () => chunkNWPCY65Z_cjs.listDiagrams()
33
35
  }),
34
36
  getSyntax: ai.tool({
35
37
  description: "Return a compact syntax reference for one diagram type \u2014 rules, grammar (EBNF), and inline examples. Trimmed for LLM consumption (~2,000\u20134,000 tokens). Call after listDiagrams once you've chosen a type.",
@@ -38,7 +40,7 @@ var schematexTools = {
38
40
  "Diagram type id from listDiagrams (e.g. 'genogram', 'sld', 'fishbone')."
39
41
  )
40
42
  }),
41
- execute: async ({ type }) => chunkZ5UECSNM_cjs.getSyntax(type)
43
+ execute: async ({ type }) => chunkNWPCY65Z_cjs.getSyntax(type)
42
44
  }),
43
45
  getExamples: ai.tool({
44
46
  description: "Return curated real-world DSL examples for a diagram type, each with scenario notes and tags. Use as few-shot context before generating DSL.",
@@ -48,7 +50,7 @@ var schematexTools = {
48
50
  preferFeatured: zod.z.boolean().optional().describe("Rank featured examples first."),
49
51
  maxComplexity: zod.z.number().int().min(1).max(5).optional().describe("Only return examples with complexity <= this value (1=simplest).")
50
52
  }),
51
- execute: async (args) => chunkZ5UECSNM_cjs.getExamples(args.type, {
53
+ execute: async (args) => chunkNWPCY65Z_cjs.getExamples(args.type, {
52
54
  limit: args.limit,
53
55
  preferFeatured: args.preferFeatured,
54
56
  maxComplexity: args.maxComplexity
@@ -62,7 +64,7 @@ var schematexTools = {
62
64
  ),
63
65
  dsl: zod.z.string().describe("The DSL source text to validate.")
64
66
  }),
65
- execute: async ({ type, dsl }) => chunkZ5UECSNM_cjs.validateDsl(type, dsl)
67
+ execute: async ({ type, dsl }) => chunkNWPCY65Z_cjs.validateDsl(type, dsl)
66
68
  }),
67
69
  renderDsl: ai.tool({
68
70
  description: "Render Schematex DSL to an SVG string. Returns { ok: true, svg } or { ok: false, errors }. Use when the caller needs the actual diagram output, not just validation.",
@@ -77,7 +79,7 @@ var schematexTools = {
77
79
  dsl,
78
80
  theme,
79
81
  padding
80
- }) => chunkZ5UECSNM_cjs.renderDsl(type, dsl, { theme, padding })
82
+ }) => chunkNWPCY65Z_cjs.renderDsl(type, dsl, { theme, padding })
81
83
  })
82
84
  };
83
85
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ai/ai-sdk.ts"],"names":["tool","z","listDiagrams","getSyntax","getExamples","validateDsl","renderDsl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAcA,OAAA,CAAK;AAAA,IACjB,WAAA,EACE,8JAAA;AAAA,IACF,WAAA,EAAaC,KAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACxB,OAAA,EAAS,YAAYC,8BAAA;AAAiB,GACvC,CAAA;AAAA,EAED,WAAWF,OAAA,CAAK;AAAA,IACd,WAAA,EACE,sNAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CACH,MAAA,EAAO,CACP,QAAA;AAAA,QACC;AAAA;AACF,KACH,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAK,KAAwBE,4BAAc,IAAI;AAAA,GAClE,CAAA;AAAA,EAED,aAAaH,OAAA,CAAK;AAAA,IAChB,WAAA,EACE,8IAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,MAC5C,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,qCAAqC,CAAA;AAAA,MACjD,gBAAgBA,KAAA,CACb,OAAA,GACA,QAAA,EAAS,CACT,SAAS,+BAA+B,CAAA;AAAA,MAC3C,aAAA,EAAeA,KAAA,CACZ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,kEAAkE;AAAA,KAC/E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,IAAA,KAMdG,6BAAA,CAAgB,KAAK,IAAA,EAAM;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,eAAe,IAAA,CAAK;AAAA,KACrB;AAAA,GACJ,CAAA;AAAA,EAED,aAAaJ,OAAA,CAAK;AAAA,IAChB,WAAA,EACE,6KAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,GAAA,EAAKA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,KAAI,KAC1BI,6BAAA,CAAgB,MAAM,GAAG;AAAA,GAC5B,CAAA;AAAA,EAED,WAAWL,OAAA,CAAK;AAAA,IACd,WAAA,EACE,sKAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,MAAMA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0CAA0C,CAAA;AAAA,MAC/E,GAAA,EAAKA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,MACzD,OAAOA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,MAC7E,SAASA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO;AAAA,MACd,IAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,UAMIK,2BAAA,CAAc,IAAA,EAAM,KAAK,EAAE,KAAA,EAAO,SAAS;AAAA,GAClD;AACH","file":"ai-sdk.cjs","sourcesContent":["/**\n * Vercel AI SDK adapter — ready-to-use `tools` object for `generateText` /\n * `streamText`.\n *\n * @example\n * ```ts\n * import { streamText } from 'ai';\n * import { schematexTools } from 'schematex/ai/sdk';\n *\n * const result = streamText({\n * model: 'anthropic/claude-opus-4-7',\n * tools: schematexTools,\n * maxSteps: 5,\n * system: `You write Schematex DSL. Discover types with listDiagrams,\n * then fetch getSyntax + getExamples before writing. Call validateDsl\n * before returning DSL to the user.`,\n * prompt: userMessage,\n * });\n * ```\n *\n * Peer-deps `ai` and `zod` are optional — this module only loads if both\n * are installed.\n */\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nimport {\n listDiagrams as listDiagramsImpl,\n getSyntax as getSyntaxImpl,\n getExamples as getExamplesImpl,\n validateDsl as validateDslImpl,\n renderDsl as renderDslImpl,\n} from \"./tools\";\n\nexport const schematexTools = {\n listDiagrams: tool({\n description:\n \"List every Schematex diagram type with a tagline, 'use when' hint, domain cluster, and authoritative standard. Call this first to discover what's available.\",\n inputSchema: z.object({}),\n execute: async () => listDiagramsImpl(),\n }),\n\n getSyntax: tool({\n description:\n \"Return a compact syntax reference for one diagram type — rules, grammar (EBNF), and inline examples. Trimmed for LLM consumption (~2,000–4,000 tokens). Call after listDiagrams once you've chosen a type.\",\n inputSchema: z.object({\n type: z\n .string()\n .describe(\n \"Diagram type id from listDiagrams (e.g. 'genogram', 'sld', 'fishbone').\"\n ),\n }),\n execute: async ({ type }: { type: string }) => getSyntaxImpl(type),\n }),\n\n getExamples: tool({\n description:\n \"Return curated real-world DSL examples for a diagram type, each with scenario notes and tags. Use as few-shot context before generating DSL.\",\n inputSchema: z.object({\n type: z.string().describe(\"Diagram type id.\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(10)\n .optional()\n .describe(\"Max examples to return (default 5).\"),\n preferFeatured: z\n .boolean()\n .optional()\n .describe(\"Rank featured examples first.\"),\n maxComplexity: z\n .number()\n .int()\n .min(1)\n .max(5)\n .optional()\n .describe(\"Only return examples with complexity <= this value (1=simplest).\"),\n }),\n execute: async (args: {\n type: string;\n limit?: number;\n preferFeatured?: boolean;\n maxComplexity?: number;\n }) =>\n getExamplesImpl(args.type, {\n limit: args.limit,\n preferFeatured: args.preferFeatured,\n maxComplexity: args.maxComplexity,\n }),\n }),\n\n validateDsl: tool({\n description:\n \"Validate Schematex DSL. Returns { ok: true } or { ok: false, errors: [{line, column, message, source}] }. Call before returning DSL to the user and self-correct on errors.\",\n inputSchema: z.object({\n type: z\n .string()\n .optional()\n .describe(\n \"Diagram type. Optional — Schematex auto-detects from the first line if omitted.\"\n ),\n dsl: z.string().describe(\"The DSL source text to validate.\"),\n }),\n execute: async ({ type, dsl }: { type?: string; dsl: string }) =>\n validateDslImpl(type, dsl),\n }),\n\n renderDsl: tool({\n description:\n \"Render Schematex DSL to an SVG string. Returns { ok: true, svg } or { ok: false, errors }. Use when the caller needs the actual diagram output, not just validation.\",\n inputSchema: z.object({\n type: z.string().optional().describe(\"Diagram type (auto-detected if omitted).\"),\n dsl: z.string().describe(\"The DSL source text to render.\"),\n theme: z.string().optional().describe(\"Theme name, e.g. 'default' or 'dark'.\"),\n padding: z.number().optional().describe(\"Outer padding in pixels.\"),\n }),\n execute: async ({\n type,\n dsl,\n theme,\n padding,\n }: {\n type?: string;\n dsl: string;\n theme?: string;\n padding?: number;\n }) => renderDslImpl(type, dsl, { theme, padding }),\n }),\n} as const;\n\nexport type SchematexTools = typeof schematexTools;\n"]}
1
+ {"version":3,"sources":["../../src/ai/ai-sdk.ts"],"names":["tool","z","listDiagrams","getSyntax","getExamples","validateDsl","renderDsl"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAcA,OAAA,CAAK;AAAA,IACjB,WAAA,EACE,8JAAA;AAAA,IACF,WAAA,EAAaC,KAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACxB,OAAA,EAAS,YAAYC,8BAAA;AAAiB,GACvC,CAAA;AAAA,EAED,WAAWF,OAAA,CAAK;AAAA,IACd,WAAA,EACE,sNAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CACH,MAAA,EAAO,CACP,QAAA;AAAA,QACC;AAAA;AACF,KACH,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAK,KAAwBE,4BAAc,IAAI;AAAA,GAClE,CAAA;AAAA,EAED,aAAaH,OAAA,CAAK;AAAA,IAChB,WAAA,EACE,8IAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,MAC5C,KAAA,EAAOA,KAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,qCAAqC,CAAA;AAAA,MACjD,gBAAgBA,KAAA,CACb,OAAA,GACA,QAAA,EAAS,CACT,SAAS,+BAA+B,CAAA;AAAA,MAC3C,aAAA,EAAeA,KAAA,CACZ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,kEAAkE;AAAA,KAC/E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,IAAA,KAMdG,6BAAA,CAAgB,KAAK,IAAA,EAAM;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,eAAe,IAAA,CAAK;AAAA,KACrB;AAAA,GACJ,CAAA;AAAA,EAED,aAAaJ,OAAA,CAAK;AAAA,IAChB,WAAA,EACE,6KAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAMA,KAAA,CACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,GAAA,EAAKA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,KAAI,KAC1BI,6BAAA,CAAgB,MAAM,GAAG;AAAA,GAC5B,CAAA;AAAA,EAED,WAAWL,OAAA,CAAK;AAAA,IACd,WAAA,EACE,sKAAA;AAAA,IACF,WAAA,EAAaC,MAAE,MAAA,CAAO;AAAA,MACpB,MAAMA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0CAA0C,CAAA;AAAA,MAC/E,GAAA,EAAKA,KAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,MACzD,OAAOA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,MAC7E,SAASA,KAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO;AAAA,MACd,IAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,UAMIK,2BAAA,CAAc,IAAA,EAAM,KAAK,EAAE,KAAA,EAAO,SAAS;AAAA,GAClD;AACH","file":"ai-sdk.cjs","sourcesContent":["/**\n * Vercel AI SDK adapter — ready-to-use `tools` object for `generateText` /\n * `streamText`.\n *\n * @example\n * ```ts\n * import { streamText } from 'ai';\n * import { schematexTools } from 'schematex/ai/sdk';\n *\n * const result = streamText({\n * model: 'anthropic/claude-opus-4-7',\n * tools: schematexTools,\n * maxSteps: 5,\n * system: `You write Schematex DSL. Discover types with listDiagrams,\n * then fetch getSyntax + getExamples before writing. Call validateDsl\n * before returning DSL to the user.`,\n * prompt: userMessage,\n * });\n * ```\n *\n * Peer-deps `ai` and `zod` are optional — this module only loads if both\n * are installed.\n */\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nimport {\n listDiagrams as listDiagramsImpl,\n getSyntax as getSyntaxImpl,\n getExamples as getExamplesImpl,\n validateDsl as validateDslImpl,\n renderDsl as renderDslImpl,\n} from \"./tools\";\n\nexport const schematexTools = {\n listDiagrams: tool({\n description:\n \"List every Schematex diagram type with a tagline, 'use when' hint, domain cluster, and authoritative standard. Call this first to discover what's available.\",\n inputSchema: z.object({}),\n execute: async () => listDiagramsImpl(),\n }),\n\n getSyntax: tool({\n description:\n \"Return a compact syntax reference for one diagram type — rules, grammar (EBNF), and inline examples. Trimmed for LLM consumption (~2,000–4,000 tokens). Call after listDiagrams once you've chosen a type.\",\n inputSchema: z.object({\n type: z\n .string()\n .describe(\n \"Diagram type id from listDiagrams (e.g. 'genogram', 'sld', 'fishbone').\"\n ),\n }),\n execute: async ({ type }: { type: string }) => getSyntaxImpl(type),\n }),\n\n getExamples: tool({\n description:\n \"Return curated real-world DSL examples for a diagram type, each with scenario notes and tags. Use as few-shot context before generating DSL.\",\n inputSchema: z.object({\n type: z.string().describe(\"Diagram type id.\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(10)\n .optional()\n .describe(\"Max examples to return (default 5).\"),\n preferFeatured: z\n .boolean()\n .optional()\n .describe(\"Rank featured examples first.\"),\n maxComplexity: z\n .number()\n .int()\n .min(1)\n .max(5)\n .optional()\n .describe(\"Only return examples with complexity <= this value (1=simplest).\"),\n }),\n execute: async (args: {\n type: string;\n limit?: number;\n preferFeatured?: boolean;\n maxComplexity?: number;\n }) =>\n getExamplesImpl(args.type, {\n limit: args.limit,\n preferFeatured: args.preferFeatured,\n maxComplexity: args.maxComplexity,\n }),\n }),\n\n validateDsl: tool({\n description:\n \"Validate Schematex DSL. Returns { ok: true } or { ok: false, errors: [{line, column, message, source}] }. Call before returning DSL to the user and self-correct on errors.\",\n inputSchema: z.object({\n type: z\n .string()\n .optional()\n .describe(\n \"Diagram type. Optional — Schematex auto-detects from the first line if omitted.\"\n ),\n dsl: z.string().describe(\"The DSL source text to validate.\"),\n }),\n execute: async ({ type, dsl }: { type?: string; dsl: string }) =>\n validateDslImpl(type, dsl),\n }),\n\n renderDsl: tool({\n description:\n \"Render Schematex DSL to an SVG string. Returns { ok: true, svg } or { ok: false, errors }. Use when the caller needs the actual diagram output, not just validation.\",\n inputSchema: z.object({\n type: z.string().optional().describe(\"Diagram type (auto-detected if omitted).\"),\n dsl: z.string().describe(\"The DSL source text to render.\"),\n theme: z.string().optional().describe(\"Theme name, e.g. 'default' or 'dark'.\"),\n padding: z.number().optional().describe(\"Outer padding in pixels.\"),\n }),\n execute: async ({\n type,\n dsl,\n theme,\n padding,\n }: {\n type?: string;\n dsl: string;\n theme?: string;\n padding?: number;\n }) => renderDslImpl(type, dsl, { theme, padding }),\n }),\n} as const;\n\nexport type SchematexTools = typeof schematexTools;\n"]}
@@ -1,7 +1,7 @@
1
1
  import * as ai from 'ai';
2
2
  import { DiagramListItem, GetSyntaxResult, GetExamplesResult, ValidateDslResult, RenderDslResult } from './index.cjs';
3
- import '../api-BIj9t4Oc.cjs';
4
- import '../types-Gkyab1sL.cjs';
3
+ import '../api-C5UcmT7n.cjs';
4
+ import '../types-BOAsqHoU.cjs';
5
5
 
6
6
  declare const schematexTools: {
7
7
  readonly listDiagrams: ai.Tool<{}, DiagramListItem[]>;
@@ -1,7 +1,7 @@
1
1
  import * as ai from 'ai';
2
2
  import { DiagramListItem, GetSyntaxResult, GetExamplesResult, ValidateDslResult, RenderDslResult } from './index.js';
3
- import '../api-BIj9t4Oc.js';
4
- import '../types-Gkyab1sL.js';
3
+ import '../api-C5UcmT7n.js';
4
+ import '../types-BOAsqHoU.js';
5
5
 
6
6
  declare const schematexTools: {
7
7
  readonly listDiagrams: ai.Tool<{}, DiagramListItem[]>;
package/dist/ai/ai-sdk.js CHANGED
@@ -1,17 +1,19 @@
1
- import { renderDsl, validateDsl, getExamples, getSyntax, listDiagrams } from '../chunk-YTLGK5BZ.js';
2
- import '../chunk-Z5NGIM4Z.js';
1
+ import { renderDsl, validateDsl, getExamples, getSyntax, listDiagrams } from '../chunk-IM4RCUHA.js';
2
+ import '../chunk-GTDQAN2Z.js';
3
3
  import '../chunk-I55HO32M.js';
4
- import '../chunk-J7JWMQD5.js';
4
+ import '../chunk-HUPDIRBX.js';
5
5
  import '../chunk-EPKIJEH7.js';
6
- import '../chunk-5FF2IT3C.js';
7
- import '../chunk-JDBG5DU2.js';
6
+ import '../chunk-IBRW3UOA.js';
7
+ import '../chunk-6OSUNBZY.js';
8
+ import '../chunk-PIV2A3HG.js';
8
9
  import '../chunk-SZK376QB.js';
9
- import '../chunk-YWDODCW2.js';
10
+ import '../chunk-3M6T7KB4.js';
10
11
  import '../chunk-L3CTXXVZ.js';
11
- import '../chunk-KVP7AORH.js';
12
- import '../chunk-WHNIK4LK.js';
13
- import '../chunk-LPKVIRYT.js';
14
- import '../chunk-6XGSEG3K.js';
12
+ import '../chunk-UFTYX73U.js';
13
+ import '../chunk-VJGMEGMR.js';
14
+ import '../chunk-JHDR56XO.js';
15
+ import '../chunk-ZL5RB4UV.js';
16
+ import '../chunk-2KTQ75LN.js';
15
17
  import '../chunk-VDSYMSUY.js';
16
18
  import '../chunk-ZX74KJPM.js';
17
19
  import '../chunk-FO7BLCEW.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/ai/ai-sdk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAc,IAAA,CAAK;AAAA,IACjB,WAAA,EACE,8JAAA;AAAA,IACF,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACxB,OAAA,EAAS,YAAY,YAAA;AAAiB,GACvC,CAAA;AAAA,EAED,WAAW,IAAA,CAAK;AAAA,IACd,WAAA,EACE,sNAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CACH,MAAA,EAAO,CACP,QAAA;AAAA,QACC;AAAA;AACF,KACH,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAK,KAAwB,UAAc,IAAI;AAAA,GAClE,CAAA;AAAA,EAED,aAAa,IAAA,CAAK;AAAA,IAChB,WAAA,EACE,8IAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,MAC5C,KAAA,EAAO,CAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,qCAAqC,CAAA;AAAA,MACjD,gBAAgB,CAAA,CACb,OAAA,GACA,QAAA,EAAS,CACT,SAAS,+BAA+B,CAAA;AAAA,MAC3C,aAAA,EAAe,CAAA,CACZ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,kEAAkE;AAAA,KAC/E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,IAAA,KAMd,WAAA,CAAgB,KAAK,IAAA,EAAM;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,eAAe,IAAA,CAAK;AAAA,KACrB;AAAA,GACJ,CAAA;AAAA,EAED,aAAa,IAAA,CAAK;AAAA,IAChB,WAAA,EACE,6KAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,KAAI,KAC1B,WAAA,CAAgB,MAAM,GAAG;AAAA,GAC5B,CAAA;AAAA,EAED,WAAW,IAAA,CAAK;AAAA,IACd,WAAA,EACE,sKAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,MAAM,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0CAA0C,CAAA;AAAA,MAC/E,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,MACzD,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,MAC7E,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO;AAAA,MACd,IAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,UAMI,SAAA,CAAc,IAAA,EAAM,KAAK,EAAE,KAAA,EAAO,SAAS;AAAA,GAClD;AACH","file":"ai-sdk.js","sourcesContent":["/**\n * Vercel AI SDK adapter — ready-to-use `tools` object for `generateText` /\n * `streamText`.\n *\n * @example\n * ```ts\n * import { streamText } from 'ai';\n * import { schematexTools } from 'schematex/ai/sdk';\n *\n * const result = streamText({\n * model: 'anthropic/claude-opus-4-7',\n * tools: schematexTools,\n * maxSteps: 5,\n * system: `You write Schematex DSL. Discover types with listDiagrams,\n * then fetch getSyntax + getExamples before writing. Call validateDsl\n * before returning DSL to the user.`,\n * prompt: userMessage,\n * });\n * ```\n *\n * Peer-deps `ai` and `zod` are optional — this module only loads if both\n * are installed.\n */\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nimport {\n listDiagrams as listDiagramsImpl,\n getSyntax as getSyntaxImpl,\n getExamples as getExamplesImpl,\n validateDsl as validateDslImpl,\n renderDsl as renderDslImpl,\n} from \"./tools\";\n\nexport const schematexTools = {\n listDiagrams: tool({\n description:\n \"List every Schematex diagram type with a tagline, 'use when' hint, domain cluster, and authoritative standard. Call this first to discover what's available.\",\n inputSchema: z.object({}),\n execute: async () => listDiagramsImpl(),\n }),\n\n getSyntax: tool({\n description:\n \"Return a compact syntax reference for one diagram type — rules, grammar (EBNF), and inline examples. Trimmed for LLM consumption (~2,000–4,000 tokens). Call after listDiagrams once you've chosen a type.\",\n inputSchema: z.object({\n type: z\n .string()\n .describe(\n \"Diagram type id from listDiagrams (e.g. 'genogram', 'sld', 'fishbone').\"\n ),\n }),\n execute: async ({ type }: { type: string }) => getSyntaxImpl(type),\n }),\n\n getExamples: tool({\n description:\n \"Return curated real-world DSL examples for a diagram type, each with scenario notes and tags. Use as few-shot context before generating DSL.\",\n inputSchema: z.object({\n type: z.string().describe(\"Diagram type id.\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(10)\n .optional()\n .describe(\"Max examples to return (default 5).\"),\n preferFeatured: z\n .boolean()\n .optional()\n .describe(\"Rank featured examples first.\"),\n maxComplexity: z\n .number()\n .int()\n .min(1)\n .max(5)\n .optional()\n .describe(\"Only return examples with complexity <= this value (1=simplest).\"),\n }),\n execute: async (args: {\n type: string;\n limit?: number;\n preferFeatured?: boolean;\n maxComplexity?: number;\n }) =>\n getExamplesImpl(args.type, {\n limit: args.limit,\n preferFeatured: args.preferFeatured,\n maxComplexity: args.maxComplexity,\n }),\n }),\n\n validateDsl: tool({\n description:\n \"Validate Schematex DSL. Returns { ok: true } or { ok: false, errors: [{line, column, message, source}] }. Call before returning DSL to the user and self-correct on errors.\",\n inputSchema: z.object({\n type: z\n .string()\n .optional()\n .describe(\n \"Diagram type. Optional — Schematex auto-detects from the first line if omitted.\"\n ),\n dsl: z.string().describe(\"The DSL source text to validate.\"),\n }),\n execute: async ({ type, dsl }: { type?: string; dsl: string }) =>\n validateDslImpl(type, dsl),\n }),\n\n renderDsl: tool({\n description:\n \"Render Schematex DSL to an SVG string. Returns { ok: true, svg } or { ok: false, errors }. Use when the caller needs the actual diagram output, not just validation.\",\n inputSchema: z.object({\n type: z.string().optional().describe(\"Diagram type (auto-detected if omitted).\"),\n dsl: z.string().describe(\"The DSL source text to render.\"),\n theme: z.string().optional().describe(\"Theme name, e.g. 'default' or 'dark'.\"),\n padding: z.number().optional().describe(\"Outer padding in pixels.\"),\n }),\n execute: async ({\n type,\n dsl,\n theme,\n padding,\n }: {\n type?: string;\n dsl: string;\n theme?: string;\n padding?: number;\n }) => renderDslImpl(type, dsl, { theme, padding }),\n }),\n} as const;\n\nexport type SchematexTools = typeof schematexTools;\n"]}
1
+ {"version":3,"sources":["../../src/ai/ai-sdk.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCO,IAAM,cAAA,GAAiB;AAAA,EAC5B,cAAc,IAAA,CAAK;AAAA,IACjB,WAAA,EACE,8JAAA;AAAA,IACF,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAAA,IACxB,OAAA,EAAS,YAAY,YAAA;AAAiB,GACvC,CAAA;AAAA,EAED,WAAW,IAAA,CAAK;AAAA,IACd,WAAA,EACE,sNAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CACH,MAAA,EAAO,CACP,QAAA;AAAA,QACC;AAAA;AACF,KACH,CAAA;AAAA,IACD,SAAS,OAAO,EAAE,IAAA,EAAK,KAAwB,UAAc,IAAI;AAAA,GAClE,CAAA;AAAA,EAED,aAAa,IAAA,CAAK;AAAA,IAChB,WAAA,EACE,8IAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,MAC5C,KAAA,EAAO,CAAA,CACJ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,EAAE,CAAA,CACN,QAAA,EAAS,CACT,SAAS,qCAAqC,CAAA;AAAA,MACjD,gBAAgB,CAAA,CACb,OAAA,GACA,QAAA,EAAS,CACT,SAAS,+BAA+B,CAAA;AAAA,MAC3C,aAAA,EAAe,CAAA,CACZ,MAAA,EAAO,CACP,KAAI,CACJ,GAAA,CAAI,CAAC,CAAA,CACL,IAAI,CAAC,CAAA,CACL,QAAA,EAAS,CACT,SAAS,kEAAkE;AAAA,KAC/E,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,IAAA,KAMd,WAAA,CAAgB,KAAK,IAAA,EAAM;AAAA,MACzB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,gBAAgB,IAAA,CAAK,cAAA;AAAA,MACrB,eAAe,IAAA,CAAK;AAAA,KACrB;AAAA,GACJ,CAAA;AAAA,EAED,aAAa,IAAA,CAAK;AAAA,IAChB,WAAA,EACE,6KAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,IAAA,EAAM,CAAA,CACH,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,QACC;AAAA,OACF;AAAA,MACF,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kCAAkC;AAAA,KAC5D,CAAA;AAAA,IACD,OAAA,EAAS,OAAO,EAAE,IAAA,EAAM,KAAI,KAC1B,WAAA,CAAgB,MAAM,GAAG;AAAA,GAC5B,CAAA;AAAA,EAED,WAAW,IAAA,CAAK;AAAA,IACd,WAAA,EACE,sKAAA;AAAA,IACF,WAAA,EAAa,EAAE,MAAA,CAAO;AAAA,MACpB,MAAM,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0CAA0C,CAAA;AAAA,MAC/E,GAAA,EAAK,CAAA,CAAE,MAAA,EAAO,CAAE,SAAS,gCAAgC,CAAA;AAAA,MACzD,OAAO,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,uCAAuC,CAAA;AAAA,MAC7E,SAAS,CAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,0BAA0B;AAAA,KACnE,CAAA;AAAA,IACD,SAAS,OAAO;AAAA,MACd,IAAA;AAAA,MACA,GAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,UAMI,SAAA,CAAc,IAAA,EAAM,KAAK,EAAE,KAAA,EAAO,SAAS;AAAA,GAClD;AACH","file":"ai-sdk.js","sourcesContent":["/**\n * Vercel AI SDK adapter — ready-to-use `tools` object for `generateText` /\n * `streamText`.\n *\n * @example\n * ```ts\n * import { streamText } from 'ai';\n * import { schematexTools } from 'schematex/ai/sdk';\n *\n * const result = streamText({\n * model: 'anthropic/claude-opus-4-7',\n * tools: schematexTools,\n * maxSteps: 5,\n * system: `You write Schematex DSL. Discover types with listDiagrams,\n * then fetch getSyntax + getExamples before writing. Call validateDsl\n * before returning DSL to the user.`,\n * prompt: userMessage,\n * });\n * ```\n *\n * Peer-deps `ai` and `zod` are optional — this module only loads if both\n * are installed.\n */\nimport { tool } from \"ai\";\nimport { z } from \"zod\";\n\nimport {\n listDiagrams as listDiagramsImpl,\n getSyntax as getSyntaxImpl,\n getExamples as getExamplesImpl,\n validateDsl as validateDslImpl,\n renderDsl as renderDslImpl,\n} from \"./tools\";\n\nexport const schematexTools = {\n listDiagrams: tool({\n description:\n \"List every Schematex diagram type with a tagline, 'use when' hint, domain cluster, and authoritative standard. Call this first to discover what's available.\",\n inputSchema: z.object({}),\n execute: async () => listDiagramsImpl(),\n }),\n\n getSyntax: tool({\n description:\n \"Return a compact syntax reference for one diagram type — rules, grammar (EBNF), and inline examples. Trimmed for LLM consumption (~2,000–4,000 tokens). Call after listDiagrams once you've chosen a type.\",\n inputSchema: z.object({\n type: z\n .string()\n .describe(\n \"Diagram type id from listDiagrams (e.g. 'genogram', 'sld', 'fishbone').\"\n ),\n }),\n execute: async ({ type }: { type: string }) => getSyntaxImpl(type),\n }),\n\n getExamples: tool({\n description:\n \"Return curated real-world DSL examples for a diagram type, each with scenario notes and tags. Use as few-shot context before generating DSL.\",\n inputSchema: z.object({\n type: z.string().describe(\"Diagram type id.\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(10)\n .optional()\n .describe(\"Max examples to return (default 5).\"),\n preferFeatured: z\n .boolean()\n .optional()\n .describe(\"Rank featured examples first.\"),\n maxComplexity: z\n .number()\n .int()\n .min(1)\n .max(5)\n .optional()\n .describe(\"Only return examples with complexity <= this value (1=simplest).\"),\n }),\n execute: async (args: {\n type: string;\n limit?: number;\n preferFeatured?: boolean;\n maxComplexity?: number;\n }) =>\n getExamplesImpl(args.type, {\n limit: args.limit,\n preferFeatured: args.preferFeatured,\n maxComplexity: args.maxComplexity,\n }),\n }),\n\n validateDsl: tool({\n description:\n \"Validate Schematex DSL. Returns { ok: true } or { ok: false, errors: [{line, column, message, source}] }. Call before returning DSL to the user and self-correct on errors.\",\n inputSchema: z.object({\n type: z\n .string()\n .optional()\n .describe(\n \"Diagram type. Optional — Schematex auto-detects from the first line if omitted.\"\n ),\n dsl: z.string().describe(\"The DSL source text to validate.\"),\n }),\n execute: async ({ type, dsl }: { type?: string; dsl: string }) =>\n validateDslImpl(type, dsl),\n }),\n\n renderDsl: tool({\n description:\n \"Render Schematex DSL to an SVG string. Returns { ok: true, svg } or { ok: false, errors }. Use when the caller needs the actual diagram output, not just validation.\",\n inputSchema: z.object({\n type: z.string().optional().describe(\"Diagram type (auto-detected if omitted).\"),\n dsl: z.string().describe(\"The DSL source text to render.\"),\n theme: z.string().optional().describe(\"Theme name, e.g. 'default' or 'dark'.\"),\n padding: z.number().optional().describe(\"Outer padding in pixels.\"),\n }),\n execute: async ({\n type,\n dsl,\n theme,\n padding,\n }: {\n type?: string;\n dsl: string;\n theme?: string;\n padding?: number;\n }) => renderDslImpl(type, dsl, { theme, padding }),\n }),\n} as const;\n\nexport type SchematexTools = typeof schematexTools;\n"]}
package/dist/ai/index.cjs CHANGED
@@ -1,19 +1,21 @@
1
1
  'use strict';
2
2
 
3
- var chunkZ5UECSNM_cjs = require('../chunk-Z5UECSNM.cjs');
4
- require('../chunk-DHHVYSQX.cjs');
3
+ var chunkNWPCY65Z_cjs = require('../chunk-NWPCY65Z.cjs');
4
+ require('../chunk-3YUUC6RN.cjs');
5
5
  require('../chunk-QUKVGHN4.cjs');
6
- require('../chunk-2Z543TC3.cjs');
6
+ require('../chunk-XRCY75UV.cjs');
7
7
  require('../chunk-SUIDD2C5.cjs');
8
- require('../chunk-GZY4CJ23.cjs');
9
- require('../chunk-OIZ4MYSF.cjs');
8
+ require('../chunk-N7W5KZK7.cjs');
9
+ require('../chunk-3M6WB62Y.cjs');
10
+ require('../chunk-SBB6C4OP.cjs');
10
11
  require('../chunk-RYVV5UVI.cjs');
11
- require('../chunk-6WORZSL3.cjs');
12
+ require('../chunk-VFZOPRQP.cjs');
12
13
  require('../chunk-BW4KGTV7.cjs');
13
- require('../chunk-E2EJRVWS.cjs');
14
- require('../chunk-K6RAUXRQ.cjs');
15
- require('../chunk-3MJKJX27.cjs');
16
- require('../chunk-O5POCPXZ.cjs');
14
+ require('../chunk-QTNPMIO2.cjs');
15
+ require('../chunk-TZTCIAYW.cjs');
16
+ require('../chunk-VZ5LDNHK.cjs');
17
+ require('../chunk-EGSUMHCS.cjs');
18
+ require('../chunk-3KRL2EGN.cjs');
17
19
  require('../chunk-S2KJRHDZ.cjs');
18
20
  require('../chunk-UUBNQV2T.cjs');
19
21
  require('../chunk-5UCXMYE7.cjs');
@@ -27,35 +29,35 @@ require('../chunk-3WNW5Y7P.cjs');
27
29
 
28
30
  Object.defineProperty(exports, "DIAGRAM_REGISTRY", {
29
31
  enumerable: true,
30
- get: function () { return chunkZ5UECSNM_cjs.DIAGRAM_REGISTRY; }
32
+ get: function () { return chunkNWPCY65Z_cjs.DIAGRAM_REGISTRY; }
31
33
  });
32
34
  Object.defineProperty(exports, "getAllDiagramTypes", {
33
35
  enumerable: true,
34
- get: function () { return chunkZ5UECSNM_cjs.getAllDiagramTypes; }
36
+ get: function () { return chunkNWPCY65Z_cjs.getAllDiagramTypes; }
35
37
  });
36
38
  Object.defineProperty(exports, "getDiagramMeta", {
37
39
  enumerable: true,
38
- get: function () { return chunkZ5UECSNM_cjs.getDiagramMeta; }
40
+ get: function () { return chunkNWPCY65Z_cjs.getDiagramMeta; }
39
41
  });
40
42
  Object.defineProperty(exports, "getExamples", {
41
43
  enumerable: true,
42
- get: function () { return chunkZ5UECSNM_cjs.getExamples; }
44
+ get: function () { return chunkNWPCY65Z_cjs.getExamples; }
43
45
  });
44
46
  Object.defineProperty(exports, "getSyntax", {
45
47
  enumerable: true,
46
- get: function () { return chunkZ5UECSNM_cjs.getSyntax; }
48
+ get: function () { return chunkNWPCY65Z_cjs.getSyntax; }
47
49
  });
48
50
  Object.defineProperty(exports, "listDiagrams", {
49
51
  enumerable: true,
50
- get: function () { return chunkZ5UECSNM_cjs.listDiagrams; }
52
+ get: function () { return chunkNWPCY65Z_cjs.listDiagrams; }
51
53
  });
52
54
  Object.defineProperty(exports, "renderDsl", {
53
55
  enumerable: true,
54
- get: function () { return chunkZ5UECSNM_cjs.renderDsl; }
56
+ get: function () { return chunkNWPCY65Z_cjs.renderDsl; }
55
57
  });
56
58
  Object.defineProperty(exports, "validateDsl", {
57
59
  enumerable: true,
58
- get: function () { return chunkZ5UECSNM_cjs.validateDsl; }
60
+ get: function () { return chunkNWPCY65Z_cjs.validateDsl; }
59
61
  });
60
62
  //# sourceMappingURL=index.cjs.map
61
63
  //# sourceMappingURL=index.cjs.map
@@ -1,5 +1,5 @@
1
- import { S as SchematexConfig } from '../api-BIj9t4Oc.cjs';
2
- import { q as DiagramType } from '../types-Gkyab1sL.cjs';
1
+ import { S as SchematexConfig } from '../api-C5UcmT7n.cjs';
2
+ import { q as DiagramType } from '../types-BOAsqHoU.cjs';
3
3
 
4
4
  /**
5
5
  * Diagram registry — metadata for every diagram type Schematex supports.
@@ -8,7 +8,7 @@ import { q as DiagramType } from '../types-Gkyab1sL.cjs';
8
8
  * are tuned to help the model pick the right type for a user request.
9
9
  */
10
10
 
11
- type DiagramCluster = "relationships" | "electrical-industrial" | "corporate-legal" | "causality-analysis" | "generic" | "strategy" | "knowledge" | "behavior-modeling";
11
+ type DiagramCluster = "relationships" | "electrical-industrial" | "corporate-legal" | "causality-analysis" | "generic" | "strategy" | "knowledge" | "behavior-modeling" | "research" | "project-management";
12
12
  interface DiagramMeta {
13
13
  /** Canonical type id — matches `DiagramType` and plugin keys. */
14
14
  type: DiagramType;
@@ -1,5 +1,5 @@
1
- import { S as SchematexConfig } from '../api-BIj9t4Oc.js';
2
- import { q as DiagramType } from '../types-Gkyab1sL.js';
1
+ import { S as SchematexConfig } from '../api-C5UcmT7n.js';
2
+ import { q as DiagramType } from '../types-BOAsqHoU.js';
3
3
 
4
4
  /**
5
5
  * Diagram registry — metadata for every diagram type Schematex supports.
@@ -8,7 +8,7 @@ import { q as DiagramType } from '../types-Gkyab1sL.js';
8
8
  * are tuned to help the model pick the right type for a user request.
9
9
  */
10
10
 
11
- type DiagramCluster = "relationships" | "electrical-industrial" | "corporate-legal" | "causality-analysis" | "generic" | "strategy" | "knowledge" | "behavior-modeling";
11
+ type DiagramCluster = "relationships" | "electrical-industrial" | "corporate-legal" | "causality-analysis" | "generic" | "strategy" | "knowledge" | "behavior-modeling" | "research" | "project-management";
12
12
  interface DiagramMeta {
13
13
  /** Canonical type id — matches `DiagramType` and plugin keys. */
14
14
  type: DiagramType;
package/dist/ai/index.js CHANGED
@@ -1,17 +1,19 @@
1
- export { DIAGRAM_REGISTRY, getAllDiagramTypes, getDiagramMeta, getExamples, getSyntax, listDiagrams, renderDsl, validateDsl } from '../chunk-YTLGK5BZ.js';
2
- import '../chunk-Z5NGIM4Z.js';
1
+ export { DIAGRAM_REGISTRY, getAllDiagramTypes, getDiagramMeta, getExamples, getSyntax, listDiagrams, renderDsl, validateDsl } from '../chunk-IM4RCUHA.js';
2
+ import '../chunk-GTDQAN2Z.js';
3
3
  import '../chunk-I55HO32M.js';
4
- import '../chunk-J7JWMQD5.js';
4
+ import '../chunk-HUPDIRBX.js';
5
5
  import '../chunk-EPKIJEH7.js';
6
- import '../chunk-5FF2IT3C.js';
7
- import '../chunk-JDBG5DU2.js';
6
+ import '../chunk-IBRW3UOA.js';
7
+ import '../chunk-6OSUNBZY.js';
8
+ import '../chunk-PIV2A3HG.js';
8
9
  import '../chunk-SZK376QB.js';
9
- import '../chunk-YWDODCW2.js';
10
+ import '../chunk-3M6T7KB4.js';
10
11
  import '../chunk-L3CTXXVZ.js';
11
- import '../chunk-KVP7AORH.js';
12
- import '../chunk-WHNIK4LK.js';
13
- import '../chunk-LPKVIRYT.js';
14
- import '../chunk-6XGSEG3K.js';
12
+ import '../chunk-UFTYX73U.js';
13
+ import '../chunk-VJGMEGMR.js';
14
+ import '../chunk-JHDR56XO.js';
15
+ import '../chunk-ZL5RB4UV.js';
16
+ import '../chunk-2KTQ75LN.js';
15
17
  import '../chunk-VDSYMSUY.js';
16
18
  import '../chunk-ZX74KJPM.js';
17
19
  import '../chunk-FO7BLCEW.js';
@@ -1,5 +1,5 @@
1
1
  interface SchematexConfig {
2
- type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc";
2
+ type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc" | "prisma" | "usecase" | "pert";
3
3
  width?: number;
4
4
  height?: number;
5
5
  padding?: number;
@@ -1,5 +1,5 @@
1
1
  interface SchematexConfig {
2
- type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc";
2
+ type?: "genogram" | "ecomap" | "pedigree" | "phylo" | "sociogram" | "timing" | "logic" | "circuit" | "blockdiagram" | "ladder" | "sld" | "entity" | "fishbone" | "venn" | "flowchart" | "mindmap" | "matrix" | "orgchart" | "decisiontree" | "timeline" | "state" | "pid" | "erd" | "breadboard" | "bpmn" | "fbd" | "sfc" | "prisma" | "usecase" | "pert";
3
3
  width?: number;
4
4
  height?: number;
5
5
  padding?: number;
package/dist/browser.cjs CHANGED
@@ -1,18 +1,20 @@
1
1
  'use strict';
2
2
 
3
- var chunkDHHVYSQX_cjs = require('./chunk-DHHVYSQX.cjs');
3
+ var chunk3YUUC6RN_cjs = require('./chunk-3YUUC6RN.cjs');
4
4
  require('./chunk-QUKVGHN4.cjs');
5
- require('./chunk-2Z543TC3.cjs');
5
+ require('./chunk-XRCY75UV.cjs');
6
6
  require('./chunk-SUIDD2C5.cjs');
7
- require('./chunk-GZY4CJ23.cjs');
8
- require('./chunk-OIZ4MYSF.cjs');
7
+ require('./chunk-N7W5KZK7.cjs');
8
+ require('./chunk-3M6WB62Y.cjs');
9
+ require('./chunk-SBB6C4OP.cjs');
9
10
  require('./chunk-RYVV5UVI.cjs');
10
- require('./chunk-6WORZSL3.cjs');
11
+ require('./chunk-VFZOPRQP.cjs');
11
12
  require('./chunk-BW4KGTV7.cjs');
12
- require('./chunk-E2EJRVWS.cjs');
13
- require('./chunk-K6RAUXRQ.cjs');
14
- require('./chunk-3MJKJX27.cjs');
15
- require('./chunk-O5POCPXZ.cjs');
13
+ require('./chunk-QTNPMIO2.cjs');
14
+ require('./chunk-TZTCIAYW.cjs');
15
+ require('./chunk-VZ5LDNHK.cjs');
16
+ require('./chunk-EGSUMHCS.cjs');
17
+ require('./chunk-3KRL2EGN.cjs');
16
18
  require('./chunk-S2KJRHDZ.cjs');
17
19
  require('./chunk-UUBNQV2T.cjs');
18
20
  require('./chunk-5UCXMYE7.cjs');
@@ -24,7 +26,7 @@ require('./chunk-3WNW5Y7P.cjs');
24
26
 
25
27
  // src/browser.ts
26
28
  function renderToElement(text, config) {
27
- const svgString = chunkDHHVYSQX_cjs.render(text, config);
29
+ const svgString = chunk3YUUC6RN_cjs.render(text, config);
28
30
  const parser = new DOMParser();
29
31
  const doc = parser.parseFromString(svgString, "image/svg+xml");
30
32
  const el = doc.documentElement;
@@ -35,12 +37,12 @@ function renderToElement(text, config) {
35
37
  return el;
36
38
  }
37
39
  function renderToContainer(text, container, config) {
38
- container.innerHTML = chunkDHHVYSQX_cjs.render(text, config);
40
+ container.innerHTML = chunk3YUUC6RN_cjs.render(text, config);
39
41
  }
40
42
 
41
43
  Object.defineProperty(exports, "render", {
42
44
  enumerable: true,
43
- get: function () { return chunkDHHVYSQX_cjs.render; }
45
+ get: function () { return chunk3YUUC6RN_cjs.render; }
44
46
  });
45
47
  exports.renderToContainer = renderToContainer;
46
48
  exports.renderToElement = renderToElement;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts"],"names":["render"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,SAAS,eAAA,CACd,MACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAYA,wBAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,eAAe,CAAA;AAC7D,EAAA,MAAM,KAAK,GAAA,CAAI,eAAA;AACf,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AAClD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,UAAA,CAAW,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,iBAAA,CACd,IAAA,EACA,SAAA,EACA,MAAA,EACM;AACN,EAAA,SAAA,CAAU,SAAA,GAAYA,wBAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC3C","file":"browser.cjs","sourcesContent":["/**\n * Browser-specific utilities for Schematex.\n *\n * These APIs require a DOM environment. Do not import in SSR/Node contexts.\n *\n * @example\n * ```ts\n * import { renderToElement, renderToContainer } from 'schematex/browser';\n *\n * const svg = renderToElement('genogram\\n alice [female]');\n * document.getElementById('diagram')!.appendChild(svg);\n * ```\n */\n\nimport { render, type SchematexConfig } from \"./core/api\";\n\n/**\n * Render DSL text to a live `SVGSVGElement` ready to insert into the DOM.\n */\nexport function renderToElement(\n text: string,\n config?: SchematexConfig\n): SVGSVGElement {\n const svgString = render(text, config);\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\n const el = doc.documentElement;\n const parseError = doc.querySelector(\"parsererror\");\n if (parseError) {\n throw new Error(`SVG parse error: ${parseError.textContent}`);\n }\n return el as unknown as SVGSVGElement;\n}\n\n/**\n * Render DSL text and inject SVG into a container element (replaces innerHTML).\n */\nexport function renderToContainer(\n text: string,\n container: Element,\n config?: SchematexConfig\n): void {\n container.innerHTML = render(text, config);\n}\n\nexport { render, type SchematexConfig } from \"./core/api\";\n"]}
1
+ {"version":3,"sources":["../src/browser.ts"],"names":["render"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,SAAS,eAAA,CACd,MACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAYA,wBAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,eAAe,CAAA;AAC7D,EAAA,MAAM,KAAK,GAAA,CAAI,eAAA;AACf,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AAClD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,UAAA,CAAW,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,iBAAA,CACd,IAAA,EACA,SAAA,EACA,MAAA,EACM;AACN,EAAA,SAAA,CAAU,SAAA,GAAYA,wBAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC3C","file":"browser.cjs","sourcesContent":["/**\n * Browser-specific utilities for Schematex.\n *\n * These APIs require a DOM environment. Do not import in SSR/Node contexts.\n *\n * @example\n * ```ts\n * import { renderToElement, renderToContainer } from 'schematex/browser';\n *\n * const svg = renderToElement('genogram\\n alice [female]');\n * document.getElementById('diagram')!.appendChild(svg);\n * ```\n */\n\nimport { render, type SchematexConfig } from \"./core/api\";\n\n/**\n * Render DSL text to a live `SVGSVGElement` ready to insert into the DOM.\n */\nexport function renderToElement(\n text: string,\n config?: SchematexConfig\n): SVGSVGElement {\n const svgString = render(text, config);\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\n const el = doc.documentElement;\n const parseError = doc.querySelector(\"parsererror\");\n if (parseError) {\n throw new Error(`SVG parse error: ${parseError.textContent}`);\n }\n return el as unknown as SVGSVGElement;\n}\n\n/**\n * Render DSL text and inject SVG into a container element (replaces innerHTML).\n */\nexport function renderToContainer(\n text: string,\n container: Element,\n config?: SchematexConfig\n): void {\n container.innerHTML = render(text, config);\n}\n\nexport { render, type SchematexConfig } from \"./core/api\";\n"]}
@@ -1,5 +1,5 @@
1
- import { S as SchematexConfig } from './api-BIj9t4Oc.cjs';
2
- export { r as render } from './api-BIj9t4Oc.cjs';
1
+ import { S as SchematexConfig } from './api-C5UcmT7n.cjs';
2
+ export { r as render } from './api-C5UcmT7n.cjs';
3
3
 
4
4
  /**
5
5
  * Browser-specific utilities for Schematex.
package/dist/browser.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as SchematexConfig } from './api-BIj9t4Oc.js';
2
- export { r as render } from './api-BIj9t4Oc.js';
1
+ import { S as SchematexConfig } from './api-C5UcmT7n.js';
2
+ export { r as render } from './api-C5UcmT7n.js';
3
3
 
4
4
  /**
5
5
  * Browser-specific utilities for Schematex.
package/dist/browser.js CHANGED
@@ -1,17 +1,19 @@
1
- import { render } from './chunk-Z5NGIM4Z.js';
2
- export { render } from './chunk-Z5NGIM4Z.js';
1
+ import { render } from './chunk-GTDQAN2Z.js';
2
+ export { render } from './chunk-GTDQAN2Z.js';
3
3
  import './chunk-I55HO32M.js';
4
- import './chunk-J7JWMQD5.js';
4
+ import './chunk-HUPDIRBX.js';
5
5
  import './chunk-EPKIJEH7.js';
6
- import './chunk-5FF2IT3C.js';
7
- import './chunk-JDBG5DU2.js';
6
+ import './chunk-IBRW3UOA.js';
7
+ import './chunk-6OSUNBZY.js';
8
+ import './chunk-PIV2A3HG.js';
8
9
  import './chunk-SZK376QB.js';
9
- import './chunk-YWDODCW2.js';
10
+ import './chunk-3M6T7KB4.js';
10
11
  import './chunk-L3CTXXVZ.js';
11
- import './chunk-KVP7AORH.js';
12
- import './chunk-WHNIK4LK.js';
13
- import './chunk-LPKVIRYT.js';
14
- import './chunk-6XGSEG3K.js';
12
+ import './chunk-UFTYX73U.js';
13
+ import './chunk-VJGMEGMR.js';
14
+ import './chunk-JHDR56XO.js';
15
+ import './chunk-ZL5RB4UV.js';
16
+ import './chunk-2KTQ75LN.js';
15
17
  import './chunk-VDSYMSUY.js';
16
18
  import './chunk-ZX74KJPM.js';
17
19
  import './chunk-FO7BLCEW.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmBO,SAAS,eAAA,CACd,MACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,eAAe,CAAA;AAC7D,EAAA,MAAM,KAAK,GAAA,CAAI,eAAA;AACf,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AAClD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,UAAA,CAAW,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,iBAAA,CACd,IAAA,EACA,SAAA,EACA,MAAA,EACM;AACN,EAAA,SAAA,CAAU,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC3C","file":"browser.js","sourcesContent":["/**\n * Browser-specific utilities for Schematex.\n *\n * These APIs require a DOM environment. Do not import in SSR/Node contexts.\n *\n * @example\n * ```ts\n * import { renderToElement, renderToContainer } from 'schematex/browser';\n *\n * const svg = renderToElement('genogram\\n alice [female]');\n * document.getElementById('diagram')!.appendChild(svg);\n * ```\n */\n\nimport { render, type SchematexConfig } from \"./core/api\";\n\n/**\n * Render DSL text to a live `SVGSVGElement` ready to insert into the DOM.\n */\nexport function renderToElement(\n text: string,\n config?: SchematexConfig\n): SVGSVGElement {\n const svgString = render(text, config);\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\n const el = doc.documentElement;\n const parseError = doc.querySelector(\"parsererror\");\n if (parseError) {\n throw new Error(`SVG parse error: ${parseError.textContent}`);\n }\n return el as unknown as SVGSVGElement;\n}\n\n/**\n * Render DSL text and inject SVG into a container element (replaces innerHTML).\n */\nexport function renderToContainer(\n text: string,\n container: Element,\n config?: SchematexConfig\n): void {\n container.innerHTML = render(text, config);\n}\n\nexport { render, type SchematexConfig } from \"./core/api\";\n"]}
1
+ {"version":3,"sources":["../src/browser.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAmBO,SAAS,eAAA,CACd,MACA,MAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AACrC,EAAA,MAAM,MAAA,GAAS,IAAI,SAAA,EAAU;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,eAAA,CAAgB,SAAA,EAAW,eAAe,CAAA;AAC7D,EAAA,MAAM,KAAK,GAAA,CAAI,eAAA;AACf,EAAA,MAAM,UAAA,GAAa,GAAA,CAAI,aAAA,CAAc,aAAa,CAAA;AAClD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,UAAA,CAAW,WAAW,CAAA,CAAE,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,EAAA;AACT;AAKO,SAAS,iBAAA,CACd,IAAA,EACA,SAAA,EACA,MAAA,EACM;AACN,EAAA,SAAA,CAAU,SAAA,GAAY,MAAA,CAAO,IAAA,EAAM,MAAM,CAAA;AAC3C","file":"browser.js","sourcesContent":["/**\n * Browser-specific utilities for Schematex.\n *\n * These APIs require a DOM environment. Do not import in SSR/Node contexts.\n *\n * @example\n * ```ts\n * import { renderToElement, renderToContainer } from 'schematex/browser';\n *\n * const svg = renderToElement('genogram\\n alice [female]');\n * document.getElementById('diagram')!.appendChild(svg);\n * ```\n */\n\nimport { render, type SchematexConfig } from \"./core/api\";\n\n/**\n * Render DSL text to a live `SVGSVGElement` ready to insert into the DOM.\n */\nexport function renderToElement(\n text: string,\n config?: SchematexConfig\n): SVGSVGElement {\n const svgString = render(text, config);\n const parser = new DOMParser();\n const doc = parser.parseFromString(svgString, \"image/svg+xml\");\n const el = doc.documentElement;\n const parseError = doc.querySelector(\"parsererror\");\n if (parseError) {\n throw new Error(`SVG parse error: ${parseError.textContent}`);\n }\n return el as unknown as SVGSVGElement;\n}\n\n/**\n * Render DSL text and inject SVG into a container element (replaces innerHTML).\n */\nexport function renderToContainer(\n text: string,\n container: Element,\n config?: SchematexConfig\n): void {\n container.innerHTML = render(text, config);\n}\n\nexport { render, type SchematexConfig } from \"./core/api\";\n"]}
@@ -0,0 +1,67 @@
1
+ // src/core/dsl-preprocess.ts
2
+ var FRONTMATTER_DELIM = /^-{3,}\s*$/;
3
+ function parseFrontmatter(text) {
4
+ const lines = text.split(/\r?\n/);
5
+ let i = 0;
6
+ while (i < lines.length && lines[i].trim() === "") i++;
7
+ if (i >= lines.length || !FRONTMATTER_DELIM.test(lines[i])) {
8
+ return { data: {}, body: text };
9
+ }
10
+ const openIdx = i;
11
+ i++;
12
+ const data = {};
13
+ while (i < lines.length && !FRONTMATTER_DELIM.test(lines[i])) {
14
+ const line = lines[i];
15
+ const trimmed = line.trim();
16
+ if (trimmed === "" || trimmed.startsWith("#")) {
17
+ i++;
18
+ continue;
19
+ }
20
+ const colonIdx = trimmed.indexOf(":");
21
+ if (colonIdx <= 0) {
22
+ return { data: {}, body: text };
23
+ }
24
+ const key = trimmed.slice(0, colonIdx).trim();
25
+ let value = trimmed.slice(colonIdx + 1).trim();
26
+ if (value.length >= 2 && (value.startsWith('"') && value.endsWith('"') || value.startsWith("'") && value.endsWith("'") || value.startsWith("\u201C") && value.endsWith("\u201D"))) {
27
+ value = value.slice(1, -1);
28
+ }
29
+ data[key] = value;
30
+ i++;
31
+ }
32
+ if (i >= lines.length) {
33
+ return { data: {}, body: text };
34
+ }
35
+ const body = lines.slice(i + 1).join("\n");
36
+ if (Object.keys(data).length === 0 && openIdx === 0) {
37
+ return { data: {}, body: text };
38
+ }
39
+ return { data, body };
40
+ }
41
+ function stripLineComment(line) {
42
+ let inQuote = false;
43
+ for (let i = 0; i < line.length; i++) {
44
+ const ch = line[i];
45
+ if (ch === '"') {
46
+ if (i > 0 && line[i - 1] === "\\") continue;
47
+ inQuote = !inQuote;
48
+ continue;
49
+ }
50
+ if (inQuote) continue;
51
+ if (ch === "%" && line[i + 1] === "%") return line.slice(0, i);
52
+ if (ch === "/" && line[i + 1] === "/") return line.slice(0, i);
53
+ if (ch === "#") return line.slice(0, i);
54
+ }
55
+ return line;
56
+ }
57
+ function firstContentLine(text) {
58
+ for (const raw of text.split(/\r?\n/)) {
59
+ const line = stripLineComment(raw).trim();
60
+ if (line !== "") return line;
61
+ }
62
+ return void 0;
63
+ }
64
+
65
+ export { firstContentLine, parseFrontmatter };
66
+ //# sourceMappingURL=chunk-2KTQ75LN.js.map
67
+ //# sourceMappingURL=chunk-2KTQ75LN.js.map