@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,127 @@
1
+ /**
2
+ * A discrete mapping on one categorical feature: the feature's values fall inside the family's blocks, up to 20% of
3
+ * the styled elements excepted, and the elements missing the feature may form their own group.
4
+ */
5
+ import { valueKey } from "./families.js";
6
+ /** Below this many styled elements anything explains anything: no mapping is tried. */
7
+ export const MIN_MAPPED = 8;
8
+ /** The most keys a discrete table may hold. */
9
+ const MAX_KEYS = 256;
10
+ /** The share of styled elements a mapping may get wrong; the replay moves them into the exceptions. */
11
+ const MAX_EXCEPTION_SHARE = 0.2;
12
+ /**
13
+ * Tests a discrete mapping on one feature.
14
+ * @param fam - the family
15
+ * @param info - the feature
16
+ * @param n - the element count
17
+ * @param spend - spends work from the budget
18
+ * @returns the candidate, or null when the feature does not explain the family
19
+ */
20
+ export function discreteCandidate(fam, info, n, spend) {
21
+ const nF = fam.styled.length;
22
+ if (!info.categorical || info.raw || nF < MIN_MAPPED) {
23
+ return null;
24
+ }
25
+ if (info.distinct < 2 || info.distinct > Math.min(MAX_KEYS, nF / 2) || info.distinct >= 0.9 * n) {
26
+ return null;
27
+ }
28
+ spend(n);
29
+ const { values } = info.feature;
30
+ const { votes, nullBlocks } = votesOf(fam, values);
31
+ const { table, exceptions: wrong } = tableOf(votes);
32
+ let exceptions = wrong;
33
+ // never paint an element the file left unstyled
34
+ const unstyledMissing = unstyledOf(fam, values, table, n);
35
+ if (unstyledMissing === null) {
36
+ return null;
37
+ }
38
+ // the elements missing the key form one group when they share one style (Gephi's "null" partition)
39
+ let bucket = null;
40
+ if (nullBlocks.size === 1 && !unstyledMissing) {
41
+ bucket = nullBlocks.keys().next().value ?? null;
42
+ }
43
+ else {
44
+ for (const c of nullBlocks.values()) {
45
+ exceptions += c;
46
+ }
47
+ }
48
+ if (exceptions > Math.max(2, MAX_EXCEPTION_SHARE * nF)) {
49
+ return null;
50
+ }
51
+ const cost = 50 + table.size * fam.props.length + (exceptions > 0 ? 50 + exceptions : 0) + (bucket === null ? 0 : 50);
52
+ return { type: "discrete", info, table, bucket, cost };
53
+ }
54
+ /**
55
+ * Counts, per key of the feature, the styled elements in each block; and per block, those missing the feature.
56
+ * @param fam - the family
57
+ * @param values - the feature's values
58
+ * @returns the votes, and the blocks of the elements missing the feature
59
+ */
60
+ function votesOf(fam, values) {
61
+ const votes = new Map();
62
+ const nullBlocks = new Map();
63
+ for (const i of fam.styled) {
64
+ const b = fam.blocks[i];
65
+ const kv = values[i];
66
+ if (kv === null) {
67
+ nullBlocks.set(b, (nullBlocks.get(b) ?? 0) + 1);
68
+ continue;
69
+ }
70
+ const key = valueKey(kv);
71
+ let vote = votes.get(key);
72
+ if (vote === undefined) {
73
+ vote = { raw: kv, counts: new Map() };
74
+ votes.set(key, vote);
75
+ }
76
+ vote.counts.set(b, (vote.counts.get(b) ?? 0) + 1);
77
+ }
78
+ return { votes, nullBlocks };
79
+ }
80
+ /**
81
+ * The table: each key maps to the block most of its elements are in; the others are exceptions.
82
+ * @param votes - the votes
83
+ * @returns the table and how many elements it gets wrong
84
+ */
85
+ function tableOf(votes) {
86
+ const table = new Map();
87
+ let exceptions = 0;
88
+ for (const [key, { raw, counts }] of votes) {
89
+ let best = -1;
90
+ let bestCount = -1;
91
+ let total = 0;
92
+ for (const [b, c] of counts) {
93
+ total += c;
94
+ if (c > bestCount) {
95
+ bestCount = c;
96
+ best = b;
97
+ }
98
+ }
99
+ table.set(key, { raw, block: best });
100
+ exceptions += total - bestCount;
101
+ }
102
+ return { table, exceptions };
103
+ }
104
+ /**
105
+ * Whether an element the file left unstyled misses the feature (or holds false, which a missing-key group's "not has"
106
+ * also matches).
107
+ * @param fam - the family
108
+ * @param values - the feature's values
109
+ * @param table - the table
110
+ * @param n - the element count
111
+ * @returns the answer, or null when the table would paint an unstyled element
112
+ */
113
+ function unstyledOf(fam, values, table, n) {
114
+ let missing = false;
115
+ for (let i = 0; i < n; i++) {
116
+ const v = values[i];
117
+ if (fam.blocks[i] !== 0) {
118
+ continue;
119
+ }
120
+ if (v !== null && table.has(valueKey(v))) {
121
+ return null;
122
+ }
123
+ missing || (missing = v === null || v === false);
124
+ }
125
+ return missing;
126
+ }
127
+ //# sourceMappingURL=discrete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discrete.js","sourceRoot":"","sources":["../../../../src/styles/plan/discrete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAe,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGtD,uFAAuF;AACvF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,+CAA+C;AAC/C,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,uGAAuG;AACvG,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAqBhC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC7B,GAAW,EACX,IAAiB,EACjB,CAAS,EACT,KAA4B;IAE5B,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;IAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,UAAU,EAAE,CAAC;QACnD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC9F,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,CAAC;IACT,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;IAChC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,gDAAgD;IAChD,MAAM,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1D,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,mGAAmG;IACnG,IAAI,MAAM,GAAkB,IAAI,CAAC;IACjC,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC;IACpD,CAAC;SAAM,CAAC;QACJ,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAClC,UAAU,IAAI,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IACD,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC;QACrD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GACN,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7G,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC3D,CAAC;AAKD;;;;;GAKG;AACH,SAAS,OAAO,CAAC,GAAW,EAAE,MAAoC;IAC9D,MAAM,KAAK,GAAU,IAAI,GAAG,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;YACd,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAChD,SAAS;QACb,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,IAAI,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YACtC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,OAAO,CAAC,KAAY;IACzB,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4C,CAAC;IAClE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QACzC,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;YAC1B,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC;gBAChB,SAAS,GAAG,CAAC,CAAC;gBACd,IAAI,GAAG,CAAC,CAAC;YACb,CAAC;QACL,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrC,UAAU,IAAI,KAAK,GAAG,SAAS,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,UAAU,CACf,GAAW,EACX,MAAoC,EACpC,KAAmC,EACnC,CAAS;IAET,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,SAAS;QACb,CAAC;QACD,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAP,OAAO,GAAK,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,EAAC;IAC1C,CAAC;IACD,OAAO,OAAO,CAAC;AACnB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Exact equivalence classes: every property's values partition the elements (null is a block of its own), and
3
+ * properties with identical partitions form one family, explained once.
4
+ */
5
+ import type { StyleValue } from "../types.js";
6
+ /**
7
+ * A group of properties that partition the elements the same way.
8
+ */
9
+ export interface Family {
10
+ /** The properties, in the order they were given. */
11
+ readonly props: string[];
12
+ /** Each element's block: 0 for null, 1.. by first appearance. */
13
+ readonly blocks: Int32Array;
14
+ /** The number of non-null blocks. */
15
+ readonly k: number;
16
+ /** The elements with a value (block above 0), ascending. */
17
+ readonly styled: number[];
18
+ }
19
+ /**
20
+ * The text a value is compared by.
21
+ * @param v - the value
22
+ * @returns a key unique per value and type
23
+ */
24
+ export declare function valueKey(v: string | number | boolean | null | undefined): string;
25
+ /**
26
+ * Groups properties by identical partitions.
27
+ * @param props - the properties, each with its values
28
+ * @returns the families, in the order of their first property
29
+ */
30
+ export declare function familiesOf(props: readonly (readonly [string, readonly (StyleValue | null)[]])[]): Family[];
31
+ //# sourceMappingURL=families.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"families.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/families.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,MAAM;IACnB,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAEhF;AAyDD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,CAwB1G"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Exact equivalence classes: every property's values partition the elements (null is a block of its own), and
3
+ * properties with identical partitions form one family, explained once.
4
+ */
5
+ /**
6
+ * The text a value is compared by.
7
+ * @param v - the value
8
+ * @returns a key unique per value and type
9
+ */
10
+ export function valueKey(v) {
11
+ return v === null || v === undefined ? "\u0000null" : `${typeof v}:${String(v)}`;
12
+ }
13
+ /**
14
+ * The partition of the elements by a property's values.
15
+ * @param values - the values by element
16
+ * @returns each element's block (0 for null, then by first appearance) and the number of non-null blocks
17
+ */
18
+ function partition(values) {
19
+ const ids = new Map();
20
+ const blocks = new Int32Array(values.length);
21
+ for (let i = 0; i < values.length; i++) {
22
+ const v = values[i];
23
+ if (v === null) {
24
+ continue;
25
+ }
26
+ const key = valueKey(v);
27
+ let id = ids.get(key);
28
+ if (id === undefined) {
29
+ id = ids.size + 1;
30
+ ids.set(key, id);
31
+ }
32
+ blocks[i] = id;
33
+ }
34
+ return { blocks, k: ids.size };
35
+ }
36
+ /**
37
+ * A hash of a block array.
38
+ * @param blocks - the blocks
39
+ * @returns its hash
40
+ */
41
+ function hashBlocks(blocks) {
42
+ let h = 0x811c9dc5;
43
+ for (const b of blocks) {
44
+ h = Math.imul(h ^ b, 0x01000193);
45
+ }
46
+ return h >>> 0;
47
+ }
48
+ /**
49
+ * Whether two block arrays are equal.
50
+ * @param a - one
51
+ * @param b - the other
52
+ * @returns true when equal
53
+ */
54
+ function sameBlocks(a, b) {
55
+ if (a.length !== b.length) {
56
+ return false;
57
+ }
58
+ for (let i = 0; i < a.length; i++) {
59
+ if (a[i] !== b[i]) {
60
+ return false;
61
+ }
62
+ }
63
+ return true;
64
+ }
65
+ /**
66
+ * Groups properties by identical partitions.
67
+ * @param props - the properties, each with its values
68
+ * @returns the families, in the order of their first property
69
+ */
70
+ export function familiesOf(props) {
71
+ const byHash = new Map();
72
+ const out = [];
73
+ for (const [p, values] of props) {
74
+ const { blocks, k } = partition(values);
75
+ const h = hashBlocks(blocks);
76
+ const list = byHash.get(h) ?? [];
77
+ const hit = list.find((f) => sameBlocks(f.blocks, blocks));
78
+ if (hit !== undefined) {
79
+ hit.props.push(p);
80
+ continue;
81
+ }
82
+ const styled = [];
83
+ for (let i = 0; i < blocks.length; i++) {
84
+ if (blocks[i] !== 0) {
85
+ styled.push(i);
86
+ }
87
+ }
88
+ const fam = { props: [p], blocks, k, styled };
89
+ list.push(fam);
90
+ byHash.set(h, list);
91
+ out.push(fam);
92
+ }
93
+ return out;
94
+ }
95
+ //# sourceMappingURL=families.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"families.js","sourceRoot":"","sources":["../../../../src/styles/plan/families.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAkBH;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,CAA+C;IACpE,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;AACrF,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAAC,MAAsC;IACrD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACb,SAAS;QACb,CAAC;QACD,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;YACnB,EAAE,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YAClB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,MAAkB;IAClC,IAAI,CAAC,GAAG,UAAU,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACrB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAAC,CAAa,EAAE,CAAa;IAC5C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,KAAqE;IAC5F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC3C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QAC9B,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,SAAS;QACb,CAAC;QACD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;QACD,MAAM,GAAG,GAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;QACtD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Candidate explaining columns: the snapshot's attributes and the graph's degrees, which the planner tests as
3
+ * explanations of a file's per-element style values, and the fingerprint that ties styles to their graph.
4
+ */
5
+ import type { GraphSnapshot } from "@graphty/graph-format";
6
+ import type { StyleFeature, StyleFingerprint, StyleTarget } from "../types.js";
7
+ /**
8
+ * The candidate explaining columns of one target: every scalar attribute (the reserved `graphty.*` columns,
9
+ * coordinates and Cytoscape's selection state excepted), the group a node sits in as the style column `group`, and
10
+ * for nodes the degree (and the in- and out-degree of a directed graph) as `{ computed }` references, which follow
11
+ * later edits of the graph.
12
+ * @param snapshot - the graph
13
+ * @param target - nodes or edges
14
+ * @returns the features, in column order with the degrees last
15
+ * @category Styles
16
+ */
17
+ export declare function featuresOf(snapshot: GraphSnapshot, target: StyleTarget): StyleFeature[];
18
+ /**
19
+ * The fingerprint of a graph: its node and edge counts and a hash of its node ids' text, whatever their order (a
20
+ * format may read nodes back in another order). The id 7 and the id "7" hash alike, so a graph written to a format
21
+ * that reads its ids back as text (or as numbers) keeps its fingerprint.
22
+ * @param snapshot - the graph
23
+ * @returns the fingerprint
24
+ * @category Styles
25
+ */
26
+ export declare function styleFingerprint(snapshot: GraphSnapshot): StyleFingerprint;
27
+ /**
28
+ * The edge rows a file holds, in order: every row but the second half of an undirected edge in a directed graph,
29
+ * which every format writes once.
30
+ * @param snapshot - the graph
31
+ * @returns the rows
32
+ */
33
+ export declare function heldEdgeRows(snapshot: GraphSnapshot): number[];
34
+ /**
35
+ * What the planner knows about a feature.
36
+ */
37
+ export interface FeatureInfo {
38
+ /** The feature. */
39
+ readonly feature: StyleFeature;
40
+ /** Its name in rule ids. */
41
+ readonly name: string;
42
+ /** Distinct non-null values. */
43
+ readonly distinct: number;
44
+ /** Whether a table on it may explain styles (strings, booleans, integers). */
45
+ readonly categorical: boolean;
46
+ /** Whether a ramp on it may explain styles (finite numbers that are not an index). */
47
+ readonly numeric: boolean;
48
+ /** Whether it is the file's own raw style column, which explains nothing. */
49
+ readonly raw: boolean;
50
+ }
51
+ /**
52
+ * Describes a feature for the planner.
53
+ * @param feature - the feature
54
+ * @param raw - whether it is the raw style column a reader read
55
+ * @returns what the planner knows about it
56
+ */
57
+ export declare function describeFeature(feature: StyleFeature, raw: boolean): FeatureInfo;
58
+ //# sourceMappingURL=features.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/features.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,KAAK,EAAqB,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAYlG;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,GAAG,YAAY,EAAE,CA4BvF;AAmBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,CAuB1E;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,EAAE,CAS9D;AAsED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,mBAAmB;IACnB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,4BAA4B;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,sFAAsF;IACtF,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,CAehF"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * Candidate explaining columns: the snapshot's attributes and the graph's degrees, which the planner tests as
3
+ * explanations of a file's per-element style values, and the fingerprint that ties styles to their graph.
4
+ */
5
+ import { dataCell, degreeValues } from "./resolve.js";
6
+ /** Column types whose values can be features: one scalar per element. */
7
+ const SCALAR_DTYPES = new Set(["string", "dict", "bool", "i32", "u32", "u8", "f32", "f64"]);
8
+ /** Coordinates say where the writer put a node, not what it is. */
9
+ const COORDINATE = /^(?:x|y|z|_pos)$/i;
10
+ /** The column holding the group a node sits in. */
11
+ const PARENT_COLUMN = "graphty.parent";
12
+ /** An integer column of at least this many values that fills a whole range is an index, not a quantity. */
13
+ const MIN_INDEX = 8;
14
+ /**
15
+ * The candidate explaining columns of one target: every scalar attribute (the reserved `graphty.*` columns,
16
+ * coordinates and Cytoscape's selection state excepted), the group a node sits in as the style column `group`, and
17
+ * for nodes the degree (and the in- and out-degree of a directed graph) as `{ computed }` references, which follow
18
+ * later edits of the graph.
19
+ * @param snapshot - the graph
20
+ * @param target - nodes or edges
21
+ * @returns the features, in column order with the degrees last
22
+ * @category Styles
23
+ */
24
+ export function featuresOf(snapshot, target) {
25
+ const table = target === "node" ? snapshot.nodes : snapshot.edges;
26
+ const n = target === "node" ? snapshot.nodeCount : snapshot.edgeCount;
27
+ const out = [];
28
+ for (const name of table.names().filter((c) => isFeatureColumn(table, c))) {
29
+ const values = Array.from({ length: n }, (_, i) => {
30
+ const v = dataCell(table, name, i);
31
+ return typeof v === "string" || typeof v === "number" || typeof v === "boolean" ? v : null;
32
+ });
33
+ if (name !== PARENT_COLUMN) {
34
+ out.push({ ref: { data: name }, values });
35
+ }
36
+ else if (target === "node") {
37
+ // the group a node sits in, by the group's id: graphty-element keeps no graphty.* column in its records
38
+ const group = values.map((v) => typeof v === "number" && v >= 0 && v < snapshot.nodeCount ? String(snapshot.ids.idOf(v)) : null);
39
+ out.push({ ref: { style: "group" }, values: group });
40
+ }
41
+ }
42
+ if (target === "node" && n > 0) {
43
+ const kinds = snapshot.directed
44
+ ? ["degree", "indegree", "outdegree"]
45
+ : ["degree"];
46
+ for (const k of kinds) {
47
+ out.push({ ref: { computed: k }, values: degreeValues(snapshot, k) });
48
+ }
49
+ }
50
+ return out;
51
+ }
52
+ /**
53
+ * Whether a column may explain styles: one scalar component, neither a position nor a coordinate, nor graphty's own
54
+ * columns (the parent excepted) or Cytoscape's selection state.
55
+ * @param table - the node or edge table
56
+ * @param name - the column
57
+ * @returns true for a candidate
58
+ */
59
+ function isFeatureColumn(table, name) {
60
+ if ((name.startsWith("graphty.") && name !== PARENT_COLUMN) || name === "selected" || COORDINATE.test(name)) {
61
+ return false;
62
+ }
63
+ const col = table.get(name);
64
+ return (col !== null && col.meta.role !== "position" && SCALAR_DTYPES.has(col.meta.dtype) && col.meta.components === 1);
65
+ }
66
+ /**
67
+ * The fingerprint of a graph: its node and edge counts and a hash of its node ids' text, whatever their order (a
68
+ * format may read nodes back in another order). The id 7 and the id "7" hash alike, so a graph written to a format
69
+ * that reads its ids back as text (or as numbers) keeps its fingerprint.
70
+ * @param snapshot - the graph
71
+ * @returns the fingerprint
72
+ * @category Styles
73
+ */
74
+ export function styleFingerprint(snapshot) {
75
+ // two FNV-1a hashes with different seeds over each id's text, summed: the sum does not depend on the order
76
+ let h1 = 0;
77
+ let h2 = 0;
78
+ for (let i = 0; i < snapshot.nodeCount; i++) {
79
+ const text = String(snapshot.ids.idOf(i));
80
+ let a = 0x811c9dc5;
81
+ let b = 0x01000193 ^ 0x5bd1e995;
82
+ for (let c = 0; c < text.length; c++) {
83
+ const code = text.charCodeAt(c); // NOSONAR(S7758): hashes UTF-16 code units; code points would change every fingerprint
84
+ a = Math.imul(a ^ code, 0x01000193);
85
+ b = Math.imul(b ^ code, 0x01000193) ^ (b >>> 13);
86
+ }
87
+ h1 = (h1 + (a >>> 0)) >>> 0;
88
+ h2 = (h2 + (b >>> 0)) >>> 0;
89
+ }
90
+ const hex = (h) => (h >>> 0).toString(16).padStart(8, "0");
91
+ return {
92
+ nodes: snapshot.nodeCount,
93
+ edges: snapshot.edgeCount,
94
+ heldEdges: heldEdgeRows(snapshot).length,
95
+ ids: hex(h1) + hex(h2),
96
+ };
97
+ }
98
+ /**
99
+ * The edge rows a file holds, in order: every row but the second half of an undirected edge in a directed graph,
100
+ * which every format writes once.
101
+ * @param snapshot - the graph
102
+ * @returns the rows
103
+ */
104
+ export function heldEdgeRows(snapshot) {
105
+ const pair = snapshot.edges.byRole("pair");
106
+ const rows = [];
107
+ for (let e = 0; e < snapshot.edgeCount; e++) {
108
+ if (!(pair?.isSet(e) === true && pair.value(e) < e)) {
109
+ rows.push(e);
110
+ }
111
+ }
112
+ return rows;
113
+ }
114
+ /**
115
+ * The statistics of a feature's values.
116
+ * @param values - the values
117
+ * @returns the statistics
118
+ */
119
+ function valueStats(values) {
120
+ const seen = new Set();
121
+ let categorical = true;
122
+ let numeric = true;
123
+ let integers = true;
124
+ let lo = Infinity;
125
+ let hi = -Infinity;
126
+ let count = 0;
127
+ for (const v of values) {
128
+ if (v === null) {
129
+ continue;
130
+ }
131
+ count++;
132
+ seen.add(`${typeof v}:${String(v)}`);
133
+ if (typeof v !== "number") {
134
+ numeric = false;
135
+ integers = false;
136
+ }
137
+ else if (Number.isFinite(v)) {
138
+ integers && (integers = Number.isInteger(v));
139
+ categorical && (categorical = Number.isInteger(v));
140
+ lo = Math.min(lo, v);
141
+ hi = Math.max(hi, v);
142
+ }
143
+ else {
144
+ numeric = false;
145
+ categorical = false;
146
+ }
147
+ }
148
+ return { seen, categorical, numeric, integers, lo, hi, count };
149
+ }
150
+ /**
151
+ * A feature's name in rule ids: the column's name, the generated key or the degree's name.
152
+ * @param ref - the column
153
+ * @returns its name
154
+ */
155
+ function featureName(ref) {
156
+ if ("style" in ref) {
157
+ return ref.style;
158
+ }
159
+ if ("computed" in ref) {
160
+ return ref.computed;
161
+ }
162
+ return ref.data;
163
+ }
164
+ /**
165
+ * Describes a feature for the planner.
166
+ * @param feature - the feature
167
+ * @param raw - whether it is the raw style column a reader read
168
+ * @returns what the planner knows about it
169
+ */
170
+ export function describeFeature(feature, raw) {
171
+ const { seen, categorical, numeric, integers, lo, hi, count } = valueStats(feature.values);
172
+ const computed = "computed" in feature.ref;
173
+ // an integer column whose values are all different and fill a whole range (0..n-1, a z order) is an index:
174
+ // a ramp on it would only replay the order the writer stored the elements in
175
+ const index = !computed && numeric && integers && count >= MIN_INDEX && seen.size === count && hi - lo + 1 === count;
176
+ return {
177
+ feature,
178
+ name: featureName(feature.ref),
179
+ distinct: seen.size,
180
+ categorical: count > 0 && categorical,
181
+ numeric: count > 0 && numeric && !index,
182
+ raw,
183
+ };
184
+ }
185
+ //# sourceMappingURL=features.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features.js","sourceRoot":"","sources":["../../../../src/styles/plan/features.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The planner, the candidate features and the reference resolver of a file's styles.
3
+ */
4
+ export { featuresOf, styleFingerprint } from "./features.js";
5
+ export { MAX_STYLE_RULES, type PlanOptions, planStyles, type StyleValues } from "./plan.js";
6
+ export { resolveStyles } from "./resolve.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * The planner, the candidate features and the reference resolver of a file's styles.
3
+ */
4
+ export { featuresOf, styleFingerprint } from "./features.js";
5
+ export { MAX_STYLE_RULES, planStyles } from "./plan.js";
6
+ export { resolveStyles } from "./resolve.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/styles/plan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAoB,UAAU,EAAoB,MAAM,WAAW,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * The planner: turns a file's per-element style values into a few readable rules that reproduce them exactly. It
3
+ * groups properties into families, explains each family by a discrete or continuous mapping on one feature, a
4
+ * passthrough on an existing column, style classes or a copy, orders the rules, caps them at 15 per target and
5
+ * replays them: every element whose resolved value differs from the file's goes into one sparse exceptions column
6
+ * per property on top. One counted budget bounds the work; when it runs out the rest is copied.
7
+ */
8
+ import { StyleNotes } from "../notes.js";
9
+ import type { ExtractedStyles, GraphStyle, ReaderOutput, StyleDialect, StyleFeatures, StyleFingerprint, StyleTool, StyleWorkBudget } from "../types.js";
10
+ /**
11
+ * The most rules per target: the planner keeps at most 15 plus the exceptions rule.
12
+ * @category Styles
13
+ */
14
+ export declare const MAX_STYLE_RULES = 16;
15
+ /**
16
+ * What the planner is given: the canonical per-element values a style reader produced, the rules the file declares,
17
+ * and the graph they belong to.
18
+ * @category Styles
19
+ */
20
+ export interface StyleValues {
21
+ /** The graph-io format id. */
22
+ readonly format: string;
23
+ /** How the file spelled its values. */
24
+ readonly dialect?: StyleDialect | null;
25
+ /** The program that wrote the file, whose defaults fill in what the file leaves unset; null when unknown. */
26
+ readonly tool?: StyleTool | null;
27
+ /** The unit of every length; defaults to pixels. */
28
+ readonly units?: "px" | "relative";
29
+ /** The graph's own style. */
30
+ readonly graph?: GraphStyle;
31
+ /** Node values, declared rules, reader columns and extra features. */
32
+ readonly node?: ReaderOutput;
33
+ /** Edge values, declared rules, reader columns and extra features. */
34
+ readonly edge?: ReaderOutput;
35
+ /** The graph the values belong to; its counts give the number of elements. */
36
+ readonly fingerprint: StyleFingerprint;
37
+ }
38
+ /**
39
+ * Options of `planStyles()`.
40
+ * @category Styles
41
+ */
42
+ export interface PlanOptions {
43
+ /** Whether to add the writing tool's defaults as a rule at the bottom; defaults to true. */
44
+ readonly toolDefaults?: boolean;
45
+ /** The counted work budget; defaults to a fresh `StyleBudget`. */
46
+ readonly budget?: StyleWorkBudget;
47
+ /**
48
+ * Where notes are collected; the reader's notes, when it used the same collector, are kept.
49
+ * @internal
50
+ */
51
+ readonly notes?: StyleNotes;
52
+ /** Data columns the reader read the values from: they are never offered as explanations of themselves. */
53
+ readonly rawColumns?: {
54
+ /** Node columns. */
55
+ readonly node?: readonly string[];
56
+ /** Edge columns. */
57
+ readonly edge?: readonly string[];
58
+ };
59
+ /** Cancels the planning. */
60
+ readonly signal?: AbortSignal;
61
+ }
62
+ /**
63
+ * Plans a file's styles: the rules that reproduce its per-element values, with the columns they read.
64
+ * @param values - the canonical values, the declared rules and the graph they belong to
65
+ * @param features - the candidate explaining columns per target (`featuresOf()` of the snapshot)
66
+ * @param options - tool defaults, the budget, the notes collector, the raw columns and a cancel signal
67
+ * @returns the styles, exact for every element
68
+ * @category Styles
69
+ */
70
+ export declare function planStyles(values: StyleValues, features: StyleFeatures, options?: PlanOptions): ExtractedStyles;
71
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../../src/styles/plan/plan.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EACR,eAAe,EACf,UAAU,EAEV,YAAY,EAEZ,YAAY,EAEZ,aAAa,EACb,gBAAgB,EAIhB,SAAS,EAET,eAAe,EAClB,MAAM,aAAa,CAAC;AAkBrB;;;GAGG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAMlC;;;;GAIG;AACH,MAAM,WAAW,WAAW;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uCAAuC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACvC,6GAA6G;IAC7G,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACjC,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC;IACnC,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;IAC7B,8EAA8E;IAC9E,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC;CAC1C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IACxB,4FAA4F;IAC5F,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAClC;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,0GAA0G;IAC1G,QAAQ,CAAC,UAAU,CAAC,EAAE;QAClB,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAClC,oBAAoB;QACpB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KACrC,CAAC;IACF,4BAA4B;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CACjC;AA0BD;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,WAAgB,GAAG,eAAe,CA4DnH"}