@graphty/graph-io 0.3.42 → 0.3.44

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 (674) hide show
  1. package/dist/chunks/approximations-3Q4TsdTh.js +40 -0
  2. package/dist/chunks/approximations-3Q4TsdTh.js.map +1 -0
  3. package/dist/chunks/block-JQiwViEt.js +2777 -0
  4. package/dist/chunks/block-JQiwViEt.js.map +1 -0
  5. package/dist/chunks/{choose-DvpbdRuz.js → choose-BemygfH8.js} +3 -2
  6. package/dist/chunks/{choose-DvpbdRuz.js.map → choose-BemygfH8.js.map} +1 -1
  7. package/dist/chunks/{constants-fT3E8JYY.js → constants-BFUR_CtU.js} +6 -2
  8. package/dist/chunks/constants-BFUR_CtU.js.map +1 -0
  9. package/dist/chunks/convert-BcQ8_jMo.js +59 -0
  10. package/dist/chunks/convert-BcQ8_jMo.js.map +1 -0
  11. package/dist/chunks/emit-DCwFLts5.js +3456 -0
  12. package/dist/chunks/emit-DCwFLts5.js.map +1 -0
  13. package/dist/chunks/{escape-B62ZGM_a.js → escape-B1rMftd9.js} +43 -20
  14. package/dist/chunks/escape-B1rMftd9.js.map +1 -0
  15. package/dist/chunks/{export-rKLeGQMo.js → export-D7IGzTG4.js} +196 -792
  16. package/dist/chunks/export-D7IGzTG4.js.map +1 -0
  17. package/dist/chunks/{exporter-BWwEuOPT.js → exporter-BtnqYuuj.js} +22 -12
  18. package/dist/chunks/exporter-BtnqYuuj.js.map +1 -0
  19. package/dist/chunks/{exporter-yLxKBvLE.js → exporter-ChPyhBOv.js} +4 -3
  20. package/dist/chunks/{exporter-yLxKBvLE.js.map → exporter-ChPyhBOv.js.map} +1 -1
  21. package/dist/chunks/{exporter-8hLNemFk.js → exporter-KEPxYUXD.js} +133 -74
  22. package/dist/chunks/exporter-KEPxYUXD.js.map +1 -0
  23. package/dist/chunks/{exporter-CpRyHZ3H.js → exporter-quPUCBiC.js} +1807 -288
  24. package/dist/chunks/exporter-quPUCBiC.js.map +1 -0
  25. package/dist/chunks/format-GDmO6m6Q.js +676 -0
  26. package/dist/chunks/format-GDmO6m6Q.js.map +1 -0
  27. package/dist/chunks/generic-BL06jrJf.js +1347 -0
  28. package/dist/chunks/generic-BL06jrJf.js.map +1 -0
  29. package/dist/chunks/{importer-WrGRZb0N.js → importer-B7r2owVf.js} +449 -102
  30. package/dist/chunks/importer-B7r2owVf.js.map +1 -0
  31. package/dist/chunks/{importer-Ht7LNg8L.js → importer-BFmOP96W.js} +116 -296
  32. package/dist/chunks/importer-BFmOP96W.js.map +1 -0
  33. package/dist/chunks/{importer-BbNb7eNg.js → importer-C2nzGhdV.js} +1390 -129
  34. package/dist/chunks/importer-C2nzGhdV.js.map +1 -0
  35. package/dist/chunks/{importer-Dz7tI8Sa.js → importer-CbX2_rNF.js} +617 -115
  36. package/dist/chunks/importer-CbX2_rNF.js.map +1 -0
  37. package/dist/chunks/{importer-D794XUTe.js → importer-CdzeN6X4.js} +31 -8
  38. package/dist/chunks/importer-CdzeN6X4.js.map +1 -0
  39. package/dist/chunks/{importer-xZ-3suY1.js → importer-ChKNC_GN.js} +791 -135
  40. package/dist/chunks/importer-ChKNC_GN.js.map +1 -0
  41. package/dist/chunks/{importer-C98dpSH4.js → importer-dwoYpSqb.js} +141 -82
  42. package/dist/chunks/importer-dwoYpSqb.js.map +1 -0
  43. package/dist/chunks/index-B9fdNpTA.js +4310 -0
  44. package/dist/chunks/index-B9fdNpTA.js.map +1 -0
  45. package/dist/chunks/{json-elements-DKSqpNW1.js → json-elements-C4FwgnH5.js} +123 -32
  46. package/dist/chunks/json-elements-C4FwgnH5.js.map +1 -0
  47. package/dist/chunks/lexicon-B-knUi-l.js +508 -0
  48. package/dist/chunks/lexicon-B-knUi-l.js.map +1 -0
  49. package/dist/chunks/{ontology-export-CtRXjg_i.js → ontology-export-BSpbY5FL.js} +3 -2
  50. package/dist/chunks/{ontology-export-CtRXjg_i.js.map → ontology-export-BSpbY5FL.js.map} +1 -1
  51. package/dist/chunks/{records-Cu4bxYOm.js → records-Nwz_rbNt.js} +2 -2
  52. package/dist/chunks/{records-Cu4bxYOm.js.map → records-Nwz_rbNt.js.map} +1 -1
  53. package/dist/chunks/styles-Brt9JMfs.js +690 -0
  54. package/dist/chunks/styles-Brt9JMfs.js.map +1 -0
  55. package/dist/chunks/styles-_N-C8S-U.js +2102 -0
  56. package/dist/chunks/styles-_N-C8S-U.js.map +1 -0
  57. package/dist/chunks/styles-yed-DAfcIkf7.js +842 -0
  58. package/dist/chunks/styles-yed-DAfcIkf7.js.map +1 -0
  59. package/dist/chunks/{text-DHOJXnED.js → text-CgzMqHQb.js} +2 -2
  60. package/dist/chunks/{text-DHOJXnED.js.map → text-CgzMqHQb.js.map} +1 -1
  61. package/dist/chunks/units-XMZFIFe1.js +19 -0
  62. package/dist/chunks/units-XMZFIFe1.js.map +1 -0
  63. package/dist/csv.js +5 -4
  64. package/dist/csv.js.map +1 -1
  65. package/dist/cx.js +1 -1
  66. package/dist/cx2.js +2 -2
  67. package/dist/cys.js +1 -1
  68. package/dist/dot.js +5 -2
  69. package/dist/dot.js.map +1 -1
  70. package/dist/gexf.js +295 -414
  71. package/dist/gexf.js.map +1 -1
  72. package/dist/gml.js +8 -3031
  73. package/dist/gml.js.map +1 -1
  74. package/dist/graph-io.js +354 -240
  75. package/dist/graph-io.js.map +1 -1
  76. package/dist/graphml.js +4 -2
  77. package/dist/graphml.js.map +1 -1
  78. package/dist/json.js +1 -1
  79. package/dist/neo4j.js +4 -3
  80. package/dist/neo4j.js.map +1 -1
  81. package/dist/obo.js +1 -1
  82. package/dist/pajek.js +4 -2
  83. package/dist/positions.d.ts +1 -0
  84. package/dist/positions.js +427 -0
  85. package/dist/positions.js.map +1 -0
  86. package/dist/src/common/codes.d.ts +6 -0
  87. package/dist/src/common/codes.d.ts.map +1 -1
  88. package/dist/src/common/codes.js +6 -0
  89. package/dist/src/common/codes.js.map +1 -1
  90. package/dist/src/common/escape.d.ts.map +1 -1
  91. package/dist/src/common/escape.js +4 -2
  92. package/dist/src/common/escape.js.map +1 -1
  93. package/dist/src/common/export.d.ts +10 -0
  94. package/dist/src/common/export.d.ts.map +1 -1
  95. package/dist/src/common/export.js +123 -100
  96. package/dist/src/common/export.js.map +1 -1
  97. package/dist/src/common/input.d.ts.map +1 -1
  98. package/dist/src/common/input.js +8 -1
  99. package/dist/src/common/input.js.map +1 -1
  100. package/dist/src/common/json-elements.d.ts +12 -9
  101. package/dist/src/common/json-elements.d.ts.map +1 -1
  102. package/dist/src/common/json-elements.js +160 -37
  103. package/dist/src/common/json-elements.js.map +1 -1
  104. package/dist/src/common/notes.d.ts +42 -0
  105. package/dist/src/common/notes.d.ts.map +1 -0
  106. package/dist/src/common/notes.js +72 -0
  107. package/dist/src/common/notes.js.map +1 -0
  108. package/dist/src/common/report.d.ts +18 -0
  109. package/dist/src/common/report.d.ts.map +1 -1
  110. package/dist/src/common/report.js +36 -1
  111. package/dist/src/common/report.js.map +1 -1
  112. package/dist/src/common/units.d.ts +24 -0
  113. package/dist/src/common/units.d.ts.map +1 -0
  114. package/dist/src/common/units.js +26 -0
  115. package/dist/src/common/units.js.map +1 -0
  116. package/dist/src/common/xml.d.ts +18 -0
  117. package/dist/src/common/xml.d.ts.map +1 -1
  118. package/dist/src/common/xml.js +42 -5
  119. package/dist/src/common/xml.js.map +1 -1
  120. package/dist/src/formats/cx/exporter.d.ts +6 -0
  121. package/dist/src/formats/cx/exporter.d.ts.map +1 -1
  122. package/dist/src/formats/cx/exporter.js +71 -8
  123. package/dist/src/formats/cx/exporter.js.map +1 -1
  124. package/dist/src/formats/cx/importer.d.ts +5 -2
  125. package/dist/src/formats/cx/importer.d.ts.map +1 -1
  126. package/dist/src/formats/cx/importer.js +102 -72
  127. package/dist/src/formats/cx/importer.js.map +1 -1
  128. package/dist/src/formats/cx/styles.d.ts +102 -0
  129. package/dist/src/formats/cx/styles.d.ts.map +1 -0
  130. package/dist/src/formats/cx/styles.js +225 -0
  131. package/dist/src/formats/cx/styles.js.map +1 -0
  132. package/dist/src/formats/cx2/exporter.d.ts +5 -0
  133. package/dist/src/formats/cx2/exporter.d.ts.map +1 -1
  134. package/dist/src/formats/cx2/exporter.js +181 -71
  135. package/dist/src/formats/cx2/exporter.js.map +1 -1
  136. package/dist/src/formats/cx2/importer.d.ts +4 -1
  137. package/dist/src/formats/cx2/importer.d.ts.map +1 -1
  138. package/dist/src/formats/cx2/importer.js +19 -1
  139. package/dist/src/formats/cx2/importer.js.map +1 -1
  140. package/dist/src/formats/cx2/styles.d.ts +18 -0
  141. package/dist/src/formats/cx2/styles.d.ts.map +1 -0
  142. package/dist/src/formats/cx2/styles.js +24 -0
  143. package/dist/src/formats/cx2/styles.js.map +1 -0
  144. package/dist/src/formats/cys/constants.d.ts +2 -0
  145. package/dist/src/formats/cys/constants.d.ts.map +1 -1
  146. package/dist/src/formats/cys/constants.js +2 -0
  147. package/dist/src/formats/cys/constants.js.map +1 -1
  148. package/dist/src/formats/cys/exporter.d.ts +6 -2
  149. package/dist/src/formats/cys/exporter.d.ts.map +1 -1
  150. package/dist/src/formats/cys/exporter.js +215 -53
  151. package/dist/src/formats/cys/exporter.js.map +1 -1
  152. package/dist/src/formats/cys/importer.d.ts +2 -1
  153. package/dist/src/formats/cys/importer.d.ts.map +1 -1
  154. package/dist/src/formats/cys/importer.js +119 -6
  155. package/dist/src/formats/cys/importer.js.map +1 -1
  156. package/dist/src/formats/cys/session.d.ts +2 -0
  157. package/dist/src/formats/cys/session.d.ts.map +1 -1
  158. package/dist/src/formats/cys/session.js +5 -0
  159. package/dist/src/formats/cys/session.js.map +1 -1
  160. package/dist/src/formats/cys/styles.d.ts +38 -0
  161. package/dist/src/formats/cys/styles.d.ts.map +1 -0
  162. package/dist/src/formats/cys/styles.js +213 -0
  163. package/dist/src/formats/cys/styles.js.map +1 -0
  164. package/dist/src/formats/cys/tables.d.ts +8 -3
  165. package/dist/src/formats/cys/tables.d.ts.map +1 -1
  166. package/dist/src/formats/cys/tables.js +88 -34
  167. package/dist/src/formats/cys/tables.js.map +1 -1
  168. package/dist/src/formats/dot/exporter.d.ts +2 -0
  169. package/dist/src/formats/dot/exporter.d.ts.map +1 -1
  170. package/dist/src/formats/dot/exporter.js +195 -81
  171. package/dist/src/formats/dot/exporter.js.map +1 -1
  172. package/dist/src/formats/dot/importer.d.ts.map +1 -1
  173. package/dist/src/formats/dot/importer.js +100 -20
  174. package/dist/src/formats/dot/importer.js.map +1 -1
  175. package/dist/src/formats/dot/index.d.ts +1 -0
  176. package/dist/src/formats/dot/index.d.ts.map +1 -1
  177. package/dist/src/formats/dot/index.js +1 -0
  178. package/dist/src/formats/dot/index.js.map +1 -1
  179. package/dist/src/formats/dot/positions.d.ts +14 -0
  180. package/dist/src/formats/dot/positions.d.ts.map +1 -0
  181. package/dist/src/formats/dot/positions.js +70 -0
  182. package/dist/src/formats/dot/positions.js.map +1 -0
  183. package/dist/src/formats/dot/styles.d.ts +82 -0
  184. package/dist/src/formats/dot/styles.d.ts.map +1 -0
  185. package/dist/src/formats/dot/styles.js +1484 -0
  186. package/dist/src/formats/dot/styles.js.map +1 -0
  187. package/dist/src/formats/gexf/exporter.d.ts.map +1 -1
  188. package/dist/src/formats/gexf/exporter.js +23 -7
  189. package/dist/src/formats/gexf/exporter.js.map +1 -1
  190. package/dist/src/formats/gexf/importer.d.ts +8 -1
  191. package/dist/src/formats/gexf/importer.d.ts.map +1 -1
  192. package/dist/src/formats/gexf/importer.js +251 -131
  193. package/dist/src/formats/gexf/importer.js.map +1 -1
  194. package/dist/src/formats/gexf/index.d.ts +8 -0
  195. package/dist/src/formats/gexf/index.d.ts.map +1 -1
  196. package/dist/src/formats/gexf/index.js +10 -2
  197. package/dist/src/formats/gexf/index.js.map +1 -1
  198. package/dist/src/formats/gexf/schema.d.ts +5 -0
  199. package/dist/src/formats/gexf/schema.d.ts.map +1 -1
  200. package/dist/src/formats/gexf/schema.js +5 -0
  201. package/dist/src/formats/gexf/schema.js.map +1 -1
  202. package/dist/src/formats/gexf/styles.d.ts +74 -0
  203. package/dist/src/formats/gexf/styles.d.ts.map +1 -0
  204. package/dist/src/formats/gexf/styles.js +604 -0
  205. package/dist/src/formats/gexf/styles.js.map +1 -0
  206. package/dist/src/formats/gml/exporter.d.ts +1 -5
  207. package/dist/src/formats/gml/exporter.d.ts.map +1 -1
  208. package/dist/src/formats/gml/exporter.js +19 -8
  209. package/dist/src/formats/gml/exporter.js.map +1 -1
  210. package/dist/src/formats/gml/importer.d.ts.map +1 -1
  211. package/dist/src/formats/gml/importer.js +4 -0
  212. package/dist/src/formats/gml/importer.js.map +1 -1
  213. package/dist/src/formats/gml/index.d.ts +2 -1
  214. package/dist/src/formats/gml/index.d.ts.map +1 -1
  215. package/dist/src/formats/gml/index.js +2 -1
  216. package/dist/src/formats/gml/index.js.map +1 -1
  217. package/dist/src/formats/gml/positions.d.ts +14 -0
  218. package/dist/src/formats/gml/positions.d.ts.map +1 -0
  219. package/dist/src/formats/gml/positions.js +46 -0
  220. package/dist/src/formats/gml/positions.js.map +1 -0
  221. package/dist/src/formats/gml/styles.d.ts +59 -0
  222. package/dist/src/formats/gml/styles.d.ts.map +1 -0
  223. package/dist/src/formats/gml/styles.js +1056 -0
  224. package/dist/src/formats/gml/styles.js.map +1 -0
  225. package/dist/src/formats/gml/syntax.d.ts +11 -0
  226. package/dist/src/formats/gml/syntax.d.ts.map +1 -1
  227. package/dist/src/formats/gml/syntax.js +151 -62
  228. package/dist/src/formats/gml/syntax.js.map +1 -1
  229. package/dist/src/formats/graphml/constants.d.ts +4 -0
  230. package/dist/src/formats/graphml/constants.d.ts.map +1 -1
  231. package/dist/src/formats/graphml/constants.js +5 -1
  232. package/dist/src/formats/graphml/constants.js.map +1 -1
  233. package/dist/src/formats/graphml/exporter.d.ts.map +1 -1
  234. package/dist/src/formats/graphml/exporter.js +133 -65
  235. package/dist/src/formats/graphml/exporter.js.map +1 -1
  236. package/dist/src/formats/graphml/importer.d.ts +4 -1
  237. package/dist/src/formats/graphml/importer.d.ts.map +1 -1
  238. package/dist/src/formats/graphml/importer.js +100 -44
  239. package/dist/src/formats/graphml/importer.js.map +1 -1
  240. package/dist/src/formats/graphml/index.d.ts +1 -0
  241. package/dist/src/formats/graphml/index.d.ts.map +1 -1
  242. package/dist/src/formats/graphml/index.js +1 -0
  243. package/dist/src/formats/graphml/index.js.map +1 -1
  244. package/dist/src/formats/graphml/styles-plain.d.ts +19 -0
  245. package/dist/src/formats/graphml/styles-plain.d.ts.map +1 -0
  246. package/dist/src/formats/graphml/styles-plain.js +187 -0
  247. package/dist/src/formats/graphml/styles-plain.js.map +1 -0
  248. package/dist/src/formats/graphml/styles-yed.d.ts +179 -0
  249. package/dist/src/formats/graphml/styles-yed.d.ts.map +1 -0
  250. package/dist/src/formats/graphml/styles-yed.js +1086 -0
  251. package/dist/src/formats/graphml/styles-yed.js.map +1 -0
  252. package/dist/src/formats/graphml/styles-yfiles3.d.ts +19 -0
  253. package/dist/src/formats/graphml/styles-yfiles3.d.ts.map +1 -0
  254. package/dist/src/formats/graphml/styles-yfiles3.js +508 -0
  255. package/dist/src/formats/graphml/styles-yfiles3.js.map +1 -0
  256. package/dist/src/formats/graphml/tree.d.ts.map +1 -1
  257. package/dist/src/formats/graphml/tree.js +34 -19
  258. package/dist/src/formats/graphml/tree.js.map +1 -1
  259. package/dist/src/formats/graphml/yfiles.d.ts +16 -2
  260. package/dist/src/formats/graphml/yfiles.d.ts.map +1 -1
  261. package/dist/src/formats/graphml/yfiles.js +83 -12
  262. package/dist/src/formats/graphml/yfiles.js.map +1 -1
  263. package/dist/src/formats/json/exporter.d.ts +5 -0
  264. package/dist/src/formats/json/exporter.d.ts.map +1 -1
  265. package/dist/src/formats/json/exporter.js +68 -25
  266. package/dist/src/formats/json/exporter.js.map +1 -1
  267. package/dist/src/formats/json/importer.d.ts +22 -3
  268. package/dist/src/formats/json/importer.d.ts.map +1 -1
  269. package/dist/src/formats/json/importer.js +441 -265
  270. package/dist/src/formats/json/importer.js.map +1 -1
  271. package/dist/src/formats/json/positions.d.ts +16 -0
  272. package/dist/src/formats/json/positions.d.ts.map +1 -0
  273. package/dist/src/formats/json/positions.js +44 -0
  274. package/dist/src/formats/json/positions.js.map +1 -0
  275. package/dist/src/formats/json/styles.d.ts +102 -0
  276. package/dist/src/formats/json/styles.d.ts.map +1 -0
  277. package/dist/src/formats/json/styles.js +1753 -0
  278. package/dist/src/formats/json/styles.js.map +1 -0
  279. package/dist/src/formats/neo4j/exporter.d.ts.map +1 -1
  280. package/dist/src/formats/neo4j/exporter.js +2 -1
  281. package/dist/src/formats/neo4j/exporter.js.map +1 -1
  282. package/dist/src/formats/pajek/exporter.d.ts +2 -0
  283. package/dist/src/formats/pajek/exporter.d.ts.map +1 -1
  284. package/dist/src/formats/pajek/exporter.js +142 -76
  285. package/dist/src/formats/pajek/exporter.js.map +1 -1
  286. package/dist/src/formats/pajek/importer.d.ts +4 -0
  287. package/dist/src/formats/pajek/importer.d.ts.map +1 -1
  288. package/dist/src/formats/pajek/importer.js +60 -6
  289. package/dist/src/formats/pajek/importer.js.map +1 -1
  290. package/dist/src/formats/pajek/index.d.ts +2 -0
  291. package/dist/src/formats/pajek/index.d.ts.map +1 -1
  292. package/dist/src/formats/pajek/index.js +2 -0
  293. package/dist/src/formats/pajek/index.js.map +1 -1
  294. package/dist/src/formats/pajek/styles.d.ts +50 -0
  295. package/dist/src/formats/pajek/styles.d.ts.map +1 -0
  296. package/dist/src/formats/pajek/styles.js +569 -0
  297. package/dist/src/formats/pajek/styles.js.map +1 -0
  298. package/dist/src/formats/pajek/syntax.d.ts +6 -0
  299. package/dist/src/formats/pajek/syntax.d.ts.map +1 -1
  300. package/dist/src/formats/pajek/syntax.js +6 -0
  301. package/dist/src/formats/pajek/syntax.js.map +1 -1
  302. package/dist/src/formats/xgmml/columns.d.ts.map +1 -1
  303. package/dist/src/formats/xgmml/columns.js +34 -9
  304. package/dist/src/formats/xgmml/columns.js.map +1 -1
  305. package/dist/src/formats/xgmml/constants.d.ts +2 -0
  306. package/dist/src/formats/xgmml/constants.d.ts.map +1 -1
  307. package/dist/src/formats/xgmml/constants.js +3 -1
  308. package/dist/src/formats/xgmml/constants.js.map +1 -1
  309. package/dist/src/formats/xgmml/document.d.ts +12 -8
  310. package/dist/src/formats/xgmml/document.d.ts.map +1 -1
  311. package/dist/src/formats/xgmml/document.js +56 -13
  312. package/dist/src/formats/xgmml/document.js.map +1 -1
  313. package/dist/src/formats/xgmml/emit.d.ts.map +1 -1
  314. package/dist/src/formats/xgmml/emit.js +12 -6
  315. package/dist/src/formats/xgmml/emit.js.map +1 -1
  316. package/dist/src/formats/xgmml/exporter.d.ts +3 -1
  317. package/dist/src/formats/xgmml/exporter.d.ts.map +1 -1
  318. package/dist/src/formats/xgmml/exporter.js +22 -9
  319. package/dist/src/formats/xgmml/exporter.js.map +1 -1
  320. package/dist/src/formats/xgmml/importer.d.ts +2 -1
  321. package/dist/src/formats/xgmml/importer.d.ts.map +1 -1
  322. package/dist/src/formats/xgmml/importer.js +31 -24
  323. package/dist/src/formats/xgmml/importer.js.map +1 -1
  324. package/dist/src/formats/xgmml/styles.d.ts +104 -0
  325. package/dist/src/formats/xgmml/styles.d.ts.map +1 -0
  326. package/dist/src/formats/xgmml/styles.js +310 -0
  327. package/dist/src/formats/xgmml/styles.js.map +1 -0
  328. package/dist/src/index.d.ts +9 -7
  329. package/dist/src/index.d.ts.map +1 -1
  330. package/dist/src/index.js +7 -7
  331. package/dist/src/index.js.map +1 -1
  332. package/dist/src/positions/codes.d.ts +31 -0
  333. package/dist/src/positions/codes.d.ts.map +1 -0
  334. package/dist/src/positions/codes.js +26 -0
  335. package/dist/src/positions/codes.js.map +1 -0
  336. package/dist/src/positions/convert.d.ts +58 -0
  337. package/dist/src/positions/convert.d.ts.map +1 -0
  338. package/dist/src/positions/convert.js +107 -0
  339. package/dist/src/positions/convert.js.map +1 -0
  340. package/dist/src/positions/extract.d.ts +27 -0
  341. package/dist/src/positions/extract.d.ts.map +1 -0
  342. package/dist/src/positions/extract.js +526 -0
  343. package/dist/src/positions/extract.js.map +1 -0
  344. package/dist/src/positions/index.d.ts +10 -0
  345. package/dist/src/positions/index.d.ts.map +1 -0
  346. package/dist/src/positions/index.js +9 -0
  347. package/dist/src/positions/index.js.map +1 -0
  348. package/dist/src/positions/types.d.ts +208 -0
  349. package/dist/src/positions/types.d.ts.map +1 -0
  350. package/dist/src/positions/types.js +10 -0
  351. package/dist/src/positions/types.js.map +1 -0
  352. package/dist/src/registry.d.ts +30 -0
  353. package/dist/src/registry.d.ts.map +1 -1
  354. package/dist/src/registry.js +130 -9
  355. package/dist/src/registry.js.map +1 -1
  356. package/dist/src/styles/annotations.d.ts +132 -0
  357. package/dist/src/styles/annotations.d.ts.map +1 -0
  358. package/dist/src/styles/annotations.js +320 -0
  359. package/dist/src/styles/annotations.js.map +1 -0
  360. package/dist/src/styles/budget.d.ts +45 -0
  361. package/dist/src/styles/budget.d.ts.map +1 -0
  362. package/dist/src/styles/budget.js +58 -0
  363. package/dist/src/styles/budget.js.map +1 -0
  364. package/dist/src/styles/canon/bends.d.ts +32 -0
  365. package/dist/src/styles/canon/bends.d.ts.map +1 -0
  366. package/dist/src/styles/canon/bends.js +74 -0
  367. package/dist/src/styles/canon/bends.js.map +1 -0
  368. package/dist/src/styles/canon/color-tables.d.ts +22 -0
  369. package/dist/src/styles/canon/color-tables.d.ts.map +1 -0
  370. package/dist/src/styles/canon/color-tables.js +369 -0
  371. package/dist/src/styles/canon/color-tables.js.map +1 -0
  372. package/dist/src/styles/canon/color.d.ts +66 -0
  373. package/dist/src/styles/canon/color.d.ts.map +1 -0
  374. package/dist/src/styles/canon/color.js +548 -0
  375. package/dist/src/styles/canon/color.js.map +1 -0
  376. package/dist/src/styles/canon/enums.d.ts +25 -0
  377. package/dist/src/styles/canon/enums.d.ts.map +1 -0
  378. package/dist/src/styles/canon/enums.js +187 -0
  379. package/dist/src/styles/canon/enums.js.map +1 -0
  380. package/dist/src/styles/canon/graphviz.d.ts +48 -0
  381. package/dist/src/styles/canon/graphviz.d.ts.map +1 -0
  382. package/dist/src/styles/canon/graphviz.js +160 -0
  383. package/dist/src/styles/canon/graphviz.js.map +1 -0
  384. package/dist/src/styles/canon/index.d.ts +13 -0
  385. package/dist/src/styles/canon/index.d.ts.map +1 -0
  386. package/dist/src/styles/canon/index.js +13 -0
  387. package/dist/src/styles/canon/index.js.map +1 -0
  388. package/dist/src/styles/canon/number.d.ts +59 -0
  389. package/dist/src/styles/canon/number.d.ts.map +1 -0
  390. package/dist/src/styles/canon/number.js +142 -0
  391. package/dist/src/styles/canon/number.js.map +1 -0
  392. package/dist/src/styles/canon/site.d.ts +51 -0
  393. package/dist/src/styles/canon/site.d.ts.map +1 -0
  394. package/dist/src/styles/canon/site.js +63 -0
  395. package/dist/src/styles/canon/site.js.map +1 -0
  396. package/dist/src/styles/canon/text.d.ts +61 -0
  397. package/dist/src/styles/canon/text.d.ts.map +1 -0
  398. package/dist/src/styles/canon/text.js +199 -0
  399. package/dist/src/styles/canon/text.js.map +1 -0
  400. package/dist/src/styles/codes.d.ts +95 -0
  401. package/dist/src/styles/codes.d.ts.map +1 -0
  402. package/dist/src/styles/codes.js +97 -0
  403. package/dist/src/styles/codes.js.map +1 -0
  404. package/dist/src/styles/cyjs/cascade.d.ts +134 -0
  405. package/dist/src/styles/cyjs/cascade.d.ts.map +1 -0
  406. package/dist/src/styles/cyjs/cascade.js +2252 -0
  407. package/dist/src/styles/cyjs/cascade.js.map +1 -0
  408. package/dist/src/styles/cyjs/defaults-table.d.ts +25 -0
  409. package/dist/src/styles/cyjs/defaults-table.d.ts.map +1 -0
  410. package/dist/src/styles/cyjs/defaults-table.js +76 -0
  411. package/dist/src/styles/cyjs/defaults-table.js.map +1 -0
  412. package/dist/src/styles/cyjs/emit.d.ts +82 -0
  413. package/dist/src/styles/cyjs/emit.d.ts.map +1 -0
  414. package/dist/src/styles/cyjs/emit.js +790 -0
  415. package/dist/src/styles/cyjs/emit.js.map +1 -0
  416. package/dist/src/styles/cyjs/index.d.ts +13 -0
  417. package/dist/src/styles/cyjs/index.d.ts.map +1 -0
  418. package/dist/src/styles/cyjs/index.js +13 -0
  419. package/dist/src/styles/cyjs/index.js.map +1 -0
  420. package/dist/src/styles/cyjs/live.d.ts +46 -0
  421. package/dist/src/styles/cyjs/live.d.ts.map +1 -0
  422. package/dist/src/styles/cyjs/live.js +108 -0
  423. package/dist/src/styles/cyjs/live.js.map +1 -0
  424. package/dist/src/styles/cyjs/mappers.d.ts +147 -0
  425. package/dist/src/styles/cyjs/mappers.d.ts.map +1 -0
  426. package/dist/src/styles/cyjs/mappers.js +744 -0
  427. package/dist/src/styles/cyjs/mappers.js.map +1 -0
  428. package/dist/src/styles/cyjs/selector.d.ts +113 -0
  429. package/dist/src/styles/cyjs/selector.d.ts.map +1 -0
  430. package/dist/src/styles/cyjs/selector.js +611 -0
  431. package/dist/src/styles/cyjs/selector.js.map +1 -0
  432. package/dist/src/styles/cyjs/stylesheet-text.d.ts +37 -0
  433. package/dist/src/styles/cyjs/stylesheet-text.d.ts.map +1 -0
  434. package/dist/src/styles/cyjs/stylesheet-text.js +181 -0
  435. package/dist/src/styles/cyjs/stylesheet-text.js.map +1 -0
  436. package/dist/src/styles/cytoscape/emit.d.ts +125 -0
  437. package/dist/src/styles/cytoscape/emit.d.ts.map +1 -0
  438. package/dist/src/styles/cytoscape/emit.js +1025 -0
  439. package/dist/src/styles/cytoscape/emit.js.map +1 -0
  440. package/dist/src/styles/cytoscape/index.d.ts +10 -0
  441. package/dist/src/styles/cytoscape/index.d.ts.map +1 -0
  442. package/dist/src/styles/cytoscape/index.js +10 -0
  443. package/dist/src/styles/cytoscape/index.js.map +1 -0
  444. package/dist/src/styles/cytoscape/lexicon.d.ts +49 -0
  445. package/dist/src/styles/cytoscape/lexicon.d.ts.map +1 -0
  446. package/dist/src/styles/cytoscape/lexicon.js +603 -0
  447. package/dist/src/styles/cytoscape/lexicon.js.map +1 -0
  448. package/dist/src/styles/cytoscape/mappings.d.ts +171 -0
  449. package/dist/src/styles/cytoscape/mappings.d.ts.map +1 -0
  450. package/dist/src/styles/cytoscape/mappings.js +460 -0
  451. package/dist/src/styles/cytoscape/mappings.js.map +1 -0
  452. package/dist/src/styles/cytoscape/resolve.d.ts +137 -0
  453. package/dist/src/styles/cytoscape/resolve.d.ts.map +1 -0
  454. package/dist/src/styles/cytoscape/resolve.js +381 -0
  455. package/dist/src/styles/cytoscape/resolve.js.map +1 -0
  456. package/dist/src/styles/cytoscape/translate.d.ts +50 -0
  457. package/dist/src/styles/cytoscape/translate.d.ts.map +1 -0
  458. package/dist/src/styles/cytoscape/translate.js +156 -0
  459. package/dist/src/styles/cytoscape/translate.js.map +1 -0
  460. package/dist/src/styles/defaults.d.ts +90 -0
  461. package/dist/src/styles/defaults.d.ts.map +1 -0
  462. package/dist/src/styles/defaults.js +414 -0
  463. package/dist/src/styles/defaults.js.map +1 -0
  464. package/dist/src/styles/index.d.ts +15 -0
  465. package/dist/src/styles/index.d.ts.map +1 -0
  466. package/dist/src/styles/index.js +14 -0
  467. package/dist/src/styles/index.js.map +1 -0
  468. package/dist/src/styles/internal.d.ts +17 -0
  469. package/dist/src/styles/internal.d.ts.map +1 -0
  470. package/dist/src/styles/internal.js +16 -0
  471. package/dist/src/styles/internal.js.map +1 -0
  472. package/dist/src/styles/io/approximations.d.ts +24 -0
  473. package/dist/src/styles/io/approximations.d.ts.map +1 -0
  474. package/dist/src/styles/io/approximations.js +51 -0
  475. package/dist/src/styles/io/approximations.js.map +1 -0
  476. package/dist/src/styles/io/block.d.ts +166 -0
  477. package/dist/src/styles/io/block.d.ts.map +1 -0
  478. package/dist/src/styles/io/block.js +930 -0
  479. package/dist/src/styles/io/block.js.map +1 -0
  480. package/dist/src/styles/io/generic.d.ts +88 -0
  481. package/dist/src/styles/io/generic.d.ts.map +1 -0
  482. package/dist/src/styles/io/generic.js +516 -0
  483. package/dist/src/styles/io/generic.js.map +1 -0
  484. package/dist/src/styles/io/index.d.ts +8 -0
  485. package/dist/src/styles/io/index.d.ts.map +1 -0
  486. package/dist/src/styles/io/index.js +7 -0
  487. package/dist/src/styles/io/index.js.map +1 -0
  488. package/dist/src/styles/io/writer.d.ts +80 -0
  489. package/dist/src/styles/io/writer.d.ts.map +1 -0
  490. package/dist/src/styles/io/writer.js +596 -0
  491. package/dist/src/styles/io/writer.js.map +1 -0
  492. package/dist/src/styles/notes.d.ts +47 -0
  493. package/dist/src/styles/notes.d.ts.map +1 -0
  494. package/dist/src/styles/notes.js +140 -0
  495. package/dist/src/styles/notes.js.map +1 -0
  496. package/dist/src/styles/plan/classes.d.ts +31 -0
  497. package/dist/src/styles/plan/classes.d.ts.map +1 -0
  498. package/dist/src/styles/plan/classes.js +139 -0
  499. package/dist/src/styles/plan/classes.js.map +1 -0
  500. package/dist/src/styles/plan/continuous.d.ts +32 -0
  501. package/dist/src/styles/plan/continuous.d.ts.map +1 -0
  502. package/dist/src/styles/plan/continuous.js +165 -0
  503. package/dist/src/styles/plan/continuous.js.map +1 -0
  504. package/dist/src/styles/plan/discrete.d.ts +39 -0
  505. package/dist/src/styles/plan/discrete.d.ts.map +1 -0
  506. package/dist/src/styles/plan/discrete.js +127 -0
  507. package/dist/src/styles/plan/discrete.js.map +1 -0
  508. package/dist/src/styles/plan/families.d.ts +31 -0
  509. package/dist/src/styles/plan/families.d.ts.map +1 -0
  510. package/dist/src/styles/plan/families.js +95 -0
  511. package/dist/src/styles/plan/families.js.map +1 -0
  512. package/dist/src/styles/plan/features.d.ts +58 -0
  513. package/dist/src/styles/plan/features.d.ts.map +1 -0
  514. package/dist/src/styles/plan/features.js +185 -0
  515. package/dist/src/styles/plan/features.js.map +1 -0
  516. package/dist/src/styles/plan/index.d.ts +7 -0
  517. package/dist/src/styles/plan/index.d.ts.map +1 -0
  518. package/dist/src/styles/plan/index.js +7 -0
  519. package/dist/src/styles/plan/index.js.map +1 -0
  520. package/dist/src/styles/plan/plan.d.ts +71 -0
  521. package/dist/src/styles/plan/plan.d.ts.map +1 -0
  522. package/dist/src/styles/plan/plan.js +893 -0
  523. package/dist/src/styles/plan/plan.js.map +1 -0
  524. package/dist/src/styles/plan/resolve.d.ts +137 -0
  525. package/dist/src/styles/plan/resolve.d.ts.map +1 -0
  526. package/dist/src/styles/plan/resolve.js +587 -0
  527. package/dist/src/styles/plan/resolve.js.map +1 -0
  528. package/dist/src/styles/types.d.ts +702 -0
  529. package/dist/src/styles/types.d.ts.map +1 -0
  530. package/dist/src/styles/types.js +10 -0
  531. package/dist/src/styles/types.js.map +1 -0
  532. package/dist/src/styles/vocabulary.d.ts +41 -0
  533. package/dist/src/styles/vocabulary.d.ts.map +1 -0
  534. package/dist/src/styles/vocabulary.js +140 -0
  535. package/dist/src/styles/vocabulary.js.map +1 -0
  536. package/dist/src/types.d.ts +64 -1
  537. package/dist/src/types.d.ts.map +1 -1
  538. package/dist/src/types.js.map +1 -1
  539. package/dist/styles.d.ts +1 -0
  540. package/dist/styles.js +322 -0
  541. package/dist/styles.js.map +1 -0
  542. package/dist/xgmml.js +5 -4
  543. package/dist/xgmml.js.map +1 -1
  544. package/package.json +13 -2
  545. package/src/common/codes.ts +7 -0
  546. package/src/common/escape.ts +5 -2
  547. package/src/common/export.ts +179 -140
  548. package/src/common/input.ts +8 -4
  549. package/src/common/json-elements.ts +169 -38
  550. package/src/common/notes.ts +94 -0
  551. package/src/common/report.ts +41 -1
  552. package/src/common/units.ts +42 -0
  553. package/src/common/xml.ts +45 -5
  554. package/src/formats/cx/exporter.ts +95 -11
  555. package/src/formats/cx/importer.ts +126 -90
  556. package/src/formats/cx/styles.ts +304 -0
  557. package/src/formats/cx2/exporter.ts +234 -77
  558. package/src/formats/cx2/importer.ts +19 -1
  559. package/src/formats/cx2/styles.ts +29 -0
  560. package/src/formats/cys/constants.ts +3 -0
  561. package/src/formats/cys/exporter.ts +246 -60
  562. package/src/formats/cys/importer.ts +125 -9
  563. package/src/formats/cys/session.ts +6 -0
  564. package/src/formats/cys/styles.ts +254 -0
  565. package/src/formats/cys/tables.ts +117 -48
  566. package/src/formats/dot/exporter.ts +262 -126
  567. package/src/formats/dot/importer.ts +111 -20
  568. package/src/formats/dot/index.ts +1 -0
  569. package/src/formats/dot/positions.ts +77 -0
  570. package/src/formats/dot/styles.ts +1741 -0
  571. package/src/formats/gexf/exporter.ts +30 -13
  572. package/src/formats/gexf/importer.ts +308 -158
  573. package/src/formats/gexf/index.ts +10 -0
  574. package/src/formats/gexf/schema.ts +5 -0
  575. package/src/formats/gexf/styles.ts +719 -0
  576. package/src/formats/gml/exporter.ts +33 -14
  577. package/src/formats/gml/importer.ts +4 -0
  578. package/src/formats/gml/index.ts +2 -1
  579. package/src/formats/gml/positions.ts +52 -0
  580. package/src/formats/gml/styles.ts +1248 -0
  581. package/src/formats/gml/syntax.ts +173 -62
  582. package/src/formats/graphml/constants.ts +5 -0
  583. package/src/formats/graphml/exporter.ts +163 -71
  584. package/src/formats/graphml/importer.ts +119 -45
  585. package/src/formats/graphml/index.ts +1 -0
  586. package/src/formats/graphml/styles-plain.ts +236 -0
  587. package/src/formats/graphml/styles-yed.ts +1221 -0
  588. package/src/formats/graphml/styles-yfiles3.ts +573 -0
  589. package/src/formats/graphml/tree.ts +36 -20
  590. package/src/formats/graphml/yfiles.ts +89 -13
  591. package/src/formats/json/exporter.ts +76 -26
  592. package/src/formats/json/importer.ts +543 -323
  593. package/src/formats/json/positions.ts +50 -0
  594. package/src/formats/json/styles.ts +2082 -0
  595. package/src/formats/neo4j/exporter.ts +2 -1
  596. package/src/formats/pajek/exporter.ts +195 -106
  597. package/src/formats/pajek/importer.ts +78 -9
  598. package/src/formats/pajek/index.ts +2 -0
  599. package/src/formats/pajek/styles.ts +685 -0
  600. package/src/formats/pajek/syntax.ts +7 -0
  601. package/src/formats/xgmml/columns.ts +39 -9
  602. package/src/formats/xgmml/constants.ts +3 -0
  603. package/src/formats/xgmml/document.ts +54 -12
  604. package/src/formats/xgmml/emit.ts +11 -6
  605. package/src/formats/xgmml/exporter.ts +32 -13
  606. package/src/formats/xgmml/importer.ts +43 -29
  607. package/src/formats/xgmml/styles.ts +400 -0
  608. package/src/index.ts +16 -0
  609. package/src/positions/codes.ts +32 -0
  610. package/src/positions/convert.ts +123 -0
  611. package/src/positions/extract.ts +619 -0
  612. package/src/positions/index.ts +23 -0
  613. package/src/positions/types.ts +221 -0
  614. package/src/registry.ts +179 -8
  615. package/src/styles/annotations.ts +478 -0
  616. package/src/styles/budget.ts +60 -0
  617. package/src/styles/canon/bends.ts +84 -0
  618. package/src/styles/canon/color-tables.ts +386 -0
  619. package/src/styles/canon/color.ts +624 -0
  620. package/src/styles/canon/enums.ts +211 -0
  621. package/src/styles/canon/graphviz.ts +189 -0
  622. package/src/styles/canon/index.ts +13 -0
  623. package/src/styles/canon/number.ts +152 -0
  624. package/src/styles/canon/site.ts +87 -0
  625. package/src/styles/canon/text.ts +221 -0
  626. package/src/styles/codes.ts +104 -0
  627. package/src/styles/cyjs/cascade.ts +2670 -0
  628. package/src/styles/cyjs/defaults-table.ts +82 -0
  629. package/src/styles/cyjs/emit.ts +951 -0
  630. package/src/styles/cyjs/index.ts +37 -0
  631. package/src/styles/cyjs/live.ts +147 -0
  632. package/src/styles/cyjs/mappers.ts +879 -0
  633. package/src/styles/cyjs/selector.ts +778 -0
  634. package/src/styles/cyjs/stylesheet-text.ts +214 -0
  635. package/src/styles/cytoscape/emit.ts +1264 -0
  636. package/src/styles/cytoscape/index.ts +40 -0
  637. package/src/styles/cytoscape/lexicon.ts +656 -0
  638. package/src/styles/cytoscape/mappings.ts +603 -0
  639. package/src/styles/cytoscape/resolve.ts +521 -0
  640. package/src/styles/cytoscape/translate.ts +237 -0
  641. package/src/styles/defaults.ts +504 -0
  642. package/src/styles/index.ts +57 -0
  643. package/src/styles/internal.ts +17 -0
  644. package/src/styles/io/approximations.ts +47 -0
  645. package/src/styles/io/block.ts +1138 -0
  646. package/src/styles/io/generic.ts +687 -0
  647. package/src/styles/io/index.ts +18 -0
  648. package/src/styles/io/writer.ts +745 -0
  649. package/src/styles/notes.ts +165 -0
  650. package/src/styles/plan/classes.ts +166 -0
  651. package/src/styles/plan/continuous.ts +218 -0
  652. package/src/styles/plan/discrete.ts +165 -0
  653. package/src/styles/plan/families.ts +115 -0
  654. package/src/styles/plan/features.ts +234 -0
  655. package/src/styles/plan/index.ts +7 -0
  656. package/src/styles/plan/plan.ts +1129 -0
  657. package/src/styles/plan/resolve.ts +685 -0
  658. package/src/styles/types.ts +814 -0
  659. package/src/styles/vocabulary.ts +172 -0
  660. package/src/types.ts +76 -1
  661. package/dist/chunks/constants-fT3E8JYY.js.map +0 -1
  662. package/dist/chunks/escape-B62ZGM_a.js.map +0 -1
  663. package/dist/chunks/export-rKLeGQMo.js.map +0 -1
  664. package/dist/chunks/exporter-8hLNemFk.js.map +0 -1
  665. package/dist/chunks/exporter-BWwEuOPT.js.map +0 -1
  666. package/dist/chunks/exporter-CpRyHZ3H.js.map +0 -1
  667. package/dist/chunks/importer-BbNb7eNg.js.map +0 -1
  668. package/dist/chunks/importer-C98dpSH4.js.map +0 -1
  669. package/dist/chunks/importer-D794XUTe.js.map +0 -1
  670. package/dist/chunks/importer-Dz7tI8Sa.js.map +0 -1
  671. package/dist/chunks/importer-Ht7LNg8L.js.map +0 -1
  672. package/dist/chunks/importer-WrGRZb0N.js.map +0 -1
  673. package/dist/chunks/importer-xZ-3suY1.js.map +0 -1
  674. package/dist/chunks/json-elements-DKSqpNW1.js.map +0 -1
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Style notes are aggregated, never one per element: one note per (code, target, property), with up to 8 distinct
3
+ * samples, a total count and the element indexes the note covers.
4
+ */
5
+
6
+ import type { StyleNote, StyleNoteCode, StyleTarget } from "./types.js";
7
+
8
+ /** At most this many samples per note. */
9
+ const MAX_SAMPLES = 8;
10
+ /** A sample is cut to this many characters. */
11
+ const MAX_SAMPLE_LENGTH = 80;
12
+
13
+ /** graph-io's English for each note, used only in its own report. */
14
+ const PHRASES: ReadonlyMap<StyleNoteCode, string> = new Map<StyleNoteCode, string>([
15
+ ["W_STYLE_VALUE_TOO_LONG", "values longer than 256 characters were not parsed"],
16
+ ["W_STYLE_BAD_VALUE", "values do not parse"],
17
+ ["W_STYLE_UNKNOWN_VALUE", "values have no name in the vocabulary and are kept as other:<value>"],
18
+ ["W_STYLE_ALPHA_DROPPED", "color alpha was dropped"],
19
+ ["W_STYLE_COLOR_LIST", "color lists are not read as one color"],
20
+ ["W_STYLE_GRADIENT", "gradients are read as their first color"],
21
+ ["W_STYLE_UNFILLED", "nodes with a fill color are drawn unfilled"],
22
+ ["W_STYLE_NO_FILL", "fills are marked transparent"],
23
+ ["W_STYLE_NO_STROKE", "strokes are marked absent"],
24
+ ["W_STYLE_SIZE_MINIMUM", "node sizes are minimums: the node grows to fit its label"],
25
+ ["W_STYLE_HTML_LABEL", "HTML-like labels keep their text; markup was dropped"],
26
+ ["W_STYLE_RECORD_LABEL", "record label fields were joined"],
27
+ ["W_STYLE_EXTRA_LABELS", "elements have more than one label; the first was kept"],
28
+ ["W_STYLE_INHERIT_COLOR", "inherited colors cannot be expressed"],
29
+ ["W_STYLE_NOT_CARRIED", "style properties have no counterpart and were not carried"],
30
+ ["W_STYLE_BAD_MAPPING", "mappings cannot be read"],
31
+ ["W_STYLE_MAPPING_COLUMN_MISSING", "mappings read a column the file does not have"],
32
+ ["W_STYLE_REFERENCE_CYCLE", "style references are circular or too deep"],
33
+ ["W_STYLE_UNRESOLVED", "style references name nothing"],
34
+ ["W_STYLE_NESTING", "style structures are nested too deep"],
35
+ ["W_STYLE_UNREADABLE", "a style section cannot be read"],
36
+ ["W_STYLE_NO_VIZMAP", "the session holds no visual styles"],
37
+ ["W_STYLE_VIEW_STYLE_MISSING", "the view names a style the file does not hold"],
38
+ ["W_STYLE_OTHER_STYLES", "other visual styles were not read"],
39
+ ["W_STYLE_OTHER_VIEWS", "other views were not read"],
40
+ ["W_STYLE_SELECTOR", "invalid selectors match every element"],
41
+ ["W_STYLE_SELECTOR_AS_COLUMN", "selectors were evaluated into per-element values"],
42
+ ["W_STYLE_STATE_ASSUMED", "selector states were evaluated as at load"],
43
+ ["W_STYLE_RAMP_ROUNDED", "continuous mappings match within the tool's rounding"],
44
+ ["W_STYLE_LAYER_CAP", "rules were folded into per-element copies"],
45
+ ["W_STYLE_BUDGET", "the work budget ran out; values were copied per element"],
46
+ ["W_STYLE_BLOCK_IGNORED", "the graphty.styles block was ignored"],
47
+ ["W_STYLE_NOT_WRITTEN", "the format cannot hold this style"],
48
+ ["W_STYLE_APPROXIMATED", "written as the nearest value the format allows"],
49
+ ["W_STYLE_RULES_NOT_KEPT", "per-element values were written but not the rules"],
50
+ ["W_STYLE_LAYER_FLATTENED", "a style was written as per-element values"],
51
+ ]);
52
+
53
+ /** One note being collected. */
54
+ interface Collecting {
55
+ readonly code: StyleNoteCode;
56
+ readonly target: StyleTarget | "graph" | null;
57
+ readonly property: string | null;
58
+ count: number;
59
+ readonly samples: string[];
60
+ readonly elements: Set<number>;
61
+ unindexed: boolean;
62
+ }
63
+
64
+ /**
65
+ * Options of one report to `StyleNotes.add()`.
66
+ * @category Styles
67
+ */
68
+ export interface StyleNoteReport {
69
+ /** An example of the offending value; kept while the note has fewer than 8 distinct samples. */
70
+ readonly sample?: unknown;
71
+ /** The element the report is about, by index. */
72
+ readonly element?: number;
73
+ /** How many occurrences the report stands for; defaults to 1. */
74
+ readonly count?: number;
75
+ }
76
+
77
+ /**
78
+ * Collects style notes, aggregated per (code, target, property).
79
+ * @category Styles
80
+ */
81
+ export class StyleNotes {
82
+ readonly #notes = new Map<string, Collecting>();
83
+
84
+ /**
85
+ * Records one occurrence (or `count` occurrences) of a condition.
86
+ * @param code - the condition
87
+ * @param target - nodes, edges, the graph, or null for the file as a whole
88
+ * @param property - the property or the file's name for the construct, or null
89
+ * @param report - a sample, the element index and a count
90
+ */
91
+ add(
92
+ code: StyleNoteCode,
93
+ target: StyleTarget | "graph" | null,
94
+ property: string | null,
95
+ report: StyleNoteReport = {},
96
+ ): void {
97
+ const key = `${code}\u0000${target ?? ""}\u0000${property ?? ""}`;
98
+ let note = this.#notes.get(key);
99
+ if (note === undefined) {
100
+ note = { code, target, property, count: 0, samples: [], elements: new Set(), unindexed: false };
101
+ this.#notes.set(key, note);
102
+ }
103
+ note.count += report.count ?? 1;
104
+ if (report.element === undefined) {
105
+ note.unindexed = true;
106
+ } else {
107
+ note.elements.add(report.element);
108
+ }
109
+ if (report.sample !== undefined && note.samples.length < MAX_SAMPLES) {
110
+ const sample = sampleText(report.sample);
111
+ if (!note.samples.includes(sample)) {
112
+ note.samples.push(sample);
113
+ }
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Whether a note with this code, target and property covers an element.
119
+ * @param code - the condition
120
+ * @param target - nodes or edges
121
+ * @param property - the property
122
+ * @param element - the element index
123
+ * @returns true when such a note named the element
124
+ */
125
+ covers(code: StyleNoteCode, target: StyleTarget, property: string | null, element: number): boolean {
126
+ return this.#notes.get(`${code}\u0000${target}\u0000${property ?? ""}`)?.elements.has(element) === true;
127
+ }
128
+
129
+ /**
130
+ * The collected notes, in the order their conditions first occurred.
131
+ * @returns one note per (code, target, property)
132
+ */
133
+ list(): StyleNote[] {
134
+ const out: StyleNote[] = [];
135
+ for (const n of this.#notes.values()) {
136
+ const where = n.property === null ? (n.target ?? "file") : `${n.target ?? "file"} ${n.property}`;
137
+ out.push({
138
+ code: n.code,
139
+ params: { property: n.property, target: n.target, count: n.count, samples: [...n.samples] },
140
+ elements: n.unindexed ? { count: n.count } : Array.from(n.elements).sort((a, b) => a - b),
141
+ message: `${where}: ${PHRASES.get(n.code) ?? n.code} (${n.count})`,
142
+ });
143
+ }
144
+ return out;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * A sample as at most 80 characters of text.
150
+ * @param value - the sample
151
+ * @returns its text
152
+ */
153
+ function sampleText(value: unknown): string {
154
+ let text: string;
155
+ if (typeof value === "string") {
156
+ text = value;
157
+ } else {
158
+ try {
159
+ text = JSON.stringify(value) ?? typeof value;
160
+ } catch {
161
+ text = typeof value;
162
+ }
163
+ }
164
+ return text.slice(0, MAX_SAMPLE_LENGTH);
165
+ }
@@ -0,0 +1,166 @@
1
+ /**
2
+ * The opaque pool: the families nothing explains. Over their non-text, non-size properties each distinct joint tuple
3
+ * of values is a style class, numbered 1..k by frequency in the style column `class`; a few classes become one group
4
+ * rule each, more become one table keyed by the class. What is left is copied per element.
5
+ */
6
+
7
+ import type { StyleRule, StyleTarget, StyleValue } from "../types.js";
8
+ import { STYLE_PROPERTIES } from "../vocabulary.js";
9
+ import { MIN_MAPPED } from "./discrete.js";
10
+ import { valueKey } from "./families.js";
11
+
12
+ /** The most style classes; more distinct tuples are copied per element. */
13
+ const MAX_CLASSES = 64;
14
+ /** At most this many classes become one group rule each. */
15
+ const MAX_CLASS_RULES = 4;
16
+ /** Sizes vary per element by nature and are never joined into a class. */
17
+ const SIZES: ReadonlySet<string> = new Set(["width", "height"]);
18
+ /** The style column holding each element's class. */
19
+ export const CLASS_COLUMN = "class";
20
+
21
+ /**
22
+ * The style classes of an opaque pool.
23
+ */
24
+ interface StyleClasses {
25
+ /** The properties the classes explain. */
26
+ readonly classed: readonly string[];
27
+ /** The class of each element, 1..k, or null. */
28
+ readonly column: (number | null)[];
29
+ /** One group rule per class, or one mapping rule keyed by the class. */
30
+ readonly rules: StyleRule[];
31
+ }
32
+
33
+ /**
34
+ * Whether a property's values have few enough distinct values to be part of a class.
35
+ * @param values - the values
36
+ * @returns true when they do
37
+ */
38
+ function fewValues(values: readonly (StyleValue | null)[]): boolean {
39
+ const seen = new Set<string>();
40
+ for (const v of values) {
41
+ seen.add(valueKey(v));
42
+ if (seen.size > MAX_CLASSES + 1) {
43
+ return false;
44
+ }
45
+ }
46
+ return true;
47
+ }
48
+
49
+ /**
50
+ * One element's combination of values of the classable properties, as a key; null when it has none.
51
+ * @param classable - the properties
52
+ * @param truth - the values per property
53
+ * @param i - the element
54
+ * @returns the key
55
+ */
56
+ function tupleKey(
57
+ classable: readonly string[],
58
+ truth: ReadonlyMap<string, readonly (StyleValue | null)[]>,
59
+ i: number,
60
+ ): string | null {
61
+ let key = "";
62
+ let any = false;
63
+ for (const p of classable) {
64
+ const v = (truth.get(p) ?? [])[i] ?? null;
65
+ any ||= v !== null;
66
+ key += `${valueKey(v)}\u0001`;
67
+ }
68
+ return any ? key : null;
69
+ }
70
+
71
+ /**
72
+ * Finds the style classes of the opaque properties.
73
+ * @param target - nodes or edges
74
+ * @param props - the opaque properties
75
+ * @param truth - the values per property
76
+ * @param n - the element count
77
+ * @param spend - spends work from the budget
78
+ * @returns the classes, or null when the values have too many combinations
79
+ */
80
+ export function styleClasses(
81
+ target: StyleTarget,
82
+ props: readonly string[],
83
+ truth: ReadonlyMap<string, readonly (StyleValue | null)[]>,
84
+ n: number,
85
+ spend: (ops: number) => void,
86
+ ): StyleClasses | null {
87
+ const classable = props.filter(
88
+ (p) => STYLE_PROPERTIES[target].get(p) !== "text" && !SIZES.has(p) && fewValues(truth.get(p) ?? []),
89
+ );
90
+ if (classable.length === 0) {
91
+ return null;
92
+ }
93
+ spend(n * (classable.length + 1));
94
+ const counts = new Map<string, { count: number; rep: number }>();
95
+ const tupleOf = new Array<string | null>(n).fill(null);
96
+ let withTuple = 0;
97
+ for (let i = 0; i < n; i++) {
98
+ const key = tupleKey(classable, truth, i);
99
+ if (key === null) {
100
+ continue;
101
+ }
102
+ withTuple++;
103
+ tupleOf[i] = key;
104
+ const c = counts.get(key);
105
+ if (c === undefined) {
106
+ counts.set(key, { count: 1, rep: i });
107
+ if (counts.size > MAX_CLASSES) {
108
+ return null;
109
+ }
110
+ } else {
111
+ c.count++;
112
+ }
113
+ }
114
+ if (counts.size === 0 || withTuple < MIN_MAPPED || counts.size * 2 > withTuple) {
115
+ return null;
116
+ }
117
+ // classes by frequency, ties by first appearance (a stable sort)
118
+ const order = Array.from(counts.entries()).sort((a, b) => b[1].count - a[1].count);
119
+ const rank = new Map(order.map(([key], j) => [key, j + 1]));
120
+ const column = tupleOf.map((t) => (t === null ? null : (rank.get(t) ?? null)));
121
+ const ref = { style: CLASS_COLUMN };
122
+ const valueOf = (p: string, rep: number): StyleValue | null => (truth.get(p) ?? [])[rep] ?? null;
123
+ const rules: StyleRule[] = [];
124
+ if (order.length <= Math.min(MAX_CLASS_RULES, Math.floor(withTuple / 4))) {
125
+ order.forEach(([, { count, rep }], j) => {
126
+ const set: Record<string, StyleValue> = {};
127
+ for (const p of classable) {
128
+ const v = valueOf(p, rep);
129
+ if (v !== null) {
130
+ set[p] = v;
131
+ }
132
+ }
133
+ rules.push({
134
+ id: `${target}.class.${String(j + 1)}`,
135
+ target,
136
+ role: "group",
137
+ origin: "inferred",
138
+ where: { eq: [ref, j + 1] },
139
+ set,
140
+ facts: { elements: count, reason: "STYLE_CLASS" },
141
+ });
142
+ });
143
+ } else {
144
+ const map: Record<string, { kind: "discrete"; by: { style: string }; table: [number, StyleValue][] }> = {};
145
+ for (const p of classable) {
146
+ const table: [number, StyleValue][] = [];
147
+ order.forEach(([, { rep }], j) => {
148
+ const v = valueOf(p, rep);
149
+ if (v !== null) {
150
+ table.push([j + 1, v]);
151
+ }
152
+ });
153
+ map[p] = { kind: "discrete", by: ref, table };
154
+ }
155
+ rules.push({
156
+ id: `${target}.classes`,
157
+ target,
158
+ role: "mapping",
159
+ origin: "inferred",
160
+ where: { all: true },
161
+ map,
162
+ facts: { classes: order.length, elements: withTuple, reason: "STYLE_CLASS" },
163
+ });
164
+ }
165
+ return { classed: classable, column, rules };
166
+ }
@@ -0,0 +1,218 @@
1
+ /**
2
+ * A continuous mapping on one numeric feature: the fewest linear pieces (at most 8, each explaining at least 3
3
+ * distinct inputs), exact first, else within the rounding the writing tool did per element.
4
+ */
5
+
6
+ import type { ContinuousPoint, StyleValue } from "../types.js";
7
+ import { MIN_MAPPED } from "./discrete.js";
8
+ import type { Family } from "./families.js";
9
+ import type { FeatureInfo } from "./features.js";
10
+ import { interpolate, within } from "./resolve.js";
11
+
12
+ /** The most linear pieces a ramp may have. */
13
+ const MAX_PIECES = 8;
14
+ /** The most distinct inputs a ramp is fitted over. */
15
+ const MAX_DISTINCT_X = 4096;
16
+ const HEX6 = /^#[0-9a-f]{6}$/;
17
+
18
+ /**
19
+ * A continuous mapping that explains a family.
20
+ */
21
+ export interface ContinuousCandidate {
22
+ /** The kind of candidate. */
23
+ readonly type: "continuous";
24
+ /** The feature the ramp reads. */
25
+ readonly info: FeatureInfo;
26
+ /** The points per property. */
27
+ readonly points: ReadonlyMap<string, ContinuousPoint[]>;
28
+ /** Whether the ramp matches only within the tool's rounding. */
29
+ readonly tolerant: boolean;
30
+ /** The description cost. */
31
+ readonly cost: number;
32
+ }
33
+
34
+ /**
35
+ * Whether a value can be interpolated: a number or a canonical color.
36
+ * @param v - the value
37
+ * @returns true when it can
38
+ */
39
+ function interpolable(v: StyleValue | null): v is number | string {
40
+ return typeof v === "number" || (typeof v === "string" && HEX6.test(v));
41
+ }
42
+
43
+ /**
44
+ * The fewest linear pieces over sorted distinct points, or null when more than `MAX_PIECES` are needed.
45
+ * @param xs - the inputs, ascending
46
+ * @param ys - the outputs
47
+ * @param tolerant - whether a piece may miss a point by the tool's rounding
48
+ * @param spend - spends work from the budget
49
+ * @returns each piece's first and last point index, or null
50
+ */
51
+ function fitPieces(
52
+ xs: readonly number[],
53
+ ys: readonly StyleValue[],
54
+ tolerant: boolean,
55
+ spend: (ops: number) => void,
56
+ ): [number, number][] | null {
57
+ const pieces: [number, number][] = [];
58
+ let a = 0;
59
+ while (a < xs.length) {
60
+ let b = a;
61
+ // extend while the line from a to b + 1 reproduces every point between
62
+ while (b + 1 < xs.length) {
63
+ const ok = lineFits(xs, ys, a, b + 1, tolerant);
64
+ spend(b + 1 - a);
65
+ if (!ok) {
66
+ break;
67
+ }
68
+ b++;
69
+ }
70
+ pieces.push([a, b]);
71
+ if (pieces.length > MAX_PIECES) {
72
+ return null;
73
+ }
74
+ a = b + 1;
75
+ }
76
+ return pieces;
77
+ }
78
+
79
+ /**
80
+ * Whether the line from point a to point c reproduces every point between.
81
+ * @param xs - the inputs, ascending
82
+ * @param ys - the outputs
83
+ * @param a - the first point
84
+ * @param c - the last point
85
+ * @param tolerant - whether the line may miss a point by the tool's rounding
86
+ * @returns true when it does
87
+ */
88
+ function lineFits(xs: readonly number[], ys: readonly StyleValue[], a: number, c: number, tolerant: boolean): boolean {
89
+ for (let j = a + 1; j < c; j++) {
90
+ const v = interpolate(ys[a], ys[c], (xs[j] - xs[a]) / (xs[c] - xs[a]));
91
+ if (tolerant ? !within(v, ys[j]) : v !== ys[j]) {
92
+ return false;
93
+ }
94
+ }
95
+ return true;
96
+ }
97
+
98
+ /**
99
+ * The points of a fitted ramp.
100
+ * @param xs - the inputs
101
+ * @param ys - the outputs
102
+ * @param pieces - the pieces
103
+ * @returns the points, ascending
104
+ */
105
+ function piecesToPoints(
106
+ xs: readonly number[],
107
+ ys: readonly StyleValue[],
108
+ pieces: [number, number][],
109
+ ): ContinuousPoint[] {
110
+ const out: ContinuousPoint[] = [];
111
+ for (const [a, b] of pieces) {
112
+ out.push({ at: xs[a], below: ys[a], value: ys[a], above: ys[a] });
113
+ if (b !== a) {
114
+ out.push({ at: xs[b], below: ys[b], value: ys[b], above: ys[b] });
115
+ }
116
+ }
117
+ return out;
118
+ }
119
+
120
+ /**
121
+ * Tests a continuous mapping on one feature.
122
+ * @param fam - the family
123
+ * @param info - the feature
124
+ * @param truth - the values per property
125
+ * @param spend - spends work from the budget
126
+ * @returns the candidate, or null when the feature does not explain the family
127
+ */
128
+ export function continuousCandidate(
129
+ fam: Family,
130
+ info: FeatureInfo,
131
+ truth: ReadonlyMap<string, readonly (StyleValue | null)[]>,
132
+ spend: (ops: number) => void,
133
+ ): ContinuousCandidate | null {
134
+ if (!info.numeric || info.raw || fam.styled.length < MIN_MAPPED) {
135
+ return null;
136
+ }
137
+ const { values } = info.feature;
138
+ spend(values.length);
139
+ // the feature must be a number exactly where the family has a value
140
+ if (values.some((v, i) => (fam.blocks[i] === 0) === (typeof v === "number"))) {
141
+ return null;
142
+ }
143
+ for (const tolerant of [false, true]) {
144
+ const points = rampsOf(fam, values, truth, tolerant, spend);
145
+ if (points !== null) {
146
+ const entries = Array.from(points.values()).reduce((sum, pts) => sum + pts.length, 0);
147
+ return { type: "continuous", info, points, tolerant, cost: 50 + entries + (tolerant ? 10 : 0) };
148
+ }
149
+ }
150
+ return null;
151
+ }
152
+
153
+ /**
154
+ * The ramp of every property of the family over the feature, or null when one has none.
155
+ * @param fam - the family
156
+ * @param values - the feature's values
157
+ * @param truth - the values per property
158
+ * @param tolerant - whether a ramp may miss a value by the tool's rounding
159
+ * @param spend - spends work from the budget
160
+ * @returns the points per property, or null
161
+ */
162
+ function rampsOf(
163
+ fam: Family,
164
+ values: readonly unknown[],
165
+ truth: ReadonlyMap<string, readonly (StyleValue | null)[]>,
166
+ tolerant: boolean,
167
+ spend: (ops: number) => void,
168
+ ): Map<string, ContinuousPoint[]> | null {
169
+ const points = new Map<string, ContinuousPoint[]>();
170
+ for (const p of fam.props) {
171
+ const pts = rampOf(fam, values, truth.get(p) ?? [], tolerant, spend);
172
+ if (pts === null) {
173
+ return null;
174
+ }
175
+ points.set(p, pts);
176
+ }
177
+ return points;
178
+ }
179
+
180
+ /**
181
+ * The ramp of one property over the feature, or null when none explains it.
182
+ * @param fam - the family
183
+ * @param values - the feature's values
184
+ * @param ys0 - the property's values
185
+ * @param tolerant - whether the ramp may miss a value by the tool's rounding
186
+ * @param spend - spends work from the budget
187
+ * @returns the points, or null
188
+ */
189
+ function rampOf(
190
+ fam: Family,
191
+ values: readonly unknown[],
192
+ ys0: readonly (StyleValue | null)[],
193
+ tolerant: boolean,
194
+ spend: (ops: number) => void,
195
+ ): ContinuousPoint[] | null {
196
+ const byX = new Map<number, StyleValue>();
197
+ let good = true;
198
+ for (const i of fam.styled) {
199
+ const y = ys0[i];
200
+ const x = values[i] as number;
201
+ const seen = byX.get(x);
202
+ if (!interpolable(y) || (seen !== undefined && seen !== y)) {
203
+ good = false;
204
+ break;
205
+ }
206
+ byX.set(x, y);
207
+ }
208
+ spend(fam.styled.length);
209
+ // a ramp needs at least 3 distinct outputs: two values over a number are a threshold, not a mapping
210
+ if (!good || byX.size < 2 || byX.size > MAX_DISTINCT_X || new Set(byX.values()).size < 3) {
211
+ return null;
212
+ }
213
+ const xs = Array.from(byX.keys()).sort((a, b) => a - b);
214
+ const ys = xs.map((x) => byX.get(x) as StyleValue);
215
+ const pieces = fitPieces(xs, ys, tolerant, spend);
216
+ // every piece must explain at least 3 distinct inputs, or a few points fit anything
217
+ return pieces === null || pieces.length * 3 > xs.length ? null : piecesToPoints(xs, ys, pieces);
218
+ }