@visactor/vrender-core 1.1.0-alpha.24 → 1.1.0-alpha.26

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 (404) hide show
  1. package/cjs/common/event-listener-manager.js +1 -2
  2. package/cjs/common/event-transformer.js +2 -1
  3. package/cjs/common/performance-raf.js +1 -1
  4. package/cjs/common/xml/is-xml.d.ts +2 -0
  5. package/cjs/common/xml/is-xml.js +14 -0
  6. package/cjs/common/xml/is-xml.js.map +1 -0
  7. package/cjs/common/xml/parser.d.ts +2 -2
  8. package/cjs/common/xml/parser.js +14 -11
  9. package/cjs/common/xml/parser.js.map +1 -1
  10. package/cjs/container.d.ts +2 -0
  11. package/cjs/container.js +50 -0
  12. package/cjs/container.js.map +1 -0
  13. package/cjs/core/graphic-utils.js +1 -2
  14. package/cjs/core/layer-service.js +2 -1
  15. package/cjs/core/stage.d.ts +0 -9
  16. package/cjs/core/stage.js +11 -29
  17. package/cjs/core/stage.js.map +1 -1
  18. package/cjs/entries/miniapp.d.ts +0 -1
  19. package/cjs/entries/miniapp.js +1 -5
  20. package/cjs/entries/miniapp.js.map +1 -1
  21. package/cjs/entries/node.d.ts +0 -1
  22. package/cjs/entries/node.js +1 -5
  23. package/cjs/entries/node.js.map +1 -1
  24. package/cjs/env.d.ts +1 -0
  25. package/cjs/env.js +25 -0
  26. package/cjs/env.js.map +1 -0
  27. package/cjs/event/public-constant.d.ts +7 -0
  28. package/cjs/event/public-constant.js +100 -0
  29. package/cjs/event/public-constant.js.map +1 -0
  30. package/cjs/event/util.d.ts +1 -1
  31. package/cjs/graphic/base.d.ts +2 -0
  32. package/cjs/graphic/base.js +15 -0
  33. package/cjs/graphic/base.js.map +1 -0
  34. package/cjs/graphic/creator.d.ts +16 -0
  35. package/cjs/graphic/creator.js +160 -0
  36. package/cjs/graphic/creator.js.map +1 -0
  37. package/cjs/graphic/glyph.js +4 -8
  38. package/cjs/graphic/glyph.js.map +1 -1
  39. package/cjs/graphic/graphic-service/graphic-service.d.ts +0 -1
  40. package/cjs/graphic/graphic-service/graphic-service.js +1 -8
  41. package/cjs/graphic/graphic-service/graphic-service.js.map +1 -1
  42. package/cjs/graphic/graphic.d.ts +19 -29
  43. package/cjs/graphic/graphic.js +123 -201
  44. package/cjs/graphic/graphic.js.map +1 -1
  45. package/cjs/graphic/group.d.ts +1 -3
  46. package/cjs/graphic/group.js +22 -28
  47. package/cjs/graphic/group.js.map +1 -1
  48. package/cjs/graphic/modules.d.ts +16 -0
  49. package/cjs/graphic/modules.js +150 -0
  50. package/cjs/graphic/modules.js.map +1 -0
  51. package/cjs/graphic/node-tree.d.ts +3 -3
  52. package/cjs/graphic/node-tree.js +1 -0
  53. package/cjs/graphic/node-tree.js.map +1 -1
  54. package/cjs/graphic/state/shared-state-refresh.js +11 -32
  55. package/cjs/graphic/state/shared-state-refresh.js.map +1 -1
  56. package/cjs/graphic/state/shared-state-scope.d.ts +2 -5
  57. package/cjs/graphic/state/shared-state-scope.js +8 -27
  58. package/cjs/graphic/state/shared-state-scope.js.map +1 -1
  59. package/cjs/graphic/state/state-definition-compiler.js +4 -5
  60. package/cjs/graphic/state/state-definition-compiler.js.map +1 -1
  61. package/cjs/graphic/state/state-definition.d.ts +2 -5
  62. package/cjs/graphic/state/state-definition.js.map +1 -1
  63. package/cjs/graphic/state/state-engine.d.ts +0 -5
  64. package/cjs/graphic/state/state-engine.js +20 -70
  65. package/cjs/graphic/state/state-engine.js.map +1 -1
  66. package/cjs/graphic/state/state-transition-orchestrator.d.ts +7 -9
  67. package/cjs/graphic/state/state-transition-orchestrator.js +10 -13
  68. package/cjs/graphic/state/state-transition-orchestrator.js.map +1 -1
  69. package/cjs/graphic/tools.js +3 -3
  70. package/cjs/graphic/tools.js.map +1 -1
  71. package/cjs/index.js.map +1 -1
  72. package/cjs/interface/graphic/group.d.ts +0 -2
  73. package/cjs/interface/graphic/group.js.map +1 -1
  74. package/cjs/interface/graphic.d.ts +1 -5
  75. package/cjs/interface/graphic.js.map +1 -1
  76. package/cjs/interface/index.js.map +1 -1
  77. package/cjs/interface/node-tree.d.ts +3 -0
  78. package/cjs/interface/node-tree.js.map +1 -1
  79. package/cjs/interface/stage.d.ts +0 -7
  80. package/cjs/interface/stage.js.map +1 -1
  81. package/cjs/interpolate.d.ts +2 -0
  82. package/cjs/interpolate.js +34 -0
  83. package/cjs/interpolate.js.map +1 -0
  84. package/cjs/modules.js.map +1 -1
  85. package/cjs/path.d.ts +4 -0
  86. package/cjs/path.js +33 -0
  87. package/cjs/path.js.map +1 -0
  88. package/cjs/plugin/3d.d.ts +3 -0
  89. package/cjs/plugin/3d.js +33 -0
  90. package/cjs/plugin/3d.js.map +1 -0
  91. package/cjs/plugin/attribute.d.ts +2 -0
  92. package/cjs/plugin/attribute.js +24 -0
  93. package/cjs/plugin/attribute.js.map +1 -0
  94. package/cjs/plugin/flex-layout.d.ts +1 -0
  95. package/cjs/plugin/flex-layout.js +15 -0
  96. package/cjs/plugin/flex-layout.js.map +1 -0
  97. package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js +8 -8
  98. package/cjs/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
  99. package/cjs/plugins/index.d.ts +0 -4
  100. package/cjs/plugins/index.js +1 -3
  101. package/cjs/plugins/index.js.map +1 -1
  102. package/cjs/plugins/plugin-service.d.ts +0 -1
  103. package/cjs/plugins/plugin-service.js +2 -3
  104. package/cjs/plugins/plugin-service.js.map +1 -1
  105. package/cjs/plugins/types.d.ts +1 -8
  106. package/cjs/plugins/types.js.map +1 -1
  107. package/cjs/register/graphic.d.ts +19 -0
  108. package/cjs/register/graphic.js +177 -0
  109. package/cjs/register/graphic.js.map +1 -0
  110. package/cjs/registry/contribution-registry.d.ts +0 -1
  111. package/cjs/registry/contribution-registry.js +0 -3
  112. package/cjs/registry/contribution-registry.js.map +1 -1
  113. package/cjs/registry/picker-registry.d.ts +0 -1
  114. package/cjs/registry/picker-registry.js +0 -3
  115. package/cjs/registry/picker-registry.js.map +1 -1
  116. package/cjs/registry/renderer-registry.d.ts +0 -1
  117. package/cjs/registry/renderer-registry.js +0 -3
  118. package/cjs/registry/renderer-registry.js.map +1 -1
  119. package/cjs/registry/types.d.ts +0 -3
  120. package/cjs/registry/types.js.map +1 -1
  121. package/cjs/svg.d.ts +1 -0
  122. package/cjs/svg.js +15 -0
  123. package/cjs/svg.js.map +1 -0
  124. package/cjs/text.d.ts +2 -0
  125. package/cjs/text.js +29 -0
  126. package/cjs/text.js.map +1 -0
  127. package/dist/index.es.js +897 -2213
  128. package/es/common/event-listener-manager.js +1 -2
  129. package/es/common/event-transformer.js +2 -1
  130. package/es/common/performance-raf.js +1 -1
  131. package/es/common/xml/is-xml.d.ts +2 -0
  132. package/es/common/xml/is-xml.js +8 -0
  133. package/es/common/xml/is-xml.js.map +1 -0
  134. package/es/common/xml/parser.d.ts +2 -2
  135. package/es/common/xml/parser.js +3 -7
  136. package/es/common/xml/parser.js.map +1 -1
  137. package/es/container.d.ts +2 -0
  138. package/es/container.js +2 -0
  139. package/es/container.js.map +1 -0
  140. package/es/core/graphic-utils.js +1 -2
  141. package/es/core/layer-service.js +2 -1
  142. package/es/core/stage.d.ts +0 -9
  143. package/es/core/stage.js +9 -30
  144. package/es/core/stage.js.map +1 -1
  145. package/es/entries/miniapp.d.ts +0 -1
  146. package/es/entries/miniapp.js +1 -5
  147. package/es/entries/miniapp.js.map +1 -1
  148. package/es/entries/node.d.ts +0 -1
  149. package/es/entries/node.js +1 -5
  150. package/es/entries/node.js.map +1 -1
  151. package/es/env.d.ts +1 -0
  152. package/es/env.js +2 -0
  153. package/es/env.js.map +1 -0
  154. package/es/event/public-constant.d.ts +7 -0
  155. package/es/event/public-constant.js +12 -0
  156. package/es/event/public-constant.js.map +1 -0
  157. package/es/event/util.d.ts +1 -1
  158. package/es/graphic/base.d.ts +2 -0
  159. package/es/graphic/base.js +2 -0
  160. package/es/graphic/base.js.map +1 -0
  161. package/es/graphic/creator.d.ts +16 -0
  162. package/es/graphic/creator.js +32 -0
  163. package/es/graphic/creator.js.map +1 -0
  164. package/es/graphic/glyph.js +4 -8
  165. package/es/graphic/glyph.js.map +1 -1
  166. package/es/graphic/graphic-service/graphic-service.d.ts +0 -1
  167. package/es/graphic/graphic-service/graphic-service.js +0 -10
  168. package/es/graphic/graphic-service/graphic-service.js.map +1 -1
  169. package/es/graphic/graphic.d.ts +19 -29
  170. package/es/graphic/graphic.js +123 -207
  171. package/es/graphic/graphic.js.map +1 -1
  172. package/es/graphic/group.d.ts +1 -3
  173. package/es/graphic/group.js +22 -28
  174. package/es/graphic/group.js.map +1 -1
  175. package/es/graphic/modules.d.ts +16 -0
  176. package/es/graphic/modules.js +32 -0
  177. package/es/graphic/modules.js.map +1 -0
  178. package/es/graphic/node-tree.d.ts +3 -3
  179. package/es/graphic/node-tree.js +1 -0
  180. package/es/graphic/node-tree.js.map +1 -1
  181. package/es/graphic/state/shared-state-refresh.js +8 -28
  182. package/es/graphic/state/shared-state-refresh.js.map +1 -1
  183. package/es/graphic/state/shared-state-scope.d.ts +2 -5
  184. package/es/graphic/state/shared-state-scope.js +7 -28
  185. package/es/graphic/state/shared-state-scope.js.map +1 -1
  186. package/es/graphic/state/state-definition-compiler.js +4 -5
  187. package/es/graphic/state/state-definition-compiler.js.map +1 -1
  188. package/es/graphic/state/state-definition.d.ts +2 -5
  189. package/es/graphic/state/state-definition.js.map +1 -1
  190. package/es/graphic/state/state-engine.d.ts +0 -5
  191. package/es/graphic/state/state-engine.js +17 -67
  192. package/es/graphic/state/state-engine.js.map +1 -1
  193. package/es/graphic/state/state-transition-orchestrator.d.ts +7 -9
  194. package/es/graphic/state/state-transition-orchestrator.js +10 -13
  195. package/es/graphic/state/state-transition-orchestrator.js.map +1 -1
  196. package/es/graphic/tools.js +3 -3
  197. package/es/graphic/tools.js.map +1 -1
  198. package/es/index.js.map +1 -1
  199. package/es/interface/graphic/group.d.ts +0 -2
  200. package/es/interface/graphic/group.js.map +1 -1
  201. package/es/interface/graphic.d.ts +1 -5
  202. package/es/interface/graphic.js.map +1 -1
  203. package/es/interface/index.js.map +1 -1
  204. package/es/interface/node-tree.d.ts +3 -0
  205. package/es/interface/node-tree.js.map +1 -1
  206. package/es/interface/stage.d.ts +0 -7
  207. package/es/interface/stage.js.map +1 -1
  208. package/es/interpolate.d.ts +2 -0
  209. package/es/interpolate.js +4 -0
  210. package/es/interpolate.js.map +1 -0
  211. package/es/modules.js.map +1 -1
  212. package/es/path.d.ts +4 -0
  213. package/es/path.js +6 -0
  214. package/es/path.js.map +1 -0
  215. package/es/plugin/3d.d.ts +3 -0
  216. package/es/plugin/3d.js +6 -0
  217. package/es/plugin/3d.js.map +1 -0
  218. package/es/plugin/attribute.d.ts +2 -0
  219. package/es/plugin/attribute.js +4 -0
  220. package/es/plugin/attribute.js.map +1 -0
  221. package/es/plugin/flex-layout.d.ts +1 -0
  222. package/es/plugin/flex-layout.js +2 -0
  223. package/es/plugin/flex-layout.js.map +1 -0
  224. package/es/plugins/builtin-plugin/dirty-bounds-plugin.js +8 -8
  225. package/es/plugins/builtin-plugin/dirty-bounds-plugin.js.map +1 -1
  226. package/es/plugins/index.d.ts +0 -4
  227. package/es/plugins/index.js +0 -8
  228. package/es/plugins/index.js.map +1 -1
  229. package/es/plugins/plugin-service.d.ts +0 -1
  230. package/es/plugins/plugin-service.js +2 -3
  231. package/es/plugins/plugin-service.js.map +1 -1
  232. package/es/plugins/types.d.ts +1 -8
  233. package/es/plugins/types.js.map +1 -1
  234. package/es/register/graphic.d.ts +19 -0
  235. package/es/register/graphic.js +38 -0
  236. package/es/register/graphic.js.map +1 -0
  237. package/es/registry/contribution-registry.d.ts +0 -1
  238. package/es/registry/contribution-registry.js +0 -3
  239. package/es/registry/contribution-registry.js.map +1 -1
  240. package/es/registry/picker-registry.d.ts +0 -1
  241. package/es/registry/picker-registry.js +0 -3
  242. package/es/registry/picker-registry.js.map +1 -1
  243. package/es/registry/renderer-registry.d.ts +0 -1
  244. package/es/registry/renderer-registry.js +0 -3
  245. package/es/registry/renderer-registry.js.map +1 -1
  246. package/es/registry/types.d.ts +0 -3
  247. package/es/registry/types.js.map +1 -1
  248. package/es/svg.d.ts +1 -0
  249. package/es/svg.js +2 -0
  250. package/es/svg.js.map +1 -0
  251. package/es/text.d.ts +2 -0
  252. package/es/text.js +4 -0
  253. package/es/text.js.map +1 -0
  254. package/package.json +245 -1
  255. package/cjs/allocator/constants.d.ts +0 -9
  256. package/cjs/allocator/constants.js +0 -11
  257. package/cjs/allocator/constants.js.map +0 -1
  258. package/cjs/common/Reflect-metadata.d.ts +0 -2
  259. package/cjs/common/Reflect-metadata.js +0 -182
  260. package/cjs/common/Reflect-metadata.js.map +0 -1
  261. package/cjs/common/segment/curve/arc.d.ts +0 -17
  262. package/cjs/common/segment/curve/arc.js +0 -38
  263. package/cjs/common/segment/curve/arc.js.map +0 -1
  264. package/cjs/common/segment/curve/ellipse.d.ts +0 -21
  265. package/cjs/common/segment/curve/ellipse.js +0 -39
  266. package/cjs/common/segment/curve/ellipse.js.map +0 -1
  267. package/cjs/common/segment/curve/move.d.ts +0 -16
  268. package/cjs/common/segment/curve/move.js +0 -37
  269. package/cjs/common/segment/curve/move.js.map +0 -1
  270. package/cjs/common/store.d.ts +0 -2
  271. package/cjs/common/store.js +0 -2
  272. package/cjs/common/store.js.map +0 -1
  273. package/cjs/core/application.d.ts +0 -1
  274. package/cjs/core/application.js +0 -6
  275. package/cjs/core/application.js.map +0 -1
  276. package/cjs/core/global-module.d.ts +0 -1
  277. package/cjs/core/global-module.js +0 -1
  278. package/cjs/core/global-module.js.map +0 -1
  279. package/cjs/export.d.ts +0 -1
  280. package/cjs/export.js +0 -1
  281. package/cjs/export.js.map +0 -1
  282. package/cjs/graphic/state/state-batch-scheduler.d.ts +0 -42
  283. package/cjs/graphic/state/state-batch-scheduler.js +0 -285
  284. package/cjs/graphic/state/state-batch-scheduler.js.map +0 -1
  285. package/cjs/graphic/state/state-model.d.ts +0 -43
  286. package/cjs/graphic/state/state-model.js +0 -143
  287. package/cjs/graphic/state/state-model.js.map +0 -1
  288. package/cjs/graphic/state/state-perf-monitor.d.ts +0 -120
  289. package/cjs/graphic/state/state-perf-monitor.js +0 -224
  290. package/cjs/graphic/state/state-perf-monitor.js.map +0 -1
  291. package/cjs/graphic/state/state-style-resolver.d.ts +0 -13
  292. package/cjs/graphic/state/state-style-resolver.js +0 -50
  293. package/cjs/graphic/state/state-style-resolver.js.map +0 -1
  294. package/cjs/interface/animate.d.ts +0 -1
  295. package/cjs/interface/animate.js +0 -3
  296. package/cjs/interface/animate.js.map +0 -1
  297. package/cjs/interface/creator.d.ts +0 -4
  298. package/cjs/interface/creator.js +0 -6
  299. package/cjs/interface/creator.js.map +0 -1
  300. package/cjs/interface/graphic/dynamic-path.d.ts +0 -1
  301. package/cjs/interface/graphic/dynamic-path.js +0 -3
  302. package/cjs/interface/graphic/dynamic-path.js.map +0 -1
  303. package/cjs/interface/graphic-utils.d.ts +0 -1
  304. package/cjs/interface/graphic-utils.js +0 -3
  305. package/cjs/interface/graphic-utils.js.map +0 -1
  306. package/cjs/interface/theme-service.d.ts +0 -1
  307. package/cjs/interface/theme-service.js +0 -3
  308. package/cjs/interface/theme-service.js.map +0 -1
  309. package/cjs/plugins/base-plugin.d.ts +0 -8
  310. package/cjs/plugins/base-plugin.js +0 -15
  311. package/cjs/plugins/base-plugin.js.map +0 -1
  312. package/cjs/plugins/browser-env-plugin.d.ts +0 -8
  313. package/cjs/plugins/browser-env-plugin.js +0 -24
  314. package/cjs/plugins/browser-env-plugin.js.map +0 -1
  315. package/cjs/plugins/builtin-plugin/poptip-plugin.d.ts +0 -1
  316. package/cjs/plugins/builtin-plugin/poptip-plugin.js +0 -3
  317. package/cjs/plugins/builtin-plugin/poptip-plugin.js.map +0 -1
  318. package/cjs/plugins/picker-plugin.d.ts +0 -7
  319. package/cjs/plugins/picker-plugin.js +0 -19
  320. package/cjs/plugins/picker-plugin.js.map +0 -1
  321. package/cjs/plugins/renderer-plugin.d.ts +0 -7
  322. package/cjs/plugins/renderer-plugin.js +0 -19
  323. package/cjs/plugins/renderer-plugin.js.map +0 -1
  324. package/cjs/render/contributions/render/clear-screen.d.ts +0 -1
  325. package/cjs/render/contributions/render/clear-screen.js +0 -3
  326. package/cjs/render/contributions/render/clear-screen.js.map +0 -1
  327. package/cjs/render/contributions/render/render-slector.d.ts +0 -1
  328. package/cjs/render/contributions/render/render-slector.js +0 -3
  329. package/cjs/render/contributions/render/render-slector.js.map +0 -1
  330. package/es/allocator/constants.d.ts +0 -9
  331. package/es/allocator/constants.js +0 -18
  332. package/es/allocator/constants.js.map +0 -1
  333. package/es/common/Reflect-metadata.d.ts +0 -2
  334. package/es/common/Reflect-metadata.js +0 -178
  335. package/es/common/Reflect-metadata.js.map +0 -1
  336. package/es/common/segment/curve/arc.d.ts +0 -17
  337. package/es/common/segment/curve/arc.js +0 -31
  338. package/es/common/segment/curve/arc.js.map +0 -1
  339. package/es/common/segment/curve/ellipse.d.ts +0 -21
  340. package/es/common/segment/curve/ellipse.js +0 -33
  341. package/es/common/segment/curve/ellipse.js.map +0 -1
  342. package/es/common/segment/curve/move.d.ts +0 -16
  343. package/es/common/segment/curve/move.js +0 -31
  344. package/es/common/segment/curve/move.js.map +0 -1
  345. package/es/common/store.d.ts +0 -2
  346. package/es/common/store.js +0 -2
  347. package/es/common/store.js.map +0 -1
  348. package/es/core/application.d.ts +0 -1
  349. package/es/core/application.js +0 -2
  350. package/es/core/application.js.map +0 -1
  351. package/es/core/global-module.d.ts +0 -1
  352. package/es/core/global-module.js +0 -1
  353. package/es/core/global-module.js.map +0 -1
  354. package/es/export.d.ts +0 -1
  355. package/es/export.js +0 -1
  356. package/es/export.js.map +0 -1
  357. package/es/graphic/state/state-batch-scheduler.d.ts +0 -42
  358. package/es/graphic/state/state-batch-scheduler.js +0 -278
  359. package/es/graphic/state/state-batch-scheduler.js.map +0 -1
  360. package/es/graphic/state/state-model.d.ts +0 -43
  361. package/es/graphic/state/state-model.js +0 -135
  362. package/es/graphic/state/state-model.js.map +0 -1
  363. package/es/graphic/state/state-perf-monitor.d.ts +0 -120
  364. package/es/graphic/state/state-perf-monitor.js +0 -214
  365. package/es/graphic/state/state-perf-monitor.js.map +0 -1
  366. package/es/graphic/state/state-style-resolver.d.ts +0 -13
  367. package/es/graphic/state/state-style-resolver.js +0 -42
  368. package/es/graphic/state/state-style-resolver.js.map +0 -1
  369. package/es/interface/animate.d.ts +0 -1
  370. package/es/interface/animate.js +0 -3
  371. package/es/interface/animate.js.map +0 -1
  372. package/es/interface/creator.d.ts +0 -4
  373. package/es/interface/creator.js +0 -2
  374. package/es/interface/creator.js.map +0 -1
  375. package/es/interface/graphic/dynamic-path.d.ts +0 -1
  376. package/es/interface/graphic/dynamic-path.js +0 -3
  377. package/es/interface/graphic/dynamic-path.js.map +0 -1
  378. package/es/interface/graphic-utils.d.ts +0 -1
  379. package/es/interface/graphic-utils.js +0 -3
  380. package/es/interface/graphic-utils.js.map +0 -1
  381. package/es/interface/theme-service.d.ts +0 -1
  382. package/es/interface/theme-service.js +0 -3
  383. package/es/interface/theme-service.js.map +0 -1
  384. package/es/plugins/base-plugin.d.ts +0 -8
  385. package/es/plugins/base-plugin.js +0 -7
  386. package/es/plugins/base-plugin.js.map +0 -1
  387. package/es/plugins/browser-env-plugin.d.ts +0 -8
  388. package/es/plugins/browser-env-plugin.js +0 -16
  389. package/es/plugins/browser-env-plugin.js.map +0 -1
  390. package/es/plugins/builtin-plugin/poptip-plugin.d.ts +0 -1
  391. package/es/plugins/builtin-plugin/poptip-plugin.js +0 -3
  392. package/es/plugins/builtin-plugin/poptip-plugin.js.map +0 -1
  393. package/es/plugins/picker-plugin.d.ts +0 -7
  394. package/es/plugins/picker-plugin.js +0 -11
  395. package/es/plugins/picker-plugin.js.map +0 -1
  396. package/es/plugins/renderer-plugin.d.ts +0 -7
  397. package/es/plugins/renderer-plugin.js +0 -11
  398. package/es/plugins/renderer-plugin.js.map +0 -1
  399. package/es/render/contributions/render/clear-screen.d.ts +0 -1
  400. package/es/render/contributions/render/clear-screen.js +0 -3
  401. package/es/render/contributions/render/clear-screen.js.map +0 -1
  402. package/es/render/contributions/render/render-slector.d.ts +0 -1
  403. package/es/render/contributions/render/render-slector.js +0 -3
  404. package/es/render/contributions/render/render-slector.js.map +0 -1
@@ -1,47 +1,27 @@
1
- import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
2
-
3
1
  export function scheduleStageSharedStateRefresh(stage) {
4
- var _a;
5
- stage && "released" !== stage.releaseStatus && (null === (_a = getActiveStageStatePerfMonitor(stage)) || void 0 === _a || _a.recordRefresh("renderScheduled"),
6
- stage.renderNextFrame());
2
+ stage && "released" !== stage.releaseStatus && stage.renderNextFrame();
7
3
  }
8
4
 
9
5
  export function enqueueGraphicSharedStateRefresh(stage, graphic) {
10
6
  var _a;
11
7
  if (!stage) return;
12
- const pending = null !== (_a = stage._pendingSharedStateRefreshGraphics) && void 0 !== _a ? _a : stage._pendingSharedStateRefreshGraphics = new Set;
13
- if (!pending.has(graphic)) {
14
- pending.add(graphic);
15
- const perfMonitor = getActiveStageStatePerfMonitor(stage);
16
- null == perfMonitor || perfMonitor.recordRefresh("queuedGraphics"), null == perfMonitor || perfMonitor.recordAllocation("refreshQueuePushes");
17
- }
8
+ (null !== (_a = stage._pendingSharedStateRefreshGraphics) && void 0 !== _a ? _a : stage._pendingSharedStateRefreshGraphics = new Set).add(graphic);
18
9
  }
19
10
 
20
11
  export function markScopeActiveDescendantsDirty(scope, stage) {
21
- let marked = !1;
22
- scope.subtreeActiveDescendants.forEach((graphic => {
12
+ scope.subtreeActiveDescendants.size && (scope.subtreeActiveDescendants.forEach((graphic => {
23
13
  var _a;
24
14
  graphic.sharedStateDirty = !0;
25
- enqueueGraphicSharedStateRefresh(null !== (_a = null != stage ? stage : graphic.stage) && void 0 !== _a ? _a : scope.ownerStage, graphic),
26
- marked = !0;
27
- })), marked && scheduleStageSharedStateRefresh(null != stage ? stage : scope.ownerStage);
15
+ enqueueGraphicSharedStateRefresh(null !== (_a = null != stage ? stage : graphic.stage) && void 0 !== _a ? _a : scope.ownerStage, graphic);
16
+ })), scheduleStageSharedStateRefresh(null != stage ? stage : scope.ownerStage));
28
17
  }
29
18
 
30
19
  export function flushStageSharedStateRefresh(stage) {
31
20
  const pending = stage._pendingSharedStateRefreshGraphics;
32
21
  if (!pending || !pending.size) return;
33
- const perfMonitor = getActiveStageStatePerfMonitor(stage), start = perfMonitor ? performance.now() : 0, graphics = Array.from(pending.values());
34
- pending.clear(), null == perfMonitor || perfMonitor.recordRefresh("flushedGraphics", graphics.length),
35
- graphics.forEach((graphic => {
36
- if ("released" === graphic.releaseStatus) return;
37
- if (graphic.stage !== stage) return;
38
- if (!graphic.sharedStateDirty) return;
39
- const refresh = graphic.refreshSharedStateBeforeRender;
40
- "function" == typeof refresh && (refresh.call(graphic), null == perfMonitor || perfMonitor.incrementCounter("sharedRefreshCommits"));
41
- })), perfMonitor && (perfMonitor.recordCost("sharedRefresh", performance.now() - start),
42
- perfMonitor.recordEvent("shared-refresh-flush", {
43
- stageId: stage._uid,
44
- flushedGraphics: graphics.length
22
+ const graphics = Array.from(pending.values());
23
+ pending.clear(), graphics.forEach((graphic => {
24
+ "released" !== graphic.releaseStatus && graphic.stage === stage && graphic.sharedStateDirty && graphic.refreshSharedStateBeforeRender();
45
25
  }));
46
26
  }
47
27
  //# sourceMappingURL=shared-state-refresh.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":"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","file":"shared-state-refresh.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { SharedStateScope } from './shared-state-scope';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport function scheduleStageSharedStateRefresh(stage: IStage | undefined): void {\n if (!stage || (stage as any).releaseStatus === 'released') {\n return;\n }\n\n getActiveStageStatePerfMonitor(stage)?.recordRefresh('renderScheduled');\n stage.renderNextFrame();\n}\n\nexport function enqueueGraphicSharedStateRefresh(stage: IStage | undefined, graphic: IGraphic): void {\n if (!stage) {\n return;\n }\n\n const pending =\n ((stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined) ??\n (((stage as any)._pendingSharedStateRefreshGraphics = new Set<IGraphic>()) as Set<IGraphic>);\n\n if (!pending.has(graphic)) {\n pending.add(graphic);\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n perfMonitor?.recordRefresh('queuedGraphics');\n perfMonitor?.recordAllocation('refreshQueuePushes');\n }\n}\n\nexport function markScopeActiveDescendantsDirty<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n stage?: IStage\n): void {\n let marked = false;\n scope.subtreeActiveDescendants.forEach(graphic => {\n (graphic as any).sharedStateDirty = true;\n const ownerStage = stage ?? graphic.stage ?? scope.ownerStage;\n enqueueGraphicSharedStateRefresh(ownerStage, graphic);\n marked = true;\n });\n\n if (marked) {\n scheduleStageSharedStateRefresh(stage ?? scope.ownerStage);\n }\n}\n\nexport function flushStageSharedStateRefresh(stage: IStage): void {\n const pending = (stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined;\n if (!pending || !pending.size) {\n return;\n }\n\n const perfMonitor = getActiveStageStatePerfMonitor(stage);\n const start = perfMonitor ? performance.now() : 0;\n const graphics = Array.from(pending.values());\n pending.clear();\n perfMonitor?.recordRefresh('flushedGraphics', graphics.length);\n\n graphics.forEach(graphic => {\n if ((graphic as any).releaseStatus === 'released') {\n return;\n }\n if (graphic.stage !== stage) {\n return;\n }\n if (!(graphic as any).sharedStateDirty) {\n return;\n }\n\n const refresh = (graphic as any).refreshSharedStateBeforeRender;\n if (typeof refresh === 'function') {\n refresh.call(graphic);\n perfMonitor?.incrementCounter('sharedRefreshCommits');\n }\n });\n\n if (perfMonitor) {\n perfMonitor.recordCost('sharedRefresh', performance.now() - start);\n perfMonitor.recordEvent('shared-refresh-flush', {\n stageId: (stage as any)._uid,\n flushedGraphics: graphics.length\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/state/shared-state-refresh.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,+BAA+B,CAAC,KAAyB;IACvE,IAAI,CAAC,KAAK,IAAK,KAAa,CAAC,aAAa,KAAK,UAAU,EAAE;QACzD,OAAO;KACR;IAED,KAAK,CAAC,eAAe,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,KAAyB,EAAE,OAAiB;;IAC3F,IAAI,CAAC,KAAK,EAAE;QACV,OAAO;KACR;IAED,MAAM,OAAO,GACX,MAAE,KAAa,CAAC,kCAAgE,mCAC/E,CAAE,KAAa,CAAC,kCAAkC,GAAG,IAAI,GAAG,EAAY,CAAmB,CAAC;IAE/F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAC7C,KAA0B,EAC1B,KAAc;IAEd,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,IAAI,EAAE;QACxC,OAAO;KACR;IAED,KAAK,CAAC,wBAAwB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;;QAC9C,OAAe,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACzC,MAAM,UAAU,GAAG,MAAA,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,OAAO,CAAC,KAAK,mCAAI,KAAK,CAAC,UAAU,CAAC;QAC9D,gCAAgC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,+BAA+B,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,KAAK,CAAC,UAAU,CAAC,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,KAAa;IACxD,MAAM,OAAO,GAAI,KAAa,CAAC,kCAA+D,CAAC;IAC/F,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;QAC7B,OAAO;KACR;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,EAAE,CAAC;IAEhB,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,IAAK,OAAe,CAAC,aAAa,KAAK,UAAU,EAAE;YACjD,OAAO;SACR;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE;YAC3B,OAAO;SACR;QACD,IAAI,CAAE,OAAe,CAAC,gBAAgB,EAAE;YACtC,OAAO;SACR;QAEA,OAAe,CAAC,8BAA8B,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC","file":"shared-state-refresh.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { SharedStateScope } from './shared-state-scope';\n\nexport function scheduleStageSharedStateRefresh(stage: IStage | undefined): void {\n if (!stage || (stage as any).releaseStatus === 'released') {\n return;\n }\n\n stage.renderNextFrame();\n}\n\nexport function enqueueGraphicSharedStateRefresh(stage: IStage | undefined, graphic: IGraphic): void {\n if (!stage) {\n return;\n }\n\n const pending =\n ((stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined) ??\n (((stage as any)._pendingSharedStateRefreshGraphics = new Set<IGraphic>()) as Set<IGraphic>);\n\n pending.add(graphic);\n}\n\nexport function markScopeActiveDescendantsDirty<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n stage?: IStage\n): void {\n if (!scope.subtreeActiveDescendants.size) {\n return;\n }\n\n scope.subtreeActiveDescendants.forEach(graphic => {\n (graphic as any).sharedStateDirty = true;\n const ownerStage = stage ?? graphic.stage ?? scope.ownerStage;\n enqueueGraphicSharedStateRefresh(ownerStage, graphic);\n });\n\n scheduleStageSharedStateRefresh(stage ?? scope.ownerStage);\n}\n\nexport function flushStageSharedStateRefresh(stage: IStage): void {\n const pending = (stage as any)._pendingSharedStateRefreshGraphics as Set<IGraphic> | undefined;\n if (!pending || !pending.size) {\n return;\n }\n\n const graphics = Array.from(pending.values());\n pending.clear();\n\n graphics.forEach(graphic => {\n if ((graphic as any).releaseStatus === 'released') {\n return;\n }\n if (graphic.stage !== stage) {\n return;\n }\n if (!(graphic as any).sharedStateDirty) {\n return;\n }\n\n (graphic as any).refreshSharedStateBeforeRender();\n });\n}\n"]}
@@ -1,9 +1,6 @@
1
1
  import type { IGraphic, IStage } from '../../interface';
2
- import type { IGroup } from '../../interface/graphic/group';
3
2
  import type { CompiledStateDefinition, StateDefinitionsInput } from './state-definition';
4
3
  export interface SharedStateScope<T extends Record<string, any> = Record<string, any>> {
5
- ownerKind: 'group' | 'root';
6
- ownerGroup?: IGroup;
7
4
  ownerStage?: IStage;
8
5
  parentScope?: SharedStateScope<T>;
9
6
  themeStateDefinitions?: StateDefinitionsInput<T>;
@@ -16,10 +13,10 @@ export interface SharedStateScope<T extends Record<string, any> = Record<string,
16
13
  subtreeActiveDescendants: Set<IGraphic>;
17
14
  }
18
15
  export declare function createRootSharedStateScope<T extends Record<string, any> = Record<string, any>>(stage: IStage, themeStateDefinitions?: StateDefinitionsInput<T>): SharedStateScope<T>;
19
- export declare function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(group: IGroup, parentScope?: SharedStateScope<T>, localStateDefinitions?: StateDefinitionsInput<T>): SharedStateScope<T>;
16
+ export declare function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(group: IGraphic, parentScope?: SharedStateScope<T>, localStateDefinitions?: StateDefinitionsInput<T>): SharedStateScope<T>;
20
17
  export declare function setSharedStateScopeParent<T extends Record<string, any> = Record<string, any>>(scope: SharedStateScope<T>, parentScope?: SharedStateScope<T>): boolean;
21
18
  export declare function setSharedStateScopeLocalDefinitions<T extends Record<string, any> = Record<string, any>>(scope: SharedStateScope<T>, localStateDefinitions?: StateDefinitionsInput<T>): boolean;
22
19
  export declare function setRootSharedStateScopeThemeDefinitions<T extends Record<string, any> = Record<string, any>>(scope: SharedStateScope<T>, themeStateDefinitions?: StateDefinitionsInput<T>): boolean;
23
- export declare function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(scope: SharedStateScope<T>): SharedStateScope<T>;
20
+ export declare function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(scope: SharedStateScope<T>, revision?: number): SharedStateScope<T>;
24
21
  export declare function ensureSharedStateScopeFresh<T extends Record<string, any> = Record<string, any>>(scope?: SharedStateScope<T>): SharedStateScope<T> | undefined;
25
22
  export declare function collectSharedStateScopeChain<T extends Record<string, any> = Record<string, any>>(scope?: SharedStateScope<T>): SharedStateScope<T>[];
@@ -1,31 +1,13 @@
1
1
  import { StateDefinitionCompiler } from "./state-definition-compiler";
2
2
 
3
- import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
4
-
5
3
  const compiler = new StateDefinitionCompiler;
6
4
 
7
- function copyDefinitions(definitions) {
8
- return definitions ? Object.assign({}, definitions) : {};
9
- }
10
-
11
5
  function buildEffectiveSourceDefinitions(parentScope, localStateDefinitions, themeStateDefinitions) {
12
- const merged = copyDefinitions(parentScope ? parentScope.effectiveSourceDefinitions : themeStateDefinitions);
13
- return localStateDefinitions && Object.keys(localStateDefinitions).forEach((stateName => {
14
- merged[stateName] = localStateDefinitions[stateName];
15
- })), merged;
16
- }
17
-
18
- function initializeScope(scope, revision = 0) {
19
- var _a;
20
- const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(scope.parentScope, scope.localStateDefinitions, scope.themeStateDefinitions);
21
- return scope.effectiveSourceDefinitions = effectiveSourceDefinitions, scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions),
22
- scope.parentRevisionAtBuild = null === (_a = scope.parentScope) || void 0 === _a ? void 0 : _a.revision,
23
- scope.revision = revision, scope.dirty = !1, scope;
6
+ return Object.assign({}, parentScope ? parentScope.effectiveSourceDefinitions : themeStateDefinitions, localStateDefinitions);
24
7
  }
25
8
 
26
9
  export function createRootSharedStateScope(stage, themeStateDefinitions) {
27
- return initializeScope({
28
- ownerKind: "root",
10
+ return rebuildSharedStateScope({
29
11
  ownerStage: stage,
30
12
  themeStateDefinitions: themeStateDefinitions,
31
13
  effectiveSourceDefinitions: {},
@@ -37,9 +19,7 @@ export function createRootSharedStateScope(stage, themeStateDefinitions) {
37
19
  }
38
20
 
39
21
  export function createGroupSharedStateScope(group, parentScope, localStateDefinitions) {
40
- return initializeScope({
41
- ownerKind: "group",
42
- ownerGroup: group,
22
+ return rebuildSharedStateScope({
43
23
  ownerStage: group.stage,
44
24
  parentScope: parentScope,
45
25
  localStateDefinitions: localStateDefinitions,
@@ -66,18 +46,17 @@ export function setRootSharedStateScopeThemeDefinitions(scope, themeStateDefinit
66
46
  rebuildSharedStateScope(scope), !0);
67
47
  }
68
48
 
69
- export function rebuildSharedStateScope(scope) {
49
+ export function rebuildSharedStateScope(scope, revision = scope.revision + 1) {
70
50
  var _a;
71
51
  const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(scope.parentScope, scope.localStateDefinitions, scope.themeStateDefinitions);
72
52
  return scope.effectiveSourceDefinitions = effectiveSourceDefinitions, scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions),
73
53
  scope.parentRevisionAtBuild = null === (_a = scope.parentScope) || void 0 === _a ? void 0 : _a.revision,
74
- scope.revision += 1, scope.dirty = !1, scope;
54
+ scope.revision = revision, scope.dirty = !1, scope;
75
55
  }
76
56
 
77
57
  export function ensureSharedStateScopeFresh(scope) {
78
- var _a;
79
- if (scope) return null === (_a = getActiveStageStatePerfMonitor(scope.ownerStage)) || void 0 === _a || _a.recordRefresh("ensureFreshCalls"),
80
- scope.parentScope && ensureSharedStateScopeFresh(scope.parentScope), (scope.dirty || scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision) && rebuildSharedStateScope(scope),
58
+ if (scope) return scope.parentScope && ensureSharedStateScopeFresh(scope.parentScope),
59
+ (scope.dirty || scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision) && rebuildSharedStateScope(scope),
81
60
  scope;
82
61
  }
83
62
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":"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","file":"shared-state-scope.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport type { IGroup } from '../../interface/graphic/group';\nimport { StateDefinitionCompiler } from './state-definition-compiler';\nimport type { CompiledStateDefinition, StateDefinitionsInput } from './state-definition';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nexport interface SharedStateScope<T extends Record<string, any> = Record<string, any>> {\n ownerKind: 'group' | 'root';\n ownerGroup?: IGroup;\n ownerStage?: IStage;\n parentScope?: SharedStateScope<T>;\n themeStateDefinitions?: StateDefinitionsInput<T>;\n localStateDefinitions?: StateDefinitionsInput<T>;\n effectiveSourceDefinitions: StateDefinitionsInput<T>;\n effectiveCompiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n revision: number;\n parentRevisionAtBuild?: number;\n dirty: boolean;\n subtreeActiveDescendants: Set<IGraphic>;\n}\n\nconst compiler = new StateDefinitionCompiler<any>();\n\nfunction copyDefinitions<T extends Record<string, any>>(\n definitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n return definitions ? ({ ...definitions } as StateDefinitionsInput<T>) : ({} as StateDefinitionsInput<T>);\n}\n\nfunction buildEffectiveSourceDefinitions<T extends Record<string, any>>(\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n const merged = parentScope\n ? copyDefinitions(parentScope.effectiveSourceDefinitions)\n : copyDefinitions(themeStateDefinitions);\n\n if (localStateDefinitions) {\n Object.keys(localStateDefinitions).forEach(stateName => {\n merged[stateName] = localStateDefinitions[stateName];\n });\n }\n\n return merged;\n}\n\nfunction initializeScope<T extends Record<string, any>>(\n scope: SharedStateScope<T>,\n revision: number = 0\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision = revision;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function createRootSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n stage: IStage,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'root',\n ownerStage: stage,\n themeStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n group: IGroup,\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return initializeScope(\n {\n ownerKind: 'group',\n ownerGroup: group,\n ownerStage: group.stage,\n parentScope,\n localStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function setSharedStateScopeParent<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n parentScope?: SharedStateScope<T>\n): boolean {\n if (scope.parentScope === parentScope) {\n return false;\n }\n\n scope.parentScope = parentScope;\n scope.dirty = true;\n return true;\n}\n\nexport function setSharedStateScopeLocalDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.localStateDefinitions === localStateDefinitions) {\n return false;\n }\n\n scope.localStateDefinitions = localStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function setRootSharedStateScopeThemeDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.themeStateDefinitions === themeStateDefinitions) {\n return false;\n }\n\n scope.themeStateDefinitions = themeStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision += 1;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function ensureSharedStateScopeFresh<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T> | undefined {\n if (!scope) {\n return undefined;\n }\n\n getActiveStageStatePerfMonitor(scope.ownerStage)?.recordRefresh('ensureFreshCalls');\n\n if (scope.parentScope) {\n ensureSharedStateScopeFresh(scope.parentScope);\n }\n\n if (scope.dirty || (scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision)) {\n rebuildSharedStateScope(scope);\n }\n\n return scope;\n}\n\nexport function collectSharedStateScopeChain<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T>[] {\n const chain: SharedStateScope<T>[] = [];\n let current = scope;\n\n while (current) {\n chain.push(current);\n current = current.parentScope;\n }\n\n return chain;\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/state/shared-state-scope.ts"],"names":[],"mappings":"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","file":"shared-state-scope.js","sourcesContent":["import type { IGraphic, IStage } from '../../interface';\nimport { StateDefinitionCompiler } from './state-definition-compiler';\nimport type { CompiledStateDefinition, StateDefinitionsInput } from './state-definition';\n\nexport interface SharedStateScope<T extends Record<string, any> = Record<string, any>> {\n ownerStage?: IStage;\n parentScope?: SharedStateScope<T>;\n themeStateDefinitions?: StateDefinitionsInput<T>;\n localStateDefinitions?: StateDefinitionsInput<T>;\n effectiveSourceDefinitions: StateDefinitionsInput<T>;\n effectiveCompiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n revision: number;\n parentRevisionAtBuild?: number;\n dirty: boolean;\n subtreeActiveDescendants: Set<IGraphic>;\n}\n\nconst compiler = new StateDefinitionCompiler<any>();\n\nfunction buildEffectiveSourceDefinitions<T extends Record<string, any>>(\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): StateDefinitionsInput<T> {\n return Object.assign(\n {} as StateDefinitionsInput<T>,\n parentScope ? parentScope.effectiveSourceDefinitions : themeStateDefinitions,\n localStateDefinitions\n );\n}\n\nexport function createRootSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n stage: IStage,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return rebuildSharedStateScope(\n {\n ownerStage: stage,\n themeStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function createGroupSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n group: IGraphic,\n parentScope?: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): SharedStateScope<T> {\n return rebuildSharedStateScope(\n {\n ownerStage: group.stage,\n parentScope,\n localStateDefinitions,\n effectiveSourceDefinitions: {} as StateDefinitionsInput<T>,\n effectiveCompiledDefinitions: new Map(),\n revision: 0,\n dirty: false,\n subtreeActiveDescendants: new Set()\n },\n 0\n );\n}\n\nexport function setSharedStateScopeParent<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n parentScope?: SharedStateScope<T>\n): boolean {\n if (scope.parentScope === parentScope) {\n return false;\n }\n\n scope.parentScope = parentScope;\n scope.dirty = true;\n return true;\n}\n\nexport function setSharedStateScopeLocalDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n localStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.localStateDefinitions === localStateDefinitions) {\n return false;\n }\n\n scope.localStateDefinitions = localStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function setRootSharedStateScopeThemeDefinitions<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n themeStateDefinitions?: StateDefinitionsInput<T>\n): boolean {\n if (scope.themeStateDefinitions === themeStateDefinitions) {\n return false;\n }\n\n scope.themeStateDefinitions = themeStateDefinitions;\n rebuildSharedStateScope(scope);\n return true;\n}\n\nexport function rebuildSharedStateScope<T extends Record<string, any> = Record<string, any>>(\n scope: SharedStateScope<T>,\n revision: number = scope.revision + 1\n): SharedStateScope<T> {\n const effectiveSourceDefinitions = buildEffectiveSourceDefinitions(\n scope.parentScope,\n scope.localStateDefinitions,\n scope.themeStateDefinitions\n );\n\n scope.effectiveSourceDefinitions = effectiveSourceDefinitions;\n scope.effectiveCompiledDefinitions = compiler.compile(effectiveSourceDefinitions);\n scope.parentRevisionAtBuild = scope.parentScope?.revision;\n scope.revision = revision;\n scope.dirty = false;\n\n return scope;\n}\n\nexport function ensureSharedStateScopeFresh<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T> | undefined {\n if (!scope) {\n return undefined;\n }\n\n if (scope.parentScope) {\n ensureSharedStateScopeFresh(scope.parentScope);\n }\n\n if (scope.dirty || (scope.parentScope && scope.parentRevisionAtBuild !== scope.parentScope.revision)) {\n rebuildSharedStateScope(scope);\n }\n\n return scope;\n}\n\nexport function collectSharedStateScopeChain<T extends Record<string, any> = Record<string, any>>(\n scope?: SharedStateScope<T>\n): SharedStateScope<T>[] {\n const chain: SharedStateScope<T>[] = [];\n let current = scope;\n\n while (current) {\n chain.push(current);\n current = current.parentScope;\n }\n\n return chain;\n}\n"]}
@@ -50,7 +50,6 @@ export class StateDefinitionCompiler {
50
50
  return {
51
51
  name: null !== (_a = definition.name) && void 0 !== _a ? _a : name,
52
52
  priority: null !== (_b = definition.priority) && void 0 !== _b ? _b : 0,
53
- rank: definition.rank,
54
53
  patch: normalizePatch(definition.patch),
55
54
  resolver: definition.resolver,
56
55
  declaredAffectedKeys: definition.declaredAffectedKeys,
@@ -69,14 +68,14 @@ export class StateDefinitionCompiler {
69
68
  compiled.forEach(((definition, name) => {
70
69
  rawRelationMap.set(name, new Set(definition[relation]));
71
70
  })), compiled.forEach(((definition, origin) => {
72
- const closure = new Set, walk = (stateName, stack) => {
71
+ const closure = new Set, walk = (stateName, visiting) => {
73
72
  const nextStates = rawRelationMap.get(stateName);
74
73
  nextStates && nextStates.size && nextStates.forEach((nextState => {
75
- nextState !== origin ? stack.includes(nextState) ? console.warn(`[StateDefinitionCompiler] circular ${relation} relation detected: ${stack.join(" -> ")} -> ${nextState}`) : closure.has(nextState) || (closure.add(nextState),
76
- walk(nextState, stack.concat(nextState))) : console.warn(`[StateDefinitionCompiler] circular ${relation} relation detected: ${stack.join(" -> ")} -> ${origin}`);
74
+ nextState === origin || visiting.has(nextState) || closure.has(nextState) || (closure.add(nextState),
75
+ visiting.add(nextState), walk(nextState, visiting), visiting.delete(nextState));
77
76
  }));
78
77
  };
79
- walk(origin, [ origin ]), definition[relation] = closure;
78
+ walk(origin, new Set([ origin ])), definition[relation] = closure;
80
79
  }));
81
80
  }
82
81
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/state/state-definition-compiler.ts"],"names":[],"mappings":"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","file":"state-definition-compiler.js","sourcesContent":["import type {\n CompiledStateDefinition,\n StateDefinition,\n StateDefinitionsInput,\n StateResolveContext\n} from './state-definition';\n\nconst FULL_DEFINITION_KEYS = new Set([\n 'name',\n 'patch',\n 'priority',\n 'exclude',\n 'suppress',\n 'resolver',\n 'declaredAffectedKeys'\n]);\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction normalizePatch<T extends Record<string, any>>(value: unknown): Partial<T> | undefined {\n return value == null ? undefined : (value as Partial<T>);\n}\n\nexport class StateDefinitionCompiler<T extends Record<string, any> = Record<string, any>> {\n compile(\n definitions: StateDefinitionsInput<T> = {} as StateDefinitionsInput<T>\n ): Map<string, CompiledStateDefinition<T>> {\n const normalizedEntries = Object.keys(definitions).map(name => {\n const normalized = this.normalizeDefinition(name, definitions[name]);\n return [name, normalized] as const;\n });\n\n const rankOrder = normalizedEntries\n .map(([, definition]) => definition)\n .sort((left, right) => {\n const leftPriority = left.priority ?? 0;\n const rightPriority = right.priority ?? 0;\n if (leftPriority !== rightPriority) {\n return leftPriority - rightPriority;\n }\n return left.name.localeCompare(right.name);\n });\n\n const rankMap = new Map<string, number>();\n rankOrder.forEach((definition, index) => {\n rankMap.set(definition.name, index);\n });\n\n const compiled = new Map<string, CompiledStateDefinition<T>>();\n normalizedEntries.forEach(([, definition]) => {\n const declaredAffectedKeys = definition.declaredAffectedKeys\n ? new Set(Array.from(definition.declaredAffectedKeys))\n : undefined;\n const staticAffectedKeys = definition.patch ? new Set(Object.keys(definition.patch)) : new Set<string>();\n const affectedKeys = new Set<string>(staticAffectedKeys);\n declaredAffectedKeys?.forEach(key => affectedKeys.add(key));\n\n compiled.set(definition.name, {\n name: definition.name,\n priority: definition.priority ?? 0,\n rank: rankMap.get(definition.name) ?? 0,\n patch: normalizePatch<T>(definition.patch),\n resolver: definition.resolver,\n declaredAffectedKeys,\n exclude: new Set(definition.exclude ?? []),\n suppress: new Set(definition.suppress ?? []),\n hasResolver: typeof definition.resolver === 'function',\n affectedKeys\n });\n });\n\n this.expandRelationClosure(compiled, 'exclude');\n this.expandRelationClosure(compiled, 'suppress');\n\n return compiled;\n }\n\n private normalizeDefinition(name: string, value: Partial<T> | StateDefinition<T> | undefined): StateDefinition<T> {\n if (value == null) {\n return {\n name,\n priority: 0,\n patch: undefined\n };\n }\n\n const keys = isPlainObject(value) ? Object.keys(value) : [];\n const hasFullKey = keys.some(key => FULL_DEFINITION_KEYS.has(key));\n if (hasFullKey) {\n const definition = value as StateDefinition<T>;\n return {\n name: definition.name ?? name,\n priority: definition.priority ?? 0,\n rank: definition.rank,\n patch: normalizePatch<T>(definition.patch),\n resolver: definition.resolver as ((ctx: StateResolveContext<T>) => Partial<T> | void) | undefined,\n declaredAffectedKeys: definition.declaredAffectedKeys,\n exclude: definition.exclude,\n suppress: definition.suppress\n };\n }\n\n return {\n name,\n priority: 0,\n patch: value as Partial<T>\n };\n }\n\n private expandRelationClosure(\n compiled: Map<string, CompiledStateDefinition<T>>,\n relation: 'exclude' | 'suppress'\n ): void {\n const rawRelationMap = new Map<string, Set<string>>();\n\n compiled.forEach((definition, name) => {\n rawRelationMap.set(name, new Set(definition[relation]));\n });\n\n compiled.forEach((definition, origin) => {\n const closure = new Set<string>();\n const walk = (stateName: string, stack: string[]) => {\n const nextStates = rawRelationMap.get(stateName);\n if (!nextStates || !nextStates.size) {\n return;\n }\n\n nextStates.forEach(nextState => {\n if (nextState === origin) {\n console.warn(\n `[StateDefinitionCompiler] circular ${relation} relation detected: ${stack.join(' -> ')} -> ${origin}`\n );\n return;\n }\n\n if (stack.includes(nextState)) {\n console.warn(\n `[StateDefinitionCompiler] circular ${relation} relation detected: ${stack.join(' -> ')} -> ${nextState}`\n );\n return;\n }\n\n if (closure.has(nextState)) {\n return;\n }\n\n closure.add(nextState);\n walk(nextState, stack.concat(nextState));\n });\n };\n\n walk(origin, [origin]);\n definition[relation] = closure;\n });\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/state/state-definition-compiler.ts"],"names":[],"mappings":"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","file":"state-definition-compiler.js","sourcesContent":["import type {\n CompiledStateDefinition,\n StateDefinition,\n StateDefinitionsInput,\n StateResolveContext\n} from './state-definition';\n\nconst FULL_DEFINITION_KEYS = new Set([\n 'name',\n 'patch',\n 'priority',\n 'exclude',\n 'suppress',\n 'resolver',\n 'declaredAffectedKeys'\n]);\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction normalizePatch<T extends Record<string, any>>(value: unknown): Partial<T> | undefined {\n return value == null ? undefined : (value as Partial<T>);\n}\n\nexport class StateDefinitionCompiler<T extends Record<string, any> = Record<string, any>> {\n compile(\n definitions: StateDefinitionsInput<T> = {} as StateDefinitionsInput<T>\n ): Map<string, CompiledStateDefinition<T>> {\n const normalizedEntries = Object.keys(definitions).map(name => {\n const normalized = this.normalizeDefinition(name, definitions[name]);\n return [name, normalized] as const;\n });\n\n const rankOrder = normalizedEntries\n .map(([, definition]) => definition)\n .sort((left, right) => {\n const leftPriority = left.priority ?? 0;\n const rightPriority = right.priority ?? 0;\n if (leftPriority !== rightPriority) {\n return leftPriority - rightPriority;\n }\n return left.name.localeCompare(right.name);\n });\n\n const rankMap = new Map<string, number>();\n rankOrder.forEach((definition, index) => {\n rankMap.set(definition.name, index);\n });\n\n const compiled = new Map<string, CompiledStateDefinition<T>>();\n normalizedEntries.forEach(([, definition]) => {\n const declaredAffectedKeys = definition.declaredAffectedKeys\n ? new Set(Array.from(definition.declaredAffectedKeys))\n : undefined;\n const staticAffectedKeys = definition.patch ? new Set(Object.keys(definition.patch)) : new Set<string>();\n const affectedKeys = new Set<string>(staticAffectedKeys);\n declaredAffectedKeys?.forEach(key => affectedKeys.add(key));\n\n compiled.set(definition.name, {\n name: definition.name,\n priority: definition.priority ?? 0,\n rank: rankMap.get(definition.name) ?? 0,\n patch: normalizePatch<T>(definition.patch),\n resolver: definition.resolver,\n declaredAffectedKeys,\n exclude: new Set(definition.exclude ?? []),\n suppress: new Set(definition.suppress ?? []),\n hasResolver: typeof definition.resolver === 'function',\n affectedKeys\n });\n });\n\n this.expandRelationClosure(compiled, 'exclude');\n this.expandRelationClosure(compiled, 'suppress');\n\n return compiled;\n }\n\n private normalizeDefinition(name: string, value: Partial<T> | StateDefinition<T> | undefined): StateDefinition<T> {\n if (value == null) {\n return {\n name,\n priority: 0,\n patch: undefined\n };\n }\n\n const keys = isPlainObject(value) ? Object.keys(value) : [];\n const hasFullKey = keys.some(key => FULL_DEFINITION_KEYS.has(key));\n if (hasFullKey) {\n const definition = value as StateDefinition<T>;\n return {\n name: definition.name ?? name,\n priority: definition.priority ?? 0,\n patch: normalizePatch<T>(definition.patch),\n resolver: definition.resolver as ((ctx: StateResolveContext<T>) => Partial<T> | void) | undefined,\n declaredAffectedKeys: definition.declaredAffectedKeys,\n exclude: definition.exclude,\n suppress: definition.suppress\n };\n }\n\n return {\n name,\n priority: 0,\n patch: value as Partial<T>\n };\n }\n\n private expandRelationClosure(\n compiled: Map<string, CompiledStateDefinition<T>>,\n relation: 'exclude' | 'suppress'\n ): void {\n const rawRelationMap = new Map<string, Set<string>>();\n\n compiled.forEach((definition, name) => {\n rawRelationMap.set(name, new Set(definition[relation]));\n });\n\n compiled.forEach((definition, origin) => {\n const closure = new Set<string>();\n const walk = (stateName: string, visiting: Set<string>) => {\n const nextStates = rawRelationMap.get(stateName);\n if (!nextStates || !nextStates.size) {\n return;\n }\n\n nextStates.forEach(nextState => {\n if (nextState === origin || visiting.has(nextState) || closure.has(nextState)) {\n return;\n }\n\n closure.add(nextState);\n visiting.add(nextState);\n walk(nextState, visiting);\n visiting.delete(nextState);\n });\n };\n\n walk(origin, new Set([origin]));\n definition[relation] = closure;\n });\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  export interface StateDefinition<T extends Record<string, any> = Record<string, any>> {
2
2
  name: string;
3
3
  priority?: number;
4
- rank?: number;
5
4
  patch?: Partial<T>;
6
5
  resolver?: (ctx: StateResolveContext<T>) => Partial<T> | void;
7
6
  declaredAffectedKeys?: string[] | Set<string>;
8
7
  exclude?: string[];
9
8
  suppress?: string[];
10
9
  }
10
+ export type StateMergeMode = 'shallow' | 'deep';
11
11
  export interface CompiledStateDefinition<T extends Record<string, any> = Record<string, any>> {
12
12
  name: string;
13
13
  priority: number;
@@ -37,8 +37,5 @@ export type StateDefinitionsInput<T extends Record<string, any> = Record<string,
37
37
  export interface IStateEngineOptions<T extends Record<string, any> = Record<string, any>> {
38
38
  compiledDefinitions: Map<string, CompiledStateDefinition<T>>;
39
39
  stateSort?: (a: string, b: string) => number;
40
- stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T> | undefined;
41
- stateProxyEligibility?: (stateName: string) => boolean;
42
- states?: StateDefinitionsInput<T>;
43
- mergeMode?: 'shallow' | 'deep';
40
+ mergeMode?: StateMergeMode;
44
41
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/state/state-definition.ts"],"names":[],"mappings":"","file":"state-definition.js","sourcesContent":["export interface StateDefinition<T extends Record<string, any> = Record<string, any>> {\n name: string;\n priority?: number;\n rank?: number;\n patch?: Partial<T>;\n resolver?: (ctx: StateResolveContext<T>) => Partial<T> | void;\n declaredAffectedKeys?: string[] | Set<string>;\n exclude?: string[];\n suppress?: string[];\n}\n\nexport interface CompiledStateDefinition<T extends Record<string, any> = Record<string, any>> {\n name: string;\n priority: number;\n rank: number;\n patch?: Partial<T>;\n resolver?: (ctx: StateResolveContext<T>) => Partial<T> | void;\n declaredAffectedKeys?: Set<string>;\n exclude: Set<string>;\n suppress: Set<string>;\n hasResolver: boolean;\n affectedKeys: Set<string>;\n}\n\nexport interface StateResolveContext<T extends Record<string, any> = Record<string, any>> {\n graphic: any;\n activeStates: ReadonlyArray<string>;\n effectiveStates: ReadonlyArray<string>;\n baseAttributes: Partial<T>;\n resolvedPatch: Partial<T>;\n}\n\nexport interface StateTransitionResult {\n changed: boolean;\n activeStates: string[];\n effectiveStates: string[];\n suppressed: string[];\n}\n\nexport type StateDefinitionsInput<T extends Record<string, any> = Record<string, any>> = Record<\n string,\n Partial<T> | StateDefinition<T>\n>;\n\nexport interface IStateEngineOptions<T extends Record<string, any> = Record<string, any>> {\n compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n stateSort?: (a: string, b: string) => number;\n stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T> | undefined;\n stateProxyEligibility?: (stateName: string) => boolean;\n states?: StateDefinitionsInput<T>;\n mergeMode?: 'shallow' | 'deep';\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/state/state-definition.ts"],"names":[],"mappings":"","file":"state-definition.js","sourcesContent":["export interface StateDefinition<T extends Record<string, any> = Record<string, any>> {\n name: string;\n priority?: number;\n patch?: Partial<T>;\n resolver?: (ctx: StateResolveContext<T>) => Partial<T> | void;\n declaredAffectedKeys?: string[] | Set<string>;\n exclude?: string[];\n suppress?: string[];\n}\n\nexport type StateMergeMode = 'shallow' | 'deep';\n\nexport interface CompiledStateDefinition<T extends Record<string, any> = Record<string, any>> {\n name: string;\n priority: number;\n rank: number;\n patch?: Partial<T>;\n resolver?: (ctx: StateResolveContext<T>) => Partial<T> | void;\n declaredAffectedKeys?: Set<string>;\n exclude: Set<string>;\n suppress: Set<string>;\n hasResolver: boolean;\n affectedKeys: Set<string>;\n}\n\nexport interface StateResolveContext<T extends Record<string, any> = Record<string, any>> {\n graphic: any;\n activeStates: ReadonlyArray<string>;\n effectiveStates: ReadonlyArray<string>;\n baseAttributes: Partial<T>;\n resolvedPatch: Partial<T>;\n}\n\nexport interface StateTransitionResult {\n changed: boolean;\n activeStates: string[];\n effectiveStates: string[];\n suppressed: string[];\n}\n\nexport type StateDefinitionsInput<T extends Record<string, any> = Record<string, any>> = Record<\n string,\n Partial<T> | StateDefinition<T>\n>;\n\nexport interface IStateEngineOptions<T extends Record<string, any> = Record<string, any>> {\n compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n stateSort?: (a: string, b: string) => number;\n mergeMode?: StateMergeMode;\n}\n"]}
@@ -2,9 +2,6 @@ import type { IStateEngineOptions, StateTransitionResult } from './state-definit
2
2
  export declare class StateEngine<T extends Record<string, any> = Record<string, any>> {
3
3
  private readonly compiledDefinitions;
4
4
  private readonly stateSort?;
5
- private readonly stateProxy?;
6
- private readonly stateProxyEligibility?;
7
- private readonly states?;
8
5
  private readonly mergeMode;
9
6
  private _activeStates;
10
7
  private _effectiveStates;
@@ -28,11 +25,9 @@ export declare class StateEngine<T extends Record<string, any> = Record<string,
28
25
  clearStates(): StateTransitionResult;
29
26
  invalidateResolverCache(): void;
30
27
  hasState(stateName?: string): boolean;
31
- getCompatPatch(stateName: string): Partial<T> | undefined;
32
28
  private sortStates;
33
29
  private adjudicate;
34
30
  private recomputePatch;
35
31
  private mergeInto;
36
32
  private sameArray;
37
- private canUseStateProxy;
38
33
  }
@@ -1,5 +1,3 @@
1
- import { getActiveStageStatePerfMonitor } from "./state-perf-monitor";
2
-
3
1
  function isPlainObject(value) {
4
2
  return null != value && "object" == typeof value && !Array.isArray(value);
5
3
  }
@@ -21,16 +19,13 @@ function deepMerge(base, value) {
21
19
  })), result;
22
20
  }
23
21
 
24
- const FULL_DEFINITION_KEYS = new Set([ "name", "patch", "priority", "exclude", "suppress", "resolver", "declaredAffectedKeys" ]);
25
-
26
22
  export class StateEngine {
27
23
  constructor(options) {
28
24
  var _a;
29
25
  this._activeStates = [], this._effectiveStates = [], this._suppressed = [], this._resolvedPatch = {},
30
26
  this.resolverPatchCache = new Map, this.resolverCacheKey = "", this.resolverCacheValid = !1,
31
27
  this.baseAttributes = {}, this.compiledDefinitions = options.compiledDefinitions,
32
- this.stateSort = options.stateSort, this.stateProxy = options.stateProxy, this.stateProxyEligibility = options.stateProxyEligibility,
33
- this.states = options.states, this.mergeMode = null !== (_a = options.mergeMode) && void 0 !== _a ? _a : "shallow";
28
+ this.stateSort = options.stateSort, this.mergeMode = null !== (_a = options.mergeMode) && void 0 !== _a ? _a : "shallow";
34
29
  }
35
30
  get activeStates() {
36
31
  return this._activeStates;
@@ -98,22 +93,11 @@ export class StateEngine {
98
93
  };
99
94
  }
100
95
  invalidateResolverCache() {
101
- var _a, _b;
102
- this.resolverPatchCache.clear(), this.resolverCacheKey = "", this.resolverCacheValid = !1,
103
- null === (_b = getActiveStageStatePerfMonitor(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage)) || void 0 === _b || _b.recordResolver("invalidations");
96
+ this.resolverPatchCache.clear(), this.resolverCacheKey = "", this.resolverCacheValid = !1;
104
97
  }
105
98
  hasState(stateName) {
106
99
  return !!this._activeStates.length && (null == stateName || this._activeStates.includes(stateName));
107
100
  }
108
- getCompatPatch(stateName) {
109
- var _a, _b, _c;
110
- const targetStates = this._activeStates.length ? this._activeStates : this._effectiveStates, canUseStateProxy = this.canUseStateProxy(stateName), proxyPatch = canUseStateProxy ? null === (_a = this.stateProxy) || void 0 === _a ? void 0 : _a.call(this, stateName, targetStates) : void 0;
111
- if (this.stateProxy && canUseStateProxy) return null != proxyPatch ? proxyPatch : void 0;
112
- const value = null === (_b = this.states) || void 0 === _b ? void 0 : _b[stateName];
113
- if (null == value) return;
114
- if (!isPlainObject(value)) return value;
115
- return Object.keys(value).some((key => FULL_DEFINITION_KEYS.has(key))) ? cloneValue(null !== (_c = value.patch) && void 0 !== _c ? _c : void 0) : value;
116
- }
117
101
  sortStates(states) {
118
102
  const withDefinition = [], withoutDefinition = [];
119
103
  return states.forEach((stateName => {
@@ -141,55 +125,24 @@ export class StateEngine {
141
125
  };
142
126
  }
143
127
  recomputePatch(effectiveStates) {
144
- var _a;
145
- const perfMonitor = getActiveStageStatePerfMonitor(null === (_a = this.graphic) || void 0 === _a ? void 0 : _a.stage), patchStart = perfMonitor ? performance.now() : 0;
146
- let resolverCost = 0;
147
- const cacheKey = effectiveStates.join(","), nextPatch = {};
148
- if (null == perfMonitor || perfMonitor.recordAllocation("patchObjectsCreated"),
149
- this.resolverCacheValid && this.resolverCacheKey === cacheKey ? effectiveStates.forEach((stateName => {
128
+ const cacheKey = effectiveStates.join(","), nextPatch = {}, useResolverCache = this.resolverCacheValid && this.resolverCacheKey === cacheKey;
129
+ useResolverCache || (this.resolverPatchCache.clear(), this.resolverCacheKey = cacheKey),
130
+ effectiveStates.forEach((stateName => {
150
131
  var _a;
151
- const canUseStateProxy = this.canUseStateProxy(stateName), proxyPatch = canUseStateProxy ? null === (_a = this.stateProxy) || void 0 === _a ? void 0 : _a.call(this, stateName, effectiveStates) : void 0;
152
- if (this.stateProxy && canUseStateProxy) return void (null != proxyPatch && this.mergeInto(nextPatch, proxyPatch));
153
132
  const definition = this.compiledDefinitions.get(stateName);
154
- if (definition) {
155
- if (definition.patch && this.mergeInto(nextPatch, definition.patch), definition.hasResolver) {
156
- const cachedPatch = this.resolverPatchCache.get(stateName);
157
- cachedPatch && (null == perfMonitor || perfMonitor.recordResolver("cacheHits"),
158
- this.mergeInto(nextPatch, cachedPatch));
159
- }
160
- } else {
161
- const compatPatch = this.getCompatPatch(stateName);
162
- compatPatch && this.mergeInto(nextPatch, compatPatch);
133
+ if (definition && (definition.patch && this.mergeInto(nextPatch, definition.patch),
134
+ definition.hasResolver)) {
135
+ const resolverPatch = useResolverCache ? this.resolverPatchCache.get(stateName) : null === (_a = definition.resolver) || void 0 === _a ? void 0 : _a.call(definition, {
136
+ graphic: this.graphic,
137
+ activeStates: this._activeStates,
138
+ effectiveStates: this._effectiveStates,
139
+ baseAttributes: this.baseAttributes,
140
+ resolvedPatch: nextPatch
141
+ });
142
+ resolverPatch && (useResolverCache || this.resolverPatchCache.set(stateName, resolverPatch),
143
+ this.mergeInto(nextPatch, resolverPatch));
163
144
  }
164
- })) : (this.resolverPatchCache.clear(), this.resolverCacheKey = cacheKey, effectiveStates.forEach((stateName => {
165
- var _a;
166
- const canUseStateProxy = this.canUseStateProxy(stateName), proxyPatch = canUseStateProxy ? null === (_a = this.stateProxy) || void 0 === _a ? void 0 : _a.call(this, stateName, effectiveStates) : void 0;
167
- if (this.stateProxy && canUseStateProxy) return void (null != proxyPatch && this.mergeInto(nextPatch, proxyPatch));
168
- const definition = this.compiledDefinitions.get(stateName);
169
- if (definition) {
170
- if (definition.patch && this.mergeInto(nextPatch, definition.patch), definition.hasResolver && definition.resolver) {
171
- null == perfMonitor || perfMonitor.recordResolver("cacheMisses");
172
- const resolverStart = perfMonitor ? performance.now() : 0, resolverPatch = definition.resolver({
173
- graphic: this.graphic,
174
- activeStates: this._activeStates,
175
- effectiveStates: this._effectiveStates,
176
- baseAttributes: this.baseAttributes,
177
- resolvedPatch: nextPatch
178
- });
179
- if (perfMonitor) {
180
- const duration = performance.now() - resolverStart;
181
- resolverCost += duration, perfMonitor.recordCost("resolver", duration);
182
- }
183
- resolverPatch && (this.resolverPatchCache.set(stateName, resolverPatch), this.mergeInto(nextPatch, resolverPatch));
184
- }
185
- } else {
186
- const compatPatch = this.getCompatPatch(stateName);
187
- compatPatch && this.mergeInto(nextPatch, compatPatch);
188
- }
189
- })), this.resolverCacheValid = !0), this._resolvedPatch = nextPatch, perfMonitor) {
190
- const totalCost = performance.now() - patchStart;
191
- perfMonitor.recordCost("patch", Math.max(0, totalCost - resolverCost));
192
- }
145
+ })), useResolverCache || (this.resolverCacheValid = !0), this._resolvedPatch = nextPatch;
193
146
  }
194
147
  mergeInto(target, patch) {
195
148
  "deep" !== this.mergeMode ? Object.keys(patch).forEach((key => {
@@ -205,8 +158,5 @@ export class StateEngine {
205
158
  for (let index = 0; index < left.length; index++) if (left[index] !== right[index]) return !1;
206
159
  return !0;
207
160
  }
208
- canUseStateProxy(stateName) {
209
- return !!this.stateProxy && (!this.stateProxyEligibility || this.stateProxyEligibility(stateName));
210
- }
211
161
  }
212
162
  //# sourceMappingURL=state-engine.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphic/state/state-engine.ts"],"names":[],"mappings":"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","file":"state-engine.js","sourcesContent":["import type {\n CompiledStateDefinition,\n IStateEngineOptions,\n StateDefinitionsInput,\n StateTransitionResult\n} from './state-definition';\nimport { getActiveStageStatePerfMonitor } from './state-perf-monitor';\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction cloneValue<T>(value: T): T {\n if (!isPlainObject(value)) {\n return value;\n }\n\n const clone: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n clone[key] = cloneValue((value as Record<string, any>)[key]);\n });\n return clone as T;\n}\n\nfunction deepMerge(base: Record<string, any>, value: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = cloneValue(base) ?? {};\n\n Object.keys(value).forEach(key => {\n const nextValue = value[key];\n const previousValue = result[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n result[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n result[key] = cloneValue(nextValue);\n });\n\n return result;\n}\n\nconst FULL_DEFINITION_KEYS = new Set([\n 'name',\n 'patch',\n 'priority',\n 'exclude',\n 'suppress',\n 'resolver',\n 'declaredAffectedKeys'\n]);\n\nexport class StateEngine<T extends Record<string, any> = Record<string, any>> {\n private readonly compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n private readonly stateSort?: (a: string, b: string) => number;\n private readonly stateProxy?: (stateName: string, targetStates?: string[]) => Partial<T> | undefined;\n private readonly stateProxyEligibility?: (stateName: string) => boolean;\n private readonly states?: StateDefinitionsInput<T>;\n private readonly mergeMode: 'shallow' | 'deep';\n\n private _activeStates: string[] = [];\n private _effectiveStates: string[] = [];\n private _suppressed: string[] = [];\n private _resolvedPatch: Partial<T> = {};\n private resolverPatchCache = new Map<string, Partial<T>>();\n private resolverCacheKey = '';\n private resolverCacheValid = false;\n private graphic: any;\n private baseAttributes: Partial<T> = {};\n\n constructor(options: IStateEngineOptions<T>) {\n this.compiledDefinitions = options.compiledDefinitions;\n this.stateSort = options.stateSort;\n this.stateProxy = options.stateProxy;\n this.stateProxyEligibility = options.stateProxyEligibility;\n this.states = options.states;\n this.mergeMode = options.mergeMode ?? 'shallow';\n }\n\n get activeStates(): ReadonlyArray<string> {\n return this._activeStates;\n }\n\n get effectiveStates(): ReadonlyArray<string> {\n return this._effectiveStates;\n }\n\n get resolvedPatch(): Partial<T> {\n return this._resolvedPatch;\n }\n\n get suppressed(): ReadonlyArray<string> {\n return this._suppressed;\n }\n\n setResolveContext(graphic: any, baseAttributes: Partial<T>): void {\n this.graphic = graphic;\n this.baseAttributes = baseAttributes;\n }\n\n applyStates(stateNames: string[]): StateTransitionResult {\n const uniqueStates = Array.from(new Set(stateNames));\n const sortedStates = this.sortStates(uniqueStates);\n const adjudicated = this.adjudicate(sortedStates);\n const activeStates = adjudicated.active;\n const effectiveStates = activeStates.filter(stateName => !adjudicated.suppressedSet.has(stateName));\n const suppressed = activeStates.filter(stateName => adjudicated.suppressedSet.has(stateName));\n\n const changed =\n !this.sameArray(this._activeStates, activeStates) ||\n !this.sameArray(this._effectiveStates, effectiveStates) ||\n !this.sameArray(this._suppressed, suppressed);\n\n this._activeStates = activeStates;\n this._effectiveStates = effectiveStates;\n this._suppressed = suppressed;\n\n if (changed || !this.resolverCacheValid) {\n this.recomputePatch(effectiveStates);\n }\n\n return {\n changed,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n addState(stateName: string, keepCurrentStates?: boolean): StateTransitionResult {\n if (this._activeStates.includes(stateName) && (keepCurrentStates || this._activeStates.length === 1)) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n const nextStates =\n keepCurrentStates && this._activeStates.length ? this._activeStates.concat([stateName]) : [stateName];\n\n return this.applyStates(nextStates);\n }\n\n removeState(stateNames: string | string[]): StateTransitionResult {\n if (!this._activeStates.length) {\n return {\n changed: false,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n const filteredNames = Array.isArray(stateNames)\n ? this._activeStates.filter(stateName => !stateNames.includes(stateName))\n : this._activeStates.filter(stateName => stateName !== stateNames);\n\n if (filteredNames.length === this._activeStates.length) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n return this.applyStates(filteredNames);\n }\n\n toggleState(stateName: string): StateTransitionResult {\n if (this.hasState(stateName)) {\n return this.removeState(stateName);\n }\n\n return this.applyStates(this._activeStates.concat([stateName]));\n }\n\n clearStates(): StateTransitionResult {\n const changed = this._activeStates.length > 0 || this._effectiveStates.length > 0 || this._suppressed.length > 0;\n this._activeStates = [];\n this._effectiveStates = [];\n this._suppressed = [];\n this._resolvedPatch = {};\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n\n return {\n changed,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n invalidateResolverCache(): void {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n getActiveStageStatePerfMonitor(this.graphic?.stage)?.recordResolver('invalidations');\n }\n\n hasState(stateName?: string): boolean {\n if (!this._activeStates.length) {\n return false;\n }\n\n if (stateName == null) {\n return true;\n }\n\n return this._activeStates.includes(stateName);\n }\n\n getCompatPatch(stateName: string): Partial<T> | undefined {\n const targetStates = this._activeStates.length ? this._activeStates : this._effectiveStates;\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, targetStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n return proxyPatch ?? undefined;\n }\n\n const value = this.states?.[stateName];\n if (value == null) {\n return undefined;\n }\n\n if (!isPlainObject(value)) {\n return value as Partial<T>;\n }\n\n const keys = Object.keys(value);\n const hasFullKey = keys.some(key => FULL_DEFINITION_KEYS.has(key));\n if (!hasFullKey) {\n return value as Partial<T>;\n }\n\n return cloneValue(((value as Record<string, any>).patch ?? undefined) as Partial<T> | undefined);\n }\n\n private sortStates(states: string[]): string[] {\n const withDefinition: string[] = [];\n const withoutDefinition: string[] = [];\n\n states.forEach(stateName => {\n if (this.compiledDefinitions.has(stateName)) {\n withDefinition.push(stateName);\n } else {\n withoutDefinition.push(stateName);\n }\n });\n\n withDefinition.sort((left, right) => {\n const leftDefinition = this.compiledDefinitions.get(left);\n const rightDefinition = this.compiledDefinitions.get(right);\n if (!leftDefinition || !rightDefinition) {\n return 0;\n }\n if (leftDefinition.priority !== rightDefinition.priority) {\n return leftDefinition.priority - rightDefinition.priority;\n }\n return leftDefinition.rank - rightDefinition.rank;\n });\n\n if (this.stateSort && withoutDefinition.length > 1) {\n withoutDefinition.sort(this.stateSort);\n }\n\n return withDefinition.concat(withoutDefinition);\n }\n\n private adjudicate(sortedStates: string[]): { active: string[]; suppressedSet: Set<string> } {\n const candidate = sortedStates.slice();\n const suppressedSet = new Set<string>();\n\n for (let index = candidate.length - 1; index >= 0; index--) {\n const stateName = candidate[index];\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n continue;\n }\n\n definition.exclude.forEach(excludedState => {\n const excludedIndex = candidate.indexOf(excludedState);\n if (excludedIndex === -1) {\n return;\n }\n\n candidate.splice(excludedIndex, 1);\n if (excludedIndex < index) {\n index -= 1;\n }\n });\n\n definition.suppress.forEach(suppressedState => {\n suppressedSet.add(suppressedState);\n });\n }\n\n return {\n active: candidate,\n suppressedSet\n };\n }\n\n private recomputePatch(effectiveStates: string[]): void {\n const perfMonitor = getActiveStageStatePerfMonitor(this.graphic?.stage);\n const patchStart = perfMonitor ? performance.now() : 0;\n let resolverCost = 0;\n const cacheKey = effectiveStates.join(',');\n const nextPatch: Partial<T> = {};\n perfMonitor?.recordAllocation('patchObjectsCreated');\n\n if (this.resolverCacheValid && this.resolverCacheKey === cacheKey) {\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver) {\n const cachedPatch = this.resolverPatchCache.get(stateName);\n if (cachedPatch) {\n perfMonitor?.recordResolver('cacheHits');\n this.mergeInto(nextPatch, cachedPatch);\n }\n }\n });\n } else {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = cacheKey;\n\n effectiveStates.forEach(stateName => {\n const canUseStateProxy = this.canUseStateProxy(stateName);\n const proxyPatch = canUseStateProxy ? this.stateProxy?.(stateName, effectiveStates) : undefined;\n if (this.stateProxy && canUseStateProxy) {\n if (proxyPatch != null) {\n this.mergeInto(nextPatch, proxyPatch);\n }\n return;\n }\n\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n const compatPatch = this.getCompatPatch(stateName);\n if (compatPatch) {\n this.mergeInto(nextPatch, compatPatch);\n }\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver && definition.resolver) {\n perfMonitor?.recordResolver('cacheMisses');\n const resolverStart = perfMonitor ? performance.now() : 0;\n const resolverPatch = definition.resolver({\n graphic: this.graphic,\n activeStates: this._activeStates,\n effectiveStates: this._effectiveStates,\n baseAttributes: this.baseAttributes,\n resolvedPatch: nextPatch\n });\n if (perfMonitor) {\n const duration = performance.now() - resolverStart;\n resolverCost += duration;\n perfMonitor.recordCost('resolver', duration);\n }\n if (resolverPatch) {\n this.resolverPatchCache.set(stateName, resolverPatch);\n this.mergeInto(nextPatch, resolverPatch);\n }\n }\n });\n\n this.resolverCacheValid = true;\n }\n\n this._resolvedPatch = nextPatch;\n if (perfMonitor) {\n const totalCost = performance.now() - patchStart;\n perfMonitor.recordCost('patch', Math.max(0, totalCost - resolverCost));\n }\n }\n\n private mergeInto(target: Partial<T>, patch: Partial<T>): void {\n if (this.mergeMode === 'deep') {\n Object.keys(patch).forEach(key => {\n const nextValue = (patch as Record<string, any>)[key];\n const previousValue = (target as Record<string, any>)[key];\n const baseValue = (this.baseAttributes as Record<string, any>)?.[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n if (!isPlainObject(previousValue) && isPlainObject(baseValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(baseValue, nextValue);\n return;\n }\n\n (target as Record<string, any>)[key] = cloneValue(nextValue);\n });\n return;\n }\n\n Object.keys(patch).forEach(key => {\n (target as Record<string, any>)[key] = cloneValue((patch as Record<string, any>)[key]);\n });\n }\n\n private sameArray(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n\n for (let index = 0; index < left.length; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n\n return true;\n }\n\n private canUseStateProxy(stateName: string): boolean {\n if (!this.stateProxy) {\n return false;\n }\n\n return this.stateProxyEligibility ? this.stateProxyEligibility(stateName) : true;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/graphic/state/state-engine.ts"],"names":[],"mappings":"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","file":"state-engine.js","sourcesContent":["import type { CompiledStateDefinition, IStateEngineOptions, StateTransitionResult } from './state-definition';\n\nfunction isPlainObject(value: unknown): value is Record<string, any> {\n return value != null && typeof value === 'object' && !Array.isArray(value);\n}\n\nfunction cloneValue<T>(value: T): T {\n if (!isPlainObject(value)) {\n return value;\n }\n\n const clone: Record<string, any> = {};\n Object.keys(value).forEach(key => {\n clone[key] = cloneValue((value as Record<string, any>)[key]);\n });\n return clone as T;\n}\n\nfunction deepMerge(base: Record<string, any>, value: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = cloneValue(base) ?? {};\n\n Object.keys(value).forEach(key => {\n const nextValue = value[key];\n const previousValue = result[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n result[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n result[key] = cloneValue(nextValue);\n });\n\n return result;\n}\n\nexport class StateEngine<T extends Record<string, any> = Record<string, any>> {\n private readonly compiledDefinitions: Map<string, CompiledStateDefinition<T>>;\n private readonly stateSort?: (a: string, b: string) => number;\n private readonly mergeMode: 'shallow' | 'deep';\n\n private _activeStates: string[] = [];\n private _effectiveStates: string[] = [];\n private _suppressed: string[] = [];\n private _resolvedPatch: Partial<T> = {};\n private resolverPatchCache = new Map<string, Partial<T>>();\n private resolverCacheKey = '';\n private resolverCacheValid = false;\n private graphic: any;\n private baseAttributes: Partial<T> = {};\n\n constructor(options: IStateEngineOptions<T>) {\n this.compiledDefinitions = options.compiledDefinitions;\n this.stateSort = options.stateSort;\n this.mergeMode = options.mergeMode ?? 'shallow';\n }\n\n get activeStates(): ReadonlyArray<string> {\n return this._activeStates;\n }\n\n get effectiveStates(): ReadonlyArray<string> {\n return this._effectiveStates;\n }\n\n get resolvedPatch(): Partial<T> {\n return this._resolvedPatch;\n }\n\n get suppressed(): ReadonlyArray<string> {\n return this._suppressed;\n }\n\n setResolveContext(graphic: any, baseAttributes: Partial<T>): void {\n this.graphic = graphic;\n this.baseAttributes = baseAttributes;\n }\n\n applyStates(stateNames: string[]): StateTransitionResult {\n const uniqueStates = Array.from(new Set(stateNames));\n const sortedStates = this.sortStates(uniqueStates);\n const adjudicated = this.adjudicate(sortedStates);\n const activeStates = adjudicated.active;\n const effectiveStates = activeStates.filter(stateName => !adjudicated.suppressedSet.has(stateName));\n const suppressed = activeStates.filter(stateName => adjudicated.suppressedSet.has(stateName));\n\n const changed =\n !this.sameArray(this._activeStates, activeStates) ||\n !this.sameArray(this._effectiveStates, effectiveStates) ||\n !this.sameArray(this._suppressed, suppressed);\n\n this._activeStates = activeStates;\n this._effectiveStates = effectiveStates;\n this._suppressed = suppressed;\n\n if (changed || !this.resolverCacheValid) {\n this.recomputePatch(effectiveStates);\n }\n\n return {\n changed,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n addState(stateName: string, keepCurrentStates?: boolean): StateTransitionResult {\n if (this._activeStates.includes(stateName) && (keepCurrentStates || this._activeStates.length === 1)) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n const nextStates =\n keepCurrentStates && this._activeStates.length ? this._activeStates.concat([stateName]) : [stateName];\n\n return this.applyStates(nextStates);\n }\n\n removeState(stateNames: string | string[]): StateTransitionResult {\n if (!this._activeStates.length) {\n return {\n changed: false,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n const filteredNames = Array.isArray(stateNames)\n ? this._activeStates.filter(stateName => !stateNames.includes(stateName))\n : this._activeStates.filter(stateName => stateName !== stateNames);\n\n if (filteredNames.length === this._activeStates.length) {\n return {\n changed: false,\n activeStates: [...this._activeStates],\n effectiveStates: [...this._effectiveStates],\n suppressed: [...this._suppressed]\n };\n }\n\n return this.applyStates(filteredNames);\n }\n\n toggleState(stateName: string): StateTransitionResult {\n if (this.hasState(stateName)) {\n return this.removeState(stateName);\n }\n\n return this.applyStates(this._activeStates.concat([stateName]));\n }\n\n clearStates(): StateTransitionResult {\n const changed = this._activeStates.length > 0 || this._effectiveStates.length > 0 || this._suppressed.length > 0;\n this._activeStates = [];\n this._effectiveStates = [];\n this._suppressed = [];\n this._resolvedPatch = {};\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n\n return {\n changed,\n activeStates: [],\n effectiveStates: [],\n suppressed: []\n };\n }\n\n invalidateResolverCache(): void {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = '';\n this.resolverCacheValid = false;\n }\n\n hasState(stateName?: string): boolean {\n if (!this._activeStates.length) {\n return false;\n }\n\n if (stateName == null) {\n return true;\n }\n\n return this._activeStates.includes(stateName);\n }\n\n private sortStates(states: string[]): string[] {\n const withDefinition: string[] = [];\n const withoutDefinition: string[] = [];\n\n states.forEach(stateName => {\n if (this.compiledDefinitions.has(stateName)) {\n withDefinition.push(stateName);\n } else {\n withoutDefinition.push(stateName);\n }\n });\n\n withDefinition.sort((left, right) => {\n const leftDefinition = this.compiledDefinitions.get(left);\n const rightDefinition = this.compiledDefinitions.get(right);\n if (!leftDefinition || !rightDefinition) {\n return 0;\n }\n if (leftDefinition.priority !== rightDefinition.priority) {\n return leftDefinition.priority - rightDefinition.priority;\n }\n return leftDefinition.rank - rightDefinition.rank;\n });\n\n if (this.stateSort && withoutDefinition.length > 1) {\n withoutDefinition.sort(this.stateSort);\n }\n\n return withDefinition.concat(withoutDefinition);\n }\n\n private adjudicate(sortedStates: string[]): { active: string[]; suppressedSet: Set<string> } {\n const candidate = sortedStates.slice();\n const suppressedSet = new Set<string>();\n\n for (let index = candidate.length - 1; index >= 0; index--) {\n const stateName = candidate[index];\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n continue;\n }\n\n definition.exclude.forEach(excludedState => {\n const excludedIndex = candidate.indexOf(excludedState);\n if (excludedIndex === -1) {\n return;\n }\n\n candidate.splice(excludedIndex, 1);\n if (excludedIndex < index) {\n index -= 1;\n }\n });\n\n definition.suppress.forEach(suppressedState => {\n suppressedSet.add(suppressedState);\n });\n }\n\n return {\n active: candidate,\n suppressedSet\n };\n }\n\n private recomputePatch(effectiveStates: string[]): void {\n const cacheKey = effectiveStates.join(',');\n const nextPatch: Partial<T> = {};\n const useResolverCache = this.resolverCacheValid && this.resolverCacheKey === cacheKey;\n\n if (!useResolverCache) {\n this.resolverPatchCache.clear();\n this.resolverCacheKey = cacheKey;\n }\n\n effectiveStates.forEach(stateName => {\n const definition = this.compiledDefinitions.get(stateName);\n if (!definition) {\n return;\n }\n\n if (definition.patch) {\n this.mergeInto(nextPatch, definition.patch);\n }\n\n if (definition.hasResolver) {\n const resolverPatch = useResolverCache\n ? this.resolverPatchCache.get(stateName)\n : definition.resolver?.({\n graphic: this.graphic,\n activeStates: this._activeStates,\n effectiveStates: this._effectiveStates,\n baseAttributes: this.baseAttributes,\n resolvedPatch: nextPatch\n });\n\n if (resolverPatch) {\n if (!useResolverCache) {\n this.resolverPatchCache.set(stateName, resolverPatch);\n }\n this.mergeInto(nextPatch, resolverPatch);\n }\n }\n });\n\n if (!useResolverCache) {\n this.resolverCacheValid = true;\n }\n\n this._resolvedPatch = nextPatch;\n }\n\n private mergeInto(target: Partial<T>, patch: Partial<T>): void {\n if (this.mergeMode === 'deep') {\n Object.keys(patch).forEach(key => {\n const nextValue = (patch as Record<string, any>)[key];\n const previousValue = (target as Record<string, any>)[key];\n const baseValue = (this.baseAttributes as Record<string, any>)?.[key];\n\n if (isPlainObject(previousValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(previousValue, nextValue);\n return;\n }\n\n if (!isPlainObject(previousValue) && isPlainObject(baseValue) && isPlainObject(nextValue)) {\n (target as Record<string, any>)[key] = deepMerge(baseValue, nextValue);\n return;\n }\n\n (target as Record<string, any>)[key] = cloneValue(nextValue);\n });\n return;\n }\n\n Object.keys(patch).forEach(key => {\n (target as Record<string, any>)[key] = cloneValue((patch as Record<string, any>)[key]);\n });\n }\n\n private sameArray(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n\n for (let index = 0; index < left.length; index++) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n\n return true;\n }\n}\n"]}