@phila/phila-ui-map-core 0.0.2-beta.0 → 0.0.2-beta.2

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.
package/README.md CHANGED
@@ -92,12 +92,44 @@ For more complex apps with dynamic layers, custom controls, or multiple data lay
92
92
 
93
93
  Most apps only need the props approach.
94
94
 
95
+ ### Layer ordering with basemapBeforeId
96
+
97
+ When building apps with many feature layers, you may want to ensure basemap and imagery layers always stay below your feature layers, even when the basemap source changes (e.g., switching between street map and imagery). The `basemapBeforeId` prop controls this.
98
+
99
+ **The problem:** When a basemap layer's source changes, MapLibre removes and re-adds the layer. Without a `before-id`, the layer gets added to the top of the layer stack, covering your feature layers.
100
+
101
+ **The solution:** Pass the ID of one of your feature layers to `basemapBeforeId`. The basemap will always be inserted before that layer:
102
+
103
+ ```vue
104
+ <Map basemap-before-id="parcels">
105
+ <FillLayer id="parcels" :source="parcelSource" :paint="fillPaint" />
106
+ <LineLayer id="roads" :source="roadSource" :paint="linePaint" />
107
+ </Map>
108
+ ```
109
+
110
+ This keeps basemaps below all your feature layers, even when switching between street map and imagery.
111
+
112
+ **For apps with all-dynamic layers:** If all your feature layers can be toggled on/off and you need a stable anchor, create an empty placeholder layer:
113
+
114
+ ```vue
115
+ <Map basemap-before-id="feature-layers-start">
116
+ <!-- Empty placeholder - stable anchor for basemap positioning -->
117
+ <CircleLayer
118
+ id="feature-layers-start"
119
+ :source="{ type: 'geojson', data: { type: 'FeatureCollection', features: [] } }"
120
+ :paint="{ 'circle-radius': 0 }"
121
+ />
122
+
123
+ <!-- Your toggleable feature layers -->
124
+ <FillLayer v-if="showParcels" id="parcels" :source="parcelSource" :paint="fillPaint" />
125
+ <LineLayer v-if="showRoads" id="roads" :source="roadSource" :paint="linePaint" />
126
+ </Map>
127
+ ```
128
+
95
129
  ### Typed layer components
96
130
 
97
131
  There are separate components for each MapLibre layer type: `FillLayer`, `LineLayer`, `CircleLayer`, `SymbolLayer`, and `RasterLayer`. Each component has strongly-typed props matching the MapLibre specification for that layer type (e.g., `FillLayerProps` only accepts fill-specific paint properties). This provides better TypeScript support and clearer APIs than a single generic component.
98
132
 
99
- A legacy `MapLayer` component still exists for backwards compatibility but the typed layer components are preferred.
100
-
101
133
  ### Map instance injection
102
134
 
103
135
  Child components that need access to the MapLibre map instance use Vue's provide/inject. The Map component provides the instance, and child components inject it. Examples:
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const A=require("vue"),C=require("./PictometryPanel-CciUslVU.cjs"),r="data:image/png;base64,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",m=A.defineComponent({__name:"CyclomediaCameraIcon",props:{position:{},yaw:{default:0},iconSize:{default:.09}},setup(t){const o=t,e=A.inject("map"),a=A.inject("isLoaded"),n=A.ref(!1);A.onMounted(async()=>{if(!(!e||!e.value)&&a){if(a.value||await new Promise(i=>{const g=A.watch(a,w=>{w&&(g(),i())})}),e.value.hasImage("cyclomedia-camera")){n.value=!0;return}try{const i=await e.value.loadImage(r);e.value.addImage("cyclomedia-camera",i.data),n.value=!0}catch{}}});const B=A.computed(()=>o.position?{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:o.position},properties:{}}}:{type:"geojson",data:{type:"FeatureCollection",features:[]}}),c=A.computed(()=>({"icon-image":"cyclomedia-camera","icon-size":o.iconSize,"icon-anchor":"center","icon-rotate":o.yaw,"icon-rotation-alignment":"map","icon-allow-overlap":!0,"icon-ignore-placement":!0}));return(i,g)=>t.position&&n.value?(A.openBlock(),A.createBlock(C._sfc_main$5,{key:0,id:"cyclomedia-camera-icon",source:B.value,layout:c.value},null,8,["source","layout"])):A.createCommentVNode("",!0)}});exports.default=m;
@@ -0,0 +1,64 @@
1
+ import { defineComponent as c, inject as g, ref as r, onMounted as E, watch as s, computed as B, createBlock as p, createCommentVNode as l, openBlock as S } from "vue";
2
+ import { e as I } from "./PictometryPanel-NKq_9Xss.js";
3
+ const Y = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkAAADVCAYAAAALvgZUAAAACXBIWXMAAB6GAAAehgFuDLdFAAAAB3RJTUUH4AsIDiIMzG6P3QAAGZFJREFUeNrtnXmYFNW5h99uEBBQ2kmMuEBX0eWgEImoUVzRKJpoYryJSTR6g5F4Y8y9JleTPNFETTTEaNzjvuSKitEYEyNR4x5Q2VREZBGspqqHzQWYGZYBBmb6/nEKg6yzdC3d/Xufp5/hads61V+d+vV3Tn1Lik6Sy1o7AX2BYcDRwEDABmqA3kB3hBCVTDOwGmgAfMAFJgKvAgvzBX9tZw6e6qAwpYC9gaOAY4AjA2Hq3dFjCiEqiiZgATAZmBC85ucLfmvoIpXLWp8Bvg6MAgYDPXQ9hBDbYT2QBx4AxgIL8gW/WHKRymWtXYFTgPODpV032V4I0Q42ADOAe4C/5Av+0pKJVC5r2cCvgNOBnrK1EKITNAPPAb/IF/wZO/pwlzYI1GHArcCp8p6EECWgC1ALHF6TyXg1mYxX39hQbLdI5bJWuiaTOQ34A3AI2hAXQpSWvsCxQENNJjOzvrGhtV0iVZPJnArchnlqJ4QQYdAHGA58UJPJTK9vbGibSOWy1iHBEm+AbCiECJkewFBgZn1jw/wdilQua2UDgTpUthNCROhRDa7JZF6rb2z4aJsilctavYCrga+hPSghRLTsCexVk8k8X9/YsGbjm+nNPnQS8E0JlBAiJk7GhDqxhUjlstanMIGau8hOQoiY6Aacl8ta/bbmSZ2GycMTQog4GQqc+QmRymWtvsB5qGKBECJ+ugAjc1krt6knNQw4QLYRQiSEfTeu7NJB2ZVjUE6eECI57AQMz2Wt7mlMaPqRsokQImEMA/qlgYMwyX5CCJEk9gGOSgdeVB/ZQwiRMHoBR6QxG1QK3hRCJBEnDViygxAioWTTwG6ygxAioWTSwbpPCCGSSO80ijIXQiSXbmnZQAiRZCRSQojEi5TCD4QQ8qSEEKIjdJUJKpriJi8Crzkl71lIpERUArQBWAl8ELyWAPXAKmB18Hfjv9djKl30AnoHr16YSqy7Y+pL7wF8GtO9o4tMLCRSoj1sAD4E5gJzABfIA4uBZa7vze/MwadMnjzirDPOXBgIVhbIYRLPB2Fam+0iD0zEQSqXteqBjEyROFqBpcA8YDowCZjp+t7bUZ6EY9l7B4J1CHAYMBjTMFZBwCIykWpAVRCStIRbDrwOPA28Onve3Bu7des2PCkn6Fh2f2A/4IvA8cG/FRAsJFIVThPwDvAc8E/X914rh5N2LHsf4HDgy5jqrv3RXpaQSFUUS4FngUfO/d6oeZf+8pdzy/WLOJa9HzAC0+XjEExrIiEkUmXKB8BTwBjX98ZX0hdzLLsvpsHjSMweVg9dbiGRKh8WA08CD7i+N7GSv2hdXd2oLxwzfB1wDqb66866/EIilVxWBeJ0i+t7k6vpizc3N48fVDvwj8CPgM+hPSvRAZFqBHaVKUKhBZgG3OT63thqNoRj2Tbw/cCz6qupISRSyVja/R9wt+t7BZnjY7EaDlwEnIT2q4REKjbv6UXgN67vTZA5tqS1pdWvzeWuBX6GauyLHaAqCKVlBXAzcI4EajuTrkvacn3vduBs4OVA2IWQJxUyLnCV63tjZIp2Lf/6AT/H7FUp1UZsVaRWYJJHRceXdy8Al7u+N0Xm6LBYfR+4FJPcLISWeyViPWZz/FwJVCfdUN+7CzgXeFvWEBKp0rAWuGX2vLn7ur63SOYoiVC9CIwCJsoaQiLVOVYCV7u+d3GSKhRUiFC9EQjVs/y7oqiQSIl2sAy4zPW9X8sUoQnVHOB84DH05E8iJRO0i3rgEtf3bpIpQhcqD5NK8wimAKCQSIkdsAoTYnC3TBGZUC3BhCf8Q9aobpFS3eodsxa43vW9G2SKyIVqAfAT4F+yhjwpsXXWA3e6vneFTBGbUM0Dfgy8IWtUH+oWs32KwNgZs2ftVi4n3NTUNGbIoMFXALthIrg3trHqGniEqzHlilcC9a7vLS4ToZruWPaRwH2YuuqiSkjlstZKTA82sSUvAyNd36tL4skFibqnAgcC+2OitbPAPoEwddnklcY8KWvBtMfagGn6UAcUAB8TSDnL9T0/qRfEsezTgbuBGk1PiVS1UwD+M2mJwkF53kOB4cDBgVdRQ+drihcDL+v9QKxeB15OYiS9Y9lXYlJotBKoEpFahRI7t1g1ARe5vndngm7Mo4AvASdiGnaGfc029v2bAjwDvBDsDcXO8uXLrzz0oIOHAKdpqkqkqpEiZqP8BwkRp1MwTQ2ODzymOJ7GbgA84HHgT1E3KN2GXQ4ExmKalQqJVFXxCnB23NU0Hcv+CiY95DiSU4O+FVgA/BW4P26xciz7W8BdqAN3RaMQhM1WEsDv4hQox7KHOJZ9L/BgsJzpk7D5ksWEAzzuWPbFUyZPHhHXybi+9yjwsKatPKlq4nbX9y6IxUUxT+puAn4I7Fsm9moOPM/rXN97JiZR3z/w7PbX9K1cT0oR54Z3gVtjutEG1eZyk4FrykigwDxRPB4Y41j2L5qbmyNvdBokI98KrNMU1nKvkmkGbnN9b3YMAnUqZgP4DKB7mdrvM8Dlg2oHvu9Y9qCoB58xe9ahmOqoQiJVsbw0ddqbu8cgUBdiIqiHVoANuwPfAh50LPvYKAfu2bPnSOAm4CNNZYlUJdII3FZTU3N5xAJ1GTAa2L3C7HkwcHfwdDLKZd/zmPpTQiJVeV6U63vjIhao32Mipiu1AUYtcLtj2d+OeNwHMBHzQiJVMawEIm1B5Vj2NZhibjtXuG37Adc7lv2NCL2pycA43daVJ1LV/HTvFdf3nohQoC4B/ofO59mVC3sC1zqWfVKEYz6I9qbkSVUITVF6UY5ln4+pMtmzyuxsAzc4lj0sIm9qAibXUEikyp5JM2bPOjkigToRuIxkRY9HyWDgt0G34ih4AJM9ICRSZUsr8Hjw6DpsgRoA/BrYu8rn2rHAzyLypl7AVG8QEqmypYApaBcFlwKHa6qRBs51LPu8iMZ7CnWZkUiVMROCdIqwvahzgG9rmn1ML+CnjmUPiWCslzFVR0UFiFS1Pd1bG/zKhi1QOUyoQU9Ns09Qi3nCGfaSbxYm+VnIkyo75gETIxjnfEztcbEl33QsO4qqmk+hxGOJVBnyvOt7C0P2oo4GvoMqTGyLPsCFdXV1o0IeZyLwnswtkSonmiJaApwD7KHptV2O+MIxw5tDXvLVoad8EqkyYwkwM2Qv6nDgFE2tHdIDGBlBDaopmLr1ooxFqpqWJHNc33NDHuNsoK+mVtu8qUG1A28LeYwZKE1GnlQZEarr71j2YOBkTas20xNTgyo8hZo96weYuDghkUo8q4BpIY9xLKZRgWiHN+VY9sGhqaDJKnhDZpZIlQNLgFkhj3EKKn/TXvYETgh5jKko+lwiVQbkXd/zQ1zqDQMO0ZTqECe3trT6IR5/Hko4lkiVAfNDPv5hmIYEov3sX5vLnRni8RcBDTJz+YpUtTzd80I+vpKIO87uQGj5fIEHrSd88qQSTTOmPXhYS719gAM0nTpMKvBEy/lHSkikOsXKwOUPi4GYmt6i4wwNOU1GIiWRSjQrQhYpB9hV06lT7PGFY4a/FeLxfZlYIpVklrm+F+bG+QBNpU6TwYQjhMX7wGqZWSKVVBpDPn5OU6nT9CTcEssrUdmWshWpani6F/YvqPajSoMd4rHXAOtlYnlSVSdSQQeUXTSVSkKYcWYSKYlU1XpSPaieZp9h01siJSRSpac7sJOmUknoJZESEqlwREqeVMI9qRmzZ42WSJWvSFXDxnmLbFjdP5o9uvcYjiohaFIkmDDbSjVh2mSJzrMirAPX5nLDtCyXSCWZMJ++rZZIlYz6kH+otCyXSCWW0PY6Xpow/niJVMkIs5xKT3lSEqmqFKn+/fvfh3lyJJItUjtLpCRSVSlSASs0lbTcE+GJVDU8mQo7IlxlQDrPeiDMztLypORJJZpdHcsOM8N+uqZSp/mQcFuiZzDZAUIilUj6EG6G/buohnZnWTQvn/9biMfPypOSSCWZDOH2w5uPaZklOs7MdJe0FeLx95WJJVJJpgcQ2g3g+l4d4Go6JXrJ7MjEEqmkE3Zhutc1nTpMPTAjNHWy7P7AXjJz+YpUteSdhe3uvwQs1ZTqEO/Mnjf31yEevx+wm8wsTyrp9HcsO7RfU9f3XgXe1JTqEE9369ZteMgilZGZJVJJZ3egNuQxngKKmlbtYgnwfMhjHICe7EmkyoAa4PMhj/EyITYhrVAmub4Xtgd6hMwskSoXjgzz4K7vvQNM0LRqM83A38McwLHsgzHNW0UZi1Q1FWz7nGPZYS/57geWaWq1iSnAsyGPcRDQV6aWJ1Uu7AUMDdmbegF4UlNrh6wF7nN97/2QxzmqCue5RKqM6U40+xP3Yjrmim3z6tRpb4ba+dmx7H2AQ2RqiVS5ccSUyZNHhOxNvQb8RdNrm6wG7qmpqbk87OU94aZDCYlUKOx/1hln7hyRN5XXFNsqz7u+92gE45xC+LXERAQiVW2dTnoDXw17ENf3pgO3YZ5giX+zALgu7EGCByQjZG55UuXK8Y5lDw57kKnT3swAz2mafcx64LYgOj/0awwMkMnLn65V+r2zwIlhDxLsuRwO7Iey8AHGvTRh/EcRjXUa0EUmlydVrqSA/2hqahoTwbJvEvArwq3fXQ68BVwWNK4Ie6l3AnCobu8KuVlzWWtalYpUA3CR63uRfH/Hsq8AfkF1NgNYCJzn+t4zEdn6QuB81LG4Mm7WYrGohNiIcCz7FuCCKltmfxT8GDwY5aBhh5kIiVRFsnz58isPPejgfsDIKllqNwCXuL53h66+6ChdZYLoCDbS98KEQZxOZYd/rARGS6BEZ1FOU8S4vrcYuAh4CNhQoV9zGXCF63u/1xUXWu6VKU1NTWOGDBq8HLPBu3MFfbWFwRLvQV1lIZGqABzLvgT4KaYoX7kzC/ip63tP68qKkolULms9gWlDvrlYbUu8im18r72fLcWxO3qMVLBEGe363ntRXwTHsr8OXAYcWKbzqBkYB1wVpANFbb/j2DLVqb3zZkf/rRyO2dGxwjhmqcZa0xUYjorUb2R1HIO6vve4Y9n7AZcC3yiz5d9i4KZ5+fwF6S7pOASqH/AoKhFcqdSnUeOATTnLsezTYhKqd13f+w7wv8DMMrgua4FngLNd37s25O7D2+OHwDBN3cpd7enp3ifJAD8LmknGgut7d2Lyzq4mmU0dWjCNUC+YPW9uT9f3XorrRBzLPgkYhZ5SVzSKk9qSw4GL4zwB1/fc4Cb8PPBfwMmY+Ko446o2AHOAh4GHXN+LVUAdy84CYzGtykQFe1KpXNZajrq7bs5K4L9d3xuThJNxLHto4F2dBgwi2h5yK4BJwGOYYnWFhNjkDkz4RkrTtaJplEhtm3nAWa7vvZ6UEwo2iY/HlJk5CLAxddtLSRFoBN4FJgNPu76XqJpYjmWfB9wE9NI0rXhWSKS2z7PAKNf3FibtxBzLtjE1vI8N/u6Nad3Um7bv0RSDZdxyTCfhAjAReG3qtDdPjKAGeUe+97GYtmGWpmd1iJT2pLbPicAVSTwx1/e8zW5eB9gDU41yX0xw6C6BaPXEFIBbhwmzWBm8Fgce4wLgQ9f3FhFBaeVOCNQgCVTVoT2pNrAO+I3re1fJFLEK1J7A3cBXZI2qYqUe3e6Y7sBPgn0QEQOtLa0+cCWm+4uoMk9KItU2+gCjHcv+tkwRPbW53BPAOSgeqirRRW87nwGujSsivYqXeVcDPyDasAshT6ps2Qe40bHsr8oUkQjUlcCPKH2YhZAnVdHYwK2OZZ8hU4QqUNdhStj0lDXkSYn20w+42bHsUTJFaamrqxsVRJNfSGUVAxQdVSmFIHSKeuAa1/d+J1OUxHsaAIzGlKtRDJ8AWCNPqnPsBlzhWPYdjmXvJXN0SqCGYQI1z5BAiU2RSHWenTGVCu5xLPtAmaNDAnV6IFDHoIRhsdlqTyJVGrpgAg0fdiz7TJmjbUyZPHmEY9lXAXcB+8kiYqsqpT2pktMI3APcGOTCiW0v7y7H5EdqeSe2xTp5UqWnD6YE8FjHsr8kc3ySpqamMY5l/xhTPO9kCZSQJxUvy4AHgFtd38vLe7KPxcQ+nYACNEXbaJZIhU8r8DZw24zZs47u2bPnyCoUp1rgXEz+XV9NCSGRSiZrgVeAO1zf+2uViNM+wJmBQA1ET5NF+1kvkYqelZiKn2Nc3xtXoeLUH1P3aSQwFCUHC4lUWbICeBV48KUJ43v279//vgoQp/2ArwHfIvqGEaIy2SCRip81wFuYNuX/dH3vrbLaMGhuHj+oduDVgef0RUxp3y66rEIiVXm0Au8DE4CngUmu772XYK/p85gmEKcES7o+uoQiBFokUslkHbAImAL8C5g8e97cW7p16zY8RlHaC9gfOAoYDnwW+JS8JiGREusx8VYuMD1YGs4EFoYV0d7U1DRmyKDBVwEOpl3WUGAIpm3Wrii/TkS4wpBIladorQCWAh4wP/j7QfDe0kDU1gItYx/50wH71tYe3aNHj+zSpUsnPPTAA6/+8d77VmAivXcBPh28dg9EaACQw1QhzWBaYkmUhERKdIpiIF7rgObg79rg78Z/twDdMJHe3YEewWvT97R0E4kTKeVNVQapQGy6yRSi0ua2IoCFEIlGIiWESLwntV52EEIklPVpYLXsIIRIKKvTmEqSQgiRRBrTQEF2EEIklAVpTCSzEEIkkXwamIqpcSSEEEliLTA1DUzGpFUIIUSSWAKMTwOLgUmyhxAiYbwBeOl8wd8AjMfkeAkhRBJoBSbkC37TxojzicB7sosQIiHUBc6TSYvJF/wCpj9ci2wjhEgAfwZmfyxSAY8A02QbIUTMzAXuzxf8lk+IVL7gLwDuwdQjEkKIOGgBxgDvbnxj8yoIfwWek52EEDExBXgoX/CLG9/4RCXG+saGNTWZzBzgSGAP2UsIESE+cGG+4M/Y9M0tysXWNza8X5PJFIDjMDWwhRAibOqBnwNP1jc2sF2RAqjJZPKYEi7DMbWvhRAiLNYB1wJ3btws36FI1Tc2FGsymXcwOX0HA71kRyFECKwAbgSuzxf8NVv7wDa7g9Q3NrTUZDJvAHngQEwjSCGEKBWLgV8Af8gX/KZtfWi7LYzqGxuK9Y0Nc2oymTeBWqA/6sEmhOg8M4ALgceC1Dw6JFKbiNXCmkzmxcA1y6I+fUKIjvE+cB9wSb7gT6pvbCju6H9ol1eUy1ppYDDwPeCbQF/ZXAjRFl8HGAfcCby+I++pwyK1iVjtBAwFvgwcEwjXp7QUFEJswgpgDvAa8BQwMV/w17b3IJ0WlVzW6gPsBxyFCQLtB3wa6I0JX9hJ10qIimYDJoygCViKKVY3BVPFYBawbNMI8shFajPB6grUBF5Vr0Ckum5tHNf3Xta1FSKZOJZ9XBs/WsTk260D1gDLAlEqWQ5wbMuzYrFY1FQQIpmkUqnEbN2ozboQItmCGcegAwdYqQ2tjKDIYZgyoUkiDUxrTRWf9vxCpN5eLmsdCnw3WCKLeO+LpZggw0VxnsiArLVnCr4E9Ah5qOZiMfXs/DpvQdIuRiw3w9z5fjGXtfYALiN5G+vrge9HLVABCzFPSo+WTsRKK3AD8FECzmUX4JeAHfI481Op4vgkXoz4lnvF1Hg2KWyVIGYBz8cxcL7gL8YkWi6XTsTKq8DNpdz87bBLl2IhMD+CoaakEtrNPDaR6pJmAfBsAm3yRL7gL4xx/OeAh6UTsfEBMDrmOfBvWoprCL+sdwvwopsAUU7Mcg9gnu8Vc/2tcaT4LslJXl4IPBHnCeQLfnMua92KKZNzQNy3SHCDLCW8/ctisJQZSPzBwC3AXcCLSblB8wsKxVzWmo6JRQrrfl1EgntvxrpBW4RpKXgd+GJC7PF8qlicHfvELPhzc1nrZuAPwM4xnkozcKXre+PCHMSx7EuA0QkQqZeA27dW0yhm3sXsj+0Z0vHfgNR8EkqsIQjz6/xVwN9JRiutFcCf3brC+oRcm8eAfyTgPNZGMEYSlhmLgmXeB4m7S1N4gZcflif7Yr7grSWhJCFO6kXAS8B5TKWYSozLmy/4G4uB1SHCZj1wK/BKEk8uVWQl8HZIh19CkYlJvjixx+O0Fovz06nUC4AT42lsAB7L13mNCbs+UzBtxn5FG8vqiA7xT+DefMFvTeLJuQV/Qy5rPRp4nKU8xzQwP5VKzZVIbQevrtAyIGs9mYKziK/xw7ukkvekMV/wW3NZ6z7gBMxGuig9PvDbfMFfmuSTzBf8F4AXqvECJSItJl1kCjA9xlN4snlDMpdV+YK/BLgexU6FwTrgpsBjFRKp7bizdf5yTEGsOFgC/G3BQj/JCc/PAX/SdC39jxMwpjNlREQVLPc24WlMTaoaosvn64KJLn4n4a7+uk1ipz6raVua30bgd/mC3yBTSKTaREuaOV2LfCfqcyoWWZMv+OuSfqHyBf/dIHbqFuKNnaoE1gDX5Qv+NJlCItVmfM9vBRp1SbbLn4GTgNNlik7xF2CszFAeqJ5UGRHETt0ARFlOo9L2a2YD1+YL/irNKHlSIhymAHcTXexUpqmpacw7M2Y8FMbBDxgy5GxMPfwoWAVcky/4MzWNygd1dylDcllrT+ARTKeesL2oRZgC+2EmGO8G7B6B6e4BfrStdt5CIiVKK1RfAe7HPA0VO2Y6cEa+4M+VKcoL7UmVL88F3pTYMY3A1RIoiZSIkCBs4hYSHuOVAIrAGEy1DVGGKGm1jKlvbFhWk8l0BUboB2ebzAIuzhf8D2WK8uT/AQWkTNqNnLH6AAAAAElFTkSuQmCC", U = /* @__PURE__ */ c({
4
+ __name: "CyclomediaCameraIcon",
5
+ props: {
6
+ position: {},
7
+ yaw: { default: 0 },
8
+ iconSize: { default: 0.09 }
9
+ },
10
+ setup(n) {
11
+ const i = n, A = g("map"), o = g("isLoaded"), a = r(!1);
12
+ E(async () => {
13
+ if (!(!A || !A.value) && o) {
14
+ if (o.value || await new Promise((e) => {
15
+ const t = s(o, (m) => {
16
+ m && (t(), e());
17
+ });
18
+ }), A.value.hasImage("cyclomedia-camera")) {
19
+ a.value = !0;
20
+ return;
21
+ }
22
+ try {
23
+ const e = await A.value.loadImage(Y);
24
+ A.value.addImage("cyclomedia-camera", e.data), a.value = !0;
25
+ } catch {
26
+ }
27
+ }
28
+ });
29
+ const w = B(() => i.position ? {
30
+ type: "geojson",
31
+ data: {
32
+ type: "Feature",
33
+ geometry: {
34
+ type: "Point",
35
+ coordinates: i.position
36
+ },
37
+ properties: {}
38
+ }
39
+ } : {
40
+ type: "geojson",
41
+ data: {
42
+ type: "FeatureCollection",
43
+ features: []
44
+ }
45
+ }), C = B(() => ({
46
+ "icon-image": "cyclomedia-camera",
47
+ "icon-size": i.iconSize,
48
+ "icon-anchor": "center",
49
+ "icon-rotate": i.yaw,
50
+ "icon-rotation-alignment": "map",
51
+ "icon-allow-overlap": !0,
52
+ "icon-ignore-placement": !0
53
+ }));
54
+ return (e, t) => n.position && a.value ? (S(), p(I, {
55
+ key: 0,
56
+ id: "cyclomedia-camera-icon",
57
+ source: w.value,
58
+ layout: C.value
59
+ }, null, 8, ["source", "layout"])) : l("", !0);
60
+ }
61
+ });
62
+ export {
63
+ U as default
64
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./PictometryPanel-CciUslVU.cjs");exports.default=e._sfc_main$15;
@@ -0,0 +1,4 @@
1
+ import { p as f } from "./PictometryPanel-NKq_9Xss.js";
2
+ export {
3
+ f as default
4
+ };
@@ -0,0 +1,100 @@
1
+ import { defineComponent as z, inject as F, ref as _, onMounted as P, watch as C, computed as k, createBlock as S, createCommentVNode as W, openBlock as N } from "vue";
2
+ import { e as V } from "./PictometryPanel-NKq_9Xss.js";
3
+ const f = {
4
+ size: 100,
5
+ fillColor: "rgba(0, 102, 255, 0.25)",
6
+ strokeColor: "rgba(0, 102, 255, 0.6)",
7
+ strokeWidth: 1
8
+ };
9
+ function L(r) {
10
+ const {
11
+ hFov: t,
12
+ size: n = f.size,
13
+ fillColor: s = f.fillColor,
14
+ strokeColor: l = f.strokeColor,
15
+ strokeWidth: o = f.strokeWidth
16
+ } = r, u = Math.min(Math.max(t, 10), 170), m = 30, d = 120, a = 1 - (Math.min(Math.max(u, m), d) - m) / (d - m) * 0.6, c = (n - o * 2) * a, H = u / 2 * Math.PI / 180, g = c * Math.tan(H), h = Math.ceil(g * 2 + o * 2), v = Math.ceil(c + o * 2), p = document.createElement("canvas");
17
+ p.width = h, p.height = v;
18
+ const e = p.getContext("2d");
19
+ if (!e)
20
+ throw new Error("Failed to get canvas 2d context");
21
+ e.clearRect(0, 0, h, v);
22
+ const y = h / 2, I = v - o, w = o, M = y - g, b = y + g;
23
+ return e.beginPath(), e.moveTo(y, I), e.lineTo(M, w), e.lineTo(b, w), e.closePath(), e.fillStyle = s, e.fill(), e.strokeStyle = l, e.lineWidth = o, e.stroke(), e.getImageData(0, 0, h, v);
24
+ }
25
+ function x(r) {
26
+ return `cyclomedia-viewcone-${Math.round(r)}`;
27
+ }
28
+ const j = /* @__PURE__ */ z({
29
+ __name: "CyclomediaViewcone",
30
+ props: {
31
+ position: {},
32
+ yaw: { default: 0 },
33
+ hFov: { default: 80 },
34
+ iconSize: { default: 0.5 }
35
+ },
36
+ setup(r) {
37
+ const t = r, n = F("map"), s = F("isLoaded"), l = _(!1);
38
+ let o = null;
39
+ async function u(i) {
40
+ if (!n?.value) return;
41
+ const a = x(i);
42
+ if (n.value.hasImage(a)) {
43
+ o = a, l.value = !0;
44
+ return;
45
+ }
46
+ try {
47
+ const c = L({ hFov: i, size: 100 });
48
+ n.value.addImage(a, c), o = a, l.value = !0;
49
+ } catch {
50
+ }
51
+ }
52
+ P(async () => {
53
+ !n || !n.value || s && (s.value || await new Promise((i) => {
54
+ const a = C(s, (c) => {
55
+ c && (a(), i());
56
+ });
57
+ }), await u(t.hFov));
58
+ }), C(
59
+ () => t.hFov,
60
+ async (i) => {
61
+ !n?.value || !s?.value || await u(i);
62
+ }
63
+ );
64
+ const m = k(() => t.position ? {
65
+ type: "geojson",
66
+ data: {
67
+ type: "Feature",
68
+ geometry: {
69
+ type: "Point",
70
+ coordinates: t.position
71
+ },
72
+ properties: {}
73
+ }
74
+ } : {
75
+ type: "geojson",
76
+ data: {
77
+ type: "FeatureCollection",
78
+ features: []
79
+ }
80
+ }), d = k(() => ({
81
+ "icon-image": o || x(t.hFov),
82
+ "icon-size": t.iconSize,
83
+ "icon-anchor": "bottom",
84
+ "icon-rotate": t.yaw,
85
+ "icon-rotation-alignment": "map",
86
+ "icon-allow-overlap": !0,
87
+ "icon-ignore-placement": !0
88
+ }));
89
+ return (i, a) => r.position && l.value ? (N(), S(V, {
90
+ key: 0,
91
+ id: "cyclomedia-viewcone",
92
+ source: m.value,
93
+ layout: d.value,
94
+ "before-id": "cyclomedia-camera-icon"
95
+ }, null, 8, ["source", "layout"])) : W("", !0);
96
+ }
97
+ });
98
+ export {
99
+ j as default
100
+ };
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("vue"),I=require("./PictometryPanel-CciUslVU.cjs"),g={size:100,fillColor:"rgba(0, 102, 255, 0.25)",strokeColor:"rgba(0, 102, 255, 0.6)",strokeWidth:1};function x(s){const{hFov:o,size:c=g.size,fillColor:l=g.fillColor,strokeColor:u=g.strokeColor,strokeWidth:a=g.strokeWidth}=s,d=Math.min(Math.max(o,10),170),m=30,h=120,n=1-(Math.min(Math.max(d,m),h)-m)/(h-m)*.6,r=(c-a*2)*n,b=d/2*Math.PI/180,p=r*Math.tan(b),v=Math.ceil(p*2+a*2),f=Math.ceil(r+a*2),y=document.createElement("canvas");y.width=v,y.height=f;const e=y.getContext("2d");if(!e)throw new Error("Failed to get canvas 2d context");e.clearRect(0,0,v,f);const w=v/2,k=f-a,F=a,M=w-p,H=w+p;return e.beginPath(),e.moveTo(w,k),e.lineTo(M,F),e.lineTo(H,F),e.closePath(),e.fillStyle=l,e.fill(),e.strokeStyle=u,e.lineWidth=a,e.stroke(),e.getImageData(0,0,v,f)}function C(s){return`cyclomedia-viewcone-${Math.round(s)}`}const z=t.defineComponent({__name:"CyclomediaViewcone",props:{position:{},yaw:{default:0},hFov:{default:80},iconSize:{default:.5}},setup(s){const o=s,c=t.inject("map"),l=t.inject("isLoaded"),u=t.ref(!1);let a=null;async function d(i){if(!c?.value)return;const n=C(i);if(c.value.hasImage(n)){a=n,u.value=!0;return}try{const r=x({hFov:i,size:100});c.value.addImage(n,r),a=n,u.value=!0}catch{}}t.onMounted(async()=>{!c||!c.value||l&&(l.value||await new Promise(i=>{const n=t.watch(l,r=>{r&&(n(),i())})}),await d(o.hFov))}),t.watch(()=>o.hFov,async i=>{!c?.value||!l?.value||await d(i)});const m=t.computed(()=>o.position?{type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:o.position},properties:{}}}:{type:"geojson",data:{type:"FeatureCollection",features:[]}}),h=t.computed(()=>({"icon-image":a||C(o.hFov),"icon-size":o.iconSize,"icon-anchor":"bottom","icon-rotate":o.yaw,"icon-rotation-alignment":"map","icon-allow-overlap":!0,"icon-ignore-placement":!0}));return(i,n)=>s.position&&u.value?(t.openBlock(),t.createBlock(I._sfc_main$5,{key:0,id:"cyclomedia-viewcone",source:m.value,layout:h.value,"before-id":"cyclomedia-camera-icon"},null,8,["source","layout"])):t.createCommentVNode("",!0)}});exports.default=z;