designbase-wp-library 0.9.5 → 0.9.6
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/dist/js/dewp.min.js +1 -1
- package/package.json +1 -1
package/dist/js/dewp.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var DEWP=function(){"use strict";function e(e,t=document){return t.querySelector(e)}function t(e,t=document){return Array.from(t.querySelectorAll(e))}function s(e,t={}){const s=document.createElement(e);return Object.assign(s,t),s}function i(e,t){e.classList.add(t)}function n(e,t){e.classList.remove(t)}function o(e,t,s){return e.classList.toggle(t,s)}function r(e,t){return e.classList.contains(t)}function a(e,t){e.textContent=t}function d(e,t){e.innerHTML=t}function l(e,t,s,i){e.addEventListener(t,s,i)}function c(e,t,s,i){e.removeEventListener(t,s,i)}function p(e){e.remove()}function h(e,t){e.appendChild(t)}function u(e,t,s){e.insertBefore(t,s)}function v(e,t,s){e.style.setProperty(t,s)}function m(e,t,s){e.setAttribute(`data-${t}`,s)}function g(e,t){return e.getAttribute(`data-${t}`)}function w(){return"loading"!==document.readyState}function b(e){w()?e():l(document,"DOMContentLoaded",e,{once:!0})}function y(e,t=0){return new Promise(s=>{const i=new IntersectionObserver(([e])=>{i.disconnect(),s(e.isIntersecting)},{threshold:t});i.observe(e)})}function f(e,t="smooth"){e.scrollIntoView({behavior:t,block:"start"})}function E(e){return e.getBoundingClientRect()}function I(e,t){return t.contains(e)}function A(e){for(;e.firstChild;)e.removeChild(e.firstChild)}const x=new class{constructor(){this.container=null,this.init()}init(){this.createContainer()}createContainer(){const e=document.getElementById("dewp-toast-container");e&&e.remove(),this.container=document.createElement("div"),this.container.id="dewp-toast-container",this.container.className="dewp-toast-container dewp-toast-container-top-right",document.body.appendChild(this.container)}show(e,t="info",s=5e3,i="md"){this.container||this.createContainer();const n="dewp-toast-"+Date.now(),o=this.createToastElement(n,e,t,i);try{Array.from(this.container.querySelectorAll(".dewp-toast .dewp-toast-message")).some(t=>t.textContent===String(e))&&this.hideAll()}catch(e){}return this.container.appendChild(o),requestAnimationFrame(()=>{o.classList.add("show"),o.classList.add("toast-slide-in")}),s>0&&setTimeout(()=>{this.hide(n)},s),n}createToastElement(e,t,s,i="md"){const n=document.createElement("div");n.id=e,n.className=`dewp-toast dewp-toast-${s} dewp-toast-${i}`;const o=document.createElement("div");o.className="dewp-toast-content";const r=document.createElement("span");r.className="dewp-toast-icon",r.innerHTML=this.getTypeIcon(s);const a=document.createElement("div");a.className="dewp-toast-message",a.textContent=t;const d=document.createElement("button");return d.className="dewp-toast-close",d.type="button",d.innerHTML="<span>×</span>",d.setAttribute("aria-label","토스트 닫기"),d.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.hide(e)}),o.appendChild(r),o.appendChild(a),o.appendChild(d),n.appendChild(o),n}getTypeIcon(e){return{info:"ℹ️",success:"✅",warning:"⚠️",error:"❌"}[e]}hide(e){const t=document.getElementById(e);t&&(t.classList.remove("show","toast-slide-in"),t.classList.add("toast-slide-out"),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},300))}hideAll(){if(this.container){this.container.querySelectorAll(".dewp-toast").forEach(e=>{const t=e.id;t&&this.hide(t)})}}success(e,t,s){return this.show(e,"success",t,s)}error(e,t,s){return this.show(e,"error",t,s)}warning(e,t,s){return this.show(e,"warning",t,s)}info(e,t,s){return this.show(e,"info",t,s)}},L=(e,t,s,i)=>x.show(e,t||"info",s,i),D=(e,t,s)=>x.success(e,t,s),k=(e,t,s)=>x.error(e,t,s),C=(e,t,s)=>x.warning(e,t,s),T=(e,t,s)=>x.info(e,t,s);const S=new class{constructor(){this.modals=new Map,this.activeModal=null,this.backdrop=null,this.zIndex=1050,this.init()}init(){this.createBackdrop(),this.bindEvents()}createBackdrop(){this.backdrop=document.createElement("div"),this.backdrop.className="dewp-modal-backdrop",document.body.appendChild(this.backdrop)}bindEvents(){document.addEventListener("keydown",e=>{"Escape"===e.key&&this.activeModal&&this.close(this.activeModal.id)}),this.backdrop&&this.backdrop.addEventListener("click",()=>{this.activeModal&&this.close(this.activeModal.id)})}create(e={}){const t="dewp-modal-"+Date.now(),s=this.createModalElement(t,e);return this.modals.set(t,s),document.body.appendChild(s),t}createModalElement(e,t){const s=document.createElement("div");s.id=e,s.className="dewp-modal";const i=t.size||"md";if(s.className=`dewp-modal ${{sm:"dewp-modal-sm",md:"dewp-modal-md",lg:"dewp-modal-lg",xl:"dewp-modal-xl",full:"dewp-modal-full"}[i]}`,t.title){const i=document.createElement("div");i.className="dewp-modal-header";const n=document.createElement("h3");if(n.textContent=t.title,i.appendChild(n),!1!==t.closable){const t=document.createElement("button");t.className="dewp-modal-close",t.innerHTML="×",t.addEventListener("click",()=>{this.close(e)}),i.appendChild(t)}s.appendChild(i)}if(t.content){const e=document.createElement("div");e.className="dewp-modal-body","string"==typeof t.content?e.innerHTML=t.content:e.appendChild(t.content),s.appendChild(e)}if(t.showCancel||t.confirmText){const i=document.createElement("div");if(i.className="dewp-modal-footer",t.showCancel){const s=document.createElement("button");s.className="dewp-modal-cancel",s.textContent=t.cancelText||"취소",s.addEventListener("click",()=>{t.onCancel&&t.onCancel(),this.close(e)}),i.appendChild(s)}if(t.confirmText){const s=document.createElement("button");s.className="dewp-modal-confirm",s.textContent=t.confirmText,s.addEventListener("click",()=>{t.onConfirm&&t.onConfirm(),this.close(e)}),i.appendChild(s)}s.appendChild(i)}return s}open(e){const t=this.modals.get(e);t&&(this.activeModal=t,this.showBackdrop(),t.style.opacity="1",t.style.visibility="visible",t.style.transform="translate(-50%, -50%) scale(1)",t.querySelector("button")&&t.querySelector("button").focus())}close(e){const t=this.modals.get(e);t&&(t.style.opacity="0",t.style.visibility="hidden",t.style.transform="translate(-50%, -50%) scale(0.9)",setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t),this.modals.delete(e),this.activeModal===t&&(this.activeModal=null,this.hideBackdrop())},300))}showBackdrop(){this.backdrop&&(this.backdrop.style.opacity="1",this.backdrop.style.visibility="visible")}hideBackdrop(){this.backdrop&&(this.backdrop.style.opacity="0",this.backdrop.style.visibility="hidden")}show(e={}){const t=this.create(e);return this.open(t),t}confirm(e){const t=this.create({title:e.title||"확인",content:e.message,confirmText:e.confirmText||"확인",cancelText:"취소",showCancel:!0,onConfirm:e.onConfirm,onCancel:e.onCancel});this.open(t)}alert(e,t){const s=this.create({title:t||"알림",content:e,confirmText:"확인"});this.open(s)}getModal(e){return this.modals.get(e)}isOpen(e){const t=this.modals.get(e);return!!t&&"visible"===t.style.visibility}closeAll(){this.modals.forEach((e,t)=>{this.close(t)})}},M=(e={})=>S.create(e),O=e=>{S.open(e)},_=e=>{S.close(e)},$=(e={})=>S.show(e),q=e=>{S.confirm(e)};const P=new class{constructor(){this.dropdowns=new Map,this.activeDropdown=null,this.zIndex=1e3,this.uidCounter=0,this.init()}init(){this.bindGlobalEvents()}generateId(){return`dewp-dropdown-${"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}-${++this.uidCounter}`}`}bindGlobalEvents(){document.addEventListener("click",e=>{if(!this.activeDropdown)return;const t=e.target,s=this.activeDropdown.trigger.contains(t),i=this.activeDropdown.element.contains(t);s||i||!1!==this.activeDropdown.options.autoClose&&this.hide(this.activeDropdown.id)}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.activeDropdown&&!1!==this.activeDropdown.options.autoClose&&this.hide(this.activeDropdown.id)});const e=()=>{this.activeDropdown&&this.positionDropdown(this.activeDropdown)};window.addEventListener("resize",e),window.addEventListener("scroll",e,!0)}create(e){const t="string"==typeof e.trigger?document.querySelector(e.trigger):e.trigger;if(!t)throw console.error("🔽 드롭다운 트리거 요소를 찾을 수 없음:",e.trigger),new Error("드롭다운 트리거 요소를 찾을 수 없습니다.");const s=this.findDropdownContainer(t);if(!s)throw console.error("🔽 드롭다운 컨테이너를 찾을 수 없음"),new Error("드롭다운 컨테이너(.dewp-dropdown)를 찾을 수 없습니다.");const i=s.dataset.dropdownId;if(i&&this.dropdowns.has(i))return i;const n=s.querySelector(".dewp-dropdown-menu");if(!n)throw console.error("🔽 기존 드롭다운 메뉴를 찾을 수 없음"),new Error("기존 드롭다운 메뉴(.dewp-dropdown-menu)를 찾을 수 없습니다.");const o=this.generateId(),r={id:o,element:n,options:e,trigger:t,container:s};this.dropdowns.set(o,r),s.dataset.dropdownId=o;const a=r.trigger,d=r.element;return a.id||(a.id=`${o}-trigger`),d.id||(d.id=`${o}-menu`),a.setAttribute("aria-haspopup","true"),a.setAttribute("aria-controls",d.id),a.setAttribute("aria-expanded","false"),d.setAttribute("role","menu"),d.setAttribute("aria-labelledby",a.id),this.bindDropdownItemEvents(d,o),this.bindTriggerEvents(r),this.updateTriggerText(r,e.placeholder||"선택하세요"),o}findDropdownContainer(e){let t=e.parentElement,s=0;for(;t&&s<10;){if(t.classList.contains("dewp-dropdown")){if(t.querySelector(".dewp-dropdown-menu"))return t}t=t.parentElement,s++}return null}bindDropdownItemEvents(e,t){e.querySelectorAll(".dewp-dropdown-item").forEach(e=>{e.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const s=e.currentTarget,i=s.getAttribute("data-value")||s.textContent||"",n=s.textContent||"";this.selectItem(t,i,n);const o=this.dropdowns.get(t);o&&!1!==o.options.autoClose&&this.hide(t)})})}selectItem(e,t,s){const i=this.dropdowns.get(e);i&&(i.selectedValue=t,i.selectedText=s,this.updateTriggerText(i,s),i.options.onSelect&&i.options.onSelect(t,s))}updateTriggerText(e,t){const s=e.trigger,i=s.querySelector(".dewp-dropdown-text");if(i)return void(i.textContent=t);const n=Array.from(s.childNodes).find(e=>{var t;return e.nodeType===Node.TEXT_NODE&&(null===(t=e.textContent)||void 0===t?void 0:t.trim())});if(n)n.textContent=t;else{const e=document.createTextNode(t);s.insertBefore(e,s.firstChild)}}bindTriggerEvents(e){const{trigger:t,id:s}=e,i=s;t.removeEventListener("click",t.__dewpHandler);const n=e=>{e.preventDefault(),e.stopPropagation(),this.activeDropdown&&this.activeDropdown.id===i?this.hide(i):(this.activeDropdown&&this.hide(this.activeDropdown.id),this.show(i))};t.__dewpHandler=n,t.addEventListener("click",n)}show(e){const t=this.dropdowns.get(e);t?(this.activeDropdown&&this.activeDropdown.id!==e&&this.hide(this.activeDropdown.id),this.activeDropdown=t,this.positionDropdown(t),t.element.classList.add("show"),t.trigger.setAttribute("aria-expanded","true"),t.options.onShow&&t.options.onShow()):console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}hide(e){const t=this.dropdowns.get(e);if(t){t.element.classList.remove("show"),t.trigger.setAttribute("aria-expanded","false");try{t.trigger.focus()}catch{}this.activeDropdown&&this.activeDropdown.id===e&&(this.activeDropdown=null),t.options.onHide&&t.options.onHide()}else console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}positionDropdown(e){var t;const{element:s,trigger:i,options:n}=e,o=n.position||"bottom",r=n.align||"start",a=null!==(t=n.offset)&&void 0!==t?t:8,d=i.getBoundingClientRect(),l=e.container.getBoundingClientRect(),c=s.getBoundingClientRect();let p=0,h=0;switch(o){case"bottom":p=d.bottom-l.top+a;break;case"top":p=d.top-l.top-c.height-a;break;case"left":h=d.left-l.left-c.width-a,p=d.top-l.top+d.height/2-c.height/2;break;case"right":h=d.right-l.left+a,p=d.top-l.top+d.height/2-c.height/2}switch(r){case"center":"top"!==o&&"bottom"!==o||(h=d.left-l.left+d.width/2-c.width/2);break;case"end":"top"!==o&&"bottom"!==o||(h=d.right-l.left-c.width);break;default:"top"!==o&&"bottom"!==o||(h=d.left-l.left)}s.style.top=`${p}px`,s.style.left=`${h}px`,s.style.zIndex=""+this.zIndex++}toggle(e){this.dropdowns.get(e)?this.activeDropdown&&this.activeDropdown.id===e?this.hide(e):this.show(e):console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}getSelectedValue(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.selectedValue}getSelectedText(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.selectedText}setValue(e,t,s){this.dropdowns.get(e)&&this.selectItem(e,t,s)}getDropdown(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.element}isOpen(e){const t=this.dropdowns.get(e);return!!t&&t.element.classList.contains("show")}closeAll(){this.dropdowns.forEach((e,t)=>this.hide(t))}destroy(e){const t=this.dropdowns.get(e);if(!t)return;this.hide(e);const s=t.trigger;s.__dewpHandler&&(s.removeEventListener("click",s.__dewpHandler),delete s.__dewpHandler),delete t.container.dataset.dropdownId,this.dropdowns.delete(e)}autoInitialize(){document.querySelectorAll(".dewp-dropdown").forEach(e=>{var t;const s=e.dataset.dropdownId;if(s&&this.dropdowns.has(s))return;const i=e.querySelector(".dewp-dropdown-toggle"),n=e.querySelector(".dewp-dropdown-menu");if(i&&n)try{const s=this.create({trigger:i,content:"",position:"bottom",align:"start",autoClose:!0,placeholder:((null===(t=i.querySelector(".dewp-dropdown-text"))||void 0===t?void 0:t.textContent)||"선택하세요").trim(),onSelect:(t,s)=>{const i=e.querySelector(".dewp-dropdown-text");i&&(i.textContent=s),e.setAttribute("data-selected-value",t)}});n.setAttribute("data-dropdown-id",s)}catch(e){console.error("❌ 드롭다운 자동 초기화 실패:",e)}else console.warn("⚠️ 드롭다운 구조 불완전:",{container:e})})}},B=e=>P.create(e),N=e=>{P.show(e)},H=e=>{P.hide(e)},z=e=>{P.toggle(e)},X=()=>{P.closeAll()},W=e=>P.getSelectedValue(e),G=e=>P.getSelectedText(e),U=(e,t,s)=>{P.setValue(e,t,s)},R=()=>{P.autoInitialize()};const V=new class{constructor(){this.drawers=new Map,this.activeDrawer=null,this.overlay=null,this.initGlobalEvents()}create(e){const t="dewp-drawer-"+Date.now();let s=null;if(e.target&&(s="string"==typeof e.target?document.querySelector(e.target):e.target),!s)throw new Error("Drawer 대상 요소를 찾을 수 없습니다.");let i=null;!1!==e.overlay&&(i=this.createOverlay(),document.body.appendChild(i));const n={id:t,element:s,options:e,trigger:void 0,isOpen:!1,overlay:i||void 0};return this.drawers.set(t,n),this.bindDrawerEvents(n),t}createDrawerElement(e){const t=document.createElement("div");t.className="dewp-drawer",e.position&&t.classList.add(`dewp-drawer-${e.position}`),e.size&&t.classList.add(`dewp-drawer-${e.size}`),e.theme&&t.classList.add(`dewp-drawer-${e.theme}`);const s=this.getDrawerTitle(e);return t.innerHTML=`\n <div class="dewp-drawer-header">\n <h3 class="dewp-drawer-title">${s}</h3>\n <button class="dewp-drawer-close">\n <svg viewBox="0 0 24 24">\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n </svg>\n </button>\n </div>\n <div class="dewp-drawer-content">\n ${e.content||"<p>Drawer 내용을 여기에 입력하세요.</p>"}\n </div>\n `,t}createOverlay(){const e=document.createElement("div");return e.className="dewp-drawer-overlay",e.addEventListener("click",()=>{this.closeAll()}),e}bindDrawerEvents(e){const{element:t,id:s}=e,i=t.querySelector(".dewp-drawer-close");if(i){const e=i;e.setAttribute("type","button"),e.setAttribute("aria-label","닫기"),e.setAttribute("title","닫기"),e.setAttribute("role","button"),e.addEventListener("click",()=>{this.close(s)}),e.addEventListener("keydown",e=>{const t=e;"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.close(s))})}!1!==e.options.closeOnEscape&&document.addEventListener("keydown",t=>{"Escape"===t.key&&e.isOpen&&this.close(s)})}bindTriggerEvents(e){const{trigger:t,id:s}=e;t&&t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),e.isOpen?this.close(s):this.open(s)})}open(e){const t=this.drawers.get(e);t&&!t.isOpen&&(this.closeAll(),t.options.onBeforeOpen&&t.options.onBeforeOpen(),t.element.classList.add("dewp-drawer-open"),t.isOpen=!0,this.activeDrawer=t,t.overlay&&t.overlay.classList.add("show"),document.body.style.overflow="hidden",t.options.onOpen&&t.options.onOpen())}close(e){const t=this.drawers.get(e);t&&t.isOpen&&(t.options.onBeforeClose&&t.options.onBeforeClose(),t.element.classList.remove("dewp-drawer-open"),t.isOpen=!1,this.activeDrawer=null,t.overlay&&t.overlay.classList.remove("show"),document.body.style.overflow="",t.options.onClose&&t.options.onClose())}closeAll(){this.drawers.forEach(e=>{e.isOpen&&this.close(e.id)})}toggle(e){const t=this.drawers.get(e);t&&(t.isOpen?this.close(e):this.open(e))}destroy(e){const t=this.drawers.get(e);t&&(this.close(e),t.element.parentNode&&t.element.parentNode.removeChild(t.element),this.drawers.delete(e))}getInstance(e){return this.drawers.get(e)}isOpen(e){const t=this.drawers.get(e);return!!t&&t.isOpen}initGlobalEvents(){window.addEventListener("resize",()=>{this.activeDrawer&&this.adjustDrawerPosition(this.activeDrawer)}),window.addEventListener("scroll",()=>{this.activeDrawer&&this.adjustDrawerPosition(this.activeDrawer)},!0)}adjustDrawerPosition(e){}getDrawerTitle(e){return"right"===e.position?"정보 패널":"dark"===e.theme?"다크 테마":"sm"===e.size?"작은 Drawer":"lg"===e.size?"큰 Drawer":"xl"===e.size?"매우 큰 Drawer":"네비게이션"}autoInitialize(){document.querySelectorAll(".dewp-drawer").forEach((e,t)=>{if(!e.getAttribute("data-drawer-id"))try{const t=this.create({target:e,position:this.detectPosition(e),size:this.detectSize(e),theme:this.detectTheme(e),overlay:!0,closeOnEscape:!0,closeOnOverlayClick:!0});e.setAttribute("data-drawer-id",t)}catch(e){console.error("❌ Drawer 자동 초기화 실패:",e)}})}detectPosition(e){return e.classList.contains("dewp-drawer-right")?"right":e.classList.contains("dewp-drawer-top")?"top":e.classList.contains("dewp-drawer-bottom")?"bottom":"left"}detectSize(e){return e.classList.contains("dewp-drawer-sm")?"sm":e.classList.contains("dewp-drawer-lg")?"lg":e.classList.contains("dewp-drawer-xl")?"xl":"md"}detectTheme(e){return e.classList.contains("dewp-drawer-dark")?"dark":e.classList.contains("dewp-drawer-primary")?"primary":"default"}},F=e=>V.create(e),j=e=>{V.open(e)},Y=e=>{V.close(e)},K=e=>{V.toggle(e)},J=()=>{V.closeAll()},Q=e=>{V.destroy(e)},Z=e=>V.isOpen(e),ee=()=>{V.autoInitialize()};const te=new class{constructor(){this.tabInstances=new Map,this.autoInit()}autoInit(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>this.autoInitTabs()):this.autoInitTabs()}autoInitTabs(){document.querySelectorAll("[data-tabs]").forEach(e=>{e.getAttribute("data-tabs")||e.id||Date.now(),this.initTabs(e,{container:e})})}initTabs(e,t){const s=e.id||"tabs-"+Date.now();this.tabInstances.has(s)&&this.destroy(s);const i=e.querySelector(".dewp-tabs");i&&i.setAttribute("role","tablist");const n=this.findTabElements(e),o=this.findPanelElements(e);if(0===n.size||0===o.size)throw new Error("탭 또는 패널 요소를 찾을 수 없습니다.");const r={id:s,container:e,options:t,tabs:n,panels:o,activeTabId:null};this.tabInstances.set(s,r),n.forEach((e,t)=>{const i=`${s}-tab-${t}`,n=o.get(t);if(n){const o=`${s}-panel-${t}`;e.setAttribute("id",i),e.setAttribute("role","tab"),e.setAttribute("aria-controls",o),e.setAttribute("tabindex","-1"),n.setAttribute("id",o),n.setAttribute("role","tabpanel"),n.setAttribute("aria-labelledby",i),n.setAttribute("tabindex","0")}}),this.bindTabEvents(r);const a=t.activeTab||Array.from(n.keys())[0];return this.activateTab(s,a),s}findTabElements(e){const t=new Map;if(e.querySelectorAll("[data-tab]").forEach(e=>{const s=e.getAttribute("data-tab");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-tab-btn").forEach((e,s)=>{const i=e.getAttribute("data-tab")||`tab-${s}`;t.set(i,e)})}return t}findPanelElements(e){const t=new Map;if(e.querySelectorAll("[data-panel]").forEach(e=>{const s=e.getAttribute("data-panel");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-tab-panel").forEach((e,s)=>{const i=e.getAttribute("data-panel")||`panel-${s}`;t.set(i,e)})}return t}bindTabEvents(e){const{tabs:t,container:s}=e;t.forEach((s,i)=>{s.addEventListener("click",t=>{t.preventDefault(),this.activateTab(e.id,i)}),s.addEventListener("keydown",s=>{["Enter"," "].includes(s.key)&&(s.preventDefault(),this.activateTab(e.id,i));const n=Array.from(t.keys()),o=n.indexOf(i);if("ArrowRight"===s.key){const e=n[(o+1)%n.length],s=t.get(e);null==s||s.focus()}else if("ArrowLeft"===s.key){const e=n[(o-1+n.length)%n.length],s=t.get(e);null==s||s.focus()}})})}activateTab(e,t){const s=this.tabInstances.get(e);if(!s)return;const{tabs:i,panels:n,activeTabId:o,options:r}=s,a=i.get(t),d=n.get(t);if(!a||!d)return;if(o){const e=i.get(o),t=n.get(o);e&&(e.classList.remove("active"),e.setAttribute("aria-selected","false"),e.setAttribute("tabindex","-1")),t&&(t.classList.remove("active"),t.setAttribute("aria-hidden","true"))}a.classList.add("active"),a.setAttribute("aria-selected","true"),a.setAttribute("tabindex","0"),a.focus(),d.classList.add("active"),d.setAttribute("aria-hidden","false");const l=s.activeTabId;s.activeTabId=t,r.onTabChange&&r.onTabChange(t,l||void 0),!1!==r.animation&&this.animateTabChange(d)}animateTabChange(e){e.style.opacity="0",e.style.transform="translateY(10px)",requestAnimationFrame(()=>{e.style.transition="all 0.3s ease",e.style.opacity="1",e.style.transform="translateY(0)"})}getActiveTab(e){const t=this.tabInstances.get(e);return t?t.activeTabId:null}getTabInstance(e){return this.tabInstances.get(e)}destroy(e){const t=this.tabInstances.get(e);t&&(t.tabs.forEach(e=>{e.replaceWith(e.cloneNode(!0))}),this.tabInstances.delete(e))}destroyAll(){this.tabInstances.forEach((e,t)=>{this.destroy(t)})}},se=(e,t)=>te.initTabs(e,t||{container:e}),ie=(e,t)=>{te.activateTab(e,t)},ne=e=>te.getActiveTab(e),oe=e=>te.getTabInstance(e),re=e=>{te.destroy(e)};const ae=new class{constructor(){this.accordionInstances=new Map,this.autoInit()}autoInit(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>this.autoInitAccordions(),100)}):setTimeout(()=>this.autoInitAccordions(),100)}autoInitAccordions(){document.querySelectorAll("[data-accordion]").forEach(e=>{try{e.getAttribute("data-accordion")||e.id||Date.now();this.initAccordion(e,{})}catch(e){}})}initAccordion(e,t){const s=e.getAttribute("data-accordion")||e.id||"accordion-"+Date.now();if(e.hasAttribute("data-accordion-initialized"))return s;this.accordionInstances.has(s)&&this.destroy(s);const i=this.findAccordionItems(e),n=this.findAccordionHeaders(e),o=this.findAccordionContents(e);if(0===i.size)throw new Error("아코디언 아이템을 찾을 수 없습니다.");const r={id:s,container:e,options:{...this.getDefaultOptions(),...t},items:i,headers:n,contents:o,activeItems:new Set};return this.accordionInstances.set(s,r),this.bindAccordionEvents(r),i.forEach((e,t)=>{const s=n.get(t),i=o.get(t);s&&i&&(e.classList.remove("active"),s.classList.remove("active"),s.setAttribute("aria-expanded","false"),i.style.display="none",i.style.height="",i.style.opacity="",i.style.transform="",i.style.transition="",i.style.overflow="")}),t.activeItem&&i.has(t.activeItem)&&this.toggleItem(s,t.activeItem,!0),e.setAttribute("data-accordion-initialized","true"),s}getDefaultOptions(){return{animation:!0,multiple:!1,autoClose:!0}}findAccordionItems(e){const t=new Map;if(e.querySelectorAll("[data-accordion-item]").forEach(e=>{const s=e.getAttribute("data-accordion-item");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-item").forEach((e,s)=>{const i=e.id||`accordion-item-${s}`;t.set(i,e)})}return t}findAccordionHeaders(e){const t=new Map;if(e.querySelectorAll("[data-accordion-header]").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-header").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)})}return t}findAccordionContents(e){const t=new Map;if(e.querySelectorAll("[data-accordion-content]").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-content").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)})}return t}findParentItemId(e){let t=e.parentElement;for(;t;){if(t.hasAttribute("data-accordion-item")||t.classList.contains("dewp-accordion-item"))return t.getAttribute("data-accordion-item")||t.id||null;t=t.parentElement}return null}bindAccordionEvents(e){const{headers:t,container:s}=e;t.forEach((t,s)=>{t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.toggleItem(e.id,s)}),t.addEventListener("keydown",t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),t.stopPropagation(),this.toggleItem(e.id,s))}),t.setAttribute("tabindex","0"),t.setAttribute("role","button"),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",`accordion-content-${s}`)}),e.contents.forEach((e,t)=>{e.setAttribute("id",`accordion-content-${t}`),e.setAttribute("role","region"),e.setAttribute("aria-labelledby",`accordion-header-${t}`)})}toggleItem(e,t,s){const i=this.accordionInstances.get(e);if(!i)return;const{items:n,headers:o,contents:r,options:a}=i,d=n.get(t),l=o.get(t),c=r.get(t);if(!d||!l||!c)return;const p=i.activeItems.has(t),h=void 0!==s?s:!p;h?this.openItemInternal(i,t,d,l,c):this.closeItemInternal(i,t,d,l,c),a.onItemToggle&&a.onItemToggle(t,h)}openItemInternal(e,t,s,i,n){const{options:o,activeItems:r}=e;!o.multiple&&o.autoClose&&r.forEach(s=>{s!==t&&this.closeItemInternal(e,s,e.items.get(s),e.headers.get(s),e.contents.get(s))}),r.add(t),s.classList.add("active"),i.classList.add("active"),i.setAttribute("aria-expanded","true"),o.animation?this.animateContent(n,!0):n.style.display="block"}closeItemInternal(e,t,s,i,n){const{options:o,activeItems:r}=e;r.delete(t),s.classList.remove("active"),i.classList.remove("active"),i.setAttribute("aria-expanded","false"),o.animation?this.animateContent(n,!1):n.style.display="none"}animateContent(e,t){t?(e.style.display="block",e.style.overflow="hidden",e.style.height="0px",e.style.opacity="0",e.style.transform="translateY(-10px)",e.offsetHeight,e.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",e.style.height=e.scrollHeight+"px",e.style.opacity="1",e.style.transform="translateY(0)",setTimeout(()=>{e.style.height="",e.style.overflow="",e.style.transition="",e.style.opacity="",e.style.transform=""},400)):(e.style.overflow="hidden",e.style.height=e.scrollHeight+"px",e.style.opacity="1",e.style.transform="translateY(0)",e.offsetHeight,e.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",e.style.height="0px",e.style.opacity="0",e.style.transform="translateY(-10px)",setTimeout(()=>{e.style.display="none",e.style.height="",e.style.overflow="",e.style.transition="",e.style.opacity="",e.style.transform=""},400))}openItem(e,t){this.toggleItem(e,t,!0)}closeItem(e,t){this.toggleItem(e,t,!1)}openAllItems(e){const t=this.accordionInstances.get(e);t&&t.items.forEach((t,s)=>{this.openItem(e,s)})}closeAllItems(e){const t=this.accordionInstances.get(e);t&&t.items.forEach((t,s)=>{this.closeItem(e,s)})}getActiveItems(e){const t=this.accordionInstances.get(e);return t?Array.from(t.activeItems):[]}isItemOpen(e,t){const s=this.accordionInstances.get(e);return!!s&&s.activeItems.has(t)}getAccordionInstance(e){return this.accordionInstances.get(e)||null}destroy(e){const t=this.accordionInstances.get(e);t&&(t.headers.forEach(e=>{e.removeEventListener("click",()=>{}),e.removeEventListener("keydown",()=>{})}),this.accordionInstances.delete(e))}destroyAll(){this.accordionInstances.forEach((e,t)=>{this.destroy(t)})}},de=(e,t)=>ae.initAccordion(e,t),le=(e,t,s)=>{ae.toggleItem(e,t,s)},ce=(e,t)=>{ae.openItem(e,t)},pe=(e,t)=>{ae.closeItem(e,t)},he=e=>{ae.openAllItems(e)},ue=e=>{ae.closeAllItems(e)},ve=e=>ae.getActiveItems(e),me=(e,t)=>ae.isItemOpen(e,t),ge=e=>ae.getAccordionInstance(e),we=e=>{ae.destroy(e)},be=()=>{ae.destroyAll()};const ye=new class{constructor(){this.popovers=new Map,this.triggerIndex=new WeakMap,this.active=null,this.uid=0,this.docHandlersBound=!1,this.bindDocumentHandlers()}genId(){var e,t;const s=(++this.uid).toString(36);try{return`dewp-popover-${null!==(t=null===(e=crypto.randomUUID)||void 0===e?void 0:e.call(crypto))&&void 0!==t?t:`${Date.now().toString(36)}-${s}`}`}catch{return`dewp-popover-${Date.now().toString(36)}-${s}`}}create(e){const t=this.genId(),s="string"==typeof e.trigger?document.querySelector(e.trigger):e.trigger;if(!s)throw new Error("Popover trigger not found");let i;"string"==typeof e.content?(i=document.createElement("div"),i.className="dewp-popover-content dewp-popover-bottom",i.innerHTML=e.content):(i=e.content,i.classList.add("dewp-popover-content")),s.id||(s.id=`${t}-trigger`),i.id||(i.id=`${t}-content`),s.setAttribute("aria-haspopup","dialog"),s.setAttribute("aria-controls",i.id),s.setAttribute("aria-expanded","false"),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",s.id);const n=s.closest(".dewp-popover")||s.parentElement;!i.parentElement&&n&&n.appendChild(i);const o=e.placement||"bottom";i.classList.remove("dewp-popover-top","dewp-popover-bottom","dewp-popover-left","dewp-popover-right"),i.classList.add(`dewp-popover-${o}`);const r={id:t,trigger:s,popover:i,options:{placement:o,closeOnEscape:!1!==e.closeOnEscape},isOpen:!1};return this.popovers.set(t,r),this.triggerIndex.set(s,t),s.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.toggle(t)}),t}bindDocumentHandlers(){this.docHandlersBound||(document.addEventListener("click",e=>{const t=e.target,s=this.active;s&&(s.trigger.contains(t)||s.popover.contains(t)||this.close(s.id))}),document.addEventListener("keydown",e=>{if("Escape"!==e.key)return;const t=this.active;t&&t.options.closeOnEscape&&this.close(t.id)}),this.docHandlersBound=!0)}open(e){var t;const s=this.popovers.get(e);s&&(this.active&&this.active.id!==e&&this.close(this.active.id),null===(t=s.popover.parentElement)||void 0===t||t.classList.add("is-open"),s.popover.classList.add("is-open"),s.trigger.setAttribute("aria-expanded","true"),s.isOpen=!0,this.active=s)}close(e){var t;const s=this.popovers.get(e);if(s){null===(t=s.popover.parentElement)||void 0===t||t.classList.remove("is-open"),s.popover.classList.remove("is-open"),s.trigger.setAttribute("aria-expanded","false"),s.isOpen=!1,this.active&&this.active.id===e&&(this.active=null);try{s.trigger.focus()}catch{}}}toggle(e){const t=this.popovers.get(e);t&&(t.isOpen?this.close(e):this.open(e))}toggleByTrigger(e){const t=this.triggerIndex.get(e);t&&this.toggle(t)}destroy(e){const t=this.popovers.get(e);t&&(this.close(e),this.triggerIndex.delete(t.trigger),this.popovers.delete(e))}},fe=e=>ye.create(e),Ee=e=>ye.open(e),Ie=e=>ye.close(e),Ae=e=>ye.toggle(e);class xe{constructor(e){this.sidebar=null,this.activeItemId=null,this.isCollapsed=!1,this.config=e,this.init()}init(){this.createSidebar(),this.render(),this.bindEvents(),this.setActiveItem()}createSidebar(){const e=document.querySelector(".dewp-sidebar");e&&e.remove(),this.sidebar=document.createElement("div"),this.sidebar.className="dewp-sidebar dewp-sidebar--wrapper is-sticky",this.sidebar.id="dewp-sidebar",document.body.appendChild(this.sidebar)}render(){this.sidebar&&(this.sidebar.innerHTML=`\n <div class="dewp-sidebar-inner">\n ${this.renderHeader()}\n ${this.renderGroups()}\n ${this.renderFooter()}\n </div>\n `)}renderHeader(){const e=this.config.subtitle?`<p class="dewp-sidebar-subtitle">${this.config.subtitle}</p>`:"";return`\n <div class="dewp-sidebar-header">\n <h1 class="dewp-sidebar-title">${this.config.title}</h1>\n ${e}\n </div>\n `}renderGroups(){return this.config.groups.map(e=>`\n <div class="dewp-sidebar-group" data-group-id="${e.id}">\n ${e.title?`<h2 class="dewp-sidebar-group-title">${e.title}</h2>`:""}\n <ul class="dewp-sidebar-menu">\n ${this.renderMenuItems(e.items)}\n </ul>\n </div>\n `).join("")}renderMenuItems(e){return e.map(e=>{const t=e.icon?`<span class="dewp-sidebar-menu-icon">${e.icon}</span>`:"",s=e.hasSubmenu?'\n <span class="dewp-sidebar-menu-arrow">\n <svg viewBox="0 0 24 24">\n <path d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"/>\n </svg>\n </span>\n ':"",i=e.hasSubmenu&&e.submenu?`\n <ul class="dewp-sidebar-submenu" id="submenu-${e.id}" aria-hidden="true">\n ${this.renderMenuItems(e.submenu)}\n </ul>\n `:"";return`\n <li class="dewp-sidebar-menu-item ${e.isActive?"is-active":""} ${e.hasSubmenu?"has-submenu":""}" data-item-id="${e.id}">\n <a href="${e.url||"#"}" class="dewp-sidebar-menu-link" ${e.url?"":'onclick="return false;"'} ${e.hasSubmenu?'role="button" aria-expanded="false" aria-controls="submenu-'+e.id+'"':""}>\n ${t}\n <span class="dewp-sidebar-menu-text">${e.text}</span>\n ${s}\n </a>\n ${i}\n </li>\n `}).join("")}renderFooter(){return this.config.footerText?`\n <div class="dewp-sidebar-footer">\n <p class="dewp-sidebar-footer-text">${this.config.footerText}</p>\n </div>\n `:""}bindEvents(){this.sidebar&&(this.sidebar.addEventListener("click",e=>{const t=e.target.closest(".dewp-sidebar-menu-item");if(!t)return;const s=t.getAttribute("data-item-id");s&&(t.classList.contains("has-submenu")?(e.preventDefault(),this.toggleSubmenu(t)):this.setActiveItem(s))}),document.addEventListener("keydown",e=>{"Escape"===e.key&&window.innerWidth<=768&&this.closeMobileSidebar()}))}toggleSubmenu(e){var t;const s=e.querySelector(".dewp-sidebar-submenu");if(!s)return;const i=s.classList.contains("expanded"),n=null===(t=e.parentElement)||void 0===t?void 0:t.querySelectorAll(".dewp-sidebar-menu-item.has-submenu");if(null==n||n.forEach(t=>{if(t!==e){const e=t.querySelector(".dewp-sidebar-submenu"),s=t.querySelector(".dewp-sidebar-menu-link");e&&e.classList.contains("expanded")&&(e.classList.remove("expanded"),e.style.maxHeight="0",null==s||s.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true")),t.classList.remove("is-open")}}),i){s.classList.remove("expanded"),s.style.maxHeight="0";const t=e.querySelector(".dewp-sidebar-menu-link");null==t||t.setAttribute("aria-expanded","false"),s.setAttribute("aria-hidden","true"),e.classList.remove("is-open")}else{s.classList.add("expanded"),s.style.maxHeight=s.scrollHeight+"px";const t=e.querySelector(".dewp-sidebar-menu-link");null==t||t.setAttribute("aria-expanded","true"),s.setAttribute("aria-hidden","false"),e.classList.add("is-open")}}setActiveItem(e){var t,s;e&&(this.activeItemId=e);const i=null===(t=this.sidebar)||void 0===t?void 0:t.querySelectorAll(".dewp-sidebar-menu-item.is-active");if(null==i||i.forEach(e=>e.classList.remove("is-active")),this.activeItemId){const e=null===(s=this.sidebar)||void 0===s?void 0:s.querySelector(`[data-item-id="${this.activeItemId}"]`);null==e||e.classList.add("is-active")}}addDivider(e,t="after"){var s;const i=null===(s=this.sidebar)||void 0===s?void 0:s.querySelector(`[data-group-id="${e}"]`);if(!i)return;const n=document.createElement("div");n.className="dewp-sidebar-divider","before"===t?i.insertBefore(n,i.firstChild):i.appendChild(n)}addGroup(e){this.config.groups.push(e),this.render(),this.bindEvents()}addMenuItem(e,t){const s=this.config.groups.find(t=>t.id===e);s&&(s.items.push(t),this.render(),this.bindEvents())}removeMenuItem(e,t){const s=this.config.groups.find(t=>t.id===e);s&&(s.items=s.items.filter(e=>e.id!==t),this.render(),this.bindEvents())}toggle(){this.sidebar&&window.innerWidth<=768&&this.sidebar.classList.toggle("is-open")}toggleCollapse(){this.sidebar&&(this.isCollapsed=!this.isCollapsed,this.sidebar.classList.toggle("is-collapsed",this.isCollapsed))}collapse(){this.sidebar&&(this.isCollapsed=!0,this.sidebar.classList.add("is-collapsed"))}expand(){this.sidebar&&(this.isCollapsed=!1,this.sidebar.classList.remove("is-collapsed"))}openMobileSidebar(){this.sidebar&&this.sidebar.classList.add("is-open")}closeMobileSidebar(){this.sidebar&&this.sidebar.classList.remove("is-open")}destroy(){this.sidebar&&(this.sidebar.remove(),this.sidebar=null)}updateConfig(e){this.config={...this.config,...e},this.render(),this.bindEvents()}getActiveItemId(){return this.activeItemId}getElement(){return this.sidebar}}window.DEWPSidebar=xe;class Le{constructor(e,t={}){var s,i,n;this.input=e.querySelector(".dewp-stepper-input"),this.decrementBtn=e.querySelector(".dewp-stepper-decrement"),this.incrementBtn=e.querySelector(".dewp-stepper-increment"),this.options={min:null!==(s=t.min)&&void 0!==s?s:Number.MIN_SAFE_INTEGER,max:null!==(i=t.max)&&void 0!==i?i:Number.MAX_SAFE_INTEGER,step:null!==(n=t.step)&&void 0!==n?n:1},"number"==typeof t.value&&(this.input.value=String(t.value)),this.bindEvents(t.onChange),this.syncDisabled()}bindEvents(e){const t=()=>this.clamp(parseFloat(this.input.value||"0")),s=t=>{e&&e(t)};this.decrementBtn.addEventListener("click",()=>{const e=this.clamp(t()-this.options.step);this.input.value=String(e),this.syncDisabled(),s(e)}),this.incrementBtn.addEventListener("click",()=>{const e=this.clamp(t()+this.options.step);this.input.value=String(e),this.syncDisabled(),s(e)}),this.input.addEventListener("input",()=>{const e=t();this.input.value=String(e),this.syncDisabled(),s(e)})}clamp(e){return Math.min(this.options.max,Math.max(this.options.min,isNaN(e)?0:e))}syncDisabled(){const e=parseFloat(this.input.value||"0");this.decrementBtn.disabled=e<=this.options.min,this.incrementBtn.disabled=e>=this.options.max}}const De=!0,ke=!1,Ce=5e3,Te=!0,Se=!0,Me=!0,Oe=!0,_e=0,$e=(e,t)=>void 0===e||""===e?t:"false"!==e,qe=(e,t)=>{if(void 0===e||""===e)return t;const s=Number(e);return Number.isFinite(s)?s:t};const Pe=new class{constructor(){this.instances=new Map,this.elementIndex=new WeakMap}init(e,t={}){const s=this.resolveElement(e);if(!s)throw new Error("[DEWP Carousel] 대상 요소를 찾을 수 없습니다.");const i=this.elementIndex.get(s);if(i)return i;const n=this.resolveOptions(s,t),o=this.ensureViewport(s),r=this.ensureTrack(o),a=Array.from(r.querySelectorAll(".dewp-carousel__slide"));if(!a.length)throw new Error("[DEWP Carousel] .dewp-carousel__slide 요소가 최소 1개 필요합니다.");const d=this.ensureNavButton(s,"prev"),l=this.ensureNavButton(s,"next");let c,p=[];n.indicators&&a.length>1&&(c=this.ensureIndicators(s),p=this.createDots(c,a.length));const h=s.dataset.carouselId||`dewp-carousel-${(()=>{try{return crypto.randomUUID()}catch{return`dewp-carousel-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}})()}`;s.dataset.carouselId=h;const u={id:h,element:s,viewport:o,track:r,slides:a,navPrev:d,navNext:l,indicatorsWrapper:c,dots:p,options:n,currentIndex:Math.min(Math.max(n.initialIndex,0),a.length-1),autoplayTimer:void 0,isPointerDown:!1,pointerStartX:0,pointerDeltaX:0,handlers:{dotClicks:[],imageLoadHandlers:[]}};return this.instances.set(h,u),this.elementIndex.set(s,h),this.bindEvents(u),this.moveTo(u,u.currentIndex,!1),this.setupAutoplay(u),this.bindDynamicHeight(u),s.classList.toggle("dewp-carousel--single",1===a.length),h}next(e){const t=this.getInstance(e);if(!t)return;const s=t.currentIndex+1;if(s>=t.slides.length){if(!t.options.loop)return;this.moveTo(t,0)}else this.moveTo(t,s)}prev(e){const t=this.getInstance(e);if(!t)return;const s=t.currentIndex-1;if(s<0){if(!t.options.loop)return;this.moveTo(t,t.slides.length-1)}else this.moveTo(t,s)}goTo(e,t){const s=this.getInstance(e);s&&this.moveTo(s,t)}destroy(e){const t=this.getInstance(e);if(!t)return;t.autoplayTimer&&window.clearInterval(t.autoplayTimer);const{handlers:s}=t;s.prev&&t.navPrev.removeEventListener("click",s.prev),s.next&&t.navNext.removeEventListener("click",s.next),s.hoverEnter&&t.element.removeEventListener("mouseenter",s.hoverEnter),s.hoverLeave&&t.element.removeEventListener("mouseleave",s.hoverLeave),s.keydown&&t.element.removeEventListener("keydown",s.keydown),s.pointerDown&&t.track.removeEventListener("pointerdown",s.pointerDown),s.pointerMove&&t.track.removeEventListener("pointermove",s.pointerMove),s.pointerUp&&(t.track.removeEventListener("pointerup",s.pointerUp),t.track.removeEventListener("pointercancel",s.pointerUp),t.track.removeEventListener("pointerleave",s.pointerUp)),s.resize&&window.removeEventListener("resize",s.resize),s.imageLoadHandlers.forEach(({element:e,handler:t})=>{e.removeEventListener("load",t)}),s.imageLoadHandlers.length=0,s.dotClicks.forEach((e,s)=>{const i=t.dots[s];i&&i.removeEventListener("click",e)}),s.dotClicks=[],t.viewport.style.removeProperty("height"),this.instances.delete(t.id),this.elementIndex.delete(t.element)}autoInitialize(){document.querySelectorAll("[data-dewp-carousel]").forEach(e=>{try{this.init(e)}catch(e){console.warn("[DEWP Carousel] 초기화 실패:",e)}})}getInstance(e){if("string"==typeof e)return this.instances.get(e);const t=this.elementIndex.get(e);return t?this.instances.get(t):void 0}resolveElement(e){return"string"==typeof e?document.querySelector(e):e}resolveOptions(e,t){var s,i,n,o,r,a,d,l;const c=e.dataset;return{loop:null!==(s=t.loop)&&void 0!==s?s:$e(c.carouselLoop,De),autoplay:null!==(i=t.autoplay)&&void 0!==i?i:$e(c.carouselAutoplay,ke),interval:null!==(n=t.interval)&&void 0!==n?n:qe(c.carouselInterval,Ce),pauseOnHover:null!==(o=t.pauseOnHover)&&void 0!==o?o:$e(c.carouselPauseOnHover,Te),keyboard:null!==(r=t.keyboard)&&void 0!==r?r:$e(c.carouselKeyboard,Se),swipe:null!==(a=t.swipe)&&void 0!==a?a:$e(c.carouselSwipe,Me),indicators:null!==(d=t.indicators)&&void 0!==d?d:$e(c.carouselIndicators,Oe),initialIndex:null!==(l=t.initialIndex)&&void 0!==l?l:qe(c.carouselInitialIndex,_e)}}ensureViewport(e){let t=e.querySelector(".dewp-carousel__viewport");if(!t){for(t=document.createElement("div"),t.className="dewp-carousel__viewport";e.firstChild;){const s=e.firstChild;if(s instanceof HTMLElement&&s.classList.contains("dewp-carousel__nav"))break;t.appendChild(s)}e.prepend(t)}return t}ensureTrack(e){let t=e.querySelector(".dewp-carousel__track");if(!t){const s=document.createElement("div");s.className="dewp-carousel__track";Array.from(e.children).filter(e=>e instanceof HTMLElement&&e.classList.contains("dewp-carousel__slide")).forEach(e=>s.appendChild(e)),e.appendChild(s),t=s}return t}ensureNavButton(e,t){let s=e.querySelector(`.dewp-carousel__nav--${t}`);if(!s){s=document.createElement("button"),s.type="button",s.className=`dewp-carousel__nav dewp-carousel__nav--${t}`,s.setAttribute("aria-label","prev"===t?"이전 슬라이드":"다음 슬라이드");const i=document.createElement("i");i.className="prev"===t?"icon-chevron-left":"icon-chevron-right",s.appendChild(i),e.appendChild(s)}return s}ensureIndicators(e){let t=e.querySelector(".dewp-carousel__indicators");return t?t.innerHTML="":(t=document.createElement("div"),t.className="dewp-carousel__indicators",e.appendChild(t)),t}createDots(e,t){const s=[];for(let i=0;i<t;i+=1){const t=document.createElement("button");t.type="button",t.className="dewp-carousel__dot",t.setAttribute("aria-label",`${i+1}번째 슬라이드로 이동`),e.appendChild(t),s.push(t)}return s}bindEvents(e){e.handlers.dotClicks=[];const t=()=>this.prev(e.id),s=()=>this.next(e.id);if(e.navPrev.addEventListener("click",t),e.navNext.addEventListener("click",s),e.handlers.prev=t,e.handlers.next=s,e.options.pauseOnHover&&e.options.autoplay){const t=()=>this.pauseAutoplay(e),s=()=>this.resumeAutoplay(e);e.element.addEventListener("mouseenter",t),e.element.addEventListener("mouseleave",s),e.handlers.hoverEnter=t,e.handlers.hoverLeave=s}if(e.options.keyboard){const t=t=>{"ArrowLeft"===t.key?(t.preventDefault(),this.prev(e.id)):"ArrowRight"===t.key&&(t.preventDefault(),this.next(e.id))};e.element.setAttribute("tabindex","0"),e.element.addEventListener("keydown",t),e.handlers.keydown=t}if(e.options.swipe){const t=t=>this.onPointerDown(t,e),s=t=>this.onPointerMove(t,e),i=t=>this.onPointerUp(t,e);e.track.addEventListener("pointerdown",t),e.track.addEventListener("pointermove",s),e.track.addEventListener("pointerup",i),e.track.addEventListener("pointercancel",i),e.track.addEventListener("pointerleave",i),e.handlers.pointerDown=t,e.handlers.pointerMove=s,e.handlers.pointerUp=i}e.dots.forEach((t,s)=>{const i=t=>this.goTo(e.id,s);t.addEventListener("click",i),e.handlers.dotClicks.push(i)})}bindDynamicHeight(e){const t=()=>this.updateHeight(e),s=()=>t();window.addEventListener("resize",s),e.handlers.resize=s,e.slides.forEach(s=>{s.querySelectorAll("img").forEach(s=>{const i=()=>t();s.complete?t():(s.addEventListener("load",i,{once:!0}),e.handlers.imageLoadHandlers.push({element:s,handler:i}))})}),t()}setupAutoplay(e){!e.options.autoplay||e.slides.length<=1||(e.autoplayTimer&&window.clearInterval(e.autoplayTimer),e.autoplayTimer=window.setInterval(()=>{this.next(e.id)},Math.max(e.options.interval,1500)))}pauseAutoplay(e){e.autoplayTimer&&(window.clearInterval(e.autoplayTimer),e.autoplayTimer=void 0)}resumeAutoplay(e){e.options.autoplay&&this.setupAutoplay(e)}startAutoplay(e,t){const s=this.getInstance(e);s&&("number"==typeof t&&t>0&&(s.options.interval=t),s.options.autoplay=!0,this.setupAutoplay(s))}stopAutoplay(e){const t=this.getInstance(e);t&&(t.options.autoplay=!1,this.pauseAutoplay(t))}setAutoplay(e,t,s){t?this.startAutoplay(e,s):this.stopAutoplay(e)}onPointerDown(e,t){"mouse"===e.pointerType&&0!==e.button||(t.isPointerDown=!0,t.pointerStartX=e.clientX,t.pointerDeltaX=0,t.track.classList.add("is-dragging"),t.track.setPointerCapture(e.pointerId),this.pauseAutoplay(t))}onPointerMove(e,t){if(!t.isPointerDown)return;t.pointerDeltaX=e.clientX-t.pointerStartX;const s=-t.currentIndex*t.viewport.clientWidth+t.pointerDeltaX;t.track.style.transform=`translateX(${s}px)`}onPointerUp(e,t){var s,i;if(!t.isPointerDown)return;t.isPointerDown=!1,t.track.classList.remove("is-dragging"),null===(i=(s=t.track).releasePointerCapture)||void 0===i||i.call(s,e.pointerId);const n=.2*t.viewport.clientWidth;t.pointerDeltaX>n?this.prev(t.id):t.pointerDeltaX<-n?this.next(t.id):this.moveTo(t,t.currentIndex),t.pointerDeltaX=0,this.resumeAutoplay(t)}moveTo(e,t,s=!0){const i=e.slides.length-1;let n=t;n<0?n=e.options.loop?i:0:n>i&&(n=e.options.loop?0:i),e.currentIndex=n,s?e.track.style.transform=`translateX(-${100*n}%)`:(e.track.classList.add("is-initializing"),requestAnimationFrame(()=>{e.track.style.transform=`translateX(-${100*n}%)`,e.track.getBoundingClientRect(),e.track.classList.remove("is-initializing")})),e.slides.forEach((e,t)=>{e.classList.toggle("is-active",t===n)}),e.dots.forEach((e,t)=>{e.classList.toggle("is-active",t===n)});const o=!e.options.loop&&0===n,r=!e.options.loop&&n===i;e.navPrev.disabled=o,e.navNext.disabled=r,this.updateHeight(e)}updateHeight(e){const t=e.slides[e.currentIndex];t&&window.requestAnimationFrame(()=>{const s=t.getBoundingClientRect().height||t.offsetHeight||t.scrollHeight;e.viewport.style.height=s>0?`${s}px`:"auto"})}},Be=(e,t)=>Pe.init(e,t),Ne=e=>Pe.next(e),He=e=>Pe.prev(e),ze=(e,t)=>Pe.goTo(e,t),Xe=(e,t)=>Pe.startAutoplay(e,t),We=e=>Pe.stopAutoplay(e),Ge=(e,t,s)=>Pe.setAutoplay(e,t,s),Ue=e=>Pe.destroy(e),Re=()=>Pe.autoInitialize();const Ve=new class{constructor(e={}){var t,s,i,n,o;this.groups=new Map,this.groupOptions=new Map,this.registeredTriggers=new WeakSet,this.currentGroup=null,this.currentIndex=0,this.activeTrigger=null,this.isPointerDown=!1,this.startX=0,this.deltaX=0,this.defaultOptions={loop:null===(t=e.loop)||void 0===t||t,swipe:null===(s=e.swipe)||void 0===s||s,keyboard:null===(i=e.keyboard)||void 0===i||i,closeOnBackdrop:null===(n=e.closeOnBackdrop)||void 0===n||n,showCaption:null===(o=e.showCaption)||void 0===o||o},this.options=this.defaultOptions;const r=this.createOverlayTemplate();document.body.appendChild(r),this.overlay=r,this.stage=r.querySelector(".dewp-lightbox__stage"),this.track=r.querySelector(".dewp-lightbox__track"),this.caption=r.querySelector(".dewp-lightbox__caption"),this.counter=r.querySelector(".dewp-lightbox__counter"),this.closeButton=r.querySelector(".dewp-lightbox__close"),this.prevButton=r.querySelector(".dewp-lightbox__arrow--prev"),this.nextButton=r.querySelector(".dewp-lightbox__arrow--next"),this.bindOverlayEvents()}register(e,t={}){const s="string"==typeof e?document.querySelector(e):e;if(!s)return;(s.matches("[data-dewp-lightbox]")?[s]:Array.from(s.querySelectorAll("[data-dewp-lightbox]"))).forEach(e=>this.registerTrigger(e,t))}open(e,t=0){var s;const i=this.groups.get(e);if(!i)return;const n=null!==(s=this.groupOptions.get(e))&&void 0!==s?s:this.defaultOptions;this.options=n,this.currentGroup=i,this.currentIndex=Math.max(0,Math.min(t,i.items.length-1)),this.renderSlides(i),this.updateUI(),this.toggleOverlay(!0)}close(){if(this.toggleOverlay(!1),this.activeTrigger)try{this.activeTrigger.focus()}catch{}this.currentGroup=null,this.activeTrigger=null}next(){if(!this.currentGroup)return;const e=this.currentIndex+1;if(e>=this.currentGroup.items.length){if(!this.options.loop)return;this.currentIndex=0}else this.currentIndex=e;this.updateUI()}prev(){if(!this.currentGroup)return;const e=this.currentIndex-1;if(e<0){if(!this.options.loop)return;this.currentIndex=this.currentGroup.items.length-1}else this.currentIndex=e;this.updateUI()}autoInitialize(){document.querySelectorAll("[data-dewp-lightbox]").forEach(e=>{this.registerTrigger(e)})}registerTrigger(e,t={}){var s,i,n,o,r;const a={loop:null!==(s=t.loop)&&void 0!==s?s:this.defaultOptions.loop,swipe:null!==(i=t.swipe)&&void 0!==i?i:this.defaultOptions.swipe,keyboard:null!==(n=t.keyboard)&&void 0!==n?n:this.defaultOptions.keyboard,closeOnBackdrop:null!==(o=t.closeOnBackdrop)&&void 0!==o?o:this.defaultOptions.closeOnBackdrop,showCaption:null!==(r=t.showCaption)&&void 0!==r?r:this.defaultOptions.showCaption},d=e.dataset.dewpLightbox||e.getAttribute("data-dewp-lightbox")||"default",l=e.dataset.lightboxSrc||e.getAttribute("href")||e.getAttribute("src");if(!l)return void console.warn("[DEWP Lightbox] 이미지 경로를 찾을 수 없습니다.",e);const c=e.dataset.lightboxCaption||e.getAttribute("data-caption")||e.getAttribute("title")||"";let p=this.groups.get(d);p||(p={name:d,items:[]},this.groups.set(d,p)),this.groupOptions.set(d,a);let h=p.items.find(t=>t.trigger===e);if(h?(h.src=l,h.caption=c):(h={trigger:e,src:l,caption:c,group:d},p.items.push(h)),!this.registeredTriggers.has(e)){e.classList.add("dewp-lightbox-trigger"),e.setAttribute("role","button"),e.setAttribute("tabindex",e.getAttribute("tabindex")||"0");const t=t=>{var s,i;t.preventDefault();const n=null!==(s=this.groupOptions.get(d))&&void 0!==s?s:a;this.options=n,this.activeTrigger=e,this.open(d,null!==(i=null==p?void 0:p.items.indexOf(h))&&void 0!==i?i:0)};e.addEventListener("click",t),e.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),t(e))}),this.registeredTriggers.add(e)}}createOverlayTemplate(){const e=document.createElement("div");return e.className="dewp-lightbox",e.setAttribute("aria-hidden","true"),e.innerHTML='\n <div class="dewp-lightbox__counter" aria-live="polite"></div>\n <div class="dewp-lightbox__stage">\n <div class="dewp-lightbox__track"></div>\n <div class="dewp-lightbox__caption" aria-live="polite"></div>\n </div>\n <button class="dewp-lightbox__close" type="button" aria-label="닫기">\n <i class="icon-close"></i>\n </button>\n <button class="dewp-lightbox__arrow dewp-lightbox__arrow--prev" type="button" aria-label="이전 이미지">\n <i class="icon-chevron-left"></i>\n </button>\n <button class="dewp-lightbox__arrow dewp-lightbox__arrow--next" type="button" aria-label="다음 이미지">\n <i class="icon-chevron-right"></i>\n </button>\n ',e}bindOverlayEvents(){this.closeButton.addEventListener("click",()=>this.close()),this.prevButton.addEventListener("click",()=>this.prev()),this.nextButton.addEventListener("click",()=>this.next()),this.overlay.addEventListener("click",e=>{this.options.closeOnBackdrop&&e.target===this.overlay&&this.close()}),document.addEventListener("keydown",e=>{this.options.keyboard&&this.overlay.classList.contains("is-open")&&("Escape"===e.key?(e.preventDefault(),this.close()):"ArrowRight"===e.key?(e.preventDefault(),this.next()):"ArrowLeft"===e.key&&(e.preventDefault(),this.prev()))});const e=e=>{var t,s;if(!this.options.swipe)return;if(!this.isPointerDown)return;this.isPointerDown=!1,this.track.classList.remove("is-dragging"),null===(s=(t=this.track).releasePointerCapture)||void 0===s||s.call(t,e.pointerId);const i=.15*this.stage.clientWidth;this.deltaX>i?this.prev():this.deltaX<-i&&this.next(),this.updateUI()};this.stage.addEventListener("pointerdown",e=>{this.options.swipe&&("mouse"===e.pointerType&&0!==e.button||(this.isPointerDown=!0,this.startX=e.clientX,this.deltaX=0,this.track.classList.add("is-dragging"),this.track.setPointerCapture(e.pointerId)))}),this.stage.addEventListener("pointermove",e=>{if(!this.options.swipe)return;if(!this.isPointerDown)return;this.deltaX=e.clientX-this.startX;const t=-this.currentIndex*this.stage.clientWidth+this.deltaX;this.track.style.transform=`translateX(${t}px)`}),this.stage.addEventListener("pointerup",e),this.stage.addEventListener("pointercancel",e),this.stage.addEventListener("pointerleave",e)}renderSlides(e){this.track.innerHTML="",e.items.forEach(e=>{const t=document.createElement("figure");t.className="dewp-lightbox__slide";const s=document.createElement("img");s.src=e.src,s.alt=e.caption||"",s.loading="lazy",t.appendChild(s),this.track.appendChild(t)}),this.overlay.classList.toggle("dewp-lightbox--single",e.items.length<=1),this.overlay.classList.toggle("dewp-lightbox--no-caption",!this.options.showCaption)}updateUI(){if(!this.currentGroup)return;const e=100*-this.currentIndex;this.track.style.transform=`translateX(${e}%)`;if(Array.from(this.track.children).forEach((e,t)=>{e.classList.toggle("is-active",t===this.currentIndex)}),this.options.showCaption){const e=this.currentGroup.items[this.currentIndex];(null==e?void 0:e.caption)?(this.caption.textContent=e.caption,this.caption.style.display=""):(this.caption.textContent="",this.caption.style.display="none")}else this.caption.style.display="none";this.counter.textContent=`${this.currentIndex+1} / ${this.currentGroup.items.length}`,this.overlay.classList.toggle("dewp-lightbox--single",this.currentGroup.items.length<=1)}toggleOverlay(e){e?(this.overlay.classList.add("is-open"),this.overlay.setAttribute("aria-hidden","false"),document.body.style.overflow="hidden",this.closeButton.focus()):(this.overlay.classList.remove("is-open"),this.overlay.setAttribute("aria-hidden","true"),document.body.style.overflow="")}},Fe=(e,t)=>Ve.register(e,t),je=(e,t)=>Ve.open(e,t),Ye=()=>Ve.close(),Ke=()=>Ve.next(),Je=()=>Ve.prev(),Qe=()=>Ve.autoInitialize(),Ze="0.9.5";var et={qs:e,qsa:t,create:s,addClass:i,removeClass:n,toggleClass:o,hasClass:r,setText:a,setHTML:d,on:l,off:c,remove:p,append:h,insertBefore:u,clearChildren:A,setStyle:v,setData:m,getData:g,isDOMReady:w,onDOMReady:b,isElementVisible:y,scrollToElement:f,getElementRect:E,isChildOf:I,showToast:L,showSuccessToast:D,showWarningToast:C,showErrorToast:k,showInfoToast:T,createModal:M,openModal:O,closeModal:_,showModal:$,showConfirmModal:q,createDropdown:B,toggleDropdown:z,showDropdown:N,hideDropdown:H,closeAllDropdowns:X,getSelectedValue:W,getSelectedText:G,setDropdownValue:U,autoInitializeDropdowns:R,initTabs:se,activateTab:ie,getActiveTab:ne,getTabInstance:oe,destroyTabs:re,initAccordion:de,toggleAccordionItem:le,openAccordionItem:ce,closeAccordionItem:pe,openAllAccordionItems:he,closeAllAccordionItems:ue,getActiveAccordionItems:ve,isAccordionItemOpen:me,getAccordionInstance:ge,destroyAccordion:we,destroyAllAccordions:be,createDrawer:F,openDrawer:j,closeDrawer:Y,toggleDrawer:K,closeAllDrawers:J,destroyDrawer:Q,isDrawerOpen:Z,autoInitializeDrawers:ee,createPopover:fe,openPopover:Ee,closePopover:Ie,togglePopover:Ae,DEWPSidebar:xe,DEWPStepper:Le,initStepper:(e,t={})=>new Le(e,t),initCarousel:Be,nextCarousel:Ne,prevCarousel:He,goToCarousel:ze,startCarouselAutoplay:Xe,stopCarouselAutoplay:We,setCarouselAutoplay:Ge,destroyCarousel:Ue,autoInitializeCarousels:Re,registerLightbox:Fe,openLightbox:je,closeLightbox:Ye,nextLightbox:Ke,prevLightbox:Je,autoInitializeLightbox:Qe,ready:b,version:Ze,info:{name:"DesignBase WordPress Library",description:"간단하고 강력한 프론트엔드 라이브러리",version:Ze,author:"DesignBase",license:"MIT"}};if("undefined"!=typeof window){const x=window.DEWP={},S={qs:e,qsa:t,create:s,addClass:i,removeClass:n,toggleClass:o,hasClass:r,setText:a,setHTML:d,on:l,off:c,remove:p,append:h,insertBefore:u,clearChildren:A,setStyle:v,setData:m,getData:g,isDOMReady:w,onDOMReady:b,isElementVisible:y,scrollToElement:f,getElementRect:E,isChildOf:I,showToast:L,showSuccessToast:D,showWarningToast:C,showErrorToast:k,showInfoToast:T,createModal:M,openModal:O,closeModal:_,showModal:$,showConfirmModal:q,createDropdown:B,toggleDropdown:z,showDropdown:N,hideDropdown:H,closeAllDropdowns:X,getSelectedValue:W,getSelectedText:G,setDropdownValue:U,autoInitializeDropdowns:R,createDrawer:F,openDrawer:j,closeDrawer:Y,toggleDrawer:K,closeAllDrawers:J,destroyDrawer:Q,isDrawerOpen:Z,autoInitializeDrawers:ee,initTabs:se,activateTab:ie,getActiveTab:ne,getTabInstance:oe,destroyTabs:re,initAccordion:de,toggleAccordionItem:le,openAccordionItem:ce,closeAccordionItem:pe,openAllAccordionItems:he,closeAllAccordionItems:ue,getActiveAccordionItems:ve,isAccordionItemOpen:me,getAccordionInstance:ge,destroyAccordion:we,destroyAllAccordions:be,DEWPSidebar:xe,createPopover:fe,openPopover:Ee,closePopover:Ie,togglePopover:Ae,initCarousel:Be,nextCarousel:Ne,prevCarousel:He,goToCarousel:ze,startCarouselAutoplay:Xe,stopCarouselAutoplay:We,setCarouselAutoplay:Ge,destroyCarousel:Ue,autoInitializeCarousels:Re,registerLightbox:Fe,openLightbox:je,closeLightbox:Ye,nextLightbox:Ke,prevLightbox:Je,autoInitializeLightbox:Qe,ready:b,version:Ze,info:{name:"DesignBase WordPress Library",description:"간단하고 강력한 프론트엔드 라이브러리",version:Ze,author:"DesignBase",license:"MIT"}};Object.keys(S).forEach(e=>{x[e]=S[e]});try{console.log(`[DEWP] v${Ze} loaded`)}catch{}b(()=>{try{R()}catch{}try{ee()}catch{}try{Re()}catch{}try{Qe()}catch{}});try{"loading"!==document.readyState&&(R(),ee(),Re(),Qe())}catch{}}return et}();
|
|
1
|
+
var DEWP=function(){"use strict";function e(e,t=document){return t.querySelector(e)}function t(e,t=document){return Array.from(t.querySelectorAll(e))}function s(e,t={}){const s=document.createElement(e);return Object.assign(s,t),s}function i(e,t){e.classList.add(t)}function n(e,t){e.classList.remove(t)}function o(e,t,s){return e.classList.toggle(t,s)}function r(e,t){return e.classList.contains(t)}function a(e,t){e.textContent=t}function d(e,t){e.innerHTML=t}function l(e,t,s,i){e.addEventListener(t,s,i)}function c(e,t,s,i){e.removeEventListener(t,s,i)}function p(e){e.remove()}function h(e,t){e.appendChild(t)}function u(e,t,s){e.insertBefore(t,s)}function v(e,t,s){e.style.setProperty(t,s)}function m(e,t,s){e.setAttribute(`data-${t}`,s)}function g(e,t){return e.getAttribute(`data-${t}`)}function w(){return"loading"!==document.readyState}function b(e){w()?e():l(document,"DOMContentLoaded",e,{once:!0})}function y(e,t=0){return new Promise(s=>{const i=new IntersectionObserver(([e])=>{i.disconnect(),s(e.isIntersecting)},{threshold:t});i.observe(e)})}function f(e,t="smooth"){e.scrollIntoView({behavior:t,block:"start"})}function E(e){return e.getBoundingClientRect()}function I(e,t){return t.contains(e)}function A(e){for(;e.firstChild;)e.removeChild(e.firstChild)}const x=new class{constructor(){this.container=null,this.init()}init(){this.createContainer()}createContainer(){const e=document.getElementById("dewp-toast-container");e&&e.remove(),this.container=document.createElement("div"),this.container.id="dewp-toast-container",this.container.className="dewp-toast-container dewp-toast-container-top-right",document.body.appendChild(this.container)}show(e,t="info",s=5e3,i="md"){this.container||this.createContainer();const n="dewp-toast-"+Date.now(),o=this.createToastElement(n,e,t,i);try{Array.from(this.container.querySelectorAll(".dewp-toast .dewp-toast-message")).some(t=>t.textContent===String(e))&&this.hideAll()}catch(e){}return this.container.appendChild(o),requestAnimationFrame(()=>{o.classList.add("show"),o.classList.add("toast-slide-in")}),s>0&&setTimeout(()=>{this.hide(n)},s),n}createToastElement(e,t,s,i="md"){const n=document.createElement("div");n.id=e,n.className=`dewp-toast dewp-toast-${s} dewp-toast-${i}`;const o=document.createElement("div");o.className="dewp-toast-content";const r=document.createElement("span");r.className="dewp-toast-icon",r.innerHTML=this.getTypeIcon(s);const a=document.createElement("div");a.className="dewp-toast-message",a.textContent=t;const d=document.createElement("button");return d.className="dewp-toast-close",d.type="button",d.innerHTML="<span>×</span>",d.setAttribute("aria-label","토스트 닫기"),d.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.hide(e)}),o.appendChild(r),o.appendChild(a),o.appendChild(d),n.appendChild(o),n}getTypeIcon(e){return{info:"ℹ️",success:"✅",warning:"⚠️",error:"❌"}[e]}hide(e){const t=document.getElementById(e);t&&(t.classList.remove("show","toast-slide-in"),t.classList.add("toast-slide-out"),setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t)},300))}hideAll(){if(this.container){this.container.querySelectorAll(".dewp-toast").forEach(e=>{const t=e.id;t&&this.hide(t)})}}success(e,t,s){return this.show(e,"success",t,s)}error(e,t,s){return this.show(e,"error",t,s)}warning(e,t,s){return this.show(e,"warning",t,s)}info(e,t,s){return this.show(e,"info",t,s)}},L=(e,t,s,i)=>x.show(e,t||"info",s,i),D=(e,t,s)=>x.success(e,t,s),k=(e,t,s)=>x.error(e,t,s),C=(e,t,s)=>x.warning(e,t,s),T=(e,t,s)=>x.info(e,t,s);const S=new class{constructor(){this.modals=new Map,this.activeModal=null,this.backdrop=null,this.zIndex=1050,this.init()}init(){this.createBackdrop(),this.bindEvents()}createBackdrop(){this.backdrop=document.createElement("div"),this.backdrop.className="dewp-modal-backdrop",document.body.appendChild(this.backdrop)}bindEvents(){document.addEventListener("keydown",e=>{"Escape"===e.key&&this.activeModal&&this.close(this.activeModal.id)}),this.backdrop&&this.backdrop.addEventListener("click",()=>{this.activeModal&&this.close(this.activeModal.id)})}create(e={}){const t="dewp-modal-"+Date.now(),s=this.createModalElement(t,e);return this.modals.set(t,s),document.body.appendChild(s),t}createModalElement(e,t){const s=document.createElement("div");s.id=e,s.className="dewp-modal";const i=t.size||"md";if(s.className=`dewp-modal ${{sm:"dewp-modal-sm",md:"dewp-modal-md",lg:"dewp-modal-lg",xl:"dewp-modal-xl",full:"dewp-modal-full"}[i]}`,t.title){const i=document.createElement("div");i.className="dewp-modal-header";const n=document.createElement("h3");if(n.textContent=t.title,i.appendChild(n),!1!==t.closable){const t=document.createElement("button");t.className="dewp-modal-close",t.innerHTML="×",t.addEventListener("click",()=>{this.close(e)}),i.appendChild(t)}s.appendChild(i)}if(t.content){const e=document.createElement("div");e.className="dewp-modal-body","string"==typeof t.content?e.innerHTML=t.content:e.appendChild(t.content),s.appendChild(e)}if(t.showCancel||t.confirmText){const i=document.createElement("div");if(i.className="dewp-modal-footer",t.showCancel){const s=document.createElement("button");s.className="dewp-modal-cancel",s.textContent=t.cancelText||"취소",s.addEventListener("click",()=>{t.onCancel&&t.onCancel(),this.close(e)}),i.appendChild(s)}if(t.confirmText){const s=document.createElement("button");s.className="dewp-modal-confirm",s.textContent=t.confirmText,s.addEventListener("click",()=>{t.onConfirm&&t.onConfirm(),this.close(e)}),i.appendChild(s)}s.appendChild(i)}return s}open(e){const t=this.modals.get(e);t&&(this.activeModal=t,this.showBackdrop(),t.style.opacity="1",t.style.visibility="visible",t.style.transform="translate(-50%, -50%) scale(1)",t.querySelector("button")&&t.querySelector("button").focus())}close(e){const t=this.modals.get(e);t&&(t.style.opacity="0",t.style.visibility="hidden",t.style.transform="translate(-50%, -50%) scale(0.9)",setTimeout(()=>{t.parentNode&&t.parentNode.removeChild(t),this.modals.delete(e),this.activeModal===t&&(this.activeModal=null,this.hideBackdrop())},300))}showBackdrop(){this.backdrop&&(this.backdrop.style.opacity="1",this.backdrop.style.visibility="visible")}hideBackdrop(){this.backdrop&&(this.backdrop.style.opacity="0",this.backdrop.style.visibility="hidden")}show(e={}){const t=this.create(e);return this.open(t),t}confirm(e){const t=this.create({title:e.title||"확인",content:e.message,confirmText:e.confirmText||"확인",cancelText:"취소",showCancel:!0,onConfirm:e.onConfirm,onCancel:e.onCancel});this.open(t)}alert(e,t){const s=this.create({title:t||"알림",content:e,confirmText:"확인"});this.open(s)}getModal(e){return this.modals.get(e)}isOpen(e){const t=this.modals.get(e);return!!t&&"visible"===t.style.visibility}closeAll(){this.modals.forEach((e,t)=>{this.close(t)})}},M=(e={})=>S.create(e),O=e=>{S.open(e)},_=e=>{S.close(e)},$=(e={})=>S.show(e),q=e=>{S.confirm(e)};const P=new class{constructor(){this.dropdowns=new Map,this.activeDropdown=null,this.zIndex=1e3,this.uidCounter=0,this.init()}init(){this.bindGlobalEvents()}generateId(){return`dewp-dropdown-${"undefined"!=typeof crypto&&"randomUUID"in crypto?crypto.randomUUID():`${Date.now()}-${++this.uidCounter}`}`}bindGlobalEvents(){document.addEventListener("click",e=>{if(!this.activeDropdown)return;const t=e.target,s=this.activeDropdown.trigger.contains(t),i=this.activeDropdown.element.contains(t);s||i||!1!==this.activeDropdown.options.autoClose&&this.hide(this.activeDropdown.id)}),document.addEventListener("keydown",e=>{"Escape"===e.key&&this.activeDropdown&&!1!==this.activeDropdown.options.autoClose&&this.hide(this.activeDropdown.id)});const e=()=>{this.activeDropdown&&this.positionDropdown(this.activeDropdown)};window.addEventListener("resize",e),window.addEventListener("scroll",e,!0)}create(e){const t="string"==typeof e.trigger?document.querySelector(e.trigger):e.trigger;if(!t)throw console.error("🔽 드롭다운 트리거 요소를 찾을 수 없음:",e.trigger),new Error("드롭다운 트리거 요소를 찾을 수 없습니다.");const s=this.findDropdownContainer(t);if(!s)throw console.error("🔽 드롭다운 컨테이너를 찾을 수 없음"),new Error("드롭다운 컨테이너(.dewp-dropdown)를 찾을 수 없습니다.");const i=s.dataset.dropdownId;if(i&&this.dropdowns.has(i))return i;const n=s.querySelector(".dewp-dropdown-menu");if(!n)throw console.error("🔽 기존 드롭다운 메뉴를 찾을 수 없음"),new Error("기존 드롭다운 메뉴(.dewp-dropdown-menu)를 찾을 수 없습니다.");const o=this.generateId(),r={id:o,element:n,options:e,trigger:t,container:s};this.dropdowns.set(o,r),s.dataset.dropdownId=o;const a=r.trigger,d=r.element;return a.id||(a.id=`${o}-trigger`),d.id||(d.id=`${o}-menu`),a.setAttribute("aria-haspopup","true"),a.setAttribute("aria-controls",d.id),a.setAttribute("aria-expanded","false"),d.setAttribute("role","menu"),d.setAttribute("aria-labelledby",a.id),this.bindDropdownItemEvents(d,o),this.bindTriggerEvents(r),this.updateTriggerText(r,e.placeholder||"선택하세요"),o}findDropdownContainer(e){let t=e.parentElement,s=0;for(;t&&s<10;){if(t.classList.contains("dewp-dropdown")){if(t.querySelector(".dewp-dropdown-menu"))return t}t=t.parentElement,s++}return null}bindDropdownItemEvents(e,t){e.querySelectorAll(".dewp-dropdown-item").forEach(e=>{e.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const s=e.currentTarget,i=s.getAttribute("data-value")||s.textContent||"",n=s.textContent||"";this.selectItem(t,i,n);const o=this.dropdowns.get(t);o&&!1!==o.options.autoClose&&this.hide(t)})})}selectItem(e,t,s){const i=this.dropdowns.get(e);i&&(i.selectedValue=t,i.selectedText=s,this.updateTriggerText(i,s),i.options.onSelect&&i.options.onSelect(t,s))}updateTriggerText(e,t){const s=e.trigger,i=s.querySelector(".dewp-dropdown-text");if(i)return void(i.textContent=t);const n=Array.from(s.childNodes).find(e=>{var t;return e.nodeType===Node.TEXT_NODE&&(null===(t=e.textContent)||void 0===t?void 0:t.trim())});if(n)n.textContent=t;else{const e=document.createTextNode(t);s.insertBefore(e,s.firstChild)}}bindTriggerEvents(e){const{trigger:t,id:s}=e,i=s;t.removeEventListener("click",t.__dewpHandler);const n=e=>{e.preventDefault(),e.stopPropagation(),this.activeDropdown&&this.activeDropdown.id===i?this.hide(i):(this.activeDropdown&&this.hide(this.activeDropdown.id),this.show(i))};t.__dewpHandler=n,t.addEventListener("click",n)}show(e){const t=this.dropdowns.get(e);t?(this.activeDropdown&&this.activeDropdown.id!==e&&this.hide(this.activeDropdown.id),this.activeDropdown=t,this.positionDropdown(t),t.element.classList.add("show"),t.trigger.setAttribute("aria-expanded","true"),t.options.onShow&&t.options.onShow()):console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}hide(e){const t=this.dropdowns.get(e);if(t){t.element.classList.remove("show"),t.trigger.setAttribute("aria-expanded","false");try{t.trigger.focus()}catch{}this.activeDropdown&&this.activeDropdown.id===e&&(this.activeDropdown=null),t.options.onHide&&t.options.onHide()}else console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}positionDropdown(e){var t;const{element:s,trigger:i,options:n}=e,o=n.position||"bottom",r=n.align||"start",a=null!==(t=n.offset)&&void 0!==t?t:8,d=i.getBoundingClientRect(),l=e.container.getBoundingClientRect(),c=s.getBoundingClientRect();let p=0,h=0;switch(o){case"bottom":p=d.bottom-l.top+a;break;case"top":p=d.top-l.top-c.height-a;break;case"left":h=d.left-l.left-c.width-a,p=d.top-l.top+d.height/2-c.height/2;break;case"right":h=d.right-l.left+a,p=d.top-l.top+d.height/2-c.height/2}switch(r){case"center":"top"!==o&&"bottom"!==o||(h=d.left-l.left+d.width/2-c.width/2);break;case"end":"top"!==o&&"bottom"!==o||(h=d.right-l.left-c.width);break;default:"top"!==o&&"bottom"!==o||(h=d.left-l.left)}s.style.top=`${p}px`,s.style.left=`${h}px`,s.style.zIndex=""+this.zIndex++}toggle(e){this.dropdowns.get(e)?this.activeDropdown&&this.activeDropdown.id===e?this.hide(e):this.show(e):console.error("🔽 드롭다운 인스턴스를 찾을 수 없음:",e)}getSelectedValue(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.selectedValue}getSelectedText(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.selectedText}setValue(e,t,s){this.dropdowns.get(e)&&this.selectItem(e,t,s)}getDropdown(e){var t;return null===(t=this.dropdowns.get(e))||void 0===t?void 0:t.element}isOpen(e){const t=this.dropdowns.get(e);return!!t&&t.element.classList.contains("show")}closeAll(){this.dropdowns.forEach((e,t)=>this.hide(t))}destroy(e){const t=this.dropdowns.get(e);if(!t)return;this.hide(e);const s=t.trigger;s.__dewpHandler&&(s.removeEventListener("click",s.__dewpHandler),delete s.__dewpHandler),delete t.container.dataset.dropdownId,this.dropdowns.delete(e)}autoInitialize(){document.querySelectorAll(".dewp-dropdown").forEach(e=>{var t;const s=e.dataset.dropdownId;if(s&&this.dropdowns.has(s))return;const i=e.querySelector(".dewp-dropdown-toggle"),n=e.querySelector(".dewp-dropdown-menu");if(i&&n)try{const s=this.create({trigger:i,content:"",position:"bottom",align:"start",autoClose:!0,placeholder:((null===(t=i.querySelector(".dewp-dropdown-text"))||void 0===t?void 0:t.textContent)||"선택하세요").trim(),onSelect:(t,s)=>{const i=e.querySelector(".dewp-dropdown-text");i&&(i.textContent=s),e.setAttribute("data-selected-value",t)}});n.setAttribute("data-dropdown-id",s)}catch(e){console.error("❌ 드롭다운 자동 초기화 실패:",e)}else console.warn("⚠️ 드롭다운 구조 불완전:",{container:e})})}},B=e=>P.create(e),N=e=>{P.show(e)},H=e=>{P.hide(e)},z=e=>{P.toggle(e)},X=()=>{P.closeAll()},W=e=>P.getSelectedValue(e),G=e=>P.getSelectedText(e),U=(e,t,s)=>{P.setValue(e,t,s)},R=()=>{P.autoInitialize()};const V=new class{constructor(){this.drawers=new Map,this.activeDrawer=null,this.overlay=null,this.initGlobalEvents()}create(e){const t="dewp-drawer-"+Date.now();let s=null;if(e.target&&(s="string"==typeof e.target?document.querySelector(e.target):e.target),!s)throw new Error("Drawer 대상 요소를 찾을 수 없습니다.");let i=null;!1!==e.overlay&&(i=this.createOverlay(),document.body.appendChild(i));const n={id:t,element:s,options:e,trigger:void 0,isOpen:!1,overlay:i||void 0};return this.drawers.set(t,n),this.bindDrawerEvents(n),t}createDrawerElement(e){const t=document.createElement("div");t.className="dewp-drawer",e.position&&t.classList.add(`dewp-drawer-${e.position}`),e.size&&t.classList.add(`dewp-drawer-${e.size}`),e.theme&&t.classList.add(`dewp-drawer-${e.theme}`);const s=this.getDrawerTitle(e);return t.innerHTML=`\n <div class="dewp-drawer-header">\n <h3 class="dewp-drawer-title">${s}</h3>\n <button class="dewp-drawer-close">\n <svg viewBox="0 0 24 24">\n <path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>\n </svg>\n </button>\n </div>\n <div class="dewp-drawer-content">\n ${e.content||"<p>Drawer 내용을 여기에 입력하세요.</p>"}\n </div>\n `,t}createOverlay(){const e=document.createElement("div");return e.className="dewp-drawer-overlay",e.addEventListener("click",()=>{this.closeAll()}),e}bindDrawerEvents(e){const{element:t,id:s}=e,i=t.querySelector(".dewp-drawer-close");if(i){const e=i;e.setAttribute("type","button"),e.setAttribute("aria-label","닫기"),e.setAttribute("title","닫기"),e.setAttribute("role","button"),e.addEventListener("click",()=>{this.close(s)}),e.addEventListener("keydown",e=>{const t=e;"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),this.close(s))})}!1!==e.options.closeOnEscape&&document.addEventListener("keydown",t=>{"Escape"===t.key&&e.isOpen&&this.close(s)})}bindTriggerEvents(e){const{trigger:t,id:s}=e;t&&t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),e.isOpen?this.close(s):this.open(s)})}open(e){const t=this.drawers.get(e);t&&!t.isOpen&&(this.closeAll(),t.options.onBeforeOpen&&t.options.onBeforeOpen(),t.element.classList.add("dewp-drawer-open"),t.isOpen=!0,this.activeDrawer=t,t.overlay&&t.overlay.classList.add("show"),document.body.style.overflow="hidden",t.options.onOpen&&t.options.onOpen())}close(e){const t=this.drawers.get(e);t&&t.isOpen&&(t.options.onBeforeClose&&t.options.onBeforeClose(),t.element.classList.remove("dewp-drawer-open"),t.isOpen=!1,this.activeDrawer=null,t.overlay&&t.overlay.classList.remove("show"),document.body.style.overflow="",t.options.onClose&&t.options.onClose())}closeAll(){this.drawers.forEach(e=>{e.isOpen&&this.close(e.id)})}toggle(e){const t=this.drawers.get(e);t&&(t.isOpen?this.close(e):this.open(e))}destroy(e){const t=this.drawers.get(e);t&&(this.close(e),t.element.parentNode&&t.element.parentNode.removeChild(t.element),this.drawers.delete(e))}getInstance(e){return this.drawers.get(e)}isOpen(e){const t=this.drawers.get(e);return!!t&&t.isOpen}initGlobalEvents(){window.addEventListener("resize",()=>{this.activeDrawer&&this.adjustDrawerPosition(this.activeDrawer)}),window.addEventListener("scroll",()=>{this.activeDrawer&&this.adjustDrawerPosition(this.activeDrawer)},!0)}adjustDrawerPosition(e){}getDrawerTitle(e){return"right"===e.position?"정보 패널":"dark"===e.theme?"다크 테마":"sm"===e.size?"작은 Drawer":"lg"===e.size?"큰 Drawer":"xl"===e.size?"매우 큰 Drawer":"네비게이션"}autoInitialize(){document.querySelectorAll(".dewp-drawer").forEach((e,t)=>{if(!e.getAttribute("data-drawer-id"))try{const t=this.create({target:e,position:this.detectPosition(e),size:this.detectSize(e),theme:this.detectTheme(e),overlay:!0,closeOnEscape:!0,closeOnOverlayClick:!0});e.setAttribute("data-drawer-id",t)}catch(e){console.error("❌ Drawer 자동 초기화 실패:",e)}})}detectPosition(e){return e.classList.contains("dewp-drawer-right")?"right":e.classList.contains("dewp-drawer-top")?"top":e.classList.contains("dewp-drawer-bottom")?"bottom":"left"}detectSize(e){return e.classList.contains("dewp-drawer-sm")?"sm":e.classList.contains("dewp-drawer-lg")?"lg":e.classList.contains("dewp-drawer-xl")?"xl":"md"}detectTheme(e){return e.classList.contains("dewp-drawer-dark")?"dark":e.classList.contains("dewp-drawer-primary")?"primary":"default"}},F=e=>V.create(e),j=e=>{V.open(e)},Y=e=>{V.close(e)},K=e=>{V.toggle(e)},J=()=>{V.closeAll()},Q=e=>{V.destroy(e)},Z=e=>V.isOpen(e),ee=()=>{V.autoInitialize()};const te=new class{constructor(){this.tabInstances=new Map,this.autoInit()}autoInit(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>this.autoInitTabs()):this.autoInitTabs()}autoInitTabs(){document.querySelectorAll("[data-tabs]").forEach(e=>{e.getAttribute("data-tabs")||e.id||Date.now(),this.initTabs(e,{container:e})})}initTabs(e,t){const s=e.id||"tabs-"+Date.now();this.tabInstances.has(s)&&this.destroy(s);const i=e.querySelector(".dewp-tabs");i&&i.setAttribute("role","tablist");const n=this.findTabElements(e),o=this.findPanelElements(e);if(0===n.size||0===o.size)throw new Error("탭 또는 패널 요소를 찾을 수 없습니다.");const r={id:s,container:e,options:t,tabs:n,panels:o,activeTabId:null};this.tabInstances.set(s,r),n.forEach((e,t)=>{const i=`${s}-tab-${t}`,n=o.get(t);if(n){const o=`${s}-panel-${t}`;e.setAttribute("id",i),e.setAttribute("role","tab"),e.setAttribute("aria-controls",o),e.setAttribute("tabindex","-1"),n.setAttribute("id",o),n.setAttribute("role","tabpanel"),n.setAttribute("aria-labelledby",i),n.setAttribute("tabindex","0")}}),this.bindTabEvents(r);const a=t.activeTab||Array.from(n.keys())[0];return this.activateTab(s,a),s}findTabElements(e){const t=new Map;if(e.querySelectorAll("[data-tab]").forEach(e=>{const s=e.getAttribute("data-tab");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-tab-btn").forEach((e,s)=>{const i=e.getAttribute("data-tab")||`tab-${s}`;t.set(i,e)})}return t}findPanelElements(e){const t=new Map;if(e.querySelectorAll("[data-panel]").forEach(e=>{const s=e.getAttribute("data-panel");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-tab-panel").forEach((e,s)=>{const i=e.getAttribute("data-panel")||`panel-${s}`;t.set(i,e)})}return t}bindTabEvents(e){const{tabs:t,container:s}=e;t.forEach((s,i)=>{s.addEventListener("click",t=>{t.preventDefault(),this.activateTab(e.id,i)}),s.addEventListener("keydown",s=>{["Enter"," "].includes(s.key)&&(s.preventDefault(),this.activateTab(e.id,i));const n=Array.from(t.keys()),o=n.indexOf(i);if("ArrowRight"===s.key){const e=n[(o+1)%n.length],s=t.get(e);null==s||s.focus()}else if("ArrowLeft"===s.key){const e=n[(o-1+n.length)%n.length],s=t.get(e);null==s||s.focus()}})})}activateTab(e,t){const s=this.tabInstances.get(e);if(!s)return;const{tabs:i,panels:n,activeTabId:o,options:r}=s,a=i.get(t),d=n.get(t);if(!a||!d)return;if(o){const e=i.get(o),t=n.get(o);e&&(e.classList.remove("active"),e.setAttribute("aria-selected","false"),e.setAttribute("tabindex","-1")),t&&(t.classList.remove("active"),t.setAttribute("aria-hidden","true"))}a.classList.add("active"),a.setAttribute("aria-selected","true"),a.setAttribute("tabindex","0"),a.focus(),d.classList.add("active"),d.setAttribute("aria-hidden","false");const l=s.activeTabId;s.activeTabId=t,r.onTabChange&&r.onTabChange(t,l||void 0),!1!==r.animation&&this.animateTabChange(d)}animateTabChange(e){e.style.opacity="0",e.style.transform="translateY(10px)",requestAnimationFrame(()=>{e.style.transition="all 0.3s ease",e.style.opacity="1",e.style.transform="translateY(0)"})}getActiveTab(e){const t=this.tabInstances.get(e);return t?t.activeTabId:null}getTabInstance(e){return this.tabInstances.get(e)}destroy(e){const t=this.tabInstances.get(e);t&&(t.tabs.forEach(e=>{e.replaceWith(e.cloneNode(!0))}),this.tabInstances.delete(e))}destroyAll(){this.tabInstances.forEach((e,t)=>{this.destroy(t)})}},se=(e,t)=>te.initTabs(e,t||{container:e}),ie=(e,t)=>{te.activateTab(e,t)},ne=e=>te.getActiveTab(e),oe=e=>te.getTabInstance(e),re=e=>{te.destroy(e)};const ae=new class{constructor(){this.accordionInstances=new Map,this.autoInit()}autoInit(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{setTimeout(()=>this.autoInitAccordions(),100)}):setTimeout(()=>this.autoInitAccordions(),100)}autoInitAccordions(){document.querySelectorAll("[data-accordion]").forEach(e=>{try{e.getAttribute("data-accordion")||e.id||Date.now();this.initAccordion(e,{})}catch(e){}})}initAccordion(e,t){const s=e.getAttribute("data-accordion")||e.id||"accordion-"+Date.now();if(e.hasAttribute("data-accordion-initialized"))return s;this.accordionInstances.has(s)&&this.destroy(s);const i=this.findAccordionItems(e),n=this.findAccordionHeaders(e),o=this.findAccordionContents(e);if(0===i.size)throw new Error("아코디언 아이템을 찾을 수 없습니다.");const r={id:s,container:e,options:{...this.getDefaultOptions(),...t},items:i,headers:n,contents:o,activeItems:new Set};return this.accordionInstances.set(s,r),this.bindAccordionEvents(r),i.forEach((e,t)=>{const s=n.get(t),i=o.get(t);s&&i&&(e.classList.remove("active"),s.classList.remove("active"),s.setAttribute("aria-expanded","false"),i.style.display="none",i.style.height="",i.style.opacity="",i.style.transform="",i.style.transition="",i.style.overflow="")}),t.activeItem&&i.has(t.activeItem)&&this.toggleItem(s,t.activeItem,!0),e.setAttribute("data-accordion-initialized","true"),s}getDefaultOptions(){return{animation:!0,multiple:!1,autoClose:!0}}findAccordionItems(e){const t=new Map;if(e.querySelectorAll("[data-accordion-item]").forEach(e=>{const s=e.getAttribute("data-accordion-item");s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-item").forEach((e,s)=>{const i=e.id||`accordion-item-${s}`;t.set(i,e)})}return t}findAccordionHeaders(e){const t=new Map;if(e.querySelectorAll("[data-accordion-header]").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-header").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)})}return t}findAccordionContents(e){const t=new Map;if(e.querySelectorAll("[data-accordion-content]").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)}),0===t.size){e.querySelectorAll(".dewp-accordion-content").forEach(e=>{const s=this.findParentItemId(e);s&&t.set(s,e)})}return t}findParentItemId(e){let t=e.parentElement;for(;t;){if(t.hasAttribute("data-accordion-item")||t.classList.contains("dewp-accordion-item"))return t.getAttribute("data-accordion-item")||t.id||null;t=t.parentElement}return null}bindAccordionEvents(e){const{headers:t,container:s}=e;t.forEach((t,s)=>{t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),this.toggleItem(e.id,s)}),t.addEventListener("keydown",t=>{"Enter"!==t.key&&" "!==t.key||(t.preventDefault(),t.stopPropagation(),this.toggleItem(e.id,s))}),t.setAttribute("tabindex","0"),t.setAttribute("role","button"),t.setAttribute("aria-expanded","false"),t.setAttribute("aria-controls",`accordion-content-${s}`)}),e.contents.forEach((e,t)=>{e.setAttribute("id",`accordion-content-${t}`),e.setAttribute("role","region"),e.setAttribute("aria-labelledby",`accordion-header-${t}`)})}toggleItem(e,t,s){const i=this.accordionInstances.get(e);if(!i)return;const{items:n,headers:o,contents:r,options:a}=i,d=n.get(t),l=o.get(t),c=r.get(t);if(!d||!l||!c)return;const p=i.activeItems.has(t),h=void 0!==s?s:!p;h?this.openItemInternal(i,t,d,l,c):this.closeItemInternal(i,t,d,l,c),a.onItemToggle&&a.onItemToggle(t,h)}openItemInternal(e,t,s,i,n){const{options:o,activeItems:r}=e;!o.multiple&&o.autoClose&&r.forEach(s=>{s!==t&&this.closeItemInternal(e,s,e.items.get(s),e.headers.get(s),e.contents.get(s))}),r.add(t),s.classList.add("active"),i.classList.add("active"),i.setAttribute("aria-expanded","true"),o.animation?this.animateContent(n,!0):n.style.display="block"}closeItemInternal(e,t,s,i,n){const{options:o,activeItems:r}=e;r.delete(t),s.classList.remove("active"),i.classList.remove("active"),i.setAttribute("aria-expanded","false"),o.animation?this.animateContent(n,!1):n.style.display="none"}animateContent(e,t){t?(e.style.display="block",e.style.overflow="hidden",e.style.height="0px",e.style.opacity="0",e.style.transform="translateY(-10px)",e.offsetHeight,e.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",e.style.height=e.scrollHeight+"px",e.style.opacity="1",e.style.transform="translateY(0)",setTimeout(()=>{e.style.height="",e.style.overflow="",e.style.transition="",e.style.opacity="",e.style.transform=""},400)):(e.style.overflow="hidden",e.style.height=e.scrollHeight+"px",e.style.opacity="1",e.style.transform="translateY(0)",e.offsetHeight,e.style.transition="all 0.4s cubic-bezier(0.4, 0, 0.2, 1)",e.style.height="0px",e.style.opacity="0",e.style.transform="translateY(-10px)",setTimeout(()=>{e.style.display="none",e.style.height="",e.style.overflow="",e.style.transition="",e.style.opacity="",e.style.transform=""},400))}openItem(e,t){this.toggleItem(e,t,!0)}closeItem(e,t){this.toggleItem(e,t,!1)}openAllItems(e){const t=this.accordionInstances.get(e);t&&t.items.forEach((t,s)=>{this.openItem(e,s)})}closeAllItems(e){const t=this.accordionInstances.get(e);t&&t.items.forEach((t,s)=>{this.closeItem(e,s)})}getActiveItems(e){const t=this.accordionInstances.get(e);return t?Array.from(t.activeItems):[]}isItemOpen(e,t){const s=this.accordionInstances.get(e);return!!s&&s.activeItems.has(t)}getAccordionInstance(e){return this.accordionInstances.get(e)||null}destroy(e){const t=this.accordionInstances.get(e);t&&(t.headers.forEach(e=>{e.removeEventListener("click",()=>{}),e.removeEventListener("keydown",()=>{})}),this.accordionInstances.delete(e))}destroyAll(){this.accordionInstances.forEach((e,t)=>{this.destroy(t)})}},de=(e,t)=>ae.initAccordion(e,t),le=(e,t,s)=>{ae.toggleItem(e,t,s)},ce=(e,t)=>{ae.openItem(e,t)},pe=(e,t)=>{ae.closeItem(e,t)},he=e=>{ae.openAllItems(e)},ue=e=>{ae.closeAllItems(e)},ve=e=>ae.getActiveItems(e),me=(e,t)=>ae.isItemOpen(e,t),ge=e=>ae.getAccordionInstance(e),we=e=>{ae.destroy(e)},be=()=>{ae.destroyAll()};const ye=new class{constructor(){this.popovers=new Map,this.triggerIndex=new WeakMap,this.active=null,this.uid=0,this.docHandlersBound=!1,this.bindDocumentHandlers()}genId(){var e,t;const s=(++this.uid).toString(36);try{return`dewp-popover-${null!==(t=null===(e=crypto.randomUUID)||void 0===e?void 0:e.call(crypto))&&void 0!==t?t:`${Date.now().toString(36)}-${s}`}`}catch{return`dewp-popover-${Date.now().toString(36)}-${s}`}}create(e){const t=this.genId(),s="string"==typeof e.trigger?document.querySelector(e.trigger):e.trigger;if(!s)throw new Error("Popover trigger not found");let i;"string"==typeof e.content?(i=document.createElement("div"),i.className="dewp-popover-content dewp-popover-bottom",i.innerHTML=e.content):(i=e.content,i.classList.add("dewp-popover-content")),s.id||(s.id=`${t}-trigger`),i.id||(i.id=`${t}-content`),s.setAttribute("aria-haspopup","dialog"),s.setAttribute("aria-controls",i.id),s.setAttribute("aria-expanded","false"),i.setAttribute("role","dialog"),i.setAttribute("aria-labelledby",s.id);const n=s.closest(".dewp-popover")||s.parentElement;!i.parentElement&&n&&n.appendChild(i);const o=e.placement||"bottom";i.classList.remove("dewp-popover-top","dewp-popover-bottom","dewp-popover-left","dewp-popover-right"),i.classList.add(`dewp-popover-${o}`);const r={id:t,trigger:s,popover:i,options:{placement:o,closeOnEscape:!1!==e.closeOnEscape},isOpen:!1};return this.popovers.set(t,r),this.triggerIndex.set(s,t),s.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation(),this.toggle(t)}),t}bindDocumentHandlers(){this.docHandlersBound||(document.addEventListener("click",e=>{const t=e.target,s=this.active;s&&(s.trigger.contains(t)||s.popover.contains(t)||this.close(s.id))}),document.addEventListener("keydown",e=>{if("Escape"!==e.key)return;const t=this.active;t&&t.options.closeOnEscape&&this.close(t.id)}),this.docHandlersBound=!0)}open(e){var t;const s=this.popovers.get(e);s&&(this.active&&this.active.id!==e&&this.close(this.active.id),null===(t=s.popover.parentElement)||void 0===t||t.classList.add("is-open"),s.popover.classList.add("is-open"),s.trigger.setAttribute("aria-expanded","true"),s.isOpen=!0,this.active=s)}close(e){var t;const s=this.popovers.get(e);if(s){null===(t=s.popover.parentElement)||void 0===t||t.classList.remove("is-open"),s.popover.classList.remove("is-open"),s.trigger.setAttribute("aria-expanded","false"),s.isOpen=!1,this.active&&this.active.id===e&&(this.active=null);try{s.trigger.focus()}catch{}}}toggle(e){const t=this.popovers.get(e);t&&(t.isOpen?this.close(e):this.open(e))}toggleByTrigger(e){const t=this.triggerIndex.get(e);t&&this.toggle(t)}destroy(e){const t=this.popovers.get(e);t&&(this.close(e),this.triggerIndex.delete(t.trigger),this.popovers.delete(e))}},fe=e=>ye.create(e),Ee=e=>ye.open(e),Ie=e=>ye.close(e),Ae=e=>ye.toggle(e);class xe{constructor(e){this.sidebar=null,this.activeItemId=null,this.isCollapsed=!1,this.config=e,this.init()}init(){this.createSidebar(),this.render(),this.bindEvents(),this.setActiveItem()}createSidebar(){const e=document.querySelector(".dewp-sidebar");e&&e.remove(),this.sidebar=document.createElement("div"),this.sidebar.className="dewp-sidebar dewp-sidebar--wrapper is-sticky",this.sidebar.id="dewp-sidebar",document.body.appendChild(this.sidebar)}render(){this.sidebar&&(this.sidebar.innerHTML=`\n <div class="dewp-sidebar-inner">\n ${this.renderHeader()}\n ${this.renderGroups()}\n ${this.renderFooter()}\n </div>\n `)}renderHeader(){const e=this.config.subtitle?`<p class="dewp-sidebar-subtitle">${this.config.subtitle}</p>`:"";return`\n <div class="dewp-sidebar-header">\n <h1 class="dewp-sidebar-title">${this.config.title}</h1>\n ${e}\n </div>\n `}renderGroups(){return this.config.groups.map(e=>`\n <div class="dewp-sidebar-group" data-group-id="${e.id}">\n ${e.title?`<h2 class="dewp-sidebar-group-title">${e.title}</h2>`:""}\n <ul class="dewp-sidebar-menu">\n ${this.renderMenuItems(e.items)}\n </ul>\n </div>\n `).join("")}renderMenuItems(e){return e.map(e=>{const t=e.icon?`<span class="dewp-sidebar-menu-icon">${e.icon}</span>`:"",s=e.hasSubmenu?'\n <span class="dewp-sidebar-menu-arrow">\n <svg viewBox="0 0 24 24">\n <path d="M8.59 16.59L13.17 12 8.59 7.41 10 6l6 6-6 6-1.41-1.41z"/>\n </svg>\n </span>\n ':"",i=e.hasSubmenu&&e.submenu?`\n <ul class="dewp-sidebar-submenu" id="submenu-${e.id}" aria-hidden="true">\n ${this.renderMenuItems(e.submenu)}\n </ul>\n `:"";return`\n <li class="dewp-sidebar-menu-item ${e.isActive?"is-active":""} ${e.hasSubmenu?"has-submenu":""}" data-item-id="${e.id}">\n <a href="${e.url||"#"}" class="dewp-sidebar-menu-link" ${e.url?"":'onclick="return false;"'} ${e.hasSubmenu?'role="button" aria-expanded="false" aria-controls="submenu-'+e.id+'"':""}>\n ${t}\n <span class="dewp-sidebar-menu-text">${e.text}</span>\n ${s}\n </a>\n ${i}\n </li>\n `}).join("")}renderFooter(){return this.config.footerText?`\n <div class="dewp-sidebar-footer">\n <p class="dewp-sidebar-footer-text">${this.config.footerText}</p>\n </div>\n `:""}bindEvents(){this.sidebar&&(this.sidebar.addEventListener("click",e=>{const t=e.target.closest(".dewp-sidebar-menu-item");if(!t)return;const s=t.getAttribute("data-item-id");s&&(t.classList.contains("has-submenu")?(e.preventDefault(),this.toggleSubmenu(t)):this.setActiveItem(s))}),document.addEventListener("keydown",e=>{"Escape"===e.key&&window.innerWidth<=768&&this.closeMobileSidebar()}))}toggleSubmenu(e){var t;const s=e.querySelector(".dewp-sidebar-submenu");if(!s)return;const i=s.classList.contains("expanded"),n=null===(t=e.parentElement)||void 0===t?void 0:t.querySelectorAll(".dewp-sidebar-menu-item.has-submenu");if(null==n||n.forEach(t=>{if(t!==e){const e=t.querySelector(".dewp-sidebar-submenu"),s=t.querySelector(".dewp-sidebar-menu-link");e&&e.classList.contains("expanded")&&(e.classList.remove("expanded"),e.style.maxHeight="0",null==s||s.setAttribute("aria-expanded","false"),e.setAttribute("aria-hidden","true")),t.classList.remove("is-open")}}),i){s.classList.remove("expanded"),s.style.maxHeight="0";const t=e.querySelector(".dewp-sidebar-menu-link");null==t||t.setAttribute("aria-expanded","false"),s.setAttribute("aria-hidden","true"),e.classList.remove("is-open")}else{s.classList.add("expanded"),s.style.maxHeight=s.scrollHeight+"px";const t=e.querySelector(".dewp-sidebar-menu-link");null==t||t.setAttribute("aria-expanded","true"),s.setAttribute("aria-hidden","false"),e.classList.add("is-open")}}setActiveItem(e){var t,s;e&&(this.activeItemId=e);const i=null===(t=this.sidebar)||void 0===t?void 0:t.querySelectorAll(".dewp-sidebar-menu-item.is-active");if(null==i||i.forEach(e=>e.classList.remove("is-active")),this.activeItemId){const e=null===(s=this.sidebar)||void 0===s?void 0:s.querySelector(`[data-item-id="${this.activeItemId}"]`);null==e||e.classList.add("is-active")}}addDivider(e,t="after"){var s;const i=null===(s=this.sidebar)||void 0===s?void 0:s.querySelector(`[data-group-id="${e}"]`);if(!i)return;const n=document.createElement("div");n.className="dewp-sidebar-divider","before"===t?i.insertBefore(n,i.firstChild):i.appendChild(n)}addGroup(e){this.config.groups.push(e),this.render(),this.bindEvents()}addMenuItem(e,t){const s=this.config.groups.find(t=>t.id===e);s&&(s.items.push(t),this.render(),this.bindEvents())}removeMenuItem(e,t){const s=this.config.groups.find(t=>t.id===e);s&&(s.items=s.items.filter(e=>e.id!==t),this.render(),this.bindEvents())}toggle(){this.sidebar&&window.innerWidth<=768&&this.sidebar.classList.toggle("is-open")}toggleCollapse(){this.sidebar&&(this.isCollapsed=!this.isCollapsed,this.sidebar.classList.toggle("is-collapsed",this.isCollapsed))}collapse(){this.sidebar&&(this.isCollapsed=!0,this.sidebar.classList.add("is-collapsed"))}expand(){this.sidebar&&(this.isCollapsed=!1,this.sidebar.classList.remove("is-collapsed"))}openMobileSidebar(){this.sidebar&&this.sidebar.classList.add("is-open")}closeMobileSidebar(){this.sidebar&&this.sidebar.classList.remove("is-open")}destroy(){this.sidebar&&(this.sidebar.remove(),this.sidebar=null)}updateConfig(e){this.config={...this.config,...e},this.render(),this.bindEvents()}getActiveItemId(){return this.activeItemId}getElement(){return this.sidebar}}window.DEWPSidebar=xe;class Le{constructor(e,t={}){var s,i,n;this.input=e.querySelector(".dewp-stepper-input"),this.decrementBtn=e.querySelector(".dewp-stepper-decrement"),this.incrementBtn=e.querySelector(".dewp-stepper-increment"),this.options={min:null!==(s=t.min)&&void 0!==s?s:Number.MIN_SAFE_INTEGER,max:null!==(i=t.max)&&void 0!==i?i:Number.MAX_SAFE_INTEGER,step:null!==(n=t.step)&&void 0!==n?n:1},"number"==typeof t.value&&(this.input.value=String(t.value)),this.bindEvents(t.onChange),this.syncDisabled()}bindEvents(e){const t=()=>this.clamp(parseFloat(this.input.value||"0")),s=t=>{e&&e(t)};this.decrementBtn.addEventListener("click",()=>{const e=this.clamp(t()-this.options.step);this.input.value=String(e),this.syncDisabled(),s(e)}),this.incrementBtn.addEventListener("click",()=>{const e=this.clamp(t()+this.options.step);this.input.value=String(e),this.syncDisabled(),s(e)}),this.input.addEventListener("input",()=>{const e=t();this.input.value=String(e),this.syncDisabled(),s(e)})}clamp(e){return Math.min(this.options.max,Math.max(this.options.min,isNaN(e)?0:e))}syncDisabled(){const e=parseFloat(this.input.value||"0");this.decrementBtn.disabled=e<=this.options.min,this.incrementBtn.disabled=e>=this.options.max}}const De=!0,ke=!1,Ce=5e3,Te=!0,Se=!0,Me=!0,Oe=!0,_e=0,$e=(e,t)=>void 0===e||""===e?t:"false"!==e,qe=(e,t)=>{if(void 0===e||""===e)return t;const s=Number(e);return Number.isFinite(s)?s:t};const Pe=new class{constructor(){this.instances=new Map,this.elementIndex=new WeakMap}init(e,t={}){const s=this.resolveElement(e);if(!s)throw new Error("[DEWP Carousel] 대상 요소를 찾을 수 없습니다.");const i=this.elementIndex.get(s);if(i)return i;const n=this.resolveOptions(s,t),o=this.ensureViewport(s),r=this.ensureTrack(o),a=Array.from(r.querySelectorAll(".dewp-carousel__slide"));if(!a.length)throw new Error("[DEWP Carousel] .dewp-carousel__slide 요소가 최소 1개 필요합니다.");const d=this.ensureNavButton(s,"prev"),l=this.ensureNavButton(s,"next");let c,p=[];n.indicators&&a.length>1&&(c=this.ensureIndicators(s),p=this.createDots(c,a.length));const h=s.dataset.carouselId||`dewp-carousel-${(()=>{try{return crypto.randomUUID()}catch{return`dewp-carousel-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}})()}`;s.dataset.carouselId=h;const u={id:h,element:s,viewport:o,track:r,slides:a,navPrev:d,navNext:l,indicatorsWrapper:c,dots:p,options:n,currentIndex:Math.min(Math.max(n.initialIndex,0),a.length-1),autoplayTimer:void 0,isPointerDown:!1,pointerStartX:0,pointerDeltaX:0,handlers:{dotClicks:[],imageLoadHandlers:[]}};return this.instances.set(h,u),this.elementIndex.set(s,h),this.bindEvents(u),this.moveTo(u,u.currentIndex,!1),this.setupAutoplay(u),this.bindDynamicHeight(u),s.classList.toggle("dewp-carousel--single",1===a.length),h}next(e){const t=this.getInstance(e);if(!t)return;const s=t.currentIndex+1;if(s>=t.slides.length){if(!t.options.loop)return;this.moveTo(t,0)}else this.moveTo(t,s)}prev(e){const t=this.getInstance(e);if(!t)return;const s=t.currentIndex-1;if(s<0){if(!t.options.loop)return;this.moveTo(t,t.slides.length-1)}else this.moveTo(t,s)}goTo(e,t){const s=this.getInstance(e);s&&this.moveTo(s,t)}destroy(e){const t=this.getInstance(e);if(!t)return;t.autoplayTimer&&window.clearInterval(t.autoplayTimer);const{handlers:s}=t;s.prev&&t.navPrev.removeEventListener("click",s.prev),s.next&&t.navNext.removeEventListener("click",s.next),s.hoverEnter&&t.element.removeEventListener("mouseenter",s.hoverEnter),s.hoverLeave&&t.element.removeEventListener("mouseleave",s.hoverLeave),s.keydown&&t.element.removeEventListener("keydown",s.keydown),s.pointerDown&&t.track.removeEventListener("pointerdown",s.pointerDown),s.pointerMove&&t.track.removeEventListener("pointermove",s.pointerMove),s.pointerUp&&(t.track.removeEventListener("pointerup",s.pointerUp),t.track.removeEventListener("pointercancel",s.pointerUp),t.track.removeEventListener("pointerleave",s.pointerUp)),s.resize&&window.removeEventListener("resize",s.resize),s.imageLoadHandlers.forEach(({element:e,handler:t})=>{e.removeEventListener("load",t)}),s.imageLoadHandlers.length=0,s.dotClicks.forEach((e,s)=>{const i=t.dots[s];i&&i.removeEventListener("click",e)}),s.dotClicks=[],t.viewport.style.removeProperty("height"),this.instances.delete(t.id),this.elementIndex.delete(t.element)}autoInitialize(){document.querySelectorAll("[data-dewp-carousel]").forEach(e=>{try{this.init(e)}catch(e){console.warn("[DEWP Carousel] 초기화 실패:",e)}})}getInstance(e){if("string"==typeof e)return this.instances.get(e);const t=this.elementIndex.get(e);return t?this.instances.get(t):void 0}resolveElement(e){return"string"==typeof e?document.querySelector(e):e}resolveOptions(e,t){var s,i,n,o,r,a,d,l;const c=e.dataset;return{loop:null!==(s=t.loop)&&void 0!==s?s:$e(c.carouselLoop,De),autoplay:null!==(i=t.autoplay)&&void 0!==i?i:$e(c.carouselAutoplay,ke),interval:null!==(n=t.interval)&&void 0!==n?n:qe(c.carouselInterval,Ce),pauseOnHover:null!==(o=t.pauseOnHover)&&void 0!==o?o:$e(c.carouselPauseOnHover,Te),keyboard:null!==(r=t.keyboard)&&void 0!==r?r:$e(c.carouselKeyboard,Se),swipe:null!==(a=t.swipe)&&void 0!==a?a:$e(c.carouselSwipe,Me),indicators:null!==(d=t.indicators)&&void 0!==d?d:$e(c.carouselIndicators,Oe),initialIndex:null!==(l=t.initialIndex)&&void 0!==l?l:qe(c.carouselInitialIndex,_e)}}ensureViewport(e){let t=e.querySelector(".dewp-carousel__viewport");if(!t){for(t=document.createElement("div"),t.className="dewp-carousel__viewport";e.firstChild;){const s=e.firstChild;if(s instanceof HTMLElement&&s.classList.contains("dewp-carousel__nav"))break;t.appendChild(s)}e.prepend(t)}return t}ensureTrack(e){let t=e.querySelector(".dewp-carousel__track");if(!t){const s=document.createElement("div");s.className="dewp-carousel__track";Array.from(e.children).filter(e=>e instanceof HTMLElement&&e.classList.contains("dewp-carousel__slide")).forEach(e=>s.appendChild(e)),e.appendChild(s),t=s}return t}ensureNavButton(e,t){let s=e.querySelector(`.dewp-carousel__nav--${t}`);if(!s){s=document.createElement("button"),s.type="button",s.className=`dewp-carousel__nav dewp-carousel__nav--${t}`,s.setAttribute("aria-label","prev"===t?"이전 슬라이드":"다음 슬라이드");const i=document.createElement("i");i.className="prev"===t?"icon-chevron-left":"icon-chevron-right",s.appendChild(i),e.appendChild(s)}return s}ensureIndicators(e){let t=e.querySelector(".dewp-carousel__indicators");return t?t.innerHTML="":(t=document.createElement("div"),t.className="dewp-carousel__indicators",e.appendChild(t)),t}createDots(e,t){const s=[];for(let i=0;i<t;i+=1){const t=document.createElement("button");t.type="button",t.className="dewp-carousel__dot",t.setAttribute("aria-label",`${i+1}번째 슬라이드로 이동`),e.appendChild(t),s.push(t)}return s}bindEvents(e){e.handlers.dotClicks=[];const t=()=>this.prev(e.id),s=()=>this.next(e.id);if(e.navPrev.addEventListener("click",t),e.navNext.addEventListener("click",s),e.handlers.prev=t,e.handlers.next=s,e.options.pauseOnHover&&e.options.autoplay){const t=()=>this.pauseAutoplay(e),s=()=>this.resumeAutoplay(e);e.element.addEventListener("mouseenter",t),e.element.addEventListener("mouseleave",s),e.handlers.hoverEnter=t,e.handlers.hoverLeave=s}if(e.options.keyboard){const t=t=>{"ArrowLeft"===t.key?(t.preventDefault(),this.prev(e.id)):"ArrowRight"===t.key&&(t.preventDefault(),this.next(e.id))};e.element.setAttribute("tabindex","0"),e.element.addEventListener("keydown",t),e.handlers.keydown=t}if(e.options.swipe){const t=t=>this.onPointerDown(t,e),s=t=>this.onPointerMove(t,e),i=t=>this.onPointerUp(t,e);e.track.addEventListener("pointerdown",t),e.track.addEventListener("pointermove",s),e.track.addEventListener("pointerup",i),e.track.addEventListener("pointercancel",i),e.track.addEventListener("pointerleave",i),e.handlers.pointerDown=t,e.handlers.pointerMove=s,e.handlers.pointerUp=i}e.dots.forEach((t,s)=>{const i=t=>this.goTo(e.id,s);t.addEventListener("click",i),e.handlers.dotClicks.push(i)})}bindDynamicHeight(e){const t=()=>this.updateHeight(e),s=()=>t();window.addEventListener("resize",s),e.handlers.resize=s,e.slides.forEach(s=>{s.querySelectorAll("img").forEach(s=>{const i=()=>t();s.complete?t():(s.addEventListener("load",i,{once:!0}),e.handlers.imageLoadHandlers.push({element:s,handler:i}))})}),t()}setupAutoplay(e){!e.options.autoplay||e.slides.length<=1||(e.autoplayTimer&&window.clearInterval(e.autoplayTimer),e.autoplayTimer=window.setInterval(()=>{this.next(e.id)},Math.max(e.options.interval,1500)))}pauseAutoplay(e){e.autoplayTimer&&(window.clearInterval(e.autoplayTimer),e.autoplayTimer=void 0)}resumeAutoplay(e){e.options.autoplay&&this.setupAutoplay(e)}startAutoplay(e,t){const s=this.getInstance(e);s&&("number"==typeof t&&t>0&&(s.options.interval=t),s.options.autoplay=!0,this.setupAutoplay(s))}stopAutoplay(e){const t=this.getInstance(e);t&&(t.options.autoplay=!1,this.pauseAutoplay(t))}setAutoplay(e,t,s){t?this.startAutoplay(e,s):this.stopAutoplay(e)}onPointerDown(e,t){"mouse"===e.pointerType&&0!==e.button||(t.isPointerDown=!0,t.pointerStartX=e.clientX,t.pointerDeltaX=0,t.track.classList.add("is-dragging"),t.track.setPointerCapture(e.pointerId),this.pauseAutoplay(t))}onPointerMove(e,t){if(!t.isPointerDown)return;t.pointerDeltaX=e.clientX-t.pointerStartX;const s=-t.currentIndex*t.viewport.clientWidth+t.pointerDeltaX;t.track.style.transform=`translateX(${s}px)`}onPointerUp(e,t){var s,i;if(!t.isPointerDown)return;t.isPointerDown=!1,t.track.classList.remove("is-dragging"),null===(i=(s=t.track).releasePointerCapture)||void 0===i||i.call(s,e.pointerId);const n=.2*t.viewport.clientWidth;t.pointerDeltaX>n?this.prev(t.id):t.pointerDeltaX<-n?this.next(t.id):this.moveTo(t,t.currentIndex),t.pointerDeltaX=0,this.resumeAutoplay(t)}moveTo(e,t,s=!0){const i=e.slides.length-1;let n=t;n<0?n=e.options.loop?i:0:n>i&&(n=e.options.loop?0:i),e.currentIndex=n,s?e.track.style.transform=`translateX(-${100*n}%)`:(e.track.classList.add("is-initializing"),requestAnimationFrame(()=>{e.track.style.transform=`translateX(-${100*n}%)`,e.track.getBoundingClientRect(),e.track.classList.remove("is-initializing")})),e.slides.forEach((e,t)=>{e.classList.toggle("is-active",t===n)}),e.dots.forEach((e,t)=>{e.classList.toggle("is-active",t===n)});const o=!e.options.loop&&0===n,r=!e.options.loop&&n===i;e.navPrev.disabled=o,e.navNext.disabled=r,this.updateHeight(e)}updateHeight(e){const t=e.slides[e.currentIndex];t&&window.requestAnimationFrame(()=>{const s=t.getBoundingClientRect().height||t.offsetHeight||t.scrollHeight;e.viewport.style.height=s>0?`${s}px`:"auto"})}},Be=(e,t)=>Pe.init(e,t),Ne=e=>Pe.next(e),He=e=>Pe.prev(e),ze=(e,t)=>Pe.goTo(e,t),Xe=(e,t)=>Pe.startAutoplay(e,t),We=e=>Pe.stopAutoplay(e),Ge=(e,t,s)=>Pe.setAutoplay(e,t,s),Ue=e=>Pe.destroy(e),Re=()=>Pe.autoInitialize();const Ve=new class{constructor(e={}){var t,s,i,n,o;this.groups=new Map,this.groupOptions=new Map,this.registeredTriggers=new WeakSet,this.currentGroup=null,this.currentIndex=0,this.activeTrigger=null,this.isPointerDown=!1,this.startX=0,this.deltaX=0,this.defaultOptions={loop:null===(t=e.loop)||void 0===t||t,swipe:null===(s=e.swipe)||void 0===s||s,keyboard:null===(i=e.keyboard)||void 0===i||i,closeOnBackdrop:null===(n=e.closeOnBackdrop)||void 0===n||n,showCaption:null===(o=e.showCaption)||void 0===o||o},this.options=this.defaultOptions;const r=this.createOverlayTemplate();document.body.appendChild(r),this.overlay=r,this.stage=r.querySelector(".dewp-lightbox__stage"),this.track=r.querySelector(".dewp-lightbox__track"),this.caption=r.querySelector(".dewp-lightbox__caption"),this.counter=r.querySelector(".dewp-lightbox__counter"),this.closeButton=r.querySelector(".dewp-lightbox__close"),this.prevButton=r.querySelector(".dewp-lightbox__arrow--prev"),this.nextButton=r.querySelector(".dewp-lightbox__arrow--next"),this.bindOverlayEvents()}register(e,t={}){const s="string"==typeof e?document.querySelector(e):e;if(!s)return;(s.matches("[data-dewp-lightbox]")?[s]:Array.from(s.querySelectorAll("[data-dewp-lightbox]"))).forEach(e=>this.registerTrigger(e,t))}open(e,t=0){var s;const i=this.groups.get(e);if(!i)return;const n=null!==(s=this.groupOptions.get(e))&&void 0!==s?s:this.defaultOptions;this.options=n,this.currentGroup=i,this.currentIndex=Math.max(0,Math.min(t,i.items.length-1)),this.renderSlides(i),this.updateUI(),this.toggleOverlay(!0)}close(){if(this.toggleOverlay(!1),this.activeTrigger)try{this.activeTrigger.focus()}catch{}this.currentGroup=null,this.activeTrigger=null}next(){if(!this.currentGroup)return;const e=this.currentIndex+1;if(e>=this.currentGroup.items.length){if(!this.options.loop)return;this.currentIndex=0}else this.currentIndex=e;this.updateUI()}prev(){if(!this.currentGroup)return;const e=this.currentIndex-1;if(e<0){if(!this.options.loop)return;this.currentIndex=this.currentGroup.items.length-1}else this.currentIndex=e;this.updateUI()}autoInitialize(){document.querySelectorAll("[data-dewp-lightbox]").forEach(e=>{this.registerTrigger(e)})}registerTrigger(e,t={}){var s,i,n,o,r;const a={loop:null!==(s=t.loop)&&void 0!==s?s:this.defaultOptions.loop,swipe:null!==(i=t.swipe)&&void 0!==i?i:this.defaultOptions.swipe,keyboard:null!==(n=t.keyboard)&&void 0!==n?n:this.defaultOptions.keyboard,closeOnBackdrop:null!==(o=t.closeOnBackdrop)&&void 0!==o?o:this.defaultOptions.closeOnBackdrop,showCaption:null!==(r=t.showCaption)&&void 0!==r?r:this.defaultOptions.showCaption},d=e.dataset.dewpLightbox||e.getAttribute("data-dewp-lightbox")||"default",l=e.dataset.lightboxSrc||e.getAttribute("href")||e.getAttribute("src");if(!l)return void console.warn("[DEWP Lightbox] 이미지 경로를 찾을 수 없습니다.",e);const c=e.dataset.lightboxCaption||e.getAttribute("data-caption")||e.getAttribute("title")||"";let p=this.groups.get(d);p||(p={name:d,items:[]},this.groups.set(d,p)),this.groupOptions.set(d,a);let h=p.items.find(t=>t.trigger===e);if(h?(h.src=l,h.caption=c):(h={trigger:e,src:l,caption:c,group:d},p.items.push(h)),!this.registeredTriggers.has(e)){e.classList.add("dewp-lightbox-trigger"),e.setAttribute("role","button"),e.setAttribute("tabindex",e.getAttribute("tabindex")||"0");const t=t=>{var s,i;t.preventDefault();const n=null!==(s=this.groupOptions.get(d))&&void 0!==s?s:a;this.options=n,this.activeTrigger=e,this.open(d,null!==(i=null==p?void 0:p.items.indexOf(h))&&void 0!==i?i:0)};e.addEventListener("click",t),e.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),t(e))}),this.registeredTriggers.add(e)}}createOverlayTemplate(){const e=document.createElement("div");return e.className="dewp-lightbox",e.setAttribute("aria-hidden","true"),e.innerHTML='\n <div class="dewp-lightbox__counter" aria-live="polite"></div>\n <div class="dewp-lightbox__stage">\n <div class="dewp-lightbox__track"></div>\n <div class="dewp-lightbox__caption" aria-live="polite"></div>\n </div>\n <button class="dewp-lightbox__close" type="button" aria-label="닫기">\n <i class="icon-close"></i>\n </button>\n <button class="dewp-lightbox__arrow dewp-lightbox__arrow--prev" type="button" aria-label="이전 이미지">\n <i class="icon-chevron-left"></i>\n </button>\n <button class="dewp-lightbox__arrow dewp-lightbox__arrow--next" type="button" aria-label="다음 이미지">\n <i class="icon-chevron-right"></i>\n </button>\n ',e}bindOverlayEvents(){this.closeButton.addEventListener("click",()=>this.close()),this.prevButton.addEventListener("click",()=>this.prev()),this.nextButton.addEventListener("click",()=>this.next()),this.overlay.addEventListener("click",e=>{this.options.closeOnBackdrop&&e.target===this.overlay&&this.close()}),document.addEventListener("keydown",e=>{this.options.keyboard&&this.overlay.classList.contains("is-open")&&("Escape"===e.key?(e.preventDefault(),this.close()):"ArrowRight"===e.key?(e.preventDefault(),this.next()):"ArrowLeft"===e.key&&(e.preventDefault(),this.prev()))});const e=e=>{var t,s;if(!this.options.swipe)return;if(!this.isPointerDown)return;this.isPointerDown=!1,this.track.classList.remove("is-dragging"),null===(s=(t=this.track).releasePointerCapture)||void 0===s||s.call(t,e.pointerId);const i=.15*this.stage.clientWidth;this.deltaX>i?this.prev():this.deltaX<-i&&this.next(),this.updateUI()};this.stage.addEventListener("pointerdown",e=>{this.options.swipe&&("mouse"===e.pointerType&&0!==e.button||(this.isPointerDown=!0,this.startX=e.clientX,this.deltaX=0,this.track.classList.add("is-dragging"),this.track.setPointerCapture(e.pointerId)))}),this.stage.addEventListener("pointermove",e=>{if(!this.options.swipe)return;if(!this.isPointerDown)return;this.deltaX=e.clientX-this.startX;const t=-this.currentIndex*this.stage.clientWidth+this.deltaX;this.track.style.transform=`translateX(${t}px)`}),this.stage.addEventListener("pointerup",e),this.stage.addEventListener("pointercancel",e),this.stage.addEventListener("pointerleave",e)}renderSlides(e){this.track.innerHTML="",e.items.forEach(e=>{const t=document.createElement("figure");t.className="dewp-lightbox__slide";const s=document.createElement("img");s.src=e.src,s.alt=e.caption||"",s.loading="lazy",t.appendChild(s),this.track.appendChild(t)}),this.overlay.classList.toggle("dewp-lightbox--single",e.items.length<=1),this.overlay.classList.toggle("dewp-lightbox--no-caption",!this.options.showCaption)}updateUI(){if(!this.currentGroup)return;const e=100*-this.currentIndex;this.track.style.transform=`translateX(${e}%)`;if(Array.from(this.track.children).forEach((e,t)=>{e.classList.toggle("is-active",t===this.currentIndex)}),this.options.showCaption){const e=this.currentGroup.items[this.currentIndex];(null==e?void 0:e.caption)?(this.caption.textContent=e.caption,this.caption.style.display=""):(this.caption.textContent="",this.caption.style.display="none")}else this.caption.style.display="none";this.counter.textContent=`${this.currentIndex+1} / ${this.currentGroup.items.length}`,this.overlay.classList.toggle("dewp-lightbox--single",this.currentGroup.items.length<=1)}toggleOverlay(e){e?(this.overlay.classList.add("is-open"),this.overlay.setAttribute("aria-hidden","false"),document.body.style.overflow="hidden",this.closeButton.focus()):(this.overlay.classList.remove("is-open"),this.overlay.setAttribute("aria-hidden","true"),document.body.style.overflow="")}},Fe=(e,t)=>Ve.register(e,t),je=(e,t)=>Ve.open(e,t),Ye=()=>Ve.close(),Ke=()=>Ve.next(),Je=()=>Ve.prev(),Qe=()=>Ve.autoInitialize(),Ze="0.9.6";var et={qs:e,qsa:t,create:s,addClass:i,removeClass:n,toggleClass:o,hasClass:r,setText:a,setHTML:d,on:l,off:c,remove:p,append:h,insertBefore:u,clearChildren:A,setStyle:v,setData:m,getData:g,isDOMReady:w,onDOMReady:b,isElementVisible:y,scrollToElement:f,getElementRect:E,isChildOf:I,showToast:L,showSuccessToast:D,showWarningToast:C,showErrorToast:k,showInfoToast:T,createModal:M,openModal:O,closeModal:_,showModal:$,showConfirmModal:q,createDropdown:B,toggleDropdown:z,showDropdown:N,hideDropdown:H,closeAllDropdowns:X,getSelectedValue:W,getSelectedText:G,setDropdownValue:U,autoInitializeDropdowns:R,initTabs:se,activateTab:ie,getActiveTab:ne,getTabInstance:oe,destroyTabs:re,initAccordion:de,toggleAccordionItem:le,openAccordionItem:ce,closeAccordionItem:pe,openAllAccordionItems:he,closeAllAccordionItems:ue,getActiveAccordionItems:ve,isAccordionItemOpen:me,getAccordionInstance:ge,destroyAccordion:we,destroyAllAccordions:be,createDrawer:F,openDrawer:j,closeDrawer:Y,toggleDrawer:K,closeAllDrawers:J,destroyDrawer:Q,isDrawerOpen:Z,autoInitializeDrawers:ee,createPopover:fe,openPopover:Ee,closePopover:Ie,togglePopover:Ae,DEWPSidebar:xe,DEWPStepper:Le,initStepper:(e,t={})=>new Le(e,t),initCarousel:Be,nextCarousel:Ne,prevCarousel:He,goToCarousel:ze,startCarouselAutoplay:Xe,stopCarouselAutoplay:We,setCarouselAutoplay:Ge,destroyCarousel:Ue,autoInitializeCarousels:Re,registerLightbox:Fe,openLightbox:je,closeLightbox:Ye,nextLightbox:Ke,prevLightbox:Je,autoInitializeLightbox:Qe,ready:b,version:Ze,info:{name:"DesignBase WordPress Library",description:"간단하고 강력한 프론트엔드 라이브러리",version:Ze,author:"DesignBase",license:"MIT"}};if("undefined"!=typeof window){const x=window.DEWP={},S={qs:e,qsa:t,create:s,addClass:i,removeClass:n,toggleClass:o,hasClass:r,setText:a,setHTML:d,on:l,off:c,remove:p,append:h,insertBefore:u,clearChildren:A,setStyle:v,setData:m,getData:g,isDOMReady:w,onDOMReady:b,isElementVisible:y,scrollToElement:f,getElementRect:E,isChildOf:I,showToast:L,showSuccessToast:D,showWarningToast:C,showErrorToast:k,showInfoToast:T,createModal:M,openModal:O,closeModal:_,showModal:$,showConfirmModal:q,createDropdown:B,toggleDropdown:z,showDropdown:N,hideDropdown:H,closeAllDropdowns:X,getSelectedValue:W,getSelectedText:G,setDropdownValue:U,autoInitializeDropdowns:R,createDrawer:F,openDrawer:j,closeDrawer:Y,toggleDrawer:K,closeAllDrawers:J,destroyDrawer:Q,isDrawerOpen:Z,autoInitializeDrawers:ee,initTabs:se,activateTab:ie,getActiveTab:ne,getTabInstance:oe,destroyTabs:re,initAccordion:de,toggleAccordionItem:le,openAccordionItem:ce,closeAccordionItem:pe,openAllAccordionItems:he,closeAllAccordionItems:ue,getActiveAccordionItems:ve,isAccordionItemOpen:me,getAccordionInstance:ge,destroyAccordion:we,destroyAllAccordions:be,DEWPSidebar:xe,createPopover:fe,openPopover:Ee,closePopover:Ie,togglePopover:Ae,initCarousel:Be,nextCarousel:Ne,prevCarousel:He,goToCarousel:ze,startCarouselAutoplay:Xe,stopCarouselAutoplay:We,setCarouselAutoplay:Ge,destroyCarousel:Ue,autoInitializeCarousels:Re,registerLightbox:Fe,openLightbox:je,closeLightbox:Ye,nextLightbox:Ke,prevLightbox:Je,autoInitializeLightbox:Qe,ready:b,version:Ze,info:{name:"DesignBase WordPress Library",description:"간단하고 강력한 프론트엔드 라이브러리",version:Ze,author:"DesignBase",license:"MIT"}};Object.keys(S).forEach(e=>{x[e]=S[e]});try{console.log(`[DEWP] v${Ze} loaded`)}catch{}b(()=>{try{R()}catch{}try{ee()}catch{}try{Re()}catch{}try{Qe()}catch{}});try{"loading"!==document.readyState&&(R(),ee(),Re(),Qe())}catch{}}return et}();
|