@reearth/core 0.0.7-alpha.6 → 0.0.7-alpha.61

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 (515) hide show
  1. package/LICENSE +177 -0
  2. package/dist/core.js +70991 -60887
  3. package/dist/core.umd.cjs +666 -680
  4. package/dist/{index-DqatWUTw.js → index-CUJ6HGQn.js} +1021 -908
  5. package/dist/index.d.ts +157 -71
  6. package/package.json +88 -74
  7. package/src/Map/ClusteredLayers/index.tsx +1 -1
  8. package/src/Map/Geoid/index.tsx +68 -0
  9. package/src/Map/Geoid/types.ts +8 -0
  10. package/src/Map/Layer/hooks.ts +7 -4
  11. package/src/Map/Layer/index.tsx +3 -1
  12. package/src/Map/Layers/hooks.ts +35 -8
  13. package/src/Map/Layers/index.tsx +13 -2
  14. package/src/Map/Layers/keys.ts +1 -0
  15. package/src/Map/Sketch/hooks.ts +454 -411
  16. package/src/Map/Sketch/index.tsx +68 -21
  17. package/src/Map/Sketch/sketchMachine.ts +427 -102
  18. package/src/Map/Sketch/sketchMachine.typegen.ts +58 -1
  19. package/src/Map/Sketch/types.ts +10 -20
  20. package/src/Map/Sketch/usePluginSketchLayer.ts +105 -0
  21. package/src/Map/Sketch/useSketch.ts +558 -0
  22. package/src/Map/Sketch/useSketchFeature.ts +198 -0
  23. package/src/Map/SpatialId/constants.ts +21 -0
  24. package/src/Map/SpatialId/hooks.ts +448 -0
  25. package/src/Map/SpatialId/index.tsx +63 -0
  26. package/src/Map/SpatialId/types.ts +68 -0
  27. package/src/Map/SpatialId/utils.ts +65 -0
  28. package/src/Map/hooks.ts +54 -8
  29. package/src/Map/index.tsx +42 -9
  30. package/src/Map/ref.ts +32 -3
  31. package/src/Map/types/index.ts +39 -3
  32. package/src/Map/types/viewerProperty.ts +10 -0
  33. package/src/Map/useTimelineManager.ts +4 -10
  34. package/src/Map/utils.ts +1 -1
  35. package/src/Visualizer/Error.tsx +4 -1
  36. package/src/Visualizer/context.tsx +5 -5
  37. package/src/Visualizer/coreContext.tsx +3 -1
  38. package/src/Visualizer/hooks.ts +56 -22
  39. package/src/Visualizer/index.stories.tsx +15 -0
  40. package/src/Visualizer/index.tsx +25 -6
  41. package/src/Visualizer/useViewport.ts +1 -1
  42. package/src/engines/Cesium/Feature/Box/hooks/box.ts +4 -4
  43. package/src/engines/Cesium/Feature/Box/hooks/edge.ts +1 -1
  44. package/src/engines/Cesium/Feature/Box/hooks/side.ts +1 -1
  45. package/src/engines/Cesium/Feature/Box/utils.ts +6 -0
  46. package/src/engines/Cesium/Feature/Ellipse/index.stories.tsx +0 -1
  47. package/src/engines/Cesium/Feature/Frustum/getFieldOfView.ts +2 -0
  48. package/src/engines/Cesium/Feature/Frustum/index.stories.tsx +0 -1
  49. package/src/engines/Cesium/Feature/HeatMap/HeatmapMesh.tsx +1 -1
  50. package/src/engines/Cesium/Feature/Marker/index.tsx +1 -1
  51. package/src/engines/Cesium/Feature/Model/index.stories.tsx +1 -2
  52. package/src/engines/Cesium/Feature/Model/index.tsx +3 -3
  53. package/src/engines/Cesium/Feature/PhotoOverlay/hooks.ts +2 -2
  54. package/src/engines/Cesium/Feature/PhotoOverlay/index.tsx +3 -1
  55. package/src/engines/Cesium/Feature/Polygon/index.stories.tsx +0 -1
  56. package/src/engines/Cesium/Feature/Polygon/index.tsx +6 -4
  57. package/src/engines/Cesium/Feature/Raster/index.stories.tsx +0 -1
  58. package/src/engines/Cesium/Feature/Raster/mvt.ts +2 -1
  59. package/src/engines/Cesium/Feature/Resource/index.stories.tsx +0 -1
  60. package/src/engines/Cesium/Feature/Resource/index.tsx +1 -27
  61. package/src/engines/Cesium/Feature/Resource/utils.ts +86 -91
  62. package/src/engines/Cesium/Feature/Tileset/hooks.ts +136 -71
  63. package/src/engines/Cesium/Feature/Tileset/index.stories.tsx +0 -1
  64. package/src/engines/Cesium/Feature/Tileset/index.tsx +1 -1
  65. package/src/engines/Cesium/Feature/Tileset/useClippingBox.ts +2 -2
  66. package/src/engines/Cesium/Feature/Tileset/useDrawClipping.ts +2 -2
  67. package/src/engines/Cesium/Feature/context.ts +1 -0
  68. package/src/engines/Cesium/Feature/index.tsx +9 -5
  69. package/src/engines/Cesium/Feature/utils.tsx +20 -12
  70. package/src/engines/Cesium/PostProcesses/hbao/AmbientOcclusion.tsx +7 -4
  71. package/src/engines/Cesium/Sketch/ControlPoint.tsx +128 -24
  72. package/src/engines/Cesium/Sketch/ExtrudedControlPoints.tsx +70 -25
  73. package/src/engines/Cesium/Sketch/ExtrudedMeasurement.tsx +3 -1
  74. package/src/engines/Cesium/Sketch/ExtrudedPolygonEntity.tsx +14 -14
  75. package/src/engines/Cesium/Sketch/PolylineEntity.tsx +7 -4
  76. package/src/engines/Cesium/Sketch/SurfaceAddingPoints.tsx +60 -0
  77. package/src/engines/Cesium/Sketch/SurfaceControlPoints.tsx +126 -35
  78. package/src/engines/Cesium/Sketch/constants.ts +5 -0
  79. package/src/engines/Cesium/Sketch/index.tsx +68 -29
  80. package/src/engines/Cesium/SpatialId/CoordinateIndicator.tsx +28 -0
  81. package/src/engines/Cesium/SpatialId/SpatialIdSpace.tsx +33 -0
  82. package/src/engines/Cesium/SpatialId/VerticalSpaceIndicator.tsx +32 -0
  83. package/src/engines/Cesium/SpatialId/index.ts +3 -0
  84. package/src/engines/Cesium/common.ts +55 -18
  85. package/src/engines/Cesium/core/Clock.tsx +1 -1
  86. package/src/engines/Cesium/core/Globe/index.tsx +73 -0
  87. package/src/engines/Cesium/core/Globe/useTerrainProviderPromise.ts +79 -0
  88. package/src/engines/Cesium/core/Imagery.test.ts +29 -11
  89. package/src/engines/Cesium/core/Imagery.tsx +22 -6
  90. package/src/engines/Cesium/core/Indicator/Indicator.tsx +2 -2
  91. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImagery.tsx +13 -6
  92. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryLayer.tsx +2 -1
  93. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapLabelImageryProvider.ts +3 -4
  94. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/JapanGSIOptimalBVmapVectorMapLabel.tsx +14 -2
  95. package/src/engines/Cesium/core/labels/JapanGSIOptimalBVmapVectorMapLabel/helpers.ts +1 -1
  96. package/src/engines/Cesium/core/labels/LabelImageryLayers.tsx +10 -1
  97. package/src/engines/Cesium/core/presets.ts +24 -28
  98. package/src/engines/Cesium/helpers/getGeometryFromEntity.ts +55 -0
  99. package/src/engines/Cesium/hooks/useCamera.ts +2 -2
  100. package/src/engines/Cesium/hooks/useCameraLimiter.ts +1 -1
  101. package/src/engines/Cesium/hooks/useEngineRef.ts +52 -5
  102. package/src/engines/Cesium/hooks/useExplicitRender.ts +2 -2
  103. package/src/engines/Cesium/hooks/useInstance.ts +1 -1
  104. package/src/engines/Cesium/hooks/useLayerDragDrop.ts +3 -3
  105. package/src/engines/Cesium/hooks/useLayerSelectWithRect.ts +2 -2
  106. package/src/engines/Cesium/hooks/useOverrideGlobeShader/useOverrideGlobeShader.ts +115 -67
  107. package/src/engines/Cesium/hooks/useViewerProperty.ts +1 -1
  108. package/src/engines/Cesium/hooks.ts +55 -14
  109. package/src/engines/Cesium/index.stories.tsx +0 -1
  110. package/src/engines/Cesium/index.tsx +20 -6
  111. package/src/engines/Cesium/pickMany.ts +2 -0
  112. package/src/engines/Cesium/types.ts +1 -1
  113. package/src/engines/Cesium/utils/mouse.ts +1 -1
  114. package/src/engines/Cesium/utils/utils.ts +1 -1
  115. package/src/mantle/atoms/compute.test.ts +4 -4
  116. package/src/mantle/atoms/compute.ts +8 -4
  117. package/src/mantle/compat/forward.ts +1 -1
  118. package/src/mantle/data/geojson.ts +53 -22
  119. package/src/mantle/data/georss.ts +2 -2
  120. package/src/mantle/data/gml.ts +2 -2
  121. package/src/mantle/data/gpx.ts +2 -2
  122. package/src/mantle/data/shapefile/parseZip.ts +1 -0
  123. package/src/mantle/evaluator/simple/expression/README.md +392 -0
  124. package/src/mantle/evaluator/simple/expression/expression.test.ts +137 -0
  125. package/src/mantle/evaluator/simple/expression/node.ts +10 -12
  126. package/src/mantle/evaluator/simple/expression/variableReplacer.test.ts +178 -0
  127. package/src/mantle/evaluator/simple/expression/variableReplacer.ts +24 -11
  128. package/src/mantle/types/appearance.ts +4 -2
  129. package/src/mantle/types/index.ts +3 -0
  130. package/src/{Visualizer → shared}/interactionMode.ts +3 -2
  131. package/src/test/setup.ts +1 -1
  132. package/src/test/utils.tsx +1 -1
  133. package/src/types/modules.d.ts +96 -0
  134. package/src/utils/StringMatcher.ts +1 -1
  135. package/src/utils/image.ts +2 -12
  136. package/src/utils/use-delayed-count.ts +1 -1
  137. package/src/utils/use-dnd/drop.ts +1 -1
  138. package/src/utils/util.ts +1 -1
  139. package/src/utils/value.ts +2 -2
  140. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +0 -1
  141. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +0 -1
  142. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +0 -1
  143. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +0 -1
  144. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +0 -1
  145. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +0 -1
  146. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +0 -1
  147. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +0 -1
  148. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +0 -1
  149. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +0 -1
  150. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +0 -1
  151. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +0 -1
  152. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +0 -1
  153. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +0 -1
  154. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +0 -1
  155. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +0 -1
  156. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +0 -1
  157. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +0 -1
  158. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +0 -1
  159. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +0 -1
  160. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +0 -1
  161. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +0 -1
  162. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +0 -1
  163. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +0 -1
  164. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +0 -1
  165. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +0 -1
  166. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +0 -1
  167. package/dist/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +0 -1
  168. package/dist/cesium/Assets/Images/bing_maps_credit.png +0 -0
  169. package/dist/cesium/Assets/Images/cesium_credit.png +0 -0
  170. package/dist/cesium/Assets/Images/google_earth_credit.png +0 -0
  171. package/dist/cesium/Assets/Images/ion-credit.png +0 -0
  172. package/dist/cesium/Assets/Textures/LensFlare/DirtMask.jpg +0 -0
  173. package/dist/cesium/Assets/Textures/LensFlare/StarBurst.jpg +0 -0
  174. package/dist/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg +0 -0
  175. package/dist/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg +0 -0
  176. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg +0 -0
  177. package/dist/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg +0 -0
  178. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg +0 -0
  179. package/dist/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg +0 -0
  180. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg +0 -0
  181. package/dist/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg +0 -0
  182. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg +0 -0
  183. package/dist/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg +0 -0
  184. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg +0 -0
  185. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg +0 -0
  186. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg +0 -0
  187. package/dist/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg +0 -0
  188. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg +0 -0
  189. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg +0 -0
  190. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg +0 -0
  191. package/dist/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg +0 -0
  192. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg +0 -0
  193. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg +0 -0
  194. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg +0 -0
  195. package/dist/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg +0 -0
  196. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg +0 -0
  197. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg +0 -0
  198. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg +0 -0
  199. package/dist/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg +0 -0
  200. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg +0 -0
  201. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg +0 -0
  202. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg +0 -0
  203. package/dist/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg +0 -0
  204. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg +0 -0
  205. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg +0 -0
  206. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg +0 -0
  207. package/dist/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg +0 -0
  208. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg +0 -0
  209. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg +0 -0
  210. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg +0 -0
  211. package/dist/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg +0 -0
  212. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg +0 -0
  213. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg +0 -0
  214. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg +0 -0
  215. package/dist/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg +0 -0
  216. package/dist/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +0 -14
  217. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg +0 -0
  218. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg +0 -0
  219. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg +0 -0
  220. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg +0 -0
  221. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg +0 -0
  222. package/dist/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg +0 -0
  223. package/dist/cesium/Assets/Textures/maki/airfield.png +0 -0
  224. package/dist/cesium/Assets/Textures/maki/airport.png +0 -0
  225. package/dist/cesium/Assets/Textures/maki/alcohol-shop.png +0 -0
  226. package/dist/cesium/Assets/Textures/maki/america-football.png +0 -0
  227. package/dist/cesium/Assets/Textures/maki/art-gallery.png +0 -0
  228. package/dist/cesium/Assets/Textures/maki/bakery.png +0 -0
  229. package/dist/cesium/Assets/Textures/maki/bank.png +0 -0
  230. package/dist/cesium/Assets/Textures/maki/bar.png +0 -0
  231. package/dist/cesium/Assets/Textures/maki/baseball.png +0 -0
  232. package/dist/cesium/Assets/Textures/maki/basketball.png +0 -0
  233. package/dist/cesium/Assets/Textures/maki/beer.png +0 -0
  234. package/dist/cesium/Assets/Textures/maki/bicycle.png +0 -0
  235. package/dist/cesium/Assets/Textures/maki/building.png +0 -0
  236. package/dist/cesium/Assets/Textures/maki/bus.png +0 -0
  237. package/dist/cesium/Assets/Textures/maki/cafe.png +0 -0
  238. package/dist/cesium/Assets/Textures/maki/camera.png +0 -0
  239. package/dist/cesium/Assets/Textures/maki/campsite.png +0 -0
  240. package/dist/cesium/Assets/Textures/maki/car.png +0 -0
  241. package/dist/cesium/Assets/Textures/maki/cemetery.png +0 -0
  242. package/dist/cesium/Assets/Textures/maki/cesium.png +0 -0
  243. package/dist/cesium/Assets/Textures/maki/chemist.png +0 -0
  244. package/dist/cesium/Assets/Textures/maki/cinema.png +0 -0
  245. package/dist/cesium/Assets/Textures/maki/circle-stroked.png +0 -0
  246. package/dist/cesium/Assets/Textures/maki/circle.png +0 -0
  247. package/dist/cesium/Assets/Textures/maki/city.png +0 -0
  248. package/dist/cesium/Assets/Textures/maki/clothing-store.png +0 -0
  249. package/dist/cesium/Assets/Textures/maki/college.png +0 -0
  250. package/dist/cesium/Assets/Textures/maki/commercial.png +0 -0
  251. package/dist/cesium/Assets/Textures/maki/cricket.png +0 -0
  252. package/dist/cesium/Assets/Textures/maki/cross.png +0 -0
  253. package/dist/cesium/Assets/Textures/maki/dam.png +0 -0
  254. package/dist/cesium/Assets/Textures/maki/danger.png +0 -0
  255. package/dist/cesium/Assets/Textures/maki/disability.png +0 -0
  256. package/dist/cesium/Assets/Textures/maki/dog-park.png +0 -0
  257. package/dist/cesium/Assets/Textures/maki/embassy.png +0 -0
  258. package/dist/cesium/Assets/Textures/maki/emergency-telephone.png +0 -0
  259. package/dist/cesium/Assets/Textures/maki/entrance.png +0 -0
  260. package/dist/cesium/Assets/Textures/maki/farm.png +0 -0
  261. package/dist/cesium/Assets/Textures/maki/fast-food.png +0 -0
  262. package/dist/cesium/Assets/Textures/maki/ferry.png +0 -0
  263. package/dist/cesium/Assets/Textures/maki/fire-station.png +0 -0
  264. package/dist/cesium/Assets/Textures/maki/fuel.png +0 -0
  265. package/dist/cesium/Assets/Textures/maki/garden.png +0 -0
  266. package/dist/cesium/Assets/Textures/maki/gift.png +0 -0
  267. package/dist/cesium/Assets/Textures/maki/golf.png +0 -0
  268. package/dist/cesium/Assets/Textures/maki/grocery.png +0 -0
  269. package/dist/cesium/Assets/Textures/maki/hairdresser.png +0 -0
  270. package/dist/cesium/Assets/Textures/maki/harbor.png +0 -0
  271. package/dist/cesium/Assets/Textures/maki/heart.png +0 -0
  272. package/dist/cesium/Assets/Textures/maki/heliport.png +0 -0
  273. package/dist/cesium/Assets/Textures/maki/hospital.png +0 -0
  274. package/dist/cesium/Assets/Textures/maki/ice-cream.png +0 -0
  275. package/dist/cesium/Assets/Textures/maki/industrial.png +0 -0
  276. package/dist/cesium/Assets/Textures/maki/land-use.png +0 -0
  277. package/dist/cesium/Assets/Textures/maki/laundry.png +0 -0
  278. package/dist/cesium/Assets/Textures/maki/library.png +0 -0
  279. package/dist/cesium/Assets/Textures/maki/lighthouse.png +0 -0
  280. package/dist/cesium/Assets/Textures/maki/lodging.png +0 -0
  281. package/dist/cesium/Assets/Textures/maki/logging.png +0 -0
  282. package/dist/cesium/Assets/Textures/maki/london-underground.png +0 -0
  283. package/dist/cesium/Assets/Textures/maki/marker-stroked.png +0 -0
  284. package/dist/cesium/Assets/Textures/maki/marker.png +0 -0
  285. package/dist/cesium/Assets/Textures/maki/minefield.png +0 -0
  286. package/dist/cesium/Assets/Textures/maki/mobilephone.png +0 -0
  287. package/dist/cesium/Assets/Textures/maki/monument.png +0 -0
  288. package/dist/cesium/Assets/Textures/maki/museum.png +0 -0
  289. package/dist/cesium/Assets/Textures/maki/music.png +0 -0
  290. package/dist/cesium/Assets/Textures/maki/oil-well.png +0 -0
  291. package/dist/cesium/Assets/Textures/maki/park.png +0 -0
  292. package/dist/cesium/Assets/Textures/maki/park2.png +0 -0
  293. package/dist/cesium/Assets/Textures/maki/parking-garage.png +0 -0
  294. package/dist/cesium/Assets/Textures/maki/parking.png +0 -0
  295. package/dist/cesium/Assets/Textures/maki/pharmacy.png +0 -0
  296. package/dist/cesium/Assets/Textures/maki/pitch.png +0 -0
  297. package/dist/cesium/Assets/Textures/maki/place-of-worship.png +0 -0
  298. package/dist/cesium/Assets/Textures/maki/playground.png +0 -0
  299. package/dist/cesium/Assets/Textures/maki/police.png +0 -0
  300. package/dist/cesium/Assets/Textures/maki/polling-place.png +0 -0
  301. package/dist/cesium/Assets/Textures/maki/post.png +0 -0
  302. package/dist/cesium/Assets/Textures/maki/prison.png +0 -0
  303. package/dist/cesium/Assets/Textures/maki/rail-above.png +0 -0
  304. package/dist/cesium/Assets/Textures/maki/rail-light.png +0 -0
  305. package/dist/cesium/Assets/Textures/maki/rail-metro.png +0 -0
  306. package/dist/cesium/Assets/Textures/maki/rail-underground.png +0 -0
  307. package/dist/cesium/Assets/Textures/maki/rail.png +0 -0
  308. package/dist/cesium/Assets/Textures/maki/religious-christian.png +0 -0
  309. package/dist/cesium/Assets/Textures/maki/religious-jewish.png +0 -0
  310. package/dist/cesium/Assets/Textures/maki/religious-muslim.png +0 -0
  311. package/dist/cesium/Assets/Textures/maki/restaurant.png +0 -0
  312. package/dist/cesium/Assets/Textures/maki/roadblock.png +0 -0
  313. package/dist/cesium/Assets/Textures/maki/rocket.png +0 -0
  314. package/dist/cesium/Assets/Textures/maki/school.png +0 -0
  315. package/dist/cesium/Assets/Textures/maki/scooter.png +0 -0
  316. package/dist/cesium/Assets/Textures/maki/shop.png +0 -0
  317. package/dist/cesium/Assets/Textures/maki/skiing.png +0 -0
  318. package/dist/cesium/Assets/Textures/maki/slaughterhouse.png +0 -0
  319. package/dist/cesium/Assets/Textures/maki/soccer.png +0 -0
  320. package/dist/cesium/Assets/Textures/maki/square-stroked.png +0 -0
  321. package/dist/cesium/Assets/Textures/maki/square.png +0 -0
  322. package/dist/cesium/Assets/Textures/maki/star-stroked.png +0 -0
  323. package/dist/cesium/Assets/Textures/maki/star.png +0 -0
  324. package/dist/cesium/Assets/Textures/maki/suitcase.png +0 -0
  325. package/dist/cesium/Assets/Textures/maki/swimming.png +0 -0
  326. package/dist/cesium/Assets/Textures/maki/telephone.png +0 -0
  327. package/dist/cesium/Assets/Textures/maki/tennis.png +0 -0
  328. package/dist/cesium/Assets/Textures/maki/theatre.png +0 -0
  329. package/dist/cesium/Assets/Textures/maki/toilets.png +0 -0
  330. package/dist/cesium/Assets/Textures/maki/town-hall.png +0 -0
  331. package/dist/cesium/Assets/Textures/maki/town.png +0 -0
  332. package/dist/cesium/Assets/Textures/maki/triangle-stroked.png +0 -0
  333. package/dist/cesium/Assets/Textures/maki/triangle.png +0 -0
  334. package/dist/cesium/Assets/Textures/maki/village.png +0 -0
  335. package/dist/cesium/Assets/Textures/maki/warehouse.png +0 -0
  336. package/dist/cesium/Assets/Textures/maki/waste-basket.png +0 -0
  337. package/dist/cesium/Assets/Textures/maki/water.png +0 -0
  338. package/dist/cesium/Assets/Textures/maki/wetland.png +0 -0
  339. package/dist/cesium/Assets/Textures/maki/zoo.png +0 -0
  340. package/dist/cesium/Assets/Textures/moonSmall.jpg +0 -0
  341. package/dist/cesium/Assets/Textures/pin.svg +0 -1
  342. package/dist/cesium/Assets/Textures/waterNormals.jpg +0 -0
  343. package/dist/cesium/Assets/Textures/waterNormalsSmall.jpg +0 -0
  344. package/dist/cesium/Assets/approximateTerrainHeights.json +0 -1
  345. package/dist/cesium/ThirdParty/Workers/package.json +0 -1
  346. package/dist/cesium/ThirdParty/Workers/pako_deflate.min.js +0 -1
  347. package/dist/cesium/ThirdParty/Workers/pako_inflate.min.js +0 -1
  348. package/dist/cesium/ThirdParty/Workers/z-worker-pako.js +0 -1
  349. package/dist/cesium/ThirdParty/basis_transcoder.wasm +0 -0
  350. package/dist/cesium/ThirdParty/draco_decoder.wasm +0 -0
  351. package/dist/cesium/ThirdParty/google-earth-dbroot-parser.js +0 -1
  352. package/dist/cesium/Widgets/Animation/Animation.css +0 -127
  353. package/dist/cesium/Widgets/Animation/lighter.css +0 -70
  354. package/dist/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +0 -108
  355. package/dist/cesium/Widgets/BaseLayerPicker/lighter.css +0 -22
  356. package/dist/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +0 -102
  357. package/dist/cesium/Widgets/CesiumInspector/CesiumInspector.css +0 -113
  358. package/dist/cesium/Widgets/CesiumWidget/CesiumWidget.css +0 -124
  359. package/dist/cesium/Widgets/CesiumWidget/lighter.css +0 -14
  360. package/dist/cesium/Widgets/FullscreenButton/FullscreenButton.css +0 -8
  361. package/dist/cesium/Widgets/Geocoder/Geocoder.css +0 -70
  362. package/dist/cesium/Widgets/Geocoder/lighter.css +0 -17
  363. package/dist/cesium/Widgets/I3SBuildingSceneLayerExplorer/I3SBuildingSceneLayerExplorer.css +0 -27
  364. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldHillshade.png +0 -0
  365. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldImagery.png +0 -0
  366. package/dist/cesium/Widgets/Images/ImageryProviders/ArcGisMapServiceWorldOcean.png +0 -0
  367. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerial.png +0 -0
  368. package/dist/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png +0 -0
  369. package/dist/cesium/Widgets/Images/ImageryProviders/bingRoads.png +0 -0
  370. package/dist/cesium/Widgets/Images/ImageryProviders/blueMarble.png +0 -0
  371. package/dist/cesium/Widgets/Images/ImageryProviders/earthAtNight.png +0 -0
  372. package/dist/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png +0 -0
  373. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png +0 -0
  374. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png +0 -0
  375. package/dist/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png +0 -0
  376. package/dist/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png +0 -0
  377. package/dist/cesium/Widgets/Images/ImageryProviders/openStreetMap.png +0 -0
  378. package/dist/cesium/Widgets/Images/ImageryProviders/sentinel-2.png +0 -0
  379. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmooth.png +0 -0
  380. package/dist/cesium/Widgets/Images/ImageryProviders/stadiaAlidadeSmoothDark.png +0 -0
  381. package/dist/cesium/Widgets/Images/ImageryProviders/stamenToner.png +0 -0
  382. package/dist/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png +0 -0
  383. package/dist/cesium/Widgets/Images/NavigationHelp/Mouse.svg +0 -84
  384. package/dist/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +0 -76
  385. package/dist/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +0 -76
  386. package/dist/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +0 -76
  387. package/dist/cesium/Widgets/Images/NavigationHelp/Touch.svg +0 -120
  388. package/dist/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +0 -129
  389. package/dist/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +0 -76
  390. package/dist/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +0 -135
  391. package/dist/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +0 -74
  392. package/dist/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png +0 -0
  393. package/dist/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png +0 -0
  394. package/dist/cesium/Widgets/Images/TimelineIcons.png +0 -0
  395. package/dist/cesium/Widgets/Images/info-loading.gif +0 -0
  396. package/dist/cesium/Widgets/InfoBox/InfoBox.css +0 -92
  397. package/dist/cesium/Widgets/InfoBox/InfoBoxDescription.css +0 -178
  398. package/dist/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css +0 -93
  399. package/dist/cesium/Widgets/NavigationHelpButton/lighter.css +0 -38
  400. package/dist/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css +0 -15
  401. package/dist/cesium/Widgets/ProjectionPicker/ProjectionPicker.css +0 -38
  402. package/dist/cesium/Widgets/SceneModePicker/SceneModePicker.css +0 -56
  403. package/dist/cesium/Widgets/SelectionIndicator/SelectionIndicator.css +0 -20
  404. package/dist/cesium/Widgets/Timeline/Timeline.css +0 -103
  405. package/dist/cesium/Widgets/Timeline/lighter.css +0 -23
  406. package/dist/cesium/Widgets/VRButton/VRButton.css +0 -8
  407. package/dist/cesium/Widgets/Viewer/Viewer.css +0 -107
  408. package/dist/cesium/Widgets/VoxelInspector/VoxelInspector.css +0 -16
  409. package/dist/cesium/Widgets/lighter.css +0 -237
  410. package/dist/cesium/Widgets/lighterShared.css +0 -46
  411. package/dist/cesium/Widgets/shared.css +0 -103
  412. package/dist/cesium/Widgets/widgets.css +0 -1346
  413. package/dist/cesium/Workers/chunk-2YD5QWGR.js +0 -28
  414. package/dist/cesium/Workers/chunk-3T4KR75X.js +0 -26
  415. package/dist/cesium/Workers/chunk-46KFVW24.js +0 -26
  416. package/dist/cesium/Workers/chunk-4EI6PP43.js +0 -28
  417. package/dist/cesium/Workers/chunk-4RS52VIY.js +0 -26
  418. package/dist/cesium/Workers/chunk-4YLYA3DC.js +0 -26
  419. package/dist/cesium/Workers/chunk-5ENAGXBI.js +0 -26
  420. package/dist/cesium/Workers/chunk-5VIB3TI5.js +0 -26
  421. package/dist/cesium/Workers/chunk-6NGZLDFZ.js +0 -26
  422. package/dist/cesium/Workers/chunk-6RGNWVZ2.js +0 -27
  423. package/dist/cesium/Workers/chunk-7AZZVJ52.js +0 -26
  424. package/dist/cesium/Workers/chunk-AMXAQQEL.js +0 -26
  425. package/dist/cesium/Workers/chunk-AQW44ZPC.js +0 -26
  426. package/dist/cesium/Workers/chunk-CPCMDW6Z.js +0 -26
  427. package/dist/cesium/Workers/chunk-DNL2WDRL.js +0 -26
  428. package/dist/cesium/Workers/chunk-ERW7V247.js +0 -26
  429. package/dist/cesium/Workers/chunk-EYRIA4TP.js +0 -26
  430. package/dist/cesium/Workers/chunk-F7RQIJML.js +0 -26
  431. package/dist/cesium/Workers/chunk-FPZMU6QP.js +0 -26
  432. package/dist/cesium/Workers/chunk-FZDVQW7A.js +0 -26
  433. package/dist/cesium/Workers/chunk-GAZ2U4FO.js +0 -26
  434. package/dist/cesium/Workers/chunk-I44IOOT4.js +0 -26
  435. package/dist/cesium/Workers/chunk-IALXUAD4.js +0 -26
  436. package/dist/cesium/Workers/chunk-IXBUEUZL.js +0 -26
  437. package/dist/cesium/Workers/chunk-J3GCYV5K.js +0 -26
  438. package/dist/cesium/Workers/chunk-KGSZTFHZ.js +0 -26
  439. package/dist/cesium/Workers/chunk-KKKPU2CI.js +0 -26
  440. package/dist/cesium/Workers/chunk-KTEJE5KE.js +0 -26
  441. package/dist/cesium/Workers/chunk-KYZ3DYY6.js +0 -26
  442. package/dist/cesium/Workers/chunk-L2QG4MRI.js +0 -26
  443. package/dist/cesium/Workers/chunk-MCE3KFYN.js +0 -26
  444. package/dist/cesium/Workers/chunk-MMLDGXML.js +0 -26
  445. package/dist/cesium/Workers/chunk-MTBRPBDQ.js +0 -26
  446. package/dist/cesium/Workers/chunk-OKT6VBRK.js +0 -26
  447. package/dist/cesium/Workers/chunk-PHYDKLSY.js +0 -26
  448. package/dist/cesium/Workers/chunk-PWPX3224.js +0 -26
  449. package/dist/cesium/Workers/chunk-QHOVE6WG.js +0 -26
  450. package/dist/cesium/Workers/chunk-QJ6MBL22.js +0 -26
  451. package/dist/cesium/Workers/chunk-QKO6VIG2.js +0 -26
  452. package/dist/cesium/Workers/chunk-QVEE4QL2.js +0 -26
  453. package/dist/cesium/Workers/chunk-RXQOQZ7S.js +0 -26
  454. package/dist/cesium/Workers/chunk-S3ZKQKMM.js +0 -26
  455. package/dist/cesium/Workers/chunk-SFEUMZSK.js +0 -26
  456. package/dist/cesium/Workers/chunk-T75MW4X3.js +0 -26
  457. package/dist/cesium/Workers/chunk-TVO2A75R.js +0 -66
  458. package/dist/cesium/Workers/chunk-UHR36K45.js +0 -27
  459. package/dist/cesium/Workers/chunk-UKJCDZOR.js +0 -26
  460. package/dist/cesium/Workers/chunk-VKVIYER6.js +0 -26
  461. package/dist/cesium/Workers/chunk-VPIQWTRZ.js +0 -26
  462. package/dist/cesium/Workers/chunk-XSX5HRFC.js +0 -26
  463. package/dist/cesium/Workers/chunk-Z5WQQHSL.js +0 -26
  464. package/dist/cesium/Workers/chunk-Z7B2VEL5.js +0 -26
  465. package/dist/cesium/Workers/combineGeometry.js +0 -26
  466. package/dist/cesium/Workers/createBoxGeometry.js +0 -26
  467. package/dist/cesium/Workers/createBoxOutlineGeometry.js +0 -26
  468. package/dist/cesium/Workers/createCircleGeometry.js +0 -26
  469. package/dist/cesium/Workers/createCircleOutlineGeometry.js +0 -26
  470. package/dist/cesium/Workers/createCoplanarPolygonGeometry.js +0 -26
  471. package/dist/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +0 -26
  472. package/dist/cesium/Workers/createCorridorGeometry.js +0 -26
  473. package/dist/cesium/Workers/createCorridorOutlineGeometry.js +0 -26
  474. package/dist/cesium/Workers/createCylinderGeometry.js +0 -26
  475. package/dist/cesium/Workers/createCylinderOutlineGeometry.js +0 -26
  476. package/dist/cesium/Workers/createEllipseGeometry.js +0 -26
  477. package/dist/cesium/Workers/createEllipseOutlineGeometry.js +0 -26
  478. package/dist/cesium/Workers/createEllipsoidGeometry.js +0 -26
  479. package/dist/cesium/Workers/createEllipsoidOutlineGeometry.js +0 -26
  480. package/dist/cesium/Workers/createFrustumGeometry.js +0 -26
  481. package/dist/cesium/Workers/createFrustumOutlineGeometry.js +0 -26
  482. package/dist/cesium/Workers/createGeometry.js +0 -26
  483. package/dist/cesium/Workers/createGroundPolylineGeometry.js +0 -26
  484. package/dist/cesium/Workers/createPlaneGeometry.js +0 -26
  485. package/dist/cesium/Workers/createPlaneOutlineGeometry.js +0 -26
  486. package/dist/cesium/Workers/createPolygonGeometry.js +0 -26
  487. package/dist/cesium/Workers/createPolygonOutlineGeometry.js +0 -26
  488. package/dist/cesium/Workers/createPolylineGeometry.js +0 -26
  489. package/dist/cesium/Workers/createPolylineVolumeGeometry.js +0 -26
  490. package/dist/cesium/Workers/createPolylineVolumeOutlineGeometry.js +0 -26
  491. package/dist/cesium/Workers/createRectangleGeometry.js +0 -26
  492. package/dist/cesium/Workers/createRectangleOutlineGeometry.js +0 -26
  493. package/dist/cesium/Workers/createSimplePolylineGeometry.js +0 -26
  494. package/dist/cesium/Workers/createSphereGeometry.js +0 -26
  495. package/dist/cesium/Workers/createSphereOutlineGeometry.js +0 -26
  496. package/dist/cesium/Workers/createTaskProcessorWorker.js +0 -26
  497. package/dist/cesium/Workers/createVectorTileClampedPolylines.js +0 -26
  498. package/dist/cesium/Workers/createVectorTileGeometries.js +0 -26
  499. package/dist/cesium/Workers/createVectorTilePoints.js +0 -26
  500. package/dist/cesium/Workers/createVectorTilePolygons.js +0 -26
  501. package/dist/cesium/Workers/createVectorTilePolylines.js +0 -26
  502. package/dist/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +0 -26
  503. package/dist/cesium/Workers/createVerticesFromHeightmap.js +0 -26
  504. package/dist/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +0 -26
  505. package/dist/cesium/Workers/createWallGeometry.js +0 -26
  506. package/dist/cesium/Workers/createWallOutlineGeometry.js +0 -26
  507. package/dist/cesium/Workers/decodeDraco.js +0 -26
  508. package/dist/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +0 -26
  509. package/dist/cesium/Workers/decodeI3S.js +0 -26
  510. package/dist/cesium/Workers/transcodeKTX2.js +0 -56
  511. package/dist/cesium/Workers/transferTypedArrayTest.js +0 -26
  512. package/dist/cesium/Workers/upsampleQuantizedTerrainMesh.js +0 -26
  513. package/src/engines/Cesium/core/Globe.tsx +0 -104
  514. /package/src/{Visualizer → shared}/featureFlags.ts +0 -0
  515. /package/src/{Map/Sketch/utils.ts → utils/use-window-event.ts} +0 -0
@@ -0,0 +1,392 @@
1
+ # Expression Evaluator
2
+
3
+ A powerful expression evaluator for evaluating dynamic expressions with feature properties, supporting various operators, functions, and property access methods.
4
+
5
+ ## Table of Contents
6
+
7
+ - [Basic Usage](#basic-usage)
8
+ - [Property Access](#property-access)
9
+ - [Operators](#operators)
10
+ - [Functions](#functions)
11
+ - [Data Types](#data-types)
12
+ - [Advanced Features](#advanced-features)
13
+
14
+ ## Basic Usage
15
+
16
+ ```typescript
17
+ import { Expression } from "./expression";
18
+
19
+ const feature = {
20
+ properties: {
21
+ height: 100,
22
+ name: "Building A",
23
+ },
24
+ };
25
+
26
+ const expr = new Expression("${height} > 50", feature);
27
+ const result = expr.evaluate(); // true
28
+ ```
29
+
30
+ ## Property Access
31
+
32
+ ### 1. Standard Property Names (No Spaces)
33
+
34
+ For properties without spaces or special characters, use the simple syntax:
35
+
36
+ ```typescript
37
+ ${propertyName}
38
+ ${height}
39
+ ${temperature}
40
+ ```
41
+
42
+ **Example:**
43
+ ```typescript
44
+ const feature = {
45
+ properties: {
46
+ height: 100,
47
+ width: 50,
48
+ },
49
+ };
50
+
51
+ const expr = new Expression("${height} * ${width}", feature);
52
+ expr.evaluate(); // 5000
53
+ ```
54
+
55
+ ### 2. Quoted Property Names (With Spaces)
56
+
57
+ **✨ NEW:** For properties with spaces or special characters, wrap the property name in quotes:
58
+
59
+ ```typescript
60
+ ${"property name"} // Double quotes (recommended)
61
+ ${'property name'} // Single quotes
62
+ ```
63
+
64
+ **Example:**
65
+ ```typescript
66
+ const feature = {
67
+ properties: {
68
+ "user name": "Alice",
69
+ "user score": 95,
70
+ "email@address": "alice@example.com",
71
+ "user-info:age": 25,
72
+ },
73
+ };
74
+
75
+ // Access properties with spaces
76
+ const expr1 = new Expression('${"user name"}', feature);
77
+ expr1.evaluate(); // "Alice"
78
+
79
+ // Use in conditionals
80
+ const expr2 = new Expression('${"user score"} > 90 ? "Excellent" : "Good"', feature);
81
+ expr2.evaluate(); // "Excellent"
82
+
83
+ // Arithmetic operations
84
+ const expr3 = new Expression('${"user-info:age"} + 5', feature);
85
+ expr3.evaluate(); // 30
86
+
87
+ // Properties with special characters
88
+ const expr4 = new Expression('${"email@address"} !== ""', feature);
89
+ expr4.evaluate(); // true
90
+ ```
91
+
92
+ **Supported Characters in Quoted Names:**
93
+ - Spaces: `${"user name"}`
94
+ - Hyphens: `${"user-info"}`
95
+ - Colons: `${"category:name"}`
96
+ - At signs: `${"email@domain"}`
97
+ - Any other special characters
98
+
99
+ ### 3. Special Variables
100
+
101
+ ```typescript
102
+ ${id} // Access feature.id
103
+ ${rootProperties} // Access entire feature.properties object
104
+ ```
105
+
106
+ **Example:**
107
+ ```typescript
108
+ const feature = {
109
+ id: "feature-123",
110
+ properties: {
111
+ height: 100,
112
+ },
113
+ };
114
+
115
+ const expr = new Expression('${id}', feature);
116
+ expr.evaluate(); // "feature-123"
117
+ ```
118
+
119
+ ## Operators
120
+
121
+ ### Comparison Operators
122
+
123
+ ```typescript
124
+ ${height} > 50 // Greater than
125
+ ${height} >= 50 // Greater than or equal
126
+ ${height} < 100 // Less than
127
+ ${height} <= 100 // Less than or equal
128
+ ${height} === 50 // Strict equality
129
+ ${height} !== 50 // Strict inequality
130
+ ${height} == 50 // Loose equality (with type coercion)
131
+ ${height} != 50 // Loose inequality
132
+ ```
133
+
134
+ ### Arithmetic Operators
135
+
136
+ ```typescript
137
+ ${a} + ${b} // Addition
138
+ ${a} - ${b} // Subtraction
139
+ ${a} * ${b} // Multiplication
140
+ ${a} / ${b} // Division
141
+ ${a} % ${b} // Modulo
142
+ ```
143
+
144
+ ### Logical Operators
145
+
146
+ ```typescript
147
+ ${a} && ${b} // Logical AND
148
+ ${a} || ${b} // Logical OR
149
+ !${a} // Logical NOT
150
+ ```
151
+
152
+ ### Conditional (Ternary) Operator
153
+
154
+ ```typescript
155
+ ${condition} ? ${trueValue} : ${falseValue}
156
+ ```
157
+
158
+ **Example:**
159
+ ```typescript
160
+ const expr = new Expression('${height} > 100 ? "Tall" : "Short"', feature);
161
+ ```
162
+
163
+ ## Functions
164
+
165
+ ### Type Conversion Functions
166
+
167
+ ```typescript
168
+ Boolean(${value}) // Convert to boolean
169
+ Number(${value}) // Convert to number
170
+ String(${value}) // Convert to string
171
+ ```
172
+
173
+ ### Math Functions
174
+
175
+ ```typescript
176
+ abs(${value}) // Absolute value
177
+ sqrt(${value}) // Square root
178
+ ceil(${value}) // Round up
179
+ floor(${value}) // Round down
180
+ round(${value}) // Round to nearest integer
181
+ sin(${value}) // Sine
182
+ cos(${value}) // Cosine
183
+ tan(${value}) // Tangent
184
+ ```
185
+
186
+ ### Utility Functions
187
+
188
+ ```typescript
189
+ isNaN(${value}) // Check if Not a Number
190
+ isFinite(${value}) // Check if finite number
191
+ ```
192
+
193
+ ### Color Functions
194
+
195
+ ```typescript
196
+ color("red") // Named color
197
+ color("#ff0000") // Hex color
198
+ color("#ff0000", 0.5) // Hex color with alpha
199
+ rgb(255, 0, 0) // RGB color
200
+ rgba(255, 0, 0, 0.5) // RGBA color
201
+ hsl(0, 100, 50) // HSL color
202
+ hsla(0, 100, 50, 0.5) // HSLA color
203
+ ```
204
+
205
+ **Example:**
206
+ ```typescript
207
+ const expr = new Expression('${height} > 100 ? color("red") : color("blue")', feature);
208
+ ```
209
+
210
+ ## Data Types
211
+
212
+ ### Supported Types
213
+
214
+ - **Numbers**: `42`, `3.14`, `Infinity`, `NaN`
215
+ - **Strings**: `"hello"`, `'world'`
216
+ - **Booleans**: `true`, `false`
217
+ - **Null**: `null`
218
+ - **Undefined**: `undefined`
219
+ - **Arrays**: `[1, 2, 3]`
220
+ - **Colors**: Result of color functions
221
+
222
+ ### Constants
223
+
224
+ ```typescript
225
+ Math.PI // 3.141592653589793
226
+ Math.E // 2.718281828459045
227
+ Number.POSITIVE_INFINITY
228
+ NaN
229
+ Infinity
230
+ undefined
231
+ ```
232
+
233
+ ## Advanced Features
234
+
235
+ ### String Interpolation
236
+
237
+ Within string literals, you can interpolate property values:
238
+
239
+ ```typescript
240
+ "Hello, ${name}!"
241
+ "Height: ${height}m"
242
+ ```
243
+
244
+ **Note:** String interpolation only supports simple property names (without spaces). For properties with spaces or special characters, use concatenation instead (see below).
245
+
246
+ **Example:**
247
+ ```typescript
248
+ const feature = {
249
+ properties: {
250
+ name: "Building A",
251
+ height: 100,
252
+ },
253
+ };
254
+
255
+ const expr = new Expression('"Building: ${name}, Height: ${height}m"', feature);
256
+ expr.evaluate(); // "Building: Building A, Height: 100m"
257
+ ```
258
+
259
+ **For properties with spaces, use concatenation:**
260
+ ```typescript
261
+ const feature = {
262
+ properties: {
263
+ "building name": "Tower A",
264
+ floors: 30,
265
+ },
266
+ };
267
+
268
+ // Use concatenation with + operator
269
+ const expr = new Expression('${"building name"} + " has " + ${floors} + " floors"', feature);
270
+ expr.evaluate(); // "Tower A has 30 floors"
271
+ ```
272
+
273
+ ### Array Comparisons
274
+
275
+ The equality operators support checking if a value is in an array:
276
+
277
+ ```typescript
278
+ ${value} == [1, 2, 3] // Check if value is in array
279
+ ${value} != [1, 2, 3] // Check if value is not in array
280
+ ```
281
+
282
+ **Example:**
283
+ ```typescript
284
+ const feature = {
285
+ properties: {
286
+ status: "active",
287
+ },
288
+ };
289
+
290
+ const expr = new Expression('${status} == ["active", "pending"]', feature);
291
+ expr.evaluate(); // true
292
+ ```
293
+
294
+ ### Defines (Variable Substitution)
295
+
296
+ You can define placeholder values that get substituted before evaluation:
297
+
298
+ ```typescript
299
+ const defines = {
300
+ MAX_HEIGHT: "100",
301
+ MIN_HEIGHT: "10",
302
+ };
303
+
304
+ const expr = new Expression("${height} > ${MAX_HEIGHT}", feature, defines);
305
+ // Becomes: "${height} > 100"
306
+ ```
307
+
308
+ ### Expression Caching
309
+
310
+ Expressions are cached automatically for better performance. To clear caches:
311
+
312
+ ```typescript
313
+ import { clearExpressionCaches } from "./expression";
314
+
315
+ clearExpressionCaches(expressionString, feature, defines);
316
+ ```
317
+
318
+ ## Property Name Comparison
319
+
320
+ | Syntax | Use Case | Example |
321
+ |--------|----------|---------|
322
+ | `${name}` | Simple properties (no spaces) | `${height}`, `${temperature}` |
323
+ | `${"property name"}` | Properties with spaces/special chars | `${"user name"}`, `${"email@domain"}` |
324
+ | `${rootProperties}` | Access entire properties object | `${rootProperties["dynamic-key"]}` |
325
+
326
+ ## Complete Example
327
+
328
+ ```typescript
329
+ import { Expression } from "./expression";
330
+
331
+ const feature = {
332
+ id: "building-001",
333
+ properties: {
334
+ "building name": "Tower A",
335
+ "building height": 150,
336
+ "building color": "blue",
337
+ floors: 30,
338
+ status: "active",
339
+ "contact info": {
340
+ "email address": "info@tower-a.com",
341
+ },
342
+ },
343
+ };
344
+
345
+ // Simple comparison
346
+ const expr1 = new Expression('${"building height"} > 100', feature);
347
+ console.log(expr1.evaluate()); // true
348
+
349
+ // Conditional with color
350
+ const expr2 = new Expression(
351
+ '${"building height"} > 100 ? color("red") : color("green")',
352
+ feature
353
+ );
354
+ console.log(expr2.evaluate()); // #ff0000 (red)
355
+
356
+ // String concatenation (for properties with spaces)
357
+ const expr3 = new Expression(
358
+ '${"building name"} + " has " + ${floors} + " floors"',
359
+ feature
360
+ );
361
+ console.log(expr3.evaluate()); // "Tower A has 30 floors"
362
+
363
+ // Array membership check
364
+ const expr4 = new Expression(
365
+ '${status} == ["active", "pending"]',
366
+ feature
367
+ );
368
+ console.log(expr4.evaluate()); // true
369
+ ```
370
+
371
+ ## Migration Guide
372
+
373
+ ### From Standard Syntax to Quoted Syntax
374
+
375
+ If you have properties with spaces, you need to update your expressions:
376
+
377
+ **Before (doesn't work):**
378
+ ```typescript
379
+ ${user name} // ❌ Fails: interpreted as two separate identifiers
380
+ ```
381
+
382
+ **After (works):**
383
+ ```typescript
384
+ ${"user name"} // ✅ Works: quoted property name
385
+ ```
386
+
387
+ ### Best Practices
388
+
389
+ 1. **Use simple syntax** for properties without spaces: `${height}`
390
+ 2. **Use quoted syntax** for properties with spaces: `${"user name"}`
391
+ 3. **Prefer double quotes** for consistency: `${"property"}` instead of `${'property'}`
392
+ 4. **Avoid special characters in property names** when possible to keep expressions simple
@@ -26,6 +26,14 @@ describe("replaceDefines", () => {
26
26
  });
27
27
  expect(result).toBe("(value1) + (value2)");
28
28
  });
29
+
30
+ test("should handle Japanese text with multiple variables", () => {
31
+ const result = replaceDefines("${住所} (${人数}人)", {
32
+ 住所: "東京都渋谷区",
33
+ 人数: "5",
34
+ });
35
+ expect(result).toBe("(東京都渋谷区) ((5)人)");
36
+ });
29
37
  });
30
38
 
31
39
  describe("removeBackslashes", () => {
@@ -40,6 +48,135 @@ describe("removeBackslashes", () => {
40
48
  });
41
49
  });
42
50
 
51
+ describe("Expression evaluation", () => {
52
+ test("should evaluate Japanese expression with feature properties as string literal", () => {
53
+ const expressionString = '"${住所} (${人数}人)"';
54
+ const feature = {
55
+ properties: {
56
+ 住所: "緑町",
57
+ 人数: 2,
58
+ },
59
+ } as Feature;
60
+
61
+ const expression = new Expression(expressionString, feature);
62
+ const result = expression.evaluate();
63
+
64
+ expect(result).toBe("緑町 (2人)");
65
+ });
66
+
67
+ test("should evaluate Japanese expression with two spaces - user observation", () => {
68
+ const expressionString = '"${住所} (${人数}人)"';
69
+ const feature = {
70
+ properties: {
71
+ 住所: "緑町",
72
+ 人数: 2,
73
+ },
74
+ } as Feature;
75
+
76
+ const expression = new Expression(expressionString, feature);
77
+ const result = expression.evaluate();
78
+
79
+ expect(result).toBe("緑町 (2人)");
80
+ });
81
+
82
+ test("should evaluate expression with multiple variables", () => {
83
+ const expressionString = '"${name}: ${住所} (${人数}人) - ${status}"';
84
+ const feature = {
85
+ properties: {
86
+ name: "太郎",
87
+ 住所: "緑町",
88
+ 人数: 2,
89
+ status: "完了",
90
+ },
91
+ } as Feature;
92
+
93
+ const expression = new Expression(expressionString, feature);
94
+ const result = expression.evaluate();
95
+
96
+ expect(result).toBe("太郎: 緑町 (2人) - 完了");
97
+ });
98
+
99
+ test("should evaluate Japanese expression without quotes - shows the issue", () => {
100
+ const expressionString = "${住所} (${人数}人)";
101
+ const feature = {
102
+ properties: {
103
+ 住所: "緑町",
104
+ 人数: 2,
105
+ },
106
+ } as Feature;
107
+
108
+ expect(() => {
109
+ const expression = new Expression(expressionString, feature);
110
+ expression.evaluate();
111
+ }).toThrow('Unexpected function call "czm_住所"');
112
+ });
113
+
114
+ test("should evaluate expression with quoted property names containing spaces", () => {
115
+ const expressionString = '${"user name"}';
116
+ const feature = {
117
+ properties: {
118
+ "user name": "Alice",
119
+ "user age": 25,
120
+ },
121
+ } as Feature;
122
+
123
+ const expression = new Expression(expressionString, feature);
124
+ const result = expression.evaluate();
125
+
126
+ expect(result).toBe("Alice");
127
+ });
128
+
129
+ test("should evaluate conditional expression with quoted property names", () => {
130
+ const expressionString = '${"user score"} > 50 ? "Pass" : "Fail"';
131
+ const feature1 = {
132
+ properties: {
133
+ "user score": 75,
134
+ },
135
+ } as Feature;
136
+ const feature2 = {
137
+ properties: {
138
+ "user score": 30,
139
+ },
140
+ } as Feature;
141
+
142
+ const expression1 = new Expression(expressionString, feature1);
143
+ const expression2 = new Expression(expressionString, feature2);
144
+
145
+ expect(expression1.evaluate()).toBe("Pass");
146
+ expect(expression2.evaluate()).toBe("Fail");
147
+ });
148
+
149
+ test("should evaluate arithmetic expression with quoted property names", () => {
150
+ const expressionString = '${"item price"} * ${"item quantity"}';
151
+ const feature = {
152
+ properties: {
153
+ "item price": 10.5,
154
+ "item quantity": 3,
155
+ },
156
+ } as Feature;
157
+
158
+ const expression = new Expression(expressionString, feature);
159
+ const result = expression.evaluate();
160
+
161
+ expect(result).toBe(31.5);
162
+ });
163
+
164
+ test("should handle quoted property names with special characters", () => {
165
+ const expressionString = '${"user-info:name"} === "Bob Smith"';
166
+ const feature = {
167
+ properties: {
168
+ "user-info:name": "Bob Smith",
169
+ "email@address": "bob@example.com",
170
+ },
171
+ } as Feature;
172
+
173
+ const expression = new Expression(expressionString, feature);
174
+ const result = expression.evaluate();
175
+
176
+ expect(result).toBe(true);
177
+ });
178
+ });
179
+
43
180
  describe("expression caches", () => {
44
181
  beforeEach(() => {
45
182
  EXPRESSION_CACHES.clear();
@@ -175,18 +175,16 @@ export class Node {
175
175
  }
176
176
  _evaluateVariableString(feature?: Feature) {
177
177
  const variableRegex = /\${(.*?)}/g;
178
- let result = this._value;
179
- let match = variableRegex.exec(result);
180
- while (match !== null) {
181
- const placeholder = match[0];
182
- const variableName = match[1];
183
- let property = feature?.properties[variableName];
184
- if (typeof property === "undefined") {
185
- property = "";
186
- }
187
- result = result.replace(placeholder, property);
188
- match = variableRegex.exec(result);
189
- }
178
+ const result = this._value.replace(
179
+ variableRegex,
180
+ (_placeholder: string, variableName: string) => {
181
+ let property = feature?.properties[variableName];
182
+ if (typeof property === "undefined") {
183
+ property = "";
184
+ }
185
+ return property;
186
+ },
187
+ );
190
188
  return result;
191
189
  }
192
190
  _evaluateVariable(feature?: Feature) {