@cosmos.gl/graph 2.6.2-rc.0 → 2.7.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/.eslintrc +147 -0
  2. package/.github/SECURITY.md +13 -0
  3. package/.github/dco.yml +4 -0
  4. package/.github/workflows/github_pages.yml +54 -0
  5. package/.storybook/main.ts +26 -0
  6. package/.storybook/manager-head.html +1 -0
  7. package/.storybook/manager.ts +14 -0
  8. package/.storybook/preview.ts +29 -0
  9. package/.storybook/style.css +3 -0
  10. package/CHARTER.md +69 -0
  11. package/CODE_OF_CONDUCT.md +178 -0
  12. package/CONTRIBUTING.md +22 -0
  13. package/GOVERNANCE.md +21 -0
  14. package/cosmos-2-0-migration-notes.md +98 -0
  15. package/cosmos_awesome.md +96 -0
  16. package/dist/config.d.ts +5 -9
  17. package/dist/graph/utils/error-message.d.ts +1 -1
  18. package/dist/helper.d.ts +39 -2
  19. package/dist/index-FUIgayhu.js +19827 -0
  20. package/dist/index-FUIgayhu.js.map +1 -0
  21. package/dist/index.d.ts +17 -64
  22. package/dist/index.js +14 -14654
  23. package/dist/index.js.map +1 -1
  24. package/dist/index.min.js +1062 -475
  25. package/dist/index.min.js.map +1 -1
  26. package/dist/modules/Clusters/index.d.ts +11 -3
  27. package/dist/modules/ForceCenter/index.d.ts +10 -3
  28. package/dist/modules/ForceGravity/index.d.ts +5 -1
  29. package/dist/modules/ForceLink/index.d.ts +8 -5
  30. package/dist/modules/ForceManyBody/index.d.ts +16 -7
  31. package/dist/modules/ForceMouse/index.d.ts +5 -1
  32. package/dist/modules/GraphData/index.d.ts +0 -1
  33. package/dist/modules/Lines/index.d.ts +11 -5
  34. package/dist/modules/Points/index.d.ts +31 -13
  35. package/dist/modules/Store/index.d.ts +93 -0
  36. package/dist/modules/core-module.d.ts +3 -3
  37. package/dist/stories/beginners/basic-set-up/data-gen.d.ts +4 -0
  38. package/dist/stories/beginners/basic-set-up/index.d.ts +6 -0
  39. package/dist/stories/beginners/link-hovering/data-generator.d.ts +19 -0
  40. package/dist/stories/beginners/link-hovering/index.d.ts +6 -0
  41. package/dist/stories/beginners/point-labels/data.d.ts +13 -0
  42. package/dist/stories/beginners/point-labels/index.d.ts +10 -0
  43. package/dist/stories/beginners/point-labels/labels.d.ts +8 -0
  44. package/dist/stories/beginners/quick-start.d.ts +6 -0
  45. package/dist/stories/beginners/remove-points/config.d.ts +2 -0
  46. package/dist/stories/beginners/remove-points/data-gen.d.ts +4 -0
  47. package/dist/stories/beginners/remove-points/index.d.ts +6 -0
  48. package/dist/stories/beginners.stories.d.ts +10 -0
  49. package/dist/stories/clusters/polygon-selection/index.d.ts +6 -0
  50. package/dist/stories/clusters/polygon-selection/polygon.d.ts +20 -0
  51. package/dist/stories/clusters/radial.d.ts +6 -0
  52. package/dist/stories/clusters/with-labels.d.ts +6 -0
  53. package/dist/stories/clusters/worm.d.ts +6 -0
  54. package/dist/stories/clusters.stories.d.ts +9 -0
  55. package/dist/stories/create-cluster-labels.d.ts +4 -0
  56. package/dist/stories/create-cosmos.d.ts +17 -0
  57. package/dist/stories/create-story.d.ts +16 -0
  58. package/dist/stories/experiments/full-mesh.d.ts +6 -0
  59. package/dist/stories/experiments/mesh-with-holes.d.ts +6 -0
  60. package/dist/stories/experiments.stories.d.ts +7 -0
  61. package/dist/stories/generate-mesh-data.d.ts +12 -0
  62. package/dist/stories/geospatial/moscow-metro-stations/index.d.ts +16 -0
  63. package/dist/stories/geospatial/moscow-metro-stations/moscow-metro-coords.d.ts +1 -0
  64. package/dist/stories/geospatial/moscow-metro-stations/point-colors.d.ts +1 -0
  65. package/dist/stories/geospatial.stories.d.ts +6 -0
  66. package/dist/stories/shapes/all-shapes/index.d.ts +6 -0
  67. package/dist/stories/shapes/image-example/index.d.ts +6 -0
  68. package/dist/stories/shapes.stories.d.ts +7 -0
  69. package/dist/stories/test-luma-migration.d.ts +6 -0
  70. package/dist/stories/test.stories.d.ts +6 -0
  71. package/dist/webgl-device-B9ewDj5L.js +3923 -0
  72. package/dist/webgl-device-B9ewDj5L.js.map +1 -0
  73. package/logo.svg +3 -0
  74. package/package.json +5 -7
  75. package/rollup.config.js +70 -0
  76. package/src/config.ts +728 -0
  77. package/src/declaration.d.ts +12 -0
  78. package/src/graph/utils/error-message.ts +23 -0
  79. package/src/helper.ts +113 -0
  80. package/src/index.ts +1769 -0
  81. package/src/modules/Clusters/calculate-centermass.frag +12 -0
  82. package/src/modules/Clusters/calculate-centermass.vert +38 -0
  83. package/src/modules/Clusters/force-cluster.frag +55 -0
  84. package/src/modules/Clusters/index.ts +578 -0
  85. package/src/modules/Drag/index.ts +33 -0
  86. package/src/modules/FPSMonitor/css.ts +53 -0
  87. package/src/modules/FPSMonitor/index.ts +28 -0
  88. package/src/modules/ForceCenter/calculate-centermass.frag +9 -0
  89. package/src/modules/ForceCenter/calculate-centermass.vert +26 -0
  90. package/src/modules/ForceCenter/force-center.frag +37 -0
  91. package/src/modules/ForceCenter/index.ts +284 -0
  92. package/src/modules/ForceGravity/force-gravity.frag +40 -0
  93. package/src/modules/ForceGravity/index.ts +107 -0
  94. package/src/modules/ForceLink/force-spring.ts +89 -0
  95. package/src/modules/ForceLink/index.ts +293 -0
  96. package/src/modules/ForceManyBody/calculate-level.frag +9 -0
  97. package/src/modules/ForceManyBody/calculate-level.vert +37 -0
  98. package/src/modules/ForceManyBody/force-centermass.frag +61 -0
  99. package/src/modules/ForceManyBody/force-level.frag +138 -0
  100. package/src/modules/ForceManyBody/index.ts +525 -0
  101. package/src/modules/ForceManyBody/quadtree-frag-shader.ts +89 -0
  102. package/src/modules/ForceManyBodyQuadtree/calculate-level.frag +9 -0
  103. package/src/modules/ForceManyBodyQuadtree/calculate-level.vert +25 -0
  104. package/src/modules/ForceManyBodyQuadtree/index.ts +157 -0
  105. package/src/modules/ForceManyBodyQuadtree/quadtree-frag-shader.ts +93 -0
  106. package/src/modules/ForceMouse/force-mouse.frag +35 -0
  107. package/src/modules/ForceMouse/index.ts +102 -0
  108. package/src/modules/GraphData/index.ts +383 -0
  109. package/src/modules/Lines/draw-curve-line.frag +59 -0
  110. package/src/modules/Lines/draw-curve-line.vert +248 -0
  111. package/src/modules/Lines/geometry.ts +18 -0
  112. package/src/modules/Lines/hovered-line-index.frag +43 -0
  113. package/src/modules/Lines/hovered-line-index.vert +13 -0
  114. package/src/modules/Lines/index.ts +661 -0
  115. package/src/modules/Points/atlas-utils.ts +137 -0
  116. package/src/modules/Points/drag-point.frag +34 -0
  117. package/src/modules/Points/draw-highlighted.frag +44 -0
  118. package/src/modules/Points/draw-highlighted.vert +145 -0
  119. package/src/modules/Points/draw-points.frag +259 -0
  120. package/src/modules/Points/draw-points.vert +203 -0
  121. package/src/modules/Points/fill-sampled-points.frag +12 -0
  122. package/src/modules/Points/fill-sampled-points.vert +51 -0
  123. package/src/modules/Points/find-hovered-point.frag +15 -0
  124. package/src/modules/Points/find-hovered-point.vert +90 -0
  125. package/src/modules/Points/find-points-on-area-selection.frag +88 -0
  126. package/src/modules/Points/find-points-on-polygon-selection.frag +89 -0
  127. package/src/modules/Points/index.ts +2292 -0
  128. package/src/modules/Points/track-positions.frag +30 -0
  129. package/src/modules/Points/update-position.frag +39 -0
  130. package/src/modules/Shared/buffer.ts +39 -0
  131. package/src/modules/Shared/clear.frag +10 -0
  132. package/src/modules/Shared/quad.vert +13 -0
  133. package/src/modules/Store/index.ts +283 -0
  134. package/src/modules/Zoom/index.ts +148 -0
  135. package/src/modules/core-module.ts +28 -0
  136. package/src/stories/1. welcome.mdx +75 -0
  137. package/src/stories/2. configuration.mdx +111 -0
  138. package/src/stories/3. api-reference.mdx +591 -0
  139. package/src/stories/beginners/basic-set-up/data-gen.ts +33 -0
  140. package/src/stories/beginners/basic-set-up/index.ts +167 -0
  141. package/src/stories/beginners/basic-set-up/style.css +35 -0
  142. package/src/stories/beginners/link-hovering/data-generator.ts +198 -0
  143. package/src/stories/beginners/link-hovering/index.ts +65 -0
  144. package/src/stories/beginners/link-hovering/style.css +73 -0
  145. package/src/stories/beginners/point-labels/data.ts +73 -0
  146. package/src/stories/beginners/point-labels/index.ts +69 -0
  147. package/src/stories/beginners/point-labels/labels.ts +46 -0
  148. package/src/stories/beginners/point-labels/style.css +16 -0
  149. package/src/stories/beginners/quick-start.ts +54 -0
  150. package/src/stories/beginners/remove-points/config.ts +25 -0
  151. package/src/stories/beginners/remove-points/data-gen.ts +30 -0
  152. package/src/stories/beginners/remove-points/index.ts +96 -0
  153. package/src/stories/beginners/remove-points/style.css +31 -0
  154. package/src/stories/beginners.stories.ts +130 -0
  155. package/src/stories/clusters/polygon-selection/index.ts +52 -0
  156. package/src/stories/clusters/polygon-selection/polygon.ts +143 -0
  157. package/src/stories/clusters/polygon-selection/style.css +8 -0
  158. package/src/stories/clusters/radial.ts +24 -0
  159. package/src/stories/clusters/with-labels.ts +54 -0
  160. package/src/stories/clusters/worm.ts +40 -0
  161. package/src/stories/clusters.stories.ts +77 -0
  162. package/src/stories/create-cluster-labels.ts +50 -0
  163. package/src/stories/create-cosmos.ts +72 -0
  164. package/src/stories/create-story.ts +51 -0
  165. package/src/stories/experiments/full-mesh.ts +13 -0
  166. package/src/stories/experiments/mesh-with-holes.ts +13 -0
  167. package/src/stories/experiments.stories.ts +43 -0
  168. package/src/stories/generate-mesh-data.ts +125 -0
  169. package/src/stories/geospatial/moscow-metro-stations/index.ts +66 -0
  170. package/src/stories/geospatial/moscow-metro-stations/moscow-metro-coords.ts +1 -0
  171. package/src/stories/geospatial/moscow-metro-stations/point-colors.ts +46 -0
  172. package/src/stories/geospatial/moscow-metro-stations/style.css +30 -0
  173. package/src/stories/geospatial.stories.ts +30 -0
  174. package/src/stories/shapes/all-shapes/index.ts +73 -0
  175. package/src/stories/shapes/image-example/icons/box.png +0 -0
  176. package/src/stories/shapes/image-example/icons/lego.png +0 -0
  177. package/src/stories/shapes/image-example/icons/s.png +0 -0
  178. package/src/stories/shapes/image-example/icons/swift.png +0 -0
  179. package/src/stories/shapes/image-example/icons/toolbox.png +0 -0
  180. package/src/stories/shapes/image-example/index.ts +246 -0
  181. package/src/stories/shapes.stories.ts +37 -0
  182. package/src/stories/test-luma-migration.ts +195 -0
  183. package/src/stories/test.stories.ts +25 -0
  184. package/src/variables.ts +68 -0
  185. package/tsconfig.json +41 -0
  186. package/vite.config.ts +52 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/d3-selection/src/namespaces.js","../node_modules/d3-selection/src/namespace.js","../node_modules/d3-selection/src/creator.js","../node_modules/d3-selection/src/selector.js","../node_modules/d3-selection/src/selection/select.js","../node_modules/d3-selection/src/array.js","../node_modules/d3-selection/src/selectorAll.js","../node_modules/d3-selection/src/selection/selectAll.js","../node_modules/d3-selection/src/matcher.js","../node_modules/d3-selection/src/selection/selectChild.js","../node_modules/d3-selection/src/selection/selectChildren.js","../node_modules/d3-selection/src/selection/filter.js","../node_modules/d3-selection/src/selection/sparse.js","../node_modules/d3-selection/src/selection/enter.js","../node_modules/d3-selection/src/constant.js","../node_modules/d3-selection/src/selection/data.js","../node_modules/d3-selection/src/selection/exit.js","../node_modules/d3-selection/src/selection/join.js","../node_modules/d3-selection/src/selection/merge.js","../node_modules/d3-selection/src/selection/order.js","../node_modules/d3-selection/src/selection/sort.js","../node_modules/d3-selection/src/selection/call.js","../node_modules/d3-selection/src/selection/nodes.js","../node_modules/d3-selection/src/selection/node.js","../node_modules/d3-selection/src/selection/size.js","../node_modules/d3-selection/src/selection/empty.js","../node_modules/d3-selection/src/selection/each.js","../node_modules/d3-selection/src/selection/attr.js","../node_modules/d3-selection/src/window.js","../node_modules/d3-selection/src/selection/style.js","../node_modules/d3-selection/src/selection/property.js","../node_modules/d3-selection/src/selection/classed.js","../node_modules/d3-selection/src/selection/text.js","../node_modules/d3-selection/src/selection/html.js","../node_modules/d3-selection/src/selection/raise.js","../node_modules/d3-selection/src/selection/lower.js","../node_modules/d3-selection/src/selection/append.js","../node_modules/d3-selection/src/selection/insert.js","../node_modules/d3-selection/src/selection/remove.js","../node_modules/d3-selection/src/selection/clone.js","../node_modules/d3-selection/src/selection/datum.js","../node_modules/d3-selection/src/selection/on.js","../node_modules/d3-selection/src/selection/dispatch.js","../node_modules/d3-selection/src/selection/iterator.js","../node_modules/d3-selection/src/selection/index.js","../node_modules/d3-selection/src/select.js","../node_modules/d3-selection/src/sourceEvent.js","../node_modules/d3-selection/src/pointer.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/timeout.js","../node_modules/d3-transition/src/transition/schedule.js","../node_modules/d3-transition/src/interrupt.js","../node_modules/d3-transition/src/selection/interrupt.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/numberArray.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-transition/src/transition/tween.js","../node_modules/d3-transition/src/transition/interpolate.js","../node_modules/d3-transition/src/transition/attr.js","../node_modules/d3-transition/src/transition/attrTween.js","../node_modules/d3-transition/src/transition/delay.js","../node_modules/d3-transition/src/transition/duration.js","../node_modules/d3-transition/src/transition/ease.js","../node_modules/d3-transition/src/transition/easeVarying.js","../node_modules/d3-transition/src/transition/filter.js","../node_modules/d3-transition/src/transition/merge.js","../node_modules/d3-transition/src/transition/on.js","../node_modules/d3-transition/src/transition/remove.js","../node_modules/d3-transition/src/transition/select.js","../node_modules/d3-transition/src/transition/selectAll.js","../node_modules/d3-transition/src/transition/selection.js","../node_modules/d3-transition/src/transition/style.js","../node_modules/d3-transition/src/transition/styleTween.js","../node_modules/d3-transition/src/transition/text.js","../node_modules/d3-transition/src/transition/textTween.js","../node_modules/d3-transition/src/transition/transition.js","../node_modules/d3-transition/src/transition/end.js","../node_modules/d3-transition/src/transition/index.js","../node_modules/d3-ease/src/quad.js","../node_modules/d3-ease/src/cubic.js","../node_modules/d3-transition/src/selection/transition.js","../node_modules/d3-transition/src/selection/index.js","../node_modules/regl/dist/regl.js","../src/variables.ts","../node_modules/dompurify/dist/purify.es.mjs","../src/helper.ts","../src/config.ts","../src/modules/core-module.ts","../src/modules/ForceCenter/calculate-centermass.frag","../src/modules/ForceCenter/calculate-centermass.vert","../src/modules/ForceCenter/force-center.frag","../src/modules/Shared/buffer.ts","../src/modules/Shared/clear.frag","../src/modules/Shared/quad.vert","../src/modules/ForceCenter/index.ts","../src/modules/ForceGravity/force-gravity.frag","../src/modules/ForceGravity/index.ts","../src/modules/ForceLink/force-spring.ts","../src/modules/ForceLink/index.ts","../src/modules/ForceManyBody/calculate-level.frag","../src/modules/ForceManyBody/calculate-level.vert","../src/modules/ForceManyBody/force-level.frag","../src/modules/ForceManyBody/force-centermass.frag","../src/modules/ForceManyBody/index.ts","../src/modules/ForceManyBody/quadtree-frag-shader.ts","../src/modules/ForceManyBodyQuadtree/index.ts","../src/modules/ForceMouse/force-mouse.frag","../src/modules/ForceMouse/index.ts","../src/modules/Clusters/calculate-centermass.frag","../src/modules/Clusters/calculate-centermass.vert","../src/modules/Clusters/force-cluster.frag","../src/modules/Clusters/index.ts","../node_modules/gl-bench/dist/gl-bench.js","../src/modules/FPSMonitor/css.ts","../src/modules/FPSMonitor/index.ts","../src/modules/GraphData/index.ts","../src/modules/Lines/draw-curve-line.frag","../src/modules/Lines/draw-curve-line.vert","../src/modules/Lines/hovered-line-index.frag","../src/modules/Lines/hovered-line-index.vert","../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/descending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/number.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/extent.js","../node_modules/d3-array/src/ticks.js","../node_modules/d3-array/src/range.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/pow.js","../src/modules/Lines/geometry.ts","../src/modules/Lines/index.ts","../src/modules/Points/draw-points.frag","../src/modules/Points/draw-points.vert","../src/modules/Points/find-points-on-area-selection.frag","../src/modules/Points/find-points-on-polygon-selection.frag","../src/modules/Points/draw-highlighted.frag","../src/modules/Points/draw-highlighted.vert","../src/modules/Points/find-hovered-point.frag","../src/modules/Points/find-hovered-point.vert","../src/modules/Points/fill-sampled-points.frag","../src/modules/Points/fill-sampled-points.vert","../src/modules/Points/update-position.frag","../src/modules/Points/track-positions.frag","../src/modules/Points/drag-point.frag","../src/modules/Points/atlas-utils.ts","../src/modules/Points/index.ts","../node_modules/gl-matrix/esm/common.js","../node_modules/gl-matrix/esm/mat3.js","../node_modules/seedrandom/lib/alea.js","../node_modules/seedrandom/lib/xor128.js","../node_modules/seedrandom/lib/xorwow.js","../node_modules/seedrandom/lib/xorshift7.js","../node_modules/seedrandom/lib/xor4096.js","../node_modules/seedrandom/lib/tychei.js","../__vite-browser-external","../node_modules/seedrandom/seedrandom.js","../node_modules/seedrandom/index.js","../node_modules/random/dist/random.module.js","../src/modules/Store/index.ts","../node_modules/d3-drag/src/noevent.js","../node_modules/d3-drag/src/nodrag.js","../node_modules/d3-drag/src/constant.js","../node_modules/d3-drag/src/event.js","../node_modules/d3-drag/src/drag.js","../node_modules/d3-zoom/src/constant.js","../node_modules/d3-zoom/src/event.js","../node_modules/d3-zoom/src/transform.js","../node_modules/d3-zoom/src/noevent.js","../node_modules/d3-zoom/src/zoom.js","../src/modules/Zoom/index.ts","../src/modules/Drag/index.ts","../src/graph/utils/error-message.ts","../src/index.ts"],"sourcesContent":["export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function quadIn(t) {\n return t * t;\n}\n\nexport function quadOut(t) {\n return t * (2 - t);\n}\n\nexport function quadInOut(t) {\n return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;\n}\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global.createREGL = factory());\n}(this, (function () { 'use strict';\n\nvar isTypedArray = function (x) {\n return (\n x instanceof Uint8Array ||\n x instanceof Uint16Array ||\n x instanceof Uint32Array ||\n x instanceof Int8Array ||\n x instanceof Int16Array ||\n x instanceof Int32Array ||\n x instanceof Float32Array ||\n x instanceof Float64Array ||\n x instanceof Uint8ClampedArray\n )\n}\n\nvar extend = function (base, opts) {\n var keys = Object.keys(opts)\n for (var i = 0; i < keys.length; ++i) {\n base[keys[i]] = opts[keys[i]]\n }\n return base\n}\n\n// Error checking and parameter validation.\n//\n// Statements for the form `check.someProcedure(...)` get removed by\n// a browserify transform for optimized/minified bundles.\n//\n/* globals atob */\nvar endl = '\\n'\n\n// only used for extracting shader names. if atob not present, then errors\n// will be slightly crappier\nfunction decodeB64 (str) {\n if (typeof atob !== 'undefined') {\n return atob(str)\n }\n return 'base64:' + str\n}\n\nfunction raise (message) {\n var error = new Error('(regl) ' + message)\n console.error(error)\n throw error\n}\n\nfunction check (pred, message) {\n if (!pred) {\n raise(message)\n }\n}\n\nfunction encolon (message) {\n if (message) {\n return ': ' + message\n }\n return ''\n}\n\nfunction checkParameter (param, possibilities, message) {\n if (!(param in possibilities)) {\n raise('unknown parameter (' + param + ')' + encolon(message) +\n '. possible values: ' + Object.keys(possibilities).join())\n }\n}\n\nfunction checkIsTypedArray (data, message) {\n if (!isTypedArray(data)) {\n raise(\n 'invalid parameter type' + encolon(message) +\n '. must be a typed array')\n }\n}\n\nfunction standardTypeEh (value, type) {\n switch (type) {\n case 'number': return typeof value === 'number'\n case 'object': return typeof value === 'object'\n case 'string': return typeof value === 'string'\n case 'boolean': return typeof value === 'boolean'\n case 'function': return typeof value === 'function'\n case 'undefined': return typeof value === 'undefined'\n case 'symbol': return typeof value === 'symbol'\n }\n}\n\nfunction checkTypeOf (value, type, message) {\n if (!standardTypeEh(value, type)) {\n raise(\n 'invalid parameter type' + encolon(message) +\n '. expected ' + type + ', got ' + (typeof value))\n }\n}\n\nfunction checkNonNegativeInt (value, message) {\n if (!((value >= 0) &&\n ((value | 0) === value))) {\n raise('invalid parameter type, (' + value + ')' + encolon(message) +\n '. must be a nonnegative integer')\n }\n}\n\nfunction checkOneOf (value, list, message) {\n if (list.indexOf(value) < 0) {\n raise('invalid value' + encolon(message) + '. must be one of: ' + list)\n }\n}\n\nvar constructorKeys = [\n 'gl',\n 'canvas',\n 'container',\n 'attributes',\n 'pixelRatio',\n 'extensions',\n 'optionalExtensions',\n 'profile',\n 'onDone'\n]\n\nfunction checkConstructor (obj) {\n Object.keys(obj).forEach(function (key) {\n if (constructorKeys.indexOf(key) < 0) {\n raise('invalid regl constructor argument \"' + key + '\". must be one of ' + constructorKeys)\n }\n })\n}\n\nfunction leftPad (str, n) {\n str = str + ''\n while (str.length < n) {\n str = ' ' + str\n }\n return str\n}\n\nfunction ShaderFile () {\n this.name = 'unknown'\n this.lines = []\n this.index = {}\n this.hasErrors = false\n}\n\nfunction ShaderLine (number, line) {\n this.number = number\n this.line = line\n this.errors = []\n}\n\nfunction ShaderError (fileNumber, lineNumber, message) {\n this.file = fileNumber\n this.line = lineNumber\n this.message = message\n}\n\nfunction guessCommand () {\n var error = new Error()\n var stack = (error.stack || error).toString()\n var pat = /compileProcedure.*\\n\\s*at.*\\((.*)\\)/.exec(stack)\n if (pat) {\n return pat[1]\n }\n var pat2 = /compileProcedure.*\\n\\s*at\\s+(.*)(\\n|$)/.exec(stack)\n if (pat2) {\n return pat2[1]\n }\n return 'unknown'\n}\n\nfunction guessCallSite () {\n var error = new Error()\n var stack = (error.stack || error).toString()\n var pat = /at REGLCommand.*\\n\\s+at.*\\((.*)\\)/.exec(stack)\n if (pat) {\n return pat[1]\n }\n var pat2 = /at REGLCommand.*\\n\\s+at\\s+(.*)\\n/.exec(stack)\n if (pat2) {\n return pat2[1]\n }\n return 'unknown'\n}\n\nfunction parseSource (source, command) {\n var lines = source.split('\\n')\n var lineNumber = 1\n var fileNumber = 0\n var files = {\n unknown: new ShaderFile(),\n 0: new ShaderFile()\n }\n files.unknown.name = files[0].name = command || guessCommand()\n files.unknown.lines.push(new ShaderLine(0, ''))\n for (var i = 0; i < lines.length; ++i) {\n var line = lines[i]\n var parts = /^\\s*#\\s*(\\w+)\\s+(.+)\\s*$/.exec(line)\n if (parts) {\n switch (parts[1]) {\n case 'line':\n var lineNumberInfo = /(\\d+)(\\s+\\d+)?/.exec(parts[2])\n if (lineNumberInfo) {\n lineNumber = lineNumberInfo[1] | 0\n if (lineNumberInfo[2]) {\n fileNumber = lineNumberInfo[2] | 0\n if (!(fileNumber in files)) {\n files[fileNumber] = new ShaderFile()\n }\n }\n }\n break\n case 'define':\n var nameInfo = /SHADER_NAME(_B64)?\\s+(.*)$/.exec(parts[2])\n if (nameInfo) {\n files[fileNumber].name = (nameInfo[1]\n ? decodeB64(nameInfo[2])\n : nameInfo[2])\n }\n break\n }\n }\n files[fileNumber].lines.push(new ShaderLine(lineNumber++, line))\n }\n Object.keys(files).forEach(function (fileNumber) {\n var file = files[fileNumber]\n file.lines.forEach(function (line) {\n file.index[line.number] = line\n })\n })\n return files\n}\n\nfunction parseErrorLog (errLog) {\n var result = []\n errLog.split('\\n').forEach(function (errMsg) {\n if (errMsg.length < 5) {\n return\n }\n var parts = /^ERROR:\\s+(\\d+):(\\d+):\\s*(.*)$/.exec(errMsg)\n if (parts) {\n result.push(new ShaderError(\n parts[1] | 0,\n parts[2] | 0,\n parts[3].trim()))\n } else if (errMsg.length > 0) {\n result.push(new ShaderError('unknown', 0, errMsg))\n }\n })\n return result\n}\n\nfunction annotateFiles (files, errors) {\n errors.forEach(function (error) {\n var file = files[error.file]\n if (file) {\n var line = file.index[error.line]\n if (line) {\n line.errors.push(error)\n file.hasErrors = true\n return\n }\n }\n files.unknown.hasErrors = true\n files.unknown.lines[0].errors.push(error)\n })\n}\n\nfunction checkShaderError (gl, shader, source, type, command) {\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n var errLog = gl.getShaderInfoLog(shader)\n var typeName = type === gl.FRAGMENT_SHADER ? 'fragment' : 'vertex'\n checkCommandType(source, 'string', typeName + ' shader source must be a string', command)\n var files = parseSource(source, command)\n var errors = parseErrorLog(errLog)\n annotateFiles(files, errors)\n\n Object.keys(files).forEach(function (fileNumber) {\n var file = files[fileNumber]\n if (!file.hasErrors) {\n return\n }\n\n var strings = ['']\n var styles = ['']\n\n function push (str, style) {\n strings.push(str)\n styles.push(style || '')\n }\n\n push('file number ' + fileNumber + ': ' + file.name + '\\n', 'color:red;text-decoration:underline;font-weight:bold')\n\n file.lines.forEach(function (line) {\n if (line.errors.length > 0) {\n push(leftPad(line.number, 4) + '| ', 'background-color:yellow; font-weight:bold')\n push(line.line + endl, 'color:red; background-color:yellow; font-weight:bold')\n\n // try to guess token\n var offset = 0\n line.errors.forEach(function (error) {\n var message = error.message\n var token = /^\\s*'(.*)'\\s*:\\s*(.*)$/.exec(message)\n if (token) {\n var tokenPat = token[1]\n message = token[2]\n switch (tokenPat) {\n case 'assign':\n tokenPat = '='\n break\n }\n offset = Math.max(line.line.indexOf(tokenPat, offset), 0)\n } else {\n offset = 0\n }\n\n push(leftPad('| ', 6))\n push(leftPad('^^^', offset + 3) + endl, 'font-weight:bold')\n push(leftPad('| ', 6))\n push(message + endl, 'font-weight:bold')\n })\n push(leftPad('| ', 6) + endl)\n } else {\n push(leftPad(line.number, 4) + '| ')\n push(line.line + endl, 'color:red')\n }\n })\n if (typeof document !== 'undefined' && !window.chrome) {\n styles[0] = strings.join('%c')\n console.log.apply(console, styles)\n } else {\n console.log(strings.join(''))\n }\n })\n\n check.raise('Error compiling ' + typeName + ' shader, ' + files[0].name)\n }\n}\n\nfunction checkLinkError (gl, program, fragShader, vertShader, command) {\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n var errLog = gl.getProgramInfoLog(program)\n var fragParse = parseSource(fragShader, command)\n var vertParse = parseSource(vertShader, command)\n\n var header = 'Error linking program with vertex shader, \"' +\n vertParse[0].name + '\", and fragment shader \"' + fragParse[0].name + '\"'\n\n if (typeof document !== 'undefined') {\n console.log('%c' + header + endl + '%c' + errLog,\n 'color:red;text-decoration:underline;font-weight:bold',\n 'color:red')\n } else {\n console.log(header + endl + errLog)\n }\n check.raise(header)\n }\n}\n\nfunction saveCommandRef (object) {\n object._commandRef = guessCommand()\n}\n\nfunction saveDrawCommandInfo (opts, uniforms, attributes, stringStore) {\n saveCommandRef(opts)\n\n function id (str) {\n if (str) {\n return stringStore.id(str)\n }\n return 0\n }\n opts._fragId = id(opts.static.frag)\n opts._vertId = id(opts.static.vert)\n\n function addProps (dict, set) {\n Object.keys(set).forEach(function (u) {\n dict[stringStore.id(u)] = true\n })\n }\n\n var uniformSet = opts._uniformSet = {}\n addProps(uniformSet, uniforms.static)\n addProps(uniformSet, uniforms.dynamic)\n\n var attributeSet = opts._attributeSet = {}\n addProps(attributeSet, attributes.static)\n addProps(attributeSet, attributes.dynamic)\n\n opts._hasCount = (\n 'count' in opts.static ||\n 'count' in opts.dynamic ||\n 'elements' in opts.static ||\n 'elements' in opts.dynamic)\n}\n\nfunction commandRaise (message, command) {\n var callSite = guessCallSite()\n raise(message +\n ' in command ' + (command || guessCommand()) +\n (callSite === 'unknown' ? '' : ' called from ' + callSite))\n}\n\nfunction checkCommand (pred, message, command) {\n if (!pred) {\n commandRaise(message, command || guessCommand())\n }\n}\n\nfunction checkParameterCommand (param, possibilities, message, command) {\n if (!(param in possibilities)) {\n commandRaise(\n 'unknown parameter (' + param + ')' + encolon(message) +\n '. possible values: ' + Object.keys(possibilities).join(),\n command || guessCommand())\n }\n}\n\nfunction checkCommandType (value, type, message, command) {\n if (!standardTypeEh(value, type)) {\n commandRaise(\n 'invalid parameter type' + encolon(message) +\n '. expected ' + type + ', got ' + (typeof value),\n command || guessCommand())\n }\n}\n\nfunction checkOptional (block) {\n block()\n}\n\nfunction checkFramebufferFormat (attachment, texFormats, rbFormats) {\n if (attachment.texture) {\n checkOneOf(\n attachment.texture._texture.internalformat,\n texFormats,\n 'unsupported texture format for attachment')\n } else {\n checkOneOf(\n attachment.renderbuffer._renderbuffer.format,\n rbFormats,\n 'unsupported renderbuffer format for attachment')\n }\n}\n\nvar GL_CLAMP_TO_EDGE = 0x812F\n\nvar GL_NEAREST = 0x2600\nvar GL_NEAREST_MIPMAP_NEAREST = 0x2700\nvar GL_LINEAR_MIPMAP_NEAREST = 0x2701\nvar GL_NEAREST_MIPMAP_LINEAR = 0x2702\nvar GL_LINEAR_MIPMAP_LINEAR = 0x2703\n\nvar GL_BYTE = 5120\nvar GL_UNSIGNED_BYTE = 5121\nvar GL_SHORT = 5122\nvar GL_UNSIGNED_SHORT = 5123\nvar GL_INT = 5124\nvar GL_UNSIGNED_INT = 5125\nvar GL_FLOAT = 5126\n\nvar GL_UNSIGNED_SHORT_4_4_4_4 = 0x8033\nvar GL_UNSIGNED_SHORT_5_5_5_1 = 0x8034\nvar GL_UNSIGNED_SHORT_5_6_5 = 0x8363\nvar GL_UNSIGNED_INT_24_8_WEBGL = 0x84FA\n\nvar GL_HALF_FLOAT_OES = 0x8D61\n\nvar TYPE_SIZE = {}\n\nTYPE_SIZE[GL_BYTE] =\nTYPE_SIZE[GL_UNSIGNED_BYTE] = 1\n\nTYPE_SIZE[GL_SHORT] =\nTYPE_SIZE[GL_UNSIGNED_SHORT] =\nTYPE_SIZE[GL_HALF_FLOAT_OES] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_5_6_5] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_4_4_4_4] =\nTYPE_SIZE[GL_UNSIGNED_SHORT_5_5_5_1] = 2\n\nTYPE_SIZE[GL_INT] =\nTYPE_SIZE[GL_UNSIGNED_INT] =\nTYPE_SIZE[GL_FLOAT] =\nTYPE_SIZE[GL_UNSIGNED_INT_24_8_WEBGL] = 4\n\nfunction pixelSize (type, channels) {\n if (type === GL_UNSIGNED_SHORT_5_5_5_1 ||\n type === GL_UNSIGNED_SHORT_4_4_4_4 ||\n type === GL_UNSIGNED_SHORT_5_6_5) {\n return 2\n } else if (type === GL_UNSIGNED_INT_24_8_WEBGL) {\n return 4\n } else {\n return TYPE_SIZE[type] * channels\n }\n}\n\nfunction isPow2 (v) {\n return !(v & (v - 1)) && (!!v)\n}\n\nfunction checkTexture2D (info, mipData, limits) {\n var i\n var w = mipData.width\n var h = mipData.height\n var c = mipData.channels\n\n // Check texture shape\n check(w > 0 && w <= limits.maxTextureSize &&\n h > 0 && h <= limits.maxTextureSize,\n 'invalid texture shape')\n\n // check wrap mode\n if (info.wrapS !== GL_CLAMP_TO_EDGE || info.wrapT !== GL_CLAMP_TO_EDGE) {\n check(isPow2(w) && isPow2(h),\n 'incompatible wrap mode for texture, both width and height must be power of 2')\n }\n\n if (mipData.mipmask === 1) {\n if (w !== 1 && h !== 1) {\n check(\n info.minFilter !== GL_NEAREST_MIPMAP_NEAREST &&\n info.minFilter !== GL_NEAREST_MIPMAP_LINEAR &&\n info.minFilter !== GL_LINEAR_MIPMAP_NEAREST &&\n info.minFilter !== GL_LINEAR_MIPMAP_LINEAR,\n 'min filter requires mipmap')\n }\n } else {\n // texture must be power of 2\n check(isPow2(w) && isPow2(h),\n 'texture must be a square power of 2 to support mipmapping')\n check(mipData.mipmask === (w << 1) - 1,\n 'missing or incomplete mipmap data')\n }\n\n if (mipData.type === GL_FLOAT) {\n if (limits.extensions.indexOf('oes_texture_float_linear') < 0) {\n check(info.minFilter === GL_NEAREST && info.magFilter === GL_NEAREST,\n 'filter not supported, must enable oes_texture_float_linear')\n }\n check(!info.genMipmaps,\n 'mipmap generation not supported with float textures')\n }\n\n // check image complete\n var mipimages = mipData.images\n for (i = 0; i < 16; ++i) {\n if (mipimages[i]) {\n var mw = w >> i\n var mh = h >> i\n check(mipData.mipmask & (1 << i), 'missing mipmap data')\n\n var img = mipimages[i]\n\n check(\n img.width === mw &&\n img.height === mh,\n 'invalid shape for mip images')\n\n check(\n img.format === mipData.format &&\n img.internalformat === mipData.internalformat &&\n img.type === mipData.type,\n 'incompatible type for mip image')\n\n if (img.compressed) {\n // TODO: check size for compressed images\n } else if (img.data) {\n // check(img.data.byteLength === mw * mh *\n // Math.max(pixelSize(img.type, c), img.unpackAlignment),\n var rowSize = Math.ceil(pixelSize(img.type, c) * mw / img.unpackAlignment) * img.unpackAlignment\n check(img.data.byteLength === rowSize * mh,\n 'invalid data for image, buffer size is inconsistent with image format')\n } else if (img.element) {\n // TODO: check element can be loaded\n } else if (img.copy) {\n // TODO: check compatible format and type\n }\n } else if (!info.genMipmaps) {\n check((mipData.mipmask & (1 << i)) === 0, 'extra mipmap data')\n }\n }\n\n if (mipData.compressed) {\n check(!info.genMipmaps,\n 'mipmap generation for compressed images not supported')\n }\n}\n\nfunction checkTextureCube (texture, info, faces, limits) {\n var w = texture.width\n var h = texture.height\n var c = texture.channels\n\n // Check texture shape\n check(\n w > 0 && w <= limits.maxTextureSize && h > 0 && h <= limits.maxTextureSize,\n 'invalid texture shape')\n check(\n w === h,\n 'cube map must be square')\n check(\n info.wrapS === GL_CLAMP_TO_EDGE && info.wrapT === GL_CLAMP_TO_EDGE,\n 'wrap mode not supported by cube map')\n\n for (var i = 0; i < faces.length; ++i) {\n var face = faces[i]\n check(\n face.width === w && face.height === h,\n 'inconsistent cube map face shape')\n\n if (info.genMipmaps) {\n check(!face.compressed,\n 'can not generate mipmap for compressed textures')\n check(face.mipmask === 1,\n 'can not specify mipmaps and generate mipmaps')\n } else {\n // TODO: check mip and filter mode\n }\n\n var mipmaps = face.images\n for (var j = 0; j < 16; ++j) {\n var img = mipmaps[j]\n if (img) {\n var mw = w >> j\n var mh = h >> j\n check(face.mipmask & (1 << j), 'missing mipmap data')\n check(\n img.width === mw &&\n img.height === mh,\n 'invalid shape for mip images')\n check(\n img.format === texture.format &&\n img.internalformat === texture.internalformat &&\n img.type === texture.type,\n 'incompatible type for mip image')\n\n if (img.compressed) {\n // TODO: check size for compressed images\n } else if (img.data) {\n check(img.data.byteLength === mw * mh *\n Math.max(pixelSize(img.type, c), img.unpackAlignment),\n 'invalid data for image, buffer size is inconsistent with image format')\n } else if (img.element) {\n // TODO: check element can be loaded\n } else if (img.copy) {\n // TODO: check compatible format and type\n }\n }\n }\n }\n}\n\nvar check$1 = extend(check, {\n optional: checkOptional,\n raise: raise,\n commandRaise: commandRaise,\n command: checkCommand,\n parameter: checkParameter,\n commandParameter: checkParameterCommand,\n constructor: checkConstructor,\n type: checkTypeOf,\n commandType: checkCommandType,\n isTypedArray: checkIsTypedArray,\n nni: checkNonNegativeInt,\n oneOf: checkOneOf,\n shaderError: checkShaderError,\n linkError: checkLinkError,\n callSite: guessCallSite,\n saveCommandRef: saveCommandRef,\n saveDrawInfo: saveDrawCommandInfo,\n framebufferFormat: checkFramebufferFormat,\n guessCommand: guessCommand,\n texture2D: checkTexture2D,\n textureCube: checkTextureCube\n});\n\nvar VARIABLE_COUNTER = 0\n\nvar DYN_FUNC = 0\nvar DYN_CONSTANT = 5\nvar DYN_ARRAY = 6\n\nfunction DynamicVariable (type, data) {\n this.id = (VARIABLE_COUNTER++)\n this.type = type\n this.data = data\n}\n\nfunction escapeStr (str) {\n return str.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')\n}\n\nfunction splitParts (str) {\n if (str.length === 0) {\n return []\n }\n\n var firstChar = str.charAt(0)\n var lastChar = str.charAt(str.length - 1)\n\n if (str.length > 1 &&\n firstChar === lastChar &&\n (firstChar === '\"' || firstChar === \"'\")) {\n return ['\"' + escapeStr(str.substr(1, str.length - 2)) + '\"']\n }\n\n var parts = /\\[(false|true|null|\\d+|'[^']*'|\"[^\"]*\")\\]/.exec(str)\n if (parts) {\n return (\n splitParts(str.substr(0, parts.index))\n .concat(splitParts(parts[1]))\n .concat(splitParts(str.substr(parts.index + parts[0].length)))\n )\n }\n\n var subparts = str.split('.')\n if (subparts.length === 1) {\n return ['\"' + escapeStr(str) + '\"']\n }\n\n var result = []\n for (var i = 0; i < subparts.length; ++i) {\n result = result.concat(splitParts(subparts[i]))\n }\n return result\n}\n\nfunction toAccessorString (str) {\n return '[' + splitParts(str).join('][') + ']'\n}\n\nfunction defineDynamic (type, data) {\n return new DynamicVariable(type, toAccessorString(data + ''))\n}\n\nfunction isDynamic (x) {\n return (typeof x === 'function' && !x._reglType) || (x instanceof DynamicVariable)\n}\n\nfunction unbox (x, path) {\n if (typeof x === 'function') {\n return new DynamicVariable(DYN_FUNC, x)\n } else if (typeof x === 'number' || typeof x === 'boolean') {\n return new DynamicVariable(DYN_CONSTANT, x)\n } else if (Array.isArray(x)) {\n return new DynamicVariable(DYN_ARRAY, x.map(function (y, i) { return unbox(y, path + '[' + i + ']') }))\n } else if (x instanceof DynamicVariable) {\n return x\n }\n check$1(false, 'invalid option type in uniform ' + path)\n}\n\nvar dynamic = {\n DynamicVariable: DynamicVariable,\n define: defineDynamic,\n isDynamic: isDynamic,\n unbox: unbox,\n accessor: toAccessorString\n};\n\n/* globals requestAnimationFrame, cancelAnimationFrame */\nvar raf = {\n next: typeof requestAnimationFrame === 'function'\n ? function (cb) { return requestAnimationFrame(cb) }\n : function (cb) { return setTimeout(cb, 16) },\n cancel: typeof cancelAnimationFrame === 'function'\n ? function (raf) { return cancelAnimationFrame(raf) }\n : clearTimeout\n};\n\n/* globals performance */\nvar clock = (typeof performance !== 'undefined' && performance.now)\n ? function () { return performance.now() }\n : function () { return +(new Date()) };\n\nfunction createStringStore () {\n var stringIds = { '': 0 }\n var stringValues = ['']\n return {\n id: function (str) {\n var result = stringIds[str]\n if (result) {\n return result\n }\n result = stringIds[str] = stringValues.length\n stringValues.push(str)\n return result\n },\n\n str: function (id) {\n return stringValues[id]\n }\n }\n}\n\n// Context and canvas creation helper functions\nfunction createCanvas (element, onDone, pixelRatio) {\n var canvas = document.createElement('canvas')\n extend(canvas.style, {\n border: 0,\n margin: 0,\n padding: 0,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%'\n })\n element.appendChild(canvas)\n\n if (element === document.body) {\n canvas.style.position = 'absolute'\n extend(element.style, {\n margin: 0,\n padding: 0\n })\n }\n\n function resize () {\n var w = window.innerWidth\n var h = window.innerHeight\n if (element !== document.body) {\n var bounds = canvas.getBoundingClientRect()\n w = bounds.right - bounds.left\n h = bounds.bottom - bounds.top\n }\n canvas.width = pixelRatio * w\n canvas.height = pixelRatio * h\n }\n\n var resizeObserver\n if (element !== document.body && typeof ResizeObserver === 'function') {\n // ignore 'ResizeObserver' is not defined\n // eslint-disable-next-line\n resizeObserver = new ResizeObserver(function () {\n // setTimeout to avoid flicker\n setTimeout(resize)\n })\n resizeObserver.observe(element)\n } else {\n window.addEventListener('resize', resize, false)\n }\n\n function onDestroy () {\n if (resizeObserver) {\n resizeObserver.disconnect()\n } else {\n window.removeEventListener('resize', resize)\n }\n element.removeChild(canvas)\n }\n\n resize()\n\n return {\n canvas: canvas,\n onDestroy: onDestroy\n }\n}\n\nfunction createContext (canvas, contextAttributes) {\n function get (name) {\n try {\n return canvas.getContext(name, contextAttributes)\n } catch (e) {\n return null\n }\n }\n return (\n get('webgl') ||\n get('experimental-webgl') ||\n get('webgl-experimental')\n )\n}\n\nfunction isHTMLElement (obj) {\n return (\n typeof obj.nodeName === 'string' &&\n typeof obj.appendChild === 'function' &&\n typeof obj.getBoundingClientRect === 'function'\n )\n}\n\nfunction isWebGLContext (obj) {\n return (\n typeof obj.drawArrays === 'function' ||\n typeof obj.drawElements === 'function'\n )\n}\n\nfunction parseExtensions (input) {\n if (typeof input === 'string') {\n return input.split()\n }\n check$1(Array.isArray(input), 'invalid extension array')\n return input\n}\n\nfunction getElement (desc) {\n if (typeof desc === 'string') {\n check$1(typeof document !== 'undefined', 'not supported outside of DOM')\n return document.querySelector(desc)\n }\n return desc\n}\n\nfunction parseArgs (args_) {\n var args = args_ || {}\n var element, container, canvas, gl\n var contextAttributes = {}\n var extensions = []\n var optionalExtensions = []\n var pixelRatio = (typeof window === 'undefined' ? 1 : window.devicePixelRatio)\n var profile = false\n var onDone = function (err) {\n if (err) {\n check$1.raise(err)\n }\n }\n var onDestroy = function () {}\n if (typeof args === 'string') {\n check$1(\n typeof document !== 'undefined',\n 'selector queries only supported in DOM enviroments')\n element = document.querySelector(args)\n check$1(element, 'invalid query string for element')\n } else if (typeof args === 'object') {\n if (isHTMLElement(args)) {\n element = args\n } else if (isWebGLContext(args)) {\n gl = args\n canvas = gl.canvas\n } else {\n check$1.constructor(args)\n if ('gl' in args) {\n gl = args.gl\n } else if ('canvas' in args) {\n canvas = getElement(args.canvas)\n } else if ('container' in args) {\n container = getElement(args.container)\n }\n if ('attributes' in args) {\n contextAttributes = args.attributes\n check$1.type(contextAttributes, 'object', 'invalid context attributes')\n }\n if ('extensions' in args) {\n extensions = parseExtensions(args.extensions)\n }\n if ('optionalExtensions' in args) {\n optionalExtensions = parseExtensions(args.optionalExtensions)\n }\n if ('onDone' in args) {\n check$1.type(\n args.onDone, 'function',\n 'invalid or missing onDone callback')\n onDone = args.onDone\n }\n if ('profile' in args) {\n profile = !!args.profile\n }\n if ('pixelRatio' in args) {\n pixelRatio = +args.pixelRatio\n check$1(pixelRatio > 0, 'invalid pixel ratio')\n }\n }\n } else {\n check$1.raise('invalid arguments to regl')\n }\n\n if (element) {\n if (element.nodeName.toLowerCase() === 'canvas') {\n canvas = element\n } else {\n container = element\n }\n }\n\n if (!gl) {\n if (!canvas) {\n check$1(\n typeof document !== 'undefined',\n 'must manually specify webgl context outside of DOM environments')\n var result = createCanvas(container || document.body, onDone, pixelRatio)\n if (!result) {\n return null\n }\n canvas = result.canvas\n onDestroy = result.onDestroy\n }\n // workaround for chromium bug, premultiplied alpha value is platform dependent\n if (contextAttributes.premultipliedAlpha === undefined) contextAttributes.premultipliedAlpha = true\n gl = createContext(canvas, contextAttributes)\n }\n\n if (!gl) {\n onDestroy()\n onDone('webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org')\n return null\n }\n\n return {\n gl: gl,\n canvas: canvas,\n container: container,\n extensions: extensions,\n optionalExtensions: optionalExtensions,\n pixelRatio: pixelRatio,\n profile: profile,\n onDone: onDone,\n onDestroy: onDestroy\n }\n}\n\nfunction createExtensionCache (gl, config) {\n var extensions = {}\n\n function tryLoadExtension (name_) {\n check$1.type(name_, 'string', 'extension name must be string')\n var name = name_.toLowerCase()\n var ext\n try {\n ext = extensions[name] = gl.getExtension(name)\n } catch (e) {}\n return !!ext\n }\n\n for (var i = 0; i < config.extensions.length; ++i) {\n var name = config.extensions[i]\n if (!tryLoadExtension(name)) {\n config.onDestroy()\n config.onDone('\"' + name + '\" extension is not supported by the current WebGL context, try upgrading your system or a different browser')\n return null\n }\n }\n\n config.optionalExtensions.forEach(tryLoadExtension)\n\n return {\n extensions: extensions,\n restore: function () {\n Object.keys(extensions).forEach(function (name) {\n if (extensions[name] && !tryLoadExtension(name)) {\n throw new Error('(regl): error restoring extension ' + name)\n }\n })\n }\n }\n}\n\nfunction loop (n, f) {\n var result = Array(n)\n for (var i = 0; i < n; ++i) {\n result[i] = f(i)\n }\n return result\n}\n\nvar GL_BYTE$1 = 5120\nvar GL_UNSIGNED_BYTE$2 = 5121\nvar GL_SHORT$1 = 5122\nvar GL_UNSIGNED_SHORT$1 = 5123\nvar GL_INT$1 = 5124\nvar GL_UNSIGNED_INT$1 = 5125\nvar GL_FLOAT$2 = 5126\n\nfunction nextPow16 (v) {\n for (var i = 16; i <= (1 << 28); i *= 16) {\n if (v <= i) {\n return i\n }\n }\n return 0\n}\n\nfunction log2 (v) {\n var r, shift\n r = (v > 0xFFFF) << 4\n v >>>= r\n shift = (v > 0xFF) << 3\n v >>>= shift; r |= shift\n shift = (v > 0xF) << 2\n v >>>= shift; r |= shift\n shift = (v > 0x3) << 1\n v >>>= shift; r |= shift\n return r | (v >> 1)\n}\n\nfunction createPool () {\n var bufferPool = loop(8, function () {\n return []\n })\n\n function alloc (n) {\n var sz = nextPow16(n)\n var bin = bufferPool[log2(sz) >> 2]\n if (bin.length > 0) {\n return bin.pop()\n }\n return new ArrayBuffer(sz)\n }\n\n function free (buf) {\n bufferPool[log2(buf.byteLength) >> 2].push(buf)\n }\n\n function allocType (type, n) {\n var result = null\n switch (type) {\n case GL_BYTE$1:\n result = new Int8Array(alloc(n), 0, n)\n break\n case GL_UNSIGNED_BYTE$2:\n result = new Uint8Array(alloc(n), 0, n)\n break\n case GL_SHORT$1:\n result = new Int16Array(alloc(2 * n), 0, n)\n break\n case GL_UNSIGNED_SHORT$1:\n result = new Uint16Array(alloc(2 * n), 0, n)\n break\n case GL_INT$1:\n result = new Int32Array(alloc(4 * n), 0, n)\n break\n case GL_UNSIGNED_INT$1:\n result = new Uint32Array(alloc(4 * n), 0, n)\n break\n case GL_FLOAT$2:\n result = new Float32Array(alloc(4 * n), 0, n)\n break\n default:\n return null\n }\n if (result.length !== n) {\n return result.subarray(0, n)\n }\n return result\n }\n\n function freeType (array) {\n free(array.buffer)\n }\n\n return {\n alloc: alloc,\n free: free,\n allocType: allocType,\n freeType: freeType\n }\n}\n\nvar pool = createPool()\n\n// zero pool for initial zero data\npool.zero = createPool()\n\nvar GL_SUBPIXEL_BITS = 0x0D50\nvar GL_RED_BITS = 0x0D52\nvar GL_GREEN_BITS = 0x0D53\nvar GL_BLUE_BITS = 0x0D54\nvar GL_ALPHA_BITS = 0x0D55\nvar GL_DEPTH_BITS = 0x0D56\nvar GL_STENCIL_BITS = 0x0D57\n\nvar GL_ALIASED_POINT_SIZE_RANGE = 0x846D\nvar GL_ALIASED_LINE_WIDTH_RANGE = 0x846E\n\nvar GL_MAX_TEXTURE_SIZE = 0x0D33\nvar GL_MAX_VIEWPORT_DIMS = 0x0D3A\nvar GL_MAX_VERTEX_ATTRIBS = 0x8869\nvar GL_MAX_VERTEX_UNIFORM_VECTORS = 0x8DFB\nvar GL_MAX_VARYING_VECTORS = 0x8DFC\nvar GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8B4D\nvar GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8B4C\nvar GL_MAX_TEXTURE_IMAGE_UNITS = 0x8872\nvar GL_MAX_FRAGMENT_UNIFORM_VECTORS = 0x8DFD\nvar GL_MAX_CUBE_MAP_TEXTURE_SIZE = 0x851C\nvar GL_MAX_RENDERBUFFER_SIZE = 0x84E8\n\nvar GL_VENDOR = 0x1F00\nvar GL_RENDERER = 0x1F01\nvar GL_VERSION = 0x1F02\nvar GL_SHADING_LANGUAGE_VERSION = 0x8B8C\n\nvar GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF\n\nvar GL_MAX_COLOR_ATTACHMENTS_WEBGL = 0x8CDF\nvar GL_MAX_DRAW_BUFFERS_WEBGL = 0x8824\n\nvar GL_TEXTURE_2D = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP = 0x8513\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515\nvar GL_TEXTURE0 = 0x84C0\nvar GL_RGBA = 0x1908\nvar GL_FLOAT$1 = 0x1406\nvar GL_UNSIGNED_BYTE$1 = 0x1401\nvar GL_FRAMEBUFFER = 0x8D40\nvar GL_FRAMEBUFFER_COMPLETE = 0x8CD5\nvar GL_COLOR_ATTACHMENT0 = 0x8CE0\nvar GL_COLOR_BUFFER_BIT$1 = 0x4000\n\nvar wrapLimits = function (gl, extensions) {\n var maxAnisotropic = 1\n if (extensions.ext_texture_filter_anisotropic) {\n maxAnisotropic = gl.getParameter(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT)\n }\n\n var maxDrawbuffers = 1\n var maxColorAttachments = 1\n if (extensions.webgl_draw_buffers) {\n maxDrawbuffers = gl.getParameter(GL_MAX_DRAW_BUFFERS_WEBGL)\n maxColorAttachments = gl.getParameter(GL_MAX_COLOR_ATTACHMENTS_WEBGL)\n }\n\n // detect if reading float textures is available (Safari doesn't support)\n var readFloat = !!extensions.oes_texture_float\n if (readFloat) {\n var readFloatTexture = gl.createTexture()\n gl.bindTexture(GL_TEXTURE_2D, readFloatTexture)\n gl.texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_FLOAT$1, null)\n\n var fbo = gl.createFramebuffer()\n gl.bindFramebuffer(GL_FRAMEBUFFER, fbo)\n gl.framebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, readFloatTexture, 0)\n gl.bindTexture(GL_TEXTURE_2D, null)\n\n if (gl.checkFramebufferStatus(GL_FRAMEBUFFER) !== GL_FRAMEBUFFER_COMPLETE) readFloat = false\n\n else {\n gl.viewport(0, 0, 1, 1)\n gl.clearColor(1.0, 0.0, 0.0, 1.0)\n gl.clear(GL_COLOR_BUFFER_BIT$1)\n var pixels = pool.allocType(GL_FLOAT$1, 4)\n gl.readPixels(0, 0, 1, 1, GL_RGBA, GL_FLOAT$1, pixels)\n\n if (gl.getError()) readFloat = false\n else {\n gl.deleteFramebuffer(fbo)\n gl.deleteTexture(readFloatTexture)\n\n readFloat = pixels[0] === 1.0\n }\n\n pool.freeType(pixels)\n }\n }\n\n // detect non power of two cube textures support (IE doesn't support)\n var isIE = typeof navigator !== 'undefined' && (/MSIE/.test(navigator.userAgent) || /Trident\\//.test(navigator.appVersion) || /Edge/.test(navigator.userAgent))\n\n var npotTextureCube = true\n\n if (!isIE) {\n var cubeTexture = gl.createTexture()\n var data = pool.allocType(GL_UNSIGNED_BYTE$1, 36)\n gl.activeTexture(GL_TEXTURE0)\n gl.bindTexture(GL_TEXTURE_CUBE_MAP, cubeTexture)\n gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, GL_RGBA, 3, 3, 0, GL_RGBA, GL_UNSIGNED_BYTE$1, data)\n pool.freeType(data)\n gl.bindTexture(GL_TEXTURE_CUBE_MAP, null)\n gl.deleteTexture(cubeTexture)\n npotTextureCube = !gl.getError()\n }\n\n return {\n // drawing buffer bit depth\n colorBits: [\n gl.getParameter(GL_RED_BITS),\n gl.getParameter(GL_GREEN_BITS),\n gl.getParameter(GL_BLUE_BITS),\n gl.getParameter(GL_ALPHA_BITS)\n ],\n depthBits: gl.getParameter(GL_DEPTH_BITS),\n stencilBits: gl.getParameter(GL_STENCIL_BITS),\n subpixelBits: gl.getParameter(GL_SUBPIXEL_BITS),\n\n // supported extensions\n extensions: Object.keys(extensions).filter(function (ext) {\n return !!extensions[ext]\n }),\n\n // max aniso samples\n maxAnisotropic: maxAnisotropic,\n\n // max draw buffers\n maxDrawbuffers: maxDrawbuffers,\n maxColorAttachments: maxColorAttachments,\n\n // point and line size ranges\n pointSizeDims: gl.getParameter(GL_ALIASED_POINT_SIZE_RANGE),\n lineWidthDims: gl.getParameter(GL_ALIASED_LINE_WIDTH_RANGE),\n maxViewportDims: gl.getParameter(GL_MAX_VIEWPORT_DIMS),\n maxCombinedTextureUnits: gl.getParameter(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS),\n maxCubeMapSize: gl.getParameter(GL_MAX_CUBE_MAP_TEXTURE_SIZE),\n maxRenderbufferSize: gl.getParameter(GL_MAX_RENDERBUFFER_SIZE),\n maxTextureUnits: gl.getParameter(GL_MAX_TEXTURE_IMAGE_UNITS),\n maxTextureSize: gl.getParameter(GL_MAX_TEXTURE_SIZE),\n maxAttributes: gl.getParameter(GL_MAX_VERTEX_ATTRIBS),\n maxVertexUniforms: gl.getParameter(GL_MAX_VERTEX_UNIFORM_VECTORS),\n maxVertexTextureUnits: gl.getParameter(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS),\n maxVaryingVectors: gl.getParameter(GL_MAX_VARYING_VECTORS),\n maxFragmentUniforms: gl.getParameter(GL_MAX_FRAGMENT_UNIFORM_VECTORS),\n\n // vendor info\n glsl: gl.getParameter(GL_SHADING_LANGUAGE_VERSION),\n renderer: gl.getParameter(GL_RENDERER),\n vendor: gl.getParameter(GL_VENDOR),\n version: gl.getParameter(GL_VERSION),\n\n // quirks\n readFloat: readFloat,\n npotTextureCube: npotTextureCube\n }\n}\n\nfunction isNDArrayLike (obj) {\n return (\n !!obj &&\n typeof obj === 'object' &&\n Array.isArray(obj.shape) &&\n Array.isArray(obj.stride) &&\n typeof obj.offset === 'number' &&\n obj.shape.length === obj.stride.length &&\n (Array.isArray(obj.data) ||\n isTypedArray(obj.data)))\n}\n\nvar values = function (obj) {\n return Object.keys(obj).map(function (key) { return obj[key] })\n}\n\nvar flattenUtils = {\n shape: arrayShape$1,\n flatten: flattenArray\n};\n\nfunction flatten1D (array, nx, out) {\n for (var i = 0; i < nx; ++i) {\n out[i] = array[i]\n }\n}\n\nfunction flatten2D (array, nx, ny, out) {\n var ptr = 0\n for (var i = 0; i < nx; ++i) {\n var row = array[i]\n for (var j = 0; j < ny; ++j) {\n out[ptr++] = row[j]\n }\n }\n}\n\nfunction flatten3D (array, nx, ny, nz, out, ptr_) {\n var ptr = ptr_\n for (var i = 0; i < nx; ++i) {\n var row = array[i]\n for (var j = 0; j < ny; ++j) {\n var col = row[j]\n for (var k = 0; k < nz; ++k) {\n out[ptr++] = col[k]\n }\n }\n }\n}\n\nfunction flattenRec (array, shape, level, out, ptr) {\n var stride = 1\n for (var i = level + 1; i < shape.length; ++i) {\n stride *= shape[i]\n }\n var n = shape[level]\n if (shape.length - level === 4) {\n var nx = shape[level + 1]\n var ny = shape[level + 2]\n var nz = shape[level + 3]\n for (i = 0; i < n; ++i) {\n flatten3D(array[i], nx, ny, nz, out, ptr)\n ptr += stride\n }\n } else {\n for (i = 0; i < n; ++i) {\n flattenRec(array[i], shape, level + 1, out, ptr)\n ptr += stride\n }\n }\n}\n\nfunction flattenArray (array, shape, type, out_) {\n var sz = 1\n if (shape.length) {\n for (var i = 0; i < shape.length; ++i) {\n sz *= shape[i]\n }\n } else {\n sz = 0\n }\n var out = out_ || pool.allocType(type, sz)\n switch (shape.length) {\n case 0:\n break\n case 1:\n flatten1D(array, shape[0], out)\n break\n case 2:\n flatten2D(array, shape[0], shape[1], out)\n break\n case 3:\n flatten3D(array, shape[0], shape[1], shape[2], out, 0)\n break\n default:\n flattenRec(array, shape, 0, out, 0)\n }\n return out\n}\n\nfunction arrayShape$1 (array_) {\n var shape = []\n for (var array = array_; array.length; array = array[0]) {\n shape.push(array.length)\n }\n return shape\n}\n\nvar arrayTypes = {\n\t\"[object Int8Array]\": 5120,\n\t\"[object Int16Array]\": 5122,\n\t\"[object Int32Array]\": 5124,\n\t\"[object Uint8Array]\": 5121,\n\t\"[object Uint8ClampedArray]\": 5121,\n\t\"[object Uint16Array]\": 5123,\n\t\"[object Uint32Array]\": 5125,\n\t\"[object Float32Array]\": 5126,\n\t\"[object Float64Array]\": 5121,\n\t\"[object ArrayBuffer]\": 5121\n};\n\nvar int8 = 5120;\nvar int16 = 5122;\nvar int32 = 5124;\nvar uint8 = 5121;\nvar uint16 = 5123;\nvar uint32 = 5125;\nvar float = 5126;\nvar float32 = 5126;\nvar glTypes = {\n\tint8: int8,\n\tint16: int16,\n\tint32: int32,\n\tuint8: uint8,\n\tuint16: uint16,\n\tuint32: uint32,\n\tfloat: float,\n\tfloat32: float32\n};\n\nvar dynamic$1 = 35048;\nvar stream = 35040;\nvar usageTypes = {\n\tdynamic: dynamic$1,\n\tstream: stream,\n\t\"static\": 35044\n};\n\nvar arrayFlatten = flattenUtils.flatten\nvar arrayShape = flattenUtils.shape\n\nvar GL_STATIC_DRAW = 0x88E4\nvar GL_STREAM_DRAW = 0x88E0\n\nvar GL_UNSIGNED_BYTE$3 = 5121\nvar GL_FLOAT$3 = 5126\n\nvar DTYPES_SIZES = []\nDTYPES_SIZES[5120] = 1 // int8\nDTYPES_SIZES[5122] = 2 // int16\nDTYPES_SIZES[5124] = 4 // int32\nDTYPES_SIZES[5121] = 1 // uint8\nDTYPES_SIZES[5123] = 2 // uint16\nDTYPES_SIZES[5125] = 4 // uint32\nDTYPES_SIZES[5126] = 4 // float32\n\nfunction typedArrayCode (data) {\n return arrayTypes[Object.prototype.toString.call(data)] | 0\n}\n\nfunction copyArray (out, inp) {\n for (var i = 0; i < inp.length; ++i) {\n out[i] = inp[i]\n }\n}\n\nfunction transpose (\n result, data, shapeX, shapeY, strideX, strideY, offset) {\n var ptr = 0\n for (var i = 0; i < shapeX; ++i) {\n for (var j = 0; j < shapeY; ++j) {\n result[ptr++] = data[strideX * i + strideY * j + offset]\n }\n }\n}\n\nfunction wrapBufferState (gl, stats, config, destroyBuffer) {\n var bufferCount = 0\n var bufferSet = {}\n\n function REGLBuffer (type) {\n this.id = bufferCount++\n this.buffer = gl.createBuffer()\n this.type = type\n this.usage = GL_STATIC_DRAW\n this.byteLength = 0\n this.dimension = 1\n this.dtype = GL_UNSIGNED_BYTE$3\n\n this.persistentData = null\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n REGLBuffer.prototype.bind = function () {\n gl.bindBuffer(this.type, this.buffer)\n }\n\n REGLBuffer.prototype.destroy = function () {\n destroy(this)\n }\n\n var streamPool = []\n\n function createStream (type, data) {\n var buffer = streamPool.pop()\n if (!buffer) {\n buffer = new REGLBuffer(type)\n }\n buffer.bind()\n initBufferFromData(buffer, data, GL_STREAM_DRAW, 0, 1, false)\n return buffer\n }\n\n function destroyStream (stream$$1) {\n streamPool.push(stream$$1)\n }\n\n function initBufferFromTypedArray (buffer, data, usage) {\n buffer.byteLength = data.byteLength\n gl.bufferData(buffer.type, data, usage)\n }\n\n function initBufferFromData (buffer, data, usage, dtype, dimension, persist) {\n var shape\n buffer.usage = usage\n if (Array.isArray(data)) {\n buffer.dtype = dtype || GL_FLOAT$3\n if (data.length > 0) {\n var flatData\n if (Array.isArray(data[0])) {\n shape = arrayShape(data)\n var dim = 1\n for (var i = 1; i < shape.length; ++i) {\n dim *= shape[i]\n }\n buffer.dimension = dim\n flatData = arrayFlatten(data, shape, buffer.dtype)\n initBufferFromTypedArray(buffer, flatData, usage)\n if (persist) {\n buffer.persistentData = flatData\n } else {\n pool.freeType(flatData)\n }\n } else if (typeof data[0] === 'number') {\n buffer.dimension = dimension\n var typedData = pool.allocType(buffer.dtype, data.length)\n copyArray(typedData, data)\n initBufferFromTypedArray(buffer, typedData, usage)\n if (persist) {\n buffer.persistentData = typedData\n } else {\n pool.freeType(typedData)\n }\n } else if (isTypedArray(data[0])) {\n buffer.dimension = data[0].length\n buffer.dtype = dtype || typedArrayCode(data[0]) || GL_FLOAT$3\n flatData = arrayFlatten(\n data,\n [data.length, data[0].length],\n buffer.dtype)\n initBufferFromTypedArray(buffer, flatData, usage)\n if (persist) {\n buffer.persistentData = flatData\n } else {\n pool.freeType(flatData)\n }\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n } else if (isTypedArray(data)) {\n buffer.dtype = dtype || typedArrayCode(data)\n buffer.dimension = dimension\n initBufferFromTypedArray(buffer, data, usage)\n if (persist) {\n buffer.persistentData = new Uint8Array(new Uint8Array(data.buffer))\n }\n } else if (isNDArrayLike(data)) {\n shape = data.shape\n var stride = data.stride\n var offset = data.offset\n\n var shapeX = 0\n var shapeY = 0\n var strideX = 0\n var strideY = 0\n if (shape.length === 1) {\n shapeX = shape[0]\n shapeY = 1\n strideX = stride[0]\n strideY = 0\n } else if (shape.length === 2) {\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n } else {\n check$1.raise('invalid shape')\n }\n\n buffer.dtype = dtype || typedArrayCode(data.data) || GL_FLOAT$3\n buffer.dimension = shapeY\n\n var transposeData = pool.allocType(buffer.dtype, shapeX * shapeY)\n transpose(transposeData,\n data.data,\n shapeX, shapeY,\n strideX, strideY,\n offset)\n initBufferFromTypedArray(buffer, transposeData, usage)\n if (persist) {\n buffer.persistentData = transposeData\n } else {\n pool.freeType(transposeData)\n }\n } else if (data instanceof ArrayBuffer) {\n buffer.dtype = GL_UNSIGNED_BYTE$3\n buffer.dimension = dimension\n initBufferFromTypedArray(buffer, data, usage)\n if (persist) {\n buffer.persistentData = new Uint8Array(new Uint8Array(data))\n }\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n\n function destroy (buffer) {\n stats.bufferCount--\n\n // remove attribute link\n destroyBuffer(buffer)\n\n var handle = buffer.buffer\n check$1(handle, 'buffer must not be deleted already')\n gl.deleteBuffer(handle)\n buffer.buffer = null\n delete bufferSet[buffer.id]\n }\n\n function createBuffer (options, type, deferInit, persistent) {\n stats.bufferCount++\n\n var buffer = new REGLBuffer(type)\n bufferSet[buffer.id] = buffer\n\n function reglBuffer (options) {\n var usage = GL_STATIC_DRAW\n var data = null\n var byteLength = 0\n var dtype = 0\n var dimension = 1\n if (Array.isArray(options) ||\n isTypedArray(options) ||\n isNDArrayLike(options) ||\n options instanceof ArrayBuffer) {\n data = options\n } else if (typeof options === 'number') {\n byteLength = options | 0\n } else if (options) {\n check$1.type(\n options, 'object',\n 'buffer arguments must be an object, a number or an array')\n\n if ('data' in options) {\n check$1(\n data === null ||\n Array.isArray(data) ||\n isTypedArray(data) ||\n isNDArrayLike(data),\n 'invalid data for buffer')\n data = options.data\n }\n\n if ('usage' in options) {\n check$1.parameter(options.usage, usageTypes, 'invalid buffer usage')\n usage = usageTypes[options.usage]\n }\n\n if ('type' in options) {\n check$1.parameter(options.type, glTypes, 'invalid buffer type')\n dtype = glTypes[options.type]\n }\n\n if ('dimension' in options) {\n check$1.type(options.dimension, 'number', 'invalid dimension')\n dimension = options.dimension | 0\n }\n\n if ('length' in options) {\n check$1.nni(byteLength, 'buffer length must be a nonnegative integer')\n byteLength = options.length | 0\n }\n }\n\n buffer.bind()\n if (!data) {\n // #475\n if (byteLength) gl.bufferData(buffer.type, byteLength, usage)\n buffer.dtype = dtype || GL_UNSIGNED_BYTE$3\n buffer.usage = usage\n buffer.dimension = dimension\n buffer.byteLength = byteLength\n } else {\n initBufferFromData(buffer, data, usage, dtype, dimension, persistent)\n }\n\n if (config.profile) {\n buffer.stats.size = buffer.byteLength * DTYPES_SIZES[buffer.dtype]\n }\n\n return reglBuffer\n }\n\n function setSubData (data, offset) {\n check$1(offset + data.byteLength <= buffer.byteLength,\n 'invalid buffer subdata call, buffer is too small. ' + ' Can\\'t write data of size ' + data.byteLength + ' starting from offset ' + offset + ' to a buffer of size ' + buffer.byteLength)\n\n gl.bufferSubData(buffer.type, offset, data)\n }\n\n function subdata (data, offset_) {\n var offset = (offset_ || 0) | 0\n var shape\n buffer.bind()\n if (isTypedArray(data) || data instanceof ArrayBuffer) {\n setSubData(data, offset)\n } else if (Array.isArray(data)) {\n if (data.length > 0) {\n if (typeof data[0] === 'number') {\n var converted = pool.allocType(buffer.dtype, data.length)\n copyArray(converted, data)\n setSubData(converted, offset)\n pool.freeType(converted)\n } else if (Array.isArray(data[0]) || isTypedArray(data[0])) {\n shape = arrayShape(data)\n var flatData = arrayFlatten(data, shape, buffer.dtype)\n setSubData(flatData, offset)\n pool.freeType(flatData)\n } else {\n check$1.raise('invalid buffer data')\n }\n }\n } else if (isNDArrayLike(data)) {\n shape = data.shape\n var stride = data.stride\n\n var shapeX = 0\n var shapeY = 0\n var strideX = 0\n var strideY = 0\n if (shape.length === 1) {\n shapeX = shape[0]\n shapeY = 1\n strideX = stride[0]\n strideY = 0\n } else if (shape.length === 2) {\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n } else {\n check$1.raise('invalid shape')\n }\n var dtype = Array.isArray(data.data)\n ? buffer.dtype\n : typedArrayCode(data.data)\n\n var transposeData = pool.allocType(dtype, shapeX * shapeY)\n transpose(transposeData,\n data.data,\n shapeX, shapeY,\n strideX, strideY,\n data.offset)\n setSubData(transposeData, offset)\n pool.freeType(transposeData)\n } else {\n check$1.raise('invalid data for buffer subdata')\n }\n return reglBuffer\n }\n\n if (!deferInit) {\n reglBuffer(options)\n }\n\n reglBuffer._reglType = 'buffer'\n reglBuffer._buffer = buffer\n reglBuffer.subdata = subdata\n if (config.profile) {\n reglBuffer.stats = buffer.stats\n }\n reglBuffer.destroy = function () { destroy(buffer) }\n\n return reglBuffer\n }\n\n function restoreBuffers () {\n values(bufferSet).forEach(function (buffer) {\n buffer.buffer = gl.createBuffer()\n gl.bindBuffer(buffer.type, buffer.buffer)\n gl.bufferData(\n buffer.type, buffer.persistentData || buffer.byteLength, buffer.usage)\n })\n }\n\n if (config.profile) {\n stats.getTotalBufferSize = function () {\n var total = 0\n // TODO: Right now, the streams are not part of the total count.\n Object.keys(bufferSet).forEach(function (key) {\n total += bufferSet[key].stats.size\n })\n return total\n }\n }\n\n return {\n create: createBuffer,\n\n createStream: createStream,\n destroyStream: destroyStream,\n\n clear: function () {\n values(bufferSet).forEach(destroy)\n streamPool.forEach(destroy)\n },\n\n getBuffer: function (wrapper) {\n if (wrapper && wrapper._buffer instanceof REGLBuffer) {\n return wrapper._buffer\n }\n return null\n },\n\n restore: restoreBuffers,\n\n _initBuffer: initBufferFromData\n }\n}\n\nvar points = 0;\nvar point = 0;\nvar lines = 1;\nvar line = 1;\nvar triangles = 4;\nvar triangle = 4;\nvar primTypes = {\n\tpoints: points,\n\tpoint: point,\n\tlines: lines,\n\tline: line,\n\ttriangles: triangles,\n\ttriangle: triangle,\n\t\"line loop\": 2,\n\t\"line strip\": 3,\n\t\"triangle strip\": 5,\n\t\"triangle fan\": 6\n};\n\nvar GL_POINTS = 0\nvar GL_LINES = 1\nvar GL_TRIANGLES = 4\n\nvar GL_BYTE$2 = 5120\nvar GL_UNSIGNED_BYTE$4 = 5121\nvar GL_SHORT$2 = 5122\nvar GL_UNSIGNED_SHORT$2 = 5123\nvar GL_INT$2 = 5124\nvar GL_UNSIGNED_INT$2 = 5125\n\nvar GL_ELEMENT_ARRAY_BUFFER = 34963\n\nvar GL_STREAM_DRAW$1 = 0x88E0\nvar GL_STATIC_DRAW$1 = 0x88E4\n\nfunction wrapElementsState (gl, extensions, bufferState, stats) {\n var elementSet = {}\n var elementCount = 0\n\n var elementTypes = {\n 'uint8': GL_UNSIGNED_BYTE$4,\n 'uint16': GL_UNSIGNED_SHORT$2\n }\n\n if (extensions.oes_element_index_uint) {\n elementTypes.uint32 = GL_UNSIGNED_INT$2\n }\n\n function REGLElementBuffer (buffer) {\n this.id = elementCount++\n elementSet[this.id] = this\n this.buffer = buffer\n this.primType = GL_TRIANGLES\n this.vertCount = 0\n this.type = 0\n }\n\n REGLElementBuffer.prototype.bind = function () {\n this.buffer.bind()\n }\n\n var bufferPool = []\n\n function createElementStream (data) {\n var result = bufferPool.pop()\n if (!result) {\n result = new REGLElementBuffer(bufferState.create(\n null,\n GL_ELEMENT_ARRAY_BUFFER,\n true,\n false)._buffer)\n }\n initElements(result, data, GL_STREAM_DRAW$1, -1, -1, 0, 0)\n return result\n }\n\n function destroyElementStream (elements) {\n bufferPool.push(elements)\n }\n\n function initElements (\n elements,\n data,\n usage,\n prim,\n count,\n byteLength,\n type) {\n elements.buffer.bind()\n var dtype\n if (data) {\n var predictedType = type\n if (!type && (\n !isTypedArray(data) ||\n (isNDArrayLike(data) && !isTypedArray(data.data)))) {\n predictedType = extensions.oes_element_index_uint\n ? GL_UNSIGNED_INT$2\n : GL_UNSIGNED_SHORT$2\n }\n bufferState._initBuffer(\n elements.buffer,\n data,\n usage,\n predictedType,\n 3)\n } else {\n gl.bufferData(GL_ELEMENT_ARRAY_BUFFER, byteLength, usage)\n elements.buffer.dtype = dtype || GL_UNSIGNED_BYTE$4\n elements.buffer.usage = usage\n elements.buffer.dimension = 3\n elements.buffer.byteLength = byteLength\n }\n\n dtype = type\n if (!type) {\n switch (elements.buffer.dtype) {\n case GL_UNSIGNED_BYTE$4:\n case GL_BYTE$2:\n dtype = GL_UNSIGNED_BYTE$4\n break\n\n case GL_UNSIGNED_SHORT$2:\n case GL_SHORT$2:\n dtype = GL_UNSIGNED_SHORT$2\n break\n\n case GL_UNSIGNED_INT$2:\n case GL_INT$2:\n dtype = GL_UNSIGNED_INT$2\n break\n\n default:\n check$1.raise('unsupported type for element array')\n }\n elements.buffer.dtype = dtype\n }\n elements.type = dtype\n\n // Check oes_element_index_uint extension\n check$1(\n dtype !== GL_UNSIGNED_INT$2 ||\n !!extensions.oes_element_index_uint,\n '32 bit element buffers not supported, enable oes_element_index_uint first')\n\n // try to guess default primitive type and arguments\n var vertCount = count\n if (vertCount < 0) {\n vertCount = elements.buffer.byteLength\n if (dtype === GL_UNSIGNED_SHORT$2) {\n vertCount >>= 1\n } else if (dtype === GL_UNSIGNED_INT$2) {\n vertCount >>= 2\n }\n }\n elements.vertCount = vertCount\n\n // try to guess primitive type from cell dimension\n var primType = prim\n if (prim < 0) {\n primType = GL_TRIANGLES\n var dimension = elements.buffer.dimension\n if (dimension === 1) primType = GL_POINTS\n if (dimension === 2) primType = GL_LINES\n if (dimension === 3) primType = GL_TRIANGLES\n }\n elements.primType = primType\n }\n\n function destroyElements (elements) {\n stats.elementsCount--\n\n check$1(elements.buffer !== null, 'must not double destroy elements')\n delete elementSet[elements.id]\n elements.buffer.destroy()\n elements.buffer = null\n }\n\n function createElements (options, persistent) {\n var buffer = bufferState.create(null, GL_ELEMENT_ARRAY_BUFFER, true)\n var elements = new REGLElementBuffer(buffer._buffer)\n stats.elementsCount++\n\n function reglElements (options) {\n if (!options) {\n buffer()\n elements.primType = GL_TRIANGLES\n elements.vertCount = 0\n elements.type = GL_UNSIGNED_BYTE$4\n } else if (typeof options === 'number') {\n buffer(options)\n elements.primType = GL_TRIANGLES\n elements.vertCount = options | 0\n elements.type = GL_UNSIGNED_BYTE$4\n } else {\n var data = null\n var usage = GL_STATIC_DRAW$1\n var primType = -1\n var vertCount = -1\n var byteLength = 0\n var dtype = 0\n if (Array.isArray(options) ||\n isTypedArray(options) ||\n isNDArrayLike(options)) {\n data = options\n } else {\n check$1.type(options, 'object', 'invalid arguments for elements')\n if ('data' in options) {\n data = options.data\n check$1(\n Array.isArray(data) ||\n isTypedArray(data) ||\n isNDArrayLike(data),\n 'invalid data for element buffer')\n }\n if ('usage' in options) {\n check$1.parameter(\n options.usage,\n usageTypes,\n 'invalid element buffer usage')\n usage = usageTypes[options.usage]\n }\n if ('primitive' in options) {\n check$1.parameter(\n options.primitive,\n primTypes,\n 'invalid element buffer primitive')\n primType = primTypes[options.primitive]\n }\n if ('count' in options) {\n check$1(\n typeof options.count === 'number' && options.count >= 0,\n 'invalid vertex count for elements')\n vertCount = options.count | 0\n }\n if ('type' in options) {\n check$1.parameter(\n options.type,\n elementTypes,\n 'invalid buffer type')\n dtype = elementTypes[options.type]\n }\n if ('length' in options) {\n byteLength = options.length | 0\n } else {\n byteLength = vertCount\n if (dtype === GL_UNSIGNED_SHORT$2 || dtype === GL_SHORT$2) {\n byteLength *= 2\n } else if (dtype === GL_UNSIGNED_INT$2 || dtype === GL_INT$2) {\n byteLength *= 4\n }\n }\n }\n initElements(\n elements,\n data,\n usage,\n primType,\n vertCount,\n byteLength,\n dtype)\n }\n\n return reglElements\n }\n\n reglElements(options)\n\n reglElements._reglType = 'elements'\n reglElements._elements = elements\n reglElements.subdata = function (data, offset) {\n buffer.subdata(data, offset)\n return reglElements\n }\n reglElements.destroy = function () {\n destroyElements(elements)\n }\n\n return reglElements\n }\n\n return {\n create: createElements,\n createStream: createElementStream,\n destroyStream: destroyElementStream,\n getElements: function (elements) {\n if (typeof elements === 'function' &&\n elements._elements instanceof REGLElementBuffer) {\n return elements._elements\n }\n return null\n },\n clear: function () {\n values(elementSet).forEach(destroyElements)\n }\n }\n}\n\nvar FLOAT = new Float32Array(1)\nvar INT = new Uint32Array(FLOAT.buffer)\n\nvar GL_UNSIGNED_SHORT$4 = 5123\n\nfunction convertToHalfFloat (array) {\n var ushorts = pool.allocType(GL_UNSIGNED_SHORT$4, array.length)\n\n for (var i = 0; i < array.length; ++i) {\n if (isNaN(array[i])) {\n ushorts[i] = 0xffff\n } else if (array[i] === Infinity) {\n ushorts[i] = 0x7c00\n } else if (array[i] === -Infinity) {\n ushorts[i] = 0xfc00\n } else {\n FLOAT[0] = array[i]\n var x = INT[0]\n\n var sgn = (x >>> 31) << 15\n var exp = ((x << 1) >>> 24) - 127\n var frac = (x >> 13) & ((1 << 10) - 1)\n\n if (exp < -24) {\n // round non-representable denormals to 0\n ushorts[i] = sgn\n } else if (exp < -14) {\n // handle denormals\n var s = -14 - exp\n ushorts[i] = sgn + ((frac + (1 << 10)) >> s)\n } else if (exp > 15) {\n // round overflow to +/- Infinity\n ushorts[i] = sgn + 0x7c00\n } else {\n // otherwise convert directly\n ushorts[i] = sgn + ((exp + 15) << 10) + frac\n }\n }\n }\n\n return ushorts\n}\n\nfunction isArrayLike (s) {\n return Array.isArray(s) || isTypedArray(s)\n}\n\nvar isPow2$1 = function (v) {\n return !(v & (v - 1)) && (!!v)\n}\n\nvar GL_COMPRESSED_TEXTURE_FORMATS = 0x86A3\n\nvar GL_TEXTURE_2D$1 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP$1 = 0x8513\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 = 0x8515\n\nvar GL_RGBA$1 = 0x1908\nvar GL_ALPHA = 0x1906\nvar GL_RGB = 0x1907\nvar GL_LUMINANCE = 0x1909\nvar GL_LUMINANCE_ALPHA = 0x190A\n\nvar GL_RGBA4 = 0x8056\nvar GL_RGB5_A1 = 0x8057\nvar GL_RGB565 = 0x8D62\n\nvar GL_UNSIGNED_SHORT_4_4_4_4$1 = 0x8033\nvar GL_UNSIGNED_SHORT_5_5_5_1$1 = 0x8034\nvar GL_UNSIGNED_SHORT_5_6_5$1 = 0x8363\nvar GL_UNSIGNED_INT_24_8_WEBGL$1 = 0x84FA\n\nvar GL_DEPTH_COMPONENT = 0x1902\nvar GL_DEPTH_STENCIL = 0x84F9\n\nvar GL_SRGB_EXT = 0x8C40\nvar GL_SRGB_ALPHA_EXT = 0x8C42\n\nvar GL_HALF_FLOAT_OES$1 = 0x8D61\n\nvar GL_COMPRESSED_RGB_S3TC_DXT1_EXT = 0x83F0\nvar GL_COMPRESSED_RGBA_S3TC_DXT1_EXT = 0x83F1\nvar GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = 0x83F2\nvar GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = 0x83F3\n\nvar GL_COMPRESSED_RGB_ATC_WEBGL = 0x8C92\nvar GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL = 0x8C93\nvar GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL = 0x87EE\n\nvar GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG = 0x8C00\nvar GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG = 0x8C01\nvar GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02\nvar GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03\n\nvar GL_COMPRESSED_RGB_ETC1_WEBGL = 0x8D64\n\nvar GL_UNSIGNED_BYTE$5 = 0x1401\nvar GL_UNSIGNED_SHORT$3 = 0x1403\nvar GL_UNSIGNED_INT$3 = 0x1405\nvar GL_FLOAT$4 = 0x1406\n\nvar GL_TEXTURE_WRAP_S = 0x2802\nvar GL_TEXTURE_WRAP_T = 0x2803\n\nvar GL_REPEAT = 0x2901\nvar GL_CLAMP_TO_EDGE$1 = 0x812F\nvar GL_MIRRORED_REPEAT = 0x8370\n\nvar GL_TEXTURE_MAG_FILTER = 0x2800\nvar GL_TEXTURE_MIN_FILTER = 0x2801\n\nvar GL_NEAREST$1 = 0x2600\nvar GL_LINEAR = 0x2601\nvar GL_NEAREST_MIPMAP_NEAREST$1 = 0x2700\nvar GL_LINEAR_MIPMAP_NEAREST$1 = 0x2701\nvar GL_NEAREST_MIPMAP_LINEAR$1 = 0x2702\nvar GL_LINEAR_MIPMAP_LINEAR$1 = 0x2703\n\nvar GL_GENERATE_MIPMAP_HINT = 0x8192\nvar GL_DONT_CARE = 0x1100\nvar GL_FASTEST = 0x1101\nvar GL_NICEST = 0x1102\n\nvar GL_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE\n\nvar GL_UNPACK_ALIGNMENT = 0x0CF5\nvar GL_UNPACK_FLIP_Y_WEBGL = 0x9240\nvar GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241\nvar GL_UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243\n\nvar GL_BROWSER_DEFAULT_WEBGL = 0x9244\n\nvar GL_TEXTURE0$1 = 0x84C0\n\nvar MIPMAP_FILTERS = [\n GL_NEAREST_MIPMAP_NEAREST$1,\n GL_NEAREST_MIPMAP_LINEAR$1,\n GL_LINEAR_MIPMAP_NEAREST$1,\n GL_LINEAR_MIPMAP_LINEAR$1\n]\n\nvar CHANNELS_FORMAT = [\n 0,\n GL_LUMINANCE,\n GL_LUMINANCE_ALPHA,\n GL_RGB,\n GL_RGBA$1\n]\n\nvar FORMAT_CHANNELS = {}\nFORMAT_CHANNELS[GL_LUMINANCE] =\nFORMAT_CHANNELS[GL_ALPHA] =\nFORMAT_CHANNELS[GL_DEPTH_COMPONENT] = 1\nFORMAT_CHANNELS[GL_DEPTH_STENCIL] =\nFORMAT_CHANNELS[GL_LUMINANCE_ALPHA] = 2\nFORMAT_CHANNELS[GL_RGB] =\nFORMAT_CHANNELS[GL_SRGB_EXT] = 3\nFORMAT_CHANNELS[GL_RGBA$1] =\nFORMAT_CHANNELS[GL_SRGB_ALPHA_EXT] = 4\n\nfunction objectName (str) {\n return '[object ' + str + ']'\n}\n\nvar CANVAS_CLASS = objectName('HTMLCanvasElement')\nvar OFFSCREENCANVAS_CLASS = objectName('OffscreenCanvas')\nvar CONTEXT2D_CLASS = objectName('CanvasRenderingContext2D')\nvar BITMAP_CLASS = objectName('ImageBitmap')\nvar IMAGE_CLASS = objectName('HTMLImageElement')\nvar VIDEO_CLASS = objectName('HTMLVideoElement')\n\nvar PIXEL_CLASSES = Object.keys(arrayTypes).concat([\n CANVAS_CLASS,\n OFFSCREENCANVAS_CLASS,\n CONTEXT2D_CLASS,\n BITMAP_CLASS,\n IMAGE_CLASS,\n VIDEO_CLASS\n])\n\n// for every texture type, store\n// the size in bytes.\nvar TYPE_SIZES = []\nTYPE_SIZES[GL_UNSIGNED_BYTE$5] = 1\nTYPE_SIZES[GL_FLOAT$4] = 4\nTYPE_SIZES[GL_HALF_FLOAT_OES$1] = 2\n\nTYPE_SIZES[GL_UNSIGNED_SHORT$3] = 2\nTYPE_SIZES[GL_UNSIGNED_INT$3] = 4\n\nvar FORMAT_SIZES_SPECIAL = []\nFORMAT_SIZES_SPECIAL[GL_RGBA4] = 2\nFORMAT_SIZES_SPECIAL[GL_RGB5_A1] = 2\nFORMAT_SIZES_SPECIAL[GL_RGB565] = 2\nFORMAT_SIZES_SPECIAL[GL_DEPTH_STENCIL] = 4\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_S3TC_DXT1_EXT] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT1_EXT] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT3_EXT] = 1\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_S3TC_DXT5_EXT] = 1\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ATC_WEBGL] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL] = 1\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL] = 1\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG] = 0.25\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG] = 0.5\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG] = 0.25\n\nFORMAT_SIZES_SPECIAL[GL_COMPRESSED_RGB_ETC1_WEBGL] = 0.5\n\nfunction isNumericArray (arr) {\n return (\n Array.isArray(arr) &&\n (arr.length === 0 ||\n typeof arr[0] === 'number'))\n}\n\nfunction isRectArray (arr) {\n if (!Array.isArray(arr)) {\n return false\n }\n var width = arr.length\n if (width === 0 || !isArrayLike(arr[0])) {\n return false\n }\n return true\n}\n\nfunction classString (x) {\n return Object.prototype.toString.call(x)\n}\n\nfunction isCanvasElement (object) {\n return classString(object) === CANVAS_CLASS\n}\n\nfunction isOffscreenCanvas (object) {\n return classString(object) === OFFSCREENCANVAS_CLASS\n}\n\nfunction isContext2D (object) {\n return classString(object) === CONTEXT2D_CLASS\n}\n\nfunction isBitmap (object) {\n return classString(object) === BITMAP_CLASS\n}\n\nfunction isImageElement (object) {\n return classString(object) === IMAGE_CLASS\n}\n\nfunction isVideoElement (object) {\n return classString(object) === VIDEO_CLASS\n}\n\nfunction isPixelData (object) {\n if (!object) {\n return false\n }\n var className = classString(object)\n if (PIXEL_CLASSES.indexOf(className) >= 0) {\n return true\n }\n return (\n isNumericArray(object) ||\n isRectArray(object) ||\n isNDArrayLike(object))\n}\n\nfunction typedArrayCode$1 (data) {\n return arrayTypes[Object.prototype.toString.call(data)] | 0\n}\n\nfunction convertData (result, data) {\n var n = data.length\n switch (result.type) {\n case GL_UNSIGNED_BYTE$5:\n case GL_UNSIGNED_SHORT$3:\n case GL_UNSIGNED_INT$3:\n case GL_FLOAT$4:\n var converted = pool.allocType(result.type, n)\n converted.set(data)\n result.data = converted\n break\n\n case GL_HALF_FLOAT_OES$1:\n result.data = convertToHalfFloat(data)\n break\n\n default:\n check$1.raise('unsupported texture type, must specify a typed array')\n }\n}\n\nfunction preConvert (image, n) {\n return pool.allocType(\n image.type === GL_HALF_FLOAT_OES$1\n ? GL_FLOAT$4\n : image.type, n)\n}\n\nfunction postConvert (image, data) {\n if (image.type === GL_HALF_FLOAT_OES$1) {\n image.data = convertToHalfFloat(data)\n pool.freeType(data)\n } else {\n image.data = data\n }\n}\n\nfunction transposeData (image, array, strideX, strideY, strideC, offset) {\n var w = image.width\n var h = image.height\n var c = image.channels\n var n = w * h * c\n var data = preConvert(image, n)\n\n var p = 0\n for (var i = 0; i < h; ++i) {\n for (var j = 0; j < w; ++j) {\n for (var k = 0; k < c; ++k) {\n data[p++] = array[strideX * j + strideY * i + strideC * k + offset]\n }\n }\n }\n\n postConvert(image, data)\n}\n\nfunction getTextureSize (format, type, width, height, isMipmap, isCube) {\n var s\n if (typeof FORMAT_SIZES_SPECIAL[format] !== 'undefined') {\n // we have a special array for dealing with weird color formats such as RGB5A1\n s = FORMAT_SIZES_SPECIAL[format]\n } else {\n s = FORMAT_CHANNELS[format] * TYPE_SIZES[type]\n }\n\n if (isCube) {\n s *= 6\n }\n\n if (isMipmap) {\n // compute the total size of all the mipmaps.\n var total = 0\n\n var w = width\n while (w >= 1) {\n // we can only use mipmaps on a square image,\n // so we can simply use the width and ignore the height:\n total += s * w * w\n w /= 2\n }\n return total\n } else {\n return s * width * height\n }\n}\n\nfunction createTextureSet (\n gl, extensions, limits, reglPoll, contextState, stats, config) {\n // -------------------------------------------------------\n // Initialize constants and parameter tables here\n // -------------------------------------------------------\n var mipmapHint = {\n \"don't care\": GL_DONT_CARE,\n 'dont care': GL_DONT_CARE,\n 'nice': GL_NICEST,\n 'fast': GL_FASTEST\n }\n\n var wrapModes = {\n 'repeat': GL_REPEAT,\n 'clamp': GL_CLAMP_TO_EDGE$1,\n 'mirror': GL_MIRRORED_REPEAT\n }\n\n var magFilters = {\n 'nearest': GL_NEAREST$1,\n 'linear': GL_LINEAR\n }\n\n var minFilters = extend({\n 'mipmap': GL_LINEAR_MIPMAP_LINEAR$1,\n 'nearest mipmap nearest': GL_NEAREST_MIPMAP_NEAREST$1,\n 'linear mipmap nearest': GL_LINEAR_MIPMAP_NEAREST$1,\n 'nearest mipmap linear': GL_NEAREST_MIPMAP_LINEAR$1,\n 'linear mipmap linear': GL_LINEAR_MIPMAP_LINEAR$1\n }, magFilters)\n\n var colorSpace = {\n 'none': 0,\n 'browser': GL_BROWSER_DEFAULT_WEBGL\n }\n\n var textureTypes = {\n 'uint8': GL_UNSIGNED_BYTE$5,\n 'rgba4': GL_UNSIGNED_SHORT_4_4_4_4$1,\n 'rgb565': GL_UNSIGNED_SHORT_5_6_5$1,\n 'rgb5 a1': GL_UNSIGNED_SHORT_5_5_5_1$1\n }\n\n var textureFormats = {\n 'alpha': GL_ALPHA,\n 'luminance': GL_LUMINANCE,\n 'luminance alpha': GL_LUMINANCE_ALPHA,\n 'rgb': GL_RGB,\n 'rgba': GL_RGBA$1,\n 'rgba4': GL_RGBA4,\n 'rgb5 a1': GL_RGB5_A1,\n 'rgb565': GL_RGB565\n }\n\n var compressedTextureFormats = {}\n\n if (extensions.ext_srgb) {\n textureFormats.srgb = GL_SRGB_EXT\n textureFormats.srgba = GL_SRGB_ALPHA_EXT\n }\n\n if (extensions.oes_texture_float) {\n textureTypes.float32 = textureTypes.float = GL_FLOAT$4\n }\n\n if (extensions.oes_texture_half_float) {\n textureTypes['float16'] = textureTypes['half float'] = GL_HALF_FLOAT_OES$1\n }\n\n if (extensions.webgl_depth_texture) {\n extend(textureFormats, {\n 'depth': GL_DEPTH_COMPONENT,\n 'depth stencil': GL_DEPTH_STENCIL\n })\n\n extend(textureTypes, {\n 'uint16': GL_UNSIGNED_SHORT$3,\n 'uint32': GL_UNSIGNED_INT$3,\n 'depth stencil': GL_UNSIGNED_INT_24_8_WEBGL$1\n })\n }\n\n if (extensions.webgl_compressed_texture_s3tc) {\n extend(compressedTextureFormats, {\n 'rgb s3tc dxt1': GL_COMPRESSED_RGB_S3TC_DXT1_EXT,\n 'rgba s3tc dxt1': GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,\n 'rgba s3tc dxt3': GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,\n 'rgba s3tc dxt5': GL_COMPRESSED_RGBA_S3TC_DXT5_EXT\n })\n }\n\n if (extensions.webgl_compressed_texture_atc) {\n extend(compressedTextureFormats, {\n 'rgb atc': GL_COMPRESSED_RGB_ATC_WEBGL,\n 'rgba atc explicit alpha': GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL,\n 'rgba atc interpolated alpha': GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL\n })\n }\n\n if (extensions.webgl_compressed_texture_pvrtc) {\n extend(compressedTextureFormats, {\n 'rgb pvrtc 4bppv1': GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\n 'rgb pvrtc 2bppv1': GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\n 'rgba pvrtc 4bppv1': GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\n 'rgba pvrtc 2bppv1': GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\n })\n }\n\n if (extensions.webgl_compressed_texture_etc1) {\n compressedTextureFormats['rgb etc1'] = GL_COMPRESSED_RGB_ETC1_WEBGL\n }\n\n // Copy over all texture formats\n var supportedCompressedFormats = Array.prototype.slice.call(\n gl.getParameter(GL_COMPRESSED_TEXTURE_FORMATS))\n Object.keys(compressedTextureFormats).forEach(function (name) {\n var format = compressedTextureFormats[name]\n if (supportedCompressedFormats.indexOf(format) >= 0) {\n textureFormats[name] = format\n }\n })\n\n var supportedFormats = Object.keys(textureFormats)\n limits.textureFormats = supportedFormats\n\n // associate with every format string its\n // corresponding GL-value.\n var textureFormatsInvert = []\n Object.keys(textureFormats).forEach(function (key) {\n var val = textureFormats[key]\n textureFormatsInvert[val] = key\n })\n\n // associate with every type string its\n // corresponding GL-value.\n var textureTypesInvert = []\n Object.keys(textureTypes).forEach(function (key) {\n var val = textureTypes[key]\n textureTypesInvert[val] = key\n })\n\n var magFiltersInvert = []\n Object.keys(magFilters).forEach(function (key) {\n var val = magFilters[key]\n magFiltersInvert[val] = key\n })\n\n var minFiltersInvert = []\n Object.keys(minFilters).forEach(function (key) {\n var val = minFilters[key]\n minFiltersInvert[val] = key\n })\n\n var wrapModesInvert = []\n Object.keys(wrapModes).forEach(function (key) {\n var val = wrapModes[key]\n wrapModesInvert[val] = key\n })\n\n // colorFormats[] gives the format (channels) associated to an\n // internalformat\n var colorFormats = supportedFormats.reduce(function (color, key) {\n var glenum = textureFormats[key]\n if (glenum === GL_LUMINANCE ||\n glenum === GL_ALPHA ||\n glenum === GL_LUMINANCE ||\n glenum === GL_LUMINANCE_ALPHA ||\n glenum === GL_DEPTH_COMPONENT ||\n glenum === GL_DEPTH_STENCIL ||\n (extensions.ext_srgb &&\n (glenum === GL_SRGB_EXT ||\n glenum === GL_SRGB_ALPHA_EXT))) {\n color[glenum] = glenum\n } else if (glenum === GL_RGB5_A1 || key.indexOf('rgba') >= 0) {\n color[glenum] = GL_RGBA$1\n } else {\n color[glenum] = GL_RGB\n }\n return color\n }, {})\n\n function TexFlags () {\n // format info\n this.internalformat = GL_RGBA$1\n this.format = GL_RGBA$1\n this.type = GL_UNSIGNED_BYTE$5\n this.compressed = false\n\n // pixel storage\n this.premultiplyAlpha = false\n this.flipY = false\n this.unpackAlignment = 1\n this.colorSpace = GL_BROWSER_DEFAULT_WEBGL\n\n // shape info\n this.width = 0\n this.height = 0\n this.channels = 0\n }\n\n function copyFlags (result, other) {\n result.internalformat = other.internalformat\n result.format = other.format\n result.type = other.type\n result.compressed = other.compressed\n\n result.premultiplyAlpha = other.premultiplyAlpha\n result.flipY = other.flipY\n result.unpackAlignment = other.unpackAlignment\n result.colorSpace = other.colorSpace\n\n result.width = other.width\n result.height = other.height\n result.channels = other.channels\n }\n\n function parseFlags (flags, options) {\n if (typeof options !== 'object' || !options) {\n return\n }\n\n if ('premultiplyAlpha' in options) {\n check$1.type(options.premultiplyAlpha, 'boolean',\n 'invalid premultiplyAlpha')\n flags.premultiplyAlpha = options.premultiplyAlpha\n }\n\n if ('flipY' in options) {\n check$1.type(options.flipY, 'boolean',\n 'invalid texture flip')\n flags.flipY = options.flipY\n }\n\n if ('alignment' in options) {\n check$1.oneOf(options.alignment, [1, 2, 4, 8],\n 'invalid texture unpack alignment')\n flags.unpackAlignment = options.alignment\n }\n\n if ('colorSpace' in options) {\n check$1.parameter(options.colorSpace, colorSpace,\n 'invalid colorSpace')\n flags.colorSpace = colorSpace[options.colorSpace]\n }\n\n if ('type' in options) {\n var type = options.type\n check$1(extensions.oes_texture_float ||\n !(type === 'float' || type === 'float32'),\n 'you must enable the OES_texture_float extension in order to use floating point textures.')\n check$1(extensions.oes_texture_half_float ||\n !(type === 'half float' || type === 'float16'),\n 'you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures.')\n check$1(extensions.webgl_depth_texture ||\n !(type === 'uint16' || type === 'uint32' || type === 'depth stencil'),\n 'you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures.')\n check$1.parameter(type, textureTypes,\n 'invalid texture type')\n flags.type = textureTypes[type]\n }\n\n var w = flags.width\n var h = flags.height\n var c = flags.channels\n var hasChannels = false\n if ('shape' in options) {\n check$1(Array.isArray(options.shape) && options.shape.length >= 2,\n 'shape must be an array')\n w = options.shape[0]\n h = options.shape[1]\n if (options.shape.length === 3) {\n c = options.shape[2]\n check$1(c > 0 && c <= 4, 'invalid number of channels')\n hasChannels = true\n }\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid width')\n check$1(h >= 0 && h <= limits.maxTextureSize, 'invalid height')\n } else {\n if ('radius' in options) {\n w = h = options.radius\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid radius')\n }\n if ('width' in options) {\n w = options.width\n check$1(w >= 0 && w <= limits.maxTextureSize, 'invalid width')\n }\n if ('height' in options) {\n h = options.height\n check$1(h >= 0 && h <= limits.maxTextureSize, 'invalid height')\n }\n if ('channels' in options) {\n c = options.channels\n check$1(c > 0 && c <= 4, 'invalid number of channels')\n hasChannels = true\n }\n }\n flags.width = w | 0\n flags.height = h | 0\n flags.channels = c | 0\n\n var hasFormat = false\n if ('format' in options) {\n var formatStr = options.format\n check$1(extensions.webgl_depth_texture ||\n !(formatStr === 'depth' || formatStr === 'depth stencil'),\n 'you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures.')\n check$1.parameter(formatStr, textureFormats,\n 'invalid texture format')\n var internalformat = flags.internalformat = textureFormats[formatStr]\n flags.format = colorFormats[internalformat]\n if (formatStr in textureTypes) {\n if (!('type' in options)) {\n flags.type = textureTypes[formatStr]\n }\n }\n if (formatStr in compressedTextureFormats) {\n flags.compressed = true\n }\n hasFormat = true\n }\n\n // Reconcile channels and format\n if (!hasChannels && hasFormat) {\n flags.channels = FORMAT_CHANNELS[flags.format]\n } else if (hasChannels && !hasFormat) {\n if (flags.channels !== CHANNELS_FORMAT[flags.format]) {\n flags.format = flags.internalformat = CHANNELS_FORMAT[flags.channels]\n }\n } else if (hasFormat && hasChannels) {\n check$1(\n flags.channels === FORMAT_CHANNELS[flags.format],\n 'number of channels inconsistent with specified format')\n }\n }\n\n function setFlags (flags) {\n gl.pixelStorei(GL_UNPACK_FLIP_Y_WEBGL, flags.flipY)\n gl.pixelStorei(GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL, flags.premultiplyAlpha)\n gl.pixelStorei(GL_UNPACK_COLORSPACE_CONVERSION_WEBGL, flags.colorSpace)\n gl.pixelStorei(GL_UNPACK_ALIGNMENT, flags.unpackAlignment)\n }\n\n // -------------------------------------------------------\n // Tex image data\n // -------------------------------------------------------\n function TexImage () {\n TexFlags.call(this)\n\n this.xOffset = 0\n this.yOffset = 0\n\n // data\n this.data = null\n this.needsFree = false\n\n // html element\n this.element = null\n\n // copyTexImage info\n this.needsCopy = false\n }\n\n function parseImage (image, options) {\n var data = null\n if (isPixelData(options)) {\n data = options\n } else if (options) {\n check$1.type(options, 'object', 'invalid pixel data type')\n parseFlags(image, options)\n if ('x' in options) {\n image.xOffset = options.x | 0\n }\n if ('y' in options) {\n image.yOffset = options.y | 0\n }\n if (isPixelData(options.data)) {\n data = options.data\n }\n }\n\n check$1(\n !image.compressed ||\n data instanceof Uint8Array,\n 'compressed texture data must be stored in a uint8array')\n\n if (options.copy) {\n check$1(!data, 'can not specify copy and data field for the same texture')\n var viewW = contextState.viewportWidth\n var viewH = contextState.viewportHeight\n image.width = image.width || (viewW - image.xOffset)\n image.height = image.height || (viewH - image.yOffset)\n image.needsCopy = true\n check$1(image.xOffset >= 0 && image.xOffset < viewW &&\n image.yOffset >= 0 && image.yOffset < viewH &&\n image.width > 0 && image.width <= viewW &&\n image.height > 0 && image.height <= viewH,\n 'copy texture read out of bounds')\n } else if (!data) {\n image.width = image.width || 1\n image.height = image.height || 1\n image.channels = image.channels || 4\n } else if (isTypedArray(data)) {\n image.channels = image.channels || 4\n image.data = data\n if (!('type' in options) && image.type === GL_UNSIGNED_BYTE$5) {\n image.type = typedArrayCode$1(data)\n }\n } else if (isNumericArray(data)) {\n image.channels = image.channels || 4\n convertData(image, data)\n image.alignment = 1\n image.needsFree = true\n } else if (isNDArrayLike(data)) {\n var array = data.data\n if (!Array.isArray(array) && image.type === GL_UNSIGNED_BYTE$5) {\n image.type = typedArrayCode$1(array)\n }\n var shape = data.shape\n var stride = data.stride\n var shapeX, shapeY, shapeC, strideX, strideY, strideC\n if (shape.length === 3) {\n shapeC = shape[2]\n strideC = stride[2]\n } else {\n check$1(shape.length === 2, 'invalid ndarray pixel data, must be 2 or 3D')\n shapeC = 1\n strideC = 1\n }\n shapeX = shape[0]\n shapeY = shape[1]\n strideX = stride[0]\n strideY = stride[1]\n image.alignment = 1\n image.width = shapeX\n image.height = shapeY\n image.channels = shapeC\n image.format = image.internalformat = CHANNELS_FORMAT[shapeC]\n image.needsFree = true\n transposeData(image, array, strideX, strideY, strideC, data.offset)\n } else if (isCanvasElement(data) || isOffscreenCanvas(data) || isContext2D(data)) {\n if (isCanvasElement(data) || isOffscreenCanvas(data)) {\n image.element = data\n } else {\n image.element = data.canvas\n }\n image.width = image.element.width\n image.height = image.element.height\n image.channels = 4\n } else if (isBitmap(data)) {\n image.element = data\n image.width = data.width\n image.height = data.height\n image.channels = 4\n } else if (isImageElement(data)) {\n image.element = data\n image.width = data.naturalWidth\n image.height = data.naturalHeight\n image.channels = 4\n } else if (isVideoElement(data)) {\n image.element = data\n image.width = data.videoWidth\n image.height = data.videoHeight\n image.channels = 4\n } else if (isRectArray(data)) {\n var w = image.width || data[0].length\n var h = image.height || data.length\n var c = image.channels\n if (isArrayLike(data[0][0])) {\n c = c || data[0][0].length\n } else {\n c = c || 1\n }\n var arrayShape = flattenUtils.shape(data)\n var n = 1\n for (var dd = 0; dd < arrayShape.length; ++dd) {\n n *= arrayShape[dd]\n }\n var allocData = preConvert(image, n)\n flattenUtils.flatten(data, arrayShape, '', allocData)\n postConvert(image, allocData)\n image.alignment = 1\n image.width = w\n image.height = h\n image.channels = c\n image.format = image.internalformat = CHANNELS_FORMAT[c]\n image.needsFree = true\n }\n\n if (image.type === GL_FLOAT$4) {\n check$1(limits.extensions.indexOf('oes_texture_float') >= 0,\n 'oes_texture_float extension not enabled')\n } else if (image.type === GL_HALF_FLOAT_OES$1) {\n check$1(limits.extensions.indexOf('oes_texture_half_float') >= 0,\n 'oes_texture_half_float extension not enabled')\n }\n\n // do compressed texture validation here.\n }\n\n function setImage (info, target, miplevel) {\n var element = info.element\n var data = info.data\n var internalformat = info.internalformat\n var format = info.format\n var type = info.type\n var width = info.width\n var height = info.height\n\n setFlags(info)\n\n if (element) {\n gl.texImage2D(target, miplevel, format, format, type, element)\n } else if (info.compressed) {\n gl.compressedTexImage2D(target, miplevel, internalformat, width, height, 0, data)\n } else if (info.needsCopy) {\n reglPoll()\n gl.copyTexImage2D(\n target, miplevel, format, info.xOffset, info.yOffset, width, height, 0)\n } else {\n gl.texImage2D(target, miplevel, format, width, height, 0, format, type, data || null)\n }\n }\n\n function setSubImage (info, target, x, y, miplevel) {\n var element = info.element\n var data = info.data\n var internalformat = info.internalformat\n var format = info.format\n var type = info.type\n var width = info.width\n var height = info.height\n\n setFlags(info)\n\n if (element) {\n gl.texSubImage2D(\n target, miplevel, x, y, format, type, element)\n } else if (info.compressed) {\n gl.compressedTexSubImage2D(\n target, miplevel, x, y, internalformat, width, height, data)\n } else if (info.needsCopy) {\n reglPoll()\n gl.copyTexSubImage2D(\n target, miplevel, x, y, info.xOffset, info.yOffset, width, height)\n } else {\n gl.texSubImage2D(\n target, miplevel, x, y, width, height, format, type, data)\n }\n }\n\n // texImage pool\n var imagePool = []\n\n function allocImage () {\n return imagePool.pop() || new TexImage()\n }\n\n function freeImage (image) {\n if (image.needsFree) {\n pool.freeType(image.data)\n }\n TexImage.call(image)\n imagePool.push(image)\n }\n\n // -------------------------------------------------------\n // Mip map\n // -------------------------------------------------------\n function MipMap () {\n TexFlags.call(this)\n\n this.genMipmaps = false\n this.mipmapHint = GL_DONT_CARE\n this.mipmask = 0\n this.images = Array(16)\n }\n\n function parseMipMapFromShape (mipmap, width, height) {\n var img = mipmap.images[0] = allocImage()\n mipmap.mipmask = 1\n img.width = mipmap.width = width\n img.height = mipmap.height = height\n img.channels = mipmap.channels = 4\n }\n\n function parseMipMapFromObject (mipmap, options) {\n var imgData = null\n if (isPixelData(options)) {\n imgData = mipmap.images[0] = allocImage()\n copyFlags(imgData, mipmap)\n parseImage(imgData, options)\n mipmap.mipmask = 1\n } else {\n parseFlags(mipmap, options)\n if (Array.isArray(options.mipmap)) {\n var mipData = options.mipmap\n for (var i = 0; i < mipData.length; ++i) {\n imgData = mipmap.images[i] = allocImage()\n copyFlags(imgData, mipmap)\n imgData.width >>= i\n imgData.height >>= i\n parseImage(imgData, mipData[i])\n mipmap.mipmask |= (1 << i)\n }\n } else {\n imgData = mipmap.images[0] = allocImage()\n copyFlags(imgData, mipmap)\n parseImage(imgData, options)\n mipmap.mipmask = 1\n }\n }\n copyFlags(mipmap, mipmap.images[0])\n\n // For textures of the compressed format WEBGL_compressed_texture_s3tc\n // we must have that\n //\n // \"When level equals zero width and height must be a multiple of 4.\n // When level is greater than 0 width and height must be 0, 1, 2 or a multiple of 4. \"\n //\n // but we do not yet support having multiple mipmap levels for compressed textures,\n // so we only test for level zero.\n\n if (\n mipmap.compressed &&\n (\n mipmap.internalformat === GL_COMPRESSED_RGB_S3TC_DXT1_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT1_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT3_EXT ||\n mipmap.internalformat === GL_COMPRESSED_RGBA_S3TC_DXT5_EXT\n )\n ) {\n check$1(mipmap.width % 4 === 0 && mipmap.height % 4 === 0,\n 'for compressed texture formats, mipmap level 0 must have width and height that are a multiple of 4')\n }\n }\n\n function setMipMap (mipmap, target) {\n var images = mipmap.images\n for (var i = 0; i < images.length; ++i) {\n if (!images[i]) {\n return\n }\n setImage(images[i], target, i)\n }\n }\n\n var mipPool = []\n\n function allocMipMap () {\n var result = mipPool.pop() || new MipMap()\n TexFlags.call(result)\n result.mipmask = 0\n for (var i = 0; i < 16; ++i) {\n result.images[i] = null\n }\n return result\n }\n\n function freeMipMap (mipmap) {\n var images = mipmap.images\n for (var i = 0; i < images.length; ++i) {\n if (images[i]) {\n freeImage(images[i])\n }\n images[i] = null\n }\n mipPool.push(mipmap)\n }\n\n // -------------------------------------------------------\n // Tex info\n // -------------------------------------------------------\n function TexInfo () {\n this.minFilter = GL_NEAREST$1\n this.magFilter = GL_NEAREST$1\n\n this.wrapS = GL_CLAMP_TO_EDGE$1\n this.wrapT = GL_CLAMP_TO_EDGE$1\n\n this.anisotropic = 1\n\n this.genMipmaps = false\n this.mipmapHint = GL_DONT_CARE\n }\n\n function parseTexInfo (info, options) {\n if ('min' in options) {\n var minFilter = options.min\n check$1.parameter(minFilter, minFilters)\n info.minFilter = minFilters[minFilter]\n if (MIPMAP_FILTERS.indexOf(info.minFilter) >= 0 && !('faces' in options)) {\n info.genMipmaps = true\n }\n }\n\n if ('mag' in options) {\n var magFilter = options.mag\n check$1.parameter(magFilter, magFilters)\n info.magFilter = magFilters[magFilter]\n }\n\n var wrapS = info.wrapS\n var wrapT = info.wrapT\n if ('wrap' in options) {\n var wrap = options.wrap\n if (typeof wrap === 'string') {\n check$1.parameter(wrap, wrapModes)\n wrapS = wrapT = wrapModes[wrap]\n } else if (Array.isArray(wrap)) {\n check$1.parameter(wrap[0], wrapModes)\n check$1.parameter(wrap[1], wrapModes)\n wrapS = wrapModes[wrap[0]]\n wrapT = wrapModes[wrap[1]]\n }\n } else {\n if ('wrapS' in options) {\n var optWrapS = options.wrapS\n check$1.parameter(optWrapS, wrapModes)\n wrapS = wrapModes[optWrapS]\n }\n if ('wrapT' in options) {\n var optWrapT = options.wrapT\n check$1.parameter(optWrapT, wrapModes)\n wrapT = wrapModes[optWrapT]\n }\n }\n info.wrapS = wrapS\n info.wrapT = wrapT\n\n if ('anisotropic' in options) {\n var anisotropic = options.anisotropic\n check$1(typeof anisotropic === 'number' &&\n anisotropic >= 1 && anisotropic <= limits.maxAnisotropic,\n 'aniso samples must be between 1 and ')\n info.anisotropic = options.anisotropic\n }\n\n if ('mipmap' in options) {\n var hasMipMap = false\n switch (typeof options.mipmap) {\n case 'string':\n check$1.parameter(options.mipmap, mipmapHint,\n 'invalid mipmap hint')\n info.mipmapHint = mipmapHint[options.mipmap]\n info.genMipmaps = true\n hasMipMap = true\n break\n\n case 'boolean':\n hasMipMap = info.genMipmaps = options.mipmap\n break\n\n case 'object':\n check$1(Array.isArray(options.mipmap), 'invalid mipmap type')\n info.genMipmaps = false\n hasMipMap = true\n break\n\n default:\n check$1.raise('invalid mipmap type')\n }\n if (hasMipMap && !('min' in options)) {\n info.minFilter = GL_NEAREST_MIPMAP_NEAREST$1\n }\n }\n }\n\n function setTexInfo (info, target) {\n gl.texParameteri(target, GL_TEXTURE_MIN_FILTER, info.minFilter)\n gl.texParameteri(target, GL_TEXTURE_MAG_FILTER, info.magFilter)\n gl.texParameteri(target, GL_TEXTURE_WRAP_S, info.wrapS)\n gl.texParameteri(target, GL_TEXTURE_WRAP_T, info.wrapT)\n if (extensions.ext_texture_filter_anisotropic) {\n gl.texParameteri(target, GL_TEXTURE_MAX_ANISOTROPY_EXT, info.anisotropic)\n }\n if (info.genMipmaps) {\n gl.hint(GL_GENERATE_MIPMAP_HINT, info.mipmapHint)\n gl.generateMipmap(target)\n }\n }\n\n // -------------------------------------------------------\n // Full texture object\n // -------------------------------------------------------\n var textureCount = 0\n var textureSet = {}\n var numTexUnits = limits.maxTextureUnits\n var textureUnits = Array(numTexUnits).map(function () {\n return null\n })\n\n function REGLTexture (target) {\n TexFlags.call(this)\n this.mipmask = 0\n this.internalformat = GL_RGBA$1\n\n this.id = textureCount++\n\n this.refCount = 1\n\n this.target = target\n this.texture = gl.createTexture()\n\n this.unit = -1\n this.bindCount = 0\n\n this.texInfo = new TexInfo()\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n function tempBind (texture) {\n gl.activeTexture(GL_TEXTURE0$1)\n gl.bindTexture(texture.target, texture.texture)\n }\n\n function tempRestore () {\n var prev = textureUnits[0]\n if (prev) {\n gl.bindTexture(prev.target, prev.texture)\n } else {\n gl.bindTexture(GL_TEXTURE_2D$1, null)\n }\n }\n\n function destroy (texture) {\n var handle = texture.texture\n check$1(handle, 'must not double destroy texture')\n var unit = texture.unit\n var target = texture.target\n if (unit >= 0) {\n gl.activeTexture(GL_TEXTURE0$1 + unit)\n gl.bindTexture(target, null)\n textureUnits[unit] = null\n }\n gl.deleteTexture(handle)\n texture.texture = null\n texture.params = null\n texture.pixels = null\n texture.refCount = 0\n delete textureSet[texture.id]\n stats.textureCount--\n }\n\n extend(REGLTexture.prototype, {\n bind: function () {\n var texture = this\n texture.bindCount += 1\n var unit = texture.unit\n if (unit < 0) {\n for (var i = 0; i < numTexUnits; ++i) {\n var other = textureUnits[i]\n if (other) {\n if (other.bindCount > 0) {\n continue\n }\n other.unit = -1\n }\n textureUnits[i] = texture\n unit = i\n break\n }\n if (unit >= numTexUnits) {\n check$1.raise('insufficient number of texture units')\n }\n if (config.profile && stats.maxTextureUnits < (unit + 1)) {\n stats.maxTextureUnits = unit + 1 // +1, since the units are zero-based\n }\n texture.unit = unit\n gl.activeTexture(GL_TEXTURE0$1 + unit)\n gl.bindTexture(texture.target, texture.texture)\n }\n return unit\n },\n\n unbind: function () {\n this.bindCount -= 1\n },\n\n decRef: function () {\n if (--this.refCount <= 0) {\n destroy(this)\n }\n }\n })\n\n function createTexture2D (a, b) {\n var texture = new REGLTexture(GL_TEXTURE_2D$1)\n textureSet[texture.id] = texture\n stats.textureCount++\n\n function reglTexture2D (a, b) {\n var texInfo = texture.texInfo\n TexInfo.call(texInfo)\n var mipData = allocMipMap()\n\n if (typeof a === 'number') {\n if (typeof b === 'number') {\n parseMipMapFromShape(mipData, a | 0, b | 0)\n } else {\n parseMipMapFromShape(mipData, a | 0, a | 0)\n }\n } else if (a) {\n check$1.type(a, 'object', 'invalid arguments to regl.texture')\n parseTexInfo(texInfo, a)\n parseMipMapFromObject(mipData, a)\n } else {\n // empty textures get assigned a default shape of 1x1\n parseMipMapFromShape(mipData, 1, 1)\n }\n\n if (texInfo.genMipmaps) {\n mipData.mipmask = (mipData.width << 1) - 1\n }\n texture.mipmask = mipData.mipmask\n\n copyFlags(texture, mipData)\n\n check$1.texture2D(texInfo, mipData, limits)\n texture.internalformat = mipData.internalformat\n\n reglTexture2D.width = mipData.width\n reglTexture2D.height = mipData.height\n\n tempBind(texture)\n setMipMap(mipData, GL_TEXTURE_2D$1)\n setTexInfo(texInfo, GL_TEXTURE_2D$1)\n tempRestore()\n\n freeMipMap(mipData)\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n mipData.width,\n mipData.height,\n texInfo.genMipmaps,\n false)\n }\n reglTexture2D.format = textureFormatsInvert[texture.internalformat]\n reglTexture2D.type = textureTypesInvert[texture.type]\n\n reglTexture2D.mag = magFiltersInvert[texInfo.magFilter]\n reglTexture2D.min = minFiltersInvert[texInfo.minFilter]\n\n reglTexture2D.wrapS = wrapModesInvert[texInfo.wrapS]\n reglTexture2D.wrapT = wrapModesInvert[texInfo.wrapT]\n\n return reglTexture2D\n }\n\n function subimage (image, x_, y_, level_) {\n check$1(!!image, 'must specify image data')\n\n var x = x_ | 0\n var y = y_ | 0\n var level = level_ | 0\n\n var imageData = allocImage()\n copyFlags(imageData, texture)\n imageData.width = 0\n imageData.height = 0\n parseImage(imageData, image)\n imageData.width = imageData.width || ((texture.width >> level) - x)\n imageData.height = imageData.height || ((texture.height >> level) - y)\n\n check$1(\n texture.type === imageData.type &&\n texture.format === imageData.format &&\n texture.internalformat === imageData.internalformat,\n 'incompatible format for texture.subimage')\n check$1(\n x >= 0 && y >= 0 &&\n x + imageData.width <= texture.width &&\n y + imageData.height <= texture.height,\n 'texture.subimage write out of bounds')\n check$1(\n texture.mipmask & (1 << level),\n 'missing mipmap data')\n check$1(\n imageData.data || imageData.element || imageData.needsCopy,\n 'missing image data')\n\n tempBind(texture)\n setSubImage(imageData, GL_TEXTURE_2D$1, x, y, level)\n tempRestore()\n\n freeImage(imageData)\n\n return reglTexture2D\n }\n\n function resize (w_, h_) {\n var w = w_ | 0\n var h = (h_ | 0) || w\n if (w === texture.width && h === texture.height) {\n return reglTexture2D\n }\n\n reglTexture2D.width = texture.width = w\n reglTexture2D.height = texture.height = h\n\n tempBind(texture)\n\n for (var i = 0; texture.mipmask >> i; ++i) {\n var _w = w >> i\n var _h = h >> i\n if (!_w || !_h) break\n gl.texImage2D(\n GL_TEXTURE_2D$1,\n i,\n texture.format,\n _w,\n _h,\n 0,\n texture.format,\n texture.type,\n null)\n }\n tempRestore()\n\n // also, recompute the texture size.\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n w,\n h,\n false,\n false)\n }\n\n return reglTexture2D\n }\n\n reglTexture2D(a, b)\n\n reglTexture2D.subimage = subimage\n reglTexture2D.resize = resize\n reglTexture2D._reglType = 'texture2d'\n reglTexture2D._texture = texture\n if (config.profile) {\n reglTexture2D.stats = texture.stats\n }\n reglTexture2D.destroy = function () {\n texture.decRef()\n }\n\n return reglTexture2D\n }\n\n function createTextureCube (a0, a1, a2, a3, a4, a5) {\n var texture = new REGLTexture(GL_TEXTURE_CUBE_MAP$1)\n textureSet[texture.id] = texture\n stats.cubeCount++\n\n var faces = new Array(6)\n\n function reglTextureCube (a0, a1, a2, a3, a4, a5) {\n var i\n var texInfo = texture.texInfo\n TexInfo.call(texInfo)\n for (i = 0; i < 6; ++i) {\n faces[i] = allocMipMap()\n }\n\n if (typeof a0 === 'number' || !a0) {\n var s = (a0 | 0) || 1\n for (i = 0; i < 6; ++i) {\n parseMipMapFromShape(faces[i], s, s)\n }\n } else if (typeof a0 === 'object') {\n if (a1) {\n parseMipMapFromObject(faces[0], a0)\n parseMipMapFromObject(faces[1], a1)\n parseMipMapFromObject(faces[2], a2)\n parseMipMapFromObject(faces[3], a3)\n parseMipMapFromObject(faces[4], a4)\n parseMipMapFromObject(faces[5], a5)\n } else {\n parseTexInfo(texInfo, a0)\n parseFlags(texture, a0)\n if ('faces' in a0) {\n var faceInput = a0.faces\n check$1(Array.isArray(faceInput) && faceInput.length === 6,\n 'cube faces must be a length 6 array')\n for (i = 0; i < 6; ++i) {\n check$1(typeof faceInput[i] === 'object' && !!faceInput[i],\n 'invalid input for cube map face')\n copyFlags(faces[i], texture)\n parseMipMapFromObject(faces[i], faceInput[i])\n }\n } else {\n for (i = 0; i < 6; ++i) {\n parseMipMapFromObject(faces[i], a0)\n }\n }\n }\n } else {\n check$1.raise('invalid arguments to cube map')\n }\n\n copyFlags(texture, faces[0])\n check$1.optional(function () {\n if (!limits.npotTextureCube) {\n check$1(isPow2$1(texture.width) && isPow2$1(texture.height), 'your browser does not support non power or two texture dimensions')\n }\n })\n\n if (texInfo.genMipmaps) {\n texture.mipmask = (faces[0].width << 1) - 1\n } else {\n texture.mipmask = faces[0].mipmask\n }\n\n check$1.textureCube(texture, texInfo, faces, limits)\n texture.internalformat = faces[0].internalformat\n\n reglTextureCube.width = faces[0].width\n reglTextureCube.height = faces[0].height\n\n tempBind(texture)\n for (i = 0; i < 6; ++i) {\n setMipMap(faces[i], GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i)\n }\n setTexInfo(texInfo, GL_TEXTURE_CUBE_MAP$1)\n tempRestore()\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n reglTextureCube.width,\n reglTextureCube.height,\n texInfo.genMipmaps,\n true)\n }\n\n reglTextureCube.format = textureFormatsInvert[texture.internalformat]\n reglTextureCube.type = textureTypesInvert[texture.type]\n\n reglTextureCube.mag = magFiltersInvert[texInfo.magFilter]\n reglTextureCube.min = minFiltersInvert[texInfo.minFilter]\n\n reglTextureCube.wrapS = wrapModesInvert[texInfo.wrapS]\n reglTextureCube.wrapT = wrapModesInvert[texInfo.wrapT]\n\n for (i = 0; i < 6; ++i) {\n freeMipMap(faces[i])\n }\n\n return reglTextureCube\n }\n\n function subimage (face, image, x_, y_, level_) {\n check$1(!!image, 'must specify image data')\n check$1(typeof face === 'number' && face === (face | 0) &&\n face >= 0 && face < 6, 'invalid face')\n\n var x = x_ | 0\n var y = y_ | 0\n var level = level_ | 0\n\n var imageData = allocImage()\n copyFlags(imageData, texture)\n imageData.width = 0\n imageData.height = 0\n parseImage(imageData, image)\n imageData.width = imageData.width || ((texture.width >> level) - x)\n imageData.height = imageData.height || ((texture.height >> level) - y)\n\n check$1(\n texture.type === imageData.type &&\n texture.format === imageData.format &&\n texture.internalformat === imageData.internalformat,\n 'incompatible format for texture.subimage')\n check$1(\n x >= 0 && y >= 0 &&\n x + imageData.width <= texture.width &&\n y + imageData.height <= texture.height,\n 'texture.subimage write out of bounds')\n check$1(\n texture.mipmask & (1 << level),\n 'missing mipmap data')\n check$1(\n imageData.data || imageData.element || imageData.needsCopy,\n 'missing image data')\n\n tempBind(texture)\n setSubImage(imageData, GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + face, x, y, level)\n tempRestore()\n\n freeImage(imageData)\n\n return reglTextureCube\n }\n\n function resize (radius_) {\n var radius = radius_ | 0\n if (radius === texture.width) {\n return\n }\n\n reglTextureCube.width = texture.width = radius\n reglTextureCube.height = texture.height = radius\n\n tempBind(texture)\n for (var i = 0; i < 6; ++i) {\n for (var j = 0; texture.mipmask >> j; ++j) {\n gl.texImage2D(\n GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + i,\n j,\n texture.format,\n radius >> j,\n radius >> j,\n 0,\n texture.format,\n texture.type,\n null)\n }\n }\n tempRestore()\n\n if (config.profile) {\n texture.stats.size = getTextureSize(\n texture.internalformat,\n texture.type,\n reglTextureCube.width,\n reglTextureCube.height,\n false,\n true)\n }\n\n return reglTextureCube\n }\n\n reglTextureCube(a0, a1, a2, a3, a4, a5)\n\n reglTextureCube.subimage = subimage\n reglTextureCube.resize = resize\n reglTextureCube._reglType = 'textureCube'\n reglTextureCube._texture = texture\n if (config.profile) {\n reglTextureCube.stats = texture.stats\n }\n reglTextureCube.destroy = function () {\n texture.decRef()\n }\n\n return reglTextureCube\n }\n\n // Called when regl is destroyed\n function destroyTextures () {\n for (var i = 0; i < numTexUnits; ++i) {\n gl.activeTexture(GL_TEXTURE0$1 + i)\n gl.bindTexture(GL_TEXTURE_2D$1, null)\n textureUnits[i] = null\n }\n values(textureSet).forEach(destroy)\n\n stats.cubeCount = 0\n stats.textureCount = 0\n }\n\n if (config.profile) {\n stats.getTotalTextureSize = function () {\n var total = 0\n Object.keys(textureSet).forEach(function (key) {\n total += textureSet[key].stats.size\n })\n return total\n }\n }\n\n function restoreTextures () {\n for (var i = 0; i < numTexUnits; ++i) {\n var tex = textureUnits[i]\n if (tex) {\n tex.bindCount = 0\n tex.unit = -1\n textureUnits[i] = null\n }\n }\n\n values(textureSet).forEach(function (texture) {\n texture.texture = gl.createTexture()\n gl.bindTexture(texture.target, texture.texture)\n for (var i = 0; i < 32; ++i) {\n if ((texture.mipmask & (1 << i)) === 0) {\n continue\n }\n if (texture.target === GL_TEXTURE_2D$1) {\n gl.texImage2D(GL_TEXTURE_2D$1,\n i,\n texture.internalformat,\n texture.width >> i,\n texture.height >> i,\n 0,\n texture.internalformat,\n texture.type,\n null)\n } else {\n for (var j = 0; j < 6; ++j) {\n gl.texImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X$1 + j,\n i,\n texture.internalformat,\n texture.width >> i,\n texture.height >> i,\n 0,\n texture.internalformat,\n texture.type,\n null)\n }\n }\n }\n setTexInfo(texture.texInfo, texture.target)\n })\n }\n\n function refreshTextures () {\n for (var i = 0; i < numTexUnits; ++i) {\n var tex = textureUnits[i]\n if (tex) {\n tex.bindCount = 0\n tex.unit = -1\n textureUnits[i] = null\n }\n gl.activeTexture(GL_TEXTURE0$1 + i)\n gl.bindTexture(GL_TEXTURE_2D$1, null)\n gl.bindTexture(GL_TEXTURE_CUBE_MAP$1, null)\n }\n }\n\n return {\n create2D: createTexture2D,\n createCube: createTextureCube,\n clear: destroyTextures,\n getTexture: function (wrapper) {\n return null\n },\n restore: restoreTextures,\n refresh: refreshTextures\n }\n}\n\nvar GL_RENDERBUFFER = 0x8D41\n\nvar GL_RGBA4$1 = 0x8056\nvar GL_RGB5_A1$1 = 0x8057\nvar GL_RGB565$1 = 0x8D62\nvar GL_DEPTH_COMPONENT16 = 0x81A5\nvar GL_STENCIL_INDEX8 = 0x8D48\nvar GL_DEPTH_STENCIL$1 = 0x84F9\n\nvar GL_SRGB8_ALPHA8_EXT = 0x8C43\n\nvar GL_RGBA32F_EXT = 0x8814\n\nvar GL_RGBA16F_EXT = 0x881A\nvar GL_RGB16F_EXT = 0x881B\n\nvar FORMAT_SIZES = []\n\nFORMAT_SIZES[GL_RGBA4$1] = 2\nFORMAT_SIZES[GL_RGB5_A1$1] = 2\nFORMAT_SIZES[GL_RGB565$1] = 2\n\nFORMAT_SIZES[GL_DEPTH_COMPONENT16] = 2\nFORMAT_SIZES[GL_STENCIL_INDEX8] = 1\nFORMAT_SIZES[GL_DEPTH_STENCIL$1] = 4\n\nFORMAT_SIZES[GL_SRGB8_ALPHA8_EXT] = 4\nFORMAT_SIZES[GL_RGBA32F_EXT] = 16\nFORMAT_SIZES[GL_RGBA16F_EXT] = 8\nFORMAT_SIZES[GL_RGB16F_EXT] = 6\n\nfunction getRenderbufferSize (format, width, height) {\n return FORMAT_SIZES[format] * width * height\n}\n\nvar wrapRenderbuffers = function (gl, extensions, limits, stats, config) {\n var formatTypes = {\n 'rgba4': GL_RGBA4$1,\n 'rgb565': GL_RGB565$1,\n 'rgb5 a1': GL_RGB5_A1$1,\n 'depth': GL_DEPTH_COMPONENT16,\n 'stencil': GL_STENCIL_INDEX8,\n 'depth stencil': GL_DEPTH_STENCIL$1\n }\n\n if (extensions.ext_srgb) {\n formatTypes['srgba'] = GL_SRGB8_ALPHA8_EXT\n }\n\n if (extensions.ext_color_buffer_half_float) {\n formatTypes['rgba16f'] = GL_RGBA16F_EXT\n formatTypes['rgb16f'] = GL_RGB16F_EXT\n }\n\n if (extensions.webgl_color_buffer_float) {\n formatTypes['rgba32f'] = GL_RGBA32F_EXT\n }\n\n var formatTypesInvert = []\n Object.keys(formatTypes).forEach(function (key) {\n var val = formatTypes[key]\n formatTypesInvert[val] = key\n })\n\n var renderbufferCount = 0\n var renderbufferSet = {}\n\n function REGLRenderbuffer (renderbuffer) {\n this.id = renderbufferCount++\n this.refCount = 1\n\n this.renderbuffer = renderbuffer\n\n this.format = GL_RGBA4$1\n this.width = 0\n this.height = 0\n\n if (config.profile) {\n this.stats = { size: 0 }\n }\n }\n\n REGLRenderbuffer.prototype.decRef = function () {\n if (--this.refCount <= 0) {\n destroy(this)\n }\n }\n\n function destroy (rb) {\n var handle = rb.renderbuffer\n check$1(handle, 'must not double destroy renderbuffer')\n gl.bindRenderbuffer(GL_RENDERBUFFER, null)\n gl.deleteRenderbuffer(handle)\n rb.renderbuffer = null\n rb.refCount = 0\n delete renderbufferSet[rb.id]\n stats.renderbufferCount--\n }\n\n function createRenderbuffer (a, b) {\n var renderbuffer = new REGLRenderbuffer(gl.createRenderbuffer())\n renderbufferSet[renderbuffer.id] = renderbuffer\n stats.renderbufferCount++\n\n function reglRenderbuffer (a, b) {\n var w = 0\n var h = 0\n var format = GL_RGBA4$1\n\n if (typeof a === 'object' && a) {\n var options = a\n if ('shape' in options) {\n var shape = options.shape\n check$1(Array.isArray(shape) && shape.length >= 2,\n 'invalid renderbuffer shape')\n w = shape[0] | 0\n h = shape[1] | 0\n } else {\n if ('radius' in options) {\n w = h = options.radius | 0\n }\n if ('width' in options) {\n w = options.width | 0\n }\n if ('height' in options) {\n h = options.height | 0\n }\n }\n if ('format' in options) {\n check$1.parameter(options.format, formatTypes,\n 'invalid renderbuffer format')\n format = formatTypes[options.format]\n }\n } else if (typeof a === 'number') {\n w = a | 0\n if (typeof b === 'number') {\n h = b | 0\n } else {\n h = w\n }\n } else if (!a) {\n w = h = 1\n } else {\n check$1.raise('invalid arguments to renderbuffer constructor')\n }\n\n // check shape\n check$1(\n w > 0 && h > 0 &&\n w <= limits.maxRenderbufferSize && h <= limits.maxRenderbufferSize,\n 'invalid renderbuffer size')\n\n if (w === renderbuffer.width &&\n h === renderbuffer.height &&\n format === renderbuffer.format) {\n return\n }\n\n reglRenderbuffer.width = renderbuffer.width = w\n reglRenderbuffer.height = renderbuffer.height = h\n renderbuffer.format = format\n\n gl.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, format, w, h)\n\n check$1(\n gl.getError() === 0,\n 'invalid render buffer format')\n\n if (config.profile) {\n renderbuffer.stats.size = getRenderbufferSize(renderbuffer.format, renderbuffer.width, renderbuffer.height)\n }\n reglRenderbuffer.format = formatTypesInvert[renderbuffer.format]\n\n return reglRenderbuffer\n }\n\n function resize (w_, h_) {\n var w = w_ | 0\n var h = (h_ | 0) || w\n\n if (w === renderbuffer.width && h === renderbuffer.height) {\n return reglRenderbuffer\n }\n\n // check shape\n check$1(\n w > 0 && h > 0 &&\n w <= limits.maxRenderbufferSize && h <= limits.maxRenderbufferSize,\n 'invalid renderbuffer size')\n\n reglRenderbuffer.width = renderbuffer.width = w\n reglRenderbuffer.height = renderbuffer.height = h\n\n gl.bindRenderbuffer(GL_RENDERBUFFER, renderbuffer.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, renderbuffer.format, w, h)\n\n check$1(\n gl.getError() === 0,\n 'invalid render buffer format')\n\n // also, recompute size.\n if (config.profile) {\n renderbuffer.stats.size = getRenderbufferSize(\n renderbuffer.format, renderbuffer.width, renderbuffer.height)\n }\n\n return reglRenderbuffer\n }\n\n reglRenderbuffer(a, b)\n\n reglRenderbuffer.resize = resize\n reglRenderbuffer._reglType = 'renderbuffer'\n reglRenderbuffer._renderbuffer = renderbuffer\n if (config.profile) {\n reglRenderbuffer.stats = renderbuffer.stats\n }\n reglRenderbuffer.destroy = function () {\n renderbuffer.decRef()\n }\n\n return reglRenderbuffer\n }\n\n if (config.profile) {\n stats.getTotalRenderbufferSize = function () {\n var total = 0\n Object.keys(renderbufferSet).forEach(function (key) {\n total += renderbufferSet[key].stats.size\n })\n return total\n }\n }\n\n function restoreRenderbuffers () {\n values(renderbufferSet).forEach(function (rb) {\n rb.renderbuffer = gl.createRenderbuffer()\n gl.bindRenderbuffer(GL_RENDERBUFFER, rb.renderbuffer)\n gl.renderbufferStorage(GL_RENDERBUFFER, rb.format, rb.width, rb.height)\n })\n gl.bindRenderbuffer(GL_RENDERBUFFER, null)\n }\n\n return {\n create: createRenderbuffer,\n clear: function () {\n values(renderbufferSet).forEach(destroy)\n },\n restore: restoreRenderbuffers\n }\n}\n\n// We store these constants so that the minifier can inline them\nvar GL_FRAMEBUFFER$1 = 0x8D40\nvar GL_RENDERBUFFER$1 = 0x8D41\n\nvar GL_TEXTURE_2D$2 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 = 0x8515\n\nvar GL_COLOR_ATTACHMENT0$1 = 0x8CE0\nvar GL_DEPTH_ATTACHMENT = 0x8D00\nvar GL_STENCIL_ATTACHMENT = 0x8D20\nvar GL_DEPTH_STENCIL_ATTACHMENT = 0x821A\n\nvar GL_FRAMEBUFFER_COMPLETE$1 = 0x8CD5\nvar GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8CD6\nvar GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8CD7\nvar GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8CD9\nvar GL_FRAMEBUFFER_UNSUPPORTED = 0x8CDD\n\nvar GL_HALF_FLOAT_OES$2 = 0x8D61\nvar GL_UNSIGNED_BYTE$6 = 0x1401\nvar GL_FLOAT$5 = 0x1406\n\nvar GL_RGB$1 = 0x1907\nvar GL_RGBA$2 = 0x1908\n\nvar GL_DEPTH_COMPONENT$1 = 0x1902\n\nvar colorTextureFormatEnums = [\n GL_RGB$1,\n GL_RGBA$2\n]\n\n// for every texture format, store\n// the number of channels\nvar textureFormatChannels = []\ntextureFormatChannels[GL_RGBA$2] = 4\ntextureFormatChannels[GL_RGB$1] = 3\n\n// for every texture type, store\n// the size in bytes.\nvar textureTypeSizes = []\ntextureTypeSizes[GL_UNSIGNED_BYTE$6] = 1\ntextureTypeSizes[GL_FLOAT$5] = 4\ntextureTypeSizes[GL_HALF_FLOAT_OES$2] = 2\n\nvar GL_RGBA4$2 = 0x8056\nvar GL_RGB5_A1$2 = 0x8057\nvar GL_RGB565$2 = 0x8D62\nvar GL_DEPTH_COMPONENT16$1 = 0x81A5\nvar GL_STENCIL_INDEX8$1 = 0x8D48\nvar GL_DEPTH_STENCIL$2 = 0x84F9\n\nvar GL_SRGB8_ALPHA8_EXT$1 = 0x8C43\n\nvar GL_RGBA32F_EXT$1 = 0x8814\n\nvar GL_RGBA16F_EXT$1 = 0x881A\nvar GL_RGB16F_EXT$1 = 0x881B\n\nvar colorRenderbufferFormatEnums = [\n GL_RGBA4$2,\n GL_RGB5_A1$2,\n GL_RGB565$2,\n GL_SRGB8_ALPHA8_EXT$1,\n GL_RGBA16F_EXT$1,\n GL_RGB16F_EXT$1,\n GL_RGBA32F_EXT$1\n]\n\nvar statusCode = {}\nstatusCode[GL_FRAMEBUFFER_COMPLETE$1] = 'complete'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT] = 'incomplete attachment'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS] = 'incomplete dimensions'\nstatusCode[GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT] = 'incomplete, missing attachment'\nstatusCode[GL_FRAMEBUFFER_UNSUPPORTED] = 'unsupported'\n\nfunction wrapFBOState (\n gl,\n extensions,\n limits,\n textureState,\n renderbufferState,\n stats) {\n var framebufferState = {\n cur: null,\n next: null,\n dirty: false,\n setFBO: null\n }\n\n var colorTextureFormats = ['rgba']\n var colorRenderbufferFormats = ['rgba4', 'rgb565', 'rgb5 a1']\n\n if (extensions.ext_srgb) {\n colorRenderbufferFormats.push('srgba')\n }\n\n if (extensions.ext_color_buffer_half_float) {\n colorRenderbufferFormats.push('rgba16f', 'rgb16f')\n }\n\n if (extensions.webgl_color_buffer_float) {\n colorRenderbufferFormats.push('rgba32f')\n }\n\n var colorTypes = ['uint8']\n if (extensions.oes_texture_half_float) {\n colorTypes.push('half float', 'float16')\n }\n if (extensions.oes_texture_float) {\n colorTypes.push('float', 'float32')\n }\n\n function FramebufferAttachment (target, texture, renderbuffer) {\n this.target = target\n this.texture = texture\n this.renderbuffer = renderbuffer\n\n var w = 0\n var h = 0\n if (texture) {\n w = texture.width\n h = texture.height\n } else if (renderbuffer) {\n w = renderbuffer.width\n h = renderbuffer.height\n }\n this.width = w\n this.height = h\n }\n\n function decRef (attachment) {\n if (attachment) {\n if (attachment.texture) {\n attachment.texture._texture.decRef()\n }\n if (attachment.renderbuffer) {\n attachment.renderbuffer._renderbuffer.decRef()\n }\n }\n }\n\n function incRefAndCheckShape (attachment, width, height) {\n if (!attachment) {\n return\n }\n if (attachment.texture) {\n var texture = attachment.texture._texture\n var tw = Math.max(1, texture.width)\n var th = Math.max(1, texture.height)\n check$1(tw === width && th === height,\n 'inconsistent width/height for supplied texture')\n texture.refCount += 1\n } else {\n var renderbuffer = attachment.renderbuffer._renderbuffer\n check$1(\n renderbuffer.width === width && renderbuffer.height === height,\n 'inconsistent width/height for renderbuffer')\n renderbuffer.refCount += 1\n }\n }\n\n function attach (location, attachment) {\n if (attachment) {\n if (attachment.texture) {\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n location,\n attachment.target,\n attachment.texture._texture.texture,\n 0)\n } else {\n gl.framebufferRenderbuffer(\n GL_FRAMEBUFFER$1,\n location,\n GL_RENDERBUFFER$1,\n attachment.renderbuffer._renderbuffer.renderbuffer)\n }\n }\n }\n\n function parseAttachment (attachment) {\n var target = GL_TEXTURE_2D$2\n var texture = null\n var renderbuffer = null\n\n var data = attachment\n if (typeof attachment === 'object') {\n data = attachment.data\n if ('target' in attachment) {\n target = attachment.target | 0\n }\n }\n\n check$1.type(data, 'function', 'invalid attachment data')\n\n var type = data._reglType\n if (type === 'texture2d') {\n texture = data\n check$1(target === GL_TEXTURE_2D$2)\n } else if (type === 'textureCube') {\n texture = data\n check$1(\n target >= GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 &&\n target < GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + 6,\n 'invalid cube map target')\n } else if (type === 'renderbuffer') {\n renderbuffer = data\n target = GL_RENDERBUFFER$1\n } else {\n check$1.raise('invalid regl object for attachment')\n }\n\n return new FramebufferAttachment(target, texture, renderbuffer)\n }\n\n function allocAttachment (\n width,\n height,\n isTexture,\n format,\n type) {\n if (isTexture) {\n var texture = textureState.create2D({\n width: width,\n height: height,\n format: format,\n type: type\n })\n texture._texture.refCount = 0\n return new FramebufferAttachment(GL_TEXTURE_2D$2, texture, null)\n } else {\n var rb = renderbufferState.create({\n width: width,\n height: height,\n format: format\n })\n rb._renderbuffer.refCount = 0\n return new FramebufferAttachment(GL_RENDERBUFFER$1, null, rb)\n }\n }\n\n function unwrapAttachment (attachment) {\n return attachment && (attachment.texture || attachment.renderbuffer)\n }\n\n function resizeAttachment (attachment, w, h) {\n if (attachment) {\n if (attachment.texture) {\n attachment.texture.resize(w, h)\n } else if (attachment.renderbuffer) {\n attachment.renderbuffer.resize(w, h)\n }\n attachment.width = w\n attachment.height = h\n }\n }\n\n var framebufferCount = 0\n var framebufferSet = {}\n\n function REGLFramebuffer () {\n this.id = framebufferCount++\n framebufferSet[this.id] = this\n\n this.framebuffer = gl.createFramebuffer()\n this.width = 0\n this.height = 0\n\n this.colorAttachments = []\n this.depthAttachment = null\n this.stencilAttachment = null\n this.depthStencilAttachment = null\n }\n\n function decFBORefs (framebuffer) {\n framebuffer.colorAttachments.forEach(decRef)\n decRef(framebuffer.depthAttachment)\n decRef(framebuffer.stencilAttachment)\n decRef(framebuffer.depthStencilAttachment)\n }\n\n function destroy (framebuffer) {\n var handle = framebuffer.framebuffer\n check$1(handle, 'must not double destroy framebuffer')\n gl.deleteFramebuffer(handle)\n framebuffer.framebuffer = null\n stats.framebufferCount--\n delete framebufferSet[framebuffer.id]\n }\n\n function updateFramebuffer (framebuffer) {\n var i\n\n gl.bindFramebuffer(GL_FRAMEBUFFER$1, framebuffer.framebuffer)\n var colorAttachments = framebuffer.colorAttachments\n for (i = 0; i < colorAttachments.length; ++i) {\n attach(GL_COLOR_ATTACHMENT0$1 + i, colorAttachments[i])\n }\n for (i = colorAttachments.length; i < limits.maxColorAttachments; ++i) {\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_COLOR_ATTACHMENT0$1 + i,\n GL_TEXTURE_2D$2,\n null,\n 0)\n }\n\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_DEPTH_STENCIL_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_DEPTH_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n gl.framebufferTexture2D(\n GL_FRAMEBUFFER$1,\n GL_STENCIL_ATTACHMENT,\n GL_TEXTURE_2D$2,\n null,\n 0)\n\n attach(GL_DEPTH_ATTACHMENT, framebuffer.depthAttachment)\n attach(GL_STENCIL_ATTACHMENT, framebuffer.stencilAttachment)\n attach(GL_DEPTH_STENCIL_ATTACHMENT, framebuffer.depthStencilAttachment)\n\n // Check status code\n var status = gl.checkFramebufferStatus(GL_FRAMEBUFFER$1)\n if (!gl.isContextLost() && status !== GL_FRAMEBUFFER_COMPLETE$1) {\n check$1.raise('framebuffer configuration not supported, status = ' +\n statusCode[status])\n }\n\n gl.bindFramebuffer(GL_FRAMEBUFFER$1, framebufferState.next ? framebufferState.next.framebuffer : null)\n framebufferState.cur = framebufferState.next\n\n // FIXME: Clear error code here. This is a work around for a bug in\n // headless-gl\n gl.getError()\n }\n\n function createFBO (a0, a1) {\n var framebuffer = new REGLFramebuffer()\n stats.framebufferCount++\n\n function reglFramebuffer (a, b) {\n var i\n\n check$1(framebufferState.next !== framebuffer,\n 'can not update framebuffer which is currently in use')\n\n var width = 0\n var height = 0\n\n var needsDepth = true\n var needsStencil = true\n\n var colorBuffer = null\n var colorTexture = true\n var colorFormat = 'rgba'\n var colorType = 'uint8'\n var colorCount = 1\n\n var depthBuffer = null\n var stencilBuffer = null\n var depthStencilBuffer = null\n var depthStencilTexture = false\n\n if (typeof a === 'number') {\n width = a | 0\n height = (b | 0) || width\n } else if (!a) {\n width = height = 1\n } else {\n check$1.type(a, 'object', 'invalid arguments for framebuffer')\n var options = a\n\n if ('shape' in options) {\n var shape = options.shape\n check$1(Array.isArray(shape) && shape.length >= 2,\n 'invalid shape for framebuffer')\n width = shape[0]\n height = shape[1]\n } else {\n if ('radius' in options) {\n width = height = options.radius\n }\n if ('width' in options) {\n width = options.width\n }\n if ('height' in options) {\n height = options.height\n }\n }\n\n if ('color' in options ||\n 'colors' in options) {\n colorBuffer =\n options.color ||\n options.colors\n if (Array.isArray(colorBuffer)) {\n check$1(\n colorBuffer.length === 1 || extensions.webgl_draw_buffers,\n 'multiple render targets not supported')\n }\n }\n\n if (!colorBuffer) {\n if ('colorCount' in options) {\n colorCount = options.colorCount | 0\n check$1(colorCount > 0, 'invalid color buffer count')\n }\n\n if ('colorTexture' in options) {\n colorTexture = !!options.colorTexture\n colorFormat = 'rgba4'\n }\n\n if ('colorType' in options) {\n colorType = options.colorType\n if (!colorTexture) {\n if (colorType === 'half float' || colorType === 'float16') {\n check$1(extensions.ext_color_buffer_half_float,\n 'you must enable EXT_color_buffer_half_float to use 16-bit render buffers')\n colorFormat = 'rgba16f'\n } else if (colorType === 'float' || colorType === 'float32') {\n check$1(extensions.webgl_color_buffer_float,\n 'you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers')\n colorFormat = 'rgba32f'\n }\n } else {\n check$1(extensions.oes_texture_float ||\n !(colorType === 'float' || colorType === 'float32'),\n 'you must enable OES_texture_float in order to use floating point framebuffer objects')\n check$1(extensions.oes_texture_half_float ||\n !(colorType === 'half float' || colorType === 'float16'),\n 'you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects')\n }\n check$1.oneOf(colorType, colorTypes, 'invalid color type')\n }\n\n if ('colorFormat' in options) {\n colorFormat = options.colorFormat\n if (colorTextureFormats.indexOf(colorFormat) >= 0) {\n colorTexture = true\n } else if (colorRenderbufferFormats.indexOf(colorFormat) >= 0) {\n colorTexture = false\n } else {\n check$1.optional(function () {\n if (colorTexture) {\n check$1.oneOf(\n options.colorFormat, colorTextureFormats,\n 'invalid color format for texture')\n } else {\n check$1.oneOf(\n options.colorFormat, colorRenderbufferFormats,\n 'invalid color format for renderbuffer')\n }\n })\n }\n }\n }\n\n if ('depthTexture' in options || 'depthStencilTexture' in options) {\n depthStencilTexture = !!(options.depthTexture ||\n options.depthStencilTexture)\n check$1(!depthStencilTexture || extensions.webgl_depth_texture,\n 'webgl_depth_texture extension not supported')\n }\n\n if ('depth' in options) {\n if (typeof options.depth === 'boolean') {\n needsDepth = options.depth\n } else {\n depthBuffer = options.depth\n needsStencil = false\n }\n }\n\n if ('stencil' in options) {\n if (typeof options.stencil === 'boolean') {\n needsStencil = options.stencil\n } else {\n stencilBuffer = options.stencil\n needsDepth = false\n }\n }\n\n if ('depthStencil' in options) {\n if (typeof options.depthStencil === 'boolean') {\n needsDepth = needsStencil = options.depthStencil\n } else {\n depthStencilBuffer = options.depthStencil\n needsDepth = false\n needsStencil = false\n }\n }\n }\n\n // parse attachments\n var colorAttachments = null\n var depthAttachment = null\n var stencilAttachment = null\n var depthStencilAttachment = null\n\n // Set up color attachments\n if (Array.isArray(colorBuffer)) {\n colorAttachments = colorBuffer.map(parseAttachment)\n } else if (colorBuffer) {\n colorAttachments = [parseAttachment(colorBuffer)]\n } else {\n colorAttachments = new Array(colorCount)\n for (i = 0; i < colorCount; ++i) {\n colorAttachments[i] = allocAttachment(\n width,\n height,\n colorTexture,\n colorFormat,\n colorType)\n }\n }\n\n check$1(extensions.webgl_draw_buffers || colorAttachments.length <= 1,\n 'you must enable the WEBGL_draw_buffers extension in order to use multiple color buffers.')\n check$1(colorAttachments.length <= limits.maxColorAttachments,\n 'too many color attachments, not supported')\n\n width = width || colorAttachments[0].width\n height = height || colorAttachments[0].height\n\n if (depthBuffer) {\n depthAttachment = parseAttachment(depthBuffer)\n } else if (needsDepth && !needsStencil) {\n depthAttachment = allocAttachment(\n width,\n height,\n depthStencilTexture,\n 'depth',\n 'uint32')\n }\n\n if (stencilBuffer) {\n stencilAttachment = parseAttachment(stencilBuffer)\n } else if (needsStencil && !needsDepth) {\n stencilAttachment = allocAttachment(\n width,\n height,\n false,\n 'stencil',\n 'uint8')\n }\n\n if (depthStencilBuffer) {\n depthStencilAttachment = parseAttachment(depthStencilBuffer)\n } else if (!depthBuffer && !stencilBuffer && needsStencil && needsDepth) {\n depthStencilAttachment = allocAttachment(\n width,\n height,\n depthStencilTexture,\n 'depth stencil',\n 'depth stencil')\n }\n\n check$1(\n (!!depthBuffer) + (!!stencilBuffer) + (!!depthStencilBuffer) <= 1,\n 'invalid framebuffer configuration, can specify exactly one depth/stencil attachment')\n\n var commonColorAttachmentSize = null\n\n for (i = 0; i < colorAttachments.length; ++i) {\n incRefAndCheckShape(colorAttachments[i], width, height)\n check$1(!colorAttachments[i] ||\n (colorAttachments[i].texture &&\n colorTextureFormatEnums.indexOf(colorAttachments[i].texture._texture.format) >= 0) ||\n (colorAttachments[i].renderbuffer &&\n colorRenderbufferFormatEnums.indexOf(colorAttachments[i].renderbuffer._renderbuffer.format) >= 0),\n 'framebuffer color attachment ' + i + ' is invalid')\n\n if (colorAttachments[i] && colorAttachments[i].texture) {\n var colorAttachmentSize =\n textureFormatChannels[colorAttachments[i].texture._texture.format] *\n textureTypeSizes[colorAttachments[i].texture._texture.type]\n\n if (commonColorAttachmentSize === null) {\n commonColorAttachmentSize = colorAttachmentSize\n } else {\n // We need to make sure that all color attachments have the same number of bitplanes\n // (that is, the same numer of bits per pixel)\n // This is required by the GLES2.0 standard. See the beginning of Chapter 4 in that document.\n check$1(commonColorAttachmentSize === colorAttachmentSize,\n 'all color attachments much have the same number of bits per pixel.')\n }\n }\n }\n incRefAndCheckShape(depthAttachment, width, height)\n check$1(!depthAttachment ||\n (depthAttachment.texture &&\n depthAttachment.texture._texture.format === GL_DEPTH_COMPONENT$1) ||\n (depthAttachment.renderbuffer &&\n depthAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_COMPONENT16$1),\n 'invalid depth attachment for framebuffer object')\n incRefAndCheckShape(stencilAttachment, width, height)\n check$1(!stencilAttachment ||\n (stencilAttachment.renderbuffer &&\n stencilAttachment.renderbuffer._renderbuffer.format === GL_STENCIL_INDEX8$1),\n 'invalid stencil attachment for framebuffer object')\n incRefAndCheckShape(depthStencilAttachment, width, height)\n check$1(!depthStencilAttachment ||\n (depthStencilAttachment.texture &&\n depthStencilAttachment.texture._texture.format === GL_DEPTH_STENCIL$2) ||\n (depthStencilAttachment.renderbuffer &&\n depthStencilAttachment.renderbuffer._renderbuffer.format === GL_DEPTH_STENCIL$2),\n 'invalid depth-stencil attachment for framebuffer object')\n\n // decrement references\n decFBORefs(framebuffer)\n\n framebuffer.width = width\n framebuffer.height = height\n\n framebuffer.colorAttachments = colorAttachments\n framebuffer.depthAttachment = depthAttachment\n framebuffer.stencilAttachment = stencilAttachment\n framebuffer.depthStencilAttachment = depthStencilAttachment\n\n reglFramebuffer.color = colorAttachments.map(unwrapAttachment)\n reglFramebuffer.depth = unwrapAttachment(depthAttachment)\n reglFramebuffer.stencil = unwrapAttachment(stencilAttachment)\n reglFramebuffer.depthStencil = unwrapAttachment(depthStencilAttachment)\n\n reglFramebuffer.width = framebuffer.width\n reglFramebuffer.height = framebuffer.height\n\n updateFramebuffer(framebuffer)\n\n return reglFramebuffer\n }\n\n function resize (w_, h_) {\n check$1(framebufferState.next !== framebuffer,\n 'can not resize a framebuffer which is currently in use')\n\n var w = Math.max(w_ | 0, 1)\n var h = Math.max((h_ | 0) || w, 1)\n if (w === framebuffer.width && h === framebuffer.height) {\n return reglFramebuffer\n }\n\n // resize all buffers\n var colorAttachments = framebuffer.colorAttachments\n for (var i = 0; i < colorAttachments.length; ++i) {\n resizeAttachment(colorAttachments[i], w, h)\n }\n resizeAttachment(framebuffer.depthAttachment, w, h)\n resizeAttachment(framebuffer.stencilAttachment, w, h)\n resizeAttachment(framebuffer.depthStencilAttachment, w, h)\n\n framebuffer.width = reglFramebuffer.width = w\n framebuffer.height = reglFramebuffer.height = h\n\n updateFramebuffer(framebuffer)\n\n return reglFramebuffer\n }\n\n reglFramebuffer(a0, a1)\n\n return extend(reglFramebuffer, {\n resize: resize,\n _reglType: 'framebuffer',\n _framebuffer: framebuffer,\n destroy: function () {\n destroy(framebuffer)\n decFBORefs(framebuffer)\n },\n use: function (block) {\n framebufferState.setFBO({\n framebuffer: reglFramebuffer\n }, block)\n }\n })\n }\n\n function createCubeFBO (options) {\n var faces = Array(6)\n\n function reglFramebufferCube (a) {\n var i\n\n check$1(faces.indexOf(framebufferState.next) < 0,\n 'can not update framebuffer which is currently in use')\n\n var params = {\n color: null\n }\n\n var radius = 0\n\n var colorBuffer = null\n var colorFormat = 'rgba'\n var colorType = 'uint8'\n var colorCount = 1\n\n if (typeof a === 'number') {\n radius = a | 0\n } else if (!a) {\n radius = 1\n } else {\n check$1.type(a, 'object', 'invalid arguments for framebuffer')\n var options = a\n\n if ('shape' in options) {\n var shape = options.shape\n check$1(\n Array.isArray(shape) && shape.length >= 2,\n 'invalid shape for framebuffer')\n check$1(\n shape[0] === shape[1],\n 'cube framebuffer must be square')\n radius = shape[0]\n } else {\n if ('radius' in options) {\n radius = options.radius | 0\n }\n if ('width' in options) {\n radius = options.width | 0\n if ('height' in options) {\n check$1(options.height === radius, 'must be square')\n }\n } else if ('height' in options) {\n radius = options.height | 0\n }\n }\n\n if ('color' in options ||\n 'colors' in options) {\n colorBuffer =\n options.color ||\n options.colors\n if (Array.isArray(colorBuffer)) {\n check$1(\n colorBuffer.length === 1 || extensions.webgl_draw_buffers,\n 'multiple render targets not supported')\n }\n }\n\n if (!colorBuffer) {\n if ('colorCount' in options) {\n colorCount = options.colorCount | 0\n check$1(colorCount > 0, 'invalid color buffer count')\n }\n\n if ('colorType' in options) {\n check$1.oneOf(\n options.colorType, colorTypes,\n 'invalid color type')\n colorType = options.colorType\n }\n\n if ('colorFormat' in options) {\n colorFormat = options.colorFormat\n check$1.oneOf(\n options.colorFormat, colorTextureFormats,\n 'invalid color format for texture')\n }\n }\n\n if ('depth' in options) {\n params.depth = options.depth\n }\n\n if ('stencil' in options) {\n params.stencil = options.stencil\n }\n\n if ('depthStencil' in options) {\n params.depthStencil = options.depthStencil\n }\n }\n\n var colorCubes\n if (colorBuffer) {\n if (Array.isArray(colorBuffer)) {\n colorCubes = []\n for (i = 0; i < colorBuffer.length; ++i) {\n colorCubes[i] = colorBuffer[i]\n }\n } else {\n colorCubes = [ colorBuffer ]\n }\n } else {\n colorCubes = Array(colorCount)\n var cubeMapParams = {\n radius: radius,\n format: colorFormat,\n type: colorType\n }\n for (i = 0; i < colorCount; ++i) {\n colorCubes[i] = textureState.createCube(cubeMapParams)\n }\n }\n\n // Check color cubes\n params.color = Array(colorCubes.length)\n for (i = 0; i < colorCubes.length; ++i) {\n var cube = colorCubes[i]\n check$1(\n typeof cube === 'function' && cube._reglType === 'textureCube',\n 'invalid cube map')\n radius = radius || cube.width\n check$1(\n cube.width === radius && cube.height === radius,\n 'invalid cube map shape')\n params.color[i] = {\n target: GL_TEXTURE_CUBE_MAP_POSITIVE_X$2,\n data: colorCubes[i]\n }\n }\n\n for (i = 0; i < 6; ++i) {\n for (var j = 0; j < colorCubes.length; ++j) {\n params.color[j].target = GL_TEXTURE_CUBE_MAP_POSITIVE_X$2 + i\n }\n // reuse depth-stencil attachments across all cube maps\n if (i > 0) {\n params.depth = faces[0].depth\n params.stencil = faces[0].stencil\n params.depthStencil = faces[0].depthStencil\n }\n if (faces[i]) {\n (faces[i])(params)\n } else {\n faces[i] = createFBO(params)\n }\n }\n\n return extend(reglFramebufferCube, {\n width: radius,\n height: radius,\n color: colorCubes\n })\n }\n\n function resize (radius_) {\n var i\n var radius = radius_ | 0\n check$1(radius > 0 && radius <= limits.maxCubeMapSize,\n 'invalid radius for cube fbo')\n\n if (radius === reglFramebufferCube.width) {\n return reglFramebufferCube\n }\n\n var colors = reglFramebufferCube.color\n for (i = 0; i < colors.length; ++i) {\n colors[i].resize(radius)\n }\n\n for (i = 0; i < 6; ++i) {\n faces[i].resize(radius)\n }\n\n reglFramebufferCube.width = reglFramebufferCube.height = radius\n\n return reglFramebufferCube\n }\n\n reglFramebufferCube(options)\n\n return extend(reglFramebufferCube, {\n faces: faces,\n resize: resize,\n _reglType: 'framebufferCube',\n destroy: function () {\n faces.forEach(function (f) {\n f.destroy()\n })\n }\n })\n }\n\n function restoreFramebuffers () {\n framebufferState.cur = null\n framebufferState.next = null\n framebufferState.dirty = true\n values(framebufferSet).forEach(function (fb) {\n fb.framebuffer = gl.createFramebuffer()\n updateFramebuffer(fb)\n })\n }\n\n return extend(framebufferState, {\n getFramebuffer: function (object) {\n if (typeof object === 'function' && object._reglType === 'framebuffer') {\n var fbo = object._framebuffer\n if (fbo instanceof REGLFramebuffer) {\n return fbo\n }\n }\n return null\n },\n create: createFBO,\n createCube: createCubeFBO,\n clear: function () {\n values(framebufferSet).forEach(destroy)\n },\n restore: restoreFramebuffers\n })\n}\n\nvar GL_FLOAT$6 = 5126\nvar GL_ARRAY_BUFFER$1 = 34962\nvar GL_ELEMENT_ARRAY_BUFFER$1 = 34963\n\nvar VAO_OPTIONS = [\n 'attributes',\n 'elements',\n 'offset',\n 'count',\n 'primitive',\n 'instances'\n]\n\nfunction AttributeRecord () {\n this.state = 0\n\n this.x = 0.0\n this.y = 0.0\n this.z = 0.0\n this.w = 0.0\n\n this.buffer = null\n this.size = 0\n this.normalized = false\n this.type = GL_FLOAT$6\n this.offset = 0\n this.stride = 0\n this.divisor = 0\n}\n\nfunction wrapAttributeState (\n gl,\n extensions,\n limits,\n stats,\n bufferState,\n elementState,\n drawState) {\n var NUM_ATTRIBUTES = limits.maxAttributes\n var attributeBindings = new Array(NUM_ATTRIBUTES)\n for (var i = 0; i < NUM_ATTRIBUTES; ++i) {\n attributeBindings[i] = new AttributeRecord()\n }\n var vaoCount = 0\n var vaoSet = {}\n\n var state = {\n Record: AttributeRecord,\n scope: {},\n state: attributeBindings,\n currentVAO: null,\n targetVAO: null,\n restore: extVAO() ? restoreVAO : function () {},\n createVAO: createVAO,\n getVAO: getVAO,\n destroyBuffer: destroyBuffer,\n setVAO: extVAO() ? setVAOEXT : setVAOEmulated,\n clear: extVAO() ? destroyVAOEXT : function () {}\n }\n\n function destroyBuffer (buffer) {\n for (var i = 0; i < attributeBindings.length; ++i) {\n var record = attributeBindings[i]\n if (record.buffer === buffer) {\n gl.disableVertexAttribArray(i)\n record.buffer = null\n }\n }\n }\n\n function extVAO () {\n return extensions.oes_vertex_array_object\n }\n\n function extInstanced () {\n return extensions.angle_instanced_arrays\n }\n\n function getVAO (vao) {\n if (typeof vao === 'function' && vao._vao) {\n return vao._vao\n }\n return null\n }\n\n function setVAOEXT (vao) {\n if (vao === state.currentVAO) {\n return\n }\n var ext = extVAO()\n if (vao) {\n ext.bindVertexArrayOES(vao.vao)\n } else {\n ext.bindVertexArrayOES(null)\n }\n state.currentVAO = vao\n }\n\n function setVAOEmulated (vao) {\n if (vao === state.currentVAO) {\n return\n }\n if (vao) {\n vao.bindAttrs()\n } else {\n var exti = extInstanced()\n for (var i = 0; i < attributeBindings.length; ++i) {\n var binding = attributeBindings[i]\n if (binding.buffer) {\n gl.enableVertexAttribArray(i)\n binding.buffer.bind()\n gl.vertexAttribPointer(i, binding.size, binding.type, binding.normalized, binding.stride, binding.offfset)\n if (exti && binding.divisor) {\n exti.vertexAttribDivisorANGLE(i, binding.divisor)\n }\n } else {\n gl.disableVertexAttribArray(i)\n gl.vertexAttrib4f(i, binding.x, binding.y, binding.z, binding.w)\n }\n }\n if (drawState.elements) {\n gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER$1, drawState.elements.buffer.buffer)\n } else {\n gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER$1, null)\n }\n }\n state.currentVAO = vao\n }\n\n function destroyVAOEXT () {\n values(vaoSet).forEach(function (vao) {\n vao.destroy()\n })\n }\n\n function REGLVAO () {\n this.id = ++vaoCount\n this.attributes = []\n this.elements = null\n this.ownsElements = false\n this.count = 0\n this.offset = 0\n this.instances = -1\n this.primitive = 4\n var extension = extVAO()\n if (extension) {\n this.vao = extension.createVertexArrayOES()\n } else {\n this.vao = null\n }\n vaoSet[this.id] = this\n this.buffers = []\n }\n\n REGLVAO.prototype.bindAttrs = function () {\n var exti = extInstanced()\n var attributes = this.attributes\n for (var i = 0; i < attributes.length; ++i) {\n var attr = attributes[i]\n if (attr.buffer) {\n gl.enableVertexAttribArray(i)\n gl.bindBuffer(GL_ARRAY_BUFFER$1, attr.buffer.buffer)\n gl.vertexAttribPointer(i, attr.size, attr.type, attr.normalized, attr.stride, attr.offset)\n if (exti && attr.divisor) {\n exti.vertexAttribDivisorANGLE(i, attr.divisor)\n }\n } else {\n gl.disableVertexAttribArray(i)\n gl.vertexAttrib4f(i, attr.x, attr.y, attr.z, attr.w)\n }\n }\n for (var j = attributes.length; j < NUM_ATTRIBUTES; ++j) {\n gl.disableVertexAttribArray(j)\n }\n var elements = elementState.getElements(this.elements)\n if (elements) {\n gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER$1, elements.buffer.buffer)\n } else {\n gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER$1, null)\n }\n }\n\n REGLVAO.prototype.refresh = function () {\n var ext = extVAO()\n if (ext) {\n ext.bindVertexArrayOES(this.vao)\n this.bindAttrs()\n state.currentVAO = null\n ext.bindVertexArrayOES(null)\n }\n }\n\n REGLVAO.prototype.destroy = function () {\n if (this.vao) {\n var extension = extVAO()\n if (this === state.currentVAO) {\n state.currentVAO = null\n extension.bindVertexArrayOES(null)\n }\n extension.deleteVertexArrayOES(this.vao)\n this.vao = null\n }\n if (this.ownsElements) {\n this.elements.destroy()\n this.elements = null\n this.ownsElements = false\n }\n if (vaoSet[this.id]) {\n delete vaoSet[this.id]\n stats.vaoCount -= 1\n }\n }\n\n function restoreVAO () {\n var ext = extVAO()\n if (ext) {\n values(vaoSet).forEach(function (vao) {\n vao.refresh()\n })\n }\n }\n\n function createVAO (_attr) {\n var vao = new REGLVAO()\n stats.vaoCount += 1\n\n function updateVAO (options) {\n var attributes\n if (Array.isArray(options)) {\n attributes = options\n if (vao.elements && vao.ownsElements) {\n vao.elements.destroy()\n }\n vao.elements = null\n vao.ownsElements = false\n vao.offset = 0\n vao.count = 0\n vao.instances = -1\n vao.primitive = 4\n } else {\n check$1(typeof options === 'object', 'invalid arguments for create vao')\n check$1('attributes' in options, 'must specify attributes for vao')\n if (options.elements) {\n var elements = options.elements\n if (vao.ownsElements) {\n if (typeof elements === 'function' && elements._reglType === 'elements') {\n vao.elements.destroy()\n vao.ownsElements = false\n } else {\n vao.elements(elements)\n vao.ownsElements = false\n }\n } else if (elementState.getElements(options.elements)) {\n vao.elements = options.elements\n vao.ownsElements = false\n } else {\n vao.elements = elementState.create(options.elements)\n vao.ownsElements = true\n }\n } else {\n vao.elements = null\n vao.ownsElements = false\n }\n attributes = options.attributes\n\n // set default vao\n vao.offset = 0\n vao.count = -1\n vao.instances = -1\n vao.primitive = 4\n\n // copy element properties\n if (vao.elements) {\n vao.count = vao.elements._elements.vertCount\n vao.primitive = vao.elements._elements.primType\n }\n\n if ('offset' in options) {\n vao.offset = options.offset | 0\n }\n if ('count' in options) {\n vao.count = options.count | 0\n }\n if ('instances' in options) {\n vao.instances = options.instances | 0\n }\n if ('primitive' in options) {\n check$1(options.primitive in primTypes, 'bad primitive type: ' + options.primitive)\n vao.primitive = primTypes[options.primitive]\n }\n\n check$1.optional(() => {\n var keys = Object.keys(options)\n for (var i = 0; i < keys.length; ++i) {\n check$1(VAO_OPTIONS.indexOf(keys[i]) >= 0, 'invalid option for vao: \"' + keys[i] + '\" valid options are ' + VAO_OPTIONS)\n }\n })\n check$1(Array.isArray(attributes), 'attributes must be an array')\n }\n\n check$1(attributes.length < NUM_ATTRIBUTES, 'too many attributes')\n check$1(attributes.length > 0, 'must specify at least one attribute')\n\n var bufUpdated = {}\n var nattributes = vao.attributes\n nattributes.length = attributes.length\n for (var i = 0; i < attributes.length; ++i) {\n var spec = attributes[i]\n var rec = nattributes[i] = new AttributeRecord()\n var data = spec.data || spec\n if (Array.isArray(data) || isTypedArray(data) || isNDArrayLike(data)) {\n var buf\n if (vao.buffers[i]) {\n buf = vao.buffers[i]\n if (isTypedArray(data) && buf._buffer.byteLength >= data.byteLength) {\n buf.subdata(data)\n } else {\n buf.destroy()\n vao.buffers[i] = null\n }\n }\n if (!vao.buffers[i]) {\n buf = vao.buffers[i] = bufferState.create(spec, GL_ARRAY_BUFFER$1, false, true)\n }\n rec.buffer = bufferState.getBuffer(buf)\n rec.size = rec.buffer.dimension | 0\n rec.normalized = false\n rec.type = rec.buffer.dtype\n rec.offset = 0\n rec.stride = 0\n rec.divisor = 0\n rec.state = 1\n bufUpdated[i] = 1\n } else if (bufferState.getBuffer(spec)) {\n rec.buffer = bufferState.getBuffer(spec)\n rec.size = rec.buffer.dimension | 0\n rec.normalized = false\n rec.type = rec.buffer.dtype\n rec.offset = 0\n rec.stride = 0\n rec.divisor = 0\n rec.state = 1\n } else if (bufferState.getBuffer(spec.buffer)) {\n rec.buffer = bufferState.getBuffer(spec.buffer)\n rec.size = ((+spec.size) || rec.buffer.dimension) | 0\n rec.normalized = !!spec.normalized || false\n if ('type' in spec) {\n check$1.parameter(spec.type, glTypes, 'invalid buffer type')\n rec.type = glTypes[spec.type]\n } else {\n rec.type = rec.buffer.dtype\n }\n rec.offset = (spec.offset || 0) | 0\n rec.stride = (spec.stride || 0) | 0\n rec.divisor = (spec.divisor || 0) | 0\n rec.state = 1\n\n check$1(rec.size >= 1 && rec.size <= 4, 'size must be between 1 and 4')\n check$1(rec.offset >= 0, 'invalid offset')\n check$1(rec.stride >= 0 && rec.stride <= 255, 'stride must be between 0 and 255')\n check$1(rec.divisor >= 0, 'divisor must be positive')\n check$1(!rec.divisor || !!extensions.angle_instanced_arrays, 'ANGLE_instanced_arrays must be enabled to use divisor')\n } else if ('x' in spec) {\n check$1(i > 0, 'first attribute must not be a constant')\n rec.x = +spec.x || 0\n rec.y = +spec.y || 0\n rec.z = +spec.z || 0\n rec.w = +spec.w || 0\n rec.state = 2\n } else {\n check$1(false, 'invalid attribute spec for location ' + i)\n }\n }\n\n // retire unused buffers\n for (var j = 0; j < vao.buffers.length; ++j) {\n if (!bufUpdated[j] && vao.buffers[j]) {\n vao.buffers[j].destroy()\n vao.buffers[j] = null\n }\n }\n\n vao.refresh()\n return updateVAO\n }\n\n updateVAO.destroy = function () {\n for (var j = 0; j < vao.buffers.length; ++j) {\n if (vao.buffers[j]) {\n vao.buffers[j].destroy()\n }\n }\n vao.buffers.length = 0\n\n if (vao.ownsElements) {\n vao.elements.destroy()\n vao.elements = null\n vao.ownsElements = false\n }\n\n vao.destroy()\n }\n\n updateVAO._vao = vao\n updateVAO._reglType = 'vao'\n\n return updateVAO(_attr)\n }\n\n return state\n}\n\nvar GL_FRAGMENT_SHADER = 35632\nvar GL_VERTEX_SHADER = 35633\n\nvar GL_ACTIVE_UNIFORMS = 0x8B86\nvar GL_ACTIVE_ATTRIBUTES = 0x8B89\n\nfunction wrapShaderState (gl, stringStore, stats, config) {\n // ===================================================\n // glsl compilation and linking\n // ===================================================\n var fragShaders = {}\n var vertShaders = {}\n\n function ActiveInfo (name, id, location, info) {\n this.name = name\n this.id = id\n this.location = location\n this.info = info\n }\n\n function insertActiveInfo (list, info) {\n for (var i = 0; i < list.length; ++i) {\n if (list[i].id === info.id) {\n list[i].location = info.location\n return\n }\n }\n list.push(info)\n }\n\n function getShader (type, id, command) {\n var cache = type === GL_FRAGMENT_SHADER ? fragShaders : vertShaders\n var shader = cache[id]\n\n if (!shader) {\n var source = stringStore.str(id)\n shader = gl.createShader(type)\n gl.shaderSource(shader, source)\n gl.compileShader(shader)\n check$1.shaderError(gl, shader, source, type, command)\n cache[id] = shader\n }\n\n return shader\n }\n\n // ===================================================\n // program linking\n // ===================================================\n var programCache = {}\n var programList = []\n\n var PROGRAM_COUNTER = 0\n\n function REGLProgram (fragId, vertId) {\n this.id = PROGRAM_COUNTER++\n this.fragId = fragId\n this.vertId = vertId\n this.program = null\n this.uniforms = []\n this.attributes = []\n this.refCount = 1\n\n if (config.profile) {\n this.stats = {\n uniformsCount: 0,\n attributesCount: 0\n }\n }\n }\n\n function linkProgram (desc, command, attributeLocations) {\n var i, info\n\n // -------------------------------\n // compile & link\n // -------------------------------\n var fragShader = getShader(GL_FRAGMENT_SHADER, desc.fragId)\n var vertShader = getShader(GL_VERTEX_SHADER, desc.vertId)\n\n var program = desc.program = gl.createProgram()\n gl.attachShader(program, fragShader)\n gl.attachShader(program, vertShader)\n if (attributeLocations) {\n for (i = 0; i < attributeLocations.length; ++i) {\n var binding = attributeLocations[i]\n gl.bindAttribLocation(program, binding[0], binding[1])\n }\n }\n\n gl.linkProgram(program)\n check$1.linkError(\n gl,\n program,\n stringStore.str(desc.fragId),\n stringStore.str(desc.vertId),\n command)\n\n // -------------------------------\n // grab uniforms\n // -------------------------------\n var numUniforms = gl.getProgramParameter(program, GL_ACTIVE_UNIFORMS)\n if (config.profile) {\n desc.stats.uniformsCount = numUniforms\n }\n var uniforms = desc.uniforms\n for (i = 0; i < numUniforms; ++i) {\n info = gl.getActiveUniform(program, i)\n if (info) {\n if (info.size > 1) {\n for (var j = 0; j < info.size; ++j) {\n var name = info.name.replace('[0]', '[' + j + ']')\n insertActiveInfo(uniforms, new ActiveInfo(\n name,\n stringStore.id(name),\n gl.getUniformLocation(program, name),\n info))\n }\n }\n var uniName = info.name\n if (info.size > 1) {\n uniName = uniName.replace('[0]', '')\n }\n insertActiveInfo(uniforms, new ActiveInfo(\n uniName,\n stringStore.id(uniName),\n gl.getUniformLocation(program, uniName),\n info))\n }\n }\n\n // -------------------------------\n // grab attributes\n // -------------------------------\n var numAttributes = gl.getProgramParameter(program, GL_ACTIVE_ATTRIBUTES)\n if (config.profile) {\n desc.stats.attributesCount = numAttributes\n }\n\n var attributes = desc.attributes\n for (i = 0; i < numAttributes; ++i) {\n info = gl.getActiveAttrib(program, i)\n if (info) {\n insertActiveInfo(attributes, new ActiveInfo(\n info.name,\n stringStore.id(info.name),\n gl.getAttribLocation(program, info.name),\n info))\n }\n }\n }\n\n if (config.profile) {\n stats.getMaxUniformsCount = function () {\n var m = 0\n programList.forEach(function (desc) {\n if (desc.stats.uniformsCount > m) {\n m = desc.stats.uniformsCount\n }\n })\n return m\n }\n\n stats.getMaxAttributesCount = function () {\n var m = 0\n programList.forEach(function (desc) {\n if (desc.stats.attributesCount > m) {\n m = desc.stats.attributesCount\n }\n })\n return m\n }\n }\n\n function restoreShaders () {\n fragShaders = {}\n vertShaders = {}\n for (var i = 0; i < programList.length; ++i) {\n linkProgram(programList[i], null, programList[i].attributes.map(function (info) {\n return [info.location, info.name]\n }))\n }\n }\n\n return {\n clear: function () {\n var deleteShader = gl.deleteShader.bind(gl)\n values(fragShaders).forEach(deleteShader)\n fragShaders = {}\n values(vertShaders).forEach(deleteShader)\n vertShaders = {}\n\n programList.forEach(function (desc) {\n gl.deleteProgram(desc.program)\n })\n programList.length = 0\n programCache = {}\n\n stats.shaderCount = 0\n },\n\n program: function (vertId, fragId, command, attribLocations) {\n check$1.command(vertId >= 0, 'missing vertex shader', command)\n check$1.command(fragId >= 0, 'missing fragment shader', command)\n\n var cache = programCache[fragId]\n if (!cache) {\n cache = programCache[fragId] = {}\n }\n var prevProgram = cache[vertId]\n if (prevProgram) {\n prevProgram.refCount++\n if (!attribLocations) {\n return prevProgram\n }\n }\n var program = new REGLProgram(fragId, vertId)\n stats.shaderCount++\n linkProgram(program, command, attribLocations)\n if (!prevProgram) {\n cache[vertId] = program\n }\n programList.push(program)\n return extend(program, {\n destroy: function () {\n program.refCount--\n if (program.refCount <= 0) {\n gl.deleteProgram(program.program)\n var idx = programList.indexOf(program)\n programList.splice(idx, 1)\n stats.shaderCount--\n }\n // no program is linked to this vert anymore\n if (cache[program.vertId].refCount <= 0) {\n gl.deleteShader(vertShaders[program.vertId])\n delete vertShaders[program.vertId]\n delete programCache[program.fragId][program.vertId]\n }\n // no program is linked to this frag anymore\n if (!Object.keys(programCache[program.fragId]).length) {\n gl.deleteShader(fragShaders[program.fragId])\n delete fragShaders[program.fragId]\n delete programCache[program.fragId]\n }\n }\n })\n },\n\n restore: restoreShaders,\n\n shader: getShader,\n\n frag: -1,\n vert: -1\n }\n}\n\nvar GL_RGBA$3 = 6408\nvar GL_UNSIGNED_BYTE$7 = 5121\nvar GL_PACK_ALIGNMENT = 0x0D05\nvar GL_FLOAT$7 = 0x1406 // 5126\n\nfunction wrapReadPixels (\n gl,\n framebufferState,\n reglPoll,\n context,\n glAttributes,\n extensions,\n limits) {\n function readPixelsImpl (input) {\n var type\n if (framebufferState.next === null) {\n check$1(\n glAttributes.preserveDrawingBuffer,\n 'you must create a webgl context with \"preserveDrawingBuffer\":true in order to read pixels from the drawing buffer')\n type = GL_UNSIGNED_BYTE$7\n } else {\n check$1(\n framebufferState.next.colorAttachments[0].texture !== null,\n 'You cannot read from a renderbuffer')\n type = framebufferState.next.colorAttachments[0].texture._texture.type\n\n check$1.optional(function () {\n if (extensions.oes_texture_float) {\n check$1(\n type === GL_UNSIGNED_BYTE$7 || type === GL_FLOAT$7,\n 'Reading from a framebuffer is only allowed for the types \\'uint8\\' and \\'float\\'')\n\n if (type === GL_FLOAT$7) {\n check$1(limits.readFloat, 'Reading \\'float\\' values is not permitted in your browser. For a fallback, please see: https://www.npmjs.com/package/glsl-read-float')\n }\n } else {\n check$1(\n type === GL_UNSIGNED_BYTE$7,\n 'Reading from a framebuffer is only allowed for the type \\'uint8\\'')\n }\n })\n }\n\n var x = 0\n var y = 0\n var width = context.framebufferWidth\n var height = context.framebufferHeight\n var data = null\n\n if (isTypedArray(input)) {\n data = input\n } else if (input) {\n check$1.type(input, 'object', 'invalid arguments to regl.read()')\n x = input.x | 0\n y = input.y | 0\n check$1(\n x >= 0 && x < context.framebufferWidth,\n 'invalid x offset for regl.read')\n check$1(\n y >= 0 && y < context.framebufferHeight,\n 'invalid y offset for regl.read')\n width = (input.width || (context.framebufferWidth - x)) | 0\n height = (input.height || (context.framebufferHeight - y)) | 0\n data = input.data || null\n }\n\n // sanity check input.data\n if (data) {\n if (type === GL_UNSIGNED_BYTE$7) {\n check$1(\n data instanceof Uint8Array,\n 'buffer must be \\'Uint8Array\\' when reading from a framebuffer of type \\'uint8\\'')\n } else if (type === GL_FLOAT$7) {\n check$1(\n data instanceof Float32Array,\n 'buffer must be \\'Float32Array\\' when reading from a framebuffer of type \\'float\\'')\n }\n }\n\n check$1(\n width > 0 && width + x <= context.framebufferWidth,\n 'invalid width for read pixels')\n check$1(\n height > 0 && height + y <= context.framebufferHeight,\n 'invalid height for read pixels')\n\n // Update WebGL state\n reglPoll()\n\n // Compute size\n var size = width * height * 4\n\n // Allocate data\n if (!data) {\n if (type === GL_UNSIGNED_BYTE$7) {\n data = new Uint8Array(size)\n } else if (type === GL_FLOAT$7) {\n data = data || new Float32Array(size)\n }\n }\n\n // Type check\n check$1.isTypedArray(data, 'data buffer for regl.read() must be a typedarray')\n check$1(data.byteLength >= size, 'data buffer for regl.read() too small')\n\n // Run read pixels\n gl.pixelStorei(GL_PACK_ALIGNMENT, 4)\n gl.readPixels(x, y, width, height, GL_RGBA$3,\n type,\n data)\n\n return data\n }\n\n function readPixelsFBO (options) {\n var result\n framebufferState.setFBO({\n framebuffer: options.framebuffer\n }, function () {\n result = readPixelsImpl(options)\n })\n return result\n }\n\n function readPixels (options) {\n if (!options || !('framebuffer' in options)) {\n return readPixelsImpl(options)\n } else {\n return readPixelsFBO(options)\n }\n }\n\n return readPixels\n}\n\nfunction slice (x) {\n return Array.prototype.slice.call(x)\n}\n\nfunction join (x) {\n return slice(x).join('')\n}\n\nfunction createEnvironment () {\n // Unique variable id counter\n var varCounter = 0\n\n // Linked values are passed from this scope into the generated code block\n // Calling link() passes a value into the generated scope and returns\n // the variable name which it is bound to\n var linkedNames = []\n var linkedValues = []\n function link (value) {\n for (var i = 0; i < linkedValues.length; ++i) {\n if (linkedValues[i] === value) {\n return linkedNames[i]\n }\n }\n\n var name = 'g' + (varCounter++)\n linkedNames.push(name)\n linkedValues.push(value)\n return name\n }\n\n // create a code block\n function block () {\n var code = []\n function push () {\n code.push.apply(code, slice(arguments))\n }\n\n var vars = []\n function def () {\n var name = 'v' + (varCounter++)\n vars.push(name)\n\n if (arguments.length > 0) {\n code.push(name, '=')\n code.push.apply(code, slice(arguments))\n code.push(';')\n }\n\n return name\n }\n\n return extend(push, {\n def: def,\n toString: function () {\n return join([\n (vars.length > 0 ? 'var ' + vars.join(',') + ';' : ''),\n join(code)\n ])\n }\n })\n }\n\n function scope () {\n var entry = block()\n var exit = block()\n\n var entryToString = entry.toString\n var exitToString = exit.toString\n\n function save (object, prop) {\n exit(object, prop, '=', entry.def(object, prop), ';')\n }\n\n return extend(function () {\n entry.apply(entry, slice(arguments))\n }, {\n def: entry.def,\n entry: entry,\n exit: exit,\n save: save,\n set: function (object, prop, value) {\n save(object, prop)\n entry(object, prop, '=', value, ';')\n },\n toString: function () {\n return entryToString() + exitToString()\n }\n })\n }\n\n function conditional () {\n var pred = join(arguments)\n var thenBlock = scope()\n var elseBlock = scope()\n\n var thenToString = thenBlock.toString\n var elseToString = elseBlock.toString\n\n return extend(thenBlock, {\n then: function () {\n thenBlock.apply(thenBlock, slice(arguments))\n return this\n },\n else: function () {\n elseBlock.apply(elseBlock, slice(arguments))\n return this\n },\n toString: function () {\n var elseClause = elseToString()\n if (elseClause) {\n elseClause = 'else{' + elseClause + '}'\n }\n return join([\n 'if(', pred, '){',\n thenToString(),\n '}', elseClause\n ])\n }\n })\n }\n\n // procedure list\n var globalBlock = block()\n var procedures = {}\n function proc (name, count) {\n var args = []\n function arg () {\n var name = 'a' + args.length\n args.push(name)\n return name\n }\n\n count = count || 0\n for (var i = 0; i < count; ++i) {\n arg()\n }\n\n var body = scope()\n var bodyToString = body.toString\n\n var result = procedures[name] = extend(body, {\n arg: arg,\n toString: function () {\n return join([\n 'function(', args.join(), '){',\n bodyToString(),\n '}'\n ])\n }\n })\n\n return result\n }\n\n function compile () {\n var code = ['\"use strict\";',\n globalBlock,\n 'return {']\n Object.keys(procedures).forEach(function (name) {\n code.push('\"', name, '\":', procedures[name].toString(), ',')\n })\n code.push('}')\n var src = join(code)\n .replace(/;/g, ';\\n')\n .replace(/}/g, '}\\n')\n .replace(/{/g, '{\\n')\n var proc = Function.apply(null, linkedNames.concat(src))\n return proc.apply(null, linkedValues)\n }\n\n return {\n global: globalBlock,\n link: link,\n block: block,\n proc: proc,\n scope: scope,\n cond: conditional,\n compile: compile\n }\n}\n\n// \"cute\" names for vector components\nvar CUTE_COMPONENTS = 'xyzw'.split('')\n\nvar GL_UNSIGNED_BYTE$8 = 5121\n\nvar ATTRIB_STATE_POINTER = 1\nvar ATTRIB_STATE_CONSTANT = 2\n\nvar DYN_FUNC$1 = 0\nvar DYN_PROP$1 = 1\nvar DYN_CONTEXT$1 = 2\nvar DYN_STATE$1 = 3\nvar DYN_THUNK = 4\nvar DYN_CONSTANT$1 = 5\nvar DYN_ARRAY$1 = 6\n\nvar S_DITHER = 'dither'\nvar S_BLEND_ENABLE = 'blend.enable'\nvar S_BLEND_COLOR = 'blend.color'\nvar S_BLEND_EQUATION = 'blend.equation'\nvar S_BLEND_FUNC = 'blend.func'\nvar S_DEPTH_ENABLE = 'depth.enable'\nvar S_DEPTH_FUNC = 'depth.func'\nvar S_DEPTH_RANGE = 'depth.range'\nvar S_DEPTH_MASK = 'depth.mask'\nvar S_COLOR_MASK = 'colorMask'\nvar S_CULL_ENABLE = 'cull.enable'\nvar S_CULL_FACE = 'cull.face'\nvar S_FRONT_FACE = 'frontFace'\nvar S_LINE_WIDTH = 'lineWidth'\nvar S_POLYGON_OFFSET_ENABLE = 'polygonOffset.enable'\nvar S_POLYGON_OFFSET_OFFSET = 'polygonOffset.offset'\nvar S_SAMPLE_ALPHA = 'sample.alpha'\nvar S_SAMPLE_ENABLE = 'sample.enable'\nvar S_SAMPLE_COVERAGE = 'sample.coverage'\nvar S_STENCIL_ENABLE = 'stencil.enable'\nvar S_STENCIL_MASK = 'stencil.mask'\nvar S_STENCIL_FUNC = 'stencil.func'\nvar S_STENCIL_OPFRONT = 'stencil.opFront'\nvar S_STENCIL_OPBACK = 'stencil.opBack'\nvar S_SCISSOR_ENABLE = 'scissor.enable'\nvar S_SCISSOR_BOX = 'scissor.box'\nvar S_VIEWPORT = 'viewport'\n\nvar S_PROFILE = 'profile'\n\nvar S_FRAMEBUFFER = 'framebuffer'\nvar S_VERT = 'vert'\nvar S_FRAG = 'frag'\nvar S_ELEMENTS = 'elements'\nvar S_PRIMITIVE = 'primitive'\nvar S_COUNT = 'count'\nvar S_OFFSET = 'offset'\nvar S_INSTANCES = 'instances'\nvar S_VAO = 'vao'\n\nvar SUFFIX_WIDTH = 'Width'\nvar SUFFIX_HEIGHT = 'Height'\n\nvar S_FRAMEBUFFER_WIDTH = S_FRAMEBUFFER + SUFFIX_WIDTH\nvar S_FRAMEBUFFER_HEIGHT = S_FRAMEBUFFER + SUFFIX_HEIGHT\nvar S_VIEWPORT_WIDTH = S_VIEWPORT + SUFFIX_WIDTH\nvar S_VIEWPORT_HEIGHT = S_VIEWPORT + SUFFIX_HEIGHT\nvar S_DRAWINGBUFFER = 'drawingBuffer'\nvar S_DRAWINGBUFFER_WIDTH = S_DRAWINGBUFFER + SUFFIX_WIDTH\nvar S_DRAWINGBUFFER_HEIGHT = S_DRAWINGBUFFER + SUFFIX_HEIGHT\n\nvar NESTED_OPTIONS = [\n S_BLEND_FUNC,\n S_BLEND_EQUATION,\n S_STENCIL_FUNC,\n S_STENCIL_OPFRONT,\n S_STENCIL_OPBACK,\n S_SAMPLE_COVERAGE,\n S_VIEWPORT,\n S_SCISSOR_BOX,\n S_POLYGON_OFFSET_OFFSET\n]\n\nvar GL_ARRAY_BUFFER$2 = 34962\nvar GL_ELEMENT_ARRAY_BUFFER$2 = 34963\n\nvar GL_FRAGMENT_SHADER$1 = 35632\nvar GL_VERTEX_SHADER$1 = 35633\n\nvar GL_TEXTURE_2D$3 = 0x0DE1\nvar GL_TEXTURE_CUBE_MAP$2 = 0x8513\n\nvar GL_CULL_FACE = 0x0B44\nvar GL_BLEND = 0x0BE2\nvar GL_DITHER = 0x0BD0\nvar GL_STENCIL_TEST = 0x0B90\nvar GL_DEPTH_TEST = 0x0B71\nvar GL_SCISSOR_TEST = 0x0C11\nvar GL_POLYGON_OFFSET_FILL = 0x8037\nvar GL_SAMPLE_ALPHA_TO_COVERAGE = 0x809E\nvar GL_SAMPLE_COVERAGE = 0x80A0\n\nvar GL_FLOAT$8 = 5126\nvar GL_FLOAT_VEC2 = 35664\nvar GL_FLOAT_VEC3 = 35665\nvar GL_FLOAT_VEC4 = 35666\nvar GL_INT$3 = 5124\nvar GL_INT_VEC2 = 35667\nvar GL_INT_VEC3 = 35668\nvar GL_INT_VEC4 = 35669\nvar GL_BOOL = 35670\nvar GL_BOOL_VEC2 = 35671\nvar GL_BOOL_VEC3 = 35672\nvar GL_BOOL_VEC4 = 35673\nvar GL_FLOAT_MAT2 = 35674\nvar GL_FLOAT_MAT3 = 35675\nvar GL_FLOAT_MAT4 = 35676\nvar GL_SAMPLER_2D = 35678\nvar GL_SAMPLER_CUBE = 35680\n\nvar GL_TRIANGLES$1 = 4\n\nvar GL_FRONT = 1028\nvar GL_BACK = 1029\nvar GL_CW = 0x0900\nvar GL_CCW = 0x0901\nvar GL_MIN_EXT = 0x8007\nvar GL_MAX_EXT = 0x8008\nvar GL_ALWAYS = 519\nvar GL_KEEP = 7680\nvar GL_ZERO = 0\nvar GL_ONE = 1\nvar GL_FUNC_ADD = 0x8006\nvar GL_LESS = 513\n\nvar GL_FRAMEBUFFER$2 = 0x8D40\nvar GL_COLOR_ATTACHMENT0$2 = 0x8CE0\n\nvar blendFuncs = {\n '0': 0,\n '1': 1,\n 'zero': 0,\n 'one': 1,\n 'src color': 768,\n 'one minus src color': 769,\n 'src alpha': 770,\n 'one minus src alpha': 771,\n 'dst color': 774,\n 'one minus dst color': 775,\n 'dst alpha': 772,\n 'one minus dst alpha': 773,\n 'constant color': 32769,\n 'one minus constant color': 32770,\n 'constant alpha': 32771,\n 'one minus constant alpha': 32772,\n 'src alpha saturate': 776\n}\n\n// There are invalid values for srcRGB and dstRGB. See:\n// https://www.khronos.org/registry/webgl/specs/1.0/#6.13\n// https://github.com/KhronosGroup/WebGL/blob/0d3201f5f7ec3c0060bc1f04077461541f1987b9/conformance-suites/1.0.3/conformance/misc/webgl-specific.html#L56\nvar invalidBlendCombinations = [\n 'constant color, constant alpha',\n 'one minus constant color, constant alpha',\n 'constant color, one minus constant alpha',\n 'one minus constant color, one minus constant alpha',\n 'constant alpha, constant color',\n 'constant alpha, one minus constant color',\n 'one minus constant alpha, constant color',\n 'one minus constant alpha, one minus constant color'\n]\n\nvar compareFuncs = {\n 'never': 512,\n 'less': 513,\n '<': 513,\n 'equal': 514,\n '=': 514,\n '==': 514,\n '===': 514,\n 'lequal': 515,\n '<=': 515,\n 'greater': 516,\n '>': 516,\n 'notequal': 517,\n '!=': 517,\n '!==': 517,\n 'gequal': 518,\n '>=': 518,\n 'always': 519\n}\n\nvar stencilOps = {\n '0': 0,\n 'zero': 0,\n 'keep': 7680,\n 'replace': 7681,\n 'increment': 7682,\n 'decrement': 7683,\n 'increment wrap': 34055,\n 'decrement wrap': 34056,\n 'invert': 5386\n}\n\nvar shaderType = {\n 'frag': GL_FRAGMENT_SHADER$1,\n 'vert': GL_VERTEX_SHADER$1\n}\n\nvar orientationType = {\n 'cw': GL_CW,\n 'ccw': GL_CCW\n}\n\nfunction isBufferArgs (x) {\n return Array.isArray(x) ||\n isTypedArray(x) ||\n isNDArrayLike(x)\n}\n\n// Make sure viewport is processed first\nfunction sortState (state) {\n return state.sort(function (a, b) {\n if (a === S_VIEWPORT) {\n return -1\n } else if (b === S_VIEWPORT) {\n return 1\n }\n return (a < b) ? -1 : 1\n })\n}\n\nfunction Declaration (thisDep, contextDep, propDep, append) {\n this.thisDep = thisDep\n this.contextDep = contextDep\n this.propDep = propDep\n this.append = append\n}\n\nfunction isStatic (decl) {\n return decl && !(decl.thisDep || decl.contextDep || decl.propDep)\n}\n\nfunction createStaticDecl (append) {\n return new Declaration(false, false, false, append)\n}\n\nfunction createDynamicDecl (dyn, append) {\n var type = dyn.type\n if (type === DYN_FUNC$1) {\n var numArgs = dyn.data.length\n return new Declaration(\n true,\n numArgs >= 1,\n numArgs >= 2,\n append)\n } else if (type === DYN_THUNK) {\n var data = dyn.data\n return new Declaration(\n data.thisDep,\n data.contextDep,\n data.propDep,\n append)\n } else if (type === DYN_CONSTANT$1) {\n return new Declaration(\n false,\n false,\n false,\n append)\n } else if (type === DYN_ARRAY$1) {\n var thisDep = false\n var contextDep = false\n var propDep = false\n for (var i = 0; i < dyn.data.length; ++i) {\n var subDyn = dyn.data[i]\n if (subDyn.type === DYN_PROP$1) {\n propDep = true\n } else if (subDyn.type === DYN_CONTEXT$1) {\n contextDep = true\n } else if (subDyn.type === DYN_STATE$1) {\n thisDep = true\n } else if (subDyn.type === DYN_FUNC$1) {\n thisDep = true\n var subArgs = subDyn.data\n if (subArgs >= 1) {\n contextDep = true\n }\n if (subArgs >= 2) {\n propDep = true\n }\n } else if (subDyn.type === DYN_THUNK) {\n thisDep = thisDep || subDyn.data.thisDep\n contextDep = contextDep || subDyn.data.contextDep\n propDep = propDep || subDyn.data.propDep\n }\n }\n return new Declaration(\n thisDep,\n contextDep,\n propDep,\n append)\n } else {\n return new Declaration(\n type === DYN_STATE$1,\n type === DYN_CONTEXT$1,\n type === DYN_PROP$1,\n append)\n }\n}\n\nvar SCOPE_DECL = new Declaration(false, false, false, function () {})\n\nfunction reglCore (\n gl,\n stringStore,\n extensions,\n limits,\n bufferState,\n elementState,\n textureState,\n framebufferState,\n uniformState,\n attributeState,\n shaderState,\n drawState,\n contextState,\n timer,\n config) {\n var AttributeRecord = attributeState.Record\n\n var blendEquations = {\n 'add': 32774,\n 'subtract': 32778,\n 'reverse subtract': 32779\n }\n if (extensions.ext_blend_minmax) {\n blendEquations.min = GL_MIN_EXT\n blendEquations.max = GL_MAX_EXT\n }\n\n var extInstancing = extensions.angle_instanced_arrays\n var extDrawBuffers = extensions.webgl_draw_buffers\n var extVertexArrays = extensions.oes_vertex_array_object\n\n // ===================================================\n // ===================================================\n // WEBGL STATE\n // ===================================================\n // ===================================================\n var currentState = {\n dirty: true,\n profile: config.profile\n }\n var nextState = {}\n var GL_STATE_NAMES = []\n var GL_FLAGS = {}\n var GL_VARIABLES = {}\n\n function propName (name) {\n return name.replace('.', '_')\n }\n\n function stateFlag (sname, cap, init) {\n var name = propName(sname)\n GL_STATE_NAMES.push(sname)\n nextState[name] = currentState[name] = !!init\n GL_FLAGS[name] = cap\n }\n\n function stateVariable (sname, func, init) {\n var name = propName(sname)\n GL_STATE_NAMES.push(sname)\n if (Array.isArray(init)) {\n currentState[name] = init.slice()\n nextState[name] = init.slice()\n } else {\n currentState[name] = nextState[name] = init\n }\n GL_VARIABLES[name] = func\n }\n\n // Dithering\n stateFlag(S_DITHER, GL_DITHER)\n\n // Blending\n stateFlag(S_BLEND_ENABLE, GL_BLEND)\n stateVariable(S_BLEND_COLOR, 'blendColor', [0, 0, 0, 0])\n stateVariable(S_BLEND_EQUATION, 'blendEquationSeparate',\n [GL_FUNC_ADD, GL_FUNC_ADD])\n stateVariable(S_BLEND_FUNC, 'blendFuncSeparate',\n [GL_ONE, GL_ZERO, GL_ONE, GL_ZERO])\n\n // Depth\n stateFlag(S_DEPTH_ENABLE, GL_DEPTH_TEST, true)\n stateVariable(S_DEPTH_FUNC, 'depthFunc', GL_LESS)\n stateVariable(S_DEPTH_RANGE, 'depthRange', [0, 1])\n stateVariable(S_DEPTH_MASK, 'depthMask', true)\n\n // Color mask\n stateVariable(S_COLOR_MASK, S_COLOR_MASK, [true, true, true, true])\n\n // Face culling\n stateFlag(S_CULL_ENABLE, GL_CULL_FACE)\n stateVariable(S_CULL_FACE, 'cullFace', GL_BACK)\n\n // Front face orientation\n stateVariable(S_FRONT_FACE, S_FRONT_FACE, GL_CCW)\n\n // Line width\n stateVariable(S_LINE_WIDTH, S_LINE_WIDTH, 1)\n\n // Polygon offset\n stateFlag(S_POLYGON_OFFSET_ENABLE, GL_POLYGON_OFFSET_FILL)\n stateVariable(S_POLYGON_OFFSET_OFFSET, 'polygonOffset', [0, 0])\n\n // Sample coverage\n stateFlag(S_SAMPLE_ALPHA, GL_SAMPLE_ALPHA_TO_COVERAGE)\n stateFlag(S_SAMPLE_ENABLE, GL_SAMPLE_COVERAGE)\n stateVariable(S_SAMPLE_COVERAGE, 'sampleCoverage', [1, false])\n\n // Stencil\n stateFlag(S_STENCIL_ENABLE, GL_STENCIL_TEST)\n stateVariable(S_STENCIL_MASK, 'stencilMask', -1)\n stateVariable(S_STENCIL_FUNC, 'stencilFunc', [GL_ALWAYS, 0, -1])\n stateVariable(S_STENCIL_OPFRONT, 'stencilOpSeparate',\n [GL_FRONT, GL_KEEP, GL_KEEP, GL_KEEP])\n stateVariable(S_STENCIL_OPBACK, 'stencilOpSeparate',\n [GL_BACK, GL_KEEP, GL_KEEP, GL_KEEP])\n\n // Scissor\n stateFlag(S_SCISSOR_ENABLE, GL_SCISSOR_TEST)\n stateVariable(S_SCISSOR_BOX, 'scissor',\n [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight])\n\n // Viewport\n stateVariable(S_VIEWPORT, S_VIEWPORT,\n [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight])\n\n // ===================================================\n // ===================================================\n // ENVIRONMENT\n // ===================================================\n // ===================================================\n var sharedState = {\n gl: gl,\n context: contextState,\n strings: stringStore,\n next: nextState,\n current: currentState,\n draw: drawState,\n elements: elementState,\n buffer: bufferState,\n shader: shaderState,\n attributes: attributeState.state,\n vao: attributeState,\n uniforms: uniformState,\n framebuffer: framebufferState,\n extensions: extensions,\n\n timer: timer,\n isBufferArgs: isBufferArgs\n }\n\n var sharedConstants = {\n primTypes: primTypes,\n compareFuncs: compareFuncs,\n blendFuncs: blendFuncs,\n blendEquations: blendEquations,\n stencilOps: stencilOps,\n glTypes: glTypes,\n orientationType: orientationType\n }\n\n check$1.optional(function () {\n sharedState.isArrayLike = isArrayLike\n })\n\n if (extDrawBuffers) {\n sharedConstants.backBuffer = [GL_BACK]\n sharedConstants.drawBuffer = loop(limits.maxDrawbuffers, function (i) {\n if (i === 0) {\n return [0]\n }\n return loop(i, function (j) {\n return GL_COLOR_ATTACHMENT0$2 + j\n })\n })\n }\n\n var drawCallCounter = 0\n function createREGLEnvironment () {\n var env = createEnvironment()\n var link = env.link\n var global = env.global\n env.id = drawCallCounter++\n\n env.batchId = '0'\n\n // link shared state\n var SHARED = link(sharedState)\n var shared = env.shared = {\n props: 'a0'\n }\n Object.keys(sharedState).forEach(function (prop) {\n shared[prop] = global.def(SHARED, '.', prop)\n })\n\n // Inject runtime assertion stuff for debug builds\n check$1.optional(function () {\n env.CHECK = link(check$1)\n env.commandStr = check$1.guessCommand()\n env.command = link(env.commandStr)\n env.assert = function (block, pred, message) {\n block(\n 'if(!(', pred, '))',\n this.CHECK, '.commandRaise(', link(message), ',', this.command, ');')\n }\n\n sharedConstants.invalidBlendCombinations = invalidBlendCombinations\n })\n\n // Copy GL state variables over\n var nextVars = env.next = {}\n var currentVars = env.current = {}\n Object.keys(GL_VARIABLES).forEach(function (variable) {\n if (Array.isArray(currentState[variable])) {\n nextVars[variable] = global.def(shared.next, '.', variable)\n currentVars[variable] = global.def(shared.current, '.', variable)\n }\n })\n\n // Initialize shared constants\n var constants = env.constants = {}\n Object.keys(sharedConstants).forEach(function (name) {\n constants[name] = global.def(JSON.stringify(sharedConstants[name]))\n })\n\n // Helper function for calling a block\n env.invoke = function (block, x) {\n switch (x.type) {\n case DYN_FUNC$1:\n var argList = [\n 'this',\n shared.context,\n shared.props,\n env.batchId\n ]\n return block.def(\n link(x.data), '.call(',\n argList.slice(0, Math.max(x.data.length + 1, 4)),\n ')')\n case DYN_PROP$1:\n return block.def(shared.props, x.data)\n case DYN_CONTEXT$1:\n return block.def(shared.context, x.data)\n case DYN_STATE$1:\n return block.def('this', x.data)\n case DYN_THUNK:\n x.data.append(env, block)\n return x.data.ref\n case DYN_CONSTANT$1:\n return x.data.toString()\n case DYN_ARRAY$1:\n return x.data.map(function (y) {\n return env.invoke(block, y)\n })\n }\n }\n\n env.attribCache = {}\n\n var scopeAttribs = {}\n env.scopeAttrib = function (name) {\n var id = stringStore.id(name)\n if (id in scopeAttribs) {\n return scopeAttribs[id]\n }\n var binding = attributeState.scope[id]\n if (!binding) {\n binding = attributeState.scope[id] = new AttributeRecord()\n }\n var result = scopeAttribs[id] = link(binding)\n return result\n }\n\n return env\n }\n\n // ===================================================\n // ===================================================\n // PARSING\n // ===================================================\n // ===================================================\n function parseProfile (options) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n var profileEnable\n if (S_PROFILE in staticOptions) {\n var value = !!staticOptions[S_PROFILE]\n profileEnable = createStaticDecl(function (env, scope) {\n return value\n })\n profileEnable.enable = value\n } else if (S_PROFILE in dynamicOptions) {\n var dyn = dynamicOptions[S_PROFILE]\n profileEnable = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n }\n\n return profileEnable\n }\n\n function parseFramebuffer (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n if (S_FRAMEBUFFER in staticOptions) {\n var framebuffer = staticOptions[S_FRAMEBUFFER]\n if (framebuffer) {\n framebuffer = framebufferState.getFramebuffer(framebuffer)\n check$1.command(framebuffer, 'invalid framebuffer object')\n return createStaticDecl(function (env, block) {\n var FRAMEBUFFER = env.link(framebuffer)\n var shared = env.shared\n block.set(\n shared.framebuffer,\n '.next',\n FRAMEBUFFER)\n var CONTEXT = shared.context\n block.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n FRAMEBUFFER + '.width')\n block.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n FRAMEBUFFER + '.height')\n return FRAMEBUFFER\n })\n } else {\n return createStaticDecl(function (env, scope) {\n var shared = env.shared\n scope.set(\n shared.framebuffer,\n '.next',\n 'null')\n var CONTEXT = shared.context\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n CONTEXT + '.' + S_DRAWINGBUFFER_WIDTH)\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n CONTEXT + '.' + S_DRAWINGBUFFER_HEIGHT)\n return 'null'\n })\n }\n } else if (S_FRAMEBUFFER in dynamicOptions) {\n var dyn = dynamicOptions[S_FRAMEBUFFER]\n return createDynamicDecl(dyn, function (env, scope) {\n var FRAMEBUFFER_FUNC = env.invoke(scope, dyn)\n var shared = env.shared\n var FRAMEBUFFER_STATE = shared.framebuffer\n var FRAMEBUFFER = scope.def(\n FRAMEBUFFER_STATE, '.getFramebuffer(', FRAMEBUFFER_FUNC, ')')\n\n check$1.optional(function () {\n env.assert(scope,\n '!' + FRAMEBUFFER_FUNC + '||' + FRAMEBUFFER,\n 'invalid framebuffer object')\n })\n\n scope.set(\n FRAMEBUFFER_STATE,\n '.next',\n FRAMEBUFFER)\n var CONTEXT = shared.context\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_WIDTH,\n FRAMEBUFFER + '?' + FRAMEBUFFER + '.width:' +\n CONTEXT + '.' + S_DRAWINGBUFFER_WIDTH)\n scope.set(\n CONTEXT,\n '.' + S_FRAMEBUFFER_HEIGHT,\n FRAMEBUFFER +\n '?' + FRAMEBUFFER + '.height:' +\n CONTEXT + '.' + S_DRAWINGBUFFER_HEIGHT)\n return FRAMEBUFFER\n })\n } else {\n return null\n }\n }\n\n function parseViewportScissor (options, framebuffer, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n function parseBox (param) {\n if (param in staticOptions) {\n var box = staticOptions[param]\n check$1.commandType(box, 'object', 'invalid ' + param, env.commandStr)\n\n var isStatic = true\n var x = box.x | 0\n var y = box.y | 0\n var w, h\n if ('width' in box) {\n w = box.width | 0\n check$1.command(w >= 0, 'invalid ' + param, env.commandStr)\n } else {\n isStatic = false\n }\n if ('height' in box) {\n h = box.height | 0\n check$1.command(h >= 0, 'invalid ' + param, env.commandStr)\n } else {\n isStatic = false\n }\n\n return new Declaration(\n !isStatic && framebuffer && framebuffer.thisDep,\n !isStatic && framebuffer && framebuffer.contextDep,\n !isStatic && framebuffer && framebuffer.propDep,\n function (env, scope) {\n var CONTEXT = env.shared.context\n var BOX_W = w\n if (!('width' in box)) {\n BOX_W = scope.def(CONTEXT, '.', S_FRAMEBUFFER_WIDTH, '-', x)\n }\n var BOX_H = h\n if (!('height' in box)) {\n BOX_H = scope.def(CONTEXT, '.', S_FRAMEBUFFER_HEIGHT, '-', y)\n }\n return [x, y, BOX_W, BOX_H]\n })\n } else if (param in dynamicOptions) {\n var dynBox = dynamicOptions[param]\n var result = createDynamicDecl(dynBox, function (env, scope) {\n var BOX = env.invoke(scope, dynBox)\n\n check$1.optional(function () {\n env.assert(scope,\n BOX + '&&typeof ' + BOX + '===\"object\"',\n 'invalid ' + param)\n })\n\n var CONTEXT = env.shared.context\n var BOX_X = scope.def(BOX, '.x|0')\n var BOX_Y = scope.def(BOX, '.y|0')\n var BOX_W = scope.def(\n '\"width\" in ', BOX, '?', BOX, '.width|0:',\n '(', CONTEXT, '.', S_FRAMEBUFFER_WIDTH, '-', BOX_X, ')')\n var BOX_H = scope.def(\n '\"height\" in ', BOX, '?', BOX, '.height|0:',\n '(', CONTEXT, '.', S_FRAMEBUFFER_HEIGHT, '-', BOX_Y, ')')\n\n check$1.optional(function () {\n env.assert(scope,\n BOX_W + '>=0&&' +\n BOX_H + '>=0',\n 'invalid ' + param)\n })\n\n return [BOX_X, BOX_Y, BOX_W, BOX_H]\n })\n if (framebuffer) {\n result.thisDep = result.thisDep || framebuffer.thisDep\n result.contextDep = result.contextDep || framebuffer.contextDep\n result.propDep = result.propDep || framebuffer.propDep\n }\n return result\n } else if (framebuffer) {\n return new Declaration(\n framebuffer.thisDep,\n framebuffer.contextDep,\n framebuffer.propDep,\n function (env, scope) {\n var CONTEXT = env.shared.context\n return [\n 0, 0,\n scope.def(CONTEXT, '.', S_FRAMEBUFFER_WIDTH),\n scope.def(CONTEXT, '.', S_FRAMEBUFFER_HEIGHT)]\n })\n } else {\n return null\n }\n }\n\n var viewport = parseBox(S_VIEWPORT)\n\n if (viewport) {\n var prevViewport = viewport\n viewport = new Declaration(\n viewport.thisDep,\n viewport.contextDep,\n viewport.propDep,\n function (env, scope) {\n var VIEWPORT = prevViewport.append(env, scope)\n var CONTEXT = env.shared.context\n scope.set(\n CONTEXT,\n '.' + S_VIEWPORT_WIDTH,\n VIEWPORT[2])\n scope.set(\n CONTEXT,\n '.' + S_VIEWPORT_HEIGHT,\n VIEWPORT[3])\n return VIEWPORT\n })\n }\n\n return {\n viewport: viewport,\n scissor_box: parseBox(S_SCISSOR_BOX)\n }\n }\n\n function parseAttribLocations (options, attributes) {\n var staticOptions = options.static\n var staticProgram =\n typeof staticOptions[S_FRAG] === 'string' &&\n typeof staticOptions[S_VERT] === 'string'\n if (staticProgram) {\n if (Object.keys(attributes.dynamic).length > 0) {\n return null\n }\n var staticAttributes = attributes.static\n var sAttributes = Object.keys(staticAttributes)\n if (sAttributes.length > 0 && typeof staticAttributes[sAttributes[0]] === 'number') {\n var bindings = []\n for (var i = 0; i < sAttributes.length; ++i) {\n check$1(typeof staticAttributes[sAttributes[i]] === 'number', 'must specify all vertex attribute locations when using vaos')\n bindings.push([staticAttributes[sAttributes[i]] | 0, sAttributes[i]])\n }\n return bindings\n }\n }\n return null\n }\n\n function parseProgram (options, env, attribLocations) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n function parseShader (name) {\n if (name in staticOptions) {\n var id = stringStore.id(staticOptions[name])\n check$1.optional(function () {\n shaderState.shader(shaderType[name], id, check$1.guessCommand())\n })\n var result = createStaticDecl(function () {\n return id\n })\n result.id = id\n return result\n } else if (name in dynamicOptions) {\n var dyn = dynamicOptions[name]\n return createDynamicDecl(dyn, function (env, scope) {\n var str = env.invoke(scope, dyn)\n var id = scope.def(env.shared.strings, '.id(', str, ')')\n check$1.optional(function () {\n scope(\n env.shared.shader, '.shader(',\n shaderType[name], ',',\n id, ',',\n env.command, ');')\n })\n return id\n })\n }\n return null\n }\n\n var frag = parseShader(S_FRAG)\n var vert = parseShader(S_VERT)\n\n var program = null\n var progVar\n if (isStatic(frag) && isStatic(vert)) {\n program = shaderState.program(vert.id, frag.id, null, attribLocations)\n progVar = createStaticDecl(function (env, scope) {\n return env.link(program)\n })\n } else {\n progVar = new Declaration(\n (frag && frag.thisDep) || (vert && vert.thisDep),\n (frag && frag.contextDep) || (vert && vert.contextDep),\n (frag && frag.propDep) || (vert && vert.propDep),\n function (env, scope) {\n var SHADER_STATE = env.shared.shader\n var fragId\n if (frag) {\n fragId = frag.append(env, scope)\n } else {\n fragId = scope.def(SHADER_STATE, '.', S_FRAG)\n }\n var vertId\n if (vert) {\n vertId = vert.append(env, scope)\n } else {\n vertId = scope.def(SHADER_STATE, '.', S_VERT)\n }\n var progDef = SHADER_STATE + '.program(' + vertId + ',' + fragId\n check$1.optional(function () {\n progDef += ',' + env.command\n })\n return scope.def(progDef + ')')\n })\n }\n\n return {\n frag: frag,\n vert: vert,\n progVar: progVar,\n program: program\n }\n }\n\n function parseDraw (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n // TODO: should use VAO to get default values for offset properties\n // should move vao parse into here and out of the old stuff\n\n var staticDraw = {}\n var vaoActive = false\n\n function parseVAO () {\n if (S_VAO in staticOptions) {\n var vao = staticOptions[S_VAO]\n if (vao !== null && attributeState.getVAO(vao) === null) {\n vao = attributeState.createVAO(vao)\n }\n\n vaoActive = true\n staticDraw.vao = vao\n\n return createStaticDecl(function (env) {\n var vaoRef = attributeState.getVAO(vao)\n if (vaoRef) {\n return env.link(vaoRef)\n } else {\n return 'null'\n }\n })\n } else if (S_VAO in dynamicOptions) {\n vaoActive = true\n var dyn = dynamicOptions[S_VAO]\n return createDynamicDecl(dyn, function (env, scope) {\n var vaoRef = env.invoke(scope, dyn)\n return scope.def(env.shared.vao + '.getVAO(' + vaoRef + ')')\n })\n }\n return null\n }\n\n var vao = parseVAO()\n\n var elementsActive = false\n\n function parseElements () {\n if (S_ELEMENTS in staticOptions) {\n var elements = staticOptions[S_ELEMENTS]\n staticDraw.elements = elements\n if (isBufferArgs(elements)) {\n var e = staticDraw.elements = elementState.create(elements, true)\n elements = elementState.getElements(e)\n elementsActive = true\n } else if (elements) {\n elements = elementState.getElements(elements)\n elementsActive = true\n check$1.command(elements, 'invalid elements', env.commandStr)\n }\n\n var result = createStaticDecl(function (env, scope) {\n if (elements) {\n var result = env.link(elements)\n env.ELEMENTS = result\n return result\n }\n env.ELEMENTS = null\n return null\n })\n result.value = elements\n return result\n } else if (S_ELEMENTS in dynamicOptions) {\n elementsActive = true\n\n var dyn = dynamicOptions[S_ELEMENTS]\n return createDynamicDecl(dyn, function (env, scope) {\n var shared = env.shared\n\n var IS_BUFFER_ARGS = shared.isBufferArgs\n var ELEMENT_STATE = shared.elements\n\n var elementDefn = env.invoke(scope, dyn)\n var elements = scope.def('null')\n var elementStream = scope.def(IS_BUFFER_ARGS, '(', elementDefn, ')')\n\n var ifte = env.cond(elementStream)\n .then(elements, '=', ELEMENT_STATE, '.createStream(', elementDefn, ');')\n .else(elements, '=', ELEMENT_STATE, '.getElements(', elementDefn, ');')\n\n check$1.optional(function () {\n env.assert(ifte.else,\n '!' + elementDefn + '||' + elements,\n 'invalid elements')\n })\n\n scope.entry(ifte)\n scope.exit(\n env.cond(elementStream)\n .then(ELEMENT_STATE, '.destroyStream(', elements, ');'))\n\n env.ELEMENTS = elements\n\n return elements\n })\n } else if (vaoActive) {\n return new Declaration(\n vao.thisDep,\n vao.contextDep,\n vao.propDep,\n function (env, scope) {\n return scope.def(env.shared.vao + '.currentVAO?' + env.shared.elements + '.getElements(' + env.shared.vao + '.currentVAO.elements):null')\n })\n }\n return null\n }\n\n var elements = parseElements()\n\n function parsePrimitive () {\n if (S_PRIMITIVE in staticOptions) {\n var primitive = staticOptions[S_PRIMITIVE]\n staticDraw.primitive = primitive\n check$1.commandParameter(primitive, primTypes, 'invalid primitve', env.commandStr)\n return createStaticDecl(function (env, scope) {\n return primTypes[primitive]\n })\n } else if (S_PRIMITIVE in dynamicOptions) {\n var dynPrimitive = dynamicOptions[S_PRIMITIVE]\n return createDynamicDecl(dynPrimitive, function (env, scope) {\n var PRIM_TYPES = env.constants.primTypes\n var prim = env.invoke(scope, dynPrimitive)\n check$1.optional(function () {\n env.assert(scope,\n prim + ' in ' + PRIM_TYPES,\n 'invalid primitive, must be one of ' + Object.keys(primTypes))\n })\n return scope.def(PRIM_TYPES, '[', prim, ']')\n })\n } else if (elementsActive) {\n if (isStatic(elements)) {\n if (elements.value) {\n return createStaticDecl(function (env, scope) {\n return scope.def(env.ELEMENTS, '.primType')\n })\n } else {\n return createStaticDecl(function () {\n return GL_TRIANGLES$1\n })\n }\n } else {\n return new Declaration(\n elements.thisDep,\n elements.contextDep,\n elements.propDep,\n function (env, scope) {\n var elements = env.ELEMENTS\n return scope.def(elements, '?', elements, '.primType:', GL_TRIANGLES$1)\n })\n }\n } else if (vaoActive) {\n return new Declaration(\n vao.thisDep,\n vao.contextDep,\n vao.propDep,\n function (env, scope) {\n return scope.def(env.shared.vao + '.currentVAO?' + env.shared.vao + '.currentVAO.primitive:' + GL_TRIANGLES$1)\n })\n }\n return null\n }\n\n function parseParam (param, isOffset) {\n if (param in staticOptions) {\n var value = staticOptions[param] | 0\n if (isOffset) {\n staticDraw.offset = value\n } else {\n staticDraw.instances = value\n }\n check$1.command(!isOffset || value >= 0, 'invalid ' + param, env.commandStr)\n return createStaticDecl(function (env, scope) {\n if (isOffset) {\n env.OFFSET = value\n }\n return value\n })\n } else if (param in dynamicOptions) {\n var dynValue = dynamicOptions[param]\n return createDynamicDecl(dynValue, function (env, scope) {\n var result = env.invoke(scope, dynValue)\n if (isOffset) {\n env.OFFSET = result\n check$1.optional(function () {\n env.assert(scope,\n result + '>=0',\n 'invalid ' + param)\n })\n }\n return result\n })\n } else if (isOffset) {\n if (elementsActive) {\n return createStaticDecl(function (env, scope) {\n env.OFFSET = 0\n return 0\n })\n } else if (vaoActive) {\n return new Declaration(\n vao.thisDep,\n vao.contextDep,\n vao.propDep,\n function (env, scope) {\n return scope.def(env.shared.vao + '.currentVAO?' + env.shared.vao + '.currentVAO.offset:0')\n })\n }\n } else if (vaoActive) {\n return new Declaration(\n vao.thisDep,\n vao.contextDep,\n vao.propDep,\n function (env, scope) {\n return scope.def(env.shared.vao + '.currentVAO?' + env.shared.vao + '.currentVAO.instances:-1')\n })\n }\n return null\n }\n\n var OFFSET = parseParam(S_OFFSET, true)\n\n function parseVertCount () {\n if (S_COUNT in staticOptions) {\n var count = staticOptions[S_COUNT] | 0\n staticDraw.count = count\n check$1.command(\n typeof count === 'number' && count >= 0, 'invalid vertex count', env.commandStr)\n return createStaticDecl(function () {\n return count\n })\n } else if (S_COUNT in dynamicOptions) {\n var dynCount = dynamicOptions[S_COUNT]\n return createDynamicDecl(dynCount, function (env, scope) {\n var result = env.invoke(scope, dynCount)\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + result + '===\"number\"&&' +\n result + '>=0&&' +\n result + '===(' + result + '|0)',\n 'invalid vertex count')\n })\n return result\n })\n } else if (elementsActive) {\n if (isStatic(elements)) {\n if (elements) {\n if (OFFSET) {\n return new Declaration(\n OFFSET.thisDep,\n OFFSET.contextDep,\n OFFSET.propDep,\n function (env, scope) {\n var result = scope.def(\n env.ELEMENTS, '.vertCount-', env.OFFSET)\n\n check$1.optional(function () {\n env.assert(scope,\n result + '>=0',\n 'invalid vertex offset/element buffer too small')\n })\n\n return result\n })\n } else {\n return createStaticDecl(function (env, scope) {\n return scope.def(env.ELEMENTS, '.vertCount')\n })\n }\n } else {\n var result = createStaticDecl(function () {\n return -1\n })\n check$1.optional(function () {\n result.MISSING = true\n })\n return result\n }\n } else {\n var variable = new Declaration(\n elements.thisDep || OFFSET.thisDep,\n elements.contextDep || OFFSET.contextDep,\n elements.propDep || OFFSET.propDep,\n function (env, scope) {\n var elements = env.ELEMENTS\n if (env.OFFSET) {\n return scope.def(elements, '?', elements, '.vertCount-',\n env.OFFSET, ':-1')\n }\n return scope.def(elements, '?', elements, '.vertCount:-1')\n })\n check$1.optional(function () {\n variable.DYNAMIC = true\n })\n return variable\n }\n } else if (vaoActive) {\n var countVariable = new Declaration(\n vao.thisDep,\n vao.contextDep,\n vao.propDep,\n function (env, scope) {\n return scope.def(env.shared.vao, '.currentVAO?', env.shared.vao, '.currentVAO.count:-1')\n })\n return countVariable\n }\n return null\n }\n\n var primitive = parsePrimitive()\n var count = parseVertCount()\n var instances = parseParam(S_INSTANCES, false)\n\n return {\n elements: elements,\n primitive: primitive,\n count: count,\n instances: instances,\n offset: OFFSET,\n vao: vao,\n\n vaoActive: vaoActive,\n elementsActive: elementsActive,\n\n // static draw props\n static: staticDraw\n }\n }\n\n function parseGLState (options, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n var STATE = {}\n\n GL_STATE_NAMES.forEach(function (prop) {\n var param = propName(prop)\n\n function parseParam (parseStatic, parseDynamic) {\n if (prop in staticOptions) {\n var value = parseStatic(staticOptions[prop])\n STATE[param] = createStaticDecl(function () {\n return value\n })\n } else if (prop in dynamicOptions) {\n var dyn = dynamicOptions[prop]\n STATE[param] = createDynamicDecl(dyn, function (env, scope) {\n return parseDynamic(env, scope, env.invoke(scope, dyn))\n })\n }\n }\n\n switch (prop) {\n case S_CULL_ENABLE:\n case S_BLEND_ENABLE:\n case S_DITHER:\n case S_STENCIL_ENABLE:\n case S_DEPTH_ENABLE:\n case S_SCISSOR_ENABLE:\n case S_POLYGON_OFFSET_ENABLE:\n case S_SAMPLE_ALPHA:\n case S_SAMPLE_ENABLE:\n case S_DEPTH_MASK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'boolean', prop, env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"boolean\"',\n 'invalid flag ' + prop, env.commandStr)\n })\n return value\n })\n\n case S_DEPTH_FUNC:\n return parseParam(\n function (value) {\n check$1.commandParameter(value, compareFuncs, 'invalid ' + prop, env.commandStr)\n return compareFuncs[value]\n },\n function (env, scope, value) {\n var COMPARE_FUNCS = env.constants.compareFuncs\n check$1.optional(function () {\n env.assert(scope,\n value + ' in ' + COMPARE_FUNCS,\n 'invalid ' + prop + ', must be one of ' + Object.keys(compareFuncs))\n })\n return scope.def(COMPARE_FUNCS, '[', value, ']')\n })\n\n case S_DEPTH_RANGE:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) &&\n value.length === 2 &&\n typeof value[0] === 'number' &&\n typeof value[1] === 'number' &&\n value[0] <= value[1],\n 'depth range is 2d array',\n env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===2&&' +\n 'typeof ' + value + '[0]===\"number\"&&' +\n 'typeof ' + value + '[1]===\"number\"&&' +\n value + '[0]<=' + value + '[1]',\n 'depth range must be a 2d array')\n })\n\n var Z_NEAR = scope.def('+', value, '[0]')\n var Z_FAR = scope.def('+', value, '[1]')\n return [Z_NEAR, Z_FAR]\n })\n\n case S_BLEND_FUNC:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', 'blend.func', env.commandStr)\n var srcRGB = ('srcRGB' in value ? value.srcRGB : value.src)\n var srcAlpha = ('srcAlpha' in value ? value.srcAlpha : value.src)\n var dstRGB = ('dstRGB' in value ? value.dstRGB : value.dst)\n var dstAlpha = ('dstAlpha' in value ? value.dstAlpha : value.dst)\n check$1.commandParameter(srcRGB, blendFuncs, param + '.srcRGB', env.commandStr)\n check$1.commandParameter(srcAlpha, blendFuncs, param + '.srcAlpha', env.commandStr)\n check$1.commandParameter(dstRGB, blendFuncs, param + '.dstRGB', env.commandStr)\n check$1.commandParameter(dstAlpha, blendFuncs, param + '.dstAlpha', env.commandStr)\n\n check$1.command(\n (invalidBlendCombinations.indexOf(srcRGB + ', ' + dstRGB) === -1),\n 'unallowed blending combination (srcRGB, dstRGB) = (' + srcRGB + ', ' + dstRGB + ')', env.commandStr)\n\n return [\n blendFuncs[srcRGB],\n blendFuncs[dstRGB],\n blendFuncs[srcAlpha],\n blendFuncs[dstAlpha]\n ]\n },\n function (env, scope, value) {\n var BLEND_FUNCS = env.constants.blendFuncs\n\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid blend func, must be an object')\n })\n\n function read (prefix, suffix) {\n var func = scope.def(\n '\"', prefix, suffix, '\" in ', value,\n '?', value, '.', prefix, suffix,\n ':', value, '.', prefix)\n\n check$1.optional(function () {\n env.assert(scope,\n func + ' in ' + BLEND_FUNCS,\n 'invalid ' + prop + '.' + prefix + suffix + ', must be one of ' + Object.keys(blendFuncs))\n })\n\n return func\n }\n\n var srcRGB = read('src', 'RGB')\n var dstRGB = read('dst', 'RGB')\n\n check$1.optional(function () {\n var INVALID_BLEND_COMBINATIONS = env.constants.invalidBlendCombinations\n\n env.assert(scope,\n INVALID_BLEND_COMBINATIONS +\n '.indexOf(' + srcRGB + '+\", \"+' + dstRGB + ') === -1 ',\n 'unallowed blending combination for (srcRGB, dstRGB)'\n )\n })\n\n var SRC_RGB = scope.def(BLEND_FUNCS, '[', srcRGB, ']')\n var SRC_ALPHA = scope.def(BLEND_FUNCS, '[', read('src', 'Alpha'), ']')\n var DST_RGB = scope.def(BLEND_FUNCS, '[', dstRGB, ']')\n var DST_ALPHA = scope.def(BLEND_FUNCS, '[', read('dst', 'Alpha'), ']')\n\n return [SRC_RGB, DST_RGB, SRC_ALPHA, DST_ALPHA]\n })\n\n case S_BLEND_EQUATION:\n return parseParam(\n function (value) {\n if (typeof value === 'string') {\n check$1.commandParameter(value, blendEquations, 'invalid ' + prop, env.commandStr)\n return [\n blendEquations[value],\n blendEquations[value]\n ]\n } else if (typeof value === 'object') {\n check$1.commandParameter(\n value.rgb, blendEquations, prop + '.rgb', env.commandStr)\n check$1.commandParameter(\n value.alpha, blendEquations, prop + '.alpha', env.commandStr)\n return [\n blendEquations[value.rgb],\n blendEquations[value.alpha]\n ]\n } else {\n check$1.commandRaise('invalid blend.equation', env.commandStr)\n }\n },\n function (env, scope, value) {\n var BLEND_EQUATIONS = env.constants.blendEquations\n\n var RGB = scope.def()\n var ALPHA = scope.def()\n\n var ifte = env.cond('typeof ', value, '===\"string\"')\n\n check$1.optional(function () {\n function checkProp (block, name, value) {\n env.assert(block,\n value + ' in ' + BLEND_EQUATIONS,\n 'invalid ' + name + ', must be one of ' + Object.keys(blendEquations))\n }\n checkProp(ifte.then, prop, value)\n\n env.assert(ifte.else,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n checkProp(ifte.else, prop + '.rgb', value + '.rgb')\n checkProp(ifte.else, prop + '.alpha', value + '.alpha')\n })\n\n ifte.then(\n RGB, '=', ALPHA, '=', BLEND_EQUATIONS, '[', value, '];')\n ifte.else(\n RGB, '=', BLEND_EQUATIONS, '[', value, '.rgb];',\n ALPHA, '=', BLEND_EQUATIONS, '[', value, '.alpha];')\n\n scope(ifte)\n\n return [RGB, ALPHA]\n })\n\n case S_BLEND_COLOR:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) &&\n value.length === 4,\n 'blend.color must be a 4d array', env.commandStr)\n return loop(4, function (i) {\n return +value[i]\n })\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===4',\n 'blend.color must be a 4d array')\n })\n return loop(4, function (i) {\n return scope.def('+', value, '[', i, ']')\n })\n })\n\n case S_STENCIL_MASK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'number', param, env.commandStr)\n return value | 0\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"number\"',\n 'invalid stencil.mask')\n })\n return scope.def(value, '|0')\n })\n\n case S_STENCIL_FUNC:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var cmp = value.cmp || 'keep'\n var ref = value.ref || 0\n var mask = 'mask' in value ? value.mask : -1\n check$1.commandParameter(cmp, compareFuncs, prop + '.cmp', env.commandStr)\n check$1.commandType(ref, 'number', prop + '.ref', env.commandStr)\n check$1.commandType(mask, 'number', prop + '.mask', env.commandStr)\n return [\n compareFuncs[cmp],\n ref,\n mask\n ]\n },\n function (env, scope, value) {\n var COMPARE_FUNCS = env.constants.compareFuncs\n check$1.optional(function () {\n function assert () {\n env.assert(scope,\n Array.prototype.join.call(arguments, ''),\n 'invalid stencil.func')\n }\n assert(value + '&&typeof ', value, '===\"object\"')\n assert('!(\"cmp\" in ', value, ')||(',\n value, '.cmp in ', COMPARE_FUNCS, ')')\n })\n var cmp = scope.def(\n '\"cmp\" in ', value,\n '?', COMPARE_FUNCS, '[', value, '.cmp]',\n ':', GL_KEEP)\n var ref = scope.def(value, '.ref|0')\n var mask = scope.def(\n '\"mask\" in ', value,\n '?', value, '.mask|0:-1')\n return [cmp, ref, mask]\n })\n\n case S_STENCIL_OPFRONT:\n case S_STENCIL_OPBACK:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var fail = value.fail || 'keep'\n var zfail = value.zfail || 'keep'\n var zpass = value.zpass || 'keep'\n check$1.commandParameter(fail, stencilOps, prop + '.fail', env.commandStr)\n check$1.commandParameter(zfail, stencilOps, prop + '.zfail', env.commandStr)\n check$1.commandParameter(zpass, stencilOps, prop + '.zpass', env.commandStr)\n return [\n prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT,\n stencilOps[fail],\n stencilOps[zfail],\n stencilOps[zpass]\n ]\n },\n function (env, scope, value) {\n var STENCIL_OPS = env.constants.stencilOps\n\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n })\n\n function read (name) {\n check$1.optional(function () {\n env.assert(scope,\n '!(\"' + name + '\" in ' + value + ')||' +\n '(' + value + '.' + name + ' in ' + STENCIL_OPS + ')',\n 'invalid ' + prop + '.' + name + ', must be one of ' + Object.keys(stencilOps))\n })\n\n return scope.def(\n '\"', name, '\" in ', value,\n '?', STENCIL_OPS, '[', value, '.', name, ']:',\n GL_KEEP)\n }\n\n return [\n prop === S_STENCIL_OPBACK ? GL_BACK : GL_FRONT,\n read('fail'),\n read('zfail'),\n read('zpass')\n ]\n })\n\n case S_POLYGON_OFFSET_OFFSET:\n return parseParam(\n function (value) {\n check$1.commandType(value, 'object', param, env.commandStr)\n var factor = value.factor | 0\n var units = value.units | 0\n check$1.commandType(factor, 'number', param + '.factor', env.commandStr)\n check$1.commandType(units, 'number', param + '.units', env.commandStr)\n return [factor, units]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid ' + prop)\n })\n\n var FACTOR = scope.def(value, '.factor|0')\n var UNITS = scope.def(value, '.units|0')\n\n return [FACTOR, UNITS]\n })\n\n case S_CULL_FACE:\n return parseParam(\n function (value) {\n var face = 0\n if (value === 'front') {\n face = GL_FRONT\n } else if (value === 'back') {\n face = GL_BACK\n }\n check$1.command(!!face, param, env.commandStr)\n return face\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '===\"front\"||' +\n value + '===\"back\"',\n 'invalid cull.face')\n })\n return scope.def(value, '===\"front\"?', GL_FRONT, ':', GL_BACK)\n })\n\n case S_LINE_WIDTH:\n return parseParam(\n function (value) {\n check$1.command(\n typeof value === 'number' &&\n value >= limits.lineWidthDims[0] &&\n value <= limits.lineWidthDims[1],\n 'invalid line width, must be a positive number between ' +\n limits.lineWidthDims[0] + ' and ' + limits.lineWidthDims[1], env.commandStr)\n return value\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n 'typeof ' + value + '===\"number\"&&' +\n value + '>=' + limits.lineWidthDims[0] + '&&' +\n value + '<=' + limits.lineWidthDims[1],\n 'invalid line width')\n })\n\n return value\n })\n\n case S_FRONT_FACE:\n return parseParam(\n function (value) {\n check$1.commandParameter(value, orientationType, param, env.commandStr)\n return orientationType[value]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '===\"cw\"||' +\n value + '===\"ccw\"',\n 'invalid frontFace, must be one of cw,ccw')\n })\n return scope.def(value + '===\"cw\"?' + GL_CW + ':' + GL_CCW)\n })\n\n case S_COLOR_MASK:\n return parseParam(\n function (value) {\n check$1.command(\n isArrayLike(value) && value.length === 4,\n 'color.mask must be length 4 array', env.commandStr)\n return value.map(function (v) { return !!v })\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n env.shared.isArrayLike + '(' + value + ')&&' +\n value + '.length===4',\n 'invalid color.mask')\n })\n return loop(4, function (i) {\n return '!!' + value + '[' + i + ']'\n })\n })\n\n case S_SAMPLE_COVERAGE:\n return parseParam(\n function (value) {\n check$1.command(typeof value === 'object' && value, param, env.commandStr)\n var sampleValue = 'value' in value ? value.value : 1\n var sampleInvert = !!value.invert\n check$1.command(\n typeof sampleValue === 'number' &&\n sampleValue >= 0 && sampleValue <= 1,\n 'sample.coverage.value must be a number between 0 and 1', env.commandStr)\n return [sampleValue, sampleInvert]\n },\n function (env, scope, value) {\n check$1.optional(function () {\n env.assert(scope,\n value + '&&typeof ' + value + '===\"object\"',\n 'invalid sample.coverage')\n })\n var VALUE = scope.def(\n '\"value\" in ', value, '?+', value, '.value:1')\n var INVERT = scope.def('!!', value, '.invert')\n return [VALUE, INVERT]\n })\n }\n })\n\n return STATE\n }\n\n function parseUniforms (uniforms, env) {\n var staticUniforms = uniforms.static\n var dynamicUniforms = uniforms.dynamic\n\n var UNIFORMS = {}\n\n Object.keys(staticUniforms).forEach(function (name) {\n var value = staticUniforms[name]\n var result\n if (typeof value === 'number' ||\n typeof value === 'boolean') {\n result = createStaticDecl(function () {\n return value\n })\n } else if (typeof value === 'function') {\n var reglType = value._reglType\n if (reglType === 'texture2d' ||\n reglType === 'textureCube') {\n result = createStaticDecl(function (env) {\n return env.link(value)\n })\n } else if (reglType === 'framebuffer' ||\n reglType === 'framebufferCube') {\n check$1.command(value.color.length > 0,\n 'missing color attachment for framebuffer sent to uniform \"' + name + '\"', env.commandStr)\n result = createStaticDecl(function (env) {\n return env.link(value.color[0])\n })\n } else {\n check$1.commandRaise('invalid data for uniform \"' + name + '\"', env.commandStr)\n }\n } else if (isArrayLike(value)) {\n result = createStaticDecl(function (env) {\n var ITEM = env.global.def('[',\n loop(value.length, function (i) {\n check$1.command(\n typeof value[i] === 'number' ||\n typeof value[i] === 'boolean',\n 'invalid uniform ' + name, env.commandStr)\n return value[i]\n }), ']')\n return ITEM\n })\n } else {\n check$1.commandRaise('invalid or missing data for uniform \"' + name + '\"', env.commandStr)\n }\n result.value = value\n UNIFORMS[name] = result\n })\n\n Object.keys(dynamicUniforms).forEach(function (key) {\n var dyn = dynamicUniforms[key]\n UNIFORMS[key] = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n })\n\n return UNIFORMS\n }\n\n function parseAttributes (attributes, env) {\n var staticAttributes = attributes.static\n var dynamicAttributes = attributes.dynamic\n\n var attributeDefs = {}\n\n Object.keys(staticAttributes).forEach(function (attribute) {\n var value = staticAttributes[attribute]\n var id = stringStore.id(attribute)\n\n var record = new AttributeRecord()\n if (isBufferArgs(value)) {\n record.state = ATTRIB_STATE_POINTER\n record.buffer = bufferState.getBuffer(\n bufferState.create(value, GL_ARRAY_BUFFER$2, false, true))\n record.type = 0\n } else {\n var buffer = bufferState.getBuffer(value)\n if (buffer) {\n record.state = ATTRIB_STATE_POINTER\n record.buffer = buffer\n record.type = 0\n } else {\n check$1.command(typeof value === 'object' && value,\n 'invalid data for attribute ' + attribute, env.commandStr)\n if ('constant' in value) {\n var constant = value.constant\n record.buffer = 'null'\n record.state = ATTRIB_STATE_CONSTANT\n if (typeof constant === 'number') {\n record.x = constant\n } else {\n check$1.command(\n isArrayLike(constant) &&\n constant.length > 0 &&\n constant.length <= 4,\n 'invalid constant for attribute ' + attribute, env.commandStr)\n CUTE_COMPONENTS.forEach(function (c, i) {\n if (i < constant.length) {\n record[c] = constant[i]\n }\n })\n }\n } else {\n if (isBufferArgs(value.buffer)) {\n buffer = bufferState.getBuffer(\n bufferState.create(value.buffer, GL_ARRAY_BUFFER$2, false, true))\n } else {\n buffer = bufferState.getBuffer(value.buffer)\n }\n check$1.command(!!buffer, 'missing buffer for attribute \"' + attribute + '\"', env.commandStr)\n\n var offset = value.offset | 0\n check$1.command(offset >= 0,\n 'invalid offset for attribute \"' + attribute + '\"', env.commandStr)\n\n var stride = value.stride | 0\n check$1.command(stride >= 0 && stride < 256,\n 'invalid stride for attribute \"' + attribute + '\", must be integer betweeen [0, 255]', env.commandStr)\n\n var size = value.size | 0\n check$1.command(!('size' in value) || (size > 0 && size <= 4),\n 'invalid size for attribute \"' + attribute + '\", must be 1,2,3,4', env.commandStr)\n\n var normalized = !!value.normalized\n\n var type = 0\n if ('type' in value) {\n check$1.commandParameter(\n value.type, glTypes,\n 'invalid type for attribute ' + attribute, env.commandStr)\n type = glTypes[value.type]\n }\n\n var divisor = value.divisor | 0\n check$1.optional(function () {\n if ('divisor' in value) {\n check$1.command(divisor === 0 || extInstancing,\n 'cannot specify divisor for attribute \"' + attribute + '\", instancing not supported', env.commandStr)\n check$1.command(divisor >= 0,\n 'invalid divisor for attribute \"' + attribute + '\"', env.commandStr)\n }\n\n var command = env.commandStr\n\n var VALID_KEYS = [\n 'buffer',\n 'offset',\n 'divisor',\n 'normalized',\n 'type',\n 'size',\n 'stride'\n ]\n\n Object.keys(value).forEach(function (prop) {\n check$1.command(\n VALID_KEYS.indexOf(prop) >= 0,\n 'unknown parameter \"' + prop + '\" for attribute pointer \"' + attribute + '\" (valid parameters are ' + VALID_KEYS + ')',\n command)\n })\n })\n\n record.buffer = buffer\n record.state = ATTRIB_STATE_POINTER\n record.size = size\n record.normalized = normalized\n record.type = type || buffer.dtype\n record.offset = offset\n record.stride = stride\n record.divisor = divisor\n }\n }\n }\n\n attributeDefs[attribute] = createStaticDecl(function (env, scope) {\n var cache = env.attribCache\n if (id in cache) {\n return cache[id]\n }\n var result = {\n isStream: false\n }\n Object.keys(record).forEach(function (key) {\n result[key] = record[key]\n })\n if (record.buffer) {\n result.buffer = env.link(record.buffer)\n result.type = result.type || (result.buffer + '.dtype')\n }\n cache[id] = result\n return result\n })\n })\n\n Object.keys(dynamicAttributes).forEach(function (attribute) {\n var dyn = dynamicAttributes[attribute]\n\n function appendAttributeCode (env, block) {\n var VALUE = env.invoke(block, dyn)\n\n var shared = env.shared\n var constants = env.constants\n\n var IS_BUFFER_ARGS = shared.isBufferArgs\n var BUFFER_STATE = shared.buffer\n\n // Perform validation on attribute\n check$1.optional(function () {\n env.assert(block,\n VALUE + '&&(typeof ' + VALUE + '===\"object\"||typeof ' +\n VALUE + '===\"function\")&&(' +\n IS_BUFFER_ARGS + '(' + VALUE + ')||' +\n BUFFER_STATE + '.getBuffer(' + VALUE + ')||' +\n BUFFER_STATE + '.getBuffer(' + VALUE + '.buffer)||' +\n IS_BUFFER_ARGS + '(' + VALUE + '.buffer)||' +\n '(\"constant\" in ' + VALUE +\n '&&(typeof ' + VALUE + '.constant===\"number\"||' +\n shared.isArrayLike + '(' + VALUE + '.constant))))',\n 'invalid dynamic attribute \"' + attribute + '\"')\n })\n\n // allocate names for result\n var result = {\n isStream: block.def(false)\n }\n var defaultRecord = new AttributeRecord()\n defaultRecord.state = ATTRIB_STATE_POINTER\n Object.keys(defaultRecord).forEach(function (key) {\n result[key] = block.def('' + defaultRecord[key])\n })\n\n var BUFFER = result.buffer\n var TYPE = result.type\n block(\n 'if(', IS_BUFFER_ARGS, '(', VALUE, ')){',\n result.isStream, '=true;',\n BUFFER, '=', BUFFER_STATE, '.createStream(', GL_ARRAY_BUFFER$2, ',', VALUE, ');',\n TYPE, '=', BUFFER, '.dtype;',\n '}else{',\n BUFFER, '=', BUFFER_STATE, '.getBuffer(', VALUE, ');',\n 'if(', BUFFER, '){',\n TYPE, '=', BUFFER, '.dtype;',\n '}else if(\"constant\" in ', VALUE, '){',\n result.state, '=', ATTRIB_STATE_CONSTANT, ';',\n 'if(typeof ' + VALUE + '.constant === \"number\"){',\n result[CUTE_COMPONENTS[0]], '=', VALUE, '.constant;',\n CUTE_COMPONENTS.slice(1).map(function (n) {\n return result[n]\n }).join('='), '=0;',\n '}else{',\n CUTE_COMPONENTS.map(function (name, i) {\n return (\n result[name] + '=' + VALUE + '.constant.length>' + i +\n '?' + VALUE + '.constant[' + i + ']:0;'\n )\n }).join(''),\n '}}else{',\n 'if(', IS_BUFFER_ARGS, '(', VALUE, '.buffer)){',\n BUFFER, '=', BUFFER_STATE, '.createStream(', GL_ARRAY_BUFFER$2, ',', VALUE, '.buffer);',\n '}else{',\n BUFFER, '=', BUFFER_STATE, '.getBuffer(', VALUE, '.buffer);',\n '}',\n TYPE, '=\"type\" in ', VALUE, '?',\n constants.glTypes, '[', VALUE, '.type]:', BUFFER, '.dtype;',\n result.normalized, '=!!', VALUE, '.normalized;')\n function emitReadRecord (name) {\n block(result[name], '=', VALUE, '.', name, '|0;')\n }\n emitReadRecord('size')\n emitReadRecord('offset')\n emitReadRecord('stride')\n emitReadRecord('divisor')\n\n block('}}')\n\n block.exit(\n 'if(', result.isStream, '){',\n BUFFER_STATE, '.destroyStream(', BUFFER, ');',\n '}')\n\n return result\n }\n\n attributeDefs[attribute] = createDynamicDecl(dyn, appendAttributeCode)\n })\n\n return attributeDefs\n }\n\n function parseContext (context) {\n var staticContext = context.static\n var dynamicContext = context.dynamic\n var result = {}\n\n Object.keys(staticContext).forEach(function (name) {\n var value = staticContext[name]\n result[name] = createStaticDecl(function (env, scope) {\n if (typeof value === 'number' || typeof value === 'boolean') {\n return '' + value\n } else {\n return env.link(value)\n }\n })\n })\n\n Object.keys(dynamicContext).forEach(function (name) {\n var dyn = dynamicContext[name]\n result[name] = createDynamicDecl(dyn, function (env, scope) {\n return env.invoke(scope, dyn)\n })\n })\n\n return result\n }\n\n function parseArguments (options, attributes, uniforms, context, env) {\n var staticOptions = options.static\n var dynamicOptions = options.dynamic\n\n check$1.optional(function () {\n var KEY_NAMES = [\n S_FRAMEBUFFER,\n S_VERT,\n S_FRAG,\n S_ELEMENTS,\n S_PRIMITIVE,\n S_OFFSET,\n S_COUNT,\n S_INSTANCES,\n S_PROFILE,\n S_VAO\n ].concat(GL_STATE_NAMES)\n\n function checkKeys (dict) {\n Object.keys(dict).forEach(function (key) {\n check$1.command(\n KEY_NAMES.indexOf(key) >= 0,\n 'unknown parameter \"' + key + '\"',\n env.commandStr)\n })\n }\n\n checkKeys(staticOptions)\n checkKeys(dynamicOptions)\n })\n\n var attribLocations = parseAttribLocations(options, attributes)\n\n var framebuffer = parseFramebuffer(options, env)\n var viewportAndScissor = parseViewportScissor(options, framebuffer, env)\n var draw = parseDraw(options, env)\n var state = parseGLState(options, env)\n var shader = parseProgram(options, env, attribLocations)\n\n function copyBox (name) {\n var defn = viewportAndScissor[name]\n if (defn) {\n state[name] = defn\n }\n }\n copyBox(S_VIEWPORT)\n copyBox(propName(S_SCISSOR_BOX))\n\n var dirty = Object.keys(state).length > 0\n\n var result = {\n framebuffer: framebuffer,\n draw: draw,\n shader: shader,\n state: state,\n dirty: dirty,\n scopeVAO: null,\n drawVAO: null,\n useVAO: false,\n attributes: {}\n }\n\n result.profile = parseProfile(options, env)\n result.uniforms = parseUniforms(uniforms, env)\n result.drawVAO = result.scopeVAO = draw.vao\n // special case: check if we can statically allocate a vertex array object for this program\n if (!result.drawVAO &&\n shader.program &&\n !attribLocations &&\n extensions.angle_instanced_arrays &&\n draw.static.elements) {\n var useVAO = true\n var staticBindings = shader.program.attributes.map(function (attr) {\n var binding = attributes.static[attr]\n useVAO = useVAO && !!binding\n return binding\n })\n if (useVAO && staticBindings.length > 0) {\n var vao = attributeState.getVAO(attributeState.createVAO({\n attributes: staticBindings,\n elements: draw.static.elements\n }))\n result.drawVAO = new Declaration(null, null, null, function (env, scope) {\n return env.link(vao)\n })\n result.useVAO = true\n }\n }\n if (attribLocations) {\n result.useVAO = true\n } else {\n result.attributes = parseAttributes(attributes, env)\n }\n result.context = parseContext(context, env)\n return result\n }\n\n // ===================================================\n // ===================================================\n // COMMON UPDATE FUNCTIONS\n // ===================================================\n // ===================================================\n function emitContext (env, scope, context) {\n var shared = env.shared\n var CONTEXT = shared.context\n\n var contextEnter = env.scope()\n\n Object.keys(context).forEach(function (name) {\n scope.save(CONTEXT, '.' + name)\n var defn = context[name]\n var value = defn.append(env, scope)\n if (Array.isArray(value)) {\n contextEnter(CONTEXT, '.', name, '=[', value.join(), '];')\n } else {\n contextEnter(CONTEXT, '.', name, '=', value, ';')\n }\n })\n\n scope(contextEnter)\n }\n\n // ===================================================\n // ===================================================\n // COMMON DRAWING FUNCTIONS\n // ===================================================\n // ===================================================\n function emitPollFramebuffer (env, scope, framebuffer, skipCheck) {\n var shared = env.shared\n\n var GL = shared.gl\n var FRAMEBUFFER_STATE = shared.framebuffer\n var EXT_DRAW_BUFFERS\n if (extDrawBuffers) {\n EXT_DRAW_BUFFERS = scope.def(shared.extensions, '.webgl_draw_buffers')\n }\n\n var constants = env.constants\n\n var DRAW_BUFFERS = constants.drawBuffer\n var BACK_BUFFER = constants.backBuffer\n\n var NEXT\n if (framebuffer) {\n NEXT = framebuffer.append(env, scope)\n } else {\n NEXT = scope.def(FRAMEBUFFER_STATE, '.next')\n }\n\n if (!skipCheck) {\n scope('if(', NEXT, '!==', FRAMEBUFFER_STATE, '.cur){')\n }\n scope(\n 'if(', NEXT, '){',\n GL, '.bindFramebuffer(', GL_FRAMEBUFFER$2, ',', NEXT, '.framebuffer);')\n if (extDrawBuffers) {\n scope(EXT_DRAW_BUFFERS, '.drawBuffersWEBGL(',\n DRAW_BUFFERS, '[', NEXT, '.colorAttachments.length]);')\n }\n scope('}else{',\n GL, '.bindFramebuffer(', GL_FRAMEBUFFER$2, ',null);')\n if (extDrawBuffers) {\n scope(EXT_DRAW_BUFFERS, '.drawBuffersWEBGL(', BACK_BUFFER, ');')\n }\n scope(\n '}',\n FRAMEBUFFER_STATE, '.cur=', NEXT, ';')\n if (!skipCheck) {\n scope('}')\n }\n }\n\n function emitPollState (env, scope, args) {\n var shared = env.shared\n\n var GL = shared.gl\n\n var CURRENT_VARS = env.current\n var NEXT_VARS = env.next\n var CURRENT_STATE = shared.current\n var NEXT_STATE = shared.next\n\n var block = env.cond(CURRENT_STATE, '.dirty')\n\n GL_STATE_NAMES.forEach(function (prop) {\n var param = propName(prop)\n if (param in args.state) {\n return\n }\n\n var NEXT, CURRENT\n if (param in NEXT_VARS) {\n NEXT = NEXT_VARS[param]\n CURRENT = CURRENT_VARS[param]\n var parts = loop(currentState[param].length, function (i) {\n return block.def(NEXT, '[', i, ']')\n })\n block(env.cond(parts.map(function (p, i) {\n return p + '!==' + CURRENT + '[' + i + ']'\n }).join('||'))\n .then(\n GL, '.', GL_VARIABLES[param], '(', parts, ');',\n parts.map(function (p, i) {\n return CURRENT + '[' + i + ']=' + p\n }).join(';'), ';'))\n } else {\n NEXT = block.def(NEXT_STATE, '.', param)\n var ifte = env.cond(NEXT, '!==', CURRENT_STATE, '.', param)\n block(ifte)\n if (param in GL_FLAGS) {\n ifte(\n env.cond(NEXT)\n .then(GL, '.enable(', GL_FLAGS[param], ');')\n .else(GL, '.disable(', GL_FLAGS[param], ');'),\n CURRENT_STATE, '.', param, '=', NEXT, ';')\n } else {\n ifte(\n GL, '.', GL_VARIABLES[param], '(', NEXT, ');',\n CURRENT_STATE, '.', param, '=', NEXT, ';')\n }\n }\n })\n if (Object.keys(args.state).length === 0) {\n block(CURRENT_STATE, '.dirty=false;')\n }\n scope(block)\n }\n\n function emitSetOptions (env, scope, options, filter) {\n var shared = env.shared\n var CURRENT_VARS = env.current\n var CURRENT_STATE = shared.current\n var GL = shared.gl\n sortState(Object.keys(options)).forEach(function (param) {\n var defn = options[param]\n if (filter && !filter(defn)) {\n return\n }\n var variable = defn.append(env, scope)\n if (GL_FLAGS[param]) {\n var flag = GL_FLAGS[param]\n if (isStatic(defn)) {\n if (variable) {\n scope(GL, '.enable(', flag, ');')\n } else {\n scope(GL, '.disable(', flag, ');')\n }\n } else {\n scope(env.cond(variable)\n .then(GL, '.enable(', flag, ');')\n .else(GL, '.disable(', flag, ');'))\n }\n scope(CURRENT_STATE, '.', param, '=', variable, ';')\n } else if (isArrayLike(variable)) {\n var CURRENT = CURRENT_VARS[param]\n scope(\n GL, '.', GL_VARIABLES[param], '(', variable, ');',\n variable.map(function (v, i) {\n return CURRENT + '[' + i + ']=' + v\n }).join(';'), ';')\n } else {\n scope(\n GL, '.', GL_VARIABLES[param], '(', variable, ');',\n CURRENT_STATE, '.', param, '=', variable, ';')\n }\n })\n }\n\n function injectExtensions (env, scope) {\n if (extInstancing) {\n env.instancing = scope.def(\n env.shared.extensions, '.angle_instanced_arrays')\n }\n }\n\n function emitProfile (env, scope, args, useScope, incrementCounter) {\n var shared = env.shared\n var STATS = env.stats\n var CURRENT_STATE = shared.current\n var TIMER = shared.timer\n var profileArg = args.profile\n\n function perfCounter () {\n if (typeof performance === 'undefined') {\n return 'Date.now()'\n } else {\n return 'performance.now()'\n }\n }\n\n var CPU_START, QUERY_COUNTER\n function emitProfileStart (block) {\n CPU_START = scope.def()\n block(CPU_START, '=', perfCounter(), ';')\n if (typeof incrementCounter === 'string') {\n block(STATS, '.count+=', incrementCounter, ';')\n } else {\n block(STATS, '.count++;')\n }\n if (timer) {\n if (useScope) {\n QUERY_COUNTER = scope.def()\n block(QUERY_COUNTER, '=', TIMER, '.getNumPendingQueries();')\n } else {\n block(TIMER, '.beginQuery(', STATS, ');')\n }\n }\n }\n\n function emitProfileEnd (block) {\n block(STATS, '.cpuTime+=', perfCounter(), '-', CPU_START, ';')\n if (timer) {\n if (useScope) {\n block(TIMER, '.pushScopeStats(',\n QUERY_COUNTER, ',',\n TIMER, '.getNumPendingQueries(),',\n STATS, ');')\n } else {\n block(TIMER, '.endQuery();')\n }\n }\n }\n\n function scopeProfile (value) {\n var prev = scope.def(CURRENT_STATE, '.profile')\n scope(CURRENT_STATE, '.profile=', value, ';')\n scope.exit(CURRENT_STATE, '.profile=', prev, ';')\n }\n\n var USE_PROFILE\n if (profileArg) {\n if (isStatic(profileArg)) {\n if (profileArg.enable) {\n emitProfileStart(scope)\n emitProfileEnd(scope.exit)\n scopeProfile('true')\n } else {\n scopeProfile('false')\n }\n return\n }\n USE_PROFILE = profileArg.append(env, scope)\n scopeProfile(USE_PROFILE)\n } else {\n USE_PROFILE = scope.def(CURRENT_STATE, '.profile')\n }\n\n var start = env.block()\n emitProfileStart(start)\n scope('if(', USE_PROFILE, '){', start, '}')\n var end = env.block()\n emitProfileEnd(end)\n scope.exit('if(', USE_PROFILE, '){', end, '}')\n }\n\n function emitAttributes (env, scope, args, attributes, filter) {\n var shared = env.shared\n\n function typeLength (x) {\n switch (x) {\n case GL_FLOAT_VEC2:\n case GL_INT_VEC2:\n case GL_BOOL_VEC2:\n return 2\n case GL_FLOAT_VEC3:\n case GL_INT_VEC3:\n case GL_BOOL_VEC3:\n return 3\n case GL_FLOAT_VEC4:\n case GL_INT_VEC4:\n case GL_BOOL_VEC4:\n return 4\n default:\n return 1\n }\n }\n\n function emitBindAttribute (ATTRIBUTE, size, record) {\n var GL = shared.gl\n\n var LOCATION = scope.def(ATTRIBUTE, '.location')\n var BINDING = scope.def(shared.attributes, '[', LOCATION, ']')\n\n var STATE = record.state\n var BUFFER = record.buffer\n var CONST_COMPONENTS = [\n record.x,\n record.y,\n record.z,\n record.w\n ]\n\n var COMMON_KEYS = [\n 'buffer',\n 'normalized',\n 'offset',\n 'stride'\n ]\n\n function emitBuffer () {\n scope(\n 'if(!', BINDING, '.buffer){',\n GL, '.enableVertexAttribArray(', LOCATION, ');}')\n\n var TYPE = record.type\n var SIZE\n if (!record.size) {\n SIZE = size\n } else {\n SIZE = scope.def(record.size, '||', size)\n }\n\n scope('if(',\n BINDING, '.type!==', TYPE, '||',\n BINDING, '.size!==', SIZE, '||',\n COMMON_KEYS.map(function (key) {\n return BINDING + '.' + key + '!==' + record[key]\n }).join('||'),\n '){',\n GL, '.bindBuffer(', GL_ARRAY_BUFFER$2, ',', BUFFER, '.buffer);',\n GL, '.vertexAttribPointer(', [\n LOCATION,\n SIZE,\n TYPE,\n record.normalized,\n record.stride,\n record.offset\n ], ');',\n BINDING, '.type=', TYPE, ';',\n BINDING, '.size=', SIZE, ';',\n COMMON_KEYS.map(function (key) {\n return BINDING + '.' + key + '=' + record[key] + ';'\n }).join(''),\n '}')\n\n if (extInstancing) {\n var DIVISOR = record.divisor\n scope(\n 'if(', BINDING, '.divisor!==', DIVISOR, '){',\n env.instancing, '.vertexAttribDivisorANGLE(', [LOCATION, DIVISOR], ');',\n BINDING, '.divisor=', DIVISOR, ';}')\n }\n }\n\n function emitConstant () {\n scope(\n 'if(', BINDING, '.buffer){',\n GL, '.disableVertexAttribArray(', LOCATION, ');',\n BINDING, '.buffer=null;',\n '}if(', CUTE_COMPONENTS.map(function (c, i) {\n return BINDING + '.' + c + '!==' + CONST_COMPONENTS[i]\n }).join('||'), '){',\n GL, '.vertexAttrib4f(', LOCATION, ',', CONST_COMPONENTS, ');',\n CUTE_COMPONENTS.map(function (c, i) {\n return BINDING + '.' + c + '=' + CONST_COMPONENTS[i] + ';'\n }).join(''),\n '}')\n }\n\n if (STATE === ATTRIB_STATE_POINTER) {\n emitBuffer()\n } else if (STATE === ATTRIB_STATE_CONSTANT) {\n emitConstant()\n } else {\n scope('if(', STATE, '===', ATTRIB_STATE_POINTER, '){')\n emitBuffer()\n scope('}else{')\n emitConstant()\n scope('}')\n }\n }\n\n attributes.forEach(function (attribute) {\n var name = attribute.name\n var arg = args.attributes[name]\n var record\n if (arg) {\n if (!filter(arg)) {\n return\n }\n record = arg.append(env, scope)\n } else {\n if (!filter(SCOPE_DECL)) {\n return\n }\n var scopeAttrib = env.scopeAttrib(name)\n check$1.optional(function () {\n env.assert(scope,\n scopeAttrib + '.state',\n 'missing attribute ' + name)\n })\n record = {}\n Object.keys(new AttributeRecord()).forEach(function (key) {\n record[key] = scope.def(scopeAttrib, '.', key)\n })\n }\n emitBindAttribute(\n env.link(attribute), typeLength(attribute.info.type), record)\n })\n }\n\n function emitUniforms (env, scope, args, uniforms, filter, isBatchInnerLoop) {\n var shared = env.shared\n var GL = shared.gl\n\n var definedArrUniforms = {}\n var infix\n for (var i = 0; i < uniforms.length; ++i) {\n var uniform = uniforms[i]\n var name = uniform.name\n var type = uniform.info.type\n var size = uniform.info.size\n var arg = args.uniforms[name]\n if (size > 1) {\n // either foo[n] or foos, avoid define both\n if (!arg) {\n continue\n }\n var arrUniformName = name.replace('[0]', '')\n if (definedArrUniforms[arrUniformName]) {\n continue\n }\n definedArrUniforms[arrUniformName] = 1\n }\n var UNIFORM = env.link(uniform)\n var LOCATION = UNIFORM + '.location'\n\n var VALUE\n if (arg) {\n if (!filter(arg)) {\n continue\n }\n if (isStatic(arg)) {\n var value = arg.value\n check$1.command(\n value !== null && typeof value !== 'undefined',\n 'missing uniform \"' + name + '\"', env.commandStr)\n if (type === GL_SAMPLER_2D || type === GL_SAMPLER_CUBE) {\n check$1.command(\n typeof value === 'function' &&\n ((type === GL_SAMPLER_2D &&\n (value._reglType === 'texture2d' ||\n value._reglType === 'framebuffer')) ||\n (type === GL_SAMPLER_CUBE &&\n (value._reglType === 'textureCube' ||\n value._reglType === 'framebufferCube'))),\n 'invalid texture for uniform ' + name, env.commandStr)\n var TEX_VALUE = env.link(value._texture || value.color[0]._texture)\n scope(GL, '.uniform1i(', LOCATION, ',', TEX_VALUE + '.bind());')\n scope.exit(TEX_VALUE, '.unbind();')\n } else if (\n type === GL_FLOAT_MAT2 ||\n type === GL_FLOAT_MAT3 ||\n type === GL_FLOAT_MAT4) {\n check$1.optional(function () {\n check$1.command(isArrayLike(value),\n 'invalid matrix for uniform ' + name, env.commandStr)\n check$1.command(\n (type === GL_FLOAT_MAT2 && value.length === 4) ||\n (type === GL_FLOAT_MAT3 && value.length === 9) ||\n (type === GL_FLOAT_MAT4 && value.length === 16),\n 'invalid length for matrix uniform ' + name, env.commandStr)\n })\n var MAT_VALUE = env.global.def('new Float32Array([' +\n Array.prototype.slice.call(value) + '])')\n var dim = 2\n if (type === GL_FLOAT_MAT3) {\n dim = 3\n } else if (type === GL_FLOAT_MAT4) {\n dim = 4\n }\n scope(\n GL, '.uniformMatrix', dim, 'fv(',\n LOCATION, ',false,', MAT_VALUE, ');')\n } else {\n switch (type) {\n case GL_FLOAT$8:\n if (size === 1) {\n check$1.commandType(value, 'number', 'uniform ' + name, env.commandStr)\n } else {\n check$1.command(\n isArrayLike(value) && (value.length === size),\n 'uniform ' + name, env.commandStr)\n }\n infix = '1f'\n break\n case GL_FLOAT_VEC2:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 2 === 0 && value.length <= size * 2),\n 'uniform ' + name, env.commandStr)\n infix = '2f'\n break\n case GL_FLOAT_VEC3:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 3 === 0 && value.length <= size * 3),\n 'uniform ' + name, env.commandStr)\n infix = '3f'\n break\n case GL_FLOAT_VEC4:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 4 === 0 && value.length <= size * 4),\n 'uniform ' + name, env.commandStr)\n infix = '4f'\n break\n case GL_BOOL:\n if (size === 1) {\n check$1.commandType(value, 'boolean', 'uniform ' + name, env.commandStr)\n } else {\n check$1.command(\n isArrayLike(value) && (value.length === size),\n 'uniform ' + name, env.commandStr)\n }\n infix = '1i'\n break\n case GL_INT$3:\n if (size === 1) {\n check$1.commandType(value, 'number', 'uniform ' + name, env.commandStr)\n } else {\n check$1.command(\n isArrayLike(value) && (value.length === size),\n 'uniform ' + name, env.commandStr)\n }\n infix = '1i'\n break\n case GL_BOOL_VEC2:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 2 === 0 && value.length <= size * 2),\n 'uniform ' + name, env.commandStr)\n infix = '2i'\n break\n case GL_INT_VEC2:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 2 === 0 && value.length <= size * 2),\n 'uniform ' + name, env.commandStr)\n infix = '2i'\n break\n case GL_BOOL_VEC3:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 3 === 0 && value.length <= size * 3),\n 'uniform ' + name, env.commandStr)\n infix = '3i'\n break\n case GL_INT_VEC3:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 3 === 0 && value.length <= size * 3),\n 'uniform ' + name, env.commandStr)\n infix = '3i'\n break\n case GL_BOOL_VEC4:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 4 === 0 && value.length <= size * 4),\n 'uniform ' + name, env.commandStr)\n infix = '4i'\n break\n case GL_INT_VEC4:\n check$1.command(\n isArrayLike(value) && (value.length && value.length % 4 === 0 && value.length <= size * 4),\n 'uniform ' + name, env.commandStr)\n infix = '4i'\n break\n }\n if (size > 1) {\n infix += 'v'\n value = env.global.def('[' +\n Array.prototype.slice.call(value) + ']')\n } else {\n value = isArrayLike(value) ? Array.prototype.slice.call(value) : value\n }\n scope(GL, '.uniform', infix, '(', LOCATION, ',',\n value,\n ');')\n }\n continue\n } else {\n VALUE = arg.append(env, scope)\n }\n } else {\n if (!filter(SCOPE_DECL)) {\n continue\n }\n VALUE = scope.def(shared.uniforms, '[', stringStore.id(name), ']')\n }\n\n if (type === GL_SAMPLER_2D) {\n check$1(!Array.isArray(VALUE), 'must specify a scalar prop for textures')\n scope(\n 'if(', VALUE, '&&', VALUE, '._reglType===\"framebuffer\"){',\n VALUE, '=', VALUE, '.color[0];',\n '}')\n } else if (type === GL_SAMPLER_CUBE) {\n check$1(!Array.isArray(VALUE), 'must specify a scalar prop for cube maps')\n scope(\n 'if(', VALUE, '&&', VALUE, '._reglType===\"framebufferCube\"){',\n VALUE, '=', VALUE, '.color[0];',\n '}')\n }\n\n // perform type validation\n check$1.optional(function () {\n function emitCheck (pred, message) {\n env.assert(scope, pred,\n 'bad data or missing for uniform \"' + name + '\". ' + message)\n }\n\n function checkType (type, size) {\n if (size === 1) {\n check$1(!Array.isArray(VALUE), 'must not specify an array type for uniform')\n }\n emitCheck(\n 'Array.isArray(' + VALUE + ') && typeof ' + VALUE + '[0]===\" ' + type + '\"' +\n ' || typeof ' + VALUE + '===\"' + type + '\"',\n 'invalid type, expected ' + type)\n }\n\n function checkVector (n, type, size) {\n if (Array.isArray(VALUE)) {\n check$1(VALUE.length && VALUE.length % n === 0 && VALUE.length <= n * size, 'must have length of ' + (size === 1 ? '' : 'n * ') + n)\n } else {\n emitCheck(\n shared.isArrayLike + '(' + VALUE + ')&&' + VALUE + '.length && ' + VALUE + '.length % ' + n + ' === 0' +\n ' && ' + VALUE + '.length<=' + n * size,\n 'invalid vector, should have length of ' + (size === 1 ? '' : 'n * ') + n, env.commandStr)\n }\n }\n\n function checkTexture (target) {\n check$1(!Array.isArray(VALUE), 'must not specify a value type')\n emitCheck(\n 'typeof ' + VALUE + '===\"function\"&&' +\n VALUE + '._reglType===\"texture' +\n (target === GL_TEXTURE_2D$3 ? '2d' : 'Cube') + '\"',\n 'invalid texture type', env.commandStr)\n }\n\n switch (type) {\n case GL_INT$3:\n checkType('number', size)\n break\n case GL_INT_VEC2:\n checkVector(2, 'number', size)\n break\n case GL_INT_VEC3:\n checkVector(3, 'number', size)\n break\n case GL_INT_VEC4:\n checkVector(4, 'number', size)\n break\n case GL_FLOAT$8:\n checkType('number', size)\n break\n case GL_FLOAT_VEC2:\n checkVector(2, 'number', size)\n break\n case GL_FLOAT_VEC3:\n checkVector(3, 'number', size)\n break\n case GL_FLOAT_VEC4:\n checkVector(4, 'number', size)\n break\n case GL_BOOL:\n checkType('boolean', size)\n break\n case GL_BOOL_VEC2:\n checkVector(2, 'boolean', size)\n break\n case GL_BOOL_VEC3:\n checkVector(3, 'boolean', size)\n break\n case GL_BOOL_VEC4:\n checkVector(4, 'boolean', size)\n break\n case GL_FLOAT_MAT2:\n checkVector(4, 'number', size)\n break\n case GL_FLOAT_MAT3:\n checkVector(9, 'number', size)\n break\n case GL_FLOAT_MAT4:\n checkVector(16, 'number', size)\n break\n case GL_SAMPLER_2D:\n checkTexture(GL_TEXTURE_2D$3)\n break\n case GL_SAMPLER_CUBE:\n checkTexture(GL_TEXTURE_CUBE_MAP$2)\n break\n }\n })\n\n var unroll = 1\n switch (type) {\n case GL_SAMPLER_2D:\n case GL_SAMPLER_CUBE:\n var TEX = scope.def(VALUE, '._texture')\n scope(GL, '.uniform1i(', LOCATION, ',', TEX, '.bind());')\n scope.exit(TEX, '.unbind();')\n continue\n\n case GL_INT$3:\n case GL_BOOL:\n infix = '1i'\n break\n\n case GL_INT_VEC2:\n case GL_BOOL_VEC2:\n infix = '2i'\n unroll = 2\n break\n\n case GL_INT_VEC3:\n case GL_BOOL_VEC3:\n infix = '3i'\n unroll = 3\n break\n\n case GL_INT_VEC4:\n case GL_BOOL_VEC4:\n infix = '4i'\n unroll = 4\n break\n\n case GL_FLOAT$8:\n infix = '1f'\n break\n\n case GL_FLOAT_VEC2:\n infix = '2f'\n unroll = 2\n break\n\n case GL_FLOAT_VEC3:\n infix = '3f'\n unroll = 3\n break\n\n case GL_FLOAT_VEC4:\n infix = '4f'\n unroll = 4\n break\n\n case GL_FLOAT_MAT2:\n infix = 'Matrix2fv'\n break\n\n case GL_FLOAT_MAT3:\n infix = 'Matrix3fv'\n break\n\n case GL_FLOAT_MAT4:\n infix = 'Matrix4fv'\n break\n }\n\n if (infix.indexOf('Matrix') === -1 && size > 1) {\n infix += 'v'\n unroll = 1\n }\n\n if (infix.charAt(0) === 'M') {\n scope(GL, '.uniform', infix, '(', LOCATION, ',')\n var matSize = Math.pow(type - GL_FLOAT_MAT2 + 2, 2)\n var STORAGE = env.global.def('new Float32Array(', matSize, ')')\n if (Array.isArray(VALUE)) {\n scope(\n 'false,(',\n loop(matSize, function (i) {\n return STORAGE + '[' + i + ']=' + VALUE[i]\n }), ',', STORAGE, ')')\n } else {\n scope(\n 'false,(Array.isArray(', VALUE, ')||', VALUE, ' instanceof Float32Array)?', VALUE, ':(',\n loop(matSize, function (i) {\n return STORAGE + '[' + i + ']=' + VALUE + '[' + i + ']'\n }), ',', STORAGE, ')')\n }\n scope(');')\n } else if (unroll > 1) {\n var prev = []\n var cur = []\n for (var j = 0; j < unroll; ++j) {\n if (Array.isArray(VALUE)) {\n cur.push(VALUE[j])\n } else {\n cur.push(scope.def(VALUE + '[' + j + ']'))\n }\n if (isBatchInnerLoop) {\n prev.push(scope.def())\n }\n }\n if (isBatchInnerLoop) {\n scope('if(!', env.batchId, '||', prev.map(function (p, i) {\n return p + '!==' + cur[i]\n }).join('||'), '){', prev.map(function (p, i) {\n return p + '=' + cur[i] + ';'\n }).join(''))\n }\n scope(GL, '.uniform', infix, '(', LOCATION, ',', cur.join(','), ');')\n if (isBatchInnerLoop) {\n scope('}')\n }\n } else {\n check$1(!Array.isArray(VALUE), 'uniform value must not be an array')\n if (isBatchInnerLoop) {\n var prevS = scope.def()\n scope('if(!', env.batchId, '||', prevS, '!==', VALUE, '){',\n prevS, '=', VALUE, ';')\n }\n scope(GL, '.uniform', infix, '(', LOCATION, ',', VALUE, ');')\n if (isBatchInnerLoop) {\n scope('}')\n }\n }\n }\n }\n\n function emitDraw (env, outer, inner, args) {\n var shared = env.shared\n var GL = shared.gl\n var DRAW_STATE = shared.draw\n\n var drawOptions = args.draw\n\n function emitElements () {\n var defn = drawOptions.elements\n var ELEMENTS\n var scope = outer\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n scope = inner\n }\n ELEMENTS = defn.append(env, scope)\n if (drawOptions.elementsActive) {\n scope(\n 'if(' + ELEMENTS + ')' +\n GL + '.bindBuffer(' + GL_ELEMENT_ARRAY_BUFFER$2 + ',' + ELEMENTS + '.buffer.buffer);')\n }\n } else {\n ELEMENTS = scope.def()\n scope(\n ELEMENTS, '=', DRAW_STATE, '.', S_ELEMENTS, ';',\n 'if(', ELEMENTS, '){',\n GL, '.bindBuffer(', GL_ELEMENT_ARRAY_BUFFER$2, ',', ELEMENTS, '.buffer.buffer);}',\n 'else if(', shared.vao, '.currentVAO){',\n ELEMENTS, '=', env.shared.elements + '.getElements(' + shared.vao, '.currentVAO.elements);',\n (!extVertexArrays ? 'if(' + ELEMENTS + ')' + GL + '.bindBuffer(' + GL_ELEMENT_ARRAY_BUFFER$2 + ',' + ELEMENTS + '.buffer.buffer);' : ''),\n '}')\n }\n return ELEMENTS\n }\n\n function emitCount () {\n var defn = drawOptions.count\n var COUNT\n var scope = outer\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n scope = inner\n }\n COUNT = defn.append(env, scope)\n check$1.optional(function () {\n if (defn.MISSING) {\n env.assert(outer, 'false', 'missing vertex count')\n }\n if (defn.DYNAMIC) {\n env.assert(scope, COUNT + '>=0', 'missing vertex count')\n }\n })\n } else {\n COUNT = scope.def(DRAW_STATE, '.', S_COUNT)\n check$1.optional(function () {\n env.assert(scope, COUNT + '>=0', 'missing vertex count')\n })\n }\n return COUNT\n }\n\n var ELEMENTS = emitElements()\n function emitValue (name) {\n var defn = drawOptions[name]\n if (defn) {\n if ((defn.contextDep && args.contextDynamic) || defn.propDep) {\n return defn.append(env, inner)\n } else {\n return defn.append(env, outer)\n }\n } else {\n return outer.def(DRAW_STATE, '.', name)\n }\n }\n\n var PRIMITIVE = emitValue(S_PRIMITIVE)\n var OFFSET = emitValue(S_OFFSET)\n\n var COUNT = emitCount()\n if (typeof COUNT === 'number') {\n if (COUNT === 0) {\n return\n }\n } else {\n inner('if(', COUNT, '){')\n inner.exit('}')\n }\n\n var INSTANCES, EXT_INSTANCING\n if (extInstancing) {\n INSTANCES = emitValue(S_INSTANCES)\n EXT_INSTANCING = env.instancing\n }\n\n var ELEMENT_TYPE = ELEMENTS + '.type'\n\n var elementsStatic = drawOptions.elements && isStatic(drawOptions.elements) && !drawOptions.vaoActive\n\n function emitInstancing () {\n function drawElements () {\n inner(EXT_INSTANCING, '.drawElementsInstancedANGLE(', [\n PRIMITIVE,\n COUNT,\n ELEMENT_TYPE,\n OFFSET + '<<((' + ELEMENT_TYPE + '-' + GL_UNSIGNED_BYTE$8 + ')>>1)',\n INSTANCES\n ], ');')\n }\n\n function drawArrays () {\n inner(EXT_INSTANCING, '.drawArraysInstancedANGLE(',\n [PRIMITIVE, OFFSET, COUNT, INSTANCES], ');')\n }\n\n if (ELEMENTS && ELEMENTS !== 'null') {\n if (!elementsStatic) {\n inner('if(', ELEMENTS, '){')\n drawElements()\n inner('}else{')\n drawArrays()\n inner('}')\n } else {\n drawElements()\n }\n } else {\n drawArrays()\n }\n }\n\n function emitRegular () {\n function drawElements () {\n inner(GL + '.drawElements(' + [\n PRIMITIVE,\n COUNT,\n ELEMENT_TYPE,\n OFFSET + '<<((' + ELEMENT_TYPE + '-' + GL_UNSIGNED_BYTE$8 + ')>>1)'\n ] + ');')\n }\n\n function drawArrays () {\n inner(GL + '.drawArrays(' + [PRIMITIVE, OFFSET, COUNT] + ');')\n }\n\n if (ELEMENTS && ELEMENTS !== 'null') {\n if (!elementsStatic) {\n inner('if(', ELEMENTS, '){')\n drawElements()\n inner('}else{')\n drawArrays()\n inner('}')\n } else {\n drawElements()\n }\n } else {\n drawArrays()\n }\n }\n\n if (extInstancing && (typeof INSTANCES !== 'number' || INSTANCES >= 0)) {\n if (typeof INSTANCES === 'string') {\n inner('if(', INSTANCES, '>0){')\n emitInstancing()\n inner('}else if(', INSTANCES, '<0){')\n emitRegular()\n inner('}')\n } else {\n emitInstancing()\n }\n } else {\n emitRegular()\n }\n }\n\n function createBody (emitBody, parentEnv, args, program, count) {\n var env = createREGLEnvironment()\n var scope = env.proc('body', count)\n check$1.optional(function () {\n env.commandStr = parentEnv.commandStr\n env.command = env.link(parentEnv.commandStr)\n })\n if (extInstancing) {\n env.instancing = scope.def(\n env.shared.extensions, '.angle_instanced_arrays')\n }\n emitBody(env, scope, args, program)\n return env.compile().body\n }\n\n // ===================================================\n // ===================================================\n // DRAW PROC\n // ===================================================\n // ===================================================\n function emitDrawBody (env, draw, args, program) {\n injectExtensions(env, draw)\n if (args.useVAO) {\n if (args.drawVAO) {\n draw(env.shared.vao, '.setVAO(', args.drawVAO.append(env, draw), ');')\n } else {\n draw(env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n }\n } else {\n draw(env.shared.vao, '.setVAO(null);')\n emitAttributes(env, draw, args, program.attributes, function () {\n return true\n })\n }\n emitUniforms(env, draw, args, program.uniforms, function () {\n return true\n }, false)\n emitDraw(env, draw, draw, args)\n }\n\n function emitDrawProc (env, args) {\n var draw = env.proc('draw', 1)\n\n injectExtensions(env, draw)\n\n emitContext(env, draw, args.context)\n emitPollFramebuffer(env, draw, args.framebuffer)\n\n emitPollState(env, draw, args)\n emitSetOptions(env, draw, args.state)\n\n emitProfile(env, draw, args, false, true)\n\n var program = args.shader.progVar.append(env, draw)\n draw(env.shared.gl, '.useProgram(', program, '.program);')\n\n if (args.shader.program) {\n emitDrawBody(env, draw, args, args.shader.program)\n } else {\n draw(env.shared.vao, '.setVAO(null);')\n var drawCache = env.global.def('{}')\n var PROG_ID = draw.def(program, '.id')\n var CACHED_PROC = draw.def(drawCache, '[', PROG_ID, ']')\n draw(\n env.cond(CACHED_PROC)\n .then(CACHED_PROC, '.call(this,a0);')\n .else(\n CACHED_PROC, '=', drawCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(emitDrawBody, env, args, program, 1)\n }), '(', program, ');',\n CACHED_PROC, '.call(this,a0);'))\n }\n\n if (Object.keys(args.state).length > 0) {\n draw(env.shared.current, '.dirty=true;')\n }\n if (env.shared.vao) {\n draw(env.shared.vao, '.setVAO(null);')\n }\n }\n\n // ===================================================\n // ===================================================\n // BATCH PROC\n // ===================================================\n // ===================================================\n\n function emitBatchDynamicShaderBody (env, scope, args, program) {\n env.batchId = 'a1'\n\n injectExtensions(env, scope)\n\n function all () {\n return true\n }\n\n emitAttributes(env, scope, args, program.attributes, all)\n emitUniforms(env, scope, args, program.uniforms, all, false)\n emitDraw(env, scope, scope, args)\n }\n\n function emitBatchBody (env, scope, args, program) {\n injectExtensions(env, scope)\n\n var contextDynamic = args.contextDep\n\n var BATCH_ID = scope.def()\n var PROP_LIST = 'a0'\n var NUM_PROPS = 'a1'\n var PROPS = scope.def()\n env.shared.props = PROPS\n env.batchId = BATCH_ID\n\n var outer = env.scope()\n var inner = env.scope()\n\n scope(\n outer.entry,\n 'for(', BATCH_ID, '=0;', BATCH_ID, '<', NUM_PROPS, ';++', BATCH_ID, '){',\n PROPS, '=', PROP_LIST, '[', BATCH_ID, '];',\n inner,\n '}',\n outer.exit)\n\n function isInnerDefn (defn) {\n return ((defn.contextDep && contextDynamic) || defn.propDep)\n }\n\n function isOuterDefn (defn) {\n return !isInnerDefn(defn)\n }\n\n if (args.needsContext) {\n emitContext(env, inner, args.context)\n }\n if (args.needsFramebuffer) {\n emitPollFramebuffer(env, inner, args.framebuffer)\n }\n emitSetOptions(env, inner, args.state, isInnerDefn)\n\n if (args.profile && isInnerDefn(args.profile)) {\n emitProfile(env, inner, args, false, true)\n }\n\n if (!program) {\n var progCache = env.global.def('{}')\n var PROGRAM = args.shader.progVar.append(env, inner)\n var PROG_ID = inner.def(PROGRAM, '.id')\n var CACHED_PROC = inner.def(progCache, '[', PROG_ID, ']')\n inner(\n env.shared.gl, '.useProgram(', PROGRAM, '.program);',\n 'if(!', CACHED_PROC, '){',\n CACHED_PROC, '=', progCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(\n emitBatchDynamicShaderBody, env, args, program, 2)\n }), '(', PROGRAM, ');}',\n CACHED_PROC, '.call(this,a0[', BATCH_ID, '],', BATCH_ID, ');')\n } else {\n if (args.useVAO) {\n if (args.drawVAO) {\n if (isInnerDefn(args.drawVAO)) {\n // vao is a prop\n inner(env.shared.vao, '.setVAO(', args.drawVAO.append(env, inner), ');')\n } else {\n // vao is invariant\n outer(env.shared.vao, '.setVAO(', args.drawVAO.append(env, outer), ');')\n }\n } else {\n // scoped vao binding\n outer(env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n }\n } else {\n outer(env.shared.vao, '.setVAO(null);')\n emitAttributes(env, outer, args, program.attributes, isOuterDefn)\n emitAttributes(env, inner, args, program.attributes, isInnerDefn)\n }\n emitUniforms(env, outer, args, program.uniforms, isOuterDefn, false)\n emitUniforms(env, inner, args, program.uniforms, isInnerDefn, true)\n emitDraw(env, outer, inner, args)\n }\n }\n\n function emitBatchProc (env, args) {\n var batch = env.proc('batch', 2)\n env.batchId = '0'\n\n injectExtensions(env, batch)\n\n // Check if any context variables depend on props\n var contextDynamic = false\n var needsContext = true\n Object.keys(args.context).forEach(function (name) {\n contextDynamic = contextDynamic || args.context[name].propDep\n })\n if (!contextDynamic) {\n emitContext(env, batch, args.context)\n needsContext = false\n }\n\n // framebuffer state affects framebufferWidth/height context vars\n var framebuffer = args.framebuffer\n var needsFramebuffer = false\n if (framebuffer) {\n if (framebuffer.propDep) {\n contextDynamic = needsFramebuffer = true\n } else if (framebuffer.contextDep && contextDynamic) {\n needsFramebuffer = true\n }\n if (!needsFramebuffer) {\n emitPollFramebuffer(env, batch, framebuffer)\n }\n } else {\n emitPollFramebuffer(env, batch, null)\n }\n\n // viewport is weird because it can affect context vars\n if (args.state.viewport && args.state.viewport.propDep) {\n contextDynamic = true\n }\n\n function isInnerDefn (defn) {\n return (defn.contextDep && contextDynamic) || defn.propDep\n }\n\n // set webgl options\n emitPollState(env, batch, args)\n emitSetOptions(env, batch, args.state, function (defn) {\n return !isInnerDefn(defn)\n })\n\n if (!args.profile || !isInnerDefn(args.profile)) {\n emitProfile(env, batch, args, false, 'a1')\n }\n\n // Save these values to args so that the batch body routine can use them\n args.contextDep = contextDynamic\n args.needsContext = needsContext\n args.needsFramebuffer = needsFramebuffer\n\n // determine if shader is dynamic\n var progDefn = args.shader.progVar\n if ((progDefn.contextDep && contextDynamic) || progDefn.propDep) {\n emitBatchBody(\n env,\n batch,\n args,\n null)\n } else {\n var PROGRAM = progDefn.append(env, batch)\n batch(env.shared.gl, '.useProgram(', PROGRAM, '.program);')\n if (args.shader.program) {\n emitBatchBody(\n env,\n batch,\n args,\n args.shader.program)\n } else {\n batch(env.shared.vao, '.setVAO(null);')\n var batchCache = env.global.def('{}')\n var PROG_ID = batch.def(PROGRAM, '.id')\n var CACHED_PROC = batch.def(batchCache, '[', PROG_ID, ']')\n batch(\n env.cond(CACHED_PROC)\n .then(CACHED_PROC, '.call(this,a0,a1);')\n .else(\n CACHED_PROC, '=', batchCache, '[', PROG_ID, ']=',\n env.link(function (program) {\n return createBody(emitBatchBody, env, args, program, 2)\n }), '(', PROGRAM, ');',\n CACHED_PROC, '.call(this,a0,a1);'))\n }\n }\n\n if (Object.keys(args.state).length > 0) {\n batch(env.shared.current, '.dirty=true;')\n }\n\n if (env.shared.vao) {\n batch(env.shared.vao, '.setVAO(null);')\n }\n }\n\n // ===================================================\n // ===================================================\n // SCOPE COMMAND\n // ===================================================\n // ===================================================\n function emitScopeProc (env, args) {\n var scope = env.proc('scope', 3)\n env.batchId = 'a2'\n\n var shared = env.shared\n var CURRENT_STATE = shared.current\n\n emitContext(env, scope, args.context)\n\n if (args.framebuffer) {\n args.framebuffer.append(env, scope)\n }\n\n sortState(Object.keys(args.state)).forEach(function (name) {\n var defn = args.state[name]\n var value = defn.append(env, scope)\n if (isArrayLike(value)) {\n value.forEach(function (v, i) {\n scope.set(env.next[name], '[' + i + ']', v)\n })\n } else {\n scope.set(shared.next, '.' + name, value)\n }\n })\n\n emitProfile(env, scope, args, true, true)\n\n ;[S_ELEMENTS, S_OFFSET, S_COUNT, S_INSTANCES, S_PRIMITIVE].forEach(\n function (opt) {\n var variable = args.draw[opt]\n if (!variable) {\n return\n }\n scope.set(shared.draw, '.' + opt, '' + variable.append(env, scope))\n })\n\n Object.keys(args.uniforms).forEach(function (opt) {\n var value = args.uniforms[opt].append(env, scope)\n if (Array.isArray(value)) {\n value = '[' + value.join() + ']'\n }\n scope.set(\n shared.uniforms,\n '[' + stringStore.id(opt) + ']',\n value)\n })\n\n Object.keys(args.attributes).forEach(function (name) {\n var record = args.attributes[name].append(env, scope)\n var scopeAttrib = env.scopeAttrib(name)\n Object.keys(new AttributeRecord()).forEach(function (prop) {\n scope.set(scopeAttrib, '.' + prop, record[prop])\n })\n })\n\n if (args.scopeVAO) {\n scope.set(shared.vao, '.targetVAO', args.scopeVAO.append(env, scope))\n }\n\n function saveShader (name) {\n var shader = args.shader[name]\n if (shader) {\n scope.set(shared.shader, '.' + name, shader.append(env, scope))\n }\n }\n saveShader(S_VERT)\n saveShader(S_FRAG)\n\n if (Object.keys(args.state).length > 0) {\n scope(CURRENT_STATE, '.dirty=true;')\n scope.exit(CURRENT_STATE, '.dirty=true;')\n }\n\n scope('a1(', env.shared.context, ',a0,', env.batchId, ');')\n }\n\n function isDynamicObject (object) {\n if (typeof object !== 'object' || isArrayLike(object)) {\n return\n }\n var props = Object.keys(object)\n for (var i = 0; i < props.length; ++i) {\n if (dynamic.isDynamic(object[props[i]])) {\n return true\n }\n }\n return false\n }\n\n function splatObject (env, options, name) {\n var object = options.static[name]\n if (!object || !isDynamicObject(object)) {\n return\n }\n\n var globals = env.global\n var keys = Object.keys(object)\n var thisDep = false\n var contextDep = false\n var propDep = false\n var objectRef = env.global.def('{}')\n keys.forEach(function (key) {\n var value = object[key]\n if (dynamic.isDynamic(value)) {\n if (typeof value === 'function') {\n value = object[key] = dynamic.unbox(value)\n }\n var deps = createDynamicDecl(value, null)\n thisDep = thisDep || deps.thisDep\n propDep = propDep || deps.propDep\n contextDep = contextDep || deps.contextDep\n } else {\n globals(objectRef, '.', key, '=')\n switch (typeof value) {\n case 'number':\n globals(value)\n break\n case 'string':\n globals('\"', value, '\"')\n break\n case 'object':\n if (Array.isArray(value)) {\n globals('[', value.join(), ']')\n }\n break\n default:\n globals(env.link(value))\n break\n }\n globals(';')\n }\n })\n\n function appendBlock (env, block) {\n keys.forEach(function (key) {\n var value = object[key]\n if (!dynamic.isDynamic(value)) {\n return\n }\n var ref = env.invoke(block, value)\n block(objectRef, '.', key, '=', ref, ';')\n })\n }\n\n options.dynamic[name] = new dynamic.DynamicVariable(DYN_THUNK, {\n thisDep: thisDep,\n contextDep: contextDep,\n propDep: propDep,\n ref: objectRef,\n append: appendBlock\n })\n delete options.static[name]\n }\n\n // ===========================================================================\n // ===========================================================================\n // MAIN DRAW COMMAND\n // ===========================================================================\n // ===========================================================================\n function compileCommand (options, attributes, uniforms, context, stats) {\n var env = createREGLEnvironment()\n\n // link stats, so that we can easily access it in the program.\n env.stats = env.link(stats)\n\n // splat options and attributes to allow for dynamic nested properties\n Object.keys(attributes.static).forEach(function (key) {\n splatObject(env, attributes, key)\n })\n NESTED_OPTIONS.forEach(function (name) {\n splatObject(env, options, name)\n })\n\n var args = parseArguments(options, attributes, uniforms, context, env)\n\n emitDrawProc(env, args)\n emitScopeProc(env, args)\n emitBatchProc(env, args)\n\n return extend(env.compile(), {\n destroy: function () {\n args.shader.program.destroy()\n }\n })\n }\n\n // ===========================================================================\n // ===========================================================================\n // POLL / REFRESH\n // ===========================================================================\n // ===========================================================================\n return {\n next: nextState,\n current: currentState,\n procs: (function () {\n var env = createREGLEnvironment()\n var poll = env.proc('poll')\n var refresh = env.proc('refresh')\n var common = env.block()\n poll(common)\n refresh(common)\n\n var shared = env.shared\n var GL = shared.gl\n var NEXT_STATE = shared.next\n var CURRENT_STATE = shared.current\n\n common(CURRENT_STATE, '.dirty=false;')\n\n emitPollFramebuffer(env, poll)\n emitPollFramebuffer(env, refresh, null, true)\n\n // Refresh updates all attribute state changes\n var INSTANCING\n if (extInstancing) {\n INSTANCING = env.link(extInstancing)\n }\n\n // update vertex array bindings\n if (extensions.oes_vertex_array_object) {\n refresh(env.link(extensions.oes_vertex_array_object), '.bindVertexArrayOES(null);')\n }\n for (var i = 0; i < limits.maxAttributes; ++i) {\n var BINDING = refresh.def(shared.attributes, '[', i, ']')\n var ifte = env.cond(BINDING, '.buffer')\n ifte.then(\n GL, '.enableVertexAttribArray(', i, ');',\n GL, '.bindBuffer(',\n GL_ARRAY_BUFFER$2, ',',\n BINDING, '.buffer.buffer);',\n GL, '.vertexAttribPointer(',\n i, ',',\n BINDING, '.size,',\n BINDING, '.type,',\n BINDING, '.normalized,',\n BINDING, '.stride,',\n BINDING, '.offset);'\n ).else(\n GL, '.disableVertexAttribArray(', i, ');',\n GL, '.vertexAttrib4f(',\n i, ',',\n BINDING, '.x,',\n BINDING, '.y,',\n BINDING, '.z,',\n BINDING, '.w);',\n BINDING, '.buffer=null;')\n refresh(ifte)\n if (extInstancing) {\n refresh(\n INSTANCING, '.vertexAttribDivisorANGLE(',\n i, ',',\n BINDING, '.divisor);')\n }\n }\n refresh(\n env.shared.vao, '.currentVAO=null;',\n env.shared.vao, '.setVAO(', env.shared.vao, '.targetVAO);')\n\n Object.keys(GL_FLAGS).forEach(function (flag) {\n var cap = GL_FLAGS[flag]\n var NEXT = common.def(NEXT_STATE, '.', flag)\n var block = env.block()\n block('if(', NEXT, '){',\n GL, '.enable(', cap, ')}else{',\n GL, '.disable(', cap, ')}',\n CURRENT_STATE, '.', flag, '=', NEXT, ';')\n refresh(block)\n poll(\n 'if(', NEXT, '!==', CURRENT_STATE, '.', flag, '){',\n block,\n '}')\n })\n\n Object.keys(GL_VARIABLES).forEach(function (name) {\n var func = GL_VARIABLES[name]\n var init = currentState[name]\n var NEXT, CURRENT\n var block = env.block()\n block(GL, '.', func, '(')\n if (isArrayLike(init)) {\n var n = init.length\n NEXT = env.global.def(NEXT_STATE, '.', name)\n CURRENT = env.global.def(CURRENT_STATE, '.', name)\n block(\n loop(n, function (i) {\n return NEXT + '[' + i + ']'\n }), ');',\n loop(n, function (i) {\n return CURRENT + '[' + i + ']=' + NEXT + '[' + i + '];'\n }).join(''))\n poll(\n 'if(', loop(n, function (i) {\n return NEXT + '[' + i + ']!==' + CURRENT + '[' + i + ']'\n }).join('||'), '){',\n block,\n '}')\n } else {\n NEXT = common.def(NEXT_STATE, '.', name)\n CURRENT = common.def(CURRENT_STATE, '.', name)\n block(\n NEXT, ');',\n CURRENT_STATE, '.', name, '=', NEXT, ';')\n poll(\n 'if(', NEXT, '!==', CURRENT, '){',\n block,\n '}')\n }\n refresh(block)\n })\n\n return env.compile()\n })(),\n compile: compileCommand\n }\n}\n\nfunction stats () {\n return {\n vaoCount: 0,\n bufferCount: 0,\n elementsCount: 0,\n framebufferCount: 0,\n shaderCount: 0,\n textureCount: 0,\n cubeCount: 0,\n renderbufferCount: 0,\n maxTextureUnits: 0\n }\n}\n\nvar GL_QUERY_RESULT_EXT = 0x8866\nvar GL_QUERY_RESULT_AVAILABLE_EXT = 0x8867\nvar GL_TIME_ELAPSED_EXT = 0x88BF\n\nvar createTimer = function (gl, extensions) {\n if (!extensions.ext_disjoint_timer_query) {\n return null\n }\n\n // QUERY POOL BEGIN\n var queryPool = []\n function allocQuery () {\n return queryPool.pop() || extensions.ext_disjoint_timer_query.createQueryEXT()\n }\n function freeQuery (query) {\n queryPool.push(query)\n }\n // QUERY POOL END\n\n var pendingQueries = []\n function beginQuery (stats) {\n var query = allocQuery()\n extensions.ext_disjoint_timer_query.beginQueryEXT(GL_TIME_ELAPSED_EXT, query)\n pendingQueries.push(query)\n pushScopeStats(pendingQueries.length - 1, pendingQueries.length, stats)\n }\n\n function endQuery () {\n extensions.ext_disjoint_timer_query.endQueryEXT(GL_TIME_ELAPSED_EXT)\n }\n\n //\n // Pending stats pool.\n //\n function PendingStats () {\n this.startQueryIndex = -1\n this.endQueryIndex = -1\n this.sum = 0\n this.stats = null\n }\n var pendingStatsPool = []\n function allocPendingStats () {\n return pendingStatsPool.pop() || new PendingStats()\n }\n function freePendingStats (pendingStats) {\n pendingStatsPool.push(pendingStats)\n }\n // Pending stats pool end\n\n var pendingStats = []\n function pushScopeStats (start, end, stats) {\n var ps = allocPendingStats()\n ps.startQueryIndex = start\n ps.endQueryIndex = end\n ps.sum = 0\n ps.stats = stats\n pendingStats.push(ps)\n }\n\n // we should call this at the beginning of the frame,\n // in order to update gpuTime\n var timeSum = []\n var queryPtr = []\n function update () {\n var ptr, i\n\n var n = pendingQueries.length\n if (n === 0) {\n return\n }\n\n // Reserve space\n queryPtr.length = Math.max(queryPtr.length, n + 1)\n timeSum.length = Math.max(timeSum.length, n + 1)\n timeSum[0] = 0\n queryPtr[0] = 0\n\n // Update all pending timer queries\n var queryTime = 0\n ptr = 0\n for (i = 0; i < pendingQueries.length; ++i) {\n var query = pendingQueries[i]\n if (extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_AVAILABLE_EXT)) {\n queryTime += extensions.ext_disjoint_timer_query.getQueryObjectEXT(query, GL_QUERY_RESULT_EXT)\n freeQuery(query)\n } else {\n pendingQueries[ptr++] = query\n }\n timeSum[i + 1] = queryTime\n queryPtr[i + 1] = ptr\n }\n pendingQueries.length = ptr\n\n // Update all pending stat queries\n ptr = 0\n for (i = 0; i < pendingStats.length; ++i) {\n var stats = pendingStats[i]\n var start = stats.startQueryIndex\n var end = stats.endQueryIndex\n stats.sum += timeSum[end] - timeSum[start]\n var startPtr = queryPtr[start]\n var endPtr = queryPtr[end]\n if (endPtr === startPtr) {\n stats.stats.gpuTime += stats.sum / 1e6\n freePendingStats(stats)\n } else {\n stats.startQueryIndex = startPtr\n stats.endQueryIndex = endPtr\n pendingStats[ptr++] = stats\n }\n }\n pendingStats.length = ptr\n }\n\n return {\n beginQuery: beginQuery,\n endQuery: endQuery,\n pushScopeStats: pushScopeStats,\n update: update,\n getNumPendingQueries: function () {\n return pendingQueries.length\n },\n clear: function () {\n queryPool.push.apply(queryPool, pendingQueries)\n for (var i = 0; i < queryPool.length; i++) {\n extensions.ext_disjoint_timer_query.deleteQueryEXT(queryPool[i])\n }\n pendingQueries.length = 0\n queryPool.length = 0\n },\n restore: function () {\n pendingQueries.length = 0\n queryPool.length = 0\n }\n }\n}\n\nvar GL_COLOR_BUFFER_BIT = 16384\nvar GL_DEPTH_BUFFER_BIT = 256\nvar GL_STENCIL_BUFFER_BIT = 1024\n\nvar GL_ARRAY_BUFFER = 34962\n\nvar CONTEXT_LOST_EVENT = 'webglcontextlost'\nvar CONTEXT_RESTORED_EVENT = 'webglcontextrestored'\n\nvar DYN_PROP = 1\nvar DYN_CONTEXT = 2\nvar DYN_STATE = 3\n\nfunction find (haystack, needle) {\n for (var i = 0; i < haystack.length; ++i) {\n if (haystack[i] === needle) {\n return i\n }\n }\n return -1\n}\n\nfunction wrapREGL (args) {\n var config = parseArgs(args)\n if (!config) {\n return null\n }\n\n var gl = config.gl\n var glAttributes = gl.getContextAttributes()\n var contextLost = gl.isContextLost()\n\n var extensionState = createExtensionCache(gl, config)\n if (!extensionState) {\n return null\n }\n\n var stringStore = createStringStore()\n var stats$$1 = stats()\n var extensions = extensionState.extensions\n var timer = createTimer(gl, extensions)\n\n var START_TIME = clock()\n var WIDTH = gl.drawingBufferWidth\n var HEIGHT = gl.drawingBufferHeight\n\n var contextState = {\n tick: 0,\n time: 0,\n viewportWidth: WIDTH,\n viewportHeight: HEIGHT,\n framebufferWidth: WIDTH,\n framebufferHeight: HEIGHT,\n drawingBufferWidth: WIDTH,\n drawingBufferHeight: HEIGHT,\n pixelRatio: config.pixelRatio\n }\n var uniformState = {}\n var drawState = {\n elements: null,\n primitive: 4, // GL_TRIANGLES\n count: -1,\n offset: 0,\n instances: -1\n }\n\n var limits = wrapLimits(gl, extensions)\n var bufferState = wrapBufferState(\n gl,\n stats$$1,\n config,\n destroyBuffer)\n var elementState = wrapElementsState(gl, extensions, bufferState, stats$$1)\n var attributeState = wrapAttributeState(\n gl,\n extensions,\n limits,\n stats$$1,\n bufferState,\n elementState,\n drawState)\n function destroyBuffer (buffer) {\n return attributeState.destroyBuffer(buffer)\n }\n var shaderState = wrapShaderState(gl, stringStore, stats$$1, config)\n var textureState = createTextureSet(\n gl,\n extensions,\n limits,\n function () { core.procs.poll() },\n contextState,\n stats$$1,\n config)\n var renderbufferState = wrapRenderbuffers(gl, extensions, limits, stats$$1, config)\n var framebufferState = wrapFBOState(\n gl,\n extensions,\n limits,\n textureState,\n renderbufferState,\n stats$$1)\n var core = reglCore(\n gl,\n stringStore,\n extensions,\n limits,\n bufferState,\n elementState,\n textureState,\n framebufferState,\n uniformState,\n attributeState,\n shaderState,\n drawState,\n contextState,\n timer,\n config)\n var readPixels = wrapReadPixels(\n gl,\n framebufferState,\n core.procs.poll,\n contextState,\n glAttributes, extensions, limits)\n\n var nextState = core.next\n var canvas = gl.canvas\n\n var rafCallbacks = []\n var lossCallbacks = []\n var restoreCallbacks = []\n var destroyCallbacks = [config.onDestroy]\n\n var activeRAF = null\n function handleRAF () {\n if (rafCallbacks.length === 0) {\n if (timer) {\n timer.update()\n }\n activeRAF = null\n return\n }\n\n // schedule next animation frame\n activeRAF = raf.next(handleRAF)\n\n // poll for changes\n poll()\n\n // fire a callback for all pending rafs\n for (var i = rafCallbacks.length - 1; i >= 0; --i) {\n var cb = rafCallbacks[i]\n if (cb) {\n cb(contextState, null, 0)\n }\n }\n\n // flush all pending webgl calls\n gl.flush()\n\n // poll GPU timers *after* gl.flush so we don't delay command dispatch\n if (timer) {\n timer.update()\n }\n }\n\n function startRAF () {\n if (!activeRAF && rafCallbacks.length > 0) {\n activeRAF = raf.next(handleRAF)\n }\n }\n\n function stopRAF () {\n if (activeRAF) {\n raf.cancel(handleRAF)\n activeRAF = null\n }\n }\n\n function handleContextLoss (event) {\n event.preventDefault()\n\n // set context lost flag\n contextLost = true\n\n // pause request animation frame\n stopRAF()\n\n // lose context\n lossCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n function handleContextRestored (event) {\n // clear error code\n gl.getError()\n\n // clear context lost flag\n contextLost = false\n\n // refresh state\n extensionState.restore()\n shaderState.restore()\n bufferState.restore()\n textureState.restore()\n renderbufferState.restore()\n framebufferState.restore()\n attributeState.restore()\n if (timer) {\n timer.restore()\n }\n\n // refresh state\n core.procs.refresh()\n\n // restart RAF\n startRAF()\n\n // restore context\n restoreCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n if (canvas) {\n canvas.addEventListener(CONTEXT_LOST_EVENT, handleContextLoss, false)\n canvas.addEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored, false)\n }\n\n function destroy () {\n rafCallbacks.length = 0\n stopRAF()\n\n if (canvas) {\n canvas.removeEventListener(CONTEXT_LOST_EVENT, handleContextLoss)\n canvas.removeEventListener(CONTEXT_RESTORED_EVENT, handleContextRestored)\n }\n\n shaderState.clear()\n framebufferState.clear()\n renderbufferState.clear()\n attributeState.clear()\n textureState.clear()\n elementState.clear()\n bufferState.clear()\n\n if (timer) {\n timer.clear()\n }\n\n destroyCallbacks.forEach(function (cb) {\n cb()\n })\n }\n\n function compileProcedure (options) {\n check$1(!!options, 'invalid args to regl({...})')\n check$1.type(options, 'object', 'invalid args to regl({...})')\n\n function flattenNestedOptions (options) {\n var result = extend({}, options)\n delete result.uniforms\n delete result.attributes\n delete result.context\n delete result.vao\n\n if ('stencil' in result && result.stencil.op) {\n result.stencil.opBack = result.stencil.opFront = result.stencil.op\n delete result.stencil.op\n }\n\n function merge (name) {\n if (name in result) {\n var child = result[name]\n delete result[name]\n Object.keys(child).forEach(function (prop) {\n result[name + '.' + prop] = child[prop]\n })\n }\n }\n merge('blend')\n merge('depth')\n merge('cull')\n merge('stencil')\n merge('polygonOffset')\n merge('scissor')\n merge('sample')\n\n if ('vao' in options) {\n result.vao = options.vao\n }\n\n return result\n }\n\n function separateDynamic (object, useArrays) {\n var staticItems = {}\n var dynamicItems = {}\n Object.keys(object).forEach(function (option) {\n var value = object[option]\n if (dynamic.isDynamic(value)) {\n dynamicItems[option] = dynamic.unbox(value, option)\n return\n } else if (useArrays && Array.isArray(value)) {\n for (var i = 0; i < value.length; ++i) {\n if (dynamic.isDynamic(value[i])) {\n dynamicItems[option] = dynamic.unbox(value, option)\n return\n }\n }\n }\n staticItems[option] = value\n })\n return {\n dynamic: dynamicItems,\n static: staticItems\n }\n }\n\n // Treat context variables separate from other dynamic variables\n var context = separateDynamic(options.context || {}, true)\n var uniforms = separateDynamic(options.uniforms || {}, true)\n var attributes = separateDynamic(options.attributes || {}, false)\n var opts = separateDynamic(flattenNestedOptions(options), false)\n\n var stats$$1 = {\n gpuTime: 0.0,\n cpuTime: 0.0,\n count: 0\n }\n\n var compiled = core.compile(opts, attributes, uniforms, context, stats$$1)\n\n var draw = compiled.draw\n var batch = compiled.batch\n var scope = compiled.scope\n\n // FIXME: we should modify code generation for batch commands so this\n // isn't necessary\n var EMPTY_ARRAY = []\n function reserve (count) {\n while (EMPTY_ARRAY.length < count) {\n EMPTY_ARRAY.push(null)\n }\n return EMPTY_ARRAY\n }\n\n function REGLCommand (args, body) {\n var i\n if (contextLost) {\n check$1.raise('context lost')\n }\n if (typeof args === 'function') {\n return scope.call(this, null, args, 0)\n } else if (typeof body === 'function') {\n if (typeof args === 'number') {\n for (i = 0; i < args; ++i) {\n scope.call(this, null, body, i)\n }\n } else if (Array.isArray(args)) {\n for (i = 0; i < args.length; ++i) {\n scope.call(this, args[i], body, i)\n }\n } else {\n return scope.call(this, args, body, 0)\n }\n } else if (typeof args === 'number') {\n if (args > 0) {\n return batch.call(this, reserve(args | 0), args | 0)\n }\n } else if (Array.isArray(args)) {\n if (args.length) {\n return batch.call(this, args, args.length)\n }\n } else {\n return draw.call(this, args)\n }\n }\n\n return extend(REGLCommand, {\n stats: stats$$1,\n destroy: function () {\n compiled.destroy()\n }\n })\n }\n\n var setFBO = framebufferState.setFBO = compileProcedure({\n framebuffer: dynamic.define.call(null, DYN_PROP, 'framebuffer')\n })\n\n function clearImpl (_, options) {\n var clearFlags = 0\n core.procs.poll()\n\n var c = options.color\n if (c) {\n gl.clearColor(+c[0] || 0, +c[1] || 0, +c[2] || 0, +c[3] || 0)\n clearFlags |= GL_COLOR_BUFFER_BIT\n }\n if ('depth' in options) {\n gl.clearDepth(+options.depth)\n clearFlags |= GL_DEPTH_BUFFER_BIT\n }\n if ('stencil' in options) {\n gl.clearStencil(options.stencil | 0)\n clearFlags |= GL_STENCIL_BUFFER_BIT\n }\n\n check$1(!!clearFlags, 'called regl.clear with no buffer specified')\n gl.clear(clearFlags)\n }\n\n function clear (options) {\n check$1(\n typeof options === 'object' && options,\n 'regl.clear() takes an object as input')\n if ('framebuffer' in options) {\n if (options.framebuffer &&\n options.framebuffer_reglType === 'framebufferCube') {\n for (var i = 0; i < 6; ++i) {\n setFBO(extend({\n framebuffer: options.framebuffer.faces[i]\n }, options), clearImpl)\n }\n } else {\n setFBO(options, clearImpl)\n }\n } else {\n clearImpl(null, options)\n }\n }\n\n function frame (cb) {\n check$1.type(cb, 'function', 'regl.frame() callback must be a function')\n rafCallbacks.push(cb)\n\n function cancel () {\n // FIXME: should we check something other than equals cb here?\n // what if a user calls frame twice with the same callback...\n //\n var i = find(rafCallbacks, cb)\n check$1(i >= 0, 'cannot cancel a frame twice')\n function pendingCancel () {\n var index = find(rafCallbacks, pendingCancel)\n rafCallbacks[index] = rafCallbacks[rafCallbacks.length - 1]\n rafCallbacks.length -= 1\n if (rafCallbacks.length <= 0) {\n stopRAF()\n }\n }\n rafCallbacks[i] = pendingCancel\n }\n\n startRAF()\n\n return {\n cancel: cancel\n }\n }\n\n // poll viewport\n function pollViewport () {\n var viewport = nextState.viewport\n var scissorBox = nextState.scissor_box\n viewport[0] = viewport[1] = scissorBox[0] = scissorBox[1] = 0\n contextState.viewportWidth =\n contextState.framebufferWidth =\n contextState.drawingBufferWidth =\n viewport[2] =\n scissorBox[2] = gl.drawingBufferWidth\n contextState.viewportHeight =\n contextState.framebufferHeight =\n contextState.drawingBufferHeight =\n viewport[3] =\n scissorBox[3] = gl.drawingBufferHeight\n }\n\n function poll () {\n contextState.tick += 1\n contextState.time = now()\n pollViewport()\n core.procs.poll()\n }\n\n function refresh () {\n textureState.refresh()\n pollViewport()\n core.procs.refresh()\n if (timer) {\n timer.update()\n }\n }\n\n function now () {\n return (clock() - START_TIME) / 1000.0\n }\n\n refresh()\n\n function addListener (event, callback) {\n check$1.type(callback, 'function', 'listener callback must be a function')\n\n var callbacks\n switch (event) {\n case 'frame':\n return frame(callback)\n case 'lost':\n callbacks = lossCallbacks\n break\n case 'restore':\n callbacks = restoreCallbacks\n break\n case 'destroy':\n callbacks = destroyCallbacks\n break\n default:\n check$1.raise('invalid event, must be one of frame,lost,restore,destroy')\n }\n\n callbacks.push(callback)\n return {\n cancel: function () {\n for (var i = 0; i < callbacks.length; ++i) {\n if (callbacks[i] === callback) {\n callbacks[i] = callbacks[callbacks.length - 1]\n callbacks.pop()\n return\n }\n }\n }\n }\n }\n\n var regl = extend(compileProcedure, {\n // Clear current FBO\n clear: clear,\n\n // Short cuts for dynamic variables\n prop: dynamic.define.bind(null, DYN_PROP),\n context: dynamic.define.bind(null, DYN_CONTEXT),\n this: dynamic.define.bind(null, DYN_STATE),\n\n // executes an empty draw command\n draw: compileProcedure({}),\n\n // Resources\n buffer: function (options) {\n return bufferState.create(options, GL_ARRAY_BUFFER, false, false)\n },\n elements: function (options) {\n return elementState.create(options, false)\n },\n texture: textureState.create2D,\n cube: textureState.createCube,\n renderbuffer: renderbufferState.create,\n framebuffer: framebufferState.create,\n framebufferCube: framebufferState.createCube,\n vao: attributeState.createVAO,\n\n // Expose context attributes\n attributes: glAttributes,\n\n // Frame rendering\n frame: frame,\n on: addListener,\n\n // System limits\n limits: limits,\n hasExtension: function (name) {\n return limits.extensions.indexOf(name.toLowerCase()) >= 0\n },\n\n // Read pixels\n read: readPixels,\n\n // Destroy regl and all associated resources\n destroy: destroy,\n\n // Direct GL state manipulation\n _gl: gl,\n _refresh: refresh,\n\n poll: function () {\n poll()\n if (timer) {\n timer.update()\n }\n },\n\n // Current time\n now: now,\n\n // regl Statistics Information\n stats: stats$$1\n })\n\n config.onDone(null, regl)\n\n return regl\n}\n\nreturn wrapREGL;\n\n})));\n//# sourceMappingURL=regl.js.map\n","export const defaultPointColor = '#b3b3b3'\nexport const defaultGreyoutPointOpacity = undefined\nexport const defaultGreyoutPointColor = undefined\nexport const defaultPointOpacity = 1.0\nexport const defaultPointSize = 4\nexport const defaultLinkColor = '#666666'\nexport const defaultGreyoutLinkOpacity = 0.1\nexport const defaultLinkOpacity = 1.0\nexport const defaultLinkWidth = 1\nexport const defaultBackgroundColor = '#222222'\n\nexport const defaultConfigValues = {\n enableSimulation: true,\n spaceSize: 8192,\n pointSizeScale: 1,\n linkWidthScale: 1,\n linkArrowsSizeScale: 1,\n renderLinks: true,\n curvedLinks: false,\n curvedLinkSegments: 19,\n curvedLinkWeight: 0.8,\n curvedLinkControlPointDistance: 0.5,\n linkArrows: false,\n linkVisibilityDistanceRange: [50, 150],\n linkVisibilityMinTransparency: 0.25,\n hoveredPointCursor: 'auto',\n hoveredLinkCursor: 'auto',\n renderHoveredPointRing: false,\n hoveredPointRingColor: 'white',\n hoveredLinkColor: undefined,\n hoveredLinkWidthIncrease: 5,\n focusedPointRingColor: 'white',\n focusedPointIndex: undefined,\n useClassicQuadtree: false,\n simulation: {\n decay: 5000,\n gravity: 0.25,\n center: 0,\n repulsion: 1.0,\n repulsionTheta: 1.15,\n repulsionQuadtreeLevels: 12,\n linkSpring: 1,\n linkDistance: 10,\n linkDistRandomVariationRange: [1, 1.2],\n repulsionFromMouse: 2,\n friction: 0.85,\n cluster: 0.1,\n },\n showFPSMonitor: false,\n pixelRatio: 2,\n scalePointsOnZoom: false,\n scaleLinksOnZoom: false,\n enableZoom: true,\n enableSimulationDuringZoom: false,\n enableDrag: false,\n fitViewOnInit: true,\n fitViewDelay: 250,\n fitViewPadding: 0.1,\n fitViewDuration: 250,\n pointSamplingDistance: 150,\n attribution: '',\n rescalePositions: undefined,\n enableRightClickRepulsion: false,\n}\n\nexport const hoveredPointRingOpacity = 0.7\nexport const focusedPointRingOpacity = 0.95\nexport const defaultScaleToZoom = 3\n","/*! @license DOMPurify 3.2.6 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.2.6/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(fun, thisValue, args) {\n return fun.apply(thisValue, args);\n };\n}\nif (!construct) {\n construct = function construct(Func, args) {\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(func) {\n return function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return construct(func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.2.6';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n if (cfg.ADD_ATTR) {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","import { color as d3Color } from 'd3-color'\nimport regl from 'regl'\nimport DOMPurify from 'dompurify'\n\nexport const isFunction = <T>(a: T): boolean => typeof a === 'function'\nexport const isArray = <T>(a: unknown | T[]): a is T[] => Array.isArray(a)\nexport const isObject = <T>(a: T): boolean => (a instanceof Object)\nexport const isAClassInstance = <T>(a: T): boolean => {\n if (a instanceof Object) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n return (a as T & Object).constructor.name !== 'Function' && (a as T & Object).constructor.name !== 'Object'\n } else return false\n}\nexport const isPlainObject = <T>(a: T): boolean => isObject(a) && !isArray(a) && !isFunction(a) && !isAClassInstance(a)\n\nexport function getRgbaColor (value: string | [number, number, number, number]): [number, number, number, number] {\n let rgba: [number, number, number, number]\n if (isArray(value)) {\n rgba = value\n } else {\n const color = d3Color(value)\n const rgb = color?.rgb()\n rgba = [rgb?.r || 0, rgb?.g || 0, rgb?.b || 0, color?.opacity ?? 1]\n }\n\n return [\n rgba[0] / 255,\n rgba[1] / 255,\n rgba[2] / 255,\n rgba[3],\n ]\n}\n\nexport function rgbToBrightness (r: number, g: number, b: number): number {\n return 0.2126 * r + 0.7152 * g + 0.0722 * b\n}\n\nexport function readPixels (reglInstance: regl.Regl, fbo: regl.Framebuffer2D): Float32Array {\n let resultPixels = new Float32Array()\n reglInstance({ framebuffer: fbo })(() => {\n resultPixels = reglInstance.read()\n })\n\n return resultPixels\n}\n\nexport function clamp (num: number, min: number, max: number): number {\n return Math.min(Math.max(num, min), max)\n}\n\nexport function isNumber (value: number | undefined | null | typeof NaN): boolean {\n return value !== undefined && value !== null && !Number.isNaN(value)\n}\n\n/**\n * Sanitizes HTML content to prevent XSS attacks using DOMPurify\n *\n * This function is used internally to sanitize HTML content before setting innerHTML,\n * such as in attribution text. It uses a safe default configuration that allows\n * only common safe HTML elements and attributes.\n *\n * @param html The HTML string to sanitize\n * @param options Optional DOMPurify configuration options to override defaults\n * @returns Sanitized HTML string safe for innerHTML usage\n */\nexport function sanitizeHtml (html: string, options?: DOMPurify.Config): string {\n return DOMPurify.sanitize(html, {\n // Default configuration: allow common safe HTML elements and attributes\n ALLOWED_TAGS: ['a', 'b', 'i', 'em', 'strong', 'span', 'div', 'p', 'br'],\n ALLOWED_ATTR: ['href', 'target', 'class', 'id', 'style'],\n ALLOW_DATA_ATTR: false,\n ...options,\n })\n}\n","/* eslint-disable @typescript-eslint/naming-convention */\nimport { D3ZoomEvent } from 'd3-zoom'\nimport { D3DragEvent } from 'd3-drag'\nimport {\n defaultPointColor,\n defaultGreyoutPointOpacity,\n defaultGreyoutPointColor,\n defaultPointOpacity,\n defaultPointSize,\n defaultLinkColor,\n defaultGreyoutLinkOpacity,\n defaultLinkOpacity,\n defaultLinkWidth,\n defaultBackgroundColor,\n defaultConfigValues,\n} from '@/graph/variables'\nimport { isPlainObject } from '@/graph/helper'\nimport { type Hovered } from '@/graph/modules/Store'\n\nexport interface GraphConfigInterface {\n /**\n * If set to `false`, the simulation will not run.\n * This property will be applied only on component initialization and it\n * can't be changed using the `setConfig` method.\n * Default value: `true`\n */\n enableSimulation?: boolean;\n /**\n * Canvas background color.\n * Can be either a hex color string (e.g., '#b3b3b3') or an array of RGBA values.\n * Default value: '#222222'\n */\n backgroundColor?: string | [number, number, number, number];\n /**\n * Simulation space size (max 8192).\n * Default value: `8192`\n */\n spaceSize?: number;\n\n /**\n * The default color to use for points when no point colors are provided,\n * or if the color value in the array is `undefined` or `null`.\n * This can be either a hex color string (e.g., '#b3b3b3') or an array of RGBA values\n * in the format `[red, green, blue, alpha]` where each value is a number between 0 and 255.\n * Default value: '#b3b3b3'\n */\n pointDefaultColor?: string | [number, number, number, number];\n\n /** @deprecated Use `pointDefaultColor` instead */\n pointColor?: string | [number, number, number, number];\n\n /**\n * The color to use for points when they are greyed out (when selection is active).\n * This can be either a hex color string (e.g., '#b3b3b3') or an array of RGBA values\n * in the format `[red, green, blue, alpha]` where each value is a number between 0 and 255.\n *\n * If not provided, the color will be the same as the point's original color,\n * but darkened or lightened depending on the background color.\n *\n * If `pointGreyoutOpacity` is also defined, it will override the alpha/opacity component\n * of this color.\n *\n * Default value: `undefined`\n */\n pointGreyoutColor?: string | [number, number, number, number];\n\n /**\n * Opacity value for points when they are greyed out (when selection is active).\n * Values range from 0 (completely transparent) to 1 (fully opaque).\n *\n * If defined, this value will override the alpha/opacity component of `pointGreyoutColor`.\n *\n * Default value: `undefined`\n */\n pointGreyoutOpacity?: number;\n\n /**\n * The default size value to use for points when no point sizes are provided or\n * if the size value in the array is `undefined` or `null`.\n * Default value: `4`\n */\n pointSize?: number;\n\n /**\n * Universal opacity value applied to all points.\n * This value multiplies with individual point alpha values (if set via setPointColors).\n * Useful for dynamically controlling opacity of all points without updating individual RGBA arrays.\n * Default value: `1.0`\n */\n pointOpacity?: number;\n\n /**\n * Scale factor for the point size.\n * Default value: `1`\n */\n pointSizeScale?: number;\n\n /**\n * Cursor style to use when hovering over a point\n * Default value: `auto`\n */\n hoveredPointCursor?: string;\n\n /**\n * Cursor style to use when hovering over a link\n * Default value: `auto`\n */\n hoveredLinkCursor?: string;\n\n /**\n * Turns ring rendering around a point on hover on / off\n * Default value: `false`\n */\n renderHoveredPointRing?: boolean;\n\n /**\n * Hovered point ring color hex value.\n * Can be either a hex color string (e.g., '#b3b3b3') or an array of RGBA values.\n * Default value: `white`\n */\n hoveredPointRingColor?: string | [number, number, number, number];\n\n /**\n * Focused point ring color hex value.\n * Can be either a hex color string (e.g., '#b3b3b3') or an array of RGBA values.\n * Default value: `white`\n */\n focusedPointRingColor?: string | [number, number, number, number];\n\n /**\n * Set focus on a point by index. A ring will be highlighted around the focused point.\n * When set to `undefined`, no point is focused.\n * Default value: `undefined`\n */\n focusedPointIndex?: number;\n\n /**\n * Turns link rendering on / off.\n * Default value: `true`\n */\n renderLinks?: boolean;\n\n /**\n * The default color to use for links when no link colors are provided,\n * or if the color value in the array is `undefined` or `null`.\n * This can be either a hex color string (e.g., '#666666') or an array of RGBA values\n * in the format `[red, green, blue, alpha]` where each value is a number between 0 and 255.\n * Default value: '#666666'\n */\n linkDefaultColor?: string | [number, number, number, number];\n\n /** @deprecated Use `linkDefaultColor` instead */\n linkColor?: string | [number, number, number, number];\n\n /**\n * Universal opacity value applied to all links.\n * This value multiplies with individual link alpha values (if set via setLinkColors).\n * Useful for dynamically controlling opacity of all links without updating individual RGBA arrays.\n * Default value: `1.0`\n */\n linkOpacity?: number;\n\n /**\n * Greyed out link opacity value when the selection is active.\n * Default value: `0.1`\n */\n linkGreyoutOpacity?: number;\n /**\n * The default width value to use for links when no link widths are provided or if the width value in the array is `undefined` or `null`.\n * Default value: `1`\n */\n linkWidth?: number;\n /**\n * The color to use for links when they are hovered.\n * This can be either a hex color string (e.g., '#ff3333') or an array of RGBA values\n * in the format `[red, green, blue, alpha]` where each value is a number between 0 and 255.\n * Default value: `undefined`\n */\n hoveredLinkColor?: string | [number, number, number, number];\n /**\n * Number of pixels to add to the link width when hovered.\n * The hovered width is calculated as: originalWidth + hoveredLinkWidthIncrease\n * Default value: `5`\n */\n hoveredLinkWidthIncrease?: number;\n /**\n * Scale factor for the link width.\n * Default value: `1`\n */\n linkWidthScale?: number;\n /**\n * Increase or decrease the size of the links when zooming in or out.\n * Default value: `false`\n */\n scaleLinksOnZoom?: boolean;\n /**\n * If set to true, links are rendered as curved lines.\n * Otherwise as straight lines.\n * Default value: `false`\n */\n curvedLinks?: boolean;\n /**\n * Number of segments in a curved line.\n * Default value: `19`.\n */\n curvedLinkSegments?: number;\n /**\n * Weight affects the shape of the curve.\n * Default value: `0.8`.\n */\n curvedLinkWeight?: number;\n /**\n * Defines the position of the control point of the curve on the normal from the centre of the line.\n * If set to 1 then the control point is at a distance equal to the length of the line.\n * Default value: `0.5`\n */\n curvedLinkControlPointDistance?: number;\n /**\n * The default link arrow value that controls whether or not to display link arrows.\n * Default value: `false`\n */\n linkArrows?: boolean;\n /**\n * Scale factor for the link arrows size.\n * Default value: `1`\n */\n linkArrowsSizeScale?: number;\n /**\n * The range defines the minimum and maximum link visibility distance in pixels.\n * The link will be fully opaque when its length is less than the first number in the array,\n * and will have `linkVisibilityMinTransparency` transparency when its length is greater than\n * the second number in the array.\n * This distance is defined in screen space coordinates and will change as you zoom in and out\n * (e.g. links become longer when you zoom in, and shorter when you zoom out).\n * Default value: `[50, 150]`\n */\n linkVisibilityDistanceRange?: number[];\n /**\n * The transparency value that the link will have when its length reaches\n * the maximum link distance value from `linkVisibilityDistanceRange`.\n * Default value: `0.25`\n */\n linkVisibilityMinTransparency?: number;\n /**\n * Use the classic quadtree algorithm for the Many-Body force.\n * This property will be applied only on component initialization and it\n * can't be changed using the `setConfig` method.\n * Default value: `false`\n */\n useClassicQuadtree?: boolean;\n\n /**\n * Decay coefficient. Use smaller values if you want the simulation to \"cool down\" slower.\n * Default value: `5000`\n */\n simulationDecay?: number;\n /**\n * Gravity force coefficient.\n * Default value: `0.25`\n */\n simulationGravity?: number;\n /**\n * Centering to center mass force coefficient.\n * Default value: `0`\n */\n simulationCenter?: number;\n /**\n * Repulsion force coefficient.\n * Default value: `1.0`\n */\n simulationRepulsion?: number;\n /**\n * Decreases / increases the detalization of the Many-Body force calculations.\n * When `useClassicQuadtree` is set to `true`, this property corresponds to the Barnes–Hut approximation criterion.\n * Default value: `1.15`\n */\n simulationRepulsionTheta?: number;\n /**\n * Barnes–Hut approximation depth.\n * Can only be used when `useClassicQuadtree` is set `true`.\n * Default value: `12`\n */\n simulationRepulsionQuadtreeLevels?: number;\n /**\n * Link spring force coefficient.\n * Default value: `1`\n */\n simulationLinkSpring?: number;\n /**\n * Minimum link distance.\n * Default value: `10`\n */\n simulationLinkDistance?: number;\n /**\n * Range of random link distance values.\n * Default value: `[1, 1.2]`\n */\n simulationLinkDistRandomVariationRange?: number[];\n /**\n * Repulsion coefficient from mouse position.\n * The repulsion force is activated by pressing the right mouse button.\n * Default value: `2`\n */\n simulationRepulsionFromMouse?: number;\n /**\n * Enable or disable the repulsion force from mouse when right-clicking.\n * When set to `true`, holding the right mouse button will activate the mouse repulsion force.\n * When set to `false`, right-clicking will not trigger any repulsion force.\n * Default value: `false`\n */\n enableRightClickRepulsion?: boolean;\n /**\n * Friction coefficient.\n * Values range from 0 (high friction, stops quickly) to 1 (no friction, keeps moving).\n * Default value: `0.85`\n */\n simulationFriction?: number;\n /**\n * Cluster coefficient.\n * Default value: `0.1`\n */\n simulationCluster?: number;\n\n /**\n * Callback function that will be called when the simulation starts.\n * Default value: `undefined`\n */\n onSimulationStart?: () => void;\n /**\n * Callback function that will be called on every simulation tick.\n * The value of the first argument `alpha` will decrease over time as the simulation \"cools down\".\n * If there's a point under the mouse pointer, its index will be passed as the second argument\n * and position as the third argument:\n * `(alpha: number, hoveredIndex: number | undefined, pointPosition: [number, number] | undefined) => void`.\n * Default value: `undefined`\n */\n onSimulationTick?: (\n alpha: number, hoveredIndex?: number, pointPosition?: [number, number]\n ) => void;\n /**\n * Callback function that will be called when the simulation stops.\n * Default value: `undefined`\n */\n onSimulationEnd?: () => void;\n /**\n * Callback function that will be called when the simulation gets paused.\n * Default value: `undefined`\n */\n onSimulationPause?: () => void;\n /**\n * Callback function that will be called when the simulation is restarted.\n * @deprecated Use `onSimulationUnpause` instead. This callback will be removed in a future version.\n * Default value: `undefined`\n */\n onSimulationRestart?: () => void;\n /**\n * Callback function that will be called when the simulation is unpaused.\n * Default value: `undefined`\n */\n onSimulationUnpause?: () => void;\n\n /**\n * Callback function that will be called on every canvas click.\n * If clicked on a point, its index will be passed as the first argument,\n * position as the second argument and the corresponding mouse event as the third argument:\n * `(index: number | undefined, pointPosition: [number, number] | undefined, event: MouseEvent) => void`.\n * Default value: `undefined`\n */\n onClick?: (\n index: number | undefined, pointPosition: [number, number] | undefined, event: MouseEvent\n ) => void;\n\n /**\n * Callback function that will be called when a point is clicked.\n * The point index will be passed as the first argument,\n * position as the second argument and the corresponding mouse event as the third argument:\n * `(index: number, pointPosition: [number, number], event: MouseEvent) => void`.\n * Default value: `undefined`\n */\n onPointClick?: (\n index: number,\n pointPosition: [number, number],\n event: MouseEvent\n ) => void;\n\n /**\n * Callback function that will be called when a link is clicked.\n * The link index will be passed as the first argument and the corresponding mouse event as the second argument:\n * `(linkIndex: number, event: MouseEvent) => void`.\n * Default value: `undefined`\n */\n onLinkClick?: (\n linkIndex: number,\n event: MouseEvent\n ) => void;\n\n /**\n * Callback function that will be called when the background (empty space) is clicked.\n * The mouse event will be passed as the first argument:\n * `(event: MouseEvent) => void`.\n * Default value: `undefined`\n */\n onBackgroundClick?: (\n event: MouseEvent\n ) => void;\n\n /**\n * Callback function that will be called when mouse movement happens.\n * If the mouse moves over a point, its index will be passed as the first argument,\n * position as the second argument and the corresponding mouse event as the third argument:\n * `(index: number | undefined, pointPosition: [number, number] | undefined, event: MouseEvent) => void`.\n * Default value: `undefined`\n */\n onMouseMove?: (\n index: number | undefined, pointPosition: [number, number] | undefined, event: MouseEvent\n ) => void;\n\n /**\n * Callback function that will be called when a point appears under the mouse\n * as a result of a mouse event, zooming and panning, or movement of points.\n * The point index will be passed as the first argument, position as the second argument\n * and the corresponding mouse event or D3's zoom event as the third argument:\n * `(index: number, pointPosition: [number, number], event: MouseEvent | D3DragEvent<HTMLCanvasElement, undefined, Hovered>\n * | D3ZoomEvent<HTMLCanvasElement, undefined> | undefined) => void`.\n * Default value: `undefined`\n */\n onPointMouseOver?: (\n index: number,\n pointPosition: [number, number],\n event: MouseEvent | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | D3ZoomEvent<HTMLCanvasElement, undefined> | undefined\n ) => void;\n\n /**\n * Callback function that will be called when a point is no longer underneath\n * the mouse pointer because of a mouse event, zoom/pan event, or movement of points.\n * The corresponding mouse event or D3's zoom event will be passed as the first argument:\n * `(event: MouseEvent | D3ZoomEvent<HTMLCanvasElement, undefined> | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | undefined) => void`.\n * Default value: `undefined`\n */\n onPointMouseOut?: (event: MouseEvent | D3ZoomEvent<HTMLCanvasElement, undefined> | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | undefined) => void;\n\n /**\n * Callback function that will be called when the mouse moves over a link.\n * The link index will be passed as the first argument:\n * `(linkIndex: number) => void`.\n * Default value: `undefined`\n */\n onLinkMouseOver?: (linkIndex: number) => void;\n\n /**\n * Callback function that will be called when the mouse moves out of a link.\n * The event will be passed as the first argument:\n * `(event: MouseEvent | D3ZoomEvent<HTMLCanvasElement, undefined> | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | undefined) => void`.\n * Default value: `undefined`\n */\n onLinkMouseOut?: (event: MouseEvent | D3ZoomEvent<HTMLCanvasElement, undefined> | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | undefined) => void;\n\n /**\n * Callback function that will be called when zooming or panning starts.\n * First argument is a D3 Zoom Event and second indicates whether\n * the event has been initiated by a user interaction (e.g. a mouse event):\n * `(event: D3ZoomEvent, userDriven: boolean) => void`.\n * Default value: `undefined`\n */\n onZoomStart?: (e: D3ZoomEvent<HTMLCanvasElement, undefined>, userDriven: boolean) => void;\n\n /**\n * Callback function that will be called continuously during zooming or panning.\n * First argument is a D3 Zoom Event and second indicates whether\n * the event has been initiated by a user interaction (e.g. a mouse event):\n * `(event: D3ZoomEvent, userDriven: boolean) => void`.\n * Default value: `undefined`\n */\n onZoom?: (e: D3ZoomEvent<HTMLCanvasElement, undefined>, userDriven: boolean) => void;\n\n /**\n * Callback function that will be called when zooming or panning ends.\n * First argument is a D3 Zoom Event and second indicates whether\n * the event has been initiated by a user interaction (e.g. a mouse event):\n * `(event: D3ZoomEvent, userDriven: boolean) => void`.\n * Default value: `undefined`\n */\n onZoomEnd?: (e: D3ZoomEvent<HTMLCanvasElement, undefined>, userDriven: boolean) => void;\n\n /**\n * Callback function that will be called when dragging starts.\n * First argument is a D3 Drag Event:\n * `(event: D3DragEvent) => void`.\n * Default value: `undefined`\n */\n onDragStart?: (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => void;\n\n /**\n * Callback function that will be called continuously during dragging.\n * First argument is a D3 Drag Event:\n * `(event: D3DragEvent) => void`.\n * Default value: `undefined`\n */\n onDrag?: (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => void;\n\n /**\n * Callback function that will be called when dragging ends.\n * First argument is a D3 Drag Event:\n * `(event: D3DragEvent) => void`.\n * Default value: `undefined`\n */\n onDragEnd?: (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => void;\n\n /**\n * Show WebGL performance monitor.\n * Default value: `false`\n */\n showFPSMonitor?: boolean;\n /**\n * Canvas pixel ratio.\n * Default value: `2`\n */\n pixelRatio?: number;\n /**\n * Increase or decrease the size of the points when zooming in or out.\n * Default value: `false`\n */\n scalePointsOnZoom?: boolean;\n /**\n * Initial zoom level. Can be set once during graph initialization.\n * If set, `fitViewOnInit` value will be ignored.\n * Default value: `undefined`\n */\n initialZoomLevel?: number;\n /**\n * Enables or disables zooming in and out.\n * Default: `true`\n */\n enableZoom?: boolean;\n /**\n * Controls whether the simulation remains active during zoom operations.\n * When set to `true`, the simulation continues running while zooming.\n * When set to `false`, the simulation pauses during zoom operations.\n * Default value: `false`\n */\n enableSimulationDuringZoom?: boolean;\n /**\n * Enables or disables dragging of points in the graph.\n * Default value: `false`\n */\n enableDrag?: boolean;\n /**\n * Whether to center and zoom the view to fit all points in the scene on initialization or not.\n * Ignored if `initialZoomLevel` is set.\n * Default: `true`\n */\n fitViewOnInit?: boolean;\n /**\n * Delay in milliseconds before fitting the view when `fitViewOnInit` is enabled.\n * Useful if you want the layout to stabilize a bit before fitting.\n * Default: `250`\n */\n fitViewDelay?: number;\n /**\n * Padding to apply when fitting the view to show all points.\n * This value is added to the calculated bounding box to provide some extra space around the points.\n * This is used when the `fitViewOnInit` option is enabled.\n * Default: `0.1`\n */\n fitViewPadding?: number;\n /**\n * Duration in milliseconds for fitting the view to show all points when fitViewOnInit is enabled.\n * Default: `250`\n */\n fitViewDuration?: number;\n /**\n * When `fitViewOnInit` is set to `true`, fits the view to show the points within a rectangle\n * defined by its two corner coordinates `[[left, bottom], [right, top]]` in the scene space.\n * Default: `undefined`\n */\n fitViewByPointsInRect?: [[number, number], [number, number]] | [number, number][];\n /**\n * When `fitViewOnInit` is set to `true`, fits the view to show only the specified points by their indices.\n * Takes precedence over `fitViewByPointsInRect` when both are provided.\n * Default: `undefined`\n */\n fitViewByPointIndices?: number[];\n /**\n * Providing a `randomSeed` value allows you to control\n * the randomness of the layout across different simulation runs.\n * It is useful when you want the graph to always look the same on same datasets.\n * This property will be applied only on component initialization and it\n * can't be changed using the `setConfig` method.\n * Default value: undefined\n */\n randomSeed?: number | string;\n /**\n * Point sampling distance in pixels between neighboring points when calling the `getSampledPointPositionsMap` method.\n * This parameter determines how many points will be included in the sample.\n * Default value: `150`\n */\n pointSamplingDistance?: number;\n /**\n * Controls automatic position adjustment of points in the visible space.\n *\n * When `undefined` (default):\n * - If simulation is disabled (`enableSimulation: false`), points will be automatically\n * repositioned to fit within the visible space\n * - If simulation is enabled, points will not be rescaled\n *\n * When explicitly set:\n * - `true`: Forces points positions to be rescaled\n * - `false`: Forces points positions to not be rescaled\n */\n rescalePositions?: boolean | undefined;\n /**\n * Controls the text shown in the bottom right corner.\n * - When a non-empty string is provided: Displays the string as HTML\n * - When empty string or not provided: No text is displayed\n */\n attribution?: string;\n}\n\nexport class GraphConfig implements GraphConfigInterface {\n public enableSimulation = defaultConfigValues.enableSimulation\n public backgroundColor = defaultBackgroundColor\n public spaceSize = defaultConfigValues.spaceSize\n public pointColor = defaultPointColor\n // TODO: When pointColor is removed, change this to:\n // public pointDefaultColor = defaultPointColor\n // Currently undefined to allow fallback to deprecated pointColor via nullish coalescing\n // in GraphData.updatePointColor() (see: this._config.pointDefaultColor ?? this._config.pointColor)\n public pointDefaultColor = undefined\n public pointGreyoutOpacity = defaultGreyoutPointOpacity\n public pointGreyoutColor = defaultGreyoutPointColor\n public pointSize = defaultPointSize\n public pointOpacity = defaultPointOpacity\n public pointSizeScale = defaultConfigValues.pointSizeScale\n public hoveredPointCursor = defaultConfigValues.hoveredPointCursor\n public hoveredLinkCursor = defaultConfigValues.hoveredLinkCursor\n public renderHoveredPointRing = defaultConfigValues.renderHoveredPointRing\n public hoveredPointRingColor = defaultConfigValues.hoveredPointRingColor\n public focusedPointRingColor = defaultConfigValues.focusedPointRingColor\n public focusedPointIndex = defaultConfigValues.focusedPointIndex\n public linkColor = defaultLinkColor\n // TODO: When linkColor is removed, change this to:\n // public linkDefaultColor = defaultLinkColor\n // Currently undefined to allow fallback to deprecated linkColor via nullish coalescing\n // in GraphData.updateLinkColor() (see: this._config.linkDefaultColor ?? this._config.linkColor)\n public linkDefaultColor = undefined\n public linkOpacity = defaultLinkOpacity\n public linkGreyoutOpacity = defaultGreyoutLinkOpacity\n public linkWidth = defaultLinkWidth\n public linkWidthScale = defaultConfigValues.linkWidthScale\n public hoveredLinkColor = defaultConfigValues.hoveredLinkColor\n public hoveredLinkWidthIncrease = defaultConfigValues.hoveredLinkWidthIncrease\n public renderLinks = defaultConfigValues.renderLinks\n public curvedLinks = defaultConfigValues.curvedLinks\n public curvedLinkSegments = defaultConfigValues.curvedLinkSegments\n public curvedLinkWeight = defaultConfigValues.curvedLinkWeight\n public curvedLinkControlPointDistance = defaultConfigValues.curvedLinkControlPointDistance\n public linkArrows = defaultConfigValues.linkArrows\n public linkArrowsSizeScale = defaultConfigValues.linkArrowsSizeScale\n public scaleLinksOnZoom = defaultConfigValues.scaleLinksOnZoom\n public linkVisibilityDistanceRange = defaultConfigValues.linkVisibilityDistanceRange\n public linkVisibilityMinTransparency = defaultConfigValues.linkVisibilityMinTransparency\n public useClassicQuadtree = defaultConfigValues.useClassicQuadtree\n\n public simulationDecay = defaultConfigValues.simulation.decay\n public simulationGravity = defaultConfigValues.simulation.gravity\n public simulationCenter = defaultConfigValues.simulation.center\n public simulationRepulsion = defaultConfigValues.simulation.repulsion\n public simulationRepulsionTheta = defaultConfigValues.simulation.repulsionTheta\n public simulationRepulsionQuadtreeLevels = defaultConfigValues.simulation.repulsionQuadtreeLevels\n public simulationLinkSpring = defaultConfigValues.simulation.linkSpring\n public simulationLinkDistance = defaultConfigValues.simulation.linkDistance\n public simulationLinkDistRandomVariationRange = defaultConfigValues.simulation.linkDistRandomVariationRange\n public simulationRepulsionFromMouse = defaultConfigValues.simulation.repulsionFromMouse\n public enableRightClickRepulsion = defaultConfigValues.enableRightClickRepulsion\n public simulationFriction = defaultConfigValues.simulation.friction\n public simulationCluster = defaultConfigValues.simulation.cluster\n\n public onSimulationStart: GraphConfigInterface['onSimulationStart'] = undefined\n public onSimulationTick: GraphConfigInterface['onSimulationTick'] = undefined\n public onSimulationEnd: GraphConfigInterface['onSimulationEnd'] = undefined\n public onSimulationPause: GraphConfigInterface['onSimulationPause'] = undefined\n public onSimulationRestart: GraphConfigInterface['onSimulationRestart'] = undefined\n public onSimulationUnpause: GraphConfigInterface['onSimulationUnpause'] = undefined\n\n public onClick: GraphConfigInterface['onClick'] = undefined\n public onPointClick: GraphConfigInterface['onPointClick'] = undefined\n public onLinkClick: GraphConfigInterface['onLinkClick'] = undefined\n public onBackgroundClick: GraphConfigInterface['onBackgroundClick'] = undefined\n public onMouseMove: GraphConfigInterface['onMouseMove'] = undefined\n public onPointMouseOver: GraphConfigInterface['onPointMouseOver'] = undefined\n public onPointMouseOut: GraphConfigInterface['onPointMouseOut'] = undefined\n public onLinkMouseOver: GraphConfigInterface['onLinkMouseOver'] = undefined\n public onLinkMouseOut: GraphConfigInterface['onLinkMouseOut'] = undefined\n public onZoomStart: GraphConfigInterface['onZoomStart'] = undefined\n public onZoom: GraphConfigInterface['onZoom'] = undefined\n public onZoomEnd: GraphConfigInterface['onZoomEnd'] = undefined\n public onDragStart: GraphConfigInterface['onDragStart'] = undefined\n public onDrag: GraphConfigInterface['onDrag'] = undefined\n public onDragEnd: GraphConfigInterface['onDragEnd'] = undefined\n\n public showFPSMonitor = defaultConfigValues.showFPSMonitor\n\n public pixelRatio = defaultConfigValues.pixelRatio\n\n public scalePointsOnZoom = defaultConfigValues.scalePointsOnZoom\n public initialZoomLevel = undefined\n public enableZoom = defaultConfigValues.enableZoom\n public enableSimulationDuringZoom = defaultConfigValues.enableSimulationDuringZoom\n public enableDrag = defaultConfigValues.enableDrag\n public fitViewOnInit = defaultConfigValues.fitViewOnInit\n public fitViewDelay = defaultConfigValues.fitViewDelay\n public fitViewPadding = defaultConfigValues.fitViewPadding\n public fitViewDuration = defaultConfigValues.fitViewDuration\n public fitViewByPointsInRect = undefined\n public fitViewByPointIndices = undefined\n\n public randomSeed = undefined\n public pointSamplingDistance = defaultConfigValues.pointSamplingDistance\n public attribution = defaultConfigValues.attribution\n public rescalePositions = defaultConfigValues.rescalePositions\n\n public init (config: GraphConfigInterface): void {\n (Object.keys(config) as (keyof GraphConfigInterface)[])\n .forEach(configParameter => {\n this.deepMergeConfig(this.getConfig(), config, configParameter)\n })\n }\n\n public deepMergeConfig <T> (current: T, next: T, key: keyof T): void {\n if (isPlainObject(current[key]) && isPlainObject(next[key])) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n (Object.keys(next[key] as Object) as (keyof T[keyof T])[])\n .forEach(configParameter => {\n this.deepMergeConfig(current[key], next[key], configParameter)\n })\n } else current[key] = next[key]\n }\n\n private getConfig (): GraphConfigInterface {\n return this\n }\n}\n","import regl from 'regl'\nimport { GraphConfigInterface } from '@/graph/config'\nimport { GraphData } from '@/graph/modules/GraphData'\nimport { Points } from '@/graph/modules/Points'\nimport { Store } from '@/graph/modules/Store'\n\nexport class CoreModule {\n public readonly reglInstance: regl.Regl\n public readonly config: GraphConfigInterface\n public readonly store: Store\n public readonly data: GraphData\n public readonly points: Points | undefined\n public _debugRandomNumber = Math.floor(Math.random() * 1000)\n\n public constructor (\n reglInstance: regl.Regl,\n config: GraphConfigInterface,\n store: Store,\n data: GraphData,\n points?: Points\n ) {\n this.reglInstance = reglInstance\n this.config = config\n this.store = store\n this.data = data\n if (points) this.points = points\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 rgba;\n\nvoid main() {\n gl_FragColor = rgba;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float pointsTextureSize;\n\nattribute vec2 pointIndices;\n\nvarying vec4 rgba;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, pointIndices / pointsTextureSize);\n rgba = vec4(pointPosition.xy, 1.0, 0.0);\n\n gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n gl_PointSize = 1.0;\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D centermassTexture;\nuniform float centerForce;\nuniform float alpha;\n\nvarying vec2 textureCoords;\n\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 velocity = vec4(0.0);\n vec4 centermassValues = texture2D(centermassTexture, vec2(0.0));\n vec2 centermassPosition = centermassValues.xy / centermassValues.b;\n vec2 distVector = centermassPosition - pointPosition.xy;\n float dist = sqrt(dot(distVector, distVector));\n if (dist > 0.0) {\n float angle = atan(distVector.y, distVector.x);\n float addV = alpha * centerForce * dist * 0.01;\n velocity.rg += addV * vec2(cos(angle), sin(angle));\n }\n\n gl_FragColor = velocity;\n}","import regl from 'regl'\n\nexport function createQuadBuffer (reglInstance: regl.Regl): { buffer: regl.Buffer; size: number } {\n const quadBuffer = reglInstance.buffer(new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]))\n return {\n buffer: quadBuffer,\n size: 2,\n }\n}\n\nexport function createIndexesForBuffer (textureSize: number): Float32Array {\n const indexes = new Float32Array(textureSize * textureSize * 2)\n for (let y = 0; y < textureSize; y++) {\n for (let x = 0; x < textureSize; x++) {\n const i = y * textureSize * 2 + x * 2\n indexes[i + 0] = x\n indexes[i + 1] = y\n }\n }\n return indexes\n}\n\nexport function destroyFramebuffer (fbo?: regl.Framebuffer2D): void {\n if (!fbo) return\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((fbo as any)?._framebuffer?.framebuffer) {\n fbo.destroy()\n }\n}\n\nexport function destroyBuffer (fbo?: regl.Buffer): void {\n if (!fbo) return\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((fbo as any)?._buffer?.buffer) {\n fbo.destroy()\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvoid main() {\n gl_FragColor = vec4(0.0);\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nattribute vec2 vertexCoord; // Vertex coordinates in normalized device coordinates\nvarying vec2 textureCoords; // Texture coordinates to pass to the fragment shader\n\nvoid main() {\n // Convert vertex coordinates from [-1, 1] range to [0, 1] range for texture sampling\n textureCoords = (vertexCoord + 1.0) / 2.0;\n gl_Position = vec4(vertexCoord, 0, 1);\n}\n","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport calculateCentermassFrag from '@/graph/modules/ForceCenter/calculate-centermass.frag'\nimport calculateCentermassVert from '@/graph/modules/ForceCenter/calculate-centermass.vert'\nimport forceFrag from '@/graph/modules/ForceCenter/force-center.frag'\nimport { createQuadBuffer, createIndexesForBuffer } from '@/graph/modules/Shared/buffer'\nimport clearFrag from '@/graph/modules/Shared/clear.frag'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class ForceCenter extends CoreModule {\n private centermassFbo: regl.Framebuffer2D | undefined\n private clearCentermassCommand: regl.DrawCommand | undefined\n private calculateCentermassCommand: regl.DrawCommand | undefined\n private runCommand: regl.DrawCommand | undefined\n private centermassTexture: regl.Texture2D | undefined\n private pointIndices: regl.Buffer | undefined\n\n public create (): void {\n const { reglInstance, store } = this\n if (!this.centermassTexture) this.centermassTexture = reglInstance.texture()\n this.centermassTexture({\n data: new Float32Array(4).fill(0),\n shape: [1, 1, 4],\n type: 'float',\n })\n if (!this.centermassFbo) this.centermassFbo = reglInstance.framebuffer()\n this.centermassFbo({\n color: this.centermassTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.pointIndices) this.pointIndices = reglInstance.buffer(0)\n this.pointIndices(createIndexesForBuffer(store.pointsTextureSize))\n }\n\n public initPrograms (): void {\n const { reglInstance, config, store, data, points } = this\n if (!this.clearCentermassCommand) {\n this.clearCentermassCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: () => this.centermassFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n if (!this.calculateCentermassCommand) {\n this.calculateCentermassCommand = reglInstance({\n frag: calculateCentermassFrag,\n vert: calculateCentermassVert,\n framebuffer: () => this.centermassFbo as regl.Framebuffer2D,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n attributes: {\n pointIndices: {\n buffer: this.pointIndices,\n size: 2,\n },\n },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n if (!this.runCommand) {\n this.runCommand = reglInstance({\n frag: forceFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n centermassTexture: () => this.centermassFbo,\n centerForce: () => config.simulationCenter,\n alpha: () => store.alpha,\n },\n })\n }\n }\n\n public run (): void {\n this.clearCentermassCommand?.()\n this.calculateCentermassCommand?.()\n this.runCommand?.()\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float gravity;\nuniform float spaceSize;\nuniform float alpha;\n\nvarying vec2 textureCoords;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n\n vec4 velocity = vec4(0.0);\n\n vec2 centerPosition = vec2(spaceSize / 2.0);\n vec2 distVector = centerPosition - pointPosition.rg;\n float dist = sqrt(dot(distVector, distVector));\n if (dist > 0.0) {\n float angle = atan(distVector.y, distVector.x);\n float additionalVelocity = alpha * gravity * dist * 0.1;\n velocity.rg += additionalVelocity * vec2(cos(angle), sin(angle));\n }\n\n gl_FragColor = velocity;\n}","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport forceFrag from '@/graph/modules/ForceGravity/force-gravity.frag'\nimport { createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class ForceGravity extends CoreModule {\n private runCommand: regl.DrawCommand | undefined\n\n public initPrograms (): void {\n const { reglInstance, config, store, points } = this\n if (!this.runCommand) {\n this.runCommand = reglInstance({\n frag: forceFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n gravity: () => config.simulationGravity,\n spaceSize: () => store.adjustedSpaceSize,\n alpha: () => store.alpha,\n },\n })\n }\n }\n\n public run (): void {\n this.runCommand?.()\n }\n}\n","export function forceFrag (maxLinks: number): string {\n return `\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float linkSpring;\nuniform float linkDistance;\nuniform vec2 linkDistRandomVariationRange;\n\nuniform sampler2D linkInfoTexture; // Texture storing first link indices and amount\nuniform sampler2D linkIndicesTexture;\nuniform sampler2D linkPropertiesTexture; // Texture storing link bias and strength\nuniform sampler2D linkRandomDistanceTexture;\n\nuniform float pointsTextureSize;\nuniform float linksTextureSize;\nuniform float alpha;\n\nvarying vec2 textureCoords;\n\nconst float MAX_LINKS = ${maxLinks}.0;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 velocity = vec4(0.0);\n\n vec4 linkInfo = texture2D(linkInfoTexture, textureCoords);\n float iCount = linkInfo.r;\n float jCount = linkInfo.g;\n float linkAmount = linkInfo.b;\n if (linkAmount > 0.0) {\n for (float i = 0.0; i < MAX_LINKS; i += 1.0) {\n if (i < linkAmount) {\n if (iCount >= linksTextureSize) {\n iCount = 0.0;\n jCount += 1.0;\n }\n vec2 linkTextureIndex = (vec2(iCount, jCount) + 0.5) / linksTextureSize;\n vec4 connectedPointIndex = texture2D(linkIndicesTexture, linkTextureIndex);\n vec4 biasAndStrength = texture2D(linkPropertiesTexture, linkTextureIndex);\n vec4 randomMinDistance = texture2D(linkRandomDistanceTexture, linkTextureIndex);\n float bias = biasAndStrength.r;\n float strength = biasAndStrength.g;\n float randomMinLinkDist = randomMinDistance.r * (linkDistRandomVariationRange.g - linkDistRandomVariationRange.r) + linkDistRandomVariationRange.r;\n randomMinLinkDist *= linkDistance;\n\n iCount += 1.0;\n\n vec4 connectedPointPosition = texture2D(positionsTexture, (connectedPointIndex.rg + 0.5) / pointsTextureSize);\n float x = connectedPointPosition.x - (pointPosition.x + velocity.x);\n float y = connectedPointPosition.y - (pointPosition.y + velocity.y);\n float l = sqrt(x * x + y * y);\n\n // Apply the link force\n l = max(l, randomMinLinkDist * 0.99);\n l = (l - randomMinLinkDist) / l;\n l *= linkSpring * alpha;\n l *= strength;\n l *= bias;\n x *= l;\n y *= l;\n velocity.x += x;\n velocity.y += y;\n }\n }\n }\n\n gl_FragColor = vec4(velocity.rg, 0.0, 0.0);\n}\n `\n}\n","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport { forceFrag } from '@/graph/modules/ForceLink/force-spring'\nimport { createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport enum LinkDirection {\n OUTGOING = 'outgoing',\n INCOMING = 'incoming'\n}\n\nexport class ForceLink extends CoreModule {\n private linkFirstIndicesAndAmountFbo: regl.Framebuffer2D | undefined\n private indicesFbo: regl.Framebuffer2D | undefined\n private biasAndStrengthFbo: regl.Framebuffer2D | undefined\n private randomDistanceFbo: regl.Framebuffer2D | undefined\n private linkFirstIndicesAndAmount: Float32Array = new Float32Array()\n private indices: Float32Array = new Float32Array()\n private maxPointDegree = 0\n private runCommand: regl.DrawCommand | undefined\n private linkFirstIndicesAndAmountTexture: regl.Texture2D | undefined\n private indicesTexture: regl.Texture2D | undefined\n private biasAndStrengthTexture: regl.Texture2D | undefined\n private randomDistanceTexture: regl.Texture2D | undefined\n\n public create (direction: LinkDirection): void {\n const { reglInstance, store: { pointsTextureSize, linksTextureSize }, data } = this\n if (!pointsTextureSize || !linksTextureSize) return\n this.linkFirstIndicesAndAmount = new Float32Array(pointsTextureSize * pointsTextureSize * 4)\n this.indices = new Float32Array(linksTextureSize * linksTextureSize * 4)\n const linkBiasAndStrengthState = new Float32Array(linksTextureSize * linksTextureSize * 4)\n const linkDistanceState = new Float32Array(linksTextureSize * linksTextureSize * 4)\n\n const grouped = direction === LinkDirection.INCOMING ? data.sourceIndexToTargetIndices : data.targetIndexToSourceIndices\n this.maxPointDegree = 0\n let linkIndex = 0\n grouped?.forEach((connectedPointIndices, pointIndex) => {\n if (connectedPointIndices) {\n this.linkFirstIndicesAndAmount[pointIndex * 4 + 0] = linkIndex % linksTextureSize\n this.linkFirstIndicesAndAmount[pointIndex * 4 + 1] = Math.floor(linkIndex / linksTextureSize)\n this.linkFirstIndicesAndAmount[pointIndex * 4 + 2] = connectedPointIndices.length ?? 0\n\n connectedPointIndices.forEach(([connectedPointIndex, initialLinkIndex]) => {\n this.indices[linkIndex * 4 + 0] = connectedPointIndex % pointsTextureSize\n this.indices[linkIndex * 4 + 1] = Math.floor(connectedPointIndex / pointsTextureSize)\n const degree = data.degree?.[connectedPointIndex] ?? 0\n const connectedDegree = data.degree?.[pointIndex] ?? 0\n const degreeSum = degree + connectedDegree\n // Prevent division by zero\n const bias = degreeSum !== 0 ? degree / degreeSum : 0.5\n const minDegree = Math.min(degree, connectedDegree)\n // Prevent division by zero\n let strength = data.linkStrength?.[initialLinkIndex] ?? (1 / Math.max(minDegree, 1))\n strength = Math.sqrt(strength)\n linkBiasAndStrengthState[linkIndex * 4 + 0] = bias\n linkBiasAndStrengthState[linkIndex * 4 + 1] = strength\n linkDistanceState[linkIndex * 4] = this.store.getRandomFloat(0, 1)\n\n linkIndex += 1\n })\n\n this.maxPointDegree = Math.max(this.maxPointDegree, connectedPointIndices.length ?? 0)\n }\n })\n\n if (!this.linkFirstIndicesAndAmountTexture) this.linkFirstIndicesAndAmountTexture = reglInstance.texture()\n this.linkFirstIndicesAndAmountTexture({\n data: this.linkFirstIndicesAndAmount,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.linkFirstIndicesAndAmountFbo) this.linkFirstIndicesAndAmountFbo = reglInstance.framebuffer()\n this.linkFirstIndicesAndAmountFbo({\n color: this.linkFirstIndicesAndAmountTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.indicesTexture) this.indicesTexture = reglInstance.texture()\n this.indicesTexture({\n data: this.indices,\n shape: [linksTextureSize, linksTextureSize, 4],\n type: 'float',\n })\n if (!this.indicesFbo) this.indicesFbo = reglInstance.framebuffer()\n this.indicesFbo({\n color: this.indicesTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.biasAndStrengthTexture) this.biasAndStrengthTexture = reglInstance.texture()\n this.biasAndStrengthTexture({\n data: linkBiasAndStrengthState,\n shape: [linksTextureSize, linksTextureSize, 4],\n type: 'float',\n })\n if (!this.biasAndStrengthFbo) this.biasAndStrengthFbo = reglInstance.framebuffer()\n this.biasAndStrengthFbo({\n color: this.biasAndStrengthTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.randomDistanceTexture) this.randomDistanceTexture = reglInstance.texture()\n this.randomDistanceTexture({\n data: linkDistanceState,\n shape: [linksTextureSize, linksTextureSize, 4],\n type: 'float',\n })\n if (!this.randomDistanceFbo) this.randomDistanceFbo = reglInstance.framebuffer()\n this.randomDistanceFbo({\n color: this.randomDistanceTexture,\n depth: false,\n stencil: false,\n })\n }\n\n public initPrograms (): void {\n const { reglInstance, config, store, points } = this\n if (!this.runCommand) {\n this.runCommand = reglInstance({\n frag: () => forceFrag(this.maxPointDegree),\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n linkSpring: () => config.simulationLinkSpring,\n linkDistance: () => config.simulationLinkDistance,\n linkDistRandomVariationRange: () => config.simulationLinkDistRandomVariationRange,\n linkInfoTexture: () => this.linkFirstIndicesAndAmountFbo,\n linkIndicesTexture: () => this.indicesFbo,\n linkPropertiesTexture: () => this.biasAndStrengthFbo,\n linkRandomDistanceTexture: () => this.randomDistanceFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n linksTextureSize: () => store.linksTextureSize,\n alpha: () => store.alpha,\n },\n })\n }\n }\n\n public run (): void {\n this.runCommand?.()\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 rgba;\n\nvoid main() {\n gl_FragColor = rgba;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float pointsTextureSize;\nuniform float levelTextureSize;\nuniform float cellSize;\n\nattribute vec2 pointIndices;\n\nvarying vec4 rgba;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, pointIndices / pointsTextureSize);\n rgba = vec4(pointPosition.rg, 1.0, 0.0);\n\n float n = floor(pointPosition.x / cellSize);\n float m = floor(pointPosition.y / cellSize);\n \n vec2 levelPosition = 2.0 * (vec2(n, m) + 0.5) / levelTextureSize - 1.0;\n\n gl_Position = vec4(levelPosition, 0.0, 1.0);\n gl_PointSize = 1.0;\n}","// The fragment shader calculates the velocity of a point based on its position\n// and the positions of other points in different levels of a spatial hierarchy.\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D levelFbo;\n\nuniform float level;\nuniform float levels;\nuniform float levelTextureSize;\nuniform float repulsion;\nuniform float alpha;\nuniform float spaceSize;\nuniform float theta;\n\nvarying vec2 textureCoords;\n\nconst float MAX_LEVELS_NUM = 14.0;\n\nvec2 calculateAdditionalVelocity (vec2 ij, vec2 pp) {\n vec2 add = vec2(0.0);\n vec4 centermass = texture2D(levelFbo, ij);\n if (centermass.r > 0.0 && centermass.g > 0.0 && centermass.b > 0.0) {\n vec2 centermassPosition = vec2(centermass.rg / centermass.b);\n vec2 distVector = pp - centermassPosition;\n float l = dot(distVector, distVector);\n float dist = sqrt(l);\n if (l > 0.0) {\n float c = alpha * repulsion * centermass.b;\n\n float distanceMin2 = 1.0;\n if (l < distanceMin2) l = sqrt(distanceMin2 * l);\n float addV = c / sqrt(l);\n add = addV * normalize(distVector);\n }\n }\n return add;\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n float x = pointPosition.x;\n float y = pointPosition.y;\n\n float left = 0.0;\n float top = 0.0;\n float right = spaceSize;\n float bottom = spaceSize;\n\n float n_left = 0.0;\n float n_top = 0.0;\n float n_right = 0.0;\n float n_bottom = 0.0;\n\n float cellSize = 0.0;\n\n // Iterate over levels to adjust the boundaries based on the current level\n for (float i = 0.0; i < MAX_LEVELS_NUM; i += 1.0) {\n if (i <= level) {\n left += cellSize * n_left;\n top += cellSize * n_top;\n right -= cellSize * n_right;\n bottom -= cellSize * n_bottom;\n\n cellSize = pow(2.0 , levels - i - 1.0);\n\n float dist_left = x - left;\n n_left = max(0.0, floor(dist_left / cellSize - theta));\n\n float dist_top = y - top;\n n_top = max(0.0, floor(dist_top / cellSize - theta));\n \n float dist_right = right - x;\n n_right = max(0.0, floor(dist_right / cellSize - theta));\n\n float dist_bottom = bottom - y;\n n_bottom = max(0.0, floor(dist_bottom / cellSize - theta));\n\n }\n }\n\n vec4 velocity = vec4(vec2(0.0), 1.0, 0.0);\n\n // Calculate the additional velocity based on neighboring cells\n for (float i = 0.0; i < 12.0; i += 1.0) {\n for (float j = 0.0; j < 4.0; j += 1.0) {\n float n = left + cellSize * j;\n float m = top + cellSize * n_top + cellSize * i;\n\n if (n < (left + n_left * cellSize) && m < bottom) {\n velocity.xy += calculateAdditionalVelocity(vec2(n / cellSize, m / cellSize) / levelTextureSize, pointPosition.xy);\n }\n\n n = left + cellSize * i;\n m = top + cellSize * j;\n\n if (n < (right - n_right * cellSize) && m < (top + n_top * cellSize)) {\n velocity.xy += calculateAdditionalVelocity(vec2(n / cellSize, m / cellSize) / levelTextureSize, pointPosition.xy);\n }\n\n n = right - n_right * cellSize + cellSize * j;\n m = top + cellSize * i;\n\n if (n < right && m < (bottom - n_bottom * cellSize)) {\n velocity.xy += calculateAdditionalVelocity(vec2(n / cellSize, m / cellSize) / levelTextureSize, pointPosition.xy);\n }\n\n n = left + n_left * cellSize + cellSize * i;\n m = bottom - n_bottom * cellSize + cellSize * j;\n\n if (n < right && m < bottom) {\n velocity.xy += calculateAdditionalVelocity(vec2(n / cellSize, m / cellSize) / levelTextureSize, pointPosition.xy);\n }\n }\n }\n\n gl_FragColor = velocity;\n}","// The fragment shader calculates the velocity of a point based on its position,\n// the positions of other points in a spatial hierarchy, and random factors.\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D levelFbo;\nuniform sampler2D randomValues;\n\nuniform float levelTextureSize;\nuniform float repulsion;\nuniform float alpha;\n\nvarying vec2 textureCoords;\n\n// Calculate the additional velocity based on the center of mass\nvec2 calculateAdditionalVelocity (vec2 ij, vec2 pp) {\n vec2 add = vec2(0.0);\n vec4 centermass = texture2D(levelFbo, ij);\n if (centermass.r > 0.0 && centermass.g > 0.0 && centermass.b > 0.0) {\n vec2 centermassPosition = vec2(centermass.rg / centermass.b);\n vec2 distVector = pp - centermassPosition;\n float l = dot(distVector, distVector);\n float dist = sqrt(l);\n if (l > 0.0) {\n float angle = atan(distVector.y, distVector.x);\n float c = alpha * repulsion * centermass.b;\n\n float distanceMin2 = 1.0;\n if (l < distanceMin2) l = sqrt(distanceMin2 * l);\n float addV = c / sqrt(l);\n add = addV * vec2(cos(angle), sin(angle));\n }\n }\n return add;\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 random = texture2D(randomValues, textureCoords);\n\n vec4 velocity = vec4(0.0);\n\n // Calculate additional velocity based on the point position\n velocity.xy += calculateAdditionalVelocity(pointPosition.xy / levelTextureSize, pointPosition.xy);\n // Apply random factor to the velocity\n velocity.xy += velocity.xy * random.rg;\n\n gl_FragColor = velocity;\n}","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport calculateLevelFrag from '@/graph/modules/ForceManyBody/calculate-level.frag'\nimport calculateLevelVert from '@/graph/modules/ForceManyBody/calculate-level.vert'\nimport forceFrag from '@/graph/modules/ForceManyBody/force-level.frag'\nimport forceCenterFrag from '@/graph/modules/ForceManyBody/force-centermass.frag'\nimport { createIndexesForBuffer, createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport clearFrag from '@/graph/modules/Shared/clear.frag'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class ForceManyBody extends CoreModule {\n private randomValuesFbo: regl.Framebuffer2D | undefined\n private levelsFbos = new Map<string, regl.Framebuffer2D>()\n private clearLevelsCommand: regl.DrawCommand | undefined\n private clearVelocityCommand: regl.DrawCommand | undefined\n private calculateLevelsCommand: regl.DrawCommand | undefined\n private forceCommand: regl.DrawCommand | undefined\n private forceFromItsOwnCentermassCommand: regl.DrawCommand | undefined\n private quadtreeLevels = 0\n private randomValuesTexture: regl.Texture2D | undefined\n private pointIndices: regl.Buffer | undefined\n\n public create (): void {\n const { reglInstance, store } = this\n if (!store.pointsTextureSize) return\n this.quadtreeLevels = Math.log2(store.adjustedSpaceSize)\n for (let i = 0; i < this.quadtreeLevels; i += 1) {\n const levelTextureSize = Math.pow(2, i + 1)\n if (!this.levelsFbos.has(`level[${i}]`)) {\n this.levelsFbos.set(`level[${i}]`, reglInstance.framebuffer())\n }\n const fbo = this.levelsFbos.get(`level[${i}]`)\n if (fbo) {\n fbo({\n shape: [levelTextureSize, levelTextureSize],\n colorType: 'float',\n depth: false,\n stencil: false,\n })\n }\n }\n // Create random number to prevent point to stick together in one coordinate\n const randomValuesState = new Float32Array(store.pointsTextureSize * store.pointsTextureSize * 4)\n for (let i = 0; i < store.pointsTextureSize * store.pointsTextureSize; ++i) {\n randomValuesState[i * 4] = store.getRandomFloat(-1, 1) * 0.00001\n randomValuesState[i * 4 + 1] = store.getRandomFloat(-1, 1) * 0.00001\n }\n\n if (!this.randomValuesTexture) this.randomValuesTexture = reglInstance.texture()\n this.randomValuesTexture({\n data: randomValuesState,\n shape: [store.pointsTextureSize, store.pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.randomValuesFbo) this.randomValuesFbo = reglInstance.framebuffer()\n this.randomValuesFbo({\n color: this.randomValuesTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.pointIndices) this.pointIndices = reglInstance.buffer(0)\n this.pointIndices(createIndexesForBuffer(store.pointsTextureSize))\n }\n\n public initPrograms (): void {\n const { reglInstance, config, store, data, points } = this\n if (!this.clearLevelsCommand) {\n this.clearLevelsCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: (_: regl.DefaultContext, props: { levelFbo: regl.Framebuffer2D }) => props.levelFbo,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n if (!this.calculateLevelsCommand) {\n this.calculateLevelsCommand = reglInstance({\n frag: calculateLevelFrag,\n vert: calculateLevelVert,\n framebuffer: (_: regl.DefaultContext, props: { levelFbo: regl.Framebuffer2D; levelTextureSize: number; cellSize: number }) => props.levelFbo,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n attributes: {\n pointIndices: {\n buffer: this.pointIndices,\n size: 2,\n },\n },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n levelTextureSize: (_: regl.DefaultContext, props: { levelTextureSize: number }) => props.levelTextureSize,\n cellSize: (_: regl.DefaultContext, props: { cellSize: number }) => props.cellSize,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n\n if (!this.forceCommand) {\n this.forceCommand = reglInstance({\n frag: forceFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n level: (_, props: { levelFbo: regl.Framebuffer2D; levelTextureSize: number; level: number }) => props.level,\n levels: this.quadtreeLevels,\n levelFbo: (_, props) => props.levelFbo,\n levelTextureSize: (_, props) => props.levelTextureSize,\n alpha: () => store.alpha,\n repulsion: () => config.simulationRepulsion,\n spaceSize: () => store.adjustedSpaceSize,\n theta: () => config.simulationRepulsionTheta,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n\n if (!this.forceFromItsOwnCentermassCommand) {\n this.forceFromItsOwnCentermassCommand = reglInstance({\n frag: forceCenterFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n randomValues: () => this.randomValuesFbo,\n levelFbo: (_, props: { levelFbo: regl.Framebuffer2D; levelTextureSize: number }) => props.levelFbo,\n levelTextureSize: (_, props) => props.levelTextureSize,\n alpha: () => store.alpha,\n repulsion: () => config.simulationRepulsion,\n spaceSize: () => store.adjustedSpaceSize,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n\n if (!this.clearVelocityCommand) {\n this.clearVelocityCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n }\n\n public run (): void {\n const { store } = this\n for (let i = 0; i < this.quadtreeLevels; i += 1) {\n this.clearLevelsCommand?.({ levelFbo: this.levelsFbos.get(`level[${i}]`) })\n const levelTextureSize = Math.pow(2, i + 1)\n const cellSize = store.adjustedSpaceSize / levelTextureSize\n this.calculateLevelsCommand?.({\n levelFbo: this.levelsFbos.get(`level[${i}]`),\n levelTextureSize,\n cellSize,\n })\n }\n this.clearVelocityCommand?.()\n for (let i = 0; i < this.quadtreeLevels; i += 1) {\n const levelTextureSize = Math.pow(2, i + 1)\n this.forceCommand?.({\n levelFbo: this.levelsFbos.get(`level[${i}]`),\n levelTextureSize,\n level: i,\n })\n\n if (i === this.quadtreeLevels - 1) {\n this.forceFromItsOwnCentermassCommand?.({\n levelFbo: this.levelsFbos.get(`level[${i}]`),\n levelTextureSize,\n level: i,\n })\n }\n }\n }\n}\n","export function forceFrag (startLevel: number, maxLevels: number): string {\n startLevel = Math.min(startLevel, maxLevels)\n const delta = maxLevels - startLevel\n const calcAdd = `\n float dist = sqrt(l);\n if (dist > 0.0) {\n float c = alpha * repulsion * centermass.b;\n addVelocity += calcAdd(vec2(x, y), l, c);\n addVelocity += addVelocity * random.rg;\n }\n `\n function quad (level: number): string {\n if (level >= maxLevels) {\n return calcAdd\n } else {\n const groupSize = Math.pow(2, level + 1)\n\n const iEnding = new Array(level + 1 - delta).fill(0).map((_, l) => `pow(2.0, ${level - (l + delta)}.0) * i${l + delta}`).join('+')\n const jEnding = new Array(level + 1 - delta).fill(0).map((_, l) => `pow(2.0, ${level - (l + delta)}.0) * j${l + delta}`).join('+')\n\n return `\n for (float ij${level} = 0.0; ij${level} < 4.0; ij${level} += 1.0) {\n float i${level} = 0.0;\n float j${level} = 0.0;\n if (ij${level} == 1.0 || ij${level} == 3.0) i${level} = 1.0;\n if (ij${level} == 2.0 || ij${level} == 3.0) j${level} = 1.0;\n float i = pow(2.0, ${startLevel}.0) * n / width${level + 1} + ${iEnding};\n float j = pow(2.0, ${startLevel}.0) * m / width${level + 1} + ${jEnding};\n float groupPosX = (i + 0.5) / ${groupSize}.0;\n float groupPosY = (j + 0.5) / ${groupSize}.0;\n \n vec4 centermass = texture2D(level[${level}], vec2(groupPosX, groupPosY));\n if (centermass.r > 0.0 && centermass.g > 0.0 && centermass.b > 0.0) {\n float x = centermass.r / centermass.b - pointPosition.r;\n float y = centermass.g / centermass.b - pointPosition.g;\n float l = x * x + y * y;\n if ((width${level + 1} * width${level + 1}) / theta < l) {\n ${calcAdd}\n } else {\n ${quad(level + 1)}\n }\n }\n }\n `\n }\n }\n return `\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D randomValues;\nuniform float spaceSize;\nuniform float repulsion;\nuniform float theta;\nuniform float alpha;\nuniform sampler2D level[${maxLevels}];\nvarying vec2 textureCoords;\n\nvec2 calcAdd(vec2 xy, float l, float c) {\n float distanceMin2 = 1.0;\n if (l < distanceMin2) l = sqrt(distanceMin2 * l);\n float add = c / l;\n return add * xy;\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 random = texture2D(randomValues, textureCoords);\n\n float width0 = spaceSize;\n\n vec2 velocity = vec2(0.0);\n vec2 addVelocity = vec2(0.0);\n\n ${new Array(maxLevels).fill(0).map((_, i) => `float width${i + 1} = width${i} / 2.0;`).join('\\n')}\n\n for (float n = 0.0; n < pow(2.0, ${delta}.0); n += 1.0) {\n for (float m = 0.0; m < pow(2.0, ${delta}.0); m += 1.0) {\n ${quad(delta)}\n }\n }\n\n velocity -= addVelocity;\n\n gl_FragColor = vec4(velocity, 0.0, 0.0);\n}\n`\n}\n","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport calculateLevelFrag from '@/graph/modules/ForceManyBody/calculate-level.frag'\nimport calculateLevelVert from '@/graph/modules/ForceManyBody/calculate-level.vert'\nimport { forceFrag } from '@/graph/modules/ForceManyBody/quadtree-frag-shader'\nimport { createIndexesForBuffer, createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport clearFrag from '@/graph/modules/Shared/clear.frag'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class ForceManyBodyQuadtree extends CoreModule {\n private randomValuesFbo: regl.Framebuffer2D | undefined\n private levelsTextures = new Map<string, regl.Texture2D>()\n private levelsFbos = new Map<string, regl.Framebuffer2D>()\n private clearLevelsCommand: regl.DrawCommand | undefined\n private calculateLevelsCommand: regl.DrawCommand | undefined\n private quadtreeCommand: regl.DrawCommand | undefined\n private quadtreeLevels = 0\n private randomValuesTexture: regl.Texture2D | undefined\n private pointIndices: regl.Buffer | undefined\n\n public create (): void {\n const { reglInstance, store } = this\n if (!store.pointsTextureSize) return\n this.quadtreeLevels = Math.log2(store.adjustedSpaceSize)\n for (let i = 0; i < this.quadtreeLevels; i += 1) {\n const levelTextureSize = Math.pow(2, i + 1)\n const levelKey = `level[${i}]`\n if (!this.levelsTextures.has(levelKey)) {\n this.levelsTextures.set(levelKey, reglInstance.texture())\n }\n const texture = this.levelsTextures.get(levelKey)\n if (texture) {\n texture({\n data: new Float32Array(levelTextureSize * levelTextureSize * 4),\n shape: [levelTextureSize, levelTextureSize, 4],\n type: 'float',\n })\n }\n if (!this.levelsFbos.has(levelKey)) {\n this.levelsFbos.set(levelKey, reglInstance.framebuffer())\n }\n const fbo = this.levelsFbos.get(levelKey)\n if (fbo) {\n fbo({\n color: this.levelsTextures.get(levelKey),\n depth: false,\n stencil: false,\n })\n }\n }\n\n // Create random number to prevent point to stick together in one coordinate\n const randomValuesState = new Float32Array(store.pointsTextureSize * store.pointsTextureSize * 4)\n for (let i = 0; i < store.pointsTextureSize * store.pointsTextureSize; ++i) {\n randomValuesState[i * 4] = store.getRandomFloat(-1, 1) * 0.00001\n randomValuesState[i * 4 + 1] = store.getRandomFloat(-1, 1) * 0.00001\n }\n\n if (!this.randomValuesTexture) this.randomValuesTexture = reglInstance.texture()\n this.randomValuesTexture({\n data: randomValuesState,\n shape: [store.pointsTextureSize, store.pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.randomValuesFbo) this.randomValuesFbo = reglInstance.framebuffer()\n this.randomValuesFbo({\n color: this.randomValuesTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.pointIndices) this.pointIndices = reglInstance.buffer(0)\n this.pointIndices(createIndexesForBuffer(store.pointsTextureSize))\n }\n\n public initPrograms (): void {\n const { reglInstance, config, store, data, points } = this\n if (!this.clearLevelsCommand) {\n this.clearLevelsCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: (_: regl.DefaultContext, props: { levelFbo: regl.Framebuffer2D }) => props.levelFbo,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n\n if (!this.calculateLevelsCommand) {\n this.calculateLevelsCommand = reglInstance({\n frag: calculateLevelFrag,\n vert: calculateLevelVert,\n framebuffer: (_: regl.DefaultContext, props: { levelFbo: regl.Framebuffer2D; levelTextureSize: number; cellSize: number }) => props.levelFbo,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n attributes: {\n pointIndices: {\n buffer: this.pointIndices,\n size: 2,\n },\n },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n levelTextureSize: (_: regl.DefaultContext, props: { levelTextureSize: number }) => props.levelTextureSize,\n cellSize: (_: regl.DefaultContext, props: { cellSize: number }) => props.cellSize,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n\n this.quadtreeCommand = reglInstance({\n frag: forceFrag(config.simulationRepulsionQuadtreeLevels ?? this.quadtreeLevels, this.quadtreeLevels),\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n randomValues: () => this.randomValuesFbo,\n spaceSize: () => store.adjustedSpaceSize,\n repulsion: () => config.simulationRepulsion,\n theta: () => config.simulationRepulsionTheta,\n alpha: () => store.alpha,\n ...Object.fromEntries(this.levelsFbos),\n },\n })\n }\n\n public run (): void {\n const { store } = this\n for (let i = 0; i < this.quadtreeLevels; i += 1) {\n this.clearLevelsCommand?.({ levelFbo: this.levelsFbos.get(`level[${i}]`) })\n const levelTextureSize = Math.pow(2, i + 1)\n const cellSize = store.adjustedSpaceSize / levelTextureSize\n this.calculateLevelsCommand?.({\n levelFbo: this.levelsFbos.get(`level[${i}]`),\n levelTextureSize,\n cellSize,\n })\n }\n this.quadtreeCommand?.()\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float repulsion;\nuniform vec2 mousePos;\n\nvarying vec2 textureCoords;\n\nvoid main() { \n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 velocity = vec4(0.0);\n vec2 mouse = mousePos;\n // Move particles away from the mouse position using a repulsive force\n vec2 distVector = mouse - pointPosition.rg;\n float dist = sqrt(dot(distVector, distVector));\n dist = max(dist, 10.0);\n float angle = atan(distVector.y, distVector.x);\n float addV = 100.0 * repulsion / (dist * dist);\n velocity.rg -= addV * vec2(cos(angle), sin(angle));\n\n gl_FragColor = velocity;\n}","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport forceFrag from '@/graph/modules/ForceMouse/force-mouse.frag'\nimport { createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class ForceMouse extends CoreModule {\n private runCommand: regl.DrawCommand | undefined\n\n public initPrograms (): void {\n const { reglInstance, config, store, points } = this\n if (!this.runCommand) {\n this.runCommand = reglInstance({\n frag: forceFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n mousePos: () => store.mousePosition,\n repulsion: () => config.simulationRepulsionFromMouse,\n },\n })\n }\n }\n\n public run (): void {\n this.runCommand?.()\n }\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 rgba;\n\nvoid main() {\n gl_FragColor = rgba;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D clusterTexture;\nuniform float pointsTextureSize;\nuniform float clustersTextureSize;\n\nattribute vec2 pointIndices;\n\nvarying vec4 rgba;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, pointIndices / pointsTextureSize);\n rgba = vec4(pointPosition.xy, 1.0, 0.0);\n\n vec4 pointClusterIndices = texture2D(clusterTexture, pointIndices / pointsTextureSize);\n vec2 xy = vec2(0.0);\n if (pointClusterIndices.x >= 0.0 && pointClusterIndices.y >= 0.0) {\n xy = 2.0 * (pointClusterIndices.xy + 0.5) / clustersTextureSize - 1.0;\n }\n \n gl_Position = vec4(xy, 0.0, 1.0);\n gl_PointSize = 1.0;\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D centermassTexture;\nuniform sampler2D clusterTexture;\nuniform sampler2D clusterPositionsTexture;\nuniform sampler2D clusterForceCoefficient;\nuniform float alpha;\nuniform float clustersTextureSize;\nuniform float clusterCoefficient;\n\nvarying vec2 textureCoords;\n\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 velocity = vec4(0.0);\n vec4 pointClusterIndices = texture2D(clusterTexture, textureCoords);\n // no cluster, so no forces\n if (pointClusterIndices.x >= 0.0 && pointClusterIndices.y >= 0.0) {\n // positioning points to custom cluster position or either to the center of mass\n vec2 clusterPositions = texture2D(clusterPositionsTexture, pointClusterIndices.xy / clustersTextureSize).xy;\n if (clusterPositions.x < 0.0 || clusterPositions.y < 0.0) {\n vec4 centermassValues = texture2D(centermassTexture, pointClusterIndices.xy / clustersTextureSize);\n clusterPositions = centermassValues.xy / centermassValues.b;\n }\n vec4 clusterCustomCoeff = texture2D(clusterForceCoefficient, textureCoords);\n vec2 distVector = clusterPositions.xy - pointPosition.xy;\n float dist = length(distVector);\n if (dist > 0.0) {\n float addV = alpha * dist * clusterCoefficient * clusterCustomCoeff.r;\n velocity.rg += addV * normalize(distVector);\n }\n }\n\n gl_FragColor = velocity;\n}","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport calculateCentermassFrag from '@/graph/modules/Clusters/calculate-centermass.frag'\nimport calculateCentermassVert from '@/graph/modules/Clusters/calculate-centermass.vert'\nimport forceFrag from '@/graph/modules/Clusters/force-cluster.frag'\nimport { createQuadBuffer, createIndexesForBuffer } from '@/graph/modules/Shared/buffer'\nimport clearFrag from '@/graph/modules/Shared/clear.frag'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\n\nexport class Clusters extends CoreModule {\n public centermassFbo: regl.Framebuffer2D | undefined\n public clusterCount: number | undefined\n\n private clusterFbo: regl.Framebuffer2D | undefined\n private clusterPositionsFbo: regl.Framebuffer2D | undefined\n private clusterForceCoefficientFbo: regl.Framebuffer2D | undefined\n private clearCentermassCommand: regl.DrawCommand | undefined\n private calculateCentermassCommand: regl.DrawCommand | undefined\n private applyForcesCommand: regl.DrawCommand | undefined\n private clusterTexture: regl.Texture2D | undefined\n private clusterPositionsTexture: regl.Texture2D | undefined\n private clusterForceCoefficientTexture: regl.Texture2D | undefined\n private centermassTexture: regl.Texture2D | undefined\n private pointIndices: regl.Buffer | undefined\n private clustersTextureSize: number | undefined\n\n public create (): void {\n const { reglInstance, store, data } = this\n const { pointsTextureSize } = store\n if (data.pointsNumber === undefined || (!data.pointClusters && !data.clusterPositions)) return\n\n // Find the highest cluster index in the array and add 1 (since cluster indices start at 0).\n this.clusterCount = (data.pointClusters ?? []).reduce<number>((max, clusterIndex) => {\n if (clusterIndex === undefined || clusterIndex < 0) return max\n return Math.max(max, clusterIndex)\n }, 0) + 1\n\n this.clustersTextureSize = Math.ceil(Math.sqrt(this.clusterCount))\n\n const clusterState = new Float32Array(pointsTextureSize * pointsTextureSize * 4)\n const clusterPositions = new Float32Array(this.clustersTextureSize * this.clustersTextureSize * 4).fill(-1)\n const clusterForceCoefficient = new Float32Array(pointsTextureSize * pointsTextureSize * 4).fill(1)\n if (data.clusterPositions) {\n for (let cluster = 0; cluster < this.clusterCount; ++cluster) {\n clusterPositions[cluster * 4 + 0] = data.clusterPositions[cluster * 2 + 0] ?? -1\n clusterPositions[cluster * 4 + 1] = data.clusterPositions[cluster * 2 + 1] ?? -1\n }\n }\n\n for (let i = 0; i < data.pointsNumber; ++i) {\n const clusterIndex = data.pointClusters?.[i]\n if (clusterIndex === undefined) {\n // no cluster, so no forces\n clusterState[i * 4 + 0] = -1\n clusterState[i * 4 + 1] = -1\n } else {\n clusterState[i * 4 + 0] = clusterIndex % this.clustersTextureSize\n clusterState[i * 4 + 1] = Math.floor(clusterIndex / this.clustersTextureSize)\n }\n\n if (data.clusterStrength) clusterForceCoefficient[i * 4 + 0] = data.clusterStrength[i] ?? 1\n }\n\n if (!this.clusterTexture) this.clusterTexture = reglInstance.texture()\n this.clusterTexture({\n data: clusterState,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.clusterFbo) this.clusterFbo = reglInstance.framebuffer()\n this.clusterFbo({\n color: this.clusterTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.clusterPositionsTexture) this.clusterPositionsTexture = reglInstance.texture()\n this.clusterPositionsTexture({\n data: clusterPositions,\n shape: [this.clustersTextureSize, this.clustersTextureSize, 4],\n type: 'float',\n })\n if (!this.clusterPositionsFbo) this.clusterPositionsFbo = reglInstance.framebuffer()\n this.clusterPositionsFbo({\n color: this.clusterPositionsTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.clusterForceCoefficientTexture) this.clusterForceCoefficientTexture = reglInstance.texture()\n this.clusterForceCoefficientTexture({\n data: clusterForceCoefficient,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.clusterForceCoefficientFbo) this.clusterForceCoefficientFbo = reglInstance.framebuffer()\n this.clusterForceCoefficientFbo({\n color: this.clusterForceCoefficientTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.centermassTexture) this.centermassTexture = reglInstance.texture()\n this.centermassTexture({\n data: new Float32Array(this.clustersTextureSize * this.clustersTextureSize * 4).fill(0),\n shape: [this.clustersTextureSize, this.clustersTextureSize, 4],\n type: 'float',\n })\n if (!this.centermassFbo) this.centermassFbo = reglInstance.framebuffer()\n this.centermassFbo({\n color: this.centermassTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.pointIndices) this.pointIndices = reglInstance.buffer(0)\n this.pointIndices(createIndexesForBuffer(store.pointsTextureSize))\n }\n\n public initPrograms (): void {\n const { reglInstance, store, data, points } = this\n if (data.pointClusters === undefined) return\n\n if (!this.clearCentermassCommand) {\n this.clearCentermassCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: () => this.centermassFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n if (!this.calculateCentermassCommand) {\n this.calculateCentermassCommand = reglInstance({\n frag: calculateCentermassFrag,\n vert: calculateCentermassVert,\n framebuffer: () => this.centermassFbo as regl.Framebuffer2D,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n attributes: {\n pointIndices: {\n buffer: this.pointIndices,\n size: 2,\n },\n },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n clusterTexture: () => this.clusterFbo,\n clustersTextureSize: () => this.clustersTextureSize,\n },\n blend: {\n enable: true,\n func: {\n src: 'one',\n dst: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: { enable: false, mask: false },\n stencil: { enable: false },\n })\n }\n if (!this.applyForcesCommand) {\n this.applyForcesCommand = reglInstance({\n frag: forceFrag,\n vert: updateVert,\n framebuffer: () => points?.velocityFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => points?.previousPositionFbo,\n clusterTexture: () => this.clusterFbo,\n centermassTexture: () => this.centermassFbo,\n clusterPositionsTexture: () => this.clusterPositionsFbo,\n clusterForceCoefficient: () => this.clusterForceCoefficientFbo,\n alpha: () => store.alpha,\n clustersTextureSize: () => this.clustersTextureSize,\n clusterCoefficient: () => this.config.simulationCluster,\n },\n })\n }\n }\n\n public calculateCentermass (): void {\n this.clearCentermassCommand?.()\n this.calculateCentermassCommand?.()\n }\n\n public run (): void {\n if (!this.data.pointClusters && !this.data.clusterPositions) return\n this.calculateCentermass()\n this.applyForcesCommand?.()\n }\n}\n","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.GLBench = factory());\n}(this, (function () { 'use strict';\n\n var UISVG = \"<div class=\\\"gl-box\\\">\\n <svg viewBox=\\\"0 0 55 60\\\">\\n <text x=\\\"27\\\" y=\\\"56\\\" class=\\\"gl-fps\\\">00 FPS</text>\\n <text x=\\\"28\\\" y=\\\"8\\\" class=\\\"gl-mem\\\"></text>\\n <rect x=\\\"0\\\" y=\\\"14\\\" rx=\\\"4\\\" ry=\\\"4\\\" width=\\\"55\\\" height=\\\"32\\\"></rect>\\n <polyline class=\\\"gl-chart\\\"></polyline>\\n </svg>\\n <svg viewBox=\\\"0 0 14 60\\\" class=\\\"gl-cpu-svg\\\">\\n <line x1=\\\"7\\\" y1=\\\"38\\\" x2=\\\"7\\\" y2=\\\"11\\\" class=\\\"opacity\\\"/>\\n <line x1=\\\"7\\\" y1=\\\"38\\\" x2=\\\"7\\\" y2=\\\"11\\\" class=\\\"gl-cpu\\\" stroke-dasharray=\\\"0 27\\\"/>\\n <path d=\\\"M5.35 43c-.464 0-.812.377-.812.812v1.16c-.783.1972-1.421.812-1.595 1.624h-1.16c-.435 0-.812.348-.812.812s.348.812.812.812h1.102v1.653H1.812c-.464 0-.812.377-.812.812 0 .464.377.812.812.812h1.131c.1943.783.812 1.392 1.595 1.595v1.131c0 .464.377.812.812.812.464 0 .812-.377.812-.812V53.15h1.653v1.073c0 .464.377.812.812.812.464 0 .812-.377.812-.812v-1.131c.783-.1943 1.392-.812 1.595-1.595h1.131c.464 0 .812-.377.812-.812 0-.464-.377-.812-.812-.812h-1.073V48.22h1.102c.435 0 .812-.348.812-.812s-.348-.812-.812-.812h-1.16c-.1885-.783-.812-1.421-1.595-1.624v-1.131c0-.464-.377-.812-.812-.812-.464 0-.812.377-.812.812v1.073H6.162v-1.073c0-.464-.377-.812-.812-.812zm.58 3.48h2.088c.754 0 1.363.609 1.363 1.363v2.088c0 .754-.609 1.363-1.363 1.363H5.93c-.754 0-1.363-.609-1.363-1.363v-2.088c0-.754.609-1.363 1.363-1.363z\\\"/>\\n </svg>\\n <svg viewBox=\\\"0 0 14 60\\\" class=\\\"gl-gpu-svg\\\">\\n <line x1=\\\"7\\\" y1=\\\"38\\\" x2=\\\"7\\\" y2=\\\"11\\\" class=\\\"opacity\\\"/>\\n <line x1=\\\"7\\\" y1=\\\"38\\\" x2=\\\"7\\\" y2=\\\"11\\\" class=\\\"gl-gpu\\\" stroke-dasharray=\\\"0 27\\\"/>\\n <path d=\\\"M1.94775 43.3772a.736.736 0 10-.00416 1.472c.58535.00231.56465.1288.6348.3197.07015.18975.04933.43585.04933.43585l-.00653.05405v8.671a.736.736 0 101.472 0v-1.4145c.253.09522.52785.1495.81765.1495h5.267c1.2535 0 2.254-.9752 2.254-2.185v-3.105c0-1.2075-1.00625-2.185-2.254-2.185h-5.267c-.28865 0-.5635.05405-.8165.1495.01806-.16445.04209-.598-.1357-1.0787-.22425-.6072-.9499-1.2765-2.0125-1.2765zm2.9095 3.6455c.42435 0 .7659.36225.7659.8119v2.9785c0 .44965-.34155.8119-.7659.8119s-.7659-.36225-.7659-.8119v-2.9785c0-.44965.34155-.8119.7659-.8119zm4.117 0a2.3 2.3 0 012.3 2.3 2.3 2.3 0 01-2.3 2.3 2.3 2.3 0 01-2.3-2.3 2.3 2.3 0 012.3-2.3z\\\"/>\\n </svg>\\n</div>\";\n\n var UICSS = \"#gl-bench {\\n position:absolute;\\n left:0;\\n top:0;\\n z-index:1000;\\n -webkit-user-select: none;\\n -moz-user-select: none;\\n user-select: none;\\n}\\n\\n#gl-bench div {\\n position: relative;\\n display: block;\\n margin: 4px;\\n padding: 0 7px 0 10px;\\n background: #6c6;\\n border-radius: 15px;\\n cursor: pointer;\\n opacity: 0.9;\\n}\\n\\n#gl-bench svg {\\n height: 60px;\\n margin: 0 -1px;\\n}\\n\\n#gl-bench text {\\n font-size: 12px;\\n font-family: Helvetica,Arial,sans-serif;\\n font-weight: 700;\\n dominant-baseline: middle;\\n text-anchor: middle;\\n}\\n\\n#gl-bench .gl-mem {\\n font-size: 9px;\\n}\\n\\n#gl-bench line {\\n stroke-width: 5;\\n stroke: #112211;\\n stroke-linecap: round;\\n}\\n\\n#gl-bench polyline {\\n fill: none;\\n stroke: #112211;\\n stroke-linecap: round;\\n stroke-linejoin: round;\\n stroke-width: 3.5;\\n}\\n\\n#gl-bench rect {\\n fill: #448844;\\n}\\n\\n#gl-bench .opacity {\\n stroke: #448844;\\n}\\n\";\n\n class GLBench {\n\n /** GLBench constructor\n * @param { WebGLRenderingContext | WebGL2RenderingContext } gl context\n * @param { Object | undefined } settings additional settings\n */\n constructor(gl, settings = {}) {\n this.css = UICSS;\n this.svg = UISVG;\n this.paramLogger = () => {};\n this.chartLogger = () => {};\n this.chartLen = 20;\n this.chartHz = 20;\n\n this.names = [];\n this.cpuAccums = [];\n this.gpuAccums = []; \n this.activeAccums = [];\n this.chart = new Array(this.chartLen);\n this.now = () => (performance && performance.now) ? performance.now() : Date.now();\n this.updateUI = () => {\n [].forEach.call(this.nodes['gl-gpu-svg'], node => {\n node.style.display = this.trackGPU ? 'inline' : 'none';\n });\n };\n\n Object.assign(this, settings);\n this.detected = 0;\n this.finished = [];\n this.isFramebuffer = 0;\n this.frameId = 0;\n\n // 120hz device detection\n let rafId, n = 0, t0;\n let loop = (t) => {\n if (++n < 20) {\n rafId = requestAnimationFrame(loop);\n } else {\n this.detected = Math.ceil(1e3 * n / (t - t0) / 70);\n cancelAnimationFrame(rafId);\n }\n if (!t0) t0 = t;\n };\n requestAnimationFrame(loop);\n\n // attach gpu profilers\n if (gl) {\n const glFinish = async (t, activeAccums) =>\n Promise.resolve(setTimeout(() => {\n gl.getError();\n const dt = this.now() - t;\n activeAccums.forEach((active, i) => {\n if (active) this.gpuAccums[i] += dt;\n });\n }, 0));\n\n const addProfiler = (fn, self, target) => function() {\n const t = self.now();\n fn.apply(target, arguments);\n if (self.trackGPU) self.finished.push(glFinish(t, self.activeAccums.slice(0)));\n };\n\n ['drawArrays', 'drawElements', 'drawArraysInstanced',\n 'drawBuffers', 'drawElementsInstanced', 'drawRangeElements']\n .forEach(fn => { if (gl[fn]) gl[fn] = addProfiler(gl[fn], this, gl); });\n\n gl.getExtension = ((fn, self) => function() {\n let ext = fn.apply(gl, arguments);\n if (ext) {\n ['drawElementsInstancedANGLE', 'drawBuffersWEBGL']\n .forEach(fn => { if (ext[fn]) ext[fn] = addProfiler(ext[fn], self, ext); });\n }\n return ext;\n })(gl.getExtension, this);\n }\n\n // init ui and ui loggers\n if (!this.withoutUI) {\n if (!this.dom) this.dom = document.body;\n let elm = document.createElement('div');\n elm.id = 'gl-bench';\n this.dom.appendChild(elm);\n this.dom.insertAdjacentHTML('afterbegin', '<style id=\"gl-bench-style\">' + this.css + '</style>');\n this.dom = elm;\n this.dom.addEventListener('click', () => {\n this.trackGPU = !this.trackGPU;\n this.updateUI();\n });\n\n this.paramLogger = ((logger, dom, names) => {\n const classes = ['gl-cpu', 'gl-gpu', 'gl-mem', 'gl-fps', 'gl-gpu-svg', 'gl-chart'];\n const nodes = Object.assign({}, classes);\n classes.forEach(c => nodes[c] = dom.getElementsByClassName(c));\n this.nodes = nodes;\n return (i, cpu, gpu, mem, fps, totalTime, frameId) => {\n nodes['gl-cpu'][i].style.strokeDasharray = (cpu * 0.27).toFixed(0) + ' 100';\n nodes['gl-gpu'][i].style.strokeDasharray = (gpu * 0.27).toFixed(0) + ' 100';\n nodes['gl-mem'][i].innerHTML = names[i] ? names[i] : (mem ? 'mem: ' + mem.toFixed(0) + 'mb' : '');\n nodes['gl-fps'][i].innerHTML = fps.toFixed(0) + ' FPS';\n logger(names[i], cpu, gpu, mem, fps, totalTime, frameId);\n }\n })(this.paramLogger, this.dom, this.names);\n\n this.chartLogger = ((logger, dom) => {\n let nodes = { 'gl-chart': dom.getElementsByClassName('gl-chart') };\n return (i, chart, circularId) => {\n let points = '';\n let len = chart.length;\n for (let i = 0; i < len; i++) {\n let id = (circularId + i + 1) % len;\n if (chart[id] != undefined) {\n points = points + ' ' + (55 * i / (len - 1)).toFixed(1) + ','\n + (45 - chart[id] * 22 / 60 / this.detected).toFixed(1);\n }\n }\n nodes['gl-chart'][i].setAttribute('points', points);\n logger(this.names[i], chart, circularId);\n }\n })(this.chartLogger, this.dom);\n }\n }\n\n /**\n * Explicit UI add\n * @param { string | undefined } name \n */\n addUI(name) {\n if (this.names.indexOf(name) == -1) {\n this.names.push(name);\n if (this.dom) {\n this.dom.insertAdjacentHTML('beforeend', this.svg);\n this.updateUI();\n }\n this.cpuAccums.push(0);\n this.gpuAccums.push(0);\n this.activeAccums.push(false);\n }\n }\n\n /**\n * Increase frameID\n * @param { number | undefined } now\n */\n nextFrame(now) {\n this.frameId++;\n const t = now ? now : this.now();\n\n // params\n if (this.frameId <= 1) {\n this.paramFrame = this.frameId;\n this.paramTime = t;\n } else {\n let duration = t - this.paramTime;\n if (duration >= 1e3) {\n const frameCount = this.frameId - this.paramFrame;\n const fps = frameCount / duration * 1e3;\n for (let i = 0; i < this.names.length; i++) {\n const cpu = this.cpuAccums[i] / duration * 100,\n gpu = this.gpuAccums[i] / duration * 100,\n mem = (performance && performance.memory) ? performance.memory.usedJSHeapSize / (1 << 20) : 0;\n this.paramLogger(i, cpu, gpu, mem, fps, duration, frameCount);\n this.cpuAccums[i] = 0;\n Promise.all(this.finished).then(() => {\n this.gpuAccums[i] = 0;\n this.finished = [];\n });\n }\n this.paramFrame = this.frameId;\n this.paramTime = t;\n }\n }\n\n // chart\n if (!this.detected || !this.chartFrame) {\n this.chartFrame = this.frameId;\n this.chartTime = t;\n this.circularId = 0;\n } else {\n let timespan = t - this.chartTime;\n let hz = this.chartHz * timespan / 1e3;\n while (--hz > 0 && this.detected) {\n const frameCount = this.frameId - this.chartFrame;\n const fps = frameCount / timespan * 1e3;\n this.chart[this.circularId % this.chartLen] = fps;\n for (let i = 0; i < this.names.length; i++) {\n this.chartLogger(i, this.chart, this.circularId);\n }\n this.circularId++;\n this.chartFrame = this.frameId;\n this.chartTime = t;\n }\n }\n }\n\n /**\n * Begin named measurement\n * @param { string | undefined } name\n */\n begin(name) {\n this.updateAccums(name);\n }\n\n /**\n * End named measure\n * @param { string | undefined } name\n */\n end(name) {\n this.updateAccums(name);\n }\n\n updateAccums(name) {\n let nameId = this.names.indexOf(name);\n if (nameId == -1) {\n nameId = this.names.length;\n this.addUI(name);\n }\n\n const t = this.now();\n const dt = t - this.t0;\n for (let i = 0; i < nameId + 1; i++) {\n if (this.activeAccums[i]) {\n this.cpuAccums[i] += dt;\n }\n } this.activeAccums[nameId] = !this.activeAccums[nameId];\n this.t0 = t;\n }\n\n }\n\n return GLBench;\n\n})));\n","export const benchCSS = `\n #gl-bench {\n position:absolute;\n right:0;\n top:0;\n z-index:1000;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n }\n #gl-bench div {\n position: relative;\n display: block;\n margin: 4px;\n padding: 0 7px 0 10px;\n background: #5f69de;\n border-radius: 15px;\n cursor: pointer;\n opacity: 0.9;\n }\n #gl-bench svg {\n height: 60px;\n margin: 0 -1px;\n }\n #gl-bench text {\n font-size: 12px;\n font-family: Helvetica,Arial,sans-serif;\n font-weight: 700;\n dominant-baseline: middle;\n text-anchor: middle;\n }\n #gl-bench .gl-mem {\n font-size: 9px;\n }\n #gl-bench line {\n stroke-width: 5;\n stroke: #112211;\n stroke-linecap: round;\n }\n #gl-bench polyline {\n fill: none;\n stroke: #112211;\n stroke-linecap: round;\n stroke-linejoin: round;\n stroke-width: 3.5;\n }\n #gl-bench rect {\n fill: #8288e4;\n }\n #gl-bench .opacity {\n stroke: #8288e4;\n }\n`\n","\nimport { select } from 'd3-selection'\nimport GLBench from 'gl-bench/dist/gl-bench'\nimport { benchCSS } from './css'\n\nexport class FPSMonitor {\n private bench: GLBench | undefined\n\n public constructor (canvas: HTMLCanvasElement) {\n this.destroy()\n const gl = (canvas.getContext('webgl') || canvas.getContext('experimental-webgl')) as WebGL2RenderingContext\n this.bench = new GLBench(gl, { css: benchCSS })\n }\n\n public begin (): void {\n this.bench?.begin('frame')\n }\n\n public end (now: number): void {\n this.bench?.end('frame')\n this.bench?.nextFrame(now)\n }\n\n public destroy (): void {\n this.bench = undefined\n select('#gl-bench').remove()\n }\n}\n","import { getRgbaColor, isNumber } from '@/graph/helper'\nimport { GraphConfig } from '@/graph/config'\n\nexport enum PointShape {\n Circle = 0,\n Square = 1,\n Triangle = 2,\n Diamond = 3,\n Pentagon = 4,\n Hexagon = 5,\n Star = 6,\n Cross = 7,\n None = 8\n}\n\nexport class GraphData {\n public inputPointPositions: Float32Array | undefined\n public inputPointColors: Float32Array | undefined\n public inputPointSizes: Float32Array | undefined\n public inputPointShapes: Float32Array | undefined\n public inputImageData: ImageData[] | undefined\n public inputPointImageIndices: Float32Array | undefined\n public inputPointImageSizes: Float32Array | undefined\n public inputLinkColors: Float32Array | undefined\n public inputLinkWidths: Float32Array | undefined\n public inputLinkStrength: Float32Array | undefined\n public inputPointClusters: (number | undefined)[] | undefined\n public inputClusterPositions: (number | undefined)[] | undefined\n public inputClusterStrength: Float32Array | undefined\n public inputPinnedPoints: number[] | undefined\n\n public pointPositions: Float32Array | undefined\n public pointColors: Float32Array | undefined\n public pointSizes: Float32Array | undefined\n public pointShapes: Float32Array | undefined\n public pointImageIndices: Float32Array | undefined\n public pointImageSizes: Float32Array | undefined\n\n public inputLinks: Float32Array | undefined\n public links: Float32Array | undefined\n public linkColors: Float32Array | undefined\n public linkWidths: Float32Array | undefined\n public linkArrowsBoolean: boolean[] | undefined\n public linkArrows: number[] | undefined\n public linkStrength: Float32Array | undefined\n\n public pointClusters: (number | undefined)[] | undefined\n public clusterPositions: (number | undefined)[] | undefined\n public clusterStrength: Float32Array | undefined\n\n /**\n * Each inner array of `sourceIndexToTargetIndices` and `targetIndexToSourceIndices` contains pairs where:\n * - The first value is the target/source index in the point array.\n * - The second value is the link index in the array of links.\n */\n public sourceIndexToTargetIndices: ([number, number][] | undefined)[] | undefined\n public targetIndexToSourceIndices: ([number, number][] | undefined)[] | undefined\n\n public degree: number[] | undefined\n public inDegree: number[] | undefined\n public outDegree: number[] | undefined\n\n private _config: GraphConfig\n\n public constructor (config: GraphConfig) {\n this._config = config\n }\n\n public get pointsNumber (): number | undefined {\n return this.pointPositions && this.pointPositions.length / 2\n }\n\n public get linksNumber (): number | undefined {\n return this.links && this.links.length / 2\n }\n\n public updatePoints (): void {\n this.pointPositions = this.inputPointPositions\n }\n\n /**\n * Updates the point colors based on the input data or default config value.\n */\n public updatePointColor (): void {\n if (this.pointsNumber === undefined) {\n this.pointColors = undefined\n return\n }\n\n // Sets point colors to default values from config if the input is missing or does not match input points number.\n const defaultRgba = getRgbaColor(this._config.pointDefaultColor ?? this._config.pointColor)\n if (this.inputPointColors === undefined || this.inputPointColors.length / 4 !== this.pointsNumber) {\n this.pointColors = new Float32Array(this.pointsNumber * 4)\n for (let i = 0; i < this.pointColors.length / 4; i++) {\n this.pointColors[i * 4] = defaultRgba[0]\n this.pointColors[i * 4 + 1] = defaultRgba[1]\n this.pointColors[i * 4 + 2] = defaultRgba[2]\n this.pointColors[i * 4 + 3] = defaultRgba[3]\n }\n } else {\n this.pointColors = this.inputPointColors\n for (let i = 0; i < this.pointColors.length / 4; i++) {\n if (!isNumber(this.pointColors[i * 4])) this.pointColors[i * 4] = defaultRgba[0]\n if (!isNumber(this.pointColors[i * 4 + 1])) this.pointColors[i * 4 + 1] = defaultRgba[1]\n if (!isNumber(this.pointColors[i * 4 + 2])) this.pointColors[i * 4 + 2] = defaultRgba[2]\n if (!isNumber(this.pointColors[i * 4 + 3])) this.pointColors[i * 4 + 3] = defaultRgba[3]\n }\n }\n }\n\n /**\n * Updates the point sizes based on the input data or default config value.\n */\n public updatePointSize (): void {\n if (this.pointsNumber === undefined) {\n this.pointSizes = undefined\n return\n }\n\n // Sets point sizes to default values from config if the input is missing or does not match input points number.\n if (this.inputPointSizes === undefined || this.inputPointSizes.length !== this.pointsNumber) {\n this.pointSizes = new Float32Array(this.pointsNumber).fill(this._config.pointSize)\n } else {\n this.pointSizes = this.inputPointSizes\n for (let i = 0; i < this.pointSizes.length; i++) {\n if (!isNumber(this.pointSizes[i])) {\n this.pointSizes[i] = this._config.pointSize\n }\n }\n }\n }\n\n /**\n * Updates the point shapes based on the input data or default shape.\n * Default behavior: Circle (0).\n * Images are rendered above shapes.\n */\n public updatePointShape (): void {\n if (this.pointsNumber === undefined) {\n this.pointShapes = undefined\n return\n }\n\n // Determine default shape: Circle\n const defaultShape = PointShape.Circle\n\n // Sets point shapes to default values if the input is missing or does not match input points number.\n if (this.inputPointShapes === undefined || this.inputPointShapes.length !== this.pointsNumber) {\n this.pointShapes = new Float32Array(this.pointsNumber).fill(defaultShape)\n } else {\n this.pointShapes = new Float32Array(this.inputPointShapes)\n const pointShapes = this.pointShapes\n for (let i = 0; i < pointShapes.length; i++) {\n const shape = pointShapes[i]\n if (shape == null || !isNumber(shape) || shape < 0 || shape > 8) {\n pointShapes[i] = defaultShape\n }\n }\n }\n }\n\n /**\n * Updates the point image indices based on the input data or default value (-1 for no image).\n */\n public updatePointImageIndices (): void {\n if (this.pointsNumber === undefined) {\n this.pointImageIndices = undefined\n return\n }\n\n // Sets point image indices to -1 if input is missing or doesn't match points count\n if (this.inputPointImageIndices === undefined || this.inputPointImageIndices.length !== this.pointsNumber) {\n this.pointImageIndices = new Float32Array(this.pointsNumber).fill(-1)\n } else {\n const pointImageIndices = new Float32Array(this.inputPointImageIndices)\n for (let i = 0; i < pointImageIndices.length; i++) {\n const rawIndex = pointImageIndices[i]\n const imageIndex = (rawIndex === undefined) ? NaN : rawIndex\n if (!Number.isFinite(imageIndex) || imageIndex < 0) {\n pointImageIndices[i] = -1\n } else {\n pointImageIndices[i] = Math.trunc(imageIndex)\n }\n }\n this.pointImageIndices = pointImageIndices\n }\n }\n\n /**\n * Updates the point image sizes based on the input data or default to point sizes.\n */\n public updatePointImageSizes (): void {\n if (this.pointsNumber === undefined) {\n this.pointImageSizes = undefined\n return\n }\n\n // Sets point image sizes to point sizes if the input is missing or does not match input points number.\n if (this.inputPointImageSizes === undefined || this.inputPointImageSizes.length !== this.pointsNumber) {\n this.pointImageSizes = this.pointSizes ? new Float32Array(this.pointSizes) : new Float32Array(this.pointsNumber).fill(this._config.pointSize)\n } else {\n this.pointImageSizes = new Float32Array(this.inputPointImageSizes)\n for (let i = 0; i < this.pointImageSizes.length; i++) {\n if (!isNumber(this.pointImageSizes[i])) {\n this.pointImageSizes[i] = this.pointSizes?.[i] ?? this._config.pointSize\n }\n }\n }\n }\n\n public updateLinks (): void {\n this.links = this.inputLinks\n }\n\n /**\n * Updates the link colors based on the input data or default config value.\n */\n public updateLinkColor (): void {\n if (this.linksNumber === undefined) {\n this.linkColors = undefined\n return\n }\n\n // Sets link colors to default values from config if the input is missing or does not match input links number.\n const defaultRgba = getRgbaColor(this._config.linkDefaultColor ?? this._config.linkColor)\n if (this.inputLinkColors === undefined || this.inputLinkColors.length / 4 !== this.linksNumber) {\n this.linkColors = new Float32Array(this.linksNumber * 4)\n\n for (let i = 0; i < this.linkColors.length / 4; i++) {\n this.linkColors[i * 4] = defaultRgba[0]\n this.linkColors[i * 4 + 1] = defaultRgba[1]\n this.linkColors[i * 4 + 2] = defaultRgba[2]\n this.linkColors[i * 4 + 3] = defaultRgba[3]\n }\n } else {\n this.linkColors = this.inputLinkColors\n for (let i = 0; i < this.linkColors.length / 4; i++) {\n if (!isNumber(this.linkColors[i * 4])) this.linkColors[i * 4] = defaultRgba[0]\n if (!isNumber(this.linkColors[i * 4 + 1])) this.linkColors[i * 4 + 1] = defaultRgba[1]\n if (!isNumber(this.linkColors[i * 4 + 2])) this.linkColors[i * 4 + 2] = defaultRgba[2]\n if (!isNumber(this.linkColors[i * 4 + 3])) this.linkColors[i * 4 + 3] = defaultRgba[3]\n }\n }\n }\n\n /**\n * Updates the link width based on the input data or default config value.\n */\n public updateLinkWidth (): void {\n if (this.linksNumber === undefined) {\n this.linkWidths = undefined\n return\n }\n\n // Sets link widths to default values from config if the input is missing or does not match input links number.\n if (this.inputLinkWidths === undefined || this.inputLinkWidths.length !== this.linksNumber) {\n this.linkWidths = new Float32Array(this.linksNumber).fill(this._config.linkWidth)\n } else {\n this.linkWidths = this.inputLinkWidths\n for (let i = 0; i < this.linkWidths.length; i++) {\n if (!isNumber(this.linkWidths[i])) {\n this.linkWidths[i] = this._config.linkWidth\n }\n }\n }\n }\n\n /**\n * Updates the link arrows based on the input data or default config value.\n */\n public updateArrows (): void {\n if (this.linksNumber === undefined) {\n this.linkArrows = undefined\n return\n }\n\n // Sets link arrows to default values from config if the input is missing or does not match input links number.\n if (this.linkArrowsBoolean === undefined || this.linkArrowsBoolean.length !== this.linksNumber) {\n this.linkArrows = new Array(this.linksNumber).fill(+this._config.linkArrows)\n } else {\n this.linkArrows = this.linkArrowsBoolean.map(d => +d)\n }\n }\n\n public updateLinkStrength (): void {\n if (this.linksNumber === undefined) {\n this.linkStrength = undefined\n }\n\n if (this.inputLinkStrength === undefined || this.inputLinkStrength.length !== this.linksNumber) {\n this.linkStrength = undefined\n } else {\n this.linkStrength = this.inputLinkStrength\n }\n }\n\n public updateClusters (): void {\n if (this.pointsNumber === undefined) {\n this.pointClusters = undefined\n this.clusterPositions = undefined\n return\n }\n if (this.inputPointClusters === undefined || this.inputPointClusters.length !== this.pointsNumber) {\n this.pointClusters = undefined\n } else {\n this.pointClusters = this.inputPointClusters\n }\n if (this.inputClusterPositions === undefined) {\n this.clusterPositions = undefined\n } else {\n this.clusterPositions = this.inputClusterPositions\n }\n if (this.inputClusterStrength === undefined || this.inputClusterStrength.length !== this.pointsNumber) {\n this.clusterStrength = undefined\n } else {\n this.clusterStrength = this.inputClusterStrength\n }\n }\n\n public update (): void {\n this.updatePoints()\n this.updatePointColor()\n this.updatePointSize()\n this.updatePointShape()\n this.updatePointImageIndices()\n this.updatePointImageSizes()\n\n this.updateLinks()\n this.updateLinkColor()\n this.updateLinkWidth()\n this.updateArrows()\n this.updateLinkStrength()\n\n this.updateClusters()\n\n this._createAdjacencyLists()\n this._calculateDegrees()\n }\n\n public getAdjacentIndices (index: number): number[] | undefined {\n return [...(this.sourceIndexToTargetIndices?.[index]?.map(d => d[0]) || []), ...(this.targetIndexToSourceIndices?.[index]?.map(d => d[0]) || [])]\n }\n\n private _createAdjacencyLists (): void {\n if (this.linksNumber === undefined || this.links === undefined) {\n this.sourceIndexToTargetIndices = undefined\n this.targetIndexToSourceIndices = undefined\n return\n }\n\n this.sourceIndexToTargetIndices = new Array(this.pointsNumber).fill(undefined)\n this.targetIndexToSourceIndices = new Array(this.pointsNumber).fill(undefined)\n for (let i = 0; i < this.linksNumber; i++) {\n const sourceIndex = this.links[i * 2]\n const targetIndex = this.links[i * 2 + 1]\n if (sourceIndex !== undefined && targetIndex !== undefined) {\n if (this.sourceIndexToTargetIndices[sourceIndex] === undefined) this.sourceIndexToTargetIndices[sourceIndex] = []\n this.sourceIndexToTargetIndices[sourceIndex]?.push([targetIndex, i])\n\n if (this.targetIndexToSourceIndices[targetIndex] === undefined) this.targetIndexToSourceIndices[targetIndex] = []\n this.targetIndexToSourceIndices[targetIndex]?.push([sourceIndex, i])\n }\n }\n }\n\n private _calculateDegrees (): void {\n if (this.pointsNumber === undefined) {\n this.degree = undefined\n this.inDegree = undefined\n this.outDegree = undefined\n return\n }\n\n this.degree = new Array(this.pointsNumber).fill(0)\n this.inDegree = new Array(this.pointsNumber).fill(0)\n this.outDegree = new Array(this.pointsNumber).fill(0)\n\n for (let i = 0; i < this.pointsNumber; i++) {\n this.inDegree[i] = this.targetIndexToSourceIndices?.[i]?.length ?? 0\n this.outDegree[i] = this.sourceIndexToTargetIndices?.[i]?.length ?? 0\n this.degree[i] = (this.inDegree[i] ?? 0) + (this.outDegree[i] ?? 0)\n }\n }\n}\n","precision highp float;\n\nvarying vec4 rgbaColor;\nvarying vec2 pos;\nvarying float arrowLength;\nvarying float useArrow;\nvarying float smoothing;\nvarying float arrowWidthFactor;\nvarying float linkIndex;\n\n// renderMode: 0.0 = normal rendering, 1.0 = index buffer rendering for picking\nuniform float renderMode;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nvoid main() {\n float opacity = 1.0;\n vec3 color = rgbaColor.rgb;\n\n if (useArrow > 0.5) {\n float end_arrow = 0.5 + arrowLength / 2.0;\n float start_arrow = end_arrow - arrowLength;\n float arrowWidthDelta = arrowWidthFactor / 2.0;\n float linkOpacity = rgbaColor.a * smoothstep(0.5 - arrowWidthDelta, 0.5 - arrowWidthDelta - smoothing / 2.0, abs(pos.y));\n float arrowOpacity = 1.0;\n if (pos.x > start_arrow && pos.x < start_arrow + arrowLength) {\n float xmapped = map(pos.x, start_arrow, end_arrow, 0.0, 1.0);\n arrowOpacity = rgbaColor.a * smoothstep(xmapped - smoothing, xmapped, map(abs(pos.y), 0.5, 0.0, 0.0, 1.0));\n if (linkOpacity != arrowOpacity) {\n linkOpacity = max(linkOpacity, arrowOpacity);\n }\n }\n opacity = linkOpacity;\n } else opacity = rgbaColor.a * smoothstep(0.5, 0.5 - smoothing, abs(pos.y));\n \n if (renderMode > 0.0) {\n if (opacity > 0.0) {\n gl_FragColor = vec4(linkIndex, 0.0, 0.0, 1.0);\n } else {\n gl_FragColor = vec4(-1.0, 0.0, 0.0, 0.0);\n }\n } else gl_FragColor = vec4(color, opacity);\n\n}","precision highp float;\n\nattribute vec2 position, pointA, pointB;\nattribute vec4 color;\nattribute float width;\nattribute float arrow;\nattribute float linkIndices;\n\nuniform sampler2D positionsTexture;\nuniform sampler2D pointGreyoutStatus;\nuniform mat3 transformationMatrix;\nuniform float pointsTextureSize;\nuniform float widthScale;\nuniform float linkArrowsSizeScale;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform vec2 linkVisibilityDistanceRange;\nuniform float linkVisibilityMinTransparency;\nuniform float linkOpacity;\nuniform float greyoutOpacity;\nuniform float curvedWeight;\nuniform float curvedLinkControlPointDistance;\nuniform float curvedLinkSegments;\nuniform bool scaleLinksOnZoom;\nuniform float maxPointSize;\n// renderMode: 0.0 = normal rendering, 1.0 = index buffer rendering for picking\nuniform float renderMode;\nuniform float hoveredLinkIndex;\nuniform vec4 hoveredLinkColor;\nuniform float hoveredLinkWidthIncrease;\n\nvarying vec4 rgbaColor;\nvarying vec2 pos;\nvarying float arrowLength;\nvarying float useArrow;\nvarying float smoothing;\nvarying float arrowWidthFactor;\nvarying float linkIndex;\n\nfloat map(float value, float min1, float max1, float min2, float max2) {\n return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n}\n\nvec2 conicParametricCurve(vec2 A, vec2 B, vec2 ControlPoint, float t, float w) {\n vec2 divident = (1.0 - t) * (1.0 - t) * A + 2.0 * (1.0 - t) * t * w * ControlPoint + t * t * B;\n float divisor = (1.0 - t) * (1.0 - t) + 2.0 * (1.0 - t) * t * w + t * t;\n return divident / divisor;\n}\n\nfloat calculateLinkWidth(float width) {\n float linkWidth;\n if (scaleLinksOnZoom) {\n // Use original width if links should scale with zoom\n linkWidth = width;\n } else {\n // Adjust width based on zoom level to maintain visual size\n linkWidth = width / transformationMatrix[0][0];\n // Apply a non-linear scaling to avoid extreme widths\n linkWidth *= min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n }\n // Limit link width based on whether it has an arrow\n if (useArrow > 0.5) {\n return min(linkWidth, (maxPointSize * 2.0) / transformationMatrix[0][0]);\n } else {\n return min(linkWidth, maxPointSize / transformationMatrix[0][0]);\n }\n}\n\nfloat calculateArrowWidth(float arrowWidth) {\n if (scaleLinksOnZoom) {\n return arrowWidth;\n } else {\n // Apply the same scaling logic as calculateLinkWidth to maintain proportionality\n arrowWidth = arrowWidth / transformationMatrix[0][0];\n // Apply the same non-linear scaling to avoid extreme widths\n arrowWidth *= min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n return arrowWidth;\n }\n}\n\nvoid main() {\n pos = position;\n linkIndex = linkIndices;\n\n vec2 pointTexturePosA = (pointA + 0.5) / pointsTextureSize;\n vec2 pointTexturePosB = (pointB + 0.5) / pointsTextureSize;\n \n vec4 greyoutStatusA = texture2D(pointGreyoutStatus, pointTexturePosA);\n vec4 greyoutStatusB = texture2D(pointGreyoutStatus, pointTexturePosB);\n \n vec4 pointPositionA = texture2D(positionsTexture, pointTexturePosA);\n vec4 pointPositionB = texture2D(positionsTexture, pointTexturePosB);\n vec2 a = pointPositionA.xy;\n vec2 b = pointPositionB.xy;\n \n // Calculate direction vector and its perpendicular\n vec2 xBasis = b - a;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n\n // Calculate link distance and control point for curved link\n float linkDist = length(xBasis);\n float h = curvedLinkControlPointDistance;\n vec2 controlPoint = (a + b) / 2.0 + yBasis * linkDist * h;\n\n // Convert link distance to screen pixels\n float linkDistPx = linkDist * transformationMatrix[0][0];\n \n // Calculate line width using the width scale\n float linkWidth = width * widthScale;\n float k = 2.0;\n // Arrow width is proportionally larger than the line width\n float arrowWidth = linkWidth * k;\n arrowWidth *= linkArrowsSizeScale;\n\n // Ensure arrow width difference is non-negative to prevent unwanted changes to link width\n float arrowWidthDifference = max(0.0, arrowWidth - linkWidth);\n\n // Calculate arrow width in pixels\n float arrowWidthPx = calculateArrowWidth(arrowWidth);\n\n // Calculate arrow length proportional to its width\n // 0.866 is approximately sqrt(3)/2 - related to equilateral triangle geometry\n // Cap the length to avoid overly long arrows on short links\n arrowLength = min(0.3, (0.866 * arrowWidthPx * 2.0) / linkDist);\n\n useArrow = arrow;\n if (useArrow > 0.5) {\n linkWidth += arrowWidthDifference;\n }\n\n arrowWidthFactor = arrowWidthDifference / linkWidth;\n\n // Calculate final link width in pixels with smoothing\n float linkWidthPx = calculateLinkWidth(linkWidth);\n \n if (renderMode > 0.0) {\n // Add 5 pixels padding for better hover detection\n linkWidthPx += 5.0 / transformationMatrix[0][0];\n } else {\n // Add pixel increase if this is the hovered link\n if (hoveredLinkIndex == linkIndex) {\n linkWidthPx += hoveredLinkWidthIncrease / transformationMatrix[0][0];\n }\n }\n float smoothingPx = 0.5 / transformationMatrix[0][0];\n smoothing = smoothingPx / linkWidthPx;\n linkWidthPx += smoothingPx;\n\n\n\n // Calculate final color with opacity based on link distance\n vec3 rgbColor = color.rgb;\n // Adjust opacity based on link distance\n float opacity = color.a * linkOpacity * max(linkVisibilityMinTransparency, map(linkDistPx, linkVisibilityDistanceRange.g, linkVisibilityDistanceRange.r, 0.0, 1.0));\n\n // Apply greyed out opacity if either endpoint is greyed out\n if (greyoutStatusA.r > 0.0 || greyoutStatusB.r > 0.0) {\n opacity *= greyoutOpacity;\n }\n\n // Pass final color to fragment shader\n rgbaColor = vec4(rgbColor, opacity);\n\n // Apply hover color if this is the hovered link and hover color is defined\n if (hoveredLinkIndex == linkIndex && hoveredLinkColor.a > -0.5) {\n // Keep existing RGB values but multiply opacity with hover color opacity\n rgbaColor.rgb = hoveredLinkColor.rgb;\n rgbaColor.a *= hoveredLinkColor.a;\n }\n\n // Calculate position on the curved path\n float t = position.x;\n float w = curvedWeight;\n \n float tPrev = t - 1.0 / curvedLinkSegments;\n float tNext = t + 1.0 / curvedLinkSegments;\n \n vec2 pointCurr = conicParametricCurve(a, b, controlPoint, t, w);\n \n vec2 pointPrev = conicParametricCurve(a, b, controlPoint, max(0.0, tPrev), w);\n vec2 pointNext = conicParametricCurve(a, b, controlPoint, min(tNext, 1.0), w);\n \n vec2 xBasisCurved = pointNext - pointPrev;\n vec2 yBasisCurved = normalize(vec2(-xBasisCurved.y, xBasisCurved.x));\n \n pointCurr += yBasisCurved * linkWidthPx * position.y;\n \n // Transform to clip space coordinates\n vec2 p = 2.0 * pointCurr / spaceSize - 1.0;\n p *= spaceSize / screenSize;\n vec3 final = transformationMatrix * vec3(p, 1);\n \n gl_Position = vec4(final.rg, 0, 1);\n}","precision highp float;\n\nuniform sampler2D linkIndexTexture;\nuniform vec2 mousePosition;\nuniform vec2 screenSize;\n\nvarying vec2 vTexCoord;\n\nvoid main() {\n // Convert mouse position to texture coordinates\n vec2 texCoord = mousePosition / screenSize;\n \n // Read the link index from the linkIndexFbo texture at mouse position\n vec4 linkIndexData = texture2D(linkIndexTexture, texCoord);\n \n // Extract the link index (stored in the red channel)\n float linkIndex = linkIndexData.r;\n \n // Check if there's a valid link at this position (alpha > 0)\n if (linkIndexData.a > 0.0 && linkIndex >= 0.0) {\n // Output the link index\n gl_FragColor = vec4(linkIndex, 0.0, 0.0, 1.0);\n } else {\n // No link at this position, output -1 to indicate no hover\n gl_FragColor = vec4(-1.0, 0.0, 0.0, 0.0);\n }\n} ","attribute vec2 position;\n\nvarying vec2 vTexCoord;\n\nvoid main() {\n vTexCoord = position * 0.5 + 0.5;\n gl_Position = vec4(position, 0.0, 1.0);\n} ","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function ticks(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n let r0 = Math.round(start / step), r1 = Math.round(stop / step);\n if (r0 * step < start) ++r0;\n if (r1 * step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) * step;\n } else {\n step = -step;\n let r0 = Math.round(start * step), r1 = Math.round(stop * step);\n if (r0 / step < start) ++r0;\n if (r1 / step > stop) --r1;\n ticks = new Array(n = r1 - r0 + 1);\n while (++i < n) ticks[i] = (r0 + i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import { scalePow } from 'd3-scale'\nimport { range } from 'd3-array'\n\nexport const getCurveLineGeometry = (segments: number): number[][] => {\n const scale = scalePow()\n .exponent(2)\n .range([0, 1])\n .domain([-1, 1])\n\n const hodographValues = range(0, segments).map(d => -0.5 + d / segments)\n hodographValues.push(0.5)\n const result = new Array(hodographValues.length * 2)\n hodographValues.forEach((d, i) => {\n result[i * 2] = [scale(d * 2), 0.5]\n result[i * 2 + 1] = [scale(d * 2), -0.5]\n })\n return result\n}\n","import regl from 'regl'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport drawLineFrag from '@/graph/modules/Lines/draw-curve-line.frag'\nimport drawLineVert from '@/graph/modules/Lines/draw-curve-line.vert'\nimport hoveredLineIndexFrag from '@/graph/modules/Lines/hovered-line-index.frag'\nimport hoveredLineIndexVert from '@/graph/modules/Lines/hovered-line-index.vert'\nimport { defaultConfigValues } from '@/graph/variables'\nimport { getCurveLineGeometry } from '@/graph/modules/Lines/geometry'\n\nexport class Lines extends CoreModule {\n public linkIndexFbo: regl.Framebuffer2D | undefined\n public hoveredLineIndexFbo: regl.Framebuffer2D | undefined\n private drawCurveCommand: regl.DrawCommand | undefined\n private hoveredLineIndexCommand: regl.DrawCommand | undefined\n private pointsBuffer: regl.Buffer | undefined\n private colorBuffer: regl.Buffer | undefined\n private widthBuffer: regl.Buffer | undefined\n private arrowBuffer: regl.Buffer | undefined\n private curveLineGeometry: number[][] | undefined\n private curveLineBuffer: regl.Buffer | undefined\n private linkIndexBuffer: regl.Buffer | undefined\n private quadBuffer: regl.Buffer | undefined\n\n public initPrograms (): void {\n const { reglInstance, config, store } = this\n\n this.updateLinkIndexFbo()\n\n // Initialize the hovered line index FBO\n if (!this.hoveredLineIndexFbo) {\n this.hoveredLineIndexFbo = reglInstance.framebuffer({\n color: reglInstance.texture({\n width: 1,\n height: 1,\n format: 'rgba',\n type: 'float',\n }),\n depth: false,\n stencil: false,\n })\n }\n\n if (!this.drawCurveCommand) {\n this.drawCurveCommand = reglInstance({\n vert: drawLineVert,\n frag: drawLineFrag,\n\n attributes: {\n position: {\n buffer: () => this.curveLineBuffer,\n divisor: 0,\n },\n pointA: {\n buffer: () => this.pointsBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 0,\n stride: Float32Array.BYTES_PER_ELEMENT * 4,\n },\n pointB: {\n buffer: () => this.pointsBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 2,\n stride: Float32Array.BYTES_PER_ELEMENT * 4,\n },\n color: {\n buffer: () => this.colorBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 0,\n stride: Float32Array.BYTES_PER_ELEMENT * 4,\n },\n width: {\n buffer: () => this.widthBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 0,\n stride: Float32Array.BYTES_PER_ELEMENT * 1,\n },\n arrow: {\n buffer: () => this.arrowBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 0,\n stride: Float32Array.BYTES_PER_ELEMENT * 1,\n },\n linkIndices: {\n buffer: () => this.linkIndexBuffer,\n divisor: 1,\n offset: Float32Array.BYTES_PER_ELEMENT * 0,\n stride: Float32Array.BYTES_PER_ELEMENT * 1,\n },\n },\n uniforms: {\n positionsTexture: () => this.points?.currentPositionFbo,\n pointGreyoutStatus: () => this.points?.greyoutStatusFbo,\n transformationMatrix: () => store.transform,\n pointsTextureSize: () => store.pointsTextureSize,\n widthScale: () => config.linkWidthScale,\n linkArrowsSizeScale: () => config.linkArrowsSizeScale,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n linkVisibilityDistanceRange: () => config.linkVisibilityDistanceRange,\n linkVisibilityMinTransparency: () => config.linkVisibilityMinTransparency,\n linkOpacity: () => config.linkOpacity,\n greyoutOpacity: () => config.linkGreyoutOpacity,\n scaleLinksOnZoom: () => config.scaleLinksOnZoom,\n maxPointSize: () => store.maxPointSize,\n curvedWeight: () => config.curvedLinkWeight,\n curvedLinkControlPointDistance: () => config.curvedLinkControlPointDistance,\n curvedLinkSegments: () => config.curvedLinks ? config.curvedLinkSegments ?? defaultConfigValues.curvedLinkSegments : 1,\n hoveredLinkIndex: () => store.hoveredLinkIndex ?? -1,\n hoveredLinkColor: () => store.hoveredLinkColor,\n hoveredLinkWidthIncrease: () => config.hoveredLinkWidthIncrease,\n renderMode: reglInstance.prop<{ renderMode: number }, 'renderMode'>('renderMode'),\n },\n cull: {\n enable: true,\n face: 'back',\n },\n /**\n * Blending behavior for link index rendering (renderMode: 1.0 - hover detection):\n *\n * When rendering link indices to the framebuffer, we use full opacity (1.0).\n * This means:\n * - The source color completely overwrites the destination\n * - No blending occurs - it's like drawing with a permanent marker\n * - This preserves the exact index values we need for picking/selection\n */\n blend: {\n enable: true,\n func: {\n dstRGB: 'one minus src alpha',\n srcRGB: 'src alpha',\n dstAlpha: 'one minus src alpha',\n srcAlpha: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: {\n enable: false,\n mask: false,\n },\n framebuffer: reglInstance.prop<{ framebuffer: regl.Framebuffer2D }, 'framebuffer'>('framebuffer'),\n count: () => this.curveLineGeometry?.length ?? 0,\n instances: () => this.data.linksNumber ?? 0,\n primitive: 'triangle strip',\n })\n }\n\n if (!this.hoveredLineIndexCommand) {\n this.hoveredLineIndexCommand = reglInstance({\n vert: hoveredLineIndexVert,\n frag: hoveredLineIndexFrag,\n attributes: {\n position: {\n buffer: () => this.quadBuffer,\n },\n },\n uniforms: {\n linkIndexTexture: () => this.linkIndexFbo,\n mousePosition: () => store.screenMousePosition,\n screenSize: () => store.screenSize,\n },\n framebuffer: this.hoveredLineIndexFbo,\n count: 4,\n primitive: 'triangle strip',\n })\n }\n\n // Initialize quad buffer for full-screen rendering\n if (!this.quadBuffer) {\n this.quadBuffer = reglInstance.buffer([-1, -1, 1, -1, -1, 1, 1, 1])\n }\n }\n\n public draw (): void {\n if (!this.pointsBuffer) return\n if (!this.colorBuffer) this.updateColor()\n if (!this.widthBuffer) this.updateWidth()\n if (!this.arrowBuffer) this.updateArrow()\n if (!this.curveLineGeometry) this.updateCurveLineGeometry()\n\n // Render normal links (renderMode: 0.0 = normal rendering)\n this.drawCurveCommand?.({ framebuffer: null, renderMode: 0.0 })\n }\n\n public updateLinkIndexFbo (): void {\n const { reglInstance, store } = this\n\n // Only create and update the link index FBO if link hovering is enabled\n if (!this.store.isLinkHoveringEnabled) return\n\n if (!this.linkIndexFbo) this.linkIndexFbo = reglInstance.framebuffer()\n this.linkIndexFbo({\n color: reglInstance.texture({\n width: store.screenSize[0],\n height: store.screenSize[1],\n format: 'rgba',\n type: 'float',\n }),\n depth: false,\n stencil: false,\n })\n }\n\n public updatePointsBuffer (): void {\n const { reglInstance, data, store } = this\n if (data.linksNumber === undefined || data.links === undefined) return\n const instancePoints = new Float32Array(data.linksNumber * 4)\n for (let i = 0; i < data.linksNumber; i++) {\n const fromIndex = data.links[i * 2] as number\n const toIndex = data.links[i * 2 + 1] as number\n const fromX = fromIndex % store.pointsTextureSize\n const fromY = Math.floor(fromIndex / store.pointsTextureSize)\n const toX = toIndex % store.pointsTextureSize\n const toY = Math.floor(toIndex / store.pointsTextureSize)\n const offset = i * 4\n instancePoints[offset] = fromX\n instancePoints[offset + 1] = fromY\n instancePoints[offset + 2] = toX\n instancePoints[offset + 3] = toY\n }\n\n if (!this.pointsBuffer) this.pointsBuffer = reglInstance.buffer(0)\n this.pointsBuffer(instancePoints)\n\n const linkIndices = new Float32Array(data.linksNumber)\n for (let i = 0; i < data.linksNumber; i++) {\n linkIndices[i] = i\n }\n if (!this.linkIndexBuffer) this.linkIndexBuffer = reglInstance.buffer(0)\n this.linkIndexBuffer(linkIndices)\n }\n\n public updateColor (): void {\n const { reglInstance, data } = this\n if (!this.colorBuffer) this.colorBuffer = reglInstance.buffer(0)\n this.colorBuffer(data.linkColors ?? new Float32Array())\n }\n\n public updateWidth (): void {\n const { reglInstance, data } = this\n if (!this.widthBuffer) this.widthBuffer = reglInstance.buffer(0)\n this.widthBuffer(data.linkWidths ?? new Float32Array())\n }\n\n public updateArrow (): void {\n const { reglInstance, data } = this\n if (!this.arrowBuffer) this.arrowBuffer = reglInstance.buffer(0)\n this.arrowBuffer(data.linkArrows ?? new Float32Array())\n }\n\n public updateCurveLineGeometry (): void {\n const { reglInstance, config: { curvedLinks, curvedLinkSegments } } = this\n this.curveLineGeometry = getCurveLineGeometry(curvedLinks ? curvedLinkSegments ?? defaultConfigValues.curvedLinkSegments : 1)\n if (!this.curveLineBuffer) this.curveLineBuffer = reglInstance.buffer(0)\n this.curveLineBuffer(this.curveLineGeometry)\n }\n\n public findHoveredLine (): void {\n if (!this.data.linksNumber || !this.store.isLinkHoveringEnabled) return\n if (!this.linkIndexFbo) this.updateLinkIndexFbo()\n this.reglInstance.clear({\n framebuffer: this.linkIndexFbo as regl.Framebuffer2D,\n color: [0, 0, 0, 0],\n })\n // Render to index buffer for picking/hover detection (renderMode: 1.0 = index rendering)\n this.drawCurveCommand?.({ framebuffer: this.linkIndexFbo, renderMode: 1.0 })\n\n // Execute the command to read the link index at mouse position\n this.hoveredLineIndexCommand?.()\n }\n}\n","// Fragment shader for rendering points with various shapes and smooth edges\n\n#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform float greyoutOpacity;\nuniform float pointOpacity;\nuniform sampler2D imageAtlasTexture;\nuniform bool isDarkenGreyout;\nuniform vec4 backgroundColor;\n\n\nvarying float pointShape;\nvarying float isGreyedOut;\nvarying vec4 shapeColor;\nvarying vec4 imageAtlasUV;\nvarying float shapeSize;\nvarying float imageSizeVarying;\nvarying float overallSize;\n\n// Smoothing controls the smoothness of the point's edge\nconst float smoothing = 0.9;\n\n// Shape constants\nconst float CIRCLE = 0.0;\nconst float SQUARE = 1.0;\nconst float TRIANGLE = 2.0;\nconst float DIAMOND = 3.0;\nconst float PENTAGON = 4.0;\nconst float HEXAGON = 5.0;\nconst float STAR = 6.0;\nconst float CROSS = 7.0;\nconst float NONE = 8.0;\n\n// Distance functions for different shapes\nfloat circleDistance(vec2 p) {\n return dot(p, p);\n}\n\n// Function to apply greyout logic to image colors\nvec4 applyGreyoutToImage(vec4 imageColor) {\n vec3 finalColor = imageColor.rgb;\n float finalAlpha = imageColor.a;\n \n if (isGreyedOut > 0.0) {\n float blendFactor = 0.65; // Controls how much to modify (0.0 = original, 1.0 = target color)\n \n if (isDarkenGreyout) {\n finalColor = mix(finalColor, vec3(0.2), blendFactor);\n } else {\n finalColor = mix(finalColor, max(backgroundColor.rgb, vec3(0.8)), blendFactor);\n }\n }\n \n return vec4(finalColor, finalAlpha);\n}\n\nfloat squareDistance(vec2 p) {\n vec2 d = abs(p) - vec2(0.8);\n return length(max(d, 0.0)) + min(max(d.x, d.y), 0.0);\n}\n\nfloat triangleDistance(vec2 p) {\n const float k = sqrt(3.0); // ≈1.732; slope of 60° lines for an equilateral triangle\n p.x = abs(p.x) - 0.9; // fold the X axis and shift: brings left and right halves together\n p.y = p.y + 0.55; // move the whole shape up slightly so it is centred vertically\n\n // reflect points that fall outside the main triangle back inside, to reuse the same maths\n if (p.x + k * p.y > 0.0)\n p = vec2(p.x - k * p.y, -k * p.x - p.y) / 2.0;\n\n p.x -= clamp(p.x, -1.0, 0.0); // clip any remainder on the left side\n\n // Return signed distance: negative = inside; positive = outside\n return -length(p) * sign(p.y);\n}\n\nfloat diamondDistance(vec2 p) {\n // aspect > 1 → taller diamond\n const float aspect = 1.2;\n return abs(p.x) + abs(p.y) / aspect - 0.8;\n}\n\nfloat pentagonDistance(vec2 p) {\n // Regular pentagon signed-distance (Inigo Quilez)\n const vec3 k = vec3(0.809016994, 0.587785252, 0.726542528);\n p.x = abs(p.x);\n\n // Reflect across the two tilted edges ─ only if point is outside\n p -= 2.0 * min(dot(vec2(-k.x, k.y), p), 0.0) * vec2(-k.x, k.y);\n p -= 2.0 * min(dot(vec2( k.x, k.y), p), 0.0) * vec2( k.x, k.y);\n\n // Clip against the top horizontal edge (keeps top point sharp)\n p -= vec2(clamp(p.x, -k.z * k.x, k.z * k.x), k.z);\n\n // Return signed distance (negative → inside, positive → outside)\n return length(p) * sign(p.y);\n}\n\nfloat hexagonDistance(vec2 p) {\n const vec3 k = vec3(-0.866025404, 0.5, 0.577350269);\n p = abs(p);\n p -= 2.0 * min(dot(k.xy, p), 0.0) * k.xy;\n p -= vec2(clamp(p.x, -k.z * 0.8, k.z * 0.8), 0.8);\n return length(p) * sign(p.y);\n}\n\nfloat starDistance(vec2 p) {\n // 5-point star signed-distance function (adapted from Inigo Quilez)\n // r – outer radius, rf – inner/outer radius ratio\n const float r = 0.9;\n const float rf = 0.45;\n\n // Pre-computed rotation vectors for the star arms (36° increments)\n const vec2 k1 = vec2(0.809016994, -0.587785252);\n const vec2 k2 = vec2(-k1.x, k1.y);\n\n // Fold the plane into a single arm sector\n p.x = abs(p.x);\n p -= 2.0 * max(dot(k1, p), 0.0) * k1;\n p -= 2.0 * max(dot(k2, p), 0.0) * k2;\n p.x = abs(p.x);\n\n // Translate so the top tip of the star lies on the X-axis\n p.y -= r;\n\n // Vector describing the edge between an outer tip and its adjacent inner point\n vec2 ba = rf * vec2(-k1.y, k1.x) - vec2(0.0, 1.0);\n // Project the point onto that edge and clamp the projection to the segment\n float h = clamp(dot(p, ba) / dot(ba, ba), 0.0, r);\n\n // Return signed distance (negative => inside, positive => outside)\n return length(p - ba * h) * sign(p.y * ba.x - p.x * ba.y);\n}\n\nfloat crossDistance(vec2 p) {\n // Signed distance function for a cross (union of two rectangles)\n // Adapted from Inigo Quilez (https://iquilezles.org/)\n // Each arm has half-sizes 0.3 (thickness) and 0.8 (length)\n p = abs(p);\n if (p.y > p.x) p = p.yx; // exploit symmetry\n\n vec2 q = p - vec2(0.8, 0.3); // subtract half-sizes (length, thickness)\n\n // Standard rectangle SDF, then take union of the two arms\n return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0);\n}\n\nfloat getShapeDistance(vec2 p, float shape) {\n if (shape == SQUARE) return squareDistance(p);\n else if (shape == TRIANGLE) return triangleDistance(p);\n else if (shape == DIAMOND) return diamondDistance(p);\n else if (shape == PENTAGON) return pentagonDistance(p);\n else if (shape == HEXAGON) return hexagonDistance(p);\n else if (shape == STAR) return starDistance(p);\n else if (shape == CROSS) return crossDistance(p);\n else return circleDistance(p); // Default to circle\n}\n\nvoid main() {\n // Discard the fragment if the point is fully transparent and has no image\n if (shapeColor.a == 0.0 && imageAtlasUV.x == -1.0) {\n discard;\n }\n\n // Discard the fragment if the point has no shape and no image\n if (pointShape == NONE && imageAtlasUV.x == -1.0) {\n discard;\n }\n\n // Calculate coordinates within the point\n vec2 pointCoord = 2.0 * gl_PointCoord - 1.0;\n\n vec4 finalShapeColor = vec4(0.0);\n vec4 finalImageColor = vec4(0.0);\n \n // Handle shape rendering with centering logic\n if (pointShape != NONE) {\n // Calculate shape coordinates with centering\n vec2 shapeCoord = pointCoord;\n if (overallSize > shapeSize && shapeSize > 0.0) {\n // Shape is smaller than overall size, center it\n float scale = shapeSize / overallSize;\n shapeCoord = pointCoord / scale;\n }\n \n float opacity;\n if (pointShape == CIRCLE) {\n // For circles, use the original distance calculation\n float pointCenterDistance = dot(shapeCoord, shapeCoord);\n opacity = 1.0 - smoothstep(smoothing, 1.0, pointCenterDistance);\n } else {\n // For other shapes, use the shape distance function\n float shapeDistance = getShapeDistance(shapeCoord, pointShape);\n opacity = 1.0 - smoothstep(-0.01, 0.01, shapeDistance);\n }\n opacity *= shapeColor.a;\n\n finalShapeColor = vec4(shapeColor.rgb, opacity);\n }\n\n // Handle image rendering with centering logic\n if (imageAtlasUV.x != -1.0) {\n // Calculate image coordinates with centering\n vec2 imageCoord = pointCoord;\n if (overallSize > imageSizeVarying && imageSizeVarying > 0.0) {\n // Image is smaller than overall size, center it\n float scale = imageSizeVarying / overallSize;\n imageCoord = pointCoord / scale;\n \n // Check if we're outside the valid image area\n if (abs(imageCoord.x) > 1.0 || abs(imageCoord.y) > 1.0) {\n // We're outside the image bounds, don't render the image\n finalImageColor = vec4(0.0);\n } else {\n // Sample from texture atlas\n vec2 atlasUV = mix(imageAtlasUV.xy, imageAtlasUV.zw, (imageCoord + 1.0) * 0.5);\n vec4 imageColor = texture2D(imageAtlasTexture, atlasUV);\n finalImageColor = applyGreyoutToImage(imageColor);\n }\n } else {\n // Image is same size or larger than overall size, no scaling needed\n // Sample from texture atlas\n vec2 atlasUV = mix(imageAtlasUV.xy, imageAtlasUV.zw, (imageCoord + 1.0) * 0.5);\n vec4 imageColor = texture2D(imageAtlasTexture, atlasUV);\n finalImageColor = applyGreyoutToImage(imageColor);\n }\n }\n\n float finalPointAlpha = max(finalShapeColor.a, finalImageColor.a);\n if (isGreyedOut > 0.0 && greyoutOpacity != -1.0) {\n finalPointAlpha *= greyoutOpacity;\n } else {\n finalPointAlpha *= pointOpacity;\n }\n\n // Blend image color above point color\n gl_FragColor = vec4(\n mix(finalShapeColor.rgb, finalImageColor.rgb, finalImageColor.a),\n finalPointAlpha\n );\n}\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nattribute vec2 pointIndices;\nattribute float size;\nattribute vec4 color;\nattribute float shape;\nattribute float imageIndex;\nattribute float imageSize;\n\nuniform sampler2D positionsTexture;\nuniform sampler2D pointGreyoutStatus;\nuniform sampler2D imageAtlasCoords;\nuniform float ratio;\nuniform mat3 transformationMatrix;\nuniform float pointsTextureSize;\nuniform float sizeScale;\nuniform float spaceSize;\nuniform vec2 screenSize;\n\nuniform vec4 greyoutColor;\nuniform vec4 backgroundColor;\nuniform bool scalePointsOnZoom;\nuniform float maxPointSize;\nuniform bool isDarkenGreyout;\nuniform bool skipSelected;\nuniform bool skipUnselected;\nuniform bool hasImages;\nuniform float imageCount;\nuniform float imageAtlasCoordsTextureSize;\n\nvarying float pointShape;\nvarying float isGreyedOut;\nvarying vec4 shapeColor;\nvarying vec4 imageAtlasUV;\nvarying float shapeSize;\nvarying float imageSizeVarying;\nvarying float overallSize;\n\nfloat calculatePointSize(float size) {\n float pSize;\n if (scalePointsOnZoom) { \n pSize = size * ratio * transformationMatrix[0][0];\n } else {\n pSize = size * ratio * min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n }\n\n return min(pSize, maxPointSize * ratio);\n}\n\nvoid main() { \n // Check greyout status for selective rendering\n vec4 greyoutStatus = texture2D(pointGreyoutStatus, (pointIndices + 0.5) / pointsTextureSize);\n isGreyedOut = greyoutStatus.r;\n bool isSelected = greyoutStatus.r == 0.0;\n \n // Discard point based on rendering mode\n if (skipSelected && isSelected) {\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0); // Move off-screen\n gl_PointSize = 0.0;\n return;\n }\n if (skipUnselected && !isSelected) {\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0); // Move off-screen\n gl_PointSize = 0.0;\n return;\n }\n \n // Position\n vec4 pointPosition = texture2D(positionsTexture, (pointIndices + 0.5) / pointsTextureSize);\n vec2 point = pointPosition.rg;\n\n // Transform point position to normalized device coordinates\n vec2 normalizedPosition = 2.0 * point / spaceSize - 1.0;\n normalizedPosition *= spaceSize / screenSize;\n vec3 finalPosition = transformationMatrix * vec3(normalizedPosition, 1);\n gl_Position = vec4(finalPosition.rg, 0, 1);\n\n // Calculate sizes for shape and image\n float shapeSizeValue = calculatePointSize(size * sizeScale);\n float imageSizeValue = calculatePointSize(imageSize * sizeScale);\n \n // Use the larger of the two sizes for the overall point size\n float overallSizeValue = max(shapeSizeValue, imageSizeValue);\n gl_PointSize = overallSizeValue;\n\n // Pass size information to fragment shader\n shapeSize = shapeSizeValue;\n imageSizeVarying = imageSizeValue;\n overallSize = overallSizeValue;\n\n shapeColor = color;\n pointShape = shape;\n\n // Adjust alpha of selected points\n if (isGreyedOut > 0.0) {\n if (greyoutColor[0] != -1.0) {\n shapeColor = greyoutColor;\n } else {\n // If greyoutColor is not set, make color lighter or darker based on isDarkenGreyout\n float blendFactor = 0.65; // Controls how much to modify (0.0 = original, 1.0 = target color)\n \n if (isDarkenGreyout) {\n // Darken the color\n shapeColor.rgb = mix(shapeColor.rgb, vec3(0.2), blendFactor);\n } else {\n // Lighten the color\n shapeColor.rgb = mix(shapeColor.rgb, max(backgroundColor.rgb, vec3(0.8)), blendFactor);\n }\n }\n }\n\n if (!hasImages || imageIndex < 0.0 || imageIndex >= imageCount) {\n imageAtlasUV = vec4(-1.0);\n return;\n }\n // Calculate image atlas UV coordinates based on imageIndex\n float atlasCoordIndex = imageIndex;\n // Calculate the position in the texture grid\n float texX = mod(atlasCoordIndex, imageAtlasCoordsTextureSize);\n float texY = floor(atlasCoordIndex / imageAtlasCoordsTextureSize);\n // Convert to texture coordinates (0.0 to 1.0)\n vec2 atlasCoordTexCoord = (vec2(texX, texY) + 0.5) / imageAtlasCoordsTextureSize;\n vec4 atlasCoords = texture2D(imageAtlasCoords, atlasCoordTexCoord);\n imageAtlasUV = atlasCoords;\n} ","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D pointSize;\nuniform float sizeScale;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform float ratio;\nuniform mat3 transformationMatrix;\nuniform vec2 selection0;\nuniform vec2 selection1;\nuniform bool scalePointsOnZoom;\nuniform float maxPointSize;\n\nvarying vec2 textureCoords;\n\nfloat pointSizeF(float size) {\n float pSize;\n if (scalePointsOnZoom) { \n pSize = size * ratio * transformationMatrix[0][0];\n } else {\n pSize = size * ratio * min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n }\n return min(pSize, maxPointSize * ratio);\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec2 p = 2.0 * pointPosition.rg / spaceSize - 1.0;\n p *= spaceSize / screenSize;\n vec3 final = transformationMatrix * vec3(p, 1);\n\n vec4 pSize = texture2D(pointSize, textureCoords);\n float size = pSize.r * sizeScale;\n\n float left = 2.0 * (selection0.x - 0.5 * pointSizeF(size)) / screenSize.x - 1.0;\n float right = 2.0 * (selection1.x + 0.5 * pointSizeF(size)) / screenSize.x - 1.0;\n float top = 2.0 * (selection0.y - 0.5 * pointSizeF(size)) / screenSize.y - 1.0;\n float bottom = 2.0 * (selection1.y + 0.5 * pointSizeF(size)) / screenSize.y - 1.0;\n\n gl_FragColor = vec4(0.0, 0.0, pointPosition.rg);\n if (final.x >= left && final.x <= right && final.y >= top && final.y <= bottom) {\n gl_FragColor.r = 1.0;\n }\n}\n\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D polygonPathTexture; // Texture containing polygon path points\nuniform int polygonPathLength;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform mat3 transformationMatrix;\n\nvarying vec2 textureCoords;\n\n// Get a point from the polygon path texture at a specific index\nvec2 getPolygonPoint(sampler2D pathTexture, int index, int pathLength) {\n if (index >= pathLength) return vec2(0.0);\n \n // Calculate texture coordinates for the index\n int textureSize = int(ceil(sqrt(float(pathLength))));\n int x = index - (index / textureSize) * textureSize;\n int y = index / textureSize;\n \n vec2 texCoord = (vec2(float(x), float(y)) + 0.5) / float(textureSize);\n vec4 pathData = texture2D(pathTexture, texCoord);\n \n return pathData.xy;\n}\n\n// Point-in-polygon algorithm using ray casting\nbool pointInPolygon(vec2 point, sampler2D pathTexture, int pathLength) {\n bool inside = false;\n \n for (int i = 0; i < 2048; i++) {\n if (i >= pathLength) break;\n \n int j = int(mod(float(i + 1), float(pathLength)));\n \n vec2 pi = getPolygonPoint(pathTexture, i, pathLength);\n vec2 pj = getPolygonPoint(pathTexture, j, pathLength);\n \n if (((pi.y > point.y) != (pj.y > point.y)) &&\n (point.x < (pj.x - pi.x) * (point.y - pi.y) / (pj.y - pi.y) + pi.x)) {\n inside = !inside;\n }\n }\n \n return inside;\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec2 p = 2.0 * pointPosition.rg / spaceSize - 1.0;\n p *= spaceSize / screenSize;\n vec3 final = transformationMatrix * vec3(p, 1);\n\n // Convert to screen coordinates for polygon check\n vec2 screenPos = (final.xy + 1.0) * screenSize / 2.0;\n \n gl_FragColor = vec4(0.0, 0.0, pointPosition.rg);\n \n // Check if point center is inside the polygon\n if (pointInPolygon(screenPos, polygonPathTexture, polygonPathLength)) {\n gl_FragColor.r = 1.0;\n }\n} ","precision mediump float;\n\nuniform float width;\n\nvarying vec2 vertexPosition;\nvarying float pointOpacity;\nvarying vec3 rgbColor;\n\nconst float smoothing = 1.05;\n\nvoid main () {\n float r = dot(vertexPosition, vertexPosition);\n float opacity = smoothstep(r, r * smoothing, 1.0);\n float stroke = smoothstep(width, width * smoothing, r);\n gl_FragColor = vec4(rgbColor, opacity * stroke * pointOpacity);\n}","precision mediump float;\n\nattribute vec2 vertexCoord;\n\nuniform sampler2D positionsTexture;\nuniform sampler2D pointGreyoutStatusTexture;\nuniform float size;\nuniform mat3 transformationMatrix;\nuniform float pointsTextureSize;\nuniform float sizeScale;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform bool scalePointsOnZoom;\nuniform float pointIndex;\nuniform float maxPointSize;\nuniform vec4 color;\nuniform float universalPointOpacity;\nuniform float greyoutOpacity;\nuniform bool isDarkenGreyout;\nuniform vec4 backgroundColor;\nuniform vec4 greyoutColor;\nvarying vec2 vertexPosition;\nvarying float pointOpacity;\nvarying vec3 rgbColor;\n\nfloat calculatePointSize(float size) {\n float pSize;\n if (scalePointsOnZoom) { \n pSize = size * transformationMatrix[0][0];\n } else {\n pSize = size * min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n }\n return min(pSize, maxPointSize);\n}\n\nconst float relativeRingRadius = 1.3;\n\nvoid main () {\n vertexPosition = vertexCoord;\n\n vec2 textureCoordinates = vec2(mod(pointIndex, pointsTextureSize), floor(pointIndex / pointsTextureSize)) + 0.5;\n vec4 pointPosition = texture2D(positionsTexture, textureCoordinates / pointsTextureSize);\n\n rgbColor = color.rgb;\n pointOpacity = color.a * universalPointOpacity;\n vec4 greyoutStatus = texture2D(pointGreyoutStatusTexture, textureCoordinates / pointsTextureSize);\n if (greyoutStatus.r > 0.0) {\n if (greyoutColor[0] != -1.0) {\n rgbColor = greyoutColor.rgb;\n pointOpacity = greyoutColor.a;\n } else {\n // If greyoutColor is not set, make color lighter or darker based on isDarkenGreyout\n float blendFactor = 0.65; // Controls how much to modify (0.0 = original, 1.0 = target color)\n \n if (isDarkenGreyout) {\n // Darken the color\n rgbColor = mix(rgbColor, vec3(0.2), blendFactor);\n } else {\n // Lighten the color\n rgbColor = mix(rgbColor, max(backgroundColor.rgb, vec3(0.8)), blendFactor);\n }\n }\n\n if (greyoutOpacity != -1.0) {\n pointOpacity *= greyoutOpacity;\n }\n }\n\n // Calculate point radius\n float pointSize = (calculatePointSize(size * sizeScale) * relativeRingRadius) / transformationMatrix[0][0];\n float radius = pointSize * 0.5;\n\n // Calculate point position in screen space\n vec2 a = pointPosition.xy;\n vec2 b = pointPosition.xy + vec2(0.0, radius);\n vec2 xBasis = b - a;\n vec2 yBasis = normalize(vec2(-xBasis.y, xBasis.x));\n vec2 pointPositionInScreenSpace = a + xBasis * vertexCoord.x + yBasis * radius * vertexCoord.y;\n\n // Transform point position to normalized device coordinates\n vec2 p = 2.0 * pointPositionInScreenSpace / spaceSize - 1.0;\n p *= spaceSize / screenSize;\n vec3 final = transformationMatrix * vec3(p, 1);\n \n gl_Position = vec4(final.rg, 0, 1);\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 rgba;\n\nvoid main() {\n gl_FragColor = rgba;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nattribute float size;\n\nuniform sampler2D positionsTexture;\nuniform float pointsTextureSize;\nuniform float sizeScale;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform float ratio;\nuniform mat3 transformationMatrix;\nuniform vec2 mousePosition;\nuniform bool scalePointsOnZoom;\nuniform float maxPointSize;\n\nattribute vec2 pointIndices;\n\nvarying vec4 rgba;\n\nfloat calculatePointSize(float size) {\n float pSize;\n if (scalePointsOnZoom) { \n pSize = size * ratio * transformationMatrix[0][0];\n } else {\n pSize = size * ratio * min(5.0, max(1.0, transformationMatrix[0][0] * 0.01));\n }\n return min(pSize, maxPointSize * ratio);\n}\n\nfloat euclideanDistance (float x1, float x2, float y1, float y2) {\n return sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n}\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, (pointIndices + 0.5) / pointsTextureSize);\n\n // Transform point position to normalized device coordinates\n vec2 normalizedPoint = 2.0 * pointPosition.rg / spaceSize - 1.0;\n normalizedPoint *= spaceSize / screenSize;\n vec3 finalPosition = transformationMatrix * vec3(normalizedPoint, 1);\n\n float pointRadius = 0.5 * calculatePointSize(size * sizeScale);\n\n vec2 pointScreenPosition = (finalPosition.xy + 1.0) * screenSize / 2.0;\n rgba = vec4(0.0);\n gl_Position = vec4(0.5, 0.5, 0.0, 1.0);\n // Check if the mouse is within the point radius\n if (euclideanDistance(pointScreenPosition.x, mousePosition.x, pointScreenPosition.y, mousePosition.y) < pointRadius / ratio) {\n float index = pointIndices.g * pointsTextureSize + pointIndices.r;\n rgba = vec4(index, size, pointPosition.xy);\n gl_Position = vec4(-0.5, -0.5, 0.0, 1.0);\n }\n\n gl_PointSize = 1.0;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nvarying vec4 rgba;\n\nvoid main() {\n gl_FragColor = rgba;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform float pointsTextureSize;\nuniform float spaceSize;\nuniform vec2 screenSize;\nuniform mat3 transformationMatrix;\n\nattribute vec2 pointIndices;\n\nvarying vec4 rgba;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, (pointIndices + 0.5) / pointsTextureSize);\n vec2 p = 2.0 * pointPosition.rg / spaceSize - 1.0;\n p *= spaceSize / screenSize;\n vec3 final = transformationMatrix * vec3(p, 1);\n\n vec2 pointScreenPosition = (final.xy + 1.0) * screenSize / 2.0;\n float index = pointIndices.g * pointsTextureSize + pointIndices.r;\n rgba = vec4(index, 1.0, pointPosition.xy);\n float i = (pointScreenPosition.x + 0.5) / screenSize.x;\n float j = (pointScreenPosition.y + 0.5) / screenSize.y;\n gl_Position = vec4(2.0 * vec2(i, j) - 1.0, 0.0, 1.0);\n\n gl_PointSize = 1.0;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D velocity;\nuniform sampler2D pinnedStatusTexture;\nuniform float friction;\nuniform float spaceSize;\n\nvarying vec2 textureCoords;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n vec4 pointVelocity = texture2D(velocity, textureCoords);\n\n // Check if point is pinned\n // pinnedStatusTexture has the same size and layout as positionsTexture\n // Each pixel corresponds to a point: red channel > 0.5 means the point is pinned\n vec4 pinnedStatus = texture2D(pinnedStatusTexture, textureCoords);\n \n // If pinned, don't update position\n if (pinnedStatus.r > 0.5) {\n gl_FragColor = pointPosition;\n return;\n }\n\n // Friction\n pointVelocity.rg *= friction;\n\n pointPosition.rg += pointVelocity.rg;\n\n pointPosition.r = clamp(pointPosition.r, 0.0, spaceSize);\n pointPosition.g = clamp(pointPosition.g, 0.0, spaceSize);\n \n gl_FragColor = pointPosition;\n}","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform sampler2D trackedIndices;\nuniform float pointsTextureSize;\n\nvarying vec2 textureCoords;\n\nvoid main() {\n vec4 trackedPointIndices = texture2D(trackedIndices, textureCoords);\n if (trackedPointIndices.r < 0.0) discard;\n vec4 pointPosition = texture2D(positionsTexture, (trackedPointIndices.rg + 0.5) / pointsTextureSize);\n\n gl_FragColor = vec4(pointPosition.rg, 1.0, 1.0);\n}\n\n","#ifdef GL_ES\nprecision highp float;\n#endif\n\nuniform sampler2D positionsTexture;\nuniform vec2 mousePos;\nuniform float index;\n\nvarying vec2 textureCoords;\n\nvoid main() {\n vec4 pointPosition = texture2D(positionsTexture, textureCoords);\n\n // Check if a point is being dragged\n if (index >= 0.0 && index == pointPosition.b) {\n pointPosition.rg = mousePos.rg;\n }\n\n gl_FragColor = pointPosition;\n}","/**\n * Creates a texture atlas from an array of ImageData objects.\n *\n * A texture atlas is a single large texture that contains multiple smaller images.\n * This allows efficient rendering by reducing the number of texture bindings needed.\n *\n * The atlas uses a grid layout where each image gets a square region sized to\n * accommodate the largest image dimension. Images are placed left-to-right, top-to-bottom.\n *\n * @param imageDataArray - Array of ImageData objects to pack into the atlas\n * @param webglMaxTextureSize - WebGL maximum texture size limit (default: 16384)\n * @returns Atlas data object containing:\n * - atlasData: RGBA pixel data as Uint8Array\n * - atlasSize: Total atlas texture size in pixels\n * - atlasCoords: UV coordinates for each image as Float32Array\n * - atlasCoordsSize: Grid size (number of rows/columns)\n * Returns null if creation fails or no valid images provided\n */\nexport function createAtlasDataFromImageData (\n imageDataArray: ImageData[],\n webglMaxTextureSize = 16384\n): {\n atlasData: Uint8Array;\n atlasSize: number;\n atlasCoords: Float32Array;\n atlasCoordsSize: number;\n} | null {\n // Step 1: Validate input - ensure we have images to process\n if (!imageDataArray?.length) {\n return null\n }\n\n // Step 2: Find the maximum dimension across all images\n // The max dimension determines the size of each grid cell in the atlas\n let maxDimension = 0\n for (const imageData of imageDataArray) {\n const dimension = Math.max(imageData.width, imageData.height)\n if (dimension > maxDimension) {\n maxDimension = dimension\n }\n }\n\n // Step 3: Validate that we found valid image dimensions\n if (maxDimension === 0) {\n console.warn('Invalid image dimensions: all images have zero width or height')\n return null\n }\n\n const originalMaxDimension = maxDimension\n\n // Step 4: Calculate optimal atlas grid size\n const atlasCoordsSize = Math.ceil(Math.sqrt(imageDataArray.length))\n let atlasSize = atlasCoordsSize * maxDimension\n\n // Step 5: Apply WebGL size limit scaling if necessary\n let scalingFactor = 1.0\n\n if (atlasSize > webglMaxTextureSize) {\n // Calculate required scale to fit within WebGL limits\n scalingFactor = webglMaxTextureSize / atlasSize\n\n // Apply scaling to both the individual image dimensions and atlas size\n maxDimension = Math.max(1, Math.floor(maxDimension * scalingFactor))\n atlasSize = Math.max(1, Math.floor(atlasSize * scalingFactor))\n\n console.warn(\n '🖼️ Atlas scaling required: Original size ' +\n `${(originalMaxDimension * atlasCoordsSize).toLocaleString()}px exceeds WebGL limit ` +\n `${webglMaxTextureSize.toLocaleString()}px. Scaling down to ${atlasSize.toLocaleString()}px ` +\n `(${Math.round(scalingFactor * 100)}% of original quality)`\n )\n }\n\n // Step 6: Create buffers for atlas data\n const atlasData = new Uint8Array(atlasSize * atlasSize * 4).fill(0)\n const atlasCoords = new Float32Array(atlasCoordsSize * atlasCoordsSize * 4).fill(-1)\n\n // Step 7: Pack each image into the atlas grid\n for (const [index, imageData] of imageDataArray.entries()) {\n const originalWidth = imageData.width\n const originalHeight = imageData.height\n if (originalWidth === 0 || originalHeight === 0) {\n // leave coords at -1 for this index and continue\n continue\n }\n\n // Calculate individual scale for this image based on maxDimension\n // This ensures each image fits optimally within its grid cell\n const individualScale = Math.min(1.0, maxDimension / Math.max(originalWidth, originalHeight))\n\n const scaledWidth = Math.floor(originalWidth * individualScale)\n const scaledHeight = Math.floor(originalHeight * individualScale)\n\n // Calculate grid position (row, column) for this image\n const row = Math.floor(index / atlasCoordsSize)\n const col = index % atlasCoordsSize\n\n // Calculate pixel position in the atlas texture\n const atlasX = col * maxDimension\n const atlasY = row * maxDimension\n\n // Calculate and store UV coordinates for this image\n atlasCoords[index * 4] = atlasX / atlasSize // minU\n atlasCoords[index * 4 + 1] = atlasY / atlasSize // minV\n atlasCoords[index * 4 + 2] = (atlasX + scaledWidth) / atlasSize // maxU\n atlasCoords[index * 4 + 3] = (atlasY + scaledHeight) / atlasSize // maxV\n\n // Copy image pixel data into the atlas texture\n for (let y = 0; y < scaledHeight; y++) {\n for (let x = 0; x < scaledWidth; x++) {\n // Calculate source pixel coordinates (with scaling)\n const srcX = Math.floor(x * (originalWidth / scaledWidth))\n const srcY = Math.floor(y * (originalHeight / scaledHeight))\n\n // Calculate source pixel index in the original image\n const srcIndex = (srcY * originalWidth + srcX) * 4\n\n // Calculate target pixel index in the atlas texture\n const atlasIndex = ((atlasY + y) * atlasSize + (atlasX + x)) * 4\n\n // Copy RGBA values from source to atlas\n atlasData[atlasIndex] = imageData.data[srcIndex] ?? 0 // Red channel\n atlasData[atlasIndex + 1] = imageData.data[srcIndex + 1] ?? 0 // Green channel\n atlasData[atlasIndex + 2] = imageData.data[srcIndex + 2] ?? 0 // Blue channel\n atlasData[atlasIndex + 3] = imageData.data[srcIndex + 3] ?? 255 // Alpha channel\n }\n }\n }\n\n // Return the complete atlas data\n return {\n atlasData,\n atlasSize,\n atlasCoords,\n atlasCoordsSize,\n }\n}\n","import regl from 'regl'\n// import { scaleLinear } from 'd3-scale'\n// import { extent } from 'd3-array'\nimport { CoreModule } from '@/graph/modules/core-module'\nimport { defaultConfigValues } from '@/graph/variables'\nimport drawPointsFrag from '@/graph/modules/Points/draw-points.frag'\nimport drawPointsVert from '@/graph/modules/Points/draw-points.vert'\nimport findPointsOnAreaSelectionFrag from '@/graph/modules/Points/find-points-on-area-selection.frag'\nimport findPointsOnPolygonSelectionFrag from '@/graph/modules/Points/find-points-on-polygon-selection.frag'\nimport drawHighlightedFrag from '@/graph/modules/Points/draw-highlighted.frag'\nimport drawHighlightedVert from '@/graph/modules/Points/draw-highlighted.vert'\nimport findHoveredPointFrag from '@/graph/modules/Points/find-hovered-point.frag'\nimport findHoveredPointVert from '@/graph/modules/Points/find-hovered-point.vert'\nimport fillGridWithSampledPointsFrag from '@/graph/modules/Points/fill-sampled-points.frag'\nimport fillGridWithSampledPointsVert from '@/graph/modules/Points/fill-sampled-points.vert'\nimport updatePositionFrag from '@/graph/modules/Points/update-position.frag'\nimport { createIndexesForBuffer, createQuadBuffer } from '@/graph/modules/Shared/buffer'\nimport trackPositionsFrag from '@/graph/modules/Points/track-positions.frag'\nimport dragPointFrag from '@/graph/modules/Points/drag-point.frag'\nimport updateVert from '@/graph/modules/Shared/quad.vert'\nimport clearFrag from '@/graph/modules/Shared/clear.frag'\nimport { readPixels } from '@/graph/helper'\nimport { createAtlasDataFromImageData } from '@/graph/modules/Points/atlas-utils'\n\nexport class Points extends CoreModule {\n public currentPositionFbo: regl.Framebuffer2D | undefined\n public previousPositionFbo: regl.Framebuffer2D | undefined\n public velocityFbo: regl.Framebuffer2D | undefined\n public selectedFbo: regl.Framebuffer2D | undefined\n public hoveredFbo: regl.Framebuffer2D | undefined\n public greyoutStatusFbo: regl.Framebuffer2D | undefined\n public scaleX: ((x: number) => number) | undefined\n public scaleY: ((y: number) => number) | undefined\n public shouldSkipRescale: boolean | undefined\n public imageAtlasTexture: regl.Texture2D | undefined\n public imageCount = 0\n private colorBuffer: regl.Buffer | undefined\n private sizeFbo: regl.Framebuffer2D | undefined\n private sizeBuffer: regl.Buffer | undefined\n private shapeBuffer: regl.Buffer | undefined\n private imageIndicesBuffer: regl.Buffer | undefined\n private imageSizesBuffer: regl.Buffer | undefined\n private imageAtlasCoordsTexture: regl.Texture2D | undefined\n private imageAtlasCoordsTextureSize: number | undefined\n private trackedIndicesFbo: regl.Framebuffer2D | undefined\n private trackedPositionsFbo: regl.Framebuffer2D | undefined\n private sampledPointsFbo: regl.Framebuffer2D | undefined\n private trackedPositions: Map<number, [number, number]> | undefined\n private isPositionsUpToDate = false\n private drawCommand: regl.DrawCommand | undefined\n private drawHighlightedCommand: regl.DrawCommand | undefined\n private updatePositionCommand: regl.DrawCommand | undefined\n private dragPointCommand: regl.DrawCommand | undefined\n private findPointsOnAreaSelectionCommand: regl.DrawCommand | undefined\n private findPointsOnPolygonSelectionCommand: regl.DrawCommand | undefined\n private findHoveredPointCommand: regl.DrawCommand | undefined\n private clearHoveredFboCommand: regl.DrawCommand | undefined\n private clearSampledPointsFboCommand: regl.DrawCommand | undefined\n private fillSampledPointsFboCommand: regl.DrawCommand | undefined\n private trackPointsCommand: regl.DrawCommand | undefined\n private trackedIndices: number[] | undefined\n private selectedTexture: regl.Texture2D | undefined\n private greyoutStatusTexture: regl.Texture2D | undefined\n private pinnedStatusTexture: regl.Texture2D | undefined\n private pinnedStatusFbo: regl.Framebuffer2D | undefined\n private sizeTexture: regl.Texture2D | undefined\n private trackedIndicesTexture: regl.Texture2D | undefined\n private polygonPathTexture: regl.Texture2D | undefined\n private polygonPathFbo: regl.Framebuffer2D | undefined\n private polygonPathLength = 0\n private drawPointIndices: regl.Buffer | undefined\n private hoveredPointIndices: regl.Buffer | undefined\n private sampledPointIndices: regl.Buffer | undefined\n\n public updatePositions (): void {\n const { reglInstance, store, data, config: { rescalePositions, enableSimulation } } = this\n\n const { pointsTextureSize } = store\n if (!pointsTextureSize || !data.pointPositions || data.pointsNumber === undefined) return\n\n const initialState = new Float32Array(pointsTextureSize * pointsTextureSize * 4)\n\n let shouldRescale = rescalePositions\n // If rescalePositions isn't specified in config and simulation is disabled, default to true\n if (rescalePositions === undefined && !enableSimulation) shouldRescale = true\n // Skip rescaling if `shouldSkipRescale` flag is set (allowing one-time skip of rescaling)\n // Temporary flag is used to skip rescaling when change point positions or adding new points by function `setPointPositions`\n // This flag overrides any other rescaling settings\n if (this.shouldSkipRescale) shouldRescale = false\n\n if (shouldRescale) {\n this.rescaleInitialNodePositions()\n } else if (!this.shouldSkipRescale) {\n // Only reset scale functions if not temporarily skipping rescale\n this.scaleX = undefined\n this.scaleY = undefined\n }\n\n // Reset temporary flag\n this.shouldSkipRescale = undefined\n\n for (let i = 0; i < data.pointsNumber; ++i) {\n initialState[i * 4 + 0] = data.pointPositions[i * 2 + 0] as number\n initialState[i * 4 + 1] = data.pointPositions[i * 2 + 1] as number\n initialState[i * 4 + 2] = i\n }\n\n // Create position buffer\n if (!this.currentPositionFbo) this.currentPositionFbo = reglInstance.framebuffer()\n this.currentPositionFbo({\n color: reglInstance.texture({\n data: initialState,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n }),\n depth: false,\n stencil: false,\n })\n\n if (!this.previousPositionFbo) this.previousPositionFbo = reglInstance.framebuffer()\n this.previousPositionFbo({\n color: reglInstance.texture({\n data: initialState,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n }),\n depth: false,\n stencil: false,\n })\n\n if (this.config.enableSimulation) {\n // Create velocity buffer\n if (!this.velocityFbo) this.velocityFbo = reglInstance.framebuffer()\n this.velocityFbo({\n color: reglInstance.texture({\n data: new Float32Array(pointsTextureSize * pointsTextureSize * 4).fill(0),\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n }),\n depth: false,\n stencil: false,\n })\n }\n\n // Create selected points buffer\n if (!this.selectedTexture) this.selectedTexture = reglInstance.texture()\n this.selectedTexture({\n data: initialState,\n shape: [pointsTextureSize, pointsTextureSize, 4],\n type: 'float',\n })\n if (!this.selectedFbo) this.selectedFbo = reglInstance.framebuffer()\n this.selectedFbo({\n color: this.selectedTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.hoveredFbo) this.hoveredFbo = reglInstance.framebuffer()\n this.hoveredFbo({\n shape: [2, 2],\n colorType: 'float',\n depth: false,\n stencil: false,\n })\n\n if (!this.drawPointIndices) this.drawPointIndices = reglInstance.buffer(0)\n this.drawPointIndices(createIndexesForBuffer(store.pointsTextureSize))\n\n if (!this.hoveredPointIndices) this.hoveredPointIndices = reglInstance.buffer(0)\n this.hoveredPointIndices(createIndexesForBuffer(store.pointsTextureSize))\n\n if (!this.sampledPointIndices) this.sampledPointIndices = reglInstance.buffer(0)\n this.sampledPointIndices(createIndexesForBuffer(store.pointsTextureSize))\n\n this.updateGreyoutStatus()\n this.updatePinnedStatus()\n this.updateSampledPointsGrid()\n\n this.trackPointsByIndices()\n }\n\n public initPrograms (): void {\n const { reglInstance, config, store, data } = this\n if (config.enableSimulation) {\n if (!this.updatePositionCommand) {\n this.updatePositionCommand = reglInstance({\n frag: updatePositionFrag,\n vert: updateVert,\n framebuffer: () => this.currentPositionFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => this.previousPositionFbo,\n velocity: () => this.velocityFbo,\n friction: () => config.simulationFriction,\n spaceSize: () => store.adjustedSpaceSize,\n pinnedStatusTexture: () => this.pinnedStatusFbo,\n },\n })\n }\n }\n if (!this.dragPointCommand) {\n this.dragPointCommand = reglInstance({\n frag: dragPointFrag,\n vert: updateVert,\n framebuffer: () => this.currentPositionFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => this.previousPositionFbo,\n mousePos: () => store.mousePosition,\n index: () => store.hoveredPoint?.index ?? -1,\n },\n })\n }\n\n if (!this.drawCommand) {\n this.drawCommand = reglInstance({\n frag: drawPointsFrag,\n vert: drawPointsVert,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n attributes: {\n pointIndices: {\n buffer: this.drawPointIndices,\n size: 2,\n },\n size: {\n buffer: () => this.sizeBuffer,\n size: 1,\n },\n color: {\n buffer: () => this.colorBuffer,\n size: 4,\n },\n shape: {\n buffer: () => this.shapeBuffer,\n size: 1,\n },\n imageIndex: {\n buffer: () => this.imageIndicesBuffer,\n size: 1,\n },\n imageSize: {\n buffer: () => this.imageSizesBuffer,\n size: 1,\n },\n },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n pointGreyoutStatus: () => this.greyoutStatusFbo,\n ratio: () => config.pixelRatio,\n sizeScale: () => config.pointSizeScale,\n pointsTextureSize: () => store.pointsTextureSize,\n transformationMatrix: () => store.transform,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n pointOpacity: () => config.pointOpacity,\n greyoutOpacity: () => config.pointGreyoutOpacity ?? -1,\n greyoutColor: () => store.greyoutPointColor,\n backgroundColor: () => store.backgroundColor,\n isDarkenGreyout: () => store.isDarkenGreyout,\n scalePointsOnZoom: () => config.scalePointsOnZoom,\n maxPointSize: () => store.maxPointSize,\n skipSelected: reglInstance.prop<{ skipSelected: boolean }, 'skipSelected'>('skipSelected'),\n skipUnselected: reglInstance.prop<{ skipUnselected: boolean }, 'skipUnselected'>('skipUnselected'),\n imageAtlasTexture: () => this.imageAtlasTexture,\n imageAtlasCoords: () => this.imageAtlasCoordsTexture,\n hasImages: () => this.imageCount > 0,\n imageCount: () => this.imageCount,\n imageAtlasCoordsTextureSize: () => this.imageAtlasCoordsTextureSize,\n },\n blend: {\n enable: true,\n func: {\n dstRGB: 'one minus src alpha',\n srcRGB: 'src alpha',\n dstAlpha: 'one minus src alpha',\n srcAlpha: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: {\n enable: false,\n mask: false,\n },\n })\n }\n\n if (!this.findPointsOnAreaSelectionCommand) {\n this.findPointsOnAreaSelectionCommand = reglInstance({\n frag: findPointsOnAreaSelectionFrag,\n vert: updateVert,\n framebuffer: () => this.selectedFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: {\n vertexCoord: createQuadBuffer(reglInstance),\n },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n pointSize: () => this.sizeFbo,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n sizeScale: () => config.pointSizeScale,\n transformationMatrix: () => store.transform,\n ratio: () => config.pixelRatio,\n selection0: () => store.selectedArea[0],\n selection1: () => store.selectedArea[1],\n scalePointsOnZoom: () => config.scalePointsOnZoom,\n maxPointSize: () => store.maxPointSize,\n },\n })\n }\n\n if (!this.findPointsOnPolygonSelectionCommand) {\n this.findPointsOnPolygonSelectionCommand = reglInstance({\n frag: findPointsOnPolygonSelectionFrag,\n vert: updateVert,\n framebuffer: () => this.selectedFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: {\n vertexCoord: createQuadBuffer(reglInstance),\n },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n transformationMatrix: () => store.transform,\n polygonPathTexture: () => this.polygonPathTexture,\n polygonPathLength: () => this.polygonPathLength,\n },\n })\n }\n\n if (!this.clearHoveredFboCommand) {\n this.clearHoveredFboCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: this.hoveredFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n\n if (!this.findHoveredPointCommand) {\n this.findHoveredPointCommand = reglInstance({\n frag: findHoveredPointFrag,\n vert: findHoveredPointVert,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n framebuffer: () => this.hoveredFbo as regl.Framebuffer2D,\n attributes: {\n pointIndices: {\n buffer: this.hoveredPointIndices,\n size: 2,\n },\n size: {\n buffer: () => this.sizeBuffer,\n size: 1,\n },\n },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n ratio: () => config.pixelRatio,\n sizeScale: () => config.pointSizeScale,\n pointsTextureSize: () => store.pointsTextureSize,\n transformationMatrix: () => store.transform,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n scalePointsOnZoom: () => config.scalePointsOnZoom,\n mousePosition: () => store.screenMousePosition,\n maxPointSize: () => store.maxPointSize,\n },\n depth: {\n enable: false,\n mask: false,\n },\n })\n }\n\n if (!this.clearSampledPointsFboCommand) {\n this.clearSampledPointsFboCommand = reglInstance({\n frag: clearFrag,\n vert: updateVert,\n framebuffer: () => this.sampledPointsFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n })\n }\n\n if (!this.fillSampledPointsFboCommand) {\n this.fillSampledPointsFboCommand = reglInstance({\n frag: fillGridWithSampledPointsFrag,\n vert: fillGridWithSampledPointsVert,\n primitive: 'points',\n count: () => data.pointsNumber ?? 0,\n framebuffer: () => this.sampledPointsFbo as regl.Framebuffer2D,\n attributes: {\n pointIndices: {\n buffer: this.sampledPointIndices,\n size: 2,\n },\n },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n transformationMatrix: () => store.transform,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n },\n depth: {\n enable: false,\n mask: false,\n },\n })\n }\n\n if (!this.drawHighlightedCommand) {\n this.drawHighlightedCommand = reglInstance({\n frag: drawHighlightedFrag,\n vert: drawHighlightedVert,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n primitive: 'triangle strip',\n count: 4,\n uniforms: {\n color: reglInstance.prop<{ color: number[] }, 'color'>('color'),\n width: reglInstance.prop<{ width: number }, 'width'>('width'),\n pointIndex: reglInstance.prop<{ pointIndex: number }, 'pointIndex'>('pointIndex'),\n size: reglInstance.prop<{ size: number }, 'size'>('size'),\n positionsTexture: () => this.currentPositionFbo,\n sizeScale: () => config.pointSizeScale,\n pointsTextureSize: () => store.pointsTextureSize,\n transformationMatrix: () => store.transform,\n spaceSize: () => store.adjustedSpaceSize,\n screenSize: () => store.screenSize,\n scalePointsOnZoom: () => config.scalePointsOnZoom,\n maxPointSize: () => store.maxPointSize,\n pointGreyoutStatusTexture: () => this.greyoutStatusFbo,\n universalPointOpacity: () => config.pointOpacity,\n greyoutOpacity: () => config.pointGreyoutOpacity ?? -1,\n isDarkenGreyout: () => store.isDarkenGreyout,\n backgroundColor: () => store.backgroundColor,\n greyoutColor: () => store.greyoutPointColor,\n },\n blend: {\n enable: true,\n func: {\n dstRGB: 'one minus src alpha',\n srcRGB: 'src alpha',\n dstAlpha: 'one minus src alpha',\n srcAlpha: 'one',\n },\n equation: {\n rgb: 'add',\n alpha: 'add',\n },\n },\n depth: {\n enable: false,\n mask: false,\n },\n })\n }\n\n if (!this.trackPointsCommand) {\n this.trackPointsCommand = reglInstance({\n frag: trackPositionsFrag,\n vert: updateVert,\n framebuffer: () => this.trackedPositionsFbo as regl.Framebuffer2D,\n primitive: 'triangle strip',\n count: 4,\n attributes: { vertexCoord: createQuadBuffer(reglInstance) },\n uniforms: {\n positionsTexture: () => this.currentPositionFbo,\n trackedIndices: () => this.trackedIndicesFbo,\n pointsTextureSize: () => store.pointsTextureSize,\n },\n })\n }\n }\n\n public updateColor (): void {\n const { reglInstance, store: { pointsTextureSize }, data } = this\n if (!pointsTextureSize) return\n if (!this.colorBuffer) this.colorBuffer = reglInstance.buffer(0)\n this.colorBuffer(data.pointColors as Float32Array)\n }\n\n public updateGreyoutStatus (): void {\n const { reglInstance, store: { selectedIndices, pointsTextureSize } } = this\n if (!pointsTextureSize) return\n\n // Greyout status: 0 - false, highlighted or normal point; 1 - true, greyout point\n const initialState = new Float32Array(pointsTextureSize * pointsTextureSize * 4)\n .fill(selectedIndices ? 1 : 0)\n\n if (selectedIndices) {\n for (const selectedIndex of selectedIndices) {\n initialState[selectedIndex * 4] = 0\n }\n }\n if (!this.greyoutStatusTexture) this.greyoutStatusTexture = reglInstance.texture()\n this.greyoutStatusTexture({\n data: initialState,\n width: pointsTextureSize,\n height: pointsTextureSize,\n type: 'float',\n })\n if (!this.greyoutStatusFbo) this.greyoutStatusFbo = reglInstance.framebuffer()\n this.greyoutStatusFbo({\n color: this.greyoutStatusTexture,\n depth: false,\n stencil: false,\n })\n }\n\n public updatePinnedStatus (): void {\n const { reglInstance, store: { pointsTextureSize }, data } = this\n if (!pointsTextureSize) return\n\n // Pinned status: 0 - not pinned, 1 - pinned\n const initialState = new Float32Array(pointsTextureSize * pointsTextureSize * 4).fill(0)\n\n if (data.inputPinnedPoints && data.pointsNumber !== undefined) {\n for (const pinnedIndex of data.inputPinnedPoints) {\n if (pinnedIndex >= 0 && pinnedIndex < data.pointsNumber) {\n initialState[pinnedIndex * 4] = 1\n }\n }\n }\n\n if (!this.pinnedStatusTexture) this.pinnedStatusTexture = reglInstance.texture()\n this.pinnedStatusTexture({\n data: initialState,\n width: pointsTextureSize,\n height: pointsTextureSize,\n type: 'float',\n })\n if (!this.pinnedStatusFbo) this.pinnedStatusFbo = reglInstance.framebuffer()\n this.pinnedStatusFbo({\n color: this.pinnedStatusTexture,\n depth: false,\n stencil: false,\n })\n }\n\n public updateSize (): void {\n const { reglInstance, store: { pointsTextureSize }, data } = this\n if (!pointsTextureSize || data.pointsNumber === undefined || data.pointSizes === undefined) return\n if (!this.sizeBuffer) this.sizeBuffer = reglInstance.buffer(0)\n this.sizeBuffer(data.pointSizes)\n\n const initialState = new Float32Array(pointsTextureSize * pointsTextureSize * 4)\n for (let i = 0; i < data.pointsNumber; i++) {\n initialState[i * 4] = data.pointSizes[i] as number\n }\n\n if (!this.sizeTexture) this.sizeTexture = reglInstance.texture()\n this.sizeTexture({\n data: initialState,\n width: pointsTextureSize,\n height: pointsTextureSize,\n type: 'float',\n })\n\n if (!this.sizeFbo) this.sizeFbo = reglInstance.framebuffer()\n this.sizeFbo({\n color: this.sizeTexture,\n depth: false,\n stencil: false,\n })\n }\n\n public updateShape (): void {\n const { reglInstance, data } = this\n if (data.pointsNumber === undefined || data.pointShapes === undefined) return\n if (!this.shapeBuffer) this.shapeBuffer = reglInstance.buffer(0)\n this.shapeBuffer(data.pointShapes)\n }\n\n public updateImageIndices (): void {\n const { reglInstance, data } = this\n if (data.pointsNumber === undefined || data.pointImageIndices === undefined) return\n if (!this.imageIndicesBuffer) this.imageIndicesBuffer = reglInstance.buffer(0)\n this.imageIndicesBuffer(data.pointImageIndices)\n }\n\n public updateImageSizes (): void {\n const { reglInstance, data } = this\n if (data.pointsNumber === undefined || data.pointImageSizes === undefined) return\n if (!this.imageSizesBuffer) this.imageSizesBuffer = reglInstance.buffer(0)\n this.imageSizesBuffer(data.pointImageSizes)\n }\n\n public createAtlas (): void {\n const { reglInstance, data, store } = this\n if (!this.imageAtlasTexture) this.imageAtlasTexture = reglInstance.texture()\n if (!this.imageAtlasCoordsTexture) this.imageAtlasCoordsTexture = reglInstance.texture()\n\n if (!data.inputImageData?.length) {\n this.imageCount = 0\n this.imageAtlasCoordsTextureSize = 0\n return\n }\n\n const atlasResult = createAtlasDataFromImageData(data.inputImageData, store.webglMaxTextureSize)\n if (!atlasResult) {\n console.warn('Failed to create atlas from image data')\n return\n }\n\n this.imageCount = data.inputImageData.length\n const { atlasData, atlasSize, atlasCoords, atlasCoordsSize } = atlasResult\n this.imageAtlasCoordsTextureSize = atlasCoordsSize\n\n this.imageAtlasTexture({\n data: atlasData,\n shape: [atlasSize, atlasSize, 4],\n type: 'uint8',\n })\n\n this.imageAtlasCoordsTexture({\n data: atlasCoords,\n shape: [atlasCoordsSize, atlasCoordsSize, 4],\n type: 'float',\n })\n }\n\n public updateSampledPointsGrid (): void {\n const { store: { screenSize }, config: { pointSamplingDistance }, reglInstance } = this\n let dist = pointSamplingDistance ?? Math.min(...screenSize) / 2\n if (dist === 0) dist = defaultConfigValues.pointSamplingDistance\n const w = Math.ceil(screenSize[0] / dist)\n const h = Math.ceil(screenSize[1] / dist)\n if (!this.sampledPointsFbo) this.sampledPointsFbo = reglInstance.framebuffer()\n this.sampledPointsFbo({\n shape: [w, h],\n depth: false,\n stencil: false,\n colorType: 'float',\n })\n }\n\n public trackPoints (): void {\n if (!this.trackedIndices?.length) return\n this.trackPointsCommand?.()\n }\n\n public draw (): void {\n const { config: { renderHoveredPointRing, pointSize }, store, data } = this\n if (!this.colorBuffer) this.updateColor()\n if (!this.sizeBuffer) this.updateSize()\n if (!this.shapeBuffer) this.updateShape()\n if (!this.imageIndicesBuffer) this.updateImageIndices()\n if (!this.imageSizesBuffer) this.updateImageSizes()\n if (!this.imageAtlasCoordsTexture || !this.imageAtlasTexture) this.createAtlas()\n\n // Render in layers: unselected points first (behind), then selected points (in front)\n if (store.selectedIndices && store.selectedIndices.length > 0) {\n // First draw unselected points (they will appear behind)\n this.drawCommand?.({ skipSelected: true, skipUnselected: false })\n // Then draw selected points (they will appear in front)\n this.drawCommand?.({ skipSelected: false, skipUnselected: true })\n } else {\n // If no selection, draw all points\n this.drawCommand?.({ skipSelected: false, skipUnselected: false })\n }\n if ((renderHoveredPointRing) && store.hoveredPoint) {\n this.drawHighlightedCommand?.({\n width: 0.85,\n color: store.hoveredPointRingColor,\n pointIndex: store.hoveredPoint.index,\n size: data.pointSizes?.[store.hoveredPoint.index] ?? pointSize,\n })\n }\n if (store.focusedPoint) {\n this.drawHighlightedCommand?.({\n width: 0.75,\n color: store.focusedPointRingColor,\n pointIndex: store.focusedPoint.index,\n size: data.pointSizes?.[store.focusedPoint.index] ?? pointSize,\n })\n }\n }\n\n public updatePosition (): void {\n this.updatePositionCommand?.()\n this.swapFbo()\n // Invalidate tracked positions cache since positions have changed\n this.isPositionsUpToDate = false\n }\n\n public drag (): void {\n this.dragPointCommand?.()\n this.swapFbo()\n // Invalidate tracked positions cache since positions have changed\n this.isPositionsUpToDate = false\n }\n\n public findPointsOnAreaSelection (): void {\n this.findPointsOnAreaSelectionCommand?.()\n }\n\n public findPointsOnPolygonSelection (): void {\n this.findPointsOnPolygonSelectionCommand?.()\n }\n\n public updatePolygonPath (polygonPath: [number, number][]): void {\n const { reglInstance } = this\n this.polygonPathLength = polygonPath.length\n\n if (polygonPath.length === 0) {\n this.polygonPathTexture = undefined\n this.polygonPathFbo = undefined\n return\n }\n\n // Calculate texture size (square texture)\n const textureSize = Math.ceil(Math.sqrt(polygonPath.length))\n const textureData = new Float32Array(textureSize * textureSize * 4)\n\n // Fill texture with polygon path points\n for (const [i, point] of polygonPath.entries()) {\n const [x, y] = point\n textureData[i * 4] = x\n textureData[i * 4 + 1] = y\n textureData[i * 4 + 2] = 0 // unused\n textureData[i * 4 + 3] = 0 // unused\n }\n\n if (!this.polygonPathTexture) this.polygonPathTexture = reglInstance.texture()\n this.polygonPathTexture({\n data: textureData,\n width: textureSize,\n height: textureSize,\n type: 'float',\n })\n\n if (!this.polygonPathFbo) this.polygonPathFbo = reglInstance.framebuffer()\n this.polygonPathFbo({\n color: this.polygonPathTexture,\n depth: false,\n stencil: false,\n })\n }\n\n public findHoveredPoint (): void {\n this.clearHoveredFboCommand?.()\n this.findHoveredPointCommand?.()\n }\n\n public trackPointsByIndices (indices?: number[] | undefined): void {\n const { store: { pointsTextureSize }, reglInstance } = this\n this.trackedIndices = indices\n\n // Clear cache when changing tracked indices\n this.trackedPositions = undefined\n this.isPositionsUpToDate = false\n\n if (!indices?.length || !pointsTextureSize) return\n const textureSize = Math.ceil(Math.sqrt(indices.length))\n\n const initialState = new Float32Array(textureSize * textureSize * 4).fill(-1)\n for (const [i, sortedIndex] of indices.entries()) {\n if (sortedIndex !== undefined) {\n initialState[i * 4] = sortedIndex % pointsTextureSize\n initialState[i * 4 + 1] = Math.floor(sortedIndex / pointsTextureSize)\n initialState[i * 4 + 2] = 0\n initialState[i * 4 + 3] = 0\n }\n }\n if (!this.trackedIndicesTexture) this.trackedIndicesTexture = reglInstance.texture()\n this.trackedIndicesTexture({\n data: initialState,\n width: textureSize,\n height: textureSize,\n type: 'float',\n })\n if (!this.trackedIndicesFbo) this.trackedIndicesFbo = reglInstance.framebuffer()\n this.trackedIndicesFbo({\n color: this.trackedIndicesTexture,\n depth: false,\n stencil: false,\n })\n\n if (!this.trackedPositionsFbo) this.trackedPositionsFbo = reglInstance.framebuffer()\n this.trackedPositionsFbo({\n shape: [textureSize, textureSize],\n depth: false,\n stencil: false,\n colorType: 'float',\n })\n\n this.trackPoints()\n }\n\n /**\n * Get current X and Y coordinates of the tracked points.\n *\n * When the simulation is disabled or stopped, this method returns a cached\n * result to avoid expensive GPU-to-CPU memory transfers (`readPixels`).\n *\n * @returns A ReadonlyMap where keys are point indices and values are [x, y] coordinates.\n */\n public getTrackedPositionsMap (): ReadonlyMap<number, [number, number]> {\n if (!this.trackedIndices) return new Map()\n\n const { config: { enableSimulation }, store: { isSimulationRunning } } = this\n\n // Use cached positions when simulation is inactive and cache is valid\n if ((!enableSimulation || !isSimulationRunning) &&\n this.isPositionsUpToDate &&\n this.trackedPositions) {\n return this.trackedPositions\n }\n\n const pixels = readPixels(this.reglInstance, this.trackedPositionsFbo as regl.Framebuffer2D)\n\n const tracked = new Map<number, [number, number]>()\n for (let i = 0; i < pixels.length / 4; i += 1) {\n const x = pixels[i * 4]\n const y = pixels[i * 4 + 1]\n const index = this.trackedIndices[i]\n if (x !== undefined && y !== undefined && index !== undefined) {\n tracked.set(index, [x, y])\n }\n }\n\n // If simulation is inactive, cache the result for next time\n if (!enableSimulation || !isSimulationRunning) {\n this.trackedPositions = tracked\n this.isPositionsUpToDate = true\n }\n\n return tracked\n }\n\n public getSampledPointPositionsMap (): Map<number, [number, number]> {\n const positions = new Map<number, [number, number]>()\n if (!this.sampledPointsFbo) return positions\n this.clearSampledPointsFboCommand?.()\n this.fillSampledPointsFboCommand?.()\n const pixels = readPixels(this.reglInstance, this.sampledPointsFbo as regl.Framebuffer2D)\n for (let i = 0; i < pixels.length / 4; i++) {\n const index = pixels[i * 4]\n const isNotEmpty = !!pixels[i * 4 + 1]\n const x = pixels[i * 4 + 2]\n const y = pixels[i * 4 + 3]\n\n if (isNotEmpty && index !== undefined && x !== undefined && y !== undefined) {\n positions.set(index, [x, y])\n }\n }\n return positions\n }\n\n public getSampledPoints (): { indices: number[]; positions: number[] } {\n const indices: number[] = []\n const positions: number[] = []\n if (!this.sampledPointsFbo) return { indices, positions }\n\n this.clearSampledPointsFboCommand?.()\n this.fillSampledPointsFboCommand?.()\n const pixels = readPixels(this.reglInstance, this.sampledPointsFbo as regl.Framebuffer2D)\n\n for (let i = 0; i < pixels.length / 4; i++) {\n const index = pixels[i * 4]\n const isNotEmpty = !!pixels[i * 4 + 1]\n const x = pixels[i * 4 + 2]\n const y = pixels[i * 4 + 3]\n\n if (isNotEmpty && index !== undefined && x !== undefined && y !== undefined) {\n indices.push(index)\n positions.push(x, y)\n }\n }\n\n return { indices, positions }\n }\n\n public getTrackedPositionsArray (): number[] {\n const positions: number[] = []\n if (!this.trackedIndices) return positions\n positions.length = this.trackedIndices.length * 2\n const pixels = readPixels(this.reglInstance, this.trackedPositionsFbo as regl.Framebuffer2D)\n for (let i = 0; i < pixels.length / 4; i += 1) {\n const x = pixels[i * 4]\n const y = pixels[i * 4 + 1]\n const index = this.trackedIndices[i]\n if (x !== undefined && y !== undefined && index !== undefined) {\n positions[i * 2] = x\n positions[i * 2 + 1] = y\n }\n }\n return positions\n }\n\n private swapFbo (): void {\n const temp = this.previousPositionFbo\n this.previousPositionFbo = this.currentPositionFbo\n this.currentPositionFbo = temp\n }\n\n private rescaleInitialNodePositions (): void {\n const { config: { spaceSize } } = this\n if (!this.data.pointPositions || !spaceSize) return\n\n const points = this.data.pointPositions\n const pointsNumber = points.length / 2\n let minX = Infinity\n let maxX = -Infinity\n let minY = Infinity\n let maxY = -Infinity\n for (let i = 0; i < points.length; i += 2) {\n const x = points[i] as number\n const y = points[i + 1] as number\n minX = Math.min(minX, x)\n maxX = Math.max(maxX, x)\n minY = Math.min(minY, y)\n maxY = Math.max(maxY, y)\n }\n const w = maxX - minX\n const h = maxY - minY\n const range = Math.max(w, h)\n\n // Do not rescale if the range is greater than the space size (no need to)\n if (range > spaceSize) {\n this.scaleX = undefined\n this.scaleY = undefined\n return\n }\n\n // Density threshold - points per pixel ratio (0.001 = 0.1%)\n const densityThreshold = spaceSize * spaceSize * 0.001\n // Calculate effective space size based on point density\n const effectiveSpaceSize = pointsNumber > densityThreshold\n // For dense datasets: scale up based on point count, minimum 120% of space\n ? spaceSize * Math.max(1.2, Math.sqrt(pointsNumber) / spaceSize)\n // For sparse datasets: use 10% of space to cluster points closer\n : spaceSize * 0.1\n\n // Calculate uniform scale factor to fit data within effective space\n const scaleFactor = effectiveSpaceSize / range\n // Center the data horizontally by adding padding on x-axis\n const offsetX = ((range - w) / 2) * scaleFactor\n // Center the data vertically by adding padding on y-axis\n const offsetY = ((range - h) / 2) * scaleFactor\n\n this.scaleX = (x: number): number => (x - minX) * scaleFactor + offsetX\n this.scaleY = (y: number): number => (y - minY) * scaleFactor + offsetY\n\n // Apply scaling to point positions\n for (let i = 0; i < pointsNumber; i++) {\n this.data.pointPositions[i * 2] = this.scaleX(points[i * 2] as number)\n this.data.pointPositions[i * 2 + 1] = this.scaleY(points[i * 2 + 1] as number)\n }\n }\n}\n","/**\n * Common utilities\n * @module glMatrix\n */\n// Configuration Constants\nexport var EPSILON = 0.000001;\nexport var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;\nexport var RANDOM = Math.random;\n/**\n * Sets the type of array used when creating new vectors and matrices\n *\n * @param {Float32ArrayConstructor | ArrayConstructor} type Array type, such as Float32Array or Array\n */\n\nexport function setMatrixArrayType(type) {\n ARRAY_TYPE = type;\n}\nvar degree = Math.PI / 180;\n/**\n * Convert Degree To Radian\n *\n * @param {Number} a Angle in Degrees\n */\n\nexport function toRadian(a) {\n return a * degree;\n}\n/**\n * Tests whether or not the arguments have approximately the same value, within an absolute\n * or relative tolerance of glMatrix.EPSILON (an absolute tolerance is used for values less\n * than or equal to 1.0, and a relative tolerance is used for larger values)\n *\n * @param {Number} a The first number to test.\n * @param {Number} b The second number to test.\n * @returns {Boolean} True if the numbers are approximately equal, false otherwise.\n */\n\nexport function equals(a, b) {\n return Math.abs(a - b) <= EPSILON * Math.max(1.0, Math.abs(a), Math.abs(b));\n}\nif (!Math.hypot) Math.hypot = function () {\n var y = 0,\n i = arguments.length;\n\n while (i--) {\n y += arguments[i] * arguments[i];\n }\n\n return Math.sqrt(y);\n};","import * as glMatrix from \"./common.js\";\n/**\n * 3x3 Matrix\n * @module mat3\n */\n\n/**\n * Creates a new identity mat3\n *\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function create() {\n var out = new glMatrix.ARRAY_TYPE(9);\n\n if (glMatrix.ARRAY_TYPE != Float32Array) {\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n }\n\n out[0] = 1;\n out[4] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the upper-left 3x3 values into the given mat3.\n *\n * @param {mat3} out the receiving 3x3 matrix\n * @param {ReadonlyMat4} a the source 4x4 matrix\n * @returns {mat3} out\n */\n\nexport function fromMat4(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[4];\n out[4] = a[5];\n out[5] = a[6];\n out[6] = a[8];\n out[7] = a[9];\n out[8] = a[10];\n return out;\n}\n/**\n * Creates a new mat3 initialized with values from an existing matrix\n *\n * @param {ReadonlyMat3} a matrix to clone\n * @returns {mat3} a new 3x3 matrix\n */\n\nexport function clone(a) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Copy the values from one mat3 to another\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Create a new mat3 with the given values\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} A new mat3\n */\n\nexport function fromValues(m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n var out = new glMatrix.ARRAY_TYPE(9);\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set the components of a mat3 to the given values\n *\n * @param {mat3} out the receiving matrix\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m10 Component in column 1, row 0 position (index 3)\n * @param {Number} m11 Component in column 1, row 1 position (index 4)\n * @param {Number} m12 Component in column 1, row 2 position (index 5)\n * @param {Number} m20 Component in column 2, row 0 position (index 6)\n * @param {Number} m21 Component in column 2, row 1 position (index 7)\n * @param {Number} m22 Component in column 2, row 2 position (index 8)\n * @returns {mat3} out\n */\n\nexport function set(out, m00, m01, m02, m10, m11, m12, m20, m21, m22) {\n out[0] = m00;\n out[1] = m01;\n out[2] = m02;\n out[3] = m10;\n out[4] = m11;\n out[5] = m12;\n out[6] = m20;\n out[7] = m21;\n out[8] = m22;\n return out;\n}\n/**\n * Set a mat3 to the identity matrix\n *\n * @param {mat3} out the receiving matrix\n * @returns {mat3} out\n */\n\nexport function identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Transpose the values of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1],\n a02 = a[2],\n a12 = a[5];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a01;\n out[5] = a[7];\n out[6] = a02;\n out[7] = a12;\n } else {\n out[0] = a[0];\n out[1] = a[3];\n out[2] = a[6];\n out[3] = a[1];\n out[4] = a[4];\n out[5] = a[7];\n out[6] = a[2];\n out[7] = a[5];\n out[8] = a[8];\n }\n\n return out;\n}\n/**\n * Inverts a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function invert(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b01 = a22 * a11 - a12 * a21;\n var b11 = -a22 * a10 + a12 * a20;\n var b21 = a21 * a10 - a11 * a20; // Calculate the determinant\n\n var det = a00 * b01 + a01 * b11 + a02 * b21;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = b01 * det;\n out[1] = (-a22 * a01 + a02 * a21) * det;\n out[2] = (a12 * a01 - a02 * a11) * det;\n out[3] = b11 * det;\n out[4] = (a22 * a00 - a02 * a20) * det;\n out[5] = (-a12 * a00 + a02 * a10) * det;\n out[6] = b21 * det;\n out[7] = (-a21 * a00 + a01 * a20) * det;\n out[8] = (a11 * a00 - a01 * a10) * det;\n return out;\n}\n/**\n * Calculates the adjugate of a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the source matrix\n * @returns {mat3} out\n */\n\nexport function adjoint(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n out[0] = a11 * a22 - a12 * a21;\n out[1] = a02 * a21 - a01 * a22;\n out[2] = a01 * a12 - a02 * a11;\n out[3] = a12 * a20 - a10 * a22;\n out[4] = a00 * a22 - a02 * a20;\n out[5] = a02 * a10 - a00 * a12;\n out[6] = a10 * a21 - a11 * a20;\n out[7] = a01 * a20 - a00 * a21;\n out[8] = a00 * a11 - a01 * a10;\n return out;\n}\n/**\n * Calculates the determinant of a mat3\n *\n * @param {ReadonlyMat3} a the source matrix\n * @returns {Number} determinant of a\n */\n\nexport function determinant(a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n return a00 * (a22 * a11 - a12 * a21) + a01 * (-a22 * a10 + a12 * a20) + a02 * (a21 * a10 - a11 * a20);\n}\n/**\n * Multiplies two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function multiply(out, a, b) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2];\n var a10 = a[3],\n a11 = a[4],\n a12 = a[5];\n var a20 = a[6],\n a21 = a[7],\n a22 = a[8];\n var b00 = b[0],\n b01 = b[1],\n b02 = b[2];\n var b10 = b[3],\n b11 = b[4],\n b12 = b[5];\n var b20 = b[6],\n b21 = b[7],\n b22 = b[8];\n out[0] = b00 * a00 + b01 * a10 + b02 * a20;\n out[1] = b00 * a01 + b01 * a11 + b02 * a21;\n out[2] = b00 * a02 + b01 * a12 + b02 * a22;\n out[3] = b10 * a00 + b11 * a10 + b12 * a20;\n out[4] = b10 * a01 + b11 * a11 + b12 * a21;\n out[5] = b10 * a02 + b11 * a12 + b12 * a22;\n out[6] = b20 * a00 + b21 * a10 + b22 * a20;\n out[7] = b20 * a01 + b21 * a11 + b22 * a21;\n out[8] = b20 * a02 + b21 * a12 + b22 * a22;\n return out;\n}\n/**\n * Translate a mat3 by the given vector\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to translate\n * @param {ReadonlyVec2} v vector to translate by\n * @returns {mat3} out\n */\n\nexport function translate(out, a, v) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n x = v[0],\n y = v[1];\n out[0] = a00;\n out[1] = a01;\n out[2] = a02;\n out[3] = a10;\n out[4] = a11;\n out[5] = a12;\n out[6] = x * a00 + y * a10 + a20;\n out[7] = x * a01 + y * a11 + a21;\n out[8] = x * a02 + y * a12 + a22;\n return out;\n}\n/**\n * Rotates a mat3 by the given angle\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function rotate(out, a, rad) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a10 = a[3],\n a11 = a[4],\n a12 = a[5],\n a20 = a[6],\n a21 = a[7],\n a22 = a[8],\n s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c * a00 + s * a10;\n out[1] = c * a01 + s * a11;\n out[2] = c * a02 + s * a12;\n out[3] = c * a10 - s * a00;\n out[4] = c * a11 - s * a01;\n out[5] = c * a12 - s * a02;\n out[6] = a20;\n out[7] = a21;\n out[8] = a22;\n return out;\n}\n/**\n * Scales the mat3 by the dimensions in the given vec2\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to rotate\n * @param {ReadonlyVec2} v the vec2 to scale the matrix by\n * @returns {mat3} out\n **/\n\nexport function scale(out, a, v) {\n var x = v[0],\n y = v[1];\n out[0] = x * a[0];\n out[1] = x * a[1];\n out[2] = x * a[2];\n out[3] = y * a[3];\n out[4] = y * a[4];\n out[5] = y * a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n return out;\n}\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.translate(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Translation vector\n * @returns {mat3} out\n */\n\nexport function fromTranslation(out, v) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 1;\n out[5] = 0;\n out[6] = v[0];\n out[7] = v[1];\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a given angle\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.rotate(dest, dest, rad);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat3} out\n */\n\nexport function fromRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad);\n out[0] = c;\n out[1] = s;\n out[2] = 0;\n out[3] = -s;\n out[4] = c;\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat3.identity(dest);\n * mat3.scale(dest, dest, vec);\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyVec2} v Scaling vector\n * @returns {mat3} out\n */\n\nexport function fromScaling(out, v) {\n out[0] = v[0];\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = v[1];\n out[5] = 0;\n out[6] = 0;\n out[7] = 0;\n out[8] = 1;\n return out;\n}\n/**\n * Copies the values from a mat2d into a mat3\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat2d} a the matrix to copy\n * @returns {mat3} out\n **/\n\nexport function fromMat2d(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = 0;\n out[3] = a[2];\n out[4] = a[3];\n out[5] = 0;\n out[6] = a[4];\n out[7] = a[5];\n out[8] = 1;\n return out;\n}\n/**\n * Calculates a 3x3 matrix from the given quaternion\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyQuat} q Quaternion to create matrix from\n *\n * @returns {mat3} out\n */\n\nexport function fromQuat(out, q) {\n var x = q[0],\n y = q[1],\n z = q[2],\n w = q[3];\n var x2 = x + x;\n var y2 = y + y;\n var z2 = z + z;\n var xx = x * x2;\n var yx = y * x2;\n var yy = y * y2;\n var zx = z * x2;\n var zy = z * y2;\n var zz = z * z2;\n var wx = w * x2;\n var wy = w * y2;\n var wz = w * z2;\n out[0] = 1 - yy - zz;\n out[3] = yx - wz;\n out[6] = zx + wy;\n out[1] = yx + wz;\n out[4] = 1 - xx - zz;\n out[7] = zy - wx;\n out[2] = zx - wy;\n out[5] = zy + wx;\n out[8] = 1 - xx - yy;\n return out;\n}\n/**\n * Calculates a 3x3 normal matrix (transpose inverse) from the 4x4 matrix\n *\n * @param {mat3} out mat3 receiving operation result\n * @param {ReadonlyMat4} a Mat4 to derive the normal matrix from\n *\n * @returns {mat3} out\n */\n\nexport function normalFromMat4(out, a) {\n var a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3];\n var a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n var a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n var a30 = a[12],\n a31 = a[13],\n a32 = a[14],\n a33 = a[15];\n var b00 = a00 * a11 - a01 * a10;\n var b01 = a00 * a12 - a02 * a10;\n var b02 = a00 * a13 - a03 * a10;\n var b03 = a01 * a12 - a02 * a11;\n var b04 = a01 * a13 - a03 * a11;\n var b05 = a02 * a13 - a03 * a12;\n var b06 = a20 * a31 - a21 * a30;\n var b07 = a20 * a32 - a22 * a30;\n var b08 = a20 * a33 - a23 * a30;\n var b09 = a21 * a32 - a22 * a31;\n var b10 = a21 * a33 - a23 * a31;\n var b11 = a22 * a33 - a23 * a32; // Calculate the determinant\n\n var det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) {\n return null;\n }\n\n det = 1.0 / det;\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[2] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[3] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[4] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[5] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[6] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[7] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[8] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n return out;\n}\n/**\n * Generates a 2D projection matrix with the given bounds\n *\n * @param {mat3} out mat3 frustum matrix will be written into\n * @param {number} width Width of your gl context\n * @param {number} height Height of gl context\n * @returns {mat3} out\n */\n\nexport function projection(out, width, height) {\n out[0] = 2 / width;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = -2 / height;\n out[5] = 0;\n out[6] = -1;\n out[7] = 1;\n out[8] = 1;\n return out;\n}\n/**\n * Returns a string representation of a mat3\n *\n * @param {ReadonlyMat3} a matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\n\nexport function str(a) {\n return \"mat3(\" + a[0] + \", \" + a[1] + \", \" + a[2] + \", \" + a[3] + \", \" + a[4] + \", \" + a[5] + \", \" + a[6] + \", \" + a[7] + \", \" + a[8] + \")\";\n}\n/**\n * Returns Frobenius norm of a mat3\n *\n * @param {ReadonlyMat3} a the matrix to calculate Frobenius norm of\n * @returns {Number} Frobenius norm\n */\n\nexport function frob(a) {\n return Math.hypot(a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);\n}\n/**\n * Adds two mat3's\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function add(out, a, b) {\n out[0] = a[0] + b[0];\n out[1] = a[1] + b[1];\n out[2] = a[2] + b[2];\n out[3] = a[3] + b[3];\n out[4] = a[4] + b[4];\n out[5] = a[5] + b[5];\n out[6] = a[6] + b[6];\n out[7] = a[7] + b[7];\n out[8] = a[8] + b[8];\n return out;\n}\n/**\n * Subtracts matrix b from matrix a\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @returns {mat3} out\n */\n\nexport function subtract(out, a, b) {\n out[0] = a[0] - b[0];\n out[1] = a[1] - b[1];\n out[2] = a[2] - b[2];\n out[3] = a[3] - b[3];\n out[4] = a[4] - b[4];\n out[5] = a[5] - b[5];\n out[6] = a[6] - b[6];\n out[7] = a[7] - b[7];\n out[8] = a[8] - b[8];\n return out;\n}\n/**\n * Multiply each element of the matrix by a scalar.\n *\n * @param {mat3} out the receiving matrix\n * @param {ReadonlyMat3} a the matrix to scale\n * @param {Number} b amount to scale the matrix's elements by\n * @returns {mat3} out\n */\n\nexport function multiplyScalar(out, a, b) {\n out[0] = a[0] * b;\n out[1] = a[1] * b;\n out[2] = a[2] * b;\n out[3] = a[3] * b;\n out[4] = a[4] * b;\n out[5] = a[5] * b;\n out[6] = a[6] * b;\n out[7] = a[7] * b;\n out[8] = a[8] * b;\n return out;\n}\n/**\n * Adds two mat3's after multiplying each element of the second operand by a scalar value.\n *\n * @param {mat3} out the receiving vector\n * @param {ReadonlyMat3} a the first operand\n * @param {ReadonlyMat3} b the second operand\n * @param {Number} scale the amount to scale b's elements by before adding\n * @returns {mat3} out\n */\n\nexport function multiplyScalarAndAdd(out, a, b, scale) {\n out[0] = a[0] + b[0] * scale;\n out[1] = a[1] + b[1] * scale;\n out[2] = a[2] + b[2] * scale;\n out[3] = a[3] + b[3] * scale;\n out[4] = a[4] + b[4] * scale;\n out[5] = a[5] + b[5] * scale;\n out[6] = a[6] + b[6] * scale;\n out[7] = a[7] + b[7] * scale;\n out[8] = a[8] + b[8] * scale;\n return out;\n}\n/**\n * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] && a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] && a[8] === b[8];\n}\n/**\n * Returns whether or not the matrices have approximately the same elements in the same position.\n *\n * @param {ReadonlyMat3} a The first matrix.\n * @param {ReadonlyMat3} b The second matrix.\n * @returns {Boolean} True if the matrices are equal, false otherwise.\n */\n\nexport function equals(a, b) {\n var a0 = a[0],\n a1 = a[1],\n a2 = a[2],\n a3 = a[3],\n a4 = a[4],\n a5 = a[5],\n a6 = a[6],\n a7 = a[7],\n a8 = a[8];\n var b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8];\n return Math.abs(a0 - b0) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)) && Math.abs(a3 - b3) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a3), Math.abs(b3)) && Math.abs(a4 - b4) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a4), Math.abs(b4)) && Math.abs(a5 - b5) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a5), Math.abs(b5)) && Math.abs(a6 - b6) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a6), Math.abs(b6)) && Math.abs(a7 - b7) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a7), Math.abs(b7)) && Math.abs(a8 - b8) <= glMatrix.EPSILON * Math.max(1.0, Math.abs(a8), Math.abs(b8));\n}\n/**\n * Alias for {@link mat3.multiply}\n * @function\n */\n\nexport var mul = multiply;\n/**\n * Alias for {@link mat3.subtract}\n * @function\n */\n\nexport var sub = subtract;","// A port of an algorithm by Johannes Baagøe <baagoe@baagoe.com>, 2010\n// http://baagoe.com/en/RandomMusings/javascript/\n// https://github.com/nquinlan/better-random-numbers-for-javascript-mirror\n// Original work is under MIT license -\n\n// Copyright (C) 2010 by Johannes Baagøe <baagoe@baagoe.org>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to deal\n// in the Software without restriction, including without limitation the rights\n// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n// copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n// THE SOFTWARE.\n\n\n\n(function(global, module, define) {\n\nfunction Alea(seed) {\n var me = this, mash = Mash();\n\n me.next = function() {\n var t = 2091639 * me.s0 + me.c * 2.3283064365386963e-10; // 2^-32\n me.s0 = me.s1;\n me.s1 = me.s2;\n return me.s2 = t - (me.c = t | 0);\n };\n\n // Apply the seeding algorithm from Baagoe.\n me.c = 1;\n me.s0 = mash(' ');\n me.s1 = mash(' ');\n me.s2 = mash(' ');\n me.s0 -= mash(seed);\n if (me.s0 < 0) { me.s0 += 1; }\n me.s1 -= mash(seed);\n if (me.s1 < 0) { me.s1 += 1; }\n me.s2 -= mash(seed);\n if (me.s2 < 0) { me.s2 += 1; }\n mash = null;\n}\n\nfunction copy(f, t) {\n t.c = f.c;\n t.s0 = f.s0;\n t.s1 = f.s1;\n t.s2 = f.s2;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new Alea(seed),\n state = opts && opts.state,\n prng = xg.next;\n prng.int32 = function() { return (xg.next() * 0x100000000) | 0; }\n prng.double = function() {\n return prng() + (prng() * 0x200000 | 0) * 1.1102230246251565e-16; // 2^-53\n };\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nfunction Mash() {\n var n = 0xefc8249d;\n\n var mash = function(data) {\n data = String(data);\n for (var i = 0; i < data.length; i++) {\n n += data.charCodeAt(i);\n var h = 0.02519603282416938 * n;\n n = h >>> 0;\n h -= n;\n h *= n;\n n = h >>> 0;\n h -= n;\n n += h * 0x100000000; // 2^32\n }\n return (n >>> 0) * 2.3283064365386963e-10; // 2^-32\n };\n\n return mash;\n}\n\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.alea = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xor128\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n\n // Set up generator function.\n me.next = function() {\n var t = me.x ^ (me.x << 11);\n me.x = me.y;\n me.y = me.z;\n me.z = me.w;\n return me.w ^= (me.w >>> 19) ^ t ^ (t >>> 8);\n };\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor128 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorwow\" prng algorithm by\n// George Marsaglia. See http://www.jstatsoft.org/v08/i14/paper\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var t = (me.x ^ (me.x >>> 2));\n me.x = me.y; me.y = me.z; me.z = me.w; me.w = me.v;\n return (me.d = (me.d + 362437 | 0)) +\n (me.v = (me.v ^ (me.v << 4)) ^ (t ^ (t << 1))) | 0;\n };\n\n me.x = 0;\n me.y = 0;\n me.z = 0;\n me.w = 0;\n me.v = 0;\n\n if (seed === (seed | 0)) {\n // Integer seed.\n me.x = seed;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 64; k++) {\n me.x ^= strseed.charCodeAt(k) | 0;\n if (k == strseed.length) {\n me.d = me.x << 10 ^ me.x >>> 4;\n }\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.x = f.x;\n t.y = f.y;\n t.z = f.z;\n t.w = f.w;\n t.v = f.v;\n t.d = f.d;\n return t;\n}\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorwow = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","// A Javascript implementaion of the \"xorshift7\" algorithm by\n// François Panneton and Pierre L'ecuyer:\n// \"On the Xorgshift Random Number Generators\"\n// http://saluc.engr.uconn.edu/refs/crypto/rng/panneton05onthexorshift.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n // Update xor generator.\n var X = me.x, i = me.i, t, v, w;\n t = X[i]; t ^= (t >>> 7); v = t ^ (t << 24);\n t = X[(i + 1) & 7]; v ^= t ^ (t >>> 10);\n t = X[(i + 3) & 7]; v ^= t ^ (t >>> 3);\n t = X[(i + 4) & 7]; v ^= t ^ (t << 7);\n t = X[(i + 7) & 7]; t = t ^ (t << 13); v ^= t ^ (t << 9);\n X[i] = v;\n me.i = (i + 1) & 7;\n return v;\n };\n\n function init(me, seed) {\n var j, w, X = [];\n\n if (seed === (seed | 0)) {\n // Seed state array using a 32-bit integer.\n w = X[0] = seed;\n } else {\n // Seed state using a string.\n seed = '' + seed;\n for (j = 0; j < seed.length; ++j) {\n X[j & 7] = (X[j & 7] << 15) ^\n (seed.charCodeAt(j) + X[(j + 1) & 7] << 13);\n }\n }\n // Enforce an array length of 8, not all zeroes.\n while (X.length < 8) X.push(0);\n for (j = 0; j < 8 && X[j] === 0; ++j);\n if (j == 8) w = X[7] = -1; else w = X[j];\n\n me.x = X;\n me.i = 0;\n\n // Discard an initial 256 values.\n for (j = 256; j > 0; --j) {\n me.next();\n }\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.x = f.x.slice();\n t.i = f.i;\n return t;\n}\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.x) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xorshift7 = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n","// A Javascript implementaion of Richard Brent's Xorgens xor4096 algorithm.\n//\n// This fast non-cryptographic random number generator is designed for\n// use in Monte-Carlo algorithms. It combines a long-period xorshift\n// generator with a Weyl generator, and it passes all common batteries\n// of stasticial tests for randomness while consuming only a few nanoseconds\n// for each prng generated. For background on the generator, see Brent's\n// paper: \"Some long-period random number generators using shifts and xors.\"\n// http://arxiv.org/pdf/1004.3115v1.pdf\n//\n// Usage:\n//\n// var xor4096 = require('xor4096');\n// random = xor4096(1); // Seed with int32 or string.\n// assert.equal(random(), 0.1520436450538547); // (0, 1) range, 53 bits.\n// assert.equal(random.int32(), 1806534897); // signed int32, 32 bits.\n//\n// For nonzero numeric keys, this impelementation provides a sequence\n// identical to that by Brent's xorgens 3 implementaion in C. This\n// implementation also provides for initalizing the generator with\n// string seeds, or for saving and restoring the state of the generator.\n//\n// On Chrome, this prng benchmarks about 2.1 times slower than\n// Javascript's built-in Math.random().\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this;\n\n // Set up generator function.\n me.next = function() {\n var w = me.w,\n X = me.X, i = me.i, t, v;\n // Update Weyl generator.\n me.w = w = (w + 0x61c88647) | 0;\n // Update xor generator.\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n // Update Xor generator array state.\n v = X[i] = v ^ t;\n me.i = i;\n // Result is the combination.\n return (v + (w ^ (w >>> 16))) | 0;\n };\n\n function init(me, seed) {\n var t, v, i, j, w, X = [], limit = 128;\n if (seed === (seed | 0)) {\n // Numeric seeds initialize v, which is used to generates X.\n v = seed;\n seed = null;\n } else {\n // String seeds are mixed into v and X one character at a time.\n seed = seed + '\\0';\n v = 0;\n limit = Math.max(limit, seed.length);\n }\n // Initialize circular array and weyl value.\n for (i = 0, j = -32; j < limit; ++j) {\n // Put the unicode characters into the array, and shuffle them.\n if (seed) v ^= seed.charCodeAt((j + 32) % seed.length);\n // After 32 shuffles, take v as the starting w value.\n if (j === 0) w = v;\n v ^= v << 10;\n v ^= v >>> 15;\n v ^= v << 4;\n v ^= v >>> 13;\n if (j >= 0) {\n w = (w + 0x61c88647) | 0; // Weyl.\n t = (X[j & 127] ^= (v + w)); // Combine xor and weyl to init array.\n i = (0 == t) ? i + 1 : 0; // Count zeroes.\n }\n }\n // We have detected all zeroes; make the key nonzero.\n if (i >= 128) {\n X[(seed && seed.length || 0) & 127] = -1;\n }\n // Run the generator 512 times to further mix the state before using it.\n // Factoring this as a function slows the main generator, so it is just\n // unrolled here. The weyl generator is not advanced while warming up.\n i = 127;\n for (j = 4 * 128; j > 0; --j) {\n v = X[(i + 34) & 127];\n t = X[i = ((i + 1) & 127)];\n v ^= v << 13;\n t ^= t << 17;\n v ^= v >>> 15;\n t ^= t >>> 12;\n X[i] = v ^ t;\n }\n // Storing state as object members is faster than using closure variables.\n me.w = w;\n me.X = X;\n me.i = i;\n }\n\n init(me, seed);\n}\n\nfunction copy(f, t) {\n t.i = f.i;\n t.w = f.w;\n t.X = f.X.slice();\n return t;\n};\n\nfunction impl(seed, opts) {\n if (seed == null) seed = +(new Date);\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (state.X) copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.xor4096 = impl;\n}\n\n})(\n this, // window object or global\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n","// A Javascript implementaion of the \"Tyche-i\" prng algorithm by\n// Samuel Neves and Filipe Araujo.\n// See https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n\n(function(global, module, define) {\n\nfunction XorGen(seed) {\n var me = this, strseed = '';\n\n // Set up generator function.\n me.next = function() {\n var b = me.b, c = me.c, d = me.d, a = me.a;\n b = (b << 25) ^ (b >>> 7) ^ c;\n c = (c - d) | 0;\n d = (d << 24) ^ (d >>> 8) ^ a;\n a = (a - b) | 0;\n me.b = b = (b << 20) ^ (b >>> 12) ^ c;\n me.c = c = (c - d) | 0;\n me.d = (d << 16) ^ (c >>> 16) ^ a;\n return me.a = (a - b) | 0;\n };\n\n /* The following is non-inverted tyche, which has better internal\n * bit diffusion, but which is about 25% slower than tyche-i in JS.\n me.next = function() {\n var a = me.a, b = me.b, c = me.c, d = me.d;\n a = (me.a + me.b | 0) >>> 0;\n d = me.d ^ a; d = d << 16 ^ d >>> 16;\n c = me.c + d | 0;\n b = me.b ^ c; b = b << 12 ^ d >>> 20;\n me.a = a = a + b | 0;\n d = d ^ a; me.d = d = d << 8 ^ d >>> 24;\n me.c = c = c + d | 0;\n b = b ^ c;\n return me.b = (b << 7 ^ b >>> 25);\n }\n */\n\n me.a = 0;\n me.b = 0;\n me.c = 2654435769 | 0;\n me.d = 1367130551;\n\n if (seed === Math.floor(seed)) {\n // Integer seed.\n me.a = (seed / 0x100000000) | 0;\n me.b = seed | 0;\n } else {\n // String seed.\n strseed += seed;\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (var k = 0; k < strseed.length + 20; k++) {\n me.b ^= strseed.charCodeAt(k) | 0;\n me.next();\n }\n}\n\nfunction copy(f, t) {\n t.a = f.a;\n t.b = f.b;\n t.c = f.c;\n t.d = f.d;\n return t;\n};\n\nfunction impl(seed, opts) {\n var xg = new XorGen(seed),\n state = opts && opts.state,\n prng = function() { return (xg.next() >>> 0) / 0x100000000; };\n prng.double = function() {\n do {\n var top = xg.next() >>> 11,\n bot = (xg.next() >>> 0) / 0x100000000,\n result = (top + bot) / (1 << 21);\n } while (result === 0);\n return result;\n };\n prng.int32 = xg.next;\n prng.quick = prng;\n if (state) {\n if (typeof(state) == 'object') copy(state, xg);\n prng.state = function() { return copy(xg, {}); }\n }\n return prng;\n}\n\nif (module && module.exports) {\n module.exports = impl;\n} else if (define && define.amd) {\n define(function() { return impl; });\n} else {\n this.tychei = impl;\n}\n\n})(\n this,\n (typeof module) == 'object' && module, // present in node.js\n (typeof define) == 'function' && define // present with an AMD loader\n);\n\n\n","export default {}","/*\nCopyright 2019 David Bau.\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n*/\n\n(function (global, pool, math) {\n//\n// The following constants are related to IEEE 754 limits.\n//\n\nvar width = 256, // each RC4 output is 0 <= x < 256\n chunks = 6, // at least six RC4 outputs for each double\n digits = 52, // there are 52 significant digits in a double\n rngname = 'random', // rngname: name for Math.random and Math.seedrandom\n startdenom = math.pow(width, chunks),\n significance = math.pow(2, digits),\n overflow = significance * 2,\n mask = width - 1,\n nodecrypto; // node.js crypto module, initialized at the bottom.\n\n//\n// seedrandom()\n// This is the seedrandom function described above.\n//\nfunction seedrandom(seed, options, callback) {\n var key = [];\n options = (options == true) ? { entropy: true } : (options || {});\n\n // Flatten the seed string or build one from local entropy if needed.\n var shortseed = mixkey(flatten(\n options.entropy ? [seed, tostring(pool)] :\n (seed == null) ? autoseed() : seed, 3), key);\n\n // Use the seed to initialize an ARC4 generator.\n var arc4 = new ARC4(key);\n\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n var prng = function() {\n var n = arc4.g(chunks), // Start with a numerator n < 2 ^ 48\n d = startdenom, // and denominator d = 2 ^ 48.\n x = 0; // and no 'extra last byte'.\n while (n < significance) { // Fill up all significant digits by\n n = (n + x) * width; // shifting numerator and\n d *= width; // denominator and generating a\n x = arc4.g(1); // new least-significant-byte.\n }\n while (n >= overflow) { // To avoid rounding up, before adding\n n /= 2; // last byte, shift everything\n d /= 2; // right using integer math until\n x >>>= 1; // we have exactly the desired bits.\n }\n return (n + x) / d; // Form the number within [0, 1).\n };\n\n prng.int32 = function() { return arc4.g(4) | 0; }\n prng.quick = function() { return arc4.g(4) / 0x100000000; }\n prng.double = prng;\n\n // Mix the randomness into accumulated entropy.\n mixkey(tostring(arc4.S), pool);\n\n // Calling convention: what to return as a function of prng, seed, is_math.\n return (options.pass || callback ||\n function(prng, seed, is_math_call, state) {\n if (state) {\n // Load the arc4 state from the given state if it has an S array.\n if (state.S) { copy(state, arc4); }\n // Only provide the .state method if requested via options.state.\n prng.state = function() { return copy(arc4, {}); }\n }\n\n // If called as a method of Math (Math.seedrandom()), mutate\n // Math.random because that is how seedrandom.js has worked since v1.0.\n if (is_math_call) { math[rngname] = prng; return seed; }\n\n // Otherwise, it is a newer calling convention, so return the\n // prng directly.\n else return prng;\n })(\n prng,\n shortseed,\n 'global' in options ? options.global : (this == math),\n options.state);\n}\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of\n// an array of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates\n// the next (count) outputs from ARC4. Its return value is a number x\n// that is in the range 0 <= x < (width ^ count).\n//\nfunction ARC4(key) {\n var t, keylen = key.length,\n me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n\n // The empty key [] is treated as [0].\n if (!keylen) { key = [keylen++]; }\n\n // Set up S using the standard key scheduling algorithm.\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & (j + key[i % keylen] + (t = s[i]))];\n s[j] = t;\n }\n\n // The \"g\" method returns the next (count) outputs as one number.\n (me.g = function(count) {\n // Using instance members instead of closure state nearly doubles speed.\n var t, r = 0,\n i = me.i, j = me.j, s = me.S;\n while (count--) {\n t = s[i = mask & (i + 1)];\n r = r * width + s[mask & ((s[i] = s[j = mask & (j + t)]) + (s[j] = t))];\n }\n me.i = i; me.j = j;\n return r;\n // For robust unpredictability, the function call below automatically\n // discards an initial batch of values. This is called RC4-drop[256].\n // See http://google.com/search?q=rsa+fluhrer+response&btnI\n })(width);\n}\n\n//\n// copy()\n// Copies internal state of ARC4 to or from a plain object.\n//\nfunction copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n};\n\n//\n// flatten()\n// Converts an object tree to nested arrays of strings.\n//\nfunction flatten(obj, depth) {\n var result = [], typ = (typeof obj), prop;\n if (depth && typ == 'object') {\n for (prop in obj) {\n try { result.push(flatten(obj[prop], depth - 1)); } catch (e) {}\n }\n }\n return (result.length ? result : typ == 'string' ? obj : obj + '\\0');\n}\n\n//\n// mixkey()\n// Mixes a string seed into a key that is an array of integers, and\n// returns a shortened string seed that is equivalent to the result key.\n//\nfunction mixkey(seed, key) {\n var stringseed = seed + '', smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] =\n mask & ((smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++));\n }\n return tostring(key);\n}\n\n//\n// autoseed()\n// Returns an object for autoseeding, using window.crypto and Node crypto\n// module if available.\n//\nfunction autoseed() {\n try {\n var out;\n if (nodecrypto && (out = nodecrypto.randomBytes)) {\n // The use of 'out' to remember randomBytes makes tight minified code.\n out = out(width);\n } else {\n out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n }\n return tostring(out);\n } catch (e) {\n var browser = global.navigator,\n plugins = browser && browser.plugins;\n return [+new Date, global, plugins, global.screen, tostring(pool)];\n }\n}\n\n//\n// tostring()\n// Converts an array of charcodes to a string\n//\nfunction tostring(a) {\n return String.fromCharCode.apply(0, a);\n}\n\n//\n// When seedrandom.js is loaded, we immediately mix a few bits\n// from the built-in RNG into the entropy pool. Because we do\n// not want to interfere with deterministic PRNG state later,\n// seedrandom will not call math.random on its own again after\n// initialization.\n//\nmixkey(math.random(), pool);\n\n//\n// Nodejs and AMD support: export the implementation as a module using\n// either convention.\n//\nif ((typeof module) == 'object' && module.exports) {\n module.exports = seedrandom;\n // When in node.js, try using crypto package for autoseeding.\n try {\n nodecrypto = require('crypto');\n } catch (ex) {}\n} else if ((typeof define) == 'function' && define.amd) {\n define(function() { return seedrandom; });\n} else {\n // When included as a plain script, set up Math.seedrandom global.\n math['seed' + rngname] = seedrandom;\n}\n\n\n// End anonymous scope, and pass initial values.\n})(\n // global: `self` in browsers (including strict mode and web workers),\n // otherwise `this` in Node and other environments\n (typeof self !== 'undefined') ? self : this,\n [], // pool: entropy pool starts empty\n Math // math: package containing random, pow, and seedrandom\n);\n","// A library of seedable RNGs implemented in Javascript.\n//\n// Usage:\n//\n// var seedrandom = require('seedrandom');\n// var random = seedrandom(1); // or any seed.\n// var x = random(); // 0 <= x < 1. Every bit is random.\n// var x = random.quick(); // 0 <= x < 1. 32 bits of randomness.\n\n// alea, a 53-bit multiply-with-carry generator by Johannes Baagøe.\n// Period: ~2^116\n// Reported to pass all BigCrush tests.\nvar alea = require('./lib/alea');\n\n// xor128, a pure xor-shift generator by George Marsaglia.\n// Period: 2^128-1.\n// Reported to fail: MatrixRank and LinearComp.\nvar xor128 = require('./lib/xor128');\n\n// xorwow, George Marsaglia's 160-bit xor-shift combined plus weyl.\n// Period: 2^192-2^32\n// Reported to fail: CollisionOver, SimpPoker, and LinearComp.\nvar xorwow = require('./lib/xorwow');\n\n// xorshift7, by François Panneton and Pierre L'ecuyer, takes\n// a different approach: it adds robustness by allowing more shifts\n// than Marsaglia's original three. It is a 7-shift generator\n// with 256 bits, that passes BigCrush with no systmatic failures.\n// Period 2^256-1.\n// No systematic BigCrush failures reported.\nvar xorshift7 = require('./lib/xorshift7');\n\n// xor4096, by Richard Brent, is a 4096-bit xor-shift with a\n// very long period that also adds a Weyl generator. It also passes\n// BigCrush with no systematic failures. Its long period may\n// be useful if you have many generators and need to avoid\n// collisions.\n// Period: 2^4128-2^32.\n// No systematic BigCrush failures reported.\nvar xor4096 = require('./lib/xor4096');\n\n// Tyche-i, by Samuel Neves and Filipe Araujo, is a bit-shifting random\n// number generator derived from ChaCha, a modern stream cipher.\n// https://eden.dei.uc.pt/~sneves/pubs/2011-snfa2.pdf\n// Period: ~2^127\n// No systematic BigCrush failures reported.\nvar tychei = require('./lib/tychei');\n\n// The original ARC4-based prng included in this library.\n// Period: ~2^1600\nvar sr = require('./seedrandom');\n\nsr.alea = alea;\nsr.xor128 = xor128;\nsr.xorwow = xorwow;\nsr.xorshift7 = xorshift7;\nsr.xor4096 = xor4096;\nsr.tychei = tychei;\n\nmodule.exports = sr;\n","import seedrandom from 'seedrandom';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n _setPrototypeOf(subClass, superClass);\n}\nfunction _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n return _setPrototypeOf(o, p);\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar RNG = /*#__PURE__*/function () {\n function RNG() {}\n var _proto = RNG.prototype;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _proto._seed = function _seed(seed, _opts) {\n // TODO: add entropy and stuff\n if (seed === (seed || 0)) {\n return seed;\n } else {\n var strSeed = '' + seed;\n var s = 0;\n for (var k = 0; k < strSeed.length; ++k) {\n s ^= strSeed.charCodeAt(k) | 0;\n }\n return s;\n }\n };\n return RNG;\n}();\n\nvar RNGFunction = /*#__PURE__*/function (_RNG) {\n _inheritsLoose(RNGFunction, _RNG);\n function RNGFunction(thunk, opts) {\n var _this;\n _this = _RNG.call(this) || this;\n _this._rng = void 0;\n _this.seed(thunk, opts);\n return _this;\n }\n var _proto = RNGFunction.prototype;\n _proto.next = function next() {\n return this._rng();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ;\n _proto.seed = function seed(thunk, _opts) {\n this._rng = thunk;\n };\n _proto.clone = function clone(_, opts) {\n return new RNGFunction(this._rng, opts);\n };\n _createClass(RNGFunction, [{\n key: \"name\",\n get: function get() {\n return 'function';\n }\n }]);\n return RNGFunction;\n}(RNG);\n\n/**\r\n * Construct an RNG with variable inputs. Used in calls to Random constructor\r\n * @param {...*} args - Distribution-specific arguments\r\n * @return RNG\r\n *\r\n * @example\r\n * new Random(RNGFactory(...args))\r\n */\nvar RNGFactory = (function () {\n var args = [].slice.call(arguments);\n var _args = args,\n _args$ = _args[0],\n arg0 = _args$ === void 0 ? 'default' : _args$;\n switch (typeof arg0) {\n case 'object':\n if (arg0 instanceof RNG) {\n return arg0;\n }\n break;\n case 'function':\n return new RNGFunction(arg0);\n case 'number':\n case 'string':\n default:\n return new RNGFunction(seedrandom.apply(void 0, args));\n }\n throw new Error(\"invalid RNG \\\"\" + arg0 + \"\\\"\");\n});\n\nvar uniform = (function (random, min, max) {\n if (min === void 0) {\n min = 0;\n }\n if (max === void 0) {\n max = 1;\n }\n return function () {\n return random.next() * (max - min) + min;\n };\n});\n\nfunction numberValidator(num) {\n return new NumberValidator(num);\n}\nvar NumberValidator = function NumberValidator(num) {\n var _this = this;\n this.n = void 0;\n this.isInt = function () {\n if (Number.isInteger(_this.n)) {\n return _this;\n }\n throw new Error(\"Expected number to be an integer, got \" + _this.n);\n };\n this.isPositive = function () {\n if (_this.n > 0) {\n return _this;\n }\n throw new Error(\"Expected number to be positive, got \" + _this.n);\n };\n this.lessThan = function (v) {\n if (_this.n < v) {\n return _this;\n }\n throw new Error(\"Expected number to be less than \" + v + \", got \" + _this.n);\n };\n this.greaterThanOrEqual = function (v) {\n if (_this.n >= v) {\n return _this;\n }\n throw new Error(\"Expected number to be greater than or equal to \" + v + \", got \" + _this.n);\n };\n this.greaterThan = function (v) {\n if (_this.n > v) {\n return _this;\n }\n throw new Error(\"Expected number to be greater than \" + v + \", got \" + _this.n);\n };\n this.n = num;\n};\n\nvar uniformInt = (function (random, min, max) {\n if (min === void 0) {\n min = 0;\n }\n if (max === void 0) {\n max = 1;\n }\n if (max === undefined) {\n max = min === undefined ? 1 : min;\n min = 0;\n }\n numberValidator(min).isInt();\n numberValidator(max).isInt();\n return function () {\n return Math.floor(random.next() * (max - min + 1) + min);\n };\n});\n\nvar uniformBoolean = (function (random) {\n return function () {\n return random.next() >= 0.5;\n };\n});\n\nvar normal = (function (random, mu, sigma) {\n if (mu === void 0) {\n mu = 0;\n }\n if (sigma === void 0) {\n sigma = 1;\n }\n return function () {\n var x, y, r;\n do {\n x = random.next() * 2 - 1;\n y = random.next() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);\n };\n});\n\nvar logNormal = (function (random, mu, sigma) {\n if (mu === void 0) {\n mu = 0;\n }\n if (sigma === void 0) {\n sigma = 1;\n }\n var normal = random.normal(mu, sigma);\n return function () {\n return Math.exp(normal());\n };\n});\n\nvar bernoulli = (function (random, p) {\n if (p === void 0) {\n p = 0.5;\n }\n numberValidator(p).greaterThanOrEqual(0).lessThan(1);\n return function () {\n return Math.floor(random.next() + p);\n };\n});\n\nvar binomial = (function (random, n, p) {\n if (n === void 0) {\n n = 1;\n }\n if (p === void 0) {\n p = 0.5;\n }\n numberValidator(n).isInt().isPositive();\n numberValidator(p).greaterThanOrEqual(0).lessThan(1);\n return function () {\n var i = 0;\n var x = 0;\n while (i++ < n) {\n if (random.next() < p) {\n x++;\n }\n }\n return x;\n };\n});\n\nvar geometric = (function (random, p) {\n if (p === void 0) {\n p = 0.5;\n }\n numberValidator(p).greaterThan(0).lessThan(1);\n var invLogP = 1.0 / Math.log(1.0 - p);\n return function () {\n return Math.floor(1 + Math.log(random.next()) * invLogP);\n };\n});\n\nvar logFactorialTable = [0.0, 0.0, 0.69314718055994529, 1.791759469228055, 3.1780538303479458, 4.7874917427820458, 6.5792512120101012, 8.5251613610654147, 10.604602902745251, 12.801827480081469];\nvar logFactorial = function logFactorial(k) {\n return logFactorialTable[k];\n};\nvar logSqrt2PI = 0.91893853320467267;\nvar poisson = (function (random, lambda) {\n if (lambda === void 0) {\n lambda = 1;\n }\n numberValidator(lambda).isPositive();\n if (lambda < 10) {\n // inversion method\n var expMean = Math.exp(-lambda);\n return function () {\n var p = expMean;\n var x = 0;\n var u = random.next();\n while (u > p) {\n u = u - p;\n p = lambda * p / ++x;\n }\n return x;\n };\n } else {\n // generative method\n var smu = Math.sqrt(lambda);\n var b = 0.931 + 2.53 * smu;\n var a = -0.059 + 0.02483 * b;\n var invAlpha = 1.1239 + 1.1328 / (b - 3.4);\n var vR = 0.9277 - 3.6224 / (b - 2);\n return function () {\n while (true) {\n var u = void 0;\n var v = random.next();\n if (v <= 0.86 * vR) {\n u = v / vR - 0.43;\n return Math.floor((2 * a / (0.5 - Math.abs(u)) + b) * u + lambda + 0.445);\n }\n if (v >= vR) {\n u = random.next() - 0.5;\n } else {\n u = v / vR - 0.93;\n u = (u < 0 ? -0.5 : 0.5) - u;\n v = random.next() * vR;\n }\n var us = 0.5 - Math.abs(u);\n if (us < 0.013 && v > us) {\n continue;\n }\n var k = Math.floor((2 * a / us + b) * u + lambda + 0.445);\n v = v * invAlpha / (a / (us * us) + b);\n if (k >= 10) {\n var t = (k + 0.5) * Math.log(lambda / k) - lambda - logSqrt2PI + k - (1 / 12.0 - (1 / 360.0 - 1 / (1260.0 * k * k)) / (k * k)) / k;\n if (Math.log(v * smu) <= t) {\n return k;\n }\n } else if (k >= 0) {\n var _logFactorial;\n var f = (_logFactorial = logFactorial(k)) != null ? _logFactorial : 0;\n if (Math.log(v) <= k * Math.log(lambda) - lambda - f) {\n return k;\n }\n }\n }\n };\n }\n});\n\nvar exponential = (function (random, lambda) {\n if (lambda === void 0) {\n lambda = 1;\n }\n numberValidator(lambda).isPositive();\n return function () {\n return -Math.log(1 - random.next()) / lambda;\n };\n});\n\nvar irwinHall = (function (random, n) {\n if (n === void 0) {\n n = 1;\n }\n numberValidator(n).isInt().greaterThanOrEqual(0);\n return function () {\n var sum = 0;\n for (var i = 0; i < n; ++i) {\n sum += random.next();\n }\n return sum;\n };\n});\n\nvar bates = (function (random, n) {\n if (n === void 0) {\n n = 1;\n }\n numberValidator(n).isInt().isPositive();\n var irwinHall = random.irwinHall(n);\n return function () {\n return irwinHall() / n;\n };\n});\n\nvar pareto = (function (random, alpha) {\n if (alpha === void 0) {\n alpha = 1;\n }\n numberValidator(alpha).greaterThanOrEqual(0);\n var invAlpha = 1.0 / alpha;\n return function () {\n return 1.0 / Math.pow(1.0 - random.next(), invAlpha);\n };\n});\n\nvar RNGMathRandom = /*#__PURE__*/function (_RNG) {\n _inheritsLoose(RNGMathRandom, _RNG);\n function RNGMathRandom() {\n return _RNG.apply(this, arguments) || this;\n }\n var _proto = RNGMathRandom.prototype;\n _proto.next = function next() {\n return Math.random();\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ;\n _proto.seed = function seed(_seed, _opts) {\n // intentionally empty\n };\n _proto.clone = function clone() {\n return new RNGMathRandom();\n };\n _createClass(RNGMathRandom, [{\n key: \"name\",\n get: function get() {\n return 'default';\n }\n }]);\n return RNGMathRandom;\n}(RNG);\n\n/**\r\n * Seedable random number generator supporting many common distributions.\r\n *\r\n * Defaults to Math.random as its underlying pseudorandom number generator.\r\n *\r\n * @name Random\r\n * @class\r\n *\r\n * @param {RNG|function} [rng=Math.random] - Underlying pseudorandom number generator.\r\n */\nvar Random = /*#__PURE__*/function () {\n function Random(rng) {\n var _this = this;\n this._rng = void 0;\n this._patch = void 0;\n this._cache = {};\n this.next = function () {\n return _this._rng.next();\n };\n this[\"float\"] = function (min, max) {\n return _this.uniform(min, max)();\n };\n this[\"int\"] = function (min, max) {\n return _this.uniformInt(min, max)();\n };\n this.integer = function (min, max) {\n return _this.uniformInt(min, max)();\n };\n this.bool = function () {\n return _this.uniformBoolean()();\n };\n this[\"boolean\"] = function () {\n return _this.uniformBoolean()();\n };\n this.uniform = function (min, max) {\n return _this._memoize('uniform', uniform, min, max);\n };\n this.uniformInt = function (min, max) {\n return _this._memoize('uniformInt', uniformInt, min, max);\n };\n this.uniformBoolean = function () {\n return _this._memoize('uniformBoolean', uniformBoolean);\n };\n this.normal = function (mu, sigma) {\n return normal(_this, mu, sigma);\n };\n this.logNormal = function (mu, sigma) {\n return logNormal(_this, mu, sigma);\n };\n this.bernoulli = function (p) {\n return bernoulli(_this, p);\n };\n this.binomial = function (n, p) {\n return binomial(_this, n, p);\n };\n this.geometric = function (p) {\n return geometric(_this, p);\n };\n this.poisson = function (lambda) {\n return poisson(_this, lambda);\n };\n this.exponential = function (lambda) {\n return exponential(_this, lambda);\n };\n this.irwinHall = function (n) {\n return irwinHall(_this, n);\n };\n this.bates = function (n) {\n return bates(_this, n);\n };\n this.pareto = function (alpha) {\n return pareto(_this, alpha);\n };\n if (rng && rng instanceof RNG) {\n this.use(rng);\n } else {\n this.use(new RNGMathRandom());\n }\n this._cache = {};\n }\n /**\r\n * @member {RNG} Underlying pseudo-random number generator\r\n */\n var _proto = Random.prototype;\n /**\r\n * Creates a new `Random` instance, optionally specifying parameters to\r\n * set a new seed.\r\n *\r\n * @see RNG.clone\r\n *\r\n * @param {string} [seed] - Optional seed for new RNG.\r\n * @param {object} [opts] - Optional config for new RNG options.\r\n * @return {Random}\r\n */\n _proto.clone = function clone() {\n var args = [].slice.call(arguments);\n if (args.length) {\n return new Random(RNGFactory.apply(void 0, args));\n } else {\n return new Random(this.rng.clone());\n }\n }\n /**\r\n * Sets the underlying pseudorandom number generator used via\r\n * either an instance of `seedrandom`, a custom instance of RNG\r\n * (for PRNG plugins), or a string specifying the PRNG to use\r\n * along with an optional `seed` and `opts` to initialize the\r\n * RNG.\r\n *\r\n * @example\r\n * import random from 'random'\r\n *\r\n * random.use('example_seedrandom_string')\r\n * // or\r\n * random.use(seedrandom('kittens'))\r\n * // or\r\n * random.use(Math.random)\r\n *\r\n * @param {...*} args\r\n */;\n _proto.use = function use() {\n this._rng = RNGFactory.apply(void 0, [].slice.call(arguments));\n }\n /**\r\n * Patches `Math.random` with this Random instance's PRNG.\r\n */;\n _proto.patch = function patch() {\n if (this._patch) {\n throw new Error('Math.random already patched');\n }\n this._patch = Math.random;\n Math.random = this.uniform();\n }\n /**\r\n * Restores a previously patched `Math.random` to its original value.\r\n */;\n _proto.unpatch = function unpatch() {\n if (this._patch) {\n Math.random = this._patch;\n delete this._patch;\n }\n }\n // --------------------------------------------------------------------------\n // Uniform utility functions\n // --------------------------------------------------------------------------\n /**\r\n * Convenience wrapper around `this.rng.next()`\r\n *\r\n * Returns a floating point number in [0, 1).\r\n *\r\n * @return {number}\r\n */;\n /**\r\n * Returns an item chosen uniformly at trandom from the given array.\r\n *\r\n * Convence wrapper around `random.uniformInt()`\r\n *\r\n * @param {Array<T>} [array] - Lower bound (integer, inclusive)\r\n * @return {T | undefined}\r\n */\n _proto.choice = function choice(array) {\n if (!Array.isArray(array)) {\n throw new Error(\"Random.choice expected input to be an array, got \" + typeof array);\n }\n var length = array == null ? void 0 : array.length;\n if (length > 0) {\n var index = this.uniformInt(0, length - 1)();\n return array[index];\n } else {\n return undefined;\n }\n }\n // --------------------------------------------------------------------------\n // Uniform distributions\n // --------------------------------------------------------------------------\n /**\r\n * Generates a [Continuous uniform distribution](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)).\r\n *\r\n * @param {number} [min=0] - Lower bound (float, inclusive)\r\n * @param {number} [max=1] - Upper bound (float, exclusive)\r\n * @return {function}\r\n */;\n // --------------------------------------------------------------------------\n // Internal\n // --------------------------------------------------------------------------\n /**\r\n * Memoizes distributions to ensure they're only created when necessary.\r\n *\r\n * Returns a thunk which that returns independent, identically distributed\r\n * samples from the specified distribution.\r\n *\r\n * @private\r\n *\r\n * @param {string} label - Name of distribution\r\n * @param {function} getter - Function which generates a new distribution\r\n * @param {...*} args - Distribution-specific arguments\r\n *\r\n * @return {function}\r\n */\n _proto._memoize = function _memoize(label, getter) {\n var args = [].slice.call(arguments, 2);\n var key = \"\" + args.join(';');\n var value = this._cache[label];\n if (value === undefined || value.key !== key) {\n value = {\n key: key,\n distribution: getter.apply(void 0, [this].concat(args))\n };\n this._cache[label] = value;\n }\n return value.distribution;\n };\n _createClass(Random, [{\n key: \"rng\",\n get: function get() {\n return this._rng;\n }\n }]);\n return Random;\n}();\n// defaults to Math.random as its RNG\nvar random = new Random();\n\nexport { RNG, RNGFactory, Random, random as default };\n//# sourceMappingURL=random.module.js.map\n","import { scaleLinear } from 'd3-scale'\nimport { mat3 } from 'gl-matrix'\nimport { Random } from 'random'\nimport { getRgbaColor, rgbToBrightness } from '@/graph/helper'\nimport { hoveredPointRingOpacity, focusedPointRingOpacity, defaultConfigValues } from '@/graph/variables'\nimport type { GraphConfigInterface } from '@/graph/config'\n\nexport const ALPHA_MIN = 0.001\nexport const MAX_POINT_SIZE = 64\n\n/**\n * Maximum number of executions to delay before performing hover detection.\n * This threshold prevents excessive hover detection calls for performance optimization.\n * The `findHoveredItem` method will skip actual detection until this count is reached.\n */\nexport const MAX_HOVER_DETECTION_DELAY = 4\n\nexport type Hovered = { index: number; position: [ number, number ] }\ntype Focused = { index: number }\n\nexport class Store {\n public pointsTextureSize = 0\n public linksTextureSize = 0\n public alpha = 1\n public transform = mat3.create()\n public screenSize: [number, number] = [0, 0]\n public mousePosition = [0, 0]\n public screenMousePosition = [0, 0]\n public selectedArea = [[0, 0], [0, 0]]\n public isSimulationRunning = false\n public simulationProgress = 0\n public selectedIndices: Float32Array | null = null\n public maxPointSize = MAX_POINT_SIZE\n public hoveredPoint: Hovered | undefined = undefined\n public focusedPoint: Focused | undefined = undefined\n public draggingPointIndex: number | undefined = undefined\n public hoveredLinkIndex: number | undefined = undefined\n public adjustedSpaceSize = defaultConfigValues.spaceSize\n public isSpaceKeyPressed = false\n public div: HTMLDivElement | undefined\n public webglMaxTextureSize = 16384 // Default fallback value\n\n public hoveredPointRingColor = [1, 1, 1, hoveredPointRingOpacity]\n public focusedPointRingColor = [1, 1, 1, focusedPointRingOpacity]\n public hoveredLinkColor = [-1, -1, -1, -1]\n // -1 means that the color is not set\n public greyoutPointColor = [-1, -1, -1, -1]\n // If backgroundColor is dark, isDarkenGreyout is true\n public isDarkenGreyout = false\n // Whether link hovering is enabled based on configured event handlers\n public isLinkHoveringEnabled = false\n private alphaTarget = 0\n private scalePointX = scaleLinear()\n private scalePointY = scaleLinear()\n private random = new Random()\n private _backgroundColor: [number, number, number, number] = [0, 0, 0, 0]\n\n public get backgroundColor (): [number, number, number, number] {\n return this._backgroundColor\n }\n\n public set backgroundColor (color: [number, number, number, number]) {\n this._backgroundColor = color\n const brightness = rgbToBrightness(color[0], color[1], color[2])\n document.documentElement.style.setProperty('--cosmosgl-attribution-color', brightness > 0.65 ? 'black' : 'white')\n document.documentElement.style.setProperty('--cosmosgl-error-message-color', brightness > 0.65 ? 'black' : 'white')\n if (this.div) this.div.style.backgroundColor = `rgba(${color[0] * 255}, ${color[1] * 255}, ${color[2] * 255}, ${color[3]})`\n\n this.isDarkenGreyout = brightness < 0.65\n }\n\n public addRandomSeed (seed: number | string): void {\n this.random = this.random.clone(seed)\n }\n\n public getRandomFloat (min: number, max: number): number {\n return this.random.float(min, max)\n }\n\n /**\n * If the config parameter `spaceSize` exceeds the limits of WebGL,\n * it reduces the space size without changing the config parameter.\n */\n public adjustSpaceSize (configSpaceSize: number, webglMaxTextureSize: number): void {\n if (configSpaceSize >= webglMaxTextureSize) {\n this.adjustedSpaceSize = webglMaxTextureSize / 2\n console.warn(`The \\`spaceSize\\` has been reduced to ${this.adjustedSpaceSize} due to WebGL limits`)\n } else this.adjustedSpaceSize = configSpaceSize\n }\n\n /**\n * Sets the WebGL texture size limit for use in atlas creation and other texture operations.\n */\n public setWebGLMaxTextureSize (webglMaxTextureSize: number): void {\n this.webglMaxTextureSize = webglMaxTextureSize\n }\n\n public updateScreenSize (width: number, height: number): void {\n const { adjustedSpaceSize } = this\n this.screenSize = [width, height]\n this.scalePointX\n .domain([0, adjustedSpaceSize])\n .range([(width - adjustedSpaceSize) / 2, (width + adjustedSpaceSize) / 2])\n this.scalePointY\n .domain([adjustedSpaceSize, 0])\n .range([(height - adjustedSpaceSize) / 2, (height + adjustedSpaceSize) / 2])\n }\n\n public scaleX (x: number): number {\n return this.scalePointX(x)\n }\n\n public scaleY (y: number): number {\n return this.scalePointY(y)\n }\n\n public setHoveredPointRingColor (color: string | [number, number, number, number]): void {\n const convertedRgba = getRgbaColor(color)\n this.hoveredPointRingColor[0] = convertedRgba[0]\n this.hoveredPointRingColor[1] = convertedRgba[1]\n this.hoveredPointRingColor[2] = convertedRgba[2]\n }\n\n public setFocusedPointRingColor (color: string | [number, number, number, number]): void {\n const convertedRgba = getRgbaColor(color)\n this.focusedPointRingColor[0] = convertedRgba[0]\n this.focusedPointRingColor[1] = convertedRgba[1]\n this.focusedPointRingColor[2] = convertedRgba[2]\n }\n\n public setGreyoutPointColor (color: string | [number, number, number, number] | undefined): void {\n if (color === undefined) {\n this.greyoutPointColor = [-1, -1, -1, -1]\n return\n }\n const convertedRgba = getRgbaColor(color)\n this.greyoutPointColor[0] = convertedRgba[0]\n this.greyoutPointColor[1] = convertedRgba[1]\n this.greyoutPointColor[2] = convertedRgba[2]\n this.greyoutPointColor[3] = convertedRgba[3]\n }\n\n public updateLinkHoveringEnabled (config: Pick<GraphConfigInterface, 'onLinkClick' | 'onLinkMouseOver' | 'onLinkMouseOut'>): void {\n this.isLinkHoveringEnabled = !!(config.onLinkClick || config.onLinkMouseOver || config.onLinkMouseOut)\n if (!this.isLinkHoveringEnabled) {\n this.hoveredLinkIndex = undefined\n }\n }\n\n public setHoveredLinkColor (color?: string | [number, number, number, number]): void {\n if (color === undefined) {\n this.hoveredLinkColor = [-1, -1, -1, -1]\n return\n }\n const convertedRgba = getRgbaColor(color)\n this.hoveredLinkColor[0] = convertedRgba[0]\n this.hoveredLinkColor[1] = convertedRgba[1]\n this.hoveredLinkColor[2] = convertedRgba[2]\n this.hoveredLinkColor[3] = convertedRgba[3]\n }\n\n public setFocusedPoint (index?: number): void {\n if (index !== undefined) {\n this.focusedPoint = { index }\n } else this.focusedPoint = undefined\n }\n\n public addAlpha (decay: number): number {\n return (this.alphaTarget - this.alpha) * this.alphaDecay(decay)\n }\n\n private alphaDecay = (decay: number): number => 1 - Math.pow(ALPHA_MIN, 1 / decay)\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","import { zoom, ZoomTransform, zoomIdentity, D3ZoomEvent } from 'd3-zoom'\nimport { extent } from 'd3-array'\nimport { mat3 } from 'gl-matrix'\nimport { Store } from '@/graph/modules/Store'\nimport { GraphConfigInterface } from '@/graph/config'\nimport { clamp } from '@/graph/helper'\n\nexport class Zoom {\n public readonly store: Store\n public readonly config: GraphConfigInterface\n public eventTransform = zoomIdentity\n public behavior = zoom<HTMLCanvasElement, undefined>()\n .scaleExtent([0.001, Infinity])\n .on('start', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => {\n this.isRunning = true\n const userDriven = !!e.sourceEvent\n this.config?.onZoomStart?.(e, userDriven)\n })\n .on('zoom', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => {\n this.eventTransform = e.transform\n const { eventTransform: { x, y, k }, store: { transform, screenSize } } = this\n const w = screenSize[0]\n const h = screenSize[1]\n if (!w || !h) return\n mat3.projection(transform, w, h)\n mat3.translate(transform, transform, [x, y])\n mat3.scale(transform, transform, [k, k])\n mat3.translate(transform, transform, [w / 2, h / 2])\n mat3.scale(transform, transform, [w / 2, h / 2])\n mat3.scale(transform, transform, [1, -1])\n\n const userDriven = !!e.sourceEvent\n this.config?.onZoom?.(e, userDriven)\n })\n .on('end', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => {\n this.isRunning = false\n\n const userDriven = !!e.sourceEvent\n this.config?.onZoomEnd?.(e, userDriven)\n })\n\n public isRunning = false\n\n public constructor (store: Store, config: GraphConfigInterface) {\n this.store = store\n this.config = config\n }\n\n /**\n * Get the zoom transform that will fit the given point positions into the viewport\n *\n * @param positions An array of point positions in the form `[x, y]`\n * @param scale An optional scale factor to apply to the transform\n * @param padding Padding around the viewport in percentage\n */\n public getTransform (positions: [number, number][], scale?: number, padding = 0.1): ZoomTransform {\n if (positions.length === 0) return this.eventTransform\n const { store: { screenSize } } = this\n const width = screenSize[0]\n const height = screenSize[1]\n const xExtent = extent(positions.map(d => d[0])) as [number, number]\n const yExtent = extent(positions.map(d => d[1])) as [number, number]\n xExtent[0] = this.store.scaleX(xExtent[0])\n xExtent[1] = this.store.scaleX(xExtent[1])\n yExtent[0] = this.store.scaleY(yExtent[0])\n yExtent[1] = this.store.scaleY(yExtent[1])\n // Adjust extent with one screen pixel if one point coordinate is set\n if (xExtent[0] === xExtent[1]) {\n xExtent[0] -= 0.5\n xExtent[1] += 0.5\n }\n if (yExtent[0] === yExtent[1]) {\n yExtent[0] += 0.5\n yExtent[1] -= 0.5\n }\n\n const xScale = (width * (1 - padding * 2)) / (xExtent[1] - xExtent[0])\n const yScale = (height * (1 - padding * 2)) / (yExtent[0] - yExtent[1])\n const clampedScale = clamp(scale ?? Math.min(xScale, yScale), ...this.behavior.scaleExtent())\n const xCenter = (xExtent[1] + xExtent[0]) / 2\n const yCenter = (yExtent[1] + yExtent[0]) / 2\n const translateX = width / 2 - xCenter * clampedScale\n const translateY = height / 2 - yCenter * clampedScale\n\n const transform = zoomIdentity\n .translate(translateX, translateY)\n .scale(clampedScale)\n\n return transform\n }\n\n public getDistanceToPoint (position: [number, number]): number {\n const { x, y, k } = this.eventTransform\n const point = this.getTransform([position], k)\n const dx = x - point.x\n const dy = y - point.y\n return Math.sqrt(dx * dx + dy * dy)\n }\n\n public getMiddlePointTransform (position: [number, number]): ZoomTransform {\n const { store: { screenSize }, eventTransform: { x, y, k } } = this\n const width = screenSize[0]\n const height = screenSize[1]\n const currX = (width / 2 - x) / k\n const currY = (height / 2 - y) / k\n const pointX = this.store.scaleX(position[0])\n const pointY = this.store.scaleY(position[1])\n const centerX = (currX + pointX) / 2\n const centerY = (currY + pointY) / 2\n\n const scale = 1\n const translateX = width / 2 - centerX * scale\n const translateY = height / 2 - centerY * scale\n\n return zoomIdentity\n .translate(translateX, translateY)\n .scale(scale)\n }\n\n public convertScreenToSpacePosition (screenPosition: [number, number]): [number, number] {\n const { eventTransform: { x, y, k }, store: { screenSize } } = this\n const w = screenSize[0]\n const h = screenSize[1]\n const invertedX = (screenPosition[0] - x) / k\n const invertedY = (screenPosition[1] - y) / k\n const spacePosition = [invertedX, (h - invertedY)] as [number, number]\n spacePosition[0] -= (w - this.store.adjustedSpaceSize) / 2\n spacePosition[1] -= (h - this.store.adjustedSpaceSize) / 2\n return spacePosition\n }\n\n public convertSpaceToScreenPosition (spacePosition: [number, number]): [number, number] {\n const screenPointX = this.eventTransform.applyX(this.store.scaleX(spacePosition[0]))\n const screenPointY = this.eventTransform.applyY(this.store.scaleY(spacePosition[1]))\n return [screenPointX, screenPointY]\n }\n\n public convertSpaceToScreenRadius (spaceRadius: number): number {\n const { config: { scalePointsOnZoom }, store: { maxPointSize }, eventTransform: { k } } = this\n let size = spaceRadius * 2\n if (scalePointsOnZoom) {\n size *= k\n } else {\n size *= Math.min(5.0, Math.max(1.0, k * 0.01))\n }\n return Math.min(size, maxPointSize) / 2\n }\n}\n","import { drag } from 'd3-drag'\nimport { Store } from '@/graph/modules/Store'\nimport { GraphConfigInterface } from '@/graph/config'\n\nexport class Drag {\n public readonly store: Store\n public readonly config: GraphConfigInterface\n public isActive = false\n public behavior = drag<HTMLCanvasElement, undefined>()\n .subject((event) => {\n return this.store.hoveredPoint && !this.store.isSpaceKeyPressed ? { x: event.x, y: event.y } : undefined\n })\n .on('start', (e) => {\n if (this.store.hoveredPoint) {\n this.store.draggingPointIndex = this.store.hoveredPoint.index\n this.isActive = true\n this.config?.onDragStart?.(e)\n }\n })\n .on('drag', (e) => {\n this.config?.onDrag?.(e)\n })\n .on('end', (e) => {\n this.isActive = false\n this.store.draggingPointIndex = undefined\n this.config?.onDragEnd?.(e)\n })\n\n public constructor (store: Store, config: GraphConfigInterface) {\n this.store = store\n this.config = config\n }\n}\n","/**\n * Creates and appends an error message element to the container\n * @param container The HTML element to append the error message to\n * @returns The created error div element\n */\nexport function createWebGLErrorMessage (container: HTMLElement): HTMLDivElement {\n const errorDiv = document.createElement('div')\n errorDiv.style.cssText = `\n color: var(--cosmosgl-error-message-color);\n padding: 0em 2em;\n position: absolute;\n top: 50%; left: 0; right: 0;\n transform: translateY(-50%);\n z-index: 1000;\n font-family: inherit;\n font-size: 1rem;\n text-align: center;\n user-select: none;\n `\n errorDiv.textContent = 'Sorry, your device or browser does not support the required WebGL features for this visualization'\n container.appendChild(errorDiv)\n return errorDiv\n}\n","import { select, Selection } from 'd3-selection'\nimport 'd3-transition'\nimport { easeQuadInOut, easeQuadIn, easeQuadOut } from 'd3-ease'\nimport { D3ZoomEvent } from 'd3-zoom'\nimport { D3DragEvent } from 'd3-drag'\nimport regl from 'regl'\nimport { GraphConfig, GraphConfigInterface } from '@/graph/config'\nimport { getRgbaColor, readPixels, sanitizeHtml } from '@/graph/helper'\nimport { ForceCenter } from '@/graph/modules/ForceCenter'\nimport { ForceGravity } from '@/graph/modules/ForceGravity'\nimport { ForceLink, LinkDirection } from '@/graph/modules/ForceLink'\nimport { ForceManyBody } from '@/graph/modules/ForceManyBody'\nimport { ForceManyBodyQuadtree } from '@/graph/modules/ForceManyBodyQuadtree'\nimport { ForceMouse } from '@/graph/modules/ForceMouse'\nimport { Clusters } from '@/graph/modules/Clusters'\nimport { FPSMonitor } from '@/graph/modules/FPSMonitor'\nimport { GraphData } from '@/graph/modules/GraphData'\nimport { Lines } from '@/graph/modules/Lines'\nimport { Points } from '@/graph/modules/Points'\nimport { Store, ALPHA_MIN, MAX_POINT_SIZE, MAX_HOVER_DETECTION_DELAY, type Hovered } from '@/graph/modules/Store'\nimport { Zoom } from '@/graph/modules/Zoom'\nimport { Drag } from '@/graph/modules/Drag'\nimport { defaultConfigValues, defaultScaleToZoom, defaultGreyoutPointColor, defaultBackgroundColor } from '@/graph/variables'\nimport { createWebGLErrorMessage } from './graph/utils/error-message'\n\nexport class Graph {\n public config = new GraphConfig()\n public graph = new GraphData(this.config)\n private canvas: HTMLCanvasElement\n private attributionDivElement: HTMLElement | undefined\n private canvasD3Selection: Selection<HTMLCanvasElement, undefined, null, undefined> | undefined\n private reglInstance: regl.Regl | undefined\n private requestAnimationFrameId = 0\n private isRightClickMouse = false\n\n private store = new Store()\n private points: Points | undefined\n private lines: Lines | undefined\n private forceGravity: ForceGravity | undefined\n private forceCenter: ForceCenter | undefined\n private forceManyBody: ForceManyBody | ForceManyBodyQuadtree | undefined\n private forceLinkIncoming: ForceLink | undefined\n private forceLinkOutgoing: ForceLink | undefined\n private forceMouse: ForceMouse | undefined\n private clusters: Clusters | undefined\n private zoomInstance = new Zoom(this.store, this.config)\n private dragInstance = new Drag(this.store, this.config)\n\n private fpsMonitor: FPSMonitor | undefined\n\n private currentEvent: D3ZoomEvent<HTMLCanvasElement, undefined> | D3DragEvent<HTMLCanvasElement, undefined, Hovered> | MouseEvent | undefined\n /**\n * The value of `_findHoveredItemExecutionCount` is incremented by 1 on each animation frame.\n * When the counter reaches MAX_HOVER_DETECTION_DELAY (default 4), it is reset to 0 and the `findHoveredPoint` or `findHoveredLine` method is executed.\n */\n private _findHoveredItemExecutionCount = 0\n /**\n * If the mouse is not on the Canvas, the `findHoveredPoint` or `findHoveredLine` method will not be executed.\n */\n private _isMouseOnCanvas = false\n /**\n * After setting data and render graph at a first time, the fit logic will run\n * */\n private _isFirstRenderAfterInit = true\n private _fitViewOnInitTimeoutID: number | undefined\n\n private isPointPositionsUpdateNeeded = false\n private isPointColorUpdateNeeded = false\n private isPointSizeUpdateNeeded = false\n private isPointShapeUpdateNeeded = false\n private isPointImageIndicesUpdateNeeded = false\n private isLinksUpdateNeeded = false\n private isLinkColorUpdateNeeded = false\n private isLinkWidthUpdateNeeded = false\n private isLinkArrowUpdateNeeded = false\n private isPointClusterUpdateNeeded = false\n private isForceManyBodyUpdateNeeded = false\n private isForceLinkUpdateNeeded = false\n private isForceCenterUpdateNeeded = false\n private isPointImageSizesUpdateNeeded = false\n\n private _isDestroyed = false\n\n public constructor (div: HTMLDivElement, config?: GraphConfigInterface) {\n if (config) this.config.init(config)\n\n this.store.div = div\n const canvas = document.createElement('canvas')\n canvas.style.width = '100%'\n canvas.style.height = '100%'\n this.store.div.appendChild(canvas)\n this.addAttribution()\n const w = canvas.clientWidth\n const h = canvas.clientHeight\n\n canvas.width = w * this.config.pixelRatio\n canvas.height = h * this.config.pixelRatio\n\n this.canvas = canvas\n\n let reglInstance: regl.Regl | undefined\n try {\n reglInstance = regl({\n canvas: this.canvas,\n attributes: {\n antialias: false,\n preserveDrawingBuffer: true,\n },\n extensions: ['OES_texture_float', 'ANGLE_instanced_arrays'],\n })\n } catch (e) {\n createWebGLErrorMessage(this.store.div)\n this._isDestroyed = true\n return\n }\n this.reglInstance = reglInstance\n\n this.store.adjustSpaceSize(this.config.spaceSize, this.reglInstance.limits.maxTextureSize)\n this.store.setWebGLMaxTextureSize(this.reglInstance.limits.maxTextureSize)\n this.store.updateScreenSize(w, h)\n\n this.canvasD3Selection = select<HTMLCanvasElement, undefined>(this.canvas)\n this.canvasD3Selection\n .on('mouseenter.cosmos', () => { this._isMouseOnCanvas = true })\n .on('mousemove.cosmos', () => { this._isMouseOnCanvas = true })\n .on('mouseleave.cosmos', (event) => {\n this._isMouseOnCanvas = false\n this.currentEvent = event\n\n // Clear point hover state and trigger callback if needed\n if (this.store.hoveredPoint !== undefined && this.config.onPointMouseOut) {\n this.config.onPointMouseOut(event)\n }\n\n // Clear link hover state and trigger callback if needed\n if (this.store.hoveredLinkIndex !== undefined && this.config.onLinkMouseOut) {\n this.config.onLinkMouseOut(event)\n }\n\n // Reset right-click flag\n this.isRightClickMouse = false\n\n // Clear hover states\n this.store.hoveredPoint = undefined\n this.store.hoveredLinkIndex = undefined\n\n // Update cursor style after clearing hover states\n this.updateCanvasCursor()\n })\n select(document)\n .on('keydown.cosmos', (event) => { if (event.code === 'Space') this.store.isSpaceKeyPressed = true })\n .on('keyup.cosmos', (event) => { if (event.code === 'Space') this.store.isSpaceKeyPressed = false })\n this.zoomInstance.behavior\n .on('start.detect', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => { this.currentEvent = e })\n .on('zoom.detect', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => {\n const userDriven = !!e.sourceEvent\n if (userDriven) this.updateMousePosition(e.sourceEvent)\n this.currentEvent = e\n })\n .on('end.detect', (e: D3ZoomEvent<HTMLCanvasElement, undefined>) => { this.currentEvent = e })\n this.dragInstance.behavior\n .on('start.detect', (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => {\n this.currentEvent = e\n this.updateCanvasCursor()\n })\n .on('drag.detect', (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => {\n if (this.dragInstance.isActive) {\n this.updateMousePosition(e)\n }\n this.currentEvent = e\n })\n .on('end.detect', (e: D3DragEvent<HTMLCanvasElement, undefined, Hovered>) => {\n this.currentEvent = e\n this.updateCanvasCursor()\n })\n this.canvasD3Selection\n .call(this.dragInstance.behavior)\n .call(this.zoomInstance.behavior)\n .on('click', this.onClick.bind(this))\n .on('mousemove', this.onMouseMove.bind(this))\n .on('contextmenu', this.onRightClickMouse.bind(this))\n if (!this.config.enableZoom || !this.config.enableDrag) this.updateZoomDragBehaviors()\n this.setZoomLevel(this.config.initialZoomLevel ?? 1)\n\n this.store.maxPointSize = (this.reglInstance.limits.pointSizeDims[1] ?? MAX_POINT_SIZE) / this.config.pixelRatio\n\n // Initialize simulation state based on enableSimulation config\n // If simulation is disabled, start with isSimulationRunning = false\n this.store.isSimulationRunning = this.config.enableSimulation\n\n this.points = new Points(this.reglInstance, this.config, this.store, this.graph)\n this.lines = new Lines(this.reglInstance, this.config, this.store, this.graph, this.points)\n if (this.config.enableSimulation) {\n this.forceGravity = new ForceGravity(this.reglInstance, this.config, this.store, this.graph, this.points)\n this.forceCenter = new ForceCenter(this.reglInstance, this.config, this.store, this.graph, this.points)\n this.forceManyBody = this.config.useClassicQuadtree\n ? new ForceManyBodyQuadtree(this.reglInstance, this.config, this.store, this.graph, this.points)\n : new ForceManyBody(this.reglInstance, this.config, this.store, this.graph, this.points)\n this.forceLinkIncoming = new ForceLink(this.reglInstance, this.config, this.store, this.graph, this.points)\n this.forceLinkOutgoing = new ForceLink(this.reglInstance, this.config, this.store, this.graph, this.points)\n this.forceMouse = new ForceMouse(this.reglInstance, this.config, this.store, this.graph, this.points)\n }\n this.clusters = new Clusters(this.reglInstance, this.config, this.store, this.graph, this.points)\n\n this.store.backgroundColor = getRgbaColor(this.config.backgroundColor)\n this.store.setHoveredPointRingColor(this.config.hoveredPointRingColor ?? defaultConfigValues.hoveredPointRingColor)\n this.store.setFocusedPointRingColor(this.config.focusedPointRingColor ?? defaultConfigValues.focusedPointRingColor)\n if (this.config.focusedPointIndex !== undefined) {\n this.store.setFocusedPoint(this.config.focusedPointIndex)\n }\n this.store.setGreyoutPointColor(this.config.pointGreyoutColor ?? defaultGreyoutPointColor)\n this.store.setHoveredLinkColor(this.config.hoveredLinkColor ?? defaultConfigValues.hoveredLinkColor)\n\n this.store.updateLinkHoveringEnabled(this.config)\n\n if (this.config.showFPSMonitor) this.fpsMonitor = new FPSMonitor(this.canvas)\n\n if (this.config.randomSeed !== undefined) this.store.addRandomSeed(this.config.randomSeed)\n }\n\n /**\n * Returns the current simulation progress\n */\n public get progress (): number {\n if (this._isDestroyed) return 0\n return this.store.simulationProgress\n }\n\n /**\n * A value that gives information about the running simulation status.\n */\n public get isSimulationRunning (): boolean {\n if (this._isDestroyed) return false\n return this.store.isSimulationRunning\n }\n\n /**\n * The maximum point size.\n * This value is the maximum size of the `gl.POINTS` primitive that WebGL can render on the user's hardware.\n */\n public get maxPointSize (): number {\n if (this._isDestroyed) return 0\n return this.store.maxPointSize\n }\n\n /**\n * Set or update Cosmos configuration. The changes will be applied in real time.\n * @param config Cosmos configuration object.\n */\n public setConfig (config: Partial<GraphConfigInterface>): void {\n if (this._isDestroyed || !this.reglInstance || !this.points || !this.lines || !this.clusters) return\n const prevConfig = { ...this.config }\n this.config.init(config)\n if ((prevConfig.pointDefaultColor !== this.config.pointDefaultColor) ||\n (prevConfig.pointColor !== this.config.pointColor)) {\n this.graph.updatePointColor()\n this.points.updateColor()\n }\n if (prevConfig.pointSize !== this.config.pointSize) {\n this.graph.updatePointSize()\n this.points.updateSize()\n }\n if ((prevConfig.linkDefaultColor !== this.config.linkDefaultColor) ||\n (prevConfig.linkColor !== this.config.linkColor)) {\n this.graph.updateLinkColor()\n this.lines.updateColor()\n }\n if (prevConfig.linkWidth !== this.config.linkWidth) {\n this.graph.updateLinkWidth()\n this.lines.updateWidth()\n }\n if (prevConfig.linkArrows !== this.config.linkArrows) {\n this.graph.updateArrows()\n this.lines.updateArrow()\n }\n if (prevConfig.curvedLinkSegments !== this.config.curvedLinkSegments ||\n prevConfig.curvedLinks !== this.config.curvedLinks) {\n this.lines.updateCurveLineGeometry()\n }\n if (prevConfig.backgroundColor !== this.config.backgroundColor) {\n this.store.backgroundColor = getRgbaColor(this.config.backgroundColor ?? defaultBackgroundColor)\n }\n if (prevConfig.hoveredPointRingColor !== this.config.hoveredPointRingColor) {\n this.store.setHoveredPointRingColor(this.config.hoveredPointRingColor ?? defaultConfigValues.hoveredPointRingColor)\n }\n if (prevConfig.focusedPointRingColor !== this.config.focusedPointRingColor) {\n this.store.setFocusedPointRingColor(this.config.focusedPointRingColor ?? defaultConfigValues.focusedPointRingColor)\n }\n if (prevConfig.pointGreyoutColor !== this.config.pointGreyoutColor) {\n this.store.setGreyoutPointColor(this.config.pointGreyoutColor ?? defaultGreyoutPointColor)\n }\n if (prevConfig.hoveredLinkColor !== this.config.hoveredLinkColor) {\n this.store.setHoveredLinkColor(this.config.hoveredLinkColor ?? defaultConfigValues.hoveredLinkColor)\n }\n if (prevConfig.focusedPointIndex !== this.config.focusedPointIndex) {\n this.store.setFocusedPoint(this.config.focusedPointIndex)\n }\n if (prevConfig.spaceSize !== this.config.spaceSize ||\n prevConfig.simulationRepulsionQuadtreeLevels !== this.config.simulationRepulsionQuadtreeLevels) {\n this.store.adjustSpaceSize(this.config.spaceSize, this.reglInstance.limits.maxTextureSize)\n this.resizeCanvas(true)\n this.update(this.store.isSimulationRunning ? this.store.alpha : 0)\n }\n if (prevConfig.showFPSMonitor !== this.config.showFPSMonitor) {\n if (this.config.showFPSMonitor) {\n this.fpsMonitor = new FPSMonitor(this.canvas)\n } else {\n this.fpsMonitor?.destroy()\n this.fpsMonitor = undefined\n }\n }\n if (prevConfig.pixelRatio !== this.config.pixelRatio) {\n this.store.maxPointSize = (this.reglInstance.limits.pointSizeDims[1] ?? MAX_POINT_SIZE) / this.config.pixelRatio\n }\n\n if (prevConfig.enableZoom !== this.config.enableZoom || prevConfig.enableDrag !== this.config.enableDrag) {\n this.updateZoomDragBehaviors()\n }\n\n if (prevConfig.onLinkClick !== this.config.onLinkClick ||\n prevConfig.onLinkMouseOver !== this.config.onLinkMouseOver ||\n prevConfig.onLinkMouseOut !== this.config.onLinkMouseOut) {\n this.store.updateLinkHoveringEnabled(this.config)\n }\n }\n\n /**\n * Sets the positions for the graph points.\n *\n * @param {Float32Array} pointPositions - A Float32Array representing the positions of points in the format [x1, y1, x2, y2, ..., xn, yn],\n * where `n` is the index of the point.\n * Example: `new Float32Array([1, 2, 3, 4, 5, 6])` sets the first point to (1, 2), the second point to (3, 4), and so on.\n * @param {boolean | undefined} dontRescale - For this call only, don't rescale the points.\n * - `true`: Don't rescale.\n * - `false` or `undefined` (default): Use the behavior defined by `config.rescalePositions`.\n */\n public setPointPositions (pointPositions: Float32Array, dontRescale?: boolean | undefined): void {\n if (this._isDestroyed || !this.points) return\n this.graph.inputPointPositions = pointPositions\n this.points.shouldSkipRescale = dontRescale\n this.isPointPositionsUpdateNeeded = true\n // Links related texture depends on point positions, so we need to update it\n this.isLinksUpdateNeeded = true\n // Point related textures depend on point positions length, so we need to update them\n this.isPointColorUpdateNeeded = true\n this.isPointSizeUpdateNeeded = true\n this.isPointShapeUpdateNeeded = true\n this.isPointImageIndicesUpdateNeeded = true\n this.isPointImageSizesUpdateNeeded = true\n this.isPointClusterUpdateNeeded = true\n this.isForceManyBodyUpdateNeeded = true\n this.isForceLinkUpdateNeeded = true\n this.isForceCenterUpdateNeeded = true\n }\n\n /**\n * Sets the colors for the graph points.\n *\n * @param {Float32Array} pointColors - A Float32Array representing the colors of points in the format [r1, g1, b1, a1, r2, g2, b2, a2, ..., rn, gn, bn, an],\n * where each color is represented in RGBA format.\n * Example: `new Float32Array([255, 0, 0, 1, 0, 255, 0, 1])` sets the first point to red and the second point to green.\n */\n public setPointColors (pointColors: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputPointColors = pointColors\n this.isPointColorUpdateNeeded = true\n }\n\n /**\n * Gets the current colors of the graph points.\n *\n * @returns {Float32Array} A Float32Array representing the colors of points in the format [r1, g1, b1, a1, r2, g2, b2, a2, ..., rn, gn, bn, an],\n * where each color is in RGBA format. Returns an empty Float32Array if no point colors are set.\n */\n public getPointColors (): Float32Array {\n if (this._isDestroyed) return new Float32Array()\n return this.graph.pointColors ?? new Float32Array()\n }\n\n /**\n * Sets the sizes for the graph points.\n *\n * @param {Float32Array} pointSizes - A Float32Array representing the sizes of points in the format [size1, size2, ..., sizen],\n * where `n` is the index of the point.\n * Example: `new Float32Array([10, 20, 30])` sets the first point to size 10, the second point to size 20, and the third point to size 30.\n */\n public setPointSizes (pointSizes: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputPointSizes = pointSizes\n this.isPointSizeUpdateNeeded = true\n }\n\n /**\n * Sets the shapes for the graph points.\n *\n * @param {Float32Array} pointShapes - A Float32Array representing the shapes of points in the format [shape1, shape2, ..., shapen],\n * where `n` is the index of the point and each shape value corresponds to a PointShape enum:\n * 0 = Circle, 1 = Square, 2 = Triangle, 3 = Diamond, 4 = Pentagon, 5 = Hexagon, 6 = Star, 7 = Cross, 8 = None.\n * Example: `new Float32Array([0, 1, 2])` sets the first point to Circle, the second point to Square, and the third point to Triangle.\n * Images are rendered above shapes.\n */\n public setPointShapes (pointShapes: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputPointShapes = pointShapes\n this.isPointShapeUpdateNeeded = true\n }\n\n /**\n * Sets the images for the graph points using ImageData objects.\n * Images are rendered above shapes.\n * To use images, provide image indices via setPointImageIndices().\n *\n * @param {ImageData[]} imageDataArray - Array of ImageData objects to use as point images.\n * Example: `setImageData([imageData1, imageData2, imageData3])`\n */\n public setImageData (imageDataArray: ImageData[]): void {\n if (this._isDestroyed || !this.points) return\n this.graph.inputImageData = imageDataArray\n this.points.createAtlas()\n }\n\n /**\n * Sets which image each point should use from the images array.\n * Images are rendered above shapes.\n *\n * @param {Float32Array} imageIndices - A Float32Array representing which image each point uses in the format [index1, index2, ..., indexn],\n * where `n` is the index of the point and each value is an index into the images array provided to `setImageData`.\n * Example: `new Float32Array([0, 1, 0])` sets the first point to use image 0, second point to use image 1, third point to use image 0.\n */\n public setPointImageIndices (imageIndices: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputPointImageIndices = imageIndices\n this.isPointImageIndicesUpdateNeeded = true\n }\n\n /**\n * Sets the sizes for the point images.\n *\n * @param {Float32Array} imageSizes - A Float32Array representing the sizes of point images in the format [size1, size2, ..., sizen],\n * where `n` is the index of the point.\n * Example: `new Float32Array([10, 20, 30])` sets the first image to size 10, the second image to size 20, and the third image to size 30.\n */\n public setPointImageSizes (imageSizes: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputPointImageSizes = imageSizes\n this.isPointImageSizesUpdateNeeded = true\n }\n\n /**\n * Gets the current sizes of the graph points.\n *\n * @returns {Float32Array} A Float32Array representing the sizes of points in the format [size1, size2, ..., sizen],\n * where `n` is the index of the point. Returns an empty Float32Array if no point sizes are set.\n */\n public getPointSizes (): Float32Array {\n if (this._isDestroyed) return new Float32Array()\n return this.graph.pointSizes ?? new Float32Array()\n }\n\n /**\n * Sets the links for the graph.\n *\n * @param {Float32Array} links - A Float32Array representing the links between points\n * in the format [source1, target1, source2, target2, ..., sourcen, targetn],\n * where `source` and `target` are the indices of the points being linked.\n * Example: `new Float32Array([0, 1, 1, 2])` creates a link from point 0 to point 1 and another link from point 1 to point 2.\n */\n public setLinks (links: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputLinks = links\n this.isLinksUpdateNeeded = true\n // Links related texture depends on links length, so we need to update it\n this.isLinkColorUpdateNeeded = true\n this.isLinkWidthUpdateNeeded = true\n this.isLinkArrowUpdateNeeded = true\n this.isForceLinkUpdateNeeded = true\n }\n\n /**\n * Sets the colors for the graph links.\n *\n * @param {Float32Array} linkColors - A Float32Array representing the colors of links in the format [r1, g1, b1, a1, r2, g2, b2, a2, ..., rn, gn, bn, an],\n * where each color is in RGBA format.\n * Example: `new Float32Array([255, 0, 0, 1, 0, 255, 0, 1])` sets the first link to red and the second link to green.\n */\n public setLinkColors (linkColors: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputLinkColors = linkColors\n this.isLinkColorUpdateNeeded = true\n }\n\n /**\n * Gets the current colors of the graph links.\n *\n * @returns {Float32Array} A Float32Array representing the colors of links in the format [r1, g1, b1, a1, r2, g2, b2, a2, ..., rn, gn, bn, an],\n * where each color is in RGBA format. Returns an empty Float32Array if no link colors are set.\n */\n public getLinkColors (): Float32Array {\n if (this._isDestroyed) return new Float32Array()\n return this.graph.linkColors ?? new Float32Array()\n }\n\n /**\n * Sets the widths for the graph links.\n *\n * @param {Float32Array} linkWidths - A Float32Array representing the widths of links in the format [width1, width2, ..., widthn],\n * where `n` is the index of the link.\n * Example: `new Float32Array([1, 2, 3])` sets the first link to width 1, the second link to width 2, and the third link to width 3.\n */\n public setLinkWidths (linkWidths: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputLinkWidths = linkWidths\n this.isLinkWidthUpdateNeeded = true\n }\n\n /**\n * Gets the current widths of the graph links.\n *\n * @returns {Float32Array} A Float32Array representing the widths of links in the format [width1, width2, ..., widthn],\n * where `n` is the index of the link. Returns an empty Float32Array if no link widths are set.\n */\n public getLinkWidths (): Float32Array {\n if (this._isDestroyed) return new Float32Array()\n return this.graph.linkWidths ?? new Float32Array()\n }\n\n /**\n * Sets the arrows for the graph links.\n *\n * @param {boolean[]} linkArrows - An array of booleans indicating whether each link should have an arrow,\n * in the format [arrow1, arrow2, ..., arrown], where `n` is the index of the link.\n * Example: `[true, false, true]` sets arrows on the first and third links, but not on the second link.\n */\n public setLinkArrows (linkArrows: boolean[]): void {\n if (this._isDestroyed) return\n this.graph.linkArrowsBoolean = linkArrows\n this.isLinkArrowUpdateNeeded = true\n }\n\n /**\n * Sets the strength for the graph links.\n *\n * @param {Float32Array} linkStrength - A Float32Array representing the strength of each link in the format [strength1, strength2, ..., strengthn],\n * where `n` is the index of the link.\n * Example: `new Float32Array([1, 2, 3])` sets the first link to strength 1, the second link to strength 2, and the third link to strength 3.\n */\n public setLinkStrength (linkStrength: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputLinkStrength = linkStrength\n this.isForceLinkUpdateNeeded = true\n }\n\n /**\n * Sets the point clusters for the graph.\n *\n * @param {(number | undefined)[]} pointClusters - Array of cluster indices for each point in the graph.\n * - Index: Each index corresponds to a point.\n * - Values: Integers starting from 0; `undefined` indicates that a point does not belong to any cluster and will not be affected by cluster forces.\n * @example\n * `[0, 1, 0, 2, undefined, 1]` maps points to clusters: point 0 and 2 to cluster 0, point 1 to cluster 1, and point 3 to cluster 2.\n * Points 4 is unclustered.\n * @note Clusters without specified positions via `setClusterPositions` will be positioned at their centermass by default.\n */\n public setPointClusters (pointClusters: (number | undefined)[]): void {\n if (this._isDestroyed) return\n this.graph.inputPointClusters = pointClusters\n this.isPointClusterUpdateNeeded = true\n }\n\n /**\n * Sets the positions of the point clusters for the graph.\n *\n * @param {(number | undefined)[]} clusterPositions - Array of cluster positions.\n * - Every two elements represent the x and y coordinates for a cluster position.\n * - `undefined` means the cluster's position is not defined and will use centermass positioning instead.\n * @example\n * `[10, 20, 30, 40, undefined, undefined]` places the first cluster at (10, 20) and the second at (30, 40);\n * the third cluster will be positioned at its centermass automatically.\n */\n public setClusterPositions (clusterPositions: (number | undefined)[]): void {\n if (this._isDestroyed) return\n this.graph.inputClusterPositions = clusterPositions\n this.isPointClusterUpdateNeeded = true\n }\n\n /**\n * Sets the force strength coefficients for clustering points in the graph.\n *\n * This method allows you to customize the forces acting on individual points during the clustering process.\n * The force coefficients determine the strength of the forces applied to each point.\n *\n * @param {Float32Array} clusterStrength - A Float32Array of force strength coefficients for each point in the format [coeff1, coeff2, ..., coeffn],\n * where `n` is the index of the point.\n * Example: `new Float32Array([1, 0.4, 0.3])` sets the force coefficient for point 0 to 1, point 1 to 0.4, and point 2 to 0.3.\n */\n public setPointClusterStrength (clusterStrength: Float32Array): void {\n if (this._isDestroyed) return\n this.graph.inputClusterStrength = clusterStrength\n this.isPointClusterUpdateNeeded = true\n }\n\n /**\n * Sets which points are pinned (fixed) in position.\n *\n * Pinned points:\n * - Do not move due to physics forces (gravity, repulsion, link forces, etc.)\n * - Still participate in force calculations (other nodes are attracted to/repelled by them)\n * - Can still be dragged by the user if `enableDrag` is true\n *\n * @param {number[] | null} pinnedIndices - Array of point indices to pin. Set to `[]` or `null` to unpin all points.\n * @example\n * // Pin points 0 and 5\n * graph.setPinnedPoints([0, 5])\n *\n * // Unpin all points\n * graph.setPinnedPoints([])\n * graph.setPinnedPoints(null)\n */\n public setPinnedPoints (pinnedIndices: number[] | null): void {\n if (this._isDestroyed || !this.points) return\n this.graph.inputPinnedPoints = pinnedIndices && pinnedIndices.length > 0 ? pinnedIndices : undefined\n this.points.updatePinnedStatus()\n }\n\n /**\n * Renders the graph and starts rendering.\n * Does NOT modify simulation state - use start(), stop(), pause(), unpause() to control simulation.\n *\n * @param {number} [simulationAlpha] - Optional alpha value to set.\n * - If 0: Sets alpha to 0, simulation stops after one frame (graph becomes static).\n * - If positive: Sets alpha to that value.\n * - If undefined: Keeps current alpha value.\n */\n public render (simulationAlpha?: number): void {\n if (this._isDestroyed || !this.reglInstance) return\n this.graph.update()\n const { fitViewOnInit, fitViewDelay, fitViewPadding, fitViewDuration, fitViewByPointsInRect, fitViewByPointIndices, initialZoomLevel } = this.config\n if (!this.graph.pointsNumber && !this.graph.linksNumber) {\n this.stopFrames()\n select(this.canvas).style('cursor', null)\n this.reglInstance.clear({\n color: this.store.backgroundColor,\n depth: 1,\n stencil: 0,\n })\n return\n }\n\n // If `initialZoomLevel` is set, we don't need to fit the view\n if (this._isFirstRenderAfterInit && fitViewOnInit && initialZoomLevel === undefined) {\n this._fitViewOnInitTimeoutID = window.setTimeout(() => {\n if (fitViewByPointIndices) this.fitViewByPointIndices(fitViewByPointIndices, fitViewDuration, fitViewPadding)\n else if (fitViewByPointsInRect) this.setZoomTransformByPointPositions(fitViewByPointsInRect, fitViewDuration, undefined, fitViewPadding)\n else this.fitView(fitViewDuration, fitViewPadding)\n }, fitViewDelay)\n }\n // Update graph and start frames\n this.update(simulationAlpha)\n this.startFrames()\n\n this._isFirstRenderAfterInit = false\n }\n\n /**\n * Center the view on a point and zoom in, by point index.\n * @param index The index of the point in the array of points.\n * @param duration Duration of the animation transition in milliseconds (`700` by default).\n * @param scale Scale value to zoom in or out (`3` by default).\n * @param canZoomOut Set to `false` to prevent zooming out from the point (`true` by default).\n */\n public zoomToPointByIndex (index: number, duration = 700, scale = defaultScaleToZoom, canZoomOut = true): void {\n if (this._isDestroyed || !this.reglInstance || !this.points || !this.canvasD3Selection) return\n const { store: { screenSize } } = this\n const positionPixels = readPixels(this.reglInstance, this.points.currentPositionFbo as regl.Framebuffer2D)\n if (index === undefined) return\n const posX = positionPixels[index * 4 + 0]\n const posY = positionPixels[index * 4 + 1]\n if (posX === undefined || posY === undefined) return\n const distance = this.zoomInstance.getDistanceToPoint([posX, posY])\n const zoomLevel = canZoomOut ? scale : Math.max(this.getZoomLevel(), scale)\n if (distance < Math.min(screenSize[0], screenSize[1])) {\n this.setZoomTransformByPointPositions([posX, posY], duration, zoomLevel)\n } else {\n const transform = this.zoomInstance.getTransform([[posX, posY]], zoomLevel)\n const middle = this.zoomInstance.getMiddlePointTransform([posX, posY])\n this.canvasD3Selection\n .transition()\n .ease(easeQuadIn)\n .duration(duration / 2)\n .call(this.zoomInstance.behavior.transform, middle)\n .transition()\n .ease(easeQuadOut)\n .duration(duration / 2)\n .call(this.zoomInstance.behavior.transform, transform)\n }\n }\n\n /**\n * Zoom the view in or out to the specified zoom level.\n * @param value Zoom level\n * @param duration Duration of the zoom in/out transition.\n */\n\n public zoom (value: number, duration = 0): void {\n if (this._isDestroyed) return\n this.setZoomLevel(value, duration)\n }\n\n /**\n * Zoom the view in or out to the specified zoom level.\n * @param value Zoom level\n * @param duration Duration of the zoom in/out transition.\n */\n public setZoomLevel (value: number, duration = 0): void {\n if (this._isDestroyed || !this.canvasD3Selection) return\n if (duration === 0) {\n this.canvasD3Selection\n .call(this.zoomInstance.behavior.scaleTo, value)\n } else {\n this.canvasD3Selection\n .transition()\n .duration(duration)\n .call(this.zoomInstance.behavior.scaleTo, value)\n }\n }\n\n /**\n * Get zoom level.\n * @returns Zoom level value of the view.\n */\n public getZoomLevel (): number {\n if (this._isDestroyed) return 0\n return this.zoomInstance.eventTransform.k\n }\n\n /**\n * Get current X and Y coordinates of the points.\n * @returns Array of point positions.\n */\n public getPointPositions (): number[] {\n if (this._isDestroyed || !this.reglInstance || !this.points) return []\n if (this.graph.pointsNumber === undefined) return []\n const positions: number[] = []\n const pointPositionsPixels = readPixels(this.reglInstance, this.points.currentPositionFbo as regl.Framebuffer2D)\n positions.length = this.graph.pointsNumber * 2\n for (let i = 0; i < this.graph.pointsNumber; i += 1) {\n const posX = pointPositionsPixels[i * 4 + 0]\n const posY = pointPositionsPixels[i * 4 + 1]\n if (posX !== undefined && posY !== undefined) {\n positions[i * 2] = posX\n positions[i * 2 + 1] = posY\n }\n }\n return positions\n }\n\n /**\n * Get current X and Y coordinates of the clusters.\n * @returns Array of point cluster.\n */\n public getClusterPositions (): number[] {\n if (this._isDestroyed || !this.reglInstance || !this.clusters) return []\n if (this.graph.pointClusters === undefined || this.clusters.clusterCount === undefined) return []\n this.clusters.calculateCentermass()\n const positions: number[] = []\n const clusterPositionsPixels = readPixels(this.reglInstance, this.clusters.centermassFbo as regl.Framebuffer2D)\n positions.length = this.clusters.clusterCount * 2\n for (let i = 0; i < positions.length / 2; i += 1) {\n const sumX = clusterPositionsPixels[i * 4 + 0]\n const sumY = clusterPositionsPixels[i * 4 + 1]\n const sumN = clusterPositionsPixels[i * 4 + 2]\n if (sumX !== undefined && sumY !== undefined && sumN !== undefined) {\n positions[i * 2] = sumX / sumN\n positions[i * 2 + 1] = sumY / sumN\n }\n }\n return positions\n }\n\n /**\n * Center and zoom in/out the view to fit all points in the scene.\n * @param duration Duration of the center and zoom in/out animation in milliseconds (`250` by default).\n * @param padding Padding around the viewport in percentage (`0.1` by default).\n */\n public fitView (duration = 250, padding = 0.1): void {\n if (this._isDestroyed) return\n this.setZoomTransformByPointPositions(this.getPointPositions(), duration, undefined, padding)\n }\n\n /**\n * Center and zoom in/out the view to fit points by their indices in the scene.\n * @param duration Duration of the center and zoom in/out animation in milliseconds (`250` by default).\n * @param padding Padding around the viewport in percentage\n */\n public fitViewByPointIndices (indices: number[], duration = 250, padding = 0.1): void {\n if (this._isDestroyed) return\n const positionsArray = this.getPointPositions()\n const positions = new Array(indices.length * 2)\n for (const [i, index] of indices.entries()) {\n positions[i * 2] = positionsArray[index * 2]\n positions[i * 2 + 1] = positionsArray[index * 2 + 1]\n }\n this.setZoomTransformByPointPositions(positions, duration, undefined, padding)\n }\n\n /**\n * Center and zoom in/out the view to fit points by their positions in the scene.\n * @param duration Duration of the center and zoom in/out animation in milliseconds (`250` by default).\n * @param padding Padding around the viewport in percentage\n */\n public fitViewByPointPositions (positions: number[], duration = 250, padding = 0.1): void {\n if (this._isDestroyed) return\n this.setZoomTransformByPointPositions(positions, duration, undefined, padding)\n }\n\n /**\n * Get points indices inside a rectangular area.\n * @param selection - Array of two corner points `[[left, top], [right, bottom]]`.\n * The `left` and `right` coordinates should be from 0 to the width of the canvas.\n * The `top` and `bottom` coordinates should be from 0 to the height of the canvas.\n * @returns A Float32Array containing the indices of points inside a rectangular area.\n */\n public getPointsInRect (selection: [[number, number], [number, number]]): Float32Array {\n if (this._isDestroyed || !this.reglInstance || !this.points) return new Float32Array()\n const h = this.store.screenSize[1]\n this.store.selectedArea = [[selection[0][0], (h - selection[1][1])], [selection[1][0], (h - selection[0][1])]]\n this.points.findPointsOnAreaSelection()\n const pixels = readPixels(this.reglInstance, this.points.selectedFbo as regl.Framebuffer2D)\n\n return pixels\n .map((pixel, i) => {\n if (i % 4 === 0 && pixel !== 0) return i / 4\n else return -1\n })\n .filter(d => d !== -1)\n }\n\n /**\n * Get points indices inside a rectangular area.\n * @param selection - Array of two corner points `[[left, top], [right, bottom]]`.\n * The `left` and `right` coordinates should be from 0 to the width of the canvas.\n * The `top` and `bottom` coordinates should be from 0 to the height of the canvas.\n * @returns A Float32Array containing the indices of points inside a rectangular area.\n * @deprecated Use `getPointsInRect` instead. This method will be removed in a future version.\n */\n public getPointsInRange (selection: [[number, number], [number, number]]): Float32Array {\n return this.getPointsInRect(selection)\n }\n\n /**\n * Get points indices inside a polygon area.\n * @param polygonPath - Array of points `[[x1, y1], [x2, y2], ..., [xn, yn]]` that defines the polygon.\n * The coordinates should be from 0 to the width/height of the canvas.\n * @returns A Float32Array containing the indices of points inside the polygon area.\n */\n public getPointsInPolygon (polygonPath: [number, number][]): Float32Array {\n if (this._isDestroyed || !this.reglInstance || !this.points) return new Float32Array()\n if (polygonPath.length < 3) return new Float32Array() // Need at least 3 points for a polygon\n\n const h = this.store.screenSize[1]\n // Convert coordinates to WebGL coordinate system (flip Y)\n const convertedPath = polygonPath.map(([x, y]) => [x, h - y] as [number, number])\n this.points.updatePolygonPath(convertedPath)\n this.points.findPointsOnPolygonSelection()\n const pixels = readPixels(this.reglInstance, this.points.selectedFbo as regl.Framebuffer2D)\n\n return pixels\n .map((pixel, i) => {\n if (i % 4 === 0 && pixel !== 0) return i / 4\n else return -1\n })\n .filter(d => d !== -1)\n }\n\n /** Select points inside a rectangular area.\n * @param selection - Array of two corner points `[[left, top], [right, bottom]]`.\n * The `left` and `right` coordinates should be from 0 to the width of the canvas.\n * The `top` and `bottom` coordinates should be from 0 to the height of the canvas. */\n public selectPointsInRect (selection: [[number, number], [number, number]] | null): void {\n if (this._isDestroyed || !this.reglInstance || !this.points) return\n if (selection) {\n const h = this.store.screenSize[1]\n this.store.selectedArea = [[selection[0][0], (h - selection[1][1])], [selection[1][0], (h - selection[0][1])]]\n this.points.findPointsOnAreaSelection()\n const pixels = readPixels(this.reglInstance, this.points.selectedFbo as regl.Framebuffer2D)\n this.store.selectedIndices = pixels\n .map((pixel, i) => {\n if (i % 4 === 0 && pixel !== 0) return i / 4\n else return -1\n })\n .filter(d => d !== -1)\n } else {\n this.store.selectedIndices = null\n }\n this.points.updateGreyoutStatus()\n }\n\n /** Select points inside a rectangular area.\n * @param selection - Array of two corner points `[[left, top], [right, bottom]]`.\n * The `left` and `right` coordinates should be from 0 to the width of the canvas.\n * The `top` and `bottom` coordinates should be from 0 to the height of the canvas.\n * @deprecated Use `selectPointsInRect` instead. This method will be removed in a future version.\n */\n public selectPointsInRange (selection: [[number, number], [number, number]] | null): void {\n return this.selectPointsInRect(selection)\n }\n\n /** Select points inside a polygon area.\n * @param polygonPath - Array of points `[[x1, y1], [x2, y2], ..., [xn, yn]]` that defines the polygon.\n * The coordinates should be from 0 to the width/height of the canvas.\n * Set to null to clear selection. */\n public selectPointsInPolygon (polygonPath: [number, number][] | null): void {\n if (this._isDestroyed || !this.reglInstance || !this.points) return\n if (polygonPath) {\n if (polygonPath.length < 3) {\n console.warn('Polygon path requires at least 3 points to form a polygon.')\n return\n }\n\n const h = this.store.screenSize[1]\n // Convert coordinates to WebGL coordinate system (flip Y)\n const convertedPath = polygonPath.map(([x, y]) => [x, h - y] as [number, number])\n this.points.updatePolygonPath(convertedPath)\n this.points.findPointsOnPolygonSelection()\n const pixels = readPixels(this.reglInstance, this.points.selectedFbo as regl.Framebuffer2D)\n this.store.selectedIndices = pixels\n .map((pixel, i) => {\n if (i % 4 === 0 && pixel !== 0) return i / 4\n else return -1\n })\n .filter(d => d !== -1)\n } else {\n this.store.selectedIndices = null\n }\n this.points.updateGreyoutStatus()\n }\n\n /**\n * Select a point by index. If you want the adjacent points to get selected too, provide `true` as the second argument.\n * @param index The index of the point in the array of points.\n * @param selectAdjacentPoints When set to `true`, selects adjacent points (`false` by default).\n */\n public selectPointByIndex (index: number, selectAdjacentPoints = false): void {\n if (this._isDestroyed) return\n if (selectAdjacentPoints) {\n const adjacentIndices = this.graph.getAdjacentIndices(index) ?? []\n this.selectPointsByIndices([index, ...adjacentIndices])\n } else this.selectPointsByIndices([index])\n }\n\n /**\n * Select multiples points by their indices.\n * @param indices Array of points indices.\n */\n public selectPointsByIndices (indices?: (number | undefined)[] | null): void {\n if (this._isDestroyed || !this.points) return\n if (!indices) {\n this.store.selectedIndices = null\n } else if (indices.length === 0) {\n this.store.selectedIndices = new Float32Array()\n } else {\n this.store.selectedIndices = new Float32Array(indices.filter(d => d !== undefined))\n }\n\n this.points.updateGreyoutStatus()\n }\n\n /**\n * Unselect all points.\n */\n public unselectPoints (): void {\n if (this._isDestroyed || !this.points) return\n this.store.selectedIndices = null\n this.points.updateGreyoutStatus()\n }\n\n /**\n * Get indices of points that are currently selected.\n * @returns Array of selected indices of points.\n */\n public getSelectedIndices (): number[] | null {\n if (this._isDestroyed) return null\n const { selectedIndices } = this.store\n if (!selectedIndices) return null\n return Array.from(selectedIndices)\n }\n\n /**\n * Get indices that are adjacent to a specific point by its index.\n * @param index Index of the point.\n * @returns Array of adjacent indices.\n */\n\n public getAdjacentIndices (index: number): number[] | undefined {\n if (this._isDestroyed) return undefined\n return this.graph.getAdjacentIndices(index)\n }\n\n /**\n * Converts the X and Y point coordinates from the space coordinate system to the screen coordinate system.\n * @param spacePosition Array of x and y coordinates in the space coordinate system.\n * @returns Array of x and y coordinates in the screen coordinate system.\n */\n public spaceToScreenPosition (spacePosition: [number, number]): [number, number] {\n if (this._isDestroyed) return [0, 0]\n return this.zoomInstance.convertSpaceToScreenPosition(spacePosition)\n }\n\n /**\n * Converts the X and Y point coordinates from the screen coordinate system to the space coordinate system.\n * @param screenPosition Array of x and y coordinates in the screen coordinate system.\n * @returns Array of x and y coordinates in the space coordinate system.\n */\n public screenToSpacePosition (screenPosition: [number, number]): [number, number] {\n if (this._isDestroyed) return [0, 0]\n return this.zoomInstance.convertScreenToSpacePosition(screenPosition)\n }\n\n /**\n * Converts the point radius value from the space coordinate system to the screen coordinate system.\n * @param spaceRadius Radius of point in the space coordinate system.\n * @returns Radius of point in the screen coordinate system.\n */\n public spaceToScreenRadius (spaceRadius: number): number {\n if (this._isDestroyed) return 0\n return this.zoomInstance.convertSpaceToScreenRadius(spaceRadius)\n }\n\n /**\n * Get point radius by its index.\n * @param index Index of the point.\n * @returns Radius of the point.\n */\n public getPointRadiusByIndex (index: number): number | undefined {\n if (this._isDestroyed) return undefined\n return this.graph.pointSizes?.[index]\n }\n\n /**\n * Track multiple point positions by their indices on each Cosmos tick.\n * @param indices Array of points indices.\n */\n public trackPointPositionsByIndices (indices: number[]): void {\n if (this._isDestroyed || !this.points) return\n this.points.trackPointsByIndices(indices)\n }\n\n /**\n * Get current X and Y coordinates of the tracked points.\n * Do not mutate the returned map - it may affect future calls.\n * @returns A ReadonlyMap where keys are point indices and values are their corresponding X and Y coordinates in the [number, number] format.\n * @see trackPointPositionsByIndices To set which points should be tracked\n */\n public getTrackedPointPositionsMap (): ReadonlyMap<number, [number, number]> {\n if (this._isDestroyed || !this.points) return new Map()\n return this.points.getTrackedPositionsMap()\n }\n\n /**\n * Get current X and Y coordinates of the tracked points as an array.\n * @returns Array of point positions in the format [x1, y1, x2, y2, ..., xn, yn] for tracked points only.\n * The positions are ordered by the tracking indices (same order as provided to trackPointPositionsByIndices).\n * Returns an empty array if no points are being tracked.\n */\n public getTrackedPointPositionsArray (): number[] {\n if (this._isDestroyed || !this.points) return []\n return this.points.getTrackedPositionsArray()\n }\n\n /**\n * For the points that are currently visible on the screen, get a sample of point indices with their coordinates.\n * The resulting number of points will depend on the `pointSamplingDistance` configuration property,\n * and the sampled points will be evenly distributed.\n * @returns A Map object where keys are the index of the points and values are their corresponding X and Y coordinates in the [number, number] format.\n */\n public getSampledPointPositionsMap (): Map<number, [number, number]> {\n if (this._isDestroyed || !this.points) return new Map()\n return this.points.getSampledPointPositionsMap()\n }\n\n /**\n * For the points that are currently visible on the screen, get a sample of point indices and positions.\n * The resulting number of points will depend on the `pointSamplingDistance` configuration property,\n * and the sampled points will be evenly distributed.\n * @returns An object containing arrays of point indices and positions.\n */\n public getSampledPoints (): { indices: number[]; positions: number[] } {\n if (this._isDestroyed || !this.points) return { indices: [], positions: [] }\n return this.points.getSampledPoints()\n }\n\n /**\n * Gets the X-axis of rescaling function.\n *\n * This scale is automatically created when position rescaling is enabled.\n */\n public getScaleX (): ((x: number) => number) | undefined {\n if (this._isDestroyed || !this.points) return undefined\n return this.points.scaleX\n }\n\n /**\n * Gets the Y-axis of rescaling function.\n *\n * This scale is automatically created when position rescaling is enabled.\n */\n public getScaleY (): ((y: number) => number) | undefined {\n if (this._isDestroyed || !this.points) return undefined\n return this.points.scaleY\n }\n\n /**\n * Start the simulation.\n * This only controls the simulation state, not rendering.\n * @param alpha Value from 0 to 1. The higher the value, the more initial energy the simulation will get.\n */\n public start (alpha = 1): void {\n if (this._isDestroyed) return\n if (!this.graph.pointsNumber) return\n\n // Always set simulation as running when start() is called\n this.store.isSimulationRunning = true\n this.store.simulationProgress = 0\n this.store.alpha = alpha\n this.config.onSimulationStart?.()\n\n // Note: Does NOT start frames - that's handled separately\n }\n\n /**\n * Stop the simulation. This stops the simulation and resets its state.\n * Use start() to begin a new simulation cycle.\n */\n public stop (): void {\n if (this._isDestroyed) return\n this.store.isSimulationRunning = false\n this.store.simulationProgress = 0\n this.store.alpha = 0\n this.config.onSimulationEnd?.()\n }\n\n /**\n * Pause the simulation. When paused, the simulation stops running\n * but preserves its current state (progress, alpha).\n * Can be resumed using the unpause method.\n */\n public pause (): void {\n if (this._isDestroyed) return\n this.store.isSimulationRunning = false\n this.config.onSimulationPause?.()\n }\n\n /**\n * Unpause the simulation. This method resumes a paused\n * simulation and continues its execution.\n */\n public unpause (): void {\n if (this._isDestroyed) return\n this.store.isSimulationRunning = true\n this.config.onSimulationUnpause?.()\n }\n\n /**\n * Restart/Resume the simulation. This method unpauses a paused\n * simulation and resumes its execution.\n * @deprecated Use `unpause()` instead. This method will be removed in a future version.\n */\n public restart (): void {\n if (this._isDestroyed) return\n this.store.isSimulationRunning = true\n this.config.onSimulationRestart?.()\n }\n\n /**\n * Run one step of the simulation manually.\n * Works even when the simulation is paused.\n */\n public step (): void {\n if (this._isDestroyed) return\n if (!this.config.enableSimulation) return\n if (!this.store.pointsTextureSize) return\n\n // Run one simulation step, forcing execution regardless of isSimulationRunning\n this.runSimulationStep(true)\n }\n\n /**\n * Destroy this Cosmos instance.\n */\n public destroy (): void {\n if (this._isDestroyed || !this.reglInstance) return\n window.clearTimeout(this._fitViewOnInitTimeoutID)\n this.stopFrames()\n\n // Remove all event listeners\n if (this.canvasD3Selection) {\n this.canvasD3Selection\n .on('mouseenter.cosmos', null)\n .on('mousemove.cosmos', null)\n .on('mouseleave.cosmos', null)\n .on('click', null)\n .on('mousemove', null)\n .on('contextmenu', null)\n .on('.drag', null)\n .on('.zoom', null)\n }\n\n select(document)\n .on('keydown.cosmos', null)\n .on('keyup.cosmos', null)\n\n if (this.zoomInstance?.behavior) {\n this.zoomInstance.behavior\n .on('start.detect', null)\n .on('zoom.detect', null)\n .on('end.detect', null)\n }\n\n if (this.dragInstance?.behavior) {\n this.dragInstance.behavior\n .on('start.detect', null)\n .on('drag.detect', null)\n .on('end.detect', null)\n }\n\n this.fpsMonitor?.destroy()\n this.reglInstance.destroy()\n // Clears the canvas after particle system is destroyed\n this.reglInstance.clear({\n color: this.store.backgroundColor,\n depth: 1,\n stencil: 0,\n })\n\n if (this.canvas && this.canvas.parentNode) {\n this.canvas.parentNode.removeChild(this.canvas)\n }\n\n if (this.attributionDivElement && this.attributionDivElement.parentNode) {\n this.attributionDivElement.parentNode.removeChild(this.attributionDivElement)\n }\n\n document.getElementById('gl-bench-style')?.remove()\n\n this.canvasD3Selection = undefined\n this.reglInstance = undefined\n this.attributionDivElement = undefined\n\n this._isDestroyed = true\n }\n\n /**\n * Updates and recreates the graph visualization based on pending changes.\n */\n public create (): void {\n if (this._isDestroyed || !this.points || !this.lines) return\n if (this.isPointPositionsUpdateNeeded) this.points.updatePositions()\n if (this.isPointColorUpdateNeeded) this.points.updateColor()\n if (this.isPointSizeUpdateNeeded) this.points.updateSize()\n if (this.isPointShapeUpdateNeeded) this.points.updateShape()\n if (this.isPointImageIndicesUpdateNeeded) this.points.updateImageIndices()\n if (this.isPointImageSizesUpdateNeeded) this.points.updateImageSizes()\n\n if (this.isLinksUpdateNeeded) this.lines.updatePointsBuffer()\n if (this.isLinkColorUpdateNeeded) this.lines.updateColor()\n if (this.isLinkWidthUpdateNeeded) this.lines.updateWidth()\n if (this.isLinkArrowUpdateNeeded) this.lines.updateArrow()\n\n if (this.isForceManyBodyUpdateNeeded) this.forceManyBody?.create()\n if (this.isForceLinkUpdateNeeded) {\n this.forceLinkIncoming?.create(LinkDirection.INCOMING)\n this.forceLinkOutgoing?.create(LinkDirection.OUTGOING)\n }\n if (this.isForceCenterUpdateNeeded) this.forceCenter?.create()\n if (this.isPointClusterUpdateNeeded) this.clusters?.create()\n\n this.isPointPositionsUpdateNeeded = false\n this.isPointColorUpdateNeeded = false\n this.isPointSizeUpdateNeeded = false\n this.isPointShapeUpdateNeeded = false\n this.isPointImageIndicesUpdateNeeded = false\n this.isPointImageSizesUpdateNeeded = false\n this.isLinksUpdateNeeded = false\n this.isLinkColorUpdateNeeded = false\n this.isLinkWidthUpdateNeeded = false\n this.isLinkArrowUpdateNeeded = false\n this.isPointClusterUpdateNeeded = false\n this.isForceManyBodyUpdateNeeded = false\n this.isForceLinkUpdateNeeded = false\n this.isForceCenterUpdateNeeded = false\n }\n\n /**\n * Converts an array of tuple positions to a single array containing all coordinates sequentially\n * @param pointPositions An array of tuple positions\n * @returns A flatten array of coordinates\n */\n public flatten (pointPositions: [number, number][]): number[] {\n return pointPositions.flat()\n }\n\n /**\n * Converts a flat array of point positions to a tuple pairs representing coordinates\n * @param pointPositions A flattened array of coordinates\n * @returns An array of tuple positions\n */\n public pair (pointPositions: number[]): [number, number][] {\n const arr = new Array(pointPositions.length / 2) as [number, number][]\n for (let i = 0; i < pointPositions.length / 2; i++) {\n arr[i] = [pointPositions[i * 2] as number, pointPositions[i * 2 + 1] as number]\n }\n\n return arr\n }\n\n /**\n * Updates and recreates the graph visualization based on pending changes.\n *\n * @param simulationAlpha - Optional alpha value to set. If not provided, keeps current alpha.\n */\n private update (simulationAlpha = this.store.alpha): void {\n const { graph } = this\n this.store.pointsTextureSize = Math.ceil(Math.sqrt(graph.pointsNumber ?? 0))\n this.store.linksTextureSize = Math.ceil(Math.sqrt((graph.linksNumber ?? 0) * 2))\n this.create()\n this.initPrograms()\n this.store.hoveredPoint = undefined\n this.store.alpha = simulationAlpha\n }\n\n /**\n * Runs one step of the simulation (forces, position updates, alpha decay).\n * This is the core simulation logic that can be called by step() or during rendering.\n *\n * @param forceExecution - Controls whether to run the simulation step when paused.\n * - If true: Always runs the simulation step, even when isSimulationRunning is false.\n * Used by step() to allow manual stepping while the simulation is paused.\n * - If false: Only runs if isSimulationRunning is true. Used during rendering\n * to respect pause/unpause state.\n */\n private runSimulationStep (forceExecution = false): void {\n const { config: { simulationGravity, simulationCenter, enableSimulation }, store: { isSimulationRunning } } = this\n\n if (!enableSimulation) return\n\n // Right-click repulsion (runs regardless of isSimulationRunning)\n if (this.isRightClickMouse && this.config.enableRightClickRepulsion) {\n this.forceMouse?.run()\n this.points?.updatePosition()\n }\n\n // Main simulation forces\n // If forceExecution is true (from step()), always run\n // Otherwise, respect isSimulationRunning and zoom state\n const shouldRunSimulation = forceExecution ||\n (isSimulationRunning && !(this.zoomInstance.isRunning && !this.config.enableSimulationDuringZoom))\n\n if (shouldRunSimulation) {\n if (simulationGravity) {\n this.forceGravity?.run()\n this.points?.updatePosition()\n }\n\n if (simulationCenter) {\n this.forceCenter?.run()\n this.points?.updatePosition()\n }\n\n this.forceManyBody?.run()\n this.points?.updatePosition()\n\n if (this.store.linksTextureSize) {\n this.forceLinkIncoming?.run()\n this.points?.updatePosition()\n this.forceLinkOutgoing?.run()\n this.points?.updatePosition()\n }\n\n if (this.graph.pointClusters || this.graph.clusterPositions) {\n this.clusters?.run()\n this.points?.updatePosition()\n }\n\n // Alpha decay and progress\n this.store.alpha += this.store.addAlpha(this.config.simulationDecay ?? defaultConfigValues.simulation.decay)\n if (this.isRightClickMouse && this.config.enableRightClickRepulsion) {\n this.store.alpha = Math.max(this.store.alpha, 0.1)\n }\n this.store.simulationProgress = Math.sqrt(Math.min(1, ALPHA_MIN / this.store.alpha))\n\n this.config.onSimulationTick?.(\n this.store.alpha,\n this.store.hoveredPoint?.index,\n this.store.hoveredPoint?.position\n )\n }\n\n // Track points (runs regardless of simulation state)\n this.points?.trackPoints()\n }\n\n private initPrograms (): void {\n if (this._isDestroyed || !this.points || !this.lines || !this.clusters) return\n this.points.initPrograms()\n this.lines.initPrograms()\n this.forceGravity?.initPrograms()\n this.forceLinkIncoming?.initPrograms()\n this.forceLinkOutgoing?.initPrograms()\n this.forceMouse?.initPrograms()\n this.forceManyBody?.initPrograms()\n this.forceCenter?.initPrograms()\n this.clusters.initPrograms()\n }\n\n /**\n * The rendering loop - schedules itself to run continuously\n */\n private frame (): void {\n if (this._isDestroyed) return\n\n // Check if simulation should end BEFORE scheduling next frame\n // This prevents one extra frame from running after simulation ends\n const { store: { alpha, isSimulationRunning } } = this\n if (alpha < ALPHA_MIN && isSimulationRunning) {\n this.end()\n }\n\n this.requestAnimationFrameId = window.requestAnimationFrame((now) => {\n this.renderFrame(now)\n\n // Continue the loop (even after simulation ends)\n if (!this._isDestroyed) {\n this.frame()\n }\n })\n }\n\n /**\n * Renders a single frame (the actual rendering logic).\n * This does NOT schedule the next frame.\n */\n private renderFrame (now?: number): void {\n if (this._isDestroyed) return\n if (!this.store.pointsTextureSize) return\n\n this.fpsMonitor?.begin()\n this.resizeCanvas()\n if (!this.dragInstance.isActive) {\n this.findHoveredItem()\n }\n\n // Run simulation step (respects isSimulationRunning)\n // When simulation ends, forces stop but rendering continues\n this.runSimulationStep(false)\n\n // Clear canvas\n this.reglInstance?.clear({\n color: this.store.backgroundColor,\n depth: 1,\n stencil: 0,\n })\n\n const { config: { renderLinks } } = this\n if (renderLinks && this.store.linksTextureSize) {\n this.lines?.draw()\n }\n\n this.points?.draw()\n if (this.dragInstance.isActive) {\n // To prevent the dragged point from suddenly jumping, run the drag function twice\n this.points?.drag()\n this.points?.drag()\n // Update tracked positions after drag, even when simulation is disabled\n this.points?.trackPoints()\n }\n this.fpsMonitor?.end(now ?? performance.now())\n this.currentEvent = undefined\n }\n\n private stopFrames (): void {\n if (this.requestAnimationFrameId) {\n window.cancelAnimationFrame(this.requestAnimationFrameId)\n this.requestAnimationFrameId = 0 // Reset to 0\n }\n }\n\n /**\n * Starts continuous rendering\n */\n private startFrames (): void {\n if (this._isDestroyed) return\n this.stopFrames() // Stop any existing rendering\n this.frame() // Start the loop\n }\n\n /**\n * Called automatically when simulation completes (alpha < ALPHA_MIN).\n * Rendering continues after this is called (for rendering/interaction).\n */\n private end (): void {\n this.store.isSimulationRunning = false\n this.store.simulationProgress = 1\n this.config.onSimulationEnd?.()\n }\n\n private onClick (event: MouseEvent): void {\n this.config.onClick?.(\n this.store.hoveredPoint?.index,\n this.store.hoveredPoint?.position,\n event\n )\n\n if (this.store.hoveredPoint) {\n this.config.onPointClick?.(\n this.store.hoveredPoint.index,\n this.store.hoveredPoint.position,\n event\n )\n } else if (this.store.hoveredLinkIndex !== undefined) {\n this.config.onLinkClick?.(\n this.store.hoveredLinkIndex,\n event\n )\n } else {\n this.config.onBackgroundClick?.(\n event\n )\n }\n }\n\n private updateMousePosition (event: MouseEvent | D3DragEvent<HTMLCanvasElement, undefined, Hovered>): void {\n if (!event) return\n const mouseX = (event as MouseEvent).offsetX ?? (event as D3DragEvent<HTMLCanvasElement, undefined, Hovered>).x\n const mouseY = (event as MouseEvent).offsetY ?? (event as D3DragEvent<HTMLCanvasElement, undefined, Hovered>).y\n if (mouseX === undefined || mouseY === undefined) return\n this.store.mousePosition = this.zoomInstance.convertScreenToSpacePosition([mouseX, mouseY])\n this.store.screenMousePosition = [mouseX, (this.store.screenSize[1] - mouseY)]\n }\n\n private onMouseMove (event: MouseEvent): void {\n this.currentEvent = event\n this.updateMousePosition(event)\n this.isRightClickMouse = event.which === 3\n this.config.onMouseMove?.(\n this.store.hoveredPoint?.index,\n this.store.hoveredPoint?.position,\n this.currentEvent\n )\n }\n\n private onRightClickMouse (event: MouseEvent): void {\n event.preventDefault()\n }\n\n private resizeCanvas (forceResize = false): void {\n if (this._isDestroyed) return\n const prevWidth = this.canvas.width\n const prevHeight = this.canvas.height\n const w = this.canvas.clientWidth\n const h = this.canvas.clientHeight\n\n if (forceResize || prevWidth !== w * this.config.pixelRatio || prevHeight !== h * this.config.pixelRatio) {\n const [prevW, prevH] = this.store.screenSize\n const { k } = this.zoomInstance.eventTransform\n const centerPosition = this.zoomInstance.convertScreenToSpacePosition([prevW / 2, prevH / 2])\n\n this.store.updateScreenSize(w, h)\n this.canvas.width = w * this.config.pixelRatio\n this.canvas.height = h * this.config.pixelRatio\n this.reglInstance?.poll()\n this.canvasD3Selection\n ?.call(this.zoomInstance.behavior.transform, this.zoomInstance.getTransform([centerPosition], k))\n this.points?.updateSampledPointsGrid()\n // Only update link index FBO if link hovering is enabled\n if (this.store.isLinkHoveringEnabled) {\n this.lines?.updateLinkIndexFbo()\n }\n }\n }\n\n private setZoomTransformByPointPositions (positions: number[], duration = 250, scale?: number, padding?: number): void {\n this.resizeCanvas()\n const transform = this.zoomInstance.getTransform(this.pair(positions), scale, padding)\n this.canvasD3Selection\n ?.transition()\n .ease(easeQuadInOut)\n .duration(duration)\n .call(this.zoomInstance.behavior.transform, transform)\n }\n\n private updateZoomDragBehaviors (): void {\n if (this.config.enableDrag) {\n this.canvasD3Selection?.call(this.dragInstance.behavior)\n } else {\n this.canvasD3Selection\n ?.call(this.dragInstance.behavior)\n .on('.drag', null)\n }\n\n if (this.config.enableZoom) {\n this.canvasD3Selection?.call(this.zoomInstance.behavior)\n } else {\n this.canvasD3Selection\n ?.call(this.zoomInstance.behavior)\n .on('wheel.zoom', null)\n }\n }\n\n private findHoveredItem (): void {\n if (this._isDestroyed || !this._isMouseOnCanvas || !this.reglInstance) return\n if (this._findHoveredItemExecutionCount < MAX_HOVER_DETECTION_DELAY) {\n this._findHoveredItemExecutionCount += 1\n return\n }\n this._findHoveredItemExecutionCount = 0\n this.findHoveredPoint()\n\n if (this.graph.linksNumber && this.store.isLinkHoveringEnabled) {\n this.findHoveredLine()\n } else if (this.store.hoveredLinkIndex !== undefined) {\n // Clear stale hoveredLinkIndex when there are no links\n const wasHovered = this.store.hoveredLinkIndex !== undefined\n this.store.hoveredLinkIndex = undefined\n if (wasHovered && this.config.onLinkMouseOut) {\n this.config.onLinkMouseOut(this.currentEvent)\n }\n }\n\n this.updateCanvasCursor()\n }\n\n private findHoveredPoint (): void {\n if (this._isDestroyed || !this.reglInstance || !this.points) return\n this.points.findHoveredPoint()\n let isMouseover = false\n let isMouseout = false\n const pixels = readPixels(this.reglInstance, this.points.hoveredFbo as regl.Framebuffer2D)\n const pointSize = pixels[1] as number\n if (pointSize) {\n const hoveredIndex = pixels[0] as number\n if (this.store.hoveredPoint?.index !== hoveredIndex) isMouseover = true\n const pointX = pixels[2] as number\n const pointY = pixels[3] as number\n this.store.hoveredPoint = {\n index: hoveredIndex,\n position: [pointX, pointY],\n }\n } else {\n if (this.store.hoveredPoint) isMouseout = true\n this.store.hoveredPoint = undefined\n }\n\n if (isMouseover && this.store.hoveredPoint) {\n this.config.onPointMouseOver?.(\n this.store.hoveredPoint.index,\n this.store.hoveredPoint.position,\n this.currentEvent\n )\n }\n if (isMouseout) this.config.onPointMouseOut?.(this.currentEvent)\n }\n\n private findHoveredLine (): void {\n if (this._isDestroyed || !this.reglInstance || !this.lines) return\n if (this.store.hoveredPoint) {\n if (this.store.hoveredLinkIndex !== undefined) {\n this.store.hoveredLinkIndex = undefined\n this.config.onLinkMouseOut?.(this.currentEvent)\n }\n return\n }\n this.lines.findHoveredLine()\n let isMouseover = false\n let isMouseout = false\n\n const pixels = readPixels(this.reglInstance, this.lines.hoveredLineIndexFbo as regl.Framebuffer2D)\n const hoveredLineIndex = pixels[0] as number\n\n if (hoveredLineIndex >= 0) {\n if (this.store.hoveredLinkIndex !== hoveredLineIndex) isMouseover = true\n this.store.hoveredLinkIndex = hoveredLineIndex\n } else {\n if (this.store.hoveredLinkIndex !== undefined) isMouseout = true\n this.store.hoveredLinkIndex = undefined\n }\n\n if (isMouseover && this.store.hoveredLinkIndex !== undefined) {\n this.config.onLinkMouseOver?.(this.store.hoveredLinkIndex)\n }\n if (isMouseout) this.config.onLinkMouseOut?.(this.currentEvent)\n }\n\n private updateCanvasCursor (): void {\n const { hoveredPointCursor, hoveredLinkCursor } = this.config\n if (this.dragInstance.isActive) select(this.canvas).style('cursor', 'grabbing')\n else if (this.store.hoveredPoint) {\n if (!this.config.enableDrag || this.store.isSpaceKeyPressed) select(this.canvas).style('cursor', hoveredPointCursor)\n else select(this.canvas).style('cursor', 'grab')\n } else if (this.store.isLinkHoveringEnabled && this.store.hoveredLinkIndex !== undefined) {\n select(this.canvas).style('cursor', hoveredLinkCursor)\n } else select(this.canvas).style('cursor', null)\n }\n\n private addAttribution (): void {\n if (!this.config.attribution) return\n this.attributionDivElement = document.createElement('div')\n this.attributionDivElement.style.cssText = `\n user-select: none;\n position: absolute;\n bottom: 0;\n right: 0;\n color: var(--cosmosgl-attribution-color);\n margin: 0 0.6rem 0.6rem 0;\n font-size: 0.7rem;\n font-family: inherit;\n `\n // Sanitize the attribution HTML content to prevent XSS attacks\n // Use more permissive settings for attribution since it's controlled by the library user\n this.attributionDivElement.innerHTML = sanitizeHtml(this.config.attribution, {\n ALLOWED_TAGS: ['a', 'b', 'i', 'em', 'strong', 'span', 'div', 'p', 'br', 'img'],\n ALLOWED_ATTR: ['href', 'target', 'class', 'id', 'style', 'src', 'alt', 'title'],\n })\n this.store.div?.appendChild(this.attributionDivElement)\n }\n}\n\nexport type { GraphConfigInterface } from './config'\nexport { PointShape } from './modules/GraphData'\n\nexport * from './helper'\n"],"names":["xhtml","namespaces","namespace","name","prefix","i","creatorInherit","document","uri","creatorFixed","fullname","creator","none","selector","selection_select","select","groups","m","subgroups","j","group","n","subgroup","node","subnode","Selection","array","x","empty","selectorAll","arrayAll","selection_selectAll","parents","matcher","childMatcher","find","childFind","match","childFirst","selection_selectChild","filter","children","childrenFilter","selection_selectChildren","selection_filter","sparse","update","selection_enter","EnterNode","parent","datum","child","next","constant$3","bindIndex","enter","exit","data","groupLength","dataLength","bindKey","key","nodeByKeyValue","keyValues","keyValue","selection_data","value","bind","constant","arraylike","enterGroup","updateGroup","exitGroup","i0","i1","previous","selection_exit","selection_join","onenter","onupdate","onexit","selection_merge","context","selection","groups0","groups1","m0","m1","merges","group0","group1","merge","selection_order","selection_sort","compare","ascending","compareNode","a","b","sortgroups","sortgroup","selection_call","callback","selection_nodes","selection_node","selection_size","size","selection_empty","selection_each","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","v","attrFunctionNS","selection_attr","defaultView","styleRemove","styleConstant","priority","styleFunction","selection_style","styleValue","propertyRemove","propertyConstant","propertyFunction","selection_property","classArray","string","classList","ClassList","classedAdd","names","list","classedRemove","classedTrue","classedFalse","classedFunction","selection_classed","textRemove","textConstant","textFunction","selection_text","htmlRemove","htmlConstant","htmlFunction","selection_html","raise","selection_raise","lower","selection_lower","selection_append","create","constantNull","selection_insert","before","remove","selection_remove","selection_cloneShallow","clone","selection_cloneDeep","selection_clone","deep","selection_datum","contextListener","listener","event","parseTypenames","typenames","t","onRemove","typename","on","onAdd","options","o","selection_on","dispatchEvent","type","params","window","dispatchConstant","dispatchFunction","selection_dispatch","selection_iterator","root","selection_selection","sourceEvent","pointer","svg","point","rect","noop","dispatch","_","Dispatch","types","T","get","set","copy","that","args","c","frame","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","f","now","clearNow","Timer","timer","delay","time","sleep","timerFlush","wake","nap","poke","t0","t1","t2","elapsed","emptyOn","emptyTween","CREATED","SCHEDULED","STARTING","STARTED","RUNNING","ENDING","ENDED","schedule","id","index","timing","schedules","init","self","tween","start","stop","tick","interrupt","active","selection_interrupt","define","constructor","factory","prototype","extend","definition","Color","darker","brighter","reI","reN","reP","reHex","reRgbInteger","reRgbPercent","reRgbaInteger","reRgbaPercent","reHslPercent","reHslaPercent","named","color","channels","color_formatHex","color_formatHex8","color_formatHsl","color_formatRgb","hslConvert","format","l","rgbn","Rgb","rgba","hsla","r","g","rgbConvert","rgb","opacity","k","clampi","clampa","rgb_formatHex","rgb_formatHex8","rgb_formatRgb","hex","h","s","Hsl","min","max","hsl","m2","hsl2rgb","clamph","clampt","constant$2","linear","d","exponential","y","gamma","nogamma","interpolateRgb","rgbGamma","end","colorRgb","numberArray","isNumberArray","genericArray","nb","na","date","interpolateNumber","object","reA","reB","zero","one","interpolateString","bi","am","bm","bs","q","number","interpolate$1","interpolateRound","degrees","identity","decompose","e","scaleX","scaleY","skewX","svgNode","parseCss","parseSvg","interpolateTransform","parse","pxComma","pxParen","degParen","pop","translate","xa","ya","xb","yb","rotate","scale","interpolateTransformCss","interpolateTransformSvg","epsilon2","cosh","sinh","tanh","interpolateZoom","zoomRho","rho","rho2","rho4","zoom","p0","p1","ux0","uy0","w0","ux1","uy1","w1","dx","dy","d2","S","d1","b0","b1","r0","r1","coshr0","u","_1","_2","_4","tweenRemove","tween0","tween1","tweenFunction","transition_tween","tweenValue","transition","interpolate","value1","string00","string1","interpolate0","string0","string10","transition_attr","attrInterpolate","attrInterpolateNS","attrTweenNS","attrTween","transition_attrTween","delayFunction","delayConstant","transition_delay","durationFunction","durationConstant","transition_duration","easeConstant","transition_ease","easeVarying","transition_easeVarying","transition_filter","Transition","transition_merge","onFunction","on0","on1","sit","transition_on","removeFunction","transition_remove","transition_select","transition_selectAll","inherit","transition_selection","styleNull","style","styleMaybeRemove","listener0","transition_style","styleInterpolate","styleTween","transition_styleTween","transition_text","textInterpolate","textTween","transition_textTween","transition_transition","id0","id1","newId","transition_end","resolve","reject","cancel","selection_prototype","quadIn","quadOut","quadInOut","cubicInOut","defaultTiming","easeCubicInOut","selection_transition","global","module","this","isTypedArray","base","opts","keys","endl","decodeB64","str","message","error","check","pred","encolon","checkParameter","param","possibilities","checkIsTypedArray","standardTypeEh","checkTypeOf","checkNonNegativeInt","checkOneOf","constructorKeys","checkConstructor","obj","leftPad","ShaderFile","ShaderLine","line","ShaderError","fileNumber","lineNumber","guessCommand","stack","pat","pat2","guessCallSite","parseSource","source","command","lines","files","parts","lineNumberInfo","nameInfo","file","parseErrorLog","errLog","result","errMsg","annotateFiles","errors","checkShaderError","gl","shader","typeName","checkCommandType","strings","styles","push","offset","token","tokenPat","checkLinkError","program","fragShader","vertShader","fragParse","vertParse","header","saveCommandRef","saveDrawCommandInfo","uniforms","attributes","stringStore","addProps","dict","uniformSet","attributeSet","commandRaise","callSite","checkCommand","checkParameterCommand","checkOptional","block","checkFramebufferFormat","attachment","texFormats","rbFormats","GL_CLAMP_TO_EDGE","GL_NEAREST","GL_NEAREST_MIPMAP_NEAREST","GL_LINEAR_MIPMAP_NEAREST","GL_NEAREST_MIPMAP_LINEAR","GL_LINEAR_MIPMAP_LINEAR","GL_BYTE","GL_UNSIGNED_BYTE","GL_SHORT","GL_UNSIGNED_SHORT","GL_INT","GL_UNSIGNED_INT","GL_FLOAT","GL_UNSIGNED_SHORT_4_4_4_4","GL_UNSIGNED_SHORT_5_5_5_1","GL_UNSIGNED_SHORT_5_6_5","GL_UNSIGNED_INT_24_8_WEBGL","GL_HALF_FLOAT_OES","TYPE_SIZE","pixelSize","isPow2","checkTexture2D","info","mipData","limits","w","mipimages","mw","mh","img","rowSize","checkTextureCube","texture","faces","face","mipmaps","check$1","VARIABLE_COUNTER","DYN_FUNC","DYN_CONSTANT","DYN_ARRAY","DynamicVariable","escapeStr","splitParts","firstChar","lastChar","subparts","toAccessorString","defineDynamic","isDynamic","unbox","path","dynamic","raf","cb","createStringStore","stringIds","stringValues","createCanvas","element","onDone","pixelRatio","canvas","resize","bounds","resizeObserver","onDestroy","createContext","contextAttributes","isHTMLElement","isWebGLContext","parseExtensions","input","getElement","desc","parseArgs","args_","container","extensions","optionalExtensions","profile","err","createExtensionCache","config","tryLoadExtension","name_","ext","loop","GL_BYTE$1","GL_UNSIGNED_BYTE$2","GL_SHORT$1","GL_UNSIGNED_SHORT$1","GL_INT$1","GL_UNSIGNED_INT$1","GL_FLOAT$2","nextPow16","log2","shift","createPool","bufferPool","alloc","sz","bin","free","buf","allocType","freeType","pool","GL_SUBPIXEL_BITS","GL_RED_BITS","GL_GREEN_BITS","GL_BLUE_BITS","GL_ALPHA_BITS","GL_DEPTH_BITS","GL_STENCIL_BITS","GL_ALIASED_POINT_SIZE_RANGE","GL_ALIASED_LINE_WIDTH_RANGE","GL_MAX_TEXTURE_SIZE","GL_MAX_VIEWPORT_DIMS","GL_MAX_VERTEX_ATTRIBS","GL_MAX_VERTEX_UNIFORM_VECTORS","GL_MAX_VARYING_VECTORS","GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS","GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS","GL_MAX_TEXTURE_IMAGE_UNITS","GL_MAX_FRAGMENT_UNIFORM_VECTORS","GL_MAX_CUBE_MAP_TEXTURE_SIZE","GL_MAX_RENDERBUFFER_SIZE","GL_VENDOR","GL_RENDERER","GL_VERSION","GL_SHADING_LANGUAGE_VERSION","GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT","GL_MAX_COLOR_ATTACHMENTS_WEBGL","GL_MAX_DRAW_BUFFERS_WEBGL","GL_TEXTURE_2D","GL_TEXTURE_CUBE_MAP","GL_TEXTURE_CUBE_MAP_POSITIVE_X","GL_TEXTURE0","GL_RGBA","GL_FLOAT$1","GL_UNSIGNED_BYTE$1","GL_FRAMEBUFFER","GL_FRAMEBUFFER_COMPLETE","GL_COLOR_ATTACHMENT0","GL_COLOR_BUFFER_BIT$1","wrapLimits","maxAnisotropic","maxDrawbuffers","maxColorAttachments","readFloat","readFloatTexture","fbo","pixels","isIE","npotTextureCube","cubeTexture","isNDArrayLike","values","flattenUtils","arrayShape$1","flattenArray","flatten1D","nx","out","flatten2D","ny","ptr","row","flatten3D","nz","ptr_","col","flattenRec","shape","level","stride","out_","array_","arrayTypes","int8","int16","int32","uint8","uint16","uint32","float","float32","glTypes","dynamic$1","stream","usageTypes","arrayFlatten","arrayShape","GL_STATIC_DRAW","GL_STREAM_DRAW","GL_UNSIGNED_BYTE$3","GL_FLOAT$3","DTYPES_SIZES","typedArrayCode","copyArray","inp","transpose","shapeX","shapeY","strideX","strideY","wrapBufferState","stats","destroyBuffer","bufferCount","bufferSet","REGLBuffer","destroy","streamPool","createStream","buffer","initBufferFromData","destroyStream","stream$$1","initBufferFromTypedArray","usage","dtype","dimension","persist","flatData","dim","typedData","transposeData","handle","createBuffer","deferInit","persistent","reglBuffer","byteLength","setSubData","subdata","offset_","converted","restoreBuffers","total","wrapper","points","triangles","triangle","primTypes","GL_POINTS","GL_LINES","GL_TRIANGLES","GL_BYTE$2","GL_UNSIGNED_BYTE$4","GL_SHORT$2","GL_UNSIGNED_SHORT$2","GL_INT$2","GL_UNSIGNED_INT$2","GL_ELEMENT_ARRAY_BUFFER","GL_STREAM_DRAW$1","GL_STATIC_DRAW$1","wrapElementsState","bufferState","elementSet","elementCount","elementTypes","REGLElementBuffer","createElementStream","initElements","destroyElementStream","elements","prim","count","predictedType","vertCount","primType","destroyElements","createElements","reglElements","FLOAT","INT","GL_UNSIGNED_SHORT$4","convertToHalfFloat","ushorts","sgn","exp","frac","isArrayLike","isPow2$1","GL_COMPRESSED_TEXTURE_FORMATS","GL_TEXTURE_2D$1","GL_TEXTURE_CUBE_MAP$1","GL_TEXTURE_CUBE_MAP_POSITIVE_X$1","GL_RGBA$1","GL_ALPHA","GL_RGB","GL_LUMINANCE","GL_LUMINANCE_ALPHA","GL_RGBA4","GL_RGB5_A1","GL_RGB565","GL_UNSIGNED_SHORT_4_4_4_4$1","GL_UNSIGNED_SHORT_5_5_5_1$1","GL_UNSIGNED_SHORT_5_6_5$1","GL_UNSIGNED_INT_24_8_WEBGL$1","GL_DEPTH_COMPONENT","GL_DEPTH_STENCIL","GL_SRGB_EXT","GL_SRGB_ALPHA_EXT","GL_HALF_FLOAT_OES$1","GL_COMPRESSED_RGB_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT1_EXT","GL_COMPRESSED_RGBA_S3TC_DXT3_EXT","GL_COMPRESSED_RGBA_S3TC_DXT5_EXT","GL_COMPRESSED_RGB_ATC_WEBGL","GL_COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL","GL_COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL","GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","GL_COMPRESSED_RGB_ETC1_WEBGL","GL_UNSIGNED_BYTE$5","GL_UNSIGNED_SHORT$3","GL_UNSIGNED_INT$3","GL_FLOAT$4","GL_TEXTURE_WRAP_S","GL_TEXTURE_WRAP_T","GL_REPEAT","GL_CLAMP_TO_EDGE$1","GL_MIRRORED_REPEAT","GL_TEXTURE_MAG_FILTER","GL_TEXTURE_MIN_FILTER","GL_NEAREST$1","GL_LINEAR","GL_NEAREST_MIPMAP_NEAREST$1","GL_LINEAR_MIPMAP_NEAREST$1","GL_NEAREST_MIPMAP_LINEAR$1","GL_LINEAR_MIPMAP_LINEAR$1","GL_GENERATE_MIPMAP_HINT","GL_DONT_CARE","GL_FASTEST","GL_NICEST","GL_TEXTURE_MAX_ANISOTROPY_EXT","GL_UNPACK_ALIGNMENT","GL_UNPACK_FLIP_Y_WEBGL","GL_UNPACK_PREMULTIPLY_ALPHA_WEBGL","GL_UNPACK_COLORSPACE_CONVERSION_WEBGL","GL_BROWSER_DEFAULT_WEBGL","GL_TEXTURE0$1","MIPMAP_FILTERS","CHANNELS_FORMAT","FORMAT_CHANNELS","objectName","CANVAS_CLASS","OFFSCREENCANVAS_CLASS","CONTEXT2D_CLASS","BITMAP_CLASS","IMAGE_CLASS","VIDEO_CLASS","PIXEL_CLASSES","TYPE_SIZES","FORMAT_SIZES_SPECIAL","isNumericArray","arr","isRectArray","width","classString","isCanvasElement","isOffscreenCanvas","isContext2D","isBitmap","isImageElement","isVideoElement","isPixelData","className","typedArrayCode$1","convertData","preConvert","image","postConvert","strideC","p","getTextureSize","height","isMipmap","isCube","createTextureSet","reglPoll","contextState","mipmapHint","wrapModes","magFilters","minFilters","colorSpace","textureTypes","textureFormats","compressedTextureFormats","supportedCompressedFormats","supportedFormats","textureFormatsInvert","val","textureTypesInvert","magFiltersInvert","minFiltersInvert","wrapModesInvert","colorFormats","glenum","TexFlags","copyFlags","other","parseFlags","flags","hasChannels","hasFormat","formatStr","internalformat","setFlags","TexImage","parseImage","viewW","viewH","shapeC","dd","allocData","setImage","target","miplevel","setSubImage","imagePool","allocImage","freeImage","MipMap","parseMipMapFromShape","mipmap","parseMipMapFromObject","imgData","setMipMap","images","mipPool","allocMipMap","freeMipMap","TexInfo","parseTexInfo","minFilter","magFilter","wrapS","wrapT","wrap","optWrapS","optWrapT","anisotropic","hasMipMap","setTexInfo","textureCount","textureSet","numTexUnits","textureUnits","REGLTexture","tempBind","tempRestore","prev","unit","createTexture2D","reglTexture2D","texInfo","subimage","x_","y_","level_","imageData","w_","h_","_w","_h","createTextureCube","a0","a1","a2","a3","a4","a5","reglTextureCube","faceInput","radius_","radius","destroyTextures","restoreTextures","tex","refreshTextures","GL_RENDERBUFFER","GL_RGBA4$1","GL_RGB5_A1$1","GL_RGB565$1","GL_DEPTH_COMPONENT16","GL_STENCIL_INDEX8","GL_DEPTH_STENCIL$1","GL_SRGB8_ALPHA8_EXT","GL_RGBA32F_EXT","GL_RGBA16F_EXT","GL_RGB16F_EXT","FORMAT_SIZES","getRenderbufferSize","wrapRenderbuffers","formatTypes","formatTypesInvert","renderbufferCount","renderbufferSet","REGLRenderbuffer","renderbuffer","rb","createRenderbuffer","reglRenderbuffer","restoreRenderbuffers","GL_FRAMEBUFFER$1","GL_RENDERBUFFER$1","GL_TEXTURE_2D$2","GL_TEXTURE_CUBE_MAP_POSITIVE_X$2","GL_COLOR_ATTACHMENT0$1","GL_DEPTH_ATTACHMENT","GL_STENCIL_ATTACHMENT","GL_DEPTH_STENCIL_ATTACHMENT","GL_FRAMEBUFFER_COMPLETE$1","GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT","GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT","GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS","GL_FRAMEBUFFER_UNSUPPORTED","GL_HALF_FLOAT_OES$2","GL_UNSIGNED_BYTE$6","GL_FLOAT$5","GL_RGB$1","GL_RGBA$2","GL_DEPTH_COMPONENT$1","colorTextureFormatEnums","textureFormatChannels","textureTypeSizes","GL_RGBA4$2","GL_RGB5_A1$2","GL_RGB565$2","GL_DEPTH_COMPONENT16$1","GL_STENCIL_INDEX8$1","GL_DEPTH_STENCIL$2","GL_SRGB8_ALPHA8_EXT$1","GL_RGBA32F_EXT$1","GL_RGBA16F_EXT$1","GL_RGB16F_EXT$1","colorRenderbufferFormatEnums","statusCode","wrapFBOState","textureState","renderbufferState","framebufferState","colorTextureFormats","colorRenderbufferFormats","colorTypes","FramebufferAttachment","decRef","incRefAndCheckShape","tw","th","attach","location","parseAttachment","allocAttachment","isTexture","unwrapAttachment","resizeAttachment","framebufferCount","framebufferSet","REGLFramebuffer","decFBORefs","framebuffer","updateFramebuffer","colorAttachments","status","createFBO","reglFramebuffer","needsDepth","needsStencil","colorBuffer","colorTexture","colorFormat","colorType","colorCount","depthBuffer","stencilBuffer","depthStencilBuffer","depthStencilTexture","depthAttachment","stencilAttachment","depthStencilAttachment","commonColorAttachmentSize","colorAttachmentSize","createCubeFBO","reglFramebufferCube","colorCubes","cubeMapParams","cube","colors","restoreFramebuffers","fb","GL_FLOAT$6","GL_ARRAY_BUFFER$1","GL_ELEMENT_ARRAY_BUFFER$1","VAO_OPTIONS","AttributeRecord","wrapAttributeState","elementState","drawState","NUM_ATTRIBUTES","attributeBindings","vaoCount","vaoSet","state","extVAO","restoreVAO","createVAO","getVAO","setVAOEXT","setVAOEmulated","destroyVAOEXT","record","extInstanced","vao","exti","binding","REGLVAO","extension","attr","_attr","updateVAO","bufUpdated","nattributes","spec","rec","GL_FRAGMENT_SHADER","GL_VERTEX_SHADER","GL_ACTIVE_UNIFORMS","GL_ACTIVE_ATTRIBUTES","wrapShaderState","fragShaders","vertShaders","ActiveInfo","insertActiveInfo","getShader","cache","programCache","programList","PROGRAM_COUNTER","REGLProgram","fragId","vertId","linkProgram","attributeLocations","numUniforms","uniName","numAttributes","restoreShaders","deleteShader","attribLocations","prevProgram","idx","GL_RGBA$3","GL_UNSIGNED_BYTE$7","GL_PACK_ALIGNMENT","GL_FLOAT$7","wrapReadPixels","glAttributes","readPixelsImpl","readPixelsFBO","readPixels","slice","join","createEnvironment","varCounter","linkedNames","linkedValues","link","code","vars","def","scope","entry","entryToString","exitToString","save","prop","conditional","thenBlock","elseBlock","thenToString","elseToString","elseClause","globalBlock","procedures","proc","arg","body","bodyToString","compile","src","CUTE_COMPONENTS","GL_UNSIGNED_BYTE$8","ATTRIB_STATE_POINTER","ATTRIB_STATE_CONSTANT","DYN_FUNC$1","DYN_PROP$1","DYN_CONTEXT$1","DYN_STATE$1","DYN_THUNK","DYN_CONSTANT$1","DYN_ARRAY$1","S_DITHER","S_BLEND_ENABLE","S_BLEND_COLOR","S_BLEND_EQUATION","S_BLEND_FUNC","S_DEPTH_ENABLE","S_DEPTH_FUNC","S_DEPTH_RANGE","S_DEPTH_MASK","S_COLOR_MASK","S_CULL_ENABLE","S_CULL_FACE","S_FRONT_FACE","S_LINE_WIDTH","S_POLYGON_OFFSET_ENABLE","S_POLYGON_OFFSET_OFFSET","S_SAMPLE_ALPHA","S_SAMPLE_ENABLE","S_SAMPLE_COVERAGE","S_STENCIL_ENABLE","S_STENCIL_MASK","S_STENCIL_FUNC","S_STENCIL_OPFRONT","S_STENCIL_OPBACK","S_SCISSOR_ENABLE","S_SCISSOR_BOX","S_VIEWPORT","S_PROFILE","S_FRAMEBUFFER","S_VERT","S_FRAG","S_ELEMENTS","S_PRIMITIVE","S_COUNT","S_OFFSET","S_INSTANCES","S_VAO","SUFFIX_WIDTH","SUFFIX_HEIGHT","S_FRAMEBUFFER_WIDTH","S_FRAMEBUFFER_HEIGHT","S_VIEWPORT_WIDTH","S_VIEWPORT_HEIGHT","S_DRAWINGBUFFER","S_DRAWINGBUFFER_WIDTH","S_DRAWINGBUFFER_HEIGHT","NESTED_OPTIONS","GL_ARRAY_BUFFER$2","GL_ELEMENT_ARRAY_BUFFER$2","GL_FRAGMENT_SHADER$1","GL_VERTEX_SHADER$1","GL_TEXTURE_2D$3","GL_TEXTURE_CUBE_MAP$2","GL_CULL_FACE","GL_BLEND","GL_DITHER","GL_STENCIL_TEST","GL_DEPTH_TEST","GL_SCISSOR_TEST","GL_POLYGON_OFFSET_FILL","GL_SAMPLE_ALPHA_TO_COVERAGE","GL_SAMPLE_COVERAGE","GL_FLOAT$8","GL_FLOAT_VEC2","GL_FLOAT_VEC3","GL_FLOAT_VEC4","GL_INT$3","GL_INT_VEC2","GL_INT_VEC3","GL_INT_VEC4","GL_BOOL","GL_BOOL_VEC2","GL_BOOL_VEC3","GL_BOOL_VEC4","GL_FLOAT_MAT2","GL_FLOAT_MAT3","GL_FLOAT_MAT4","GL_SAMPLER_2D","GL_SAMPLER_CUBE","GL_TRIANGLES$1","GL_FRONT","GL_BACK","GL_CW","GL_CCW","GL_MIN_EXT","GL_MAX_EXT","GL_ALWAYS","GL_KEEP","GL_ZERO","GL_ONE","GL_FUNC_ADD","GL_LESS","GL_FRAMEBUFFER$2","GL_COLOR_ATTACHMENT0$2","blendFuncs","invalidBlendCombinations","compareFuncs","stencilOps","shaderType","orientationType","isBufferArgs","sortState","Declaration","thisDep","contextDep","propDep","append","isStatic","decl","createStaticDecl","createDynamicDecl","dyn","numArgs","subDyn","subArgs","SCOPE_DECL","reglCore","uniformState","attributeState","shaderState","blendEquations","extInstancing","extDrawBuffers","extVertexArrays","currentState","nextState","GL_STATE_NAMES","GL_FLAGS","GL_VARIABLES","propName","stateFlag","sname","cap","stateVariable","func","sharedState","sharedConstants","drawCallCounter","createREGLEnvironment","env","SHARED","shared","nextVars","currentVars","variable","constants","argList","scopeAttribs","parseProfile","staticOptions","dynamicOptions","profileEnable","parseFramebuffer","FRAMEBUFFER","CONTEXT","FRAMEBUFFER_FUNC","FRAMEBUFFER_STATE","parseViewportScissor","parseBox","box","BOX_W","BOX_H","dynBox","BOX","BOX_X","BOX_Y","viewport","prevViewport","VIEWPORT","parseAttribLocations","staticProgram","staticAttributes","sAttributes","bindings","parseProgram","parseShader","frag","vert","progVar","SHADER_STATE","progDef","parseDraw","staticDraw","vaoActive","parseVAO","vaoRef","elementsActive","parseElements","IS_BUFFER_ARGS","ELEMENT_STATE","elementDefn","elementStream","ifte","parsePrimitive","primitive","dynPrimitive","PRIM_TYPES","parseParam","isOffset","dynValue","OFFSET","parseVertCount","dynCount","countVariable","instances","parseGLState","STATE","parseStatic","parseDynamic","COMPARE_FUNCS","Z_NEAR","Z_FAR","srcRGB","srcAlpha","dstRGB","dstAlpha","BLEND_FUNCS","read","suffix","INVALID_BLEND_COMBINATIONS","SRC_RGB","SRC_ALPHA","DST_RGB","DST_ALPHA","BLEND_EQUATIONS","RGB","ALPHA","checkProp","cmp","ref","mask","assert","fail","zfail","zpass","STENCIL_OPS","factor","units","FACTOR","UNITS","sampleValue","sampleInvert","VALUE","INVERT","parseUniforms","staticUniforms","dynamicUniforms","UNIFORMS","reglType","ITEM","parseAttributes","dynamicAttributes","attributeDefs","attribute","normalized","divisor","VALID_KEYS","appendAttributeCode","BUFFER_STATE","defaultRecord","BUFFER","TYPE","emitReadRecord","parseContext","staticContext","dynamicContext","parseArguments","KEY_NAMES","checkKeys","viewportAndScissor","draw","copyBox","defn","dirty","useVAO","staticBindings","emitContext","contextEnter","emitPollFramebuffer","skipCheck","GL","EXT_DRAW_BUFFERS","DRAW_BUFFERS","BACK_BUFFER","NEXT","emitPollState","CURRENT_VARS","NEXT_VARS","CURRENT_STATE","NEXT_STATE","CURRENT","emitSetOptions","flag","injectExtensions","emitProfile","useScope","incrementCounter","STATS","TIMER","profileArg","perfCounter","CPU_START","QUERY_COUNTER","emitProfileStart","emitProfileEnd","scopeProfile","USE_PROFILE","emitAttributes","typeLength","emitBindAttribute","ATTRIBUTE","LOCATION","BINDING","CONST_COMPONENTS","COMMON_KEYS","emitBuffer","SIZE","DIVISOR","emitConstant","scopeAttrib","emitUniforms","isBatchInnerLoop","definedArrUniforms","infix","uniform","arrUniformName","UNIFORM","TEX_VALUE","MAT_VALUE","emitCheck","checkType","checkVector","checkTexture","unroll","TEX","matSize","STORAGE","cur","prevS","emitDraw","outer","inner","DRAW_STATE","drawOptions","emitElements","ELEMENTS","emitCount","COUNT","emitValue","PRIMITIVE","INSTANCES","EXT_INSTANCING","ELEMENT_TYPE","elementsStatic","emitInstancing","drawElements","drawArrays","emitRegular","createBody","emitBody","parentEnv","emitDrawBody","emitDrawProc","drawCache","PROG_ID","CACHED_PROC","emitBatchDynamicShaderBody","all","emitBatchBody","contextDynamic","BATCH_ID","PROP_LIST","NUM_PROPS","PROPS","isInnerDefn","isOuterDefn","progCache","PROGRAM","emitBatchProc","batch","needsContext","needsFramebuffer","progDefn","batchCache","emitScopeProc","opt","saveShader","isDynamicObject","props","splatObject","globals","objectRef","deps","appendBlock","compileCommand","poll","refresh","common","INSTANCING","GL_QUERY_RESULT_EXT","GL_QUERY_RESULT_AVAILABLE_EXT","GL_TIME_ELAPSED_EXT","createTimer","queryPool","allocQuery","freeQuery","query","pendingQueries","beginQuery","pushScopeStats","endQuery","PendingStats","pendingStatsPool","allocPendingStats","freePendingStats","pendingStats","ps","timeSum","queryPtr","queryTime","startPtr","endPtr","GL_COLOR_BUFFER_BIT","GL_DEPTH_BUFFER_BIT","GL_STENCIL_BUFFER_BIT","GL_ARRAY_BUFFER","CONTEXT_LOST_EVENT","CONTEXT_RESTORED_EVENT","DYN_PROP","DYN_CONTEXT","DYN_STATE","haystack","needle","wrapREGL","contextLost","extensionState","stats$$1","START_TIME","WIDTH","HEIGHT","core","rafCallbacks","lossCallbacks","restoreCallbacks","destroyCallbacks","activeRAF","handleRAF","startRAF","stopRAF","handleContextLoss","handleContextRestored","compileProcedure","flattenNestedOptions","separateDynamic","useArrays","staticItems","dynamicItems","option","compiled","EMPTY_ARRAY","reserve","REGLCommand","setFBO","clearImpl","clearFlags","clear","pendingCancel","pollViewport","scissorBox","addListener","callbacks","regl","defaultPointColor","defaultGreyoutPointOpacity","defaultGreyoutPointColor","defaultPointOpacity","defaultPointSize","defaultLinkColor","defaultGreyoutLinkOpacity","defaultLinkOpacity","defaultLinkWidth","defaultBackgroundColor","defaultConfigValues","hoveredPointRingOpacity","focusedPointRingOpacity","defaultScaleToZoom","entries","setPrototypeOf","isFrozen","getPrototypeOf","getOwnPropertyDescriptor","freeze","seal","apply","construct","fun","thisValue","Func","arrayForEach","unapply","arrayLastIndexOf","arrayPop","arrayPush","arraySplice","stringToLowerCase","stringToString","stringMatch","stringReplace","stringIndexOf","stringTrim","objectHasOwnProperty","regExpTest","typeErrorCreate","unconstruct","thisArg","_len","_key","_len2","_key2","addToSet","transformCaseFunc","lcElement","cleanArray","newObject","property","lookupGetter","fallbackValue","html$1","svg$1","svgFilters","svgDisallowed","mathMl$1","mathMlDisallowed","text","html","mathMl","xml","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_ALLOWED_URI","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","DOCTYPE_NAME","CUSTOM_ELEMENT","EXPRESSIONS","NODE_TYPE","getGlobal","_createTrustedTypesPolicy","trustedTypes","purifyHostElement","ATTR_NAME","policyName","scriptUrl","_createHooksMap","createDOMPurify","DOMPurify","originalDocument","currentScript","DocumentFragment","HTMLTemplateElement","Node","Element","NodeFilter","NamedNodeMap","HTMLFormElement","DOMParser","ElementPrototype","cloneNode","getNextSibling","getChildNodes","getParentNode","template","trustedTypesPolicy","emptyHTML","implementation","createNodeIterator","createDocumentFragment","getElementsByTagName","importNode","hooks","IS_ALLOWED_URI$1","ALLOWED_TAGS","DEFAULT_ALLOWED_TAGS","ALLOWED_ATTR","DEFAULT_ALLOWED_ATTR","CUSTOM_ELEMENT_HANDLING","FORBID_TAGS","FORBID_ATTR","ALLOW_ARIA_ATTR","ALLOW_DATA_ATTR","ALLOW_UNKNOWN_PROTOCOLS","ALLOW_SELF_CLOSE_IN_ATTR","SAFE_FOR_TEMPLATES","SAFE_FOR_XML","WHOLE_DOCUMENT","SET_CONFIG","FORCE_BODY","RETURN_DOM","RETURN_DOM_FRAGMENT","RETURN_TRUSTED_TYPE","SANITIZE_DOM","SANITIZE_NAMED_PROPS","SANITIZE_NAMED_PROPS_PREFIX","KEEP_CONTENT","IN_PLACE","USE_PROFILES","FORBID_CONTENTS","DEFAULT_FORBID_CONTENTS","DATA_URI_TAGS","DEFAULT_DATA_URI_TAGS","URI_SAFE_ATTRIBUTES","DEFAULT_URI_SAFE_ATTRIBUTES","MATHML_NAMESPACE","SVG_NAMESPACE","HTML_NAMESPACE","NAMESPACE","IS_EMPTY_INPUT","ALLOWED_NAMESPACES","DEFAULT_ALLOWED_NAMESPACES","MATHML_TEXT_INTEGRATION_POINTS","HTML_INTEGRATION_POINTS","COMMON_SVG_AND_HTML_ELEMENTS","PARSER_MEDIA_TYPE","SUPPORTED_PARSER_MEDIA_TYPES","DEFAULT_PARSER_MEDIA_TYPE","CONFIG","formElement","isRegexOrFunction","testValue","_parseConfig","cfg","ALL_SVG_TAGS","ALL_MATHML_TAGS","_checkValidNamespace","tagName","parentTagName","_forceRemove","_removeAttribute","_initDocument","doc","leadingWhitespace","matches","dirtyPayload","_createNodeIterator","_isClobbered","_isNode","_executeHooks","currentNode","hook","_sanitizeElements","content","_isBasicCustomElement","parentNode","childNodes","childCount","childClone","expr","_isValidAttribute","lcTag","lcName","_sanitizeAttributes","hookEvent","namespaceURI","attrValue","initValue","_sanitizeShadowDOM","fragment","shadowNode","shadowIterator","importedNode","returnNode","nodeIterator","serializedHTML","tag","entryPoint","hookFunction","purify","isFunction","isArray","isObject","isAClassInstance","isPlainObject","getRgbaColor","d3Color","rgbToBrightness","reglInstance","resultPixels","clamp","num","isNumber","sanitizeHtml","GraphConfig","configParameter","current","CoreModule","store","calculate_centermass_default","force_center_default","createQuadBuffer","createIndexesForBuffer","textureSize","indexes","clear_default","quad_default","ForceCenter","clearFrag","updateVert","calculateCentermassFrag","calculateCentermassVert","forceFrag","_a","_b","_c","force_gravity_default","ForceGravity","maxLinks","LinkDirection","ForceLink","direction","pointsTextureSize","linksTextureSize","linkBiasAndStrengthState","linkDistanceState","grouped","linkIndex","connectedPointIndices","pointIndex","connectedPointIndex","initialLinkIndex","degree","connectedDegree","degreeSum","bias","minDegree","strength","calculate_level_default","force_level_default","force_centermass_default","ForceManyBody","levelTextureSize","randomValuesState","calculateLevelFrag","calculateLevelVert","forceCenterFrag","_d","_e","cellSize","startLevel","maxLevels","delta","calcAdd","quad","groupSize","iEnding","jEnding","ForceManyBodyQuadtree","levelKey","force_mouse_default","ForceMouse","force_cluster_default","Clusters","clusterIndex","clusterState","clusterPositions","clusterForceCoefficient","cluster","UISVG","UICSS","GLBench","settings","rafId","glFinish","activeAccums","dt","addProfiler","fn","elm","logger","dom","classes","nodes","cpu","gpu","mem","fps","totalTime","frameId","chart","circularId","len","duration","frameCount","timespan","hz","nameId","benchCSS","FPSMonitor","PointShape","GraphData","defaultRgba","defaultShape","pointShapes","pointImageIndices","rawIndex","imageIndex","sourceIndex","targetIndex","draw_curve_line_default","hovered_line_index_default","descending","bisector","compare1","compare2","left","lo","hi","mid","right","center","ascendingBisect","bisectRight","extent","valueof","e10","e5","e2","ticks","reverse","step","tickIncrement","power","tickStep","step0","step1","range","initRange","domain","normalize","clamper","bimap","d0","polymap","bisect","transformer","interpolateValue","transform","untransform","unknown","piecewise","output","rescale","continuous","formatDecimal","formatDecimalParts","coefficient","exponent","formatGroup","grouping","thousands","length","formatNumerals","numerals","re","formatSpecifier","specifier","FormatSpecifier","formatTrim","prefixExponent","formatPrefixAuto","formatRounded","identity$1","map","prefixes","formatLocale","locale","currencyPrefix","currencySuffix","decimal","percent","minus","nan","newFormat","fill","align","sign","symbol","comma","precision","trim","formatType","maybeSuffix","valuePrefix","valueSuffix","valueNegative","padding","formatPrefix","defaultLocale","precisionFixed","precisionPrefix","precisionRound","tickFormat","linearish","prestep","maxIter","transformPow","transformSqrt","transformSquare","powish","pow","getCurveLineGeometry","segments","scalePow","hodographValues","Lines","drawLineVert","drawLineFrag","hoveredLineIndexVert","hoveredLineIndexFrag","instancePoints","fromIndex","toIndex","fromX","fromY","toX","toY","linkIndices","curvedLinks","curvedLinkSegments","draw_points_default","find_points_on_area_selection_default","find_points_on_polygon_selection_default","draw_highlighted_default","find_hovered_point_default","fill_sampled_points_default","update_position_default","track_positions_default","drag_point_default","createAtlasDataFromImageData","imageDataArray","webglMaxTextureSize","maxDimension","originalMaxDimension","atlasCoordsSize","atlasSize","scalingFactor","atlasData","atlasCoords","originalWidth","originalHeight","individualScale","scaledWidth","scaledHeight","atlasX","atlasY","srcX","srcIndex","atlasIndex","Points","rescalePositions","enableSimulation","initialState","shouldRescale","updatePositionFrag","dragPointFrag","drawPointsFrag","drawPointsVert","findPointsOnAreaSelectionFrag","findPointsOnPolygonSelectionFrag","findHoveredPointFrag","findHoveredPointVert","fillGridWithSampledPointsFrag","fillGridWithSampledPointsVert","drawHighlightedFrag","drawHighlightedVert","trackPositionsFrag","selectedIndices","selectedIndex","pinnedIndex","atlasResult","screenSize","pointSamplingDistance","dist","_f","_g","renderHoveredPointRing","pointSize","polygonPath","textureData","indices","sortedIndex","isSimulationRunning","tracked","positions","isNotEmpty","temp","spaceSize","pointsNumber","minX","maxX","minY","maxY","densityThreshold","scaleFactor","offsetX","offsetY","ARRAY_TYPE","glMatrix.ARRAY_TYPE","a00","a01","a02","a10","a11","a12","a20","a21","a22","projection","Alea","seed","me","mash","Mash","impl","xg","prng","XorGen","strseed","top","bot","X","limit","__viteBrowserExternal","math","chunks","digits","rngname","startdenom","significance","overflow","nodecrypto","seedrandom","shortseed","mixkey","flatten","tostring","autoseed","arc4","ARC4","is_math_call","keylen","depth","typ","stringseed","smear","browser","plugins","require$$0","alea","xor128","require$$1","xorwow","require$$2","xorshift7","require$$3","xor4096","require$$4","tychei","require$$5","sr","require$$6","_defineProperties","descriptor","_toPropertyKey","_createClass","Constructor","protoProps","staticProps","_inheritsLoose","subClass","superClass","_setPrototypeOf","_toPrimitive","hint","res","RNG","_proto","_opts","strSeed","RNGFunction","_RNG","thunk","_this","RNGFactory","_args","_args$","arg0","random","numberValidator","NumberValidator","uniformInt","uniformBoolean","normal","mu","sigma","logNormal","bernoulli","binomial","geometric","invLogP","logFactorialTable","logFactorial","logSqrt2PI","poisson","lambda","expMean","smu","invAlpha","vR","us","_logFactorial","irwinHall","sum","bates","pareto","alpha","RNGMathRandom","_seed","Random","rng","label","getter","ALPHA_MIN","MAX_POINT_SIZE","MAX_HOVER_DETECTION_DELAY","Store","mat3.create","scaleLinear","decay","brightness","configSpaceSize","adjustedSpaceSize","convertedRgba","nonpassive","nonpassivecapture","nopropagation","noevent$1","dragDisable","view","noevent","yesdrag","noclick","constant$1","DragEvent","subject","identifier","defaultFilter","defaultContainer","defaultSubject","defaultTouchable","drag","touchable","gestures","listeners","mousedownx","mousedowny","mousemoving","touchending","clickDistance2","mousedowned","touchstarted","touchmoved","touchended","gesture","beforestart","mousemoved","mouseupped","nodrag","touches","touch","ZoomEvent","Transform","defaultExtent","defaultTransform","defaultWheelDelta","defaultConstrain","translateExtent","dx0","dx1","dy0","dy1","constrain","wheelDelta","scaleExtent","touchstarting","touchfirst","touchDelay","wheelDelay","tapDistance","wheeled","dblclicked","collection","k0","k1","centroid","clean","Gesture","wheelidled","currentTarget","x0","y0","dragEnable","started","l0","l1","dp","dl","Zoom","zoomIdentity","userDriven","mat3.projection","mat3.translate","mat3.scale","xExtent","yExtent","xScale","yScale","clampedScale","xCenter","yCenter","translateX","translateY","position","currX","currY","pointX","pointY","centerX","centerY","screenPosition","invertedX","invertedY","spacePosition","screenPointX","screenPointY","spaceRadius","scalePointsOnZoom","maxPointSize","Drag","createWebGLErrorMessage","errorDiv","Graph","div","prevConfig","pointPositions","dontRescale","pointColors","pointSizes","imageIndices","imageSizes","links","linkColors","linkWidths","linkArrows","linkStrength","pointClusters","clusterStrength","pinnedIndices","simulationAlpha","fitViewOnInit","fitViewDelay","fitViewPadding","fitViewDuration","fitViewByPointsInRect","fitViewByPointIndices","initialZoomLevel","canZoomOut","positionPixels","posX","posY","distance","zoomLevel","middle","easeQuadIn","easeQuadOut","pointPositionsPixels","clusterPositionsPixels","sumX","sumY","sumN","positionsArray","pixel","convertedPath","selectAdjacentPoints","adjacentIndices","graph","forceExecution","_i","_j","_k","_l","_m","_n","_o","_p","_q","_r","_s","simulationGravity","simulationCenter","renderLinks","mouseX","mouseY","forceResize","prevWidth","prevHeight","prevW","prevH","centerPosition","easeQuadInOut","wasHovered","isMouseover","isMouseout","hoveredIndex","hoveredLineIndex","hoveredPointCursor","hoveredLinkCursor"],"mappings":"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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ICAAA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ICAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ICAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ICAAC,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ICAAA,KAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAA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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,99,127,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,182,183,184,185,186,187,188,189,191,192,193,195,196,197,198,199,200,201,202,203,204]}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}