@forcecalendar/interface 1.0.32 → 1.0.33

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.
@@ -615,7 +615,7 @@
615
615
  <button class="fc-btn fc-btn-primary" id="save-btn">Save Event</button>
616
616
  </footer>
617
617
  </div>
618
- `}afterRender(){this.modalContent=this.$(".modal-content"),this.titleInput=this.$("#event-title"),this.startInput=this.$("#event-start"),this.endInput=this.$("#event-end"),this.colorContainer=this.$("#color-picker"),this.titleGroup=this.$("#title-group"),this.endGroup=this.$("#end-group"),this.addListener(this.$("#close-x"),"click",()=>this.close()),this.addListener(this.$("#cancel-btn"),"click",()=>this.close()),this.addListener(this.$("#save-btn"),"click",()=>this.save()),this.colorContainer.querySelectorAll(".color-btn").forEach(e=>{this.addListener(e,"click",t=>{this._formData.color=t.currentTarget.dataset.color,this.updateColorSelection()})}),this.addListener(this,"click",e=>{e.target===this&&this.close()}),this._keydownListenerAdded||(this._handleKeyDown=e=>{e.key==="Escape"&&this.hasAttribute("open")&&this.close()},window.addEventListener("keydown",this._handleKeyDown),this._keydownListenerAdded=!0)}updateColorSelection(){this.colorContainer.querySelectorAll(".color-btn").forEach(t=>{const s=t.dataset.color===this._formData.color;t.classList.toggle("selected",s),t.setAttribute("aria-checked",s?"true":"false")})}open(e=new Date){this.hasAttribute("open")||this.setAttribute("open",""),this.titleGroup.classList.remove("has-error"),this.endGroup.classList.remove("has-error"),this._formData.start=e,this._formData.end=new Date(e.getTime()+this.config.defaultDuration*60*1e3),this._formData.title="",this._formData.color=this.config.colors[0].color,this.startInput&&(this.titleInput.value="",this.startInput.value=this.formatDateForInput(this._formData.start),this.endInput.value=this.formatDateForInput(this._formData.end),this.updateColorSelection(),this._cleanupFocusTrap&&this._cleanupFocusTrap(),this._cleanupFocusTrap=z.trapFocus(this.modalContent))}close(){this.removeAttribute("open"),this._cleanupFocusTrap&&(this._cleanupFocusTrap(),this._cleanupFocusTrap=null)}validate(){let e=!0;this.titleGroup.classList.remove("has-error"),this.endGroup.classList.remove("has-error"),this.titleInput.value.trim()||(this.titleGroup.classList.add("has-error"),e=!1);const t=new Date(this.startInput.value);return new Date(this.endInput.value)<=t&&(this.endGroup.classList.add("has-error"),e=!1),e}save(){if(!this.validate())return;const e={title:this.titleInput.value.trim(),start:new Date(this.startInput.value),end:new Date(this.endInput.value),backgroundColor:this._formData.color};this.emit("save",e),this.close()}formatDateForInput(e){const t=o=>String(o).padStart(2,"0"),s=e.getFullYear(),i=t(e.getMonth()+1),n=t(e.getDate()),r=t(e.getHours()),a=t(e.getMinutes());return`${s}-${i}-${n}T${r}:${a}`}unmount(){this._cleanupFocusTrap&&this._cleanupFocusTrap(),this._handleKeyDown&&(window.removeEventListener("keydown",this._handleKeyDown),this._handleKeyDown=null,this._keydownListenerAdded=!1)}}customElements.get("forcecal-event-form")||customElements.define("forcecal-event-form",Q);class P extends v{static get observedAttributes(){return["view","date","locale","timezone","week-starts-on","height"]}constructor(){super(),this.stateManager=null,this.currentView=null,this._hasRendered=!1,this._cachedStyles=null,this._busUnsubscribers=[]}initialize(){const e={view:this.getAttribute("view")||"month",date:this.getAttribute("date")?new Date(this.getAttribute("date")):new Date,locale:this.getAttribute("locale")||"en-US",timeZone:this.getAttribute("timezone")||Intl.DateTimeFormat().resolvedOptions().timeZone,weekStartsOn:parseInt(this.getAttribute("week-starts-on")||"0")};this.stateManager=new Y(e),this.stateManager.subscribe(this.handleStateChange.bind(this)),this.setupEventListeners()}setupEventListeners(){this._busUnsubscribers.forEach(t=>t()),this._busUnsubscribers=[],this._busUnsubscribers.push(u.on("navigation:*",(t,s)=>{this.emit("calendar-navigate",{action:s.split(":")[1],...t})})),this._busUnsubscribers.push(u.on("view:changed",t=>{this.emit("calendar-view-change",t)}));const e=(t,s)=>{this.emit(`calendar-event-${t}`,s)};this._busUnsubscribers.push(u.on("event:add",t=>{e("add",t)})),this._busUnsubscribers.push(u.on("event:update",t=>{e("update",t)})),this._busUnsubscribers.push(u.on("event:remove",t=>{e("remove",t)})),this._busUnsubscribers.push(u.on("event:added",t=>{e("add",t),this.emit("calendar-event-added",t)})),this._busUnsubscribers.push(u.on("event:updated",t=>{e("update",t),this.emit("calendar-event-updated",t)})),this._busUnsubscribers.push(u.on("event:deleted",t=>{e("remove",t),this.emit("calendar-event-deleted",t)})),this._busUnsubscribers.push(u.on("date:selected",t=>{this.emit("calendar-date-select",t)}))}handleStateChange(e,t){var o,c;if(!this._hasRendered)return;const s=e.view!==(t==null?void 0:t.view),i=((o=e.currentDate)==null?void 0:o.getTime())!==((c=t==null?void 0:t.currentDate)==null?void 0:c.getTime()),n=e.events!==(t==null?void 0:t.events),r=e.loading!==(t==null?void 0:t.loading);if(e.error!==(t==null?void 0:t.error)){this.render();return}if(r){this._updateLoadingState(e.loading);return}s&&(this.currentView=e.view),s?(this._updateTitle(),this._updateViewButtons(),this._switchView()):i?(this._updateTitle(),this._updateViewContent()):n&&this._updateViewContent()}_updateTitle(){const e=this.$(".fc-title");if(e){const t=this.stateManager.getState();e.textContent=this.getTitle(t.currentDate,t.view)}}_updateViewButtons(){const e=this.stateManager.getState();this.$$("[data-view]").forEach(t=>{const s=t.dataset.view===e.view;t.classList.toggle("active",s)})}_switchView(){const e=this.$("#calendar-view-container");if(e){this._currentViewInstance&&this._currentViewInstance.cleanup&&this._currentViewInstance.cleanup();try{const s={month:E,week:F,day:H}[this.currentView]||E,i=new s(e,this.stateManager);i._viewType=this.currentView,this._currentViewInstance=i,i.render()}catch(t){console.error("[ForceCalendar] Error switching view:",t)}}}_updateViewContent(){this._currentViewInstance&&this._currentViewInstance.render&&this._currentViewInstance.render()}_updateLoadingState(e){const t=this.$(".fc-loading"),s=this.$(".fc-view-container");t&&(t.style.display=e?"flex":"none"),s&&(s.style.display=e?"none":"flex")}mount(){this.currentView=this.stateManager.getView(),super.mount()}loadView(e){!e||this.currentView===e||(this.currentView=e,this._switchView(),this._updateViewButtons(),this._updateTitle())}getStyles(){const e=this.getAttribute("height")||"800px";return`
618
+ `}afterRender(){this.modalContent=this.$(".modal-content"),this.titleInput=this.$("#event-title"),this.startInput=this.$("#event-start"),this.endInput=this.$("#event-end"),this.colorContainer=this.$("#color-picker"),this.titleGroup=this.$("#title-group"),this.endGroup=this.$("#end-group"),this.addListener(this.$("#close-x"),"click",()=>this.close()),this.addListener(this.$("#cancel-btn"),"click",()=>this.close()),this.addListener(this.$("#save-btn"),"click",()=>this.save()),this.colorContainer.querySelectorAll(".color-btn").forEach(e=>{this.addListener(e,"click",t=>{this._formData.color=t.currentTarget.dataset.color,this.updateColorSelection()})}),this.addListener(this,"click",e=>{e.target===this&&this.close()}),this._keydownListenerAdded||(this._handleKeyDown=e=>{e.key==="Escape"&&this.hasAttribute("open")&&this.close()},window.addEventListener("keydown",this._handleKeyDown),this._keydownListenerAdded=!0)}updateColorSelection(){this.colorContainer.querySelectorAll(".color-btn").forEach(t=>{const s=t.dataset.color===this._formData.color;t.classList.toggle("selected",s),t.setAttribute("aria-checked",s?"true":"false")})}open(e=new Date){this.hasAttribute("open")||this.setAttribute("open",""),this.titleGroup.classList.remove("has-error"),this.endGroup.classList.remove("has-error"),this._formData.start=e,this._formData.end=new Date(e.getTime()+this.config.defaultDuration*60*1e3),this._formData.title="",this._formData.color=this.config.colors[0].color,this.startInput&&(this.titleInput.value="",this.startInput.value=this.formatDateForInput(this._formData.start),this.endInput.value=this.formatDateForInput(this._formData.end),this.updateColorSelection(),this._cleanupFocusTrap&&this._cleanupFocusTrap(),this._cleanupFocusTrap=z.trapFocus(this.modalContent))}close(){this.removeAttribute("open"),this._cleanupFocusTrap&&(this._cleanupFocusTrap(),this._cleanupFocusTrap=null)}validate(){let e=!0;this.titleGroup.classList.remove("has-error"),this.endGroup.classList.remove("has-error"),this.titleInput.value.trim()||(this.titleGroup.classList.add("has-error"),e=!1);const t=new Date(this.startInput.value);return new Date(this.endInput.value)<=t&&(this.endGroup.classList.add("has-error"),e=!1),e}save(){if(!this.validate())return;const e={title:this.titleInput.value.trim(),start:new Date(this.startInput.value),end:new Date(this.endInput.value),backgroundColor:this._formData.color};this.emit("save",e),this.close()}formatDateForInput(e){const t=o=>String(o).padStart(2,"0"),s=e.getFullYear(),i=t(e.getMonth()+1),n=t(e.getDate()),r=t(e.getHours()),a=t(e.getMinutes());return`${s}-${i}-${n}T${r}:${a}`}unmount(){this._cleanupFocusTrap&&this._cleanupFocusTrap(),this._handleKeyDown&&(window.removeEventListener("keydown",this._handleKeyDown),this._handleKeyDown=null,this._keydownListenerAdded=!1)}}customElements.get("forcecal-event-form")||customElements.define("forcecal-event-form",Q);class P extends v{static get observedAttributes(){return["view","date","locale","timezone","week-starts-on","height"]}constructor(){super(),this.stateManager=null,this.currentView=null,this._hasRendered=!1,this._cachedStyles=null,this._busUnsubscribers=[]}initialize(){const e={view:this.getAttribute("view")||"month",date:this.getAttribute("date")?new Date(this.getAttribute("date")):new Date,locale:this.getAttribute("locale")||"en-US",timeZone:this.getAttribute("timezone")||Intl.DateTimeFormat().resolvedOptions().timeZone,weekStartsOn:parseInt(this.getAttribute("week-starts-on")||"0")};this.stateManager=new Y(e),this.stateManager.subscribe(this.handleStateChange.bind(this)),this.setupEventListeners()}setupEventListeners(){this._busUnsubscribers.forEach(t=>t()),this._busUnsubscribers=[],this._busUnsubscribers.push(u.on("navigation:*",(t,s)=>{this.emit("calendar-navigate",{action:s.split(":")[1],...t})})),this._busUnsubscribers.push(u.on("view:changed",t=>{this.emit("calendar-view-change",t)}));const e=(t,s)=>{this.emit(`calendar-event-${t}`,s)};this._busUnsubscribers.push(u.on("event:add",t=>{e("add",t)})),this._busUnsubscribers.push(u.on("event:update",t=>{e("update",t)})),this._busUnsubscribers.push(u.on("event:remove",t=>{e("remove",t)})),this._busUnsubscribers.push(u.on("event:added",t=>{this.emit("calendar-event-added",t)})),this._busUnsubscribers.push(u.on("event:updated",t=>{this.emit("calendar-event-updated",t)})),this._busUnsubscribers.push(u.on("event:deleted",t=>{this.emit("calendar-event-deleted",t)})),this._busUnsubscribers.push(u.on("date:selected",t=>{this.emit("calendar-date-select",t)}))}handleStateChange(e,t){var o,c;if(!this._hasRendered)return;const s=e.view!==(t==null?void 0:t.view),i=((o=e.currentDate)==null?void 0:o.getTime())!==((c=t==null?void 0:t.currentDate)==null?void 0:c.getTime()),n=e.events!==(t==null?void 0:t.events),r=e.loading!==(t==null?void 0:t.loading);if(e.error!==(t==null?void 0:t.error)){this.render();return}if(r){this._updateLoadingState(e.loading);return}s&&(this.currentView=e.view),s?(this._updateTitle(),this._updateViewButtons(),this._switchView()):i?(this._updateTitle(),this._updateViewContent()):n&&this._updateViewContent()}_updateTitle(){const e=this.$(".fc-title");if(e){const t=this.stateManager.getState();e.textContent=this.getTitle(t.currentDate,t.view)}}_updateViewButtons(){const e=this.stateManager.getState();this.$$("[data-view]").forEach(t=>{const s=t.dataset.view===e.view;t.classList.toggle("active",s)})}_switchView(){const e=this.$("#calendar-view-container");if(e){this._currentViewInstance&&this._currentViewInstance.cleanup&&this._currentViewInstance.cleanup();try{const s={month:E,week:F,day:H}[this.currentView]||E,i=new s(e,this.stateManager);i._viewType=this.currentView,this._currentViewInstance=i,i.render()}catch(t){console.error("[ForceCalendar] Error switching view:",t)}}}_updateViewContent(){this._currentViewInstance&&this._currentViewInstance.render&&this._currentViewInstance.render()}_updateLoadingState(e){const t=this.$(".fc-loading"),s=this.$(".fc-view-container");t&&(t.style.display=e?"flex":"none"),s&&(s.style.display=e?"none":"flex")}mount(){this.currentView=this.stateManager.getView(),super.mount()}loadView(e){!e||this.currentView===e||(this.currentView=e,this._switchView(),this._updateViewButtons(),this._updateTitle())}getStyles(){const e=this.getAttribute("height")||"800px";return`
619
619
  ${D.getBaseStyles()}
620
620
  ${D.getButtonStyles()}
621
621
  ${D.getGridStyles()}