realmap 1.0.5 → 1.0.7

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.
@@ -14,7 +14,9 @@ declare class RealMapExporter {
14
14
  exportToImage(dom: HTMLElement, options: ExportOptions, config: ExporterOptions): void;
15
15
  isContextMenuVisible(): boolean;
16
16
  toggleContextMenu(): void;
17
- private render;
17
+ contains(dom: Element): boolean;
18
+ hideContextMenu(): void;
19
+ private $_render;
18
20
  }
19
21
 
20
22
  declare class Globals {
package/dist/export.js ADDED
@@ -0,0 +1,7 @@
1
+
2
+ /**
3
+ * RealMap Export v1.0.7
4
+ * Copyright (C) 2023-2025 WooriTech Inc.
5
+ * All Rights Reserved.
6
+ */
7
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).$$_RealMapExporter={})}(this,(function(e){"use strict";const t=(()=>{let e=0;return()=>(e+=1,`u${`0000${(Math.random()*36**4|0).toString(36)}`.slice(-4)}${e}`)})();function n(e){const t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}let r=null;function o(e={}){return r||(e.includeStyleProperties?(r=e.includeStyleProperties,r):(r=n(window.getComputedStyle(document.documentElement)),r))}function i(e,t){const n=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return n?parseFloat(n.replace("px","")):0}function s(e,t={}){return{width:t.width||function(e){const t=i(e,"border-left-width"),n=i(e,"border-right-width");return e.clientWidth+t+n}(e),height:t.height||function(e){const t=i(e,"border-top-width"),n=i(e,"border-bottom-width");return e.clientHeight+t+n}(e)}}const a=16384;function c(e){return new Promise(((t,n)=>{const r=new Image;r.onload=()=>{r.decode().then((()=>{requestAnimationFrame((()=>t(r)))}))},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=e}))}async function l(e,t,n){const r="http://www.w3.org/2000/svg",o=document.createElementNS(r,"svg"),i=document.createElementNS(r,"foreignObject");return o.setAttribute("width",`${t}`),o.setAttribute("height",`${n}`),o.setAttribute("viewBox",`0 0 ${t} ${n}`),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.setAttribute("x","0"),i.setAttribute("y","0"),i.setAttribute("externalResourcesRequired","true"),o.appendChild(i),i.appendChild(e),async function(e){return Promise.resolve().then((()=>(new XMLSerializer).serializeToString(e))).then(encodeURIComponent).then((e=>`data:image/svg+xml;charset=utf-8,${e}`))}(o)}const u=(e,t)=>{if(e instanceof t)return!0;const n=Object.getPrototypeOf(e);return null!==n&&(n.constructor.name===t.name||u(n,t))};function h(e,t,n,r){const i=`.${e}:${t}`,s=n.cssText?function(e){const t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}(n):function(e,t){return o(t).map((t=>`${t}: ${e.getPropertyValue(t)}${e.getPropertyPriority(t)?" !important":""};`)).join(" ")}(n,r);return document.createTextNode(`${i}{${s}}`)}function d(e,n,r,o){const i=window.getComputedStyle(e,r),s=i.getPropertyValue("content");if(""===s||"none"===s)return;const a=t();try{n.className=`${n.className} ${a}`}catch(e){return}const c=document.createElement("style");c.appendChild(h(a,r,i,o)),n.appendChild(c)}const m="application/font-woff",f="image/jpeg",g={woff:m,woff2:m,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:f,jpeg:f,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function p(e){const t=function(e){const t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}(e).toLowerCase();return g[t]||""}function y(e){return-1!==e.search(/^(data:)/)}function w(e,t){return`data:${t};base64,${e}`}async function v(e,t,n){const r=await fetch(e,t);if(404===r.status)throw new Error(`Resource "${r.url}" not found`);const o=await r.blob();return new Promise(((e,t)=>{const i=new FileReader;i.onerror=t,i.onloadend=()=>{try{e(n({res:r,result:i.result}))}catch(e){t(e)}},i.readAsDataURL(o)}))}const x={};async function b(e,t,n){const r=function(e,t,n){let r=e.replace(/\?.*/,"");return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}(e,t,n.includeQueryParams);if(null!=x[r])return x[r];let o;n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+(new Date).getTime());try{const r=await v(e,n.fetchRequestInit,(({res:e,result:n})=>(t||(t=e.headers.get("Content-Type")||""),function(e){return e.split(/,/)[1]}(n))));o=w(r,t)}catch(t){o=n.imagePlaceholder||"";let r=`Failed to fetch resource: ${e}`;t&&(r="string"==typeof t?t:t.message),r&&console.warn(r)}return x[r]=o,o}async function E(e,t){return u(e,HTMLCanvasElement)?async function(e){const t=e.toDataURL();return"data:,"===t?e.cloneNode(!1):c(t)}(e):u(e,HTMLVideoElement)?async function(e,t){if(e.currentSrc){const t=document.createElement("canvas"),n=t.getContext("2d");return t.width=e.clientWidth,t.height=e.clientHeight,null==n||n.drawImage(e,0,0,t.width,t.height),c(t.toDataURL())}const n=e.poster,r=p(n);return c(await b(n,r,t))}(e,t):u(e,HTMLIFrameElement)?async function(e,t){var n;try{if(null===(n=null==e?void 0:e.contentDocument)||void 0===n?void 0:n.body)return await R(e.contentDocument.body,t,!0)}catch(e){}return e.cloneNode(!1)}(e,t):e.cloneNode(S(e))}const $=e=>null!=e.tagName&&"SLOT"===e.tagName.toUpperCase(),S=e=>null!=e.tagName&&"SVG"===e.tagName.toUpperCase();function C(e,t,n){return u(t,Element)&&(function(e,t,n){const r=t.style;if(!r)return;const i=window.getComputedStyle(e);i.cssText?(r.cssText=i.cssText,r.transformOrigin=i.transformOrigin):o(n).forEach((n=>{let o=i.getPropertyValue(n);if("font-size"===n&&o.endsWith("px")){const e=Math.floor(parseFloat(o.substring(0,o.length-2)))-.1;o=`${e}px`}u(e,HTMLIFrameElement)&&"display"===n&&"inline"===o&&(o="block"),"d"===n&&t.getAttribute("d")&&(o=`path(${t.getAttribute("d")})`),r.setProperty(n,o,i.getPropertyPriority(n))}))}(e,t,n),function(e,t,n){d(e,t,":before",n),d(e,t,":after",n)}(e,t,n),function(e,t){u(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),u(e,HTMLInputElement)&&t.setAttribute("value",e.value)}(e,t),function(e,t){if(u(e,HTMLSelectElement)){const n=t,r=Array.from(n.children).find((t=>e.value===t.getAttribute("value")));r&&r.setAttribute("selected","")}}(e,t)),t}async function R(e,t,r){return r||!t.filter||t.filter(e)?Promise.resolve(e).then((e=>E(e,t))).then((r=>async function(e,t,r){var o,i;if(S(t))return t;let s=[];return s=$(e)&&e.assignedNodes?n(e.assignedNodes()):u(e,HTMLIFrameElement)&&(null===(o=e.contentDocument)||void 0===o?void 0:o.body)?n(e.contentDocument.body.childNodes):n((null!==(i=e.shadowRoot)&&void 0!==i?i:e).childNodes),0===s.length||u(e,HTMLVideoElement)||await s.reduce(((e,n)=>e.then((()=>R(n,r))).then((e=>{e&&t.appendChild(e)}))),Promise.resolve()),t}(e,r,t))).then((n=>C(e,n,t))).then((e=>async function(e,t){const n=e.querySelectorAll?e.querySelectorAll("use"):[];if(0===n.length)return e;const r={};for(let o=0;o<n.length;o++){const i=n[o].getAttribute("xlink:href");if(i){const n=e.querySelector(i),o=document.querySelector(i);n||!o||r[i]||(r[i]=await R(o,t,!0))}}const o=Object.values(r);if(o.length){const t="http://www.w3.org/1999/xhtml",n=document.createElementNS(t,"svg");n.setAttribute("xmlns",t),n.style.position="absolute",n.style.width="0",n.style.height="0",n.style.overflow="hidden",n.style.display="none";const r=document.createElementNS(t,"defs");n.appendChild(r);for(let e=0;e<o.length;e++)r.appendChild(o[e]);e.appendChild(n)}return e}(e,t))):null}const _=/url\((['"]?)([^'"]+?)\1\)/g,T=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,k=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;async function L(e,t,n,r,o){try{const i=n?function(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;const n=document.implementation.createHTMLDocument(),r=n.createElement("base"),o=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(o),t&&(r.href=t),o.href=e,o.href}(t,n):t,s=p(t);let a;if(o){a=w(await o(i),s)}else a=await b(i,s,r);return e.replace(function(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}(t),`$1${a}$3`)}catch(e){}return e}function I(e){return-1!==e.search(_)}async function P(e,t,n){if(!I(e))return e;const r=function(e,{preferredFontFormat:t}){return t?e.replace(k,(e=>{for(;;){const[n,,r]=T.exec(e)||[];if(!r)return"";if(r===t)return`src: ${n};`}})):e}(e,n),o=function(e){const t=[];return e.replace(_,((e,n,r)=>(t.push(r),e))),t.filter((e=>!y(e)))}(r);return o.reduce(((e,r)=>e.then((e=>L(e,r,t,n)))),Promise.resolve(r))}async function A(e,t,n){var r;const o=null===(r=t.style)||void 0===r?void 0:r.getPropertyValue(e);if(o){const r=await P(o,null,n);return t.style.setProperty(e,r,t.style.getPropertyPriority(e)),!0}return!1}async function N(e,t){u(e,Element)&&(await async function(e,t){await A("background",e,t)||await A("background-image",e,t),await A("mask",e,t)||await A("-webkit-mask",e,t)||await A("mask-image",e,t)||await A("-webkit-mask-image",e,t)}(e,t),await async function(e,t){const n=u(e,HTMLImageElement);if((!n||y(e.src))&&(!u(e,SVGImageElement)||y(e.href.baseVal)))return;const r=n?e.src:e.href.baseVal,o=await b(r,p(r),t);await new Promise(((r,i)=>{e.onload=r,e.onerror=t.onImageErrorHandler?(...e)=>{try{r(t.onImageErrorHandler(...e))}catch(e){i(e)}}:i;const s=e;s.decode&&(s.decode=r),"lazy"===s.loading&&(s.loading="eager"),n?(e.srcset="",e.src=o):e.href.baseVal=o}))}(e,t),await async function(e,t){const r=n(e.childNodes).map((e=>N(e,t)));await Promise.all(r).then((()=>e))}(e,t))}const M={};async function H(e){let t=M[e];if(null!=t)return t;const n=await fetch(e);return t={url:e,cssText:await n.text()},M[e]=t,t}async function D(e,t){let n=e.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map((async o=>{let i=o.replace(r,"$1");return i.startsWith("https://")||(i=new URL(i,e.url).href),v(i,t.fetchRequestInit,(({result:e})=>(n=n.replace(o,`url(${e})`),[o,e])))}));return Promise.all(o).then((()=>n))}function j(e){if(null==e)return[];const t=[];let n=e.replace(/(\/\*[\s\S]*?\*\/)/gi,"");const r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const e=r.exec(n);if(null===e)break;t.push(e[0])}n=n.replace(r,"");const o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i=new RegExp("((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})","gi");for(;;){let e=o.exec(n);if(null===e){if(e=i.exec(n),null===e)break;o.lastIndex=i.lastIndex}else i.lastIndex=o.lastIndex;t.push(e[0])}return t}async function F(e,t){if(null==e.ownerDocument)throw new Error("Provided element is not within a Document");const r=n(e.ownerDocument.styleSheets),o=await async function(e,t){const r=[],o=[];return e.forEach((r=>{if("cssRules"in r)try{n(r.cssRules||[]).forEach(((e,n)=>{if(e.type===CSSRule.IMPORT_RULE){let i=n+1;const s=H(e.href).then((e=>D(e,t))).then((e=>j(e).forEach((e=>{try{r.insertRule(e,e.startsWith("@import")?i+=1:r.cssRules.length)}catch(t){console.error("Error inserting rule from remote css",{rule:e,error:t})}})))).catch((e=>{console.error("Error loading remote css",e.toString())}));o.push(s)}}))}catch(n){const i=e.find((e=>null==e.href))||document.styleSheets[0];null!=r.href&&o.push(H(r.href).then((e=>D(e,t))).then((e=>j(e).forEach((e=>{i.insertRule(e,i.cssRules.length)})))).catch((e=>{console.error("Error loading remote stylesheet",e)}))),console.error("Error inlining remote css file",n)}})),Promise.all(o).then((()=>(e.forEach((e=>{if("cssRules"in e)try{n(e.cssRules||[]).forEach((e=>{r.push(e)}))}catch(t){console.error(`Error while reading CSS rules from ${e.href}`,t)}})),r)))}(r,t);return function(e){return e.filter((e=>e.type===CSSRule.FONT_FACE_RULE)).filter((e=>I(e.style.getPropertyValue("src"))))}(o)}function B(e){return e.trim().replace(/["']/g,"")}async function O(e,t){const n=await F(e,t),r=function(e){const t=new Set;return function e(n){(n.style.fontFamily||getComputedStyle(n).fontFamily).split(",").forEach((e=>{t.add(B(e))})),Array.from(n.children).forEach((t=>{t instanceof HTMLElement&&e(t)}))}(e),t}(e);return(await Promise.all(n.filter((e=>r.has(B(e.style.fontFamily)))).map((e=>{const n=e.parentStyleSheet?e.parentStyleSheet.href:null;return P(e.cssText,n,t)})))).join("\n")}async function U(e,t={}){const{width:n,height:r}=s(e,t),o=await R(e,t,!0);await async function(e,t){const n=null!=t.fontEmbedCSS?t.fontEmbedCSS:t.skipFonts?null:await O(e,t);if(n){const t=document.createElement("style"),r=document.createTextNode(n);t.appendChild(r),e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}(o,t),await N(o,t),function(e,t){const{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);const r=t.style;null!=r&&Object.keys(r).forEach((e=>{n[e]=r[e]}))}(o,t);return await l(o,n,r)}async function V(e,t={}){const{width:n,height:r}=s(e,t),o=await U(e,t),i=await c(o),l=document.createElement("canvas"),u=l.getContext("2d"),h=t.pixelRatio||function(){let e,t;try{t=process}catch(e){}const n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}(),d=t.canvasWidth||n,m=t.canvasHeight||r;return l.width=d*h,l.height=m*h,t.skipAutoScale||function(e){(e.width>a||e.height>a)&&(e.width>a&&e.height>a?e.width>e.height?(e.height*=a/e.width,e.width=a):(e.width*=a/e.height,e.height=a):e.width>a?(e.height*=a/e.width,e.width=a):(e.width*=a/e.height,e.height=a))}(l),l.style.width=`${d}`,l.style.height=`${m}`,t.backgroundColor&&(u.fillStyle=t.backgroundColor,u.fillRect(0,0,l.width,l.height)),u.drawImage(i,0,0,l.width,l.height),l}class q{export(e,t,n){const r=e.getBoundingClientRect(),o=n||{},i=o.width?o.width/r.width:o.scale||1,s=t.type||"png",a=t.fileName||n.fileName||"realmap",c=document.createElement("div");c.classList.add("rm-export-indicator"),c.style.position="absolute",c.style.width="40px",c.style.height="40px",c.style.top=(r.height+40)/2+"px",c.style.left=(r.width+40)/2+"px",e.appendChild(c);const l=["rm-feedbacks","rm-tooltip"];o.hideNavigator&&l.push("rm-navigator"),o.hideScrollbar&&l.push("rm-axis-scrollbar"),o.hideZoomButton&&l.push("rm-reset-zoom");let u,h={};switch(h.width=r.width,h.height=r.height,h.canvasWidth=r.width*i,h.canvasHeight=r.height*i,h.filter=e=>{var t;return"none"!==(null===(t=e.style)||void 0===t?void 0:t.display)&&!l.some((t=>{var n;return null===(n=e.classList)||void 0===n?void 0:n.contains(t)}))},h.pixelRatio=1,s){case"png":u=async function(e,t={}){return(await V(e,t)).toDataURL()}(e,h);break;case"jpeg":u=async function(e,t={}){return(await V(e,t)).toDataURL("image/jpeg",t.quality||1)}(e,h);break;case"svg":u=U(e,h);break;default:console.error("유효하지 않은 타입 입니다.")}u.then((e=>{const t=document.createElement("a");t.download=`${a}.${s}`,t.href=e,t.click(),c&&c.remove()})),c&&c.remove()}}class z{export(e,t,n){}$_removeItems(e,t){e.querySelectorAll(t).forEach((e=>{e.remove()}))}$_removeAriaLabelRecursively(e){e.hasAttribute("aria-label")&&e.removeAttribute("aria-label");const t=e.children;for(let e=0;e<t.length;e++)this.$_removeAriaLabelRecursively(t[e])}$_removeHiddenElementsRecursively(e){if("none"===window.getComputedStyle(e).display||"none"===e.style.display)return void e.parentNode.removeChild(e);const t=e.children;for(let e=0;e<t.length;e++)this.$_removeHiddenElementsRecursively(t[e])}}var W=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))};class G extends z{export(e,t,n){var r;const o=n||{},i=t.fileName||n.fileName||"realmap",s=e.getBoundingClientRect(),a=o.width?o.width/s.width:o.scale||1,c=document.createElement("canvas"),l=c.getContext("2d");c.width=s.width,c.height=s.height,e.appendChild(c);const u=document.createElement("div");u.classList.add("rm-export-indicator"),u.style.position="absolute",u.style.width="40px",u.style.height="40px",u.style.top=(s.height+40)/2+"px",u.style.left=(s.width+40)/2+"px";const h=e.cloneNode(!0);e.appendChild(u);const d=()=>{const n=new Image;n.onload=function(){l.drawImage(n,0,0,c.width,c.height);const e=c.width*a,r=c.height*a,o=document.createElement("canvas"),s=o.getContext("2d");o.width=e,o.height=r,s.drawImage(c,0,0,c.width,c.height,0,0,e,r);const h=o.toDataURL(`image/${t.type}`),d=document.createElement("a");d.href=h,d.download=`${i}.${t.type}`,d.click(),u&&u.remove()},h.querySelectorAll("g").forEach((e=>{0===e.childElementCount&&e.remove()})),this.$_removeItems(h,".rm-contextmenu-button"),this.$_removeItems(h,".rm-feedbacks"),this.$_removeItems(h,".rm-tooltip"),this.$_removeItems(h,".rm-crosshair-flag"),this.$_removeItems(h,".rm-crosshair-flag-text"),this.$_removeItems(h,".rm-button"),o.hideNavigator&&this.$_removeItems(h,".rm-navigator"),o.hideScrollbar&&this.$_removeItems(h,".rm-axis-scrollbar"),o.hideZoomButton&&this.$_removeItems(h,".rm-reset-zoom"),this.$_removeAriaLabelRecursively(h),this.$_removeHiddenElementsRecursively(h);const r=h.querySelector(".rm-svg"),{background:d,backgroundColor:m}=getComputedStyle(e);r.style.background=d,r.style.backgroundColor=m,this.$_imagesToBase64(h,(()=>W(this,void 0,void 0,(function*(){const e=(new XMLSerializer).serializeToString(r),i=e.indexOf(">"),a=this.$_getUsedStyles(r),c=`\n ${e.slice(0,i+1)}\n <style type="text/css">\n ${a.join(" ")}\n </style>\n ${e.slice(i+1)}`,l=(new TextEncoder).encode(c),d=5e4;let m="";if(l.length/d>1)for(let e=0;e<l.length/d;e++)m+=String.fromCharCode.apply(null,l.slice(e*d,(e+1)*d));else m=String.fromCharCode.apply(null,l);try{n.src="data:image/svg+xml;base64,"+btoa(m)}catch(e){const r=o.url||"https://exporter.realmap.co.kr/api";fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t.type,size:{width:s.width,height:s.height},dom:h.outerHTML})}).then((e=>e.json())).then((({data:e})=>{n.src=`data:image/png;base64,${e}`})).catch((e=>{u&&u.remove(),console.log("error"),console.error("Error:",e)}))}}))))},m=h.style.backgroundImage;if(m&&"none"!==m&&"initial"!==m){const e=null===(r=m.match(/^url\(["']?(.*?)["']?\)$/))||void 0===r?void 0:r[1];if(e){const t=new Image;t.onload=()=>{l.drawImage(t,0,0,c.width,c.height),d()},t.onerror=()=>{console.warn("Background image failed to load"),d()},t.src=e}else d()}else d()}$_getUsedStyles(e){const t=[],n=(e.ownerDocument||document).styleSheets;for(const[r,o]of Object.entries(n))try{for(let n=0;n<o.cssRules.length;n++){const r=o.cssRules[n];let i=!1;try{i=e.querySelectorAll(r.selectorText).length>0}catch(e){}i&&t.push(r.cssText)}}catch(e){}return t}$_imagesToBase64(e,t){var n;function r(e){return fetch(e).then((e=>e.blob())).then((e=>new Promise(((t,n)=>{const r=new FileReader;r.onloadend=()=>t(r.result),r.onerror=n,r.readAsDataURL(e)})))).catch((e=>{throw console.error("Error:",e),e}))}const o=[],i=e.style.backgroundImage;if(i&&"none"!==i){const t=null===(n=i.match(/^url\(["']?(.*?)["']?\)$/))||void 0===n?void 0:n[1];if(t){const n=r(t).then((t=>{e.style.backgroundImage=`url(${t})`})).catch((e=>{console.warn("Failed to convert background image to base64",e)}));o.push(n)}}const s=e.querySelectorAll("image");s.length>0&&s.forEach((e=>{const t=e.getAttribute("href");if(t){const n=r(t).then((t=>{e.setAttribute("href",t)}));o.push(n)}})),Promise.all(o).then((()=>t()))}}class X{constructor(e,t,n){this._imageExporter=new G,this._libraryExporter=new q,this._chart=n,this.$_render(e,t)}exportToImage(e,t,n){n&&(n.useLibrary||"svg"===t.type?this._libraryExporter.export(e,t,n):this._imageExporter.export(e,t,n))}isContextMenuVisible(){return"none"!==this._contextmenu.style.display}toggleContextMenu(){this._contextmenu&&(this._contextmenu.style.display=this.isContextMenuVisible()?"none":"block")}contains(e){var t,n;return(null===(t=this._contextmenu)||void 0===t?void 0:t.contains(e))||(null===(n=this._contextmenuButton)||void 0===n?void 0:n.contains(e))}hideContextMenu(){this._contextmenu&&(this._contextmenu.style.display="none")}$_render(e,t){const n=t.parentElement,r=this._chart.options.exporting||{},o=e.getElementsByClassName("rm-contextmenu-button");for(const e of Array.from(o))e.remove();if(!r.visible)return;this._contextmenuButton&&(this._contextmenuButton.remove(),this._contextmenuButton=null,this._contextmenu=null),n.style.position="relative";const i=this._contextmenuButton=e.createElement("div");i.classList.add("rm-contextmenu-button"),i.style.position="absolute",i.onclick=e=>{this.toggleContextMenu()};const s=this._contextmenu=e.createElement("div");s.classList.add("rm-contextmenu"),s.style.position="absolute",s.style.display="none",s.style.right="0px";const a=e.createElement("ul");a.classList.add("rm-contextmenu-list"),s.appendChild(a),i.appendChild(s),n.appendChild(i),n.getBoundingClientRect(),i.style.display="block",i.style.top="10px",i.style.right="8px",s.style.top=i.clientHeight+"px",a.innerHTML="",r.menus.forEach((n=>{const o=e.createElement("li");o.classList.add("rm-contextmenu-item"),o.id=n;const i={type:n,fileName:r.fileName};switch(n){case"png":case"jpeg":case"svg":o.textContent="Download "+n.toLocaleUpperCase(),o.onclick=()=>this.exportToImage(t,i,this._chart.options.exporting);break;default:return void console.error("지원하지 않는 타입입니다.")}a.appendChild(o)}))}}class Z{static use(e){var t;e instanceof Object&&(null===(t=e.$ctrl)||void 0===t||t.use(Z))}static createExporter(e,t,n){return new X(e,t,n)}}Z.MODULE_NAME="$$realmap_export";const J=Z.use;e.RealMapExport=J}));
@@ -0,0 +1,7 @@
1
+
2
+ /**
3
+ * RealMap Export v1.0.7
4
+ * Copyright (C) 2023-2025 WooriTech Inc.
5
+ * All Rights Reserved.
6
+ */
7
+ const e=(()=>{let e=0;return()=>(e+=1,`u${`0000${(Math.random()*36**4|0).toString(36)}`.slice(-4)}${e}`)})();function t(e){const t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}let n=null;function r(e={}){return n||(e.includeStyleProperties?(n=e.includeStyleProperties,n):(n=t(window.getComputedStyle(document.documentElement)),n))}function o(e,t){const n=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return n?parseFloat(n.replace("px","")):0}function i(e,t={}){return{width:t.width||function(e){const t=o(e,"border-left-width"),n=o(e,"border-right-width");return e.clientWidth+t+n}(e),height:t.height||function(e){const t=o(e,"border-top-width"),n=o(e,"border-bottom-width");return e.clientHeight+t+n}(e)}}const s=16384;function a(e){return new Promise(((t,n)=>{const r=new Image;r.onload=()=>{r.decode().then((()=>{requestAnimationFrame((()=>t(r)))}))},r.onerror=n,r.crossOrigin="anonymous",r.decoding="async",r.src=e}))}async function c(e,t,n){const r="http://www.w3.org/2000/svg",o=document.createElementNS(r,"svg"),i=document.createElementNS(r,"foreignObject");return o.setAttribute("width",`${t}`),o.setAttribute("height",`${n}`),o.setAttribute("viewBox",`0 0 ${t} ${n}`),i.setAttribute("width","100%"),i.setAttribute("height","100%"),i.setAttribute("x","0"),i.setAttribute("y","0"),i.setAttribute("externalResourcesRequired","true"),o.appendChild(i),i.appendChild(e),async function(e){return Promise.resolve().then((()=>(new XMLSerializer).serializeToString(e))).then(encodeURIComponent).then((e=>`data:image/svg+xml;charset=utf-8,${e}`))}(o)}const l=(e,t)=>{if(e instanceof t)return!0;const n=Object.getPrototypeOf(e);return null!==n&&(n.constructor.name===t.name||l(n,t))};function u(e,t,n,o){const i=`.${e}:${t}`,s=n.cssText?function(e){const t=e.getPropertyValue("content");return`${e.cssText} content: '${t.replace(/'|"/g,"")}';`}(n):function(e,t){return r(t).map((t=>`${t}: ${e.getPropertyValue(t)}${e.getPropertyPriority(t)?" !important":""};`)).join(" ")}(n,o);return document.createTextNode(`${i}{${s}}`)}function h(t,n,r,o){const i=window.getComputedStyle(t,r),s=i.getPropertyValue("content");if(""===s||"none"===s)return;const a=e();try{n.className=`${n.className} ${a}`}catch(e){return}const c=document.createElement("style");c.appendChild(u(a,r,i,o)),n.appendChild(c)}const d="application/font-woff",m="image/jpeg",f={woff:d,woff2:d,ttf:"application/font-truetype",eot:"application/vnd.ms-fontobject",png:"image/png",jpg:m,jpeg:m,gif:"image/gif",tiff:"image/tiff",svg:"image/svg+xml",webp:"image/webp"};function g(e){const t=function(e){const t=/\.([^./]*?)$/g.exec(e);return t?t[1]:""}(e).toLowerCase();return f[t]||""}function p(e){return-1!==e.search(/^(data:)/)}function y(e,t){return`data:${t};base64,${e}`}async function w(e,t,n){const r=await fetch(e,t);if(404===r.status)throw new Error(`Resource "${r.url}" not found`);const o=await r.blob();return new Promise(((e,t)=>{const i=new FileReader;i.onerror=t,i.onloadend=()=>{try{e(n({res:r,result:i.result}))}catch(e){t(e)}},i.readAsDataURL(o)}))}const v={};async function x(e,t,n){const r=function(e,t,n){let r=e.replace(/\?.*/,"");return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,"")),t?`[${t}]${r}`:r}(e,t,n.includeQueryParams);if(null!=v[r])return v[r];let o;n.cacheBust&&(e+=(/\?/.test(e)?"&":"?")+(new Date).getTime());try{const r=await w(e,n.fetchRequestInit,(({res:e,result:n})=>(t||(t=e.headers.get("Content-Type")||""),function(e){return e.split(/,/)[1]}(n))));o=y(r,t)}catch(t){o=n.imagePlaceholder||"";let r=`Failed to fetch resource: ${e}`;t&&(r="string"==typeof t?t:t.message),r&&console.warn(r)}return v[r]=o,o}async function b(e,t){return l(e,HTMLCanvasElement)?async function(e){const t=e.toDataURL();return"data:,"===t?e.cloneNode(!1):a(t)}(e):l(e,HTMLVideoElement)?async function(e,t){if(e.currentSrc){const t=document.createElement("canvas"),n=t.getContext("2d");return t.width=e.clientWidth,t.height=e.clientHeight,null==n||n.drawImage(e,0,0,t.width,t.height),a(t.toDataURL())}const n=e.poster,r=g(n);return a(await x(n,r,t))}(e,t):l(e,HTMLIFrameElement)?async function(e,t){var n;try{if(null===(n=null==e?void 0:e.contentDocument)||void 0===n?void 0:n.body)return await C(e.contentDocument.body,t,!0)}catch(e){}return e.cloneNode(!1)}(e,t):e.cloneNode($(e))}const E=e=>null!=e.tagName&&"SLOT"===e.tagName.toUpperCase(),$=e=>null!=e.tagName&&"SVG"===e.tagName.toUpperCase();function S(e,t,n){return l(t,Element)&&(function(e,t,n){const o=t.style;if(!o)return;const i=window.getComputedStyle(e);i.cssText?(o.cssText=i.cssText,o.transformOrigin=i.transformOrigin):r(n).forEach((n=>{let r=i.getPropertyValue(n);if("font-size"===n&&r.endsWith("px")){const e=Math.floor(parseFloat(r.substring(0,r.length-2)))-.1;r=`${e}px`}l(e,HTMLIFrameElement)&&"display"===n&&"inline"===r&&(r="block"),"d"===n&&t.getAttribute("d")&&(r=`path(${t.getAttribute("d")})`),o.setProperty(n,r,i.getPropertyPriority(n))}))}(e,t,n),function(e,t,n){h(e,t,":before",n),h(e,t,":after",n)}(e,t,n),function(e,t){l(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),l(e,HTMLInputElement)&&t.setAttribute("value",e.value)}(e,t),function(e,t){if(l(e,HTMLSelectElement)){const n=t,r=Array.from(n.children).find((t=>e.value===t.getAttribute("value")));r&&r.setAttribute("selected","")}}(e,t)),t}async function C(e,n,r){return r||!n.filter||n.filter(e)?Promise.resolve(e).then((e=>b(e,n))).then((r=>async function(e,n,r){var o,i;if($(n))return n;let s=[];return s=E(e)&&e.assignedNodes?t(e.assignedNodes()):l(e,HTMLIFrameElement)&&(null===(o=e.contentDocument)||void 0===o?void 0:o.body)?t(e.contentDocument.body.childNodes):t((null!==(i=e.shadowRoot)&&void 0!==i?i:e).childNodes),0===s.length||l(e,HTMLVideoElement)||await s.reduce(((e,t)=>e.then((()=>C(t,r))).then((e=>{e&&n.appendChild(e)}))),Promise.resolve()),n}(e,r,n))).then((t=>S(e,t,n))).then((e=>async function(e,t){const n=e.querySelectorAll?e.querySelectorAll("use"):[];if(0===n.length)return e;const r={};for(let o=0;o<n.length;o++){const i=n[o].getAttribute("xlink:href");if(i){const n=e.querySelector(i),o=document.querySelector(i);n||!o||r[i]||(r[i]=await C(o,t,!0))}}const o=Object.values(r);if(o.length){const t="http://www.w3.org/1999/xhtml",n=document.createElementNS(t,"svg");n.setAttribute("xmlns",t),n.style.position="absolute",n.style.width="0",n.style.height="0",n.style.overflow="hidden",n.style.display="none";const r=document.createElementNS(t,"defs");n.appendChild(r);for(let e=0;e<o.length;e++)r.appendChild(o[e]);e.appendChild(n)}return e}(e,n))):null}const R=/url\((['"]?)([^'"]+?)\1\)/g,_=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,k=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;async function L(e,t,n,r,o){try{const i=n?function(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;const n=document.implementation.createHTMLDocument(),r=n.createElement("base"),o=n.createElement("a");return n.head.appendChild(r),n.body.appendChild(o),t&&(r.href=t),o.href=e,o.href}(t,n):t,s=g(t);let a;if(o){a=y(await o(i),s)}else a=await x(i,s,r);return e.replace(function(e){const t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,"\\$1");return new RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,"g")}(t),`$1${a}$3`)}catch(e){}return e}function T(e){return-1!==e.search(R)}async function I(e,t,n){if(!T(e))return e;const r=function(e,{preferredFontFormat:t}){return t?e.replace(k,(e=>{for(;;){const[n,,r]=_.exec(e)||[];if(!r)return"";if(r===t)return`src: ${n};`}})):e}(e,n),o=function(e){const t=[];return e.replace(R,((e,n,r)=>(t.push(r),e))),t.filter((e=>!p(e)))}(r);return o.reduce(((e,r)=>e.then((e=>L(e,r,t,n)))),Promise.resolve(r))}async function P(e,t,n){var r;const o=null===(r=t.style)||void 0===r?void 0:r.getPropertyValue(e);if(o){const r=await I(o,null,n);return t.style.setProperty(e,r,t.style.getPropertyPriority(e)),!0}return!1}async function A(e,n){l(e,Element)&&(await async function(e,t){await P("background",e,t)||await P("background-image",e,t),await P("mask",e,t)||await P("-webkit-mask",e,t)||await P("mask-image",e,t)||await P("-webkit-mask-image",e,t)}(e,n),await async function(e,t){const n=l(e,HTMLImageElement);if((!n||p(e.src))&&(!l(e,SVGImageElement)||p(e.href.baseVal)))return;const r=n?e.src:e.href.baseVal,o=await x(r,g(r),t);await new Promise(((r,i)=>{e.onload=r,e.onerror=t.onImageErrorHandler?(...e)=>{try{r(t.onImageErrorHandler(...e))}catch(e){i(e)}}:i;const s=e;s.decode&&(s.decode=r),"lazy"===s.loading&&(s.loading="eager"),n?(e.srcset="",e.src=o):e.href.baseVal=o}))}(e,n),await async function(e,n){const r=t(e.childNodes).map((e=>A(e,n)));await Promise.all(r).then((()=>e))}(e,n))}const N={};async function M(e){let t=N[e];if(null!=t)return t;const n=await fetch(e);return t={url:e,cssText:await n.text()},N[e]=t,t}async function H(e,t){let n=e.cssText;const r=/url\(["']?([^"')]+)["']?\)/g,o=(n.match(/url\([^)]+\)/g)||[]).map((async o=>{let i=o.replace(r,"$1");return i.startsWith("https://")||(i=new URL(i,e.url).href),w(i,t.fetchRequestInit,(({result:e})=>(n=n.replace(o,`url(${e})`),[o,e])))}));return Promise.all(o).then((()=>n))}function D(e){if(null==e)return[];const t=[];let n=e.replace(/(\/\*[\s\S]*?\*\/)/gi,"");const r=new RegExp("((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})","gi");for(;;){const e=r.exec(n);if(null===e)break;t.push(e[0])}n=n.replace(r,"");const o=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,i=new RegExp("((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})","gi");for(;;){let e=o.exec(n);if(null===e){if(e=i.exec(n),null===e)break;o.lastIndex=i.lastIndex}else i.lastIndex=o.lastIndex;t.push(e[0])}return t}async function j(e,n){if(null==e.ownerDocument)throw new Error("Provided element is not within a Document");const r=t(e.ownerDocument.styleSheets),o=await async function(e,n){const r=[],o=[];return e.forEach((r=>{if("cssRules"in r)try{t(r.cssRules||[]).forEach(((e,t)=>{if(e.type===CSSRule.IMPORT_RULE){let i=t+1;const s=M(e.href).then((e=>H(e,n))).then((e=>D(e).forEach((e=>{try{r.insertRule(e,e.startsWith("@import")?i+=1:r.cssRules.length)}catch(t){console.error("Error inserting rule from remote css",{rule:e,error:t})}})))).catch((e=>{console.error("Error loading remote css",e.toString())}));o.push(s)}}))}catch(t){const i=e.find((e=>null==e.href))||document.styleSheets[0];null!=r.href&&o.push(M(r.href).then((e=>H(e,n))).then((e=>D(e).forEach((e=>{i.insertRule(e,i.cssRules.length)})))).catch((e=>{console.error("Error loading remote stylesheet",e)}))),console.error("Error inlining remote css file",t)}})),Promise.all(o).then((()=>(e.forEach((e=>{if("cssRules"in e)try{t(e.cssRules||[]).forEach((e=>{r.push(e)}))}catch(t){console.error(`Error while reading CSS rules from ${e.href}`,t)}})),r)))}(r,n);return function(e){return e.filter((e=>e.type===CSSRule.FONT_FACE_RULE)).filter((e=>T(e.style.getPropertyValue("src"))))}(o)}function F(e){return e.trim().replace(/["']/g,"")}async function B(e,t){const n=await j(e,t),r=function(e){const t=new Set;return function e(n){(n.style.fontFamily||getComputedStyle(n).fontFamily).split(",").forEach((e=>{t.add(F(e))})),Array.from(n.children).forEach((t=>{t instanceof HTMLElement&&e(t)}))}(e),t}(e);return(await Promise.all(n.filter((e=>r.has(F(e.style.fontFamily)))).map((e=>{const n=e.parentStyleSheet?e.parentStyleSheet.href:null;return I(e.cssText,n,t)})))).join("\n")}async function O(e,t={}){const{width:n,height:r}=i(e,t),o=await C(e,t,!0);await async function(e,t){const n=null!=t.fontEmbedCSS?t.fontEmbedCSS:t.skipFonts?null:await B(e,t);if(n){const t=document.createElement("style"),r=document.createTextNode(n);t.appendChild(r),e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}(o,t),await A(o,t),function(e,t){const{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);const r=t.style;null!=r&&Object.keys(r).forEach((e=>{n[e]=r[e]}))}(o,t);return await c(o,n,r)}async function U(e,t={}){const{width:n,height:r}=i(e,t),o=await O(e,t),c=await a(o),l=document.createElement("canvas"),u=l.getContext("2d"),h=t.pixelRatio||function(){let e,t;try{t=process}catch(e){}const n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}(),d=t.canvasWidth||n,m=t.canvasHeight||r;return l.width=d*h,l.height=m*h,t.skipAutoScale||function(e){(e.width>s||e.height>s)&&(e.width>s&&e.height>s?e.width>e.height?(e.height*=s/e.width,e.width=s):(e.width*=s/e.height,e.height=s):e.width>s?(e.height*=s/e.width,e.width=s):(e.width*=s/e.height,e.height=s))}(l),l.style.width=`${d}`,l.style.height=`${m}`,t.backgroundColor&&(u.fillStyle=t.backgroundColor,u.fillRect(0,0,l.width,l.height)),u.drawImage(c,0,0,l.width,l.height),l}class V{export(e,t,n){const r=e.getBoundingClientRect(),o=n||{},i=o.width?o.width/r.width:o.scale||1,s=t.type||"png",a=t.fileName||n.fileName||"realmap",c=document.createElement("div");c.classList.add("rm-export-indicator"),c.style.position="absolute",c.style.width="40px",c.style.height="40px",c.style.top=(r.height+40)/2+"px",c.style.left=(r.width+40)/2+"px",e.appendChild(c);const l=["rm-feedbacks","rm-tooltip"];o.hideNavigator&&l.push("rm-navigator"),o.hideScrollbar&&l.push("rm-axis-scrollbar"),o.hideZoomButton&&l.push("rm-reset-zoom");let u,h={};switch(h.width=r.width,h.height=r.height,h.canvasWidth=r.width*i,h.canvasHeight=r.height*i,h.filter=e=>{var t;return"none"!==(null===(t=e.style)||void 0===t?void 0:t.display)&&!l.some((t=>{var n;return null===(n=e.classList)||void 0===n?void 0:n.contains(t)}))},h.pixelRatio=1,s){case"png":u=async function(e,t={}){return(await U(e,t)).toDataURL()}(e,h);break;case"jpeg":u=async function(e,t={}){return(await U(e,t)).toDataURL("image/jpeg",t.quality||1)}(e,h);break;case"svg":u=O(e,h);break;default:console.error("유효하지 않은 타입 입니다.")}u.then((e=>{const t=document.createElement("a");t.download=`${a}.${s}`,t.href=e,t.click(),c&&c.remove()})),c&&c.remove()}}class q{export(e,t,n){}$_removeItems(e,t){e.querySelectorAll(t).forEach((e=>{e.remove()}))}$_removeAriaLabelRecursively(e){e.hasAttribute("aria-label")&&e.removeAttribute("aria-label");const t=e.children;for(let e=0;e<t.length;e++)this.$_removeAriaLabelRecursively(t[e])}$_removeHiddenElementsRecursively(e){if("none"===window.getComputedStyle(e).display||"none"===e.style.display)return void e.parentNode.removeChild(e);const t=e.children;for(let e=0;e<t.length;e++)this.$_removeHiddenElementsRecursively(t[e])}}var z=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))};class W extends q{export(e,t,n){var r;const o=n||{},i=t.fileName||n.fileName||"realmap",s=e.getBoundingClientRect(),a=o.width?o.width/s.width:o.scale||1,c=document.createElement("canvas"),l=c.getContext("2d");c.width=s.width,c.height=s.height,e.appendChild(c);const u=document.createElement("div");u.classList.add("rm-export-indicator"),u.style.position="absolute",u.style.width="40px",u.style.height="40px",u.style.top=(s.height+40)/2+"px",u.style.left=(s.width+40)/2+"px";const h=e.cloneNode(!0);e.appendChild(u);const d=()=>{const n=new Image;n.onload=function(){l.drawImage(n,0,0,c.width,c.height);const e=c.width*a,r=c.height*a,o=document.createElement("canvas"),s=o.getContext("2d");o.width=e,o.height=r,s.drawImage(c,0,0,c.width,c.height,0,0,e,r);const h=o.toDataURL(`image/${t.type}`),d=document.createElement("a");d.href=h,d.download=`${i}.${t.type}`,d.click(),u&&u.remove()},h.querySelectorAll("g").forEach((e=>{0===e.childElementCount&&e.remove()})),this.$_removeItems(h,".rm-contextmenu-button"),this.$_removeItems(h,".rm-feedbacks"),this.$_removeItems(h,".rm-tooltip"),this.$_removeItems(h,".rm-crosshair-flag"),this.$_removeItems(h,".rm-crosshair-flag-text"),this.$_removeItems(h,".rm-button"),o.hideNavigator&&this.$_removeItems(h,".rm-navigator"),o.hideScrollbar&&this.$_removeItems(h,".rm-axis-scrollbar"),o.hideZoomButton&&this.$_removeItems(h,".rm-reset-zoom"),this.$_removeAriaLabelRecursively(h),this.$_removeHiddenElementsRecursively(h);const r=h.querySelector(".rm-svg"),{background:d,backgroundColor:m}=getComputedStyle(e);r.style.background=d,r.style.backgroundColor=m,this.$_imagesToBase64(h,(()=>z(this,void 0,void 0,(function*(){const e=(new XMLSerializer).serializeToString(r),i=e.indexOf(">"),a=this.$_getUsedStyles(r),c=`\n ${e.slice(0,i+1)}\n <style type="text/css">\n ${a.join(" ")}\n </style>\n ${e.slice(i+1)}`,l=(new TextEncoder).encode(c),d=5e4;let m="";if(l.length/d>1)for(let e=0;e<l.length/d;e++)m+=String.fromCharCode.apply(null,l.slice(e*d,(e+1)*d));else m=String.fromCharCode.apply(null,l);try{n.src="data:image/svg+xml;base64,"+btoa(m)}catch(e){const r=o.url||"https://exporter.realmap.co.kr/api";fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({type:t.type,size:{width:s.width,height:s.height},dom:h.outerHTML})}).then((e=>e.json())).then((({data:e})=>{n.src=`data:image/png;base64,${e}`})).catch((e=>{u&&u.remove(),console.log("error"),console.error("Error:",e)}))}}))))},m=h.style.backgroundImage;if(m&&"none"!==m&&"initial"!==m){const e=null===(r=m.match(/^url\(["']?(.*?)["']?\)$/))||void 0===r?void 0:r[1];if(e){const t=new Image;t.onload=()=>{l.drawImage(t,0,0,c.width,c.height),d()},t.onerror=()=>{console.warn("Background image failed to load"),d()},t.src=e}else d()}else d()}$_getUsedStyles(e){const t=[],n=(e.ownerDocument||document).styleSheets;for(const[r,o]of Object.entries(n))try{for(let n=0;n<o.cssRules.length;n++){const r=o.cssRules[n];let i=!1;try{i=e.querySelectorAll(r.selectorText).length>0}catch(e){}i&&t.push(r.cssText)}}catch(e){}return t}$_imagesToBase64(e,t){var n;function r(e){return fetch(e).then((e=>e.blob())).then((e=>new Promise(((t,n)=>{const r=new FileReader;r.onloadend=()=>t(r.result),r.onerror=n,r.readAsDataURL(e)})))).catch((e=>{throw console.error("Error:",e),e}))}const o=[],i=e.style.backgroundImage;if(i&&"none"!==i){const t=null===(n=i.match(/^url\(["']?(.*?)["']?\)$/))||void 0===n?void 0:n[1];if(t){const n=r(t).then((t=>{e.style.backgroundImage=`url(${t})`})).catch((e=>{console.warn("Failed to convert background image to base64",e)}));o.push(n)}}const s=e.querySelectorAll("image");s.length>0&&s.forEach((e=>{const t=e.getAttribute("href");if(t){const n=r(t).then((t=>{e.setAttribute("href",t)}));o.push(n)}})),Promise.all(o).then((()=>t()))}}class G{constructor(e,t,n){this._imageExporter=new W,this._libraryExporter=new V,this._chart=n,this.$_render(e,t)}exportToImage(e,t,n){n&&(n.useLibrary||"svg"===t.type?this._libraryExporter.export(e,t,n):this._imageExporter.export(e,t,n))}isContextMenuVisible(){return"none"!==this._contextmenu.style.display}toggleContextMenu(){this._contextmenu&&(this._contextmenu.style.display=this.isContextMenuVisible()?"none":"block")}contains(e){var t,n;return(null===(t=this._contextmenu)||void 0===t?void 0:t.contains(e))||(null===(n=this._contextmenuButton)||void 0===n?void 0:n.contains(e))}hideContextMenu(){this._contextmenu&&(this._contextmenu.style.display="none")}$_render(e,t){const n=t.parentElement,r=this._chart.options.exporting||{},o=e.getElementsByClassName("rm-contextmenu-button");for(const e of Array.from(o))e.remove();if(!r.visible)return;this._contextmenuButton&&(this._contextmenuButton.remove(),this._contextmenuButton=null,this._contextmenu=null),n.style.position="relative";const i=this._contextmenuButton=e.createElement("div");i.classList.add("rm-contextmenu-button"),i.style.position="absolute",i.onclick=e=>{this.toggleContextMenu()};const s=this._contextmenu=e.createElement("div");s.classList.add("rm-contextmenu"),s.style.position="absolute",s.style.display="none",s.style.right="0px";const a=e.createElement("ul");a.classList.add("rm-contextmenu-list"),s.appendChild(a),i.appendChild(s),n.appendChild(i),n.getBoundingClientRect(),i.style.display="block",i.style.top="10px",i.style.right="8px",s.style.top=i.clientHeight+"px",a.innerHTML="",r.menus.forEach((n=>{const o=e.createElement("li");o.classList.add("rm-contextmenu-item"),o.id=n;const i={type:n,fileName:r.fileName};switch(n){case"png":case"jpeg":case"svg":o.textContent="Download "+n.toLocaleUpperCase(),o.onclick=()=>this.exportToImage(t,i,this._chart.options.exporting);break;default:return void console.error("지원하지 않는 타입입니다.")}a.appendChild(o)}))}}class X{static use(e){var t;e instanceof Object&&(null===(t=e.$ctrl)||void 0===t||t.use(X))}static createExporter(e,t,n){return new G(e,t,n)}}X.MODULE_NAME="$$realmap_export";const Z=X.use;export{Z as RealMapExport};
@@ -0,0 +1,47 @@
1
+ import * as RealMap from 'realmap';
2
+ import { ValueSeries, FeatureSeriesOptions, Color, IChart, DataPointLabel, ILegendSource, ValuePoint, MapCoord } from 'realmap';
3
+
4
+ declare class FeatureSeriesPoint extends ValuePoint {
5
+ type?: any;
6
+ center: MapCoord;
7
+ protected _readObject(series: FeatureSeries, v: any): void;
8
+ }
9
+ /**
10
+ * Map 시리즈 모델.<br/>
11
+ * {@page op.SeriesOptions#type}은 {@page config.series.map 'map'}이고,
12
+ * {@page options 설정} 모델은 {@page op.FeatureSeriesOptions}이다.
13
+ */
14
+ declare class FeatureSeries extends ValueSeries<FeatureSeriesOptions> {
15
+ static type: string;
16
+ static defaults: FeatureSeriesOptions;
17
+ private _detail;
18
+ private _minValue;
19
+ private _maxValue;
20
+ private _colorObj;
21
+ private _color;
22
+ private _useMapData;
23
+ get areaCount(): number;
24
+ get detail(): FeatureSeries;
25
+ get color(): Color;
26
+ private _colorRanger;
27
+ getValueRange(): {
28
+ min: number;
29
+ max: number;
30
+ };
31
+ protected _createLabel(chart: IChart): DataPointLabel;
32
+ protected _doApply(options: FeatureSeriesOptions): void;
33
+ needMapScale(): boolean;
34
+ getRangedColor(p: FeatureSeriesPoint): string;
35
+ followTooltipPointer(): boolean;
36
+ getLegendSources(list: ILegendSource[]): void;
37
+ protected _createPoint(source: any): FeatureSeriesPoint;
38
+ _prepareRender(): void;
39
+ protected _doPrepareRender(chart: IChart): void;
40
+ protected _doLoadPoints(src: any): void;
41
+ setCalcedColor(cs: CSSStyleDeclaration, prop: string): void;
42
+ getColorScale(): string | number;
43
+ }
44
+
45
+ declare function registerSeries(chart: typeof RealMap): void;
46
+
47
+ export { FeatureSeries, registerSeries as default };
@@ -0,0 +1,7 @@
1
+
2
+ /**
3
+ * RealMap Feature v1.0.7
4
+ * Copyright (C) 2023-2025 WooriTech Inc.
5
+ * All Rights Reserved.
6
+ */
7
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("realmap")):"function"==typeof define&&define.amd?define(["exports","realmap"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).RealMapfeature={},e.RealMap)}(this,(function(e,t){"use strict";function o(e){var t=Object.create(null);return e&&Object.keys(e).forEach((function(o){if("default"!==o){var r=Object.getOwnPropertyDescriptor(e,o);Object.defineProperty(t,o,r.get?r:{enumerable:!0,get:function(){return e[o]}})}})),t.default=e,Object.freeze(t)}var r=o(t);class i extends t.ValuePoint{_readObject(e,t){super._readObject(e,t),this.center=t.center,this.value=t.value}}class s extends t.DataPointLabel{}s.defaults=t.extend(t.DataPointLabel.defaults,{hoverColor:"white"});class a extends t.ValueSeries{get areaCount(){return this._map.areaCount}get detail(){return this._detail}get color(){return this._colorObj}getValueRange(){return{min:this._minValue,max:this._maxValue}}_createLabel(e){return new s(e)}_doApply(e){t.isObject(e.detail)?this._detail||(this._detail=new a(this.chart)):e.hasOwnProperty("detail")&&(this._detail=null),super._doApply(e)}needMapScale(){return!0}getRangedColor(e){var t;if(!isNaN(e.value)){const o=this._colorRanger||(null===(t=this.chart.getColorScale(this._op.colorScale))||void 0===t?void 0:t.getRanger());return null==o?void 0:o.getColor(this._minValue,this._maxValue,e.value,this._colorObj)}}followTooltipPointer(){return!0}getLegendSources(e){return this._points.count>0&&super.getLegendSources(e)}_createPoint(e){return new i(e)}_prepareRender(){super._prepareRender()}_doPrepareRender(e){super._doPrepareRender(e);const o=this._op,r=this._visPoints,{min:i,max:s}=this._calcMinMax(r);if(this._minValue=i,this._maxValue=s,t.isObject(o.colorRange)){const e=t.copyObj(o.colorRange);isNaN(e.minValue)&&(e.minValue=i),isNaN(e.maxValue)&&(e.maxValue=s),this._colorRanger=new t.ColorRanger(e)}else this._colorRanger=null}_doLoadPoints(e){this._useMapData&&(e=this._map._internalAreas().map((e=>({id:e.id,name:e.name})))),super._doLoadPoints(e),this._map}setCalcedColor(e,o){super.setCalcedColor(e,o),this._colorObj=new t.Color(this._calcedColor),this._color=this._colorObj?this._colorObj.toString():null}getColorScale(){return this._op.colorScale}}a.type=t.FeatureSeriesType,a.defaults=t.extend(t.ValueSeries.defaults,{selectable:!1,detailZoom:250});const l="rm-map-series-id-";class n extends t.PointElement{static idClass(e){return l+e.id}static getId(e){for(const t of Array.from(e.classList))if(t.startsWith(l))return t.substring(17)}constructor(e){super(e)}render(e,t,o){const r=this.model,i=!this.point||this.point.isNull;e!==r&&this.setPath((this.model=e).path),o&&(this.setBoolData("null",i),i&&t&&this.internalSetStyleOrClass(t),this.dom.classList.add(n.idClass(e)))}reset(){this.model=null}}class h extends t.SeriesView{constructor(e){super(e,"rm-feature-series"),this._areas={},this._areaPool=new t.PointViewPool(this._pointContainer,n)}get hoverArea(){return this._hoverArea}set hoverArea(e){var o,r;const i=this._hoverArea;if(e!==i){const s=this.model;if(i&&(i.setBoolData(t.SeriesView.DATA_HOVER,!1),i.point&&(null===(o=this._labelContainer.get(i.point,0))||void 0===o||o._text.setBoolData(t.SeriesView.DATA_HOVER,!1))),e&&!e.point&&(e=void 0),this._hoverArea=e,e){const o=this.model.options,i=document.querySelector(".rm-root");let s=o.hoverColor,a=this.model.pointLabel.options.hoverColor;!s&&t.isObject(o.hoverStyle)&&(s=o.hoverStyle.fill),i.style.setProperty("--map-series-hover-fill",s||""),i.style.setProperty("--map-series-hover-label-fill",a||""),e.setBoolData(t.SeriesView.DATA_HOVER,!0),e.point&&(null===(r=this._labelContainer.get(e.point,0))||void 0===r||r._text.setBoolData(t.SeriesView.DATA_HOVER,!0))}e!=i&&s.chart._hoverAreaChanged(s,null==e?void 0:e.model,null==i?void 0:i.model)}}areaOfDom(e){let t=e;for(;t;){if(t.classList.contains("rm-point")){const e=n.getId(t);if(e)return this._areas[e];break}t=t.parentElement}}_getPointPool(){return this._areaPool}_setModelColor(e){this._pointContainer.setFill(e)}_setPointColor(e,t){e.setFill(t)}_doPrepeare(e,t,o){this._second;const r=t.options.bringToFront?[]:null;this._areaPool.prepare(t.areaCount,((e,t)=>{})),r&&r.length!==t.areaCount&&r.forEach((e=>{e.parent.moveToLast(e)}))}_doRender(e,t){this.$_layoutAreas(e,t)}_doReset(){this._areaPool.forEach((e=>{e.visible&&e.reset()}))}_doPointerMoved(e,t,o){const r=this.areaOfDom(o);return this.hoverArea=r,!0}_doPointClicked(e){this.model.chart._areaClicked(this.model,e.model)}_runShowEffect(e){e&&t.SeriesAnimation.grow(this)}_doViewRateChanged(e){this.$_layoutAreas(this.width,this.height)}$_layoutAreas(e,t){const o=this.chart(),r=this._second;o.isDirty,o.body;const i=this.model;i.options,o.getProjection(r),this._areas={},i.pointLabel,this._labelViews(),this._scale,this._areaPool.forEach(((e,t)=>{}))}}function d(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(a),e.SeriesView.register([a,h]))}d(r),e.FeatureSeries=a,e.default=d,Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -0,0 +1,7 @@
1
+
2
+ /**
3
+ * RealMap Feature v1.0.7
4
+ * Copyright (C) 2023-2025 WooriTech Inc.
5
+ * All Rights Reserved.
6
+ */
7
+ import{extend as e,DataPointLabel as t,FeatureSeriesType as o,ValueSeries as r,isObject as s,copyObj as i,ColorRanger as a,Color as l,ValuePoint as n,SeriesView as h,PointViewPool as d,SeriesAnimation as c,PointElement as _}from"./index.mjs";class u extends n{_readObject(e,t){super._readObject(e,t),this.center=t.center,this.value=t.value}}class p extends t{}p.defaults=e(t.defaults,{hoverColor:"white"});class m extends r{get areaCount(){return this._map.areaCount}get detail(){return this._detail}get color(){return this._colorObj}getValueRange(){return{min:this._minValue,max:this._maxValue}}_createLabel(e){return new p(e)}_doApply(e){s(e.detail)?this._detail||(this._detail=new m(this.chart)):e.hasOwnProperty("detail")&&(this._detail=null),super._doApply(e)}needMapScale(){return!0}getRangedColor(e){var t;if(!isNaN(e.value)){const o=this._colorRanger||(null===(t=this.chart.getColorScale(this._op.colorScale))||void 0===t?void 0:t.getRanger());return null==o?void 0:o.getColor(this._minValue,this._maxValue,e.value,this._colorObj)}}followTooltipPointer(){return!0}getLegendSources(e){return this._points.count>0&&super.getLegendSources(e)}_createPoint(e){return new u(e)}_prepareRender(){super._prepareRender()}_doPrepareRender(e){super._doPrepareRender(e);const t=this._op,o=this._visPoints,{min:r,max:l}=this._calcMinMax(o);if(this._minValue=r,this._maxValue=l,s(t.colorRange)){const e=i(t.colorRange);isNaN(e.minValue)&&(e.minValue=r),isNaN(e.maxValue)&&(e.maxValue=l),this._colorRanger=new a(e)}else this._colorRanger=null}_doLoadPoints(e){this._useMapData&&(e=this._map._internalAreas().map((e=>({id:e.id,name:e.name})))),super._doLoadPoints(e),this._map}setCalcedColor(e,t){super.setCalcedColor(e,t),this._colorObj=new l(this._calcedColor),this._color=this._colorObj?this._colorObj.toString():null}getColorScale(){return this._op.colorScale}}m.type=o,m.defaults=e(r.defaults,{selectable:!1,detailZoom:250});const g="rm-map-series-id-";class v extends _{static idClass(e){return g+e.id}static getId(e){for(const t of Array.from(e.classList))if(t.startsWith(g))return t.substring(17)}constructor(e){super(e)}render(e,t,o){const r=this.model,s=!this.point||this.point.isNull;e!==r&&this.setPath((this.model=e).path),o&&(this.setBoolData("null",s),s&&t&&this.internalSetStyleOrClass(t),this.dom.classList.add(v.idClass(e)))}reset(){this.model=null}}class f extends h{constructor(e){super(e,"rm-feature-series"),this._areas={},this._areaPool=new d(this._pointContainer,v)}get hoverArea(){return this._hoverArea}set hoverArea(e){var t,o;const r=this._hoverArea;if(e!==r){const i=this.model;if(r&&(r.setBoolData(h.DATA_HOVER,!1),r.point&&(null===(t=this._labelContainer.get(r.point,0))||void 0===t||t._text.setBoolData(h.DATA_HOVER,!1))),e&&!e.point&&(e=void 0),this._hoverArea=e,e){const t=this.model.options,r=document.querySelector(".rm-root");let i=t.hoverColor,a=this.model.pointLabel.options.hoverColor;!i&&s(t.hoverStyle)&&(i=t.hoverStyle.fill),r.style.setProperty("--map-series-hover-fill",i||""),r.style.setProperty("--map-series-hover-label-fill",a||""),e.setBoolData(h.DATA_HOVER,!0),e.point&&(null===(o=this._labelContainer.get(e.point,0))||void 0===o||o._text.setBoolData(h.DATA_HOVER,!0))}e!=r&&i.chart._hoverAreaChanged(i,null==e?void 0:e.model,null==r?void 0:r.model)}}areaOfDom(e){let t=e;for(;t;){if(t.classList.contains("rm-point")){const e=v.getId(t);if(e)return this._areas[e];break}t=t.parentElement}}_getPointPool(){return this._areaPool}_setModelColor(e){this._pointContainer.setFill(e)}_setPointColor(e,t){e.setFill(t)}_doPrepeare(e,t,o){this._second;const r=t.options.bringToFront?[]:null;this._areaPool.prepare(t.areaCount,((e,t)=>{})),r&&r.length!==t.areaCount&&r.forEach((e=>{e.parent.moveToLast(e)}))}_doRender(e,t){this.$_layoutAreas(e,t)}_doReset(){this._areaPool.forEach((e=>{e.visible&&e.reset()}))}_doPointerMoved(e,t,o){const r=this.areaOfDom(o);return this.hoverArea=r,!0}_doPointClicked(e){this.model.chart._areaClicked(this.model,e.model)}_runShowEffect(e){e&&c.grow(this)}_doViewRateChanged(e){this.$_layoutAreas(this.width,this.height)}$_layoutAreas(e,t){const o=this.chart(),r=this._second;o.isDirty,o.body;const s=this.model;s.options,o.getProjection(r),this._areas={},s.pointLabel,this._labelViews(),this._scale,this._areaPool.forEach(((e,t)=>{}))}}function C(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(m),e.SeriesView.register([m,f]))}export{m as FeatureSeries,C as default};
@@ -0,0 +1,7 @@
1
+
2
+ /**
3
+ * RealMap Heatmap v1.0.7
4
+ * Copyright (C) 2023-2025 WooriTech Inc.
5
+ * All Rights Reserved.
6
+ */
7
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("realmap")):"function"==typeof define&&define.amd?define(["exports","realmap"],r):r((e="undefined"!=typeof globalThis?globalThis:e||self).RealMapheatmap={},e.RealMap)}(this,(function(e,r){"use strict";function t(e){var r=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var s=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,s.get?s:{enumerable:!0,get:function(){return e[t]}})}})),r.default=e,Object.freeze(r)}var s=t(r);class a extends r.MarkerSeriesPoint{_readObject(e,r){super._readObject(e,r)}}class i extends r.MarkerSeries{_doApply(e){super._doApply(e)}_createPoint(e){return new a(e)}_defLabelOff(){return 2}}i.type=r.HeatmapSeriesType,i.defaults=r.extend(r.MarkerSeries.defaults,{mode:"grid"});class n extends r.MarkerSeriesPointView{constructor(e){super(e)}}class o extends r.MarkerSeriesView{constructor(e){super(e,"rm-heatmap-series")}_createMarkers(e){return new r.PointViewPool(e,n)}_doPrepeare(e,r,t){this.$_prepareMarkers(r,r._visPoints)}_doRender(e,r){this.$_layoutMarkers(e,r)}_doReset(){}_runShowEffect(e){e&&r.SeriesAnimation.grow(this)}_doViewRateChanged(e){this.$_layoutMarkers(this.width,this.height)}$_prepareMarkers(e,r){}$_layoutMarkers(e,r){}}function u(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(i),e.SeriesView.register([i,o]))}u(s),e.HeatmapSeries=i,e.default=u,Object.defineProperty(e,"__esModule",{value:!0})}));
@@ -1,7 +1,7 @@
1
1
 
2
2
  /**
3
- * RealMap Heatmap v1.0.5
3
+ * RealMap Heatmap v1.0.7
4
4
  * Copyright (C) 2023-2025 WooriTech Inc.
5
5
  * All Rights Reserved.
6
6
  */
7
- import{HeatmapSeriesType as e,extend as r,MarkerSeries as s,MarkerSeriesPoint as t,MarkerSeriesView as a,PointViewPool as i,SeriesAnimation as o,MarkerSeriesPointView as d}from"./index.mjs";class n extends t{_readObject(e,r){super._readObject(e,r)}}class u extends s{_doApply(e){super._doApply(e)}_createPoint(e){return new n(e)}_defLabelOff(){return 2}}u.type=e,u.defaults=r(s.defaults,{mode:"grid"});class _ extends d{constructor(e){super(e)}}class p extends a{constructor(e){super(e,"rm-Heatmap-series")}_createMarkers(e){return new i(e,_)}_doPrepeare(e,r,s){this.$_prepareMarkers(r,r._visPoints)}_doRender(e,r){this.$_layoutMarkers(e,r)}_doReset(){}_runShowEffect(e){e&&o.grow(this)}_doViewRateChanged(e){this.$_layoutMarkers(this.width,this.height)}$_prepareMarkers(e,r){}$_layoutMarkers(e,r){}}function c(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(u),e.SeriesView.register([u,p]))}export{u as HeatmapSeries,c as default};
7
+ import{HeatmapSeriesType as e,extend as r,MarkerSeries as s,MarkerSeriesPoint as t,MarkerSeriesView as a,PointViewPool as i,SeriesAnimation as o,MarkerSeriesPointView as d}from"./index.mjs";class n extends t{_readObject(e,r){super._readObject(e,r)}}class u extends s{_doApply(e){super._doApply(e)}_createPoint(e){return new n(e)}_defLabelOff(){return 2}}u.type=e,u.defaults=r(s.defaults,{mode:"grid"});class _ extends d{constructor(e){super(e)}}class p extends a{constructor(e){super(e,"rm-heatmap-series")}_createMarkers(e){return new i(e,_)}_doPrepeare(e,r,s){this.$_prepareMarkers(r,r._visPoints)}_doRender(e,r){this.$_layoutMarkers(e,r)}_doReset(){}_runShowEffect(e){e&&o.grow(this)}_doViewRateChanged(e){this.$_layoutMarkers(this.width,this.height)}$_prepareMarkers(e,r){}$_layoutMarkers(e,r){}}function c(e){(function(e){return e.Series&&e.SeriesView})(e)&&(e.Series.register(u),e.SeriesView.register([u,p]))}export{u as HeatmapSeries,c as default};