snice 7.7.0 → 7.8.0
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/adapters/react/SniceProvider.js +1 -1
- package/adapters/react/SniceRouter.js +1 -1
- package/adapters/react/calendar.d.ts +1 -0
- package/adapters/react/calendar.d.ts.map +1 -1
- package/adapters/react/calendar.js +1 -1
- package/adapters/react/calendar.js.map +1 -1
- package/adapters/react/calendar.tsx +2 -1
- package/adapters/react/matchRoute.js +1 -1
- package/adapters/react/useRequestHandler.js +1 -1
- package/bin/analyzer-contracts.js +8 -2
- package/custom-elements.json +5 -1
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/button/snice-button.js +1 -1
- package/dist/cdn/calendar/README.md +2 -2
- package/dist/cdn/calendar/snice-calendar.js +26 -2
- package/dist/cdn/calendar/snice-calendar.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +2 -2
- package/dist/cdn/calendar/snice-calendar.min.js.map +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +130 -31
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +130 -31
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/table/README.md +2 -2
- package/dist/cdn/table/snice-table.esm.js +157 -33
- package/dist/cdn/table/snice-table.esm.js.map +1 -1
- package/dist/cdn/table/snice-table.esm.min.js +4 -4
- package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
- package/dist/cdn/table/snice-table.js +157 -33
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +33 -33
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag-input/README.md +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js +10 -16
- package/dist/cdn/tag-input/snice-tag-input.js.map +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.min.js.map +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/components/calendar/snice-calendar.d.ts +2 -0
- package/dist/components/calendar/snice-calendar.js +25 -1
- package/dist/components/calendar/snice-calendar.js.map +1 -1
- package/dist/components/table/snice-row.d.ts +6 -0
- package/dist/components/table/snice-row.js +11 -3
- package/dist/components/table/snice-row.js.map +1 -1
- package/dist/components/table/snice-table.d.ts +31 -3
- package/dist/components/table/snice-table.js +89 -16
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/table/table-cell-presentation.d.ts +11 -0
- package/dist/components/table/table-cell-presentation.js +25 -8
- package/dist/components/table/table-cell-presentation.js.map +1 -1
- package/dist/components/table/table-export.d.ts +6 -0
- package/dist/components/table/table-export.js +11 -2
- package/dist/components/table/table-export.js.map +1 -1
- package/dist/components/table/table-master-detail.d.ts +11 -2
- package/dist/components/table/table-master-detail.js +20 -3
- package/dist/components/table/table-master-detail.js.map +1 -1
- package/dist/components/tag-input/snice-tag-input.d.ts +2 -2
- package/dist/components/tag-input/snice-tag-input.js +9 -15
- package/dist/components/tag-input/snice-tag-input.js.map +1 -1
- package/dist/index.cjs +127 -28
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +127 -28
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +127 -28
- package/dist/index.iife.js.map +1 -1
- package/dist/react/SniceProvider.js +1 -1
- package/dist/react/SniceRouter.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/matchRoute.js +1 -1
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/request-response.d.ts +24 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/testing-dom.cjs +1 -1
- package/dist/testing-dom.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/components/calendar.md +8 -0
- package/docs/ai/components/tag-input.md +4 -0
- package/docs/ai/controllers.md +22 -6
- package/docs/components/calendar.md +24 -0
- package/docs/components/tag-input.md +6 -1
- package/docs/controllers.md +57 -6
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be loaded before snice-calendar.min.js");var SniceCalendar=function(e,t){"use strict";function a(e,t,a,r,i,n){function s(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var o,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",d=!t&&e?r.static?e:e.prototype:null,h=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),p=!1,v=a.length-1;v>=0;v--){var u={};for(var g in r)u[g]="access"===g?{}:r[g];for(var g in r.access)u.access[g]=r.access[g];u.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");n.push(s(e||null))};var m=(0,a[v])("accessor"===l?{get:h.get,set:h.set}:h[c],u);if("accessor"===l){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(o=s(m.get))&&(h.get=o),(o=s(m.set))&&(h.set=o),(o=s(m.init))&&i.unshift(o)}else(o=s(m))&&("field"===l?i.unshift(o):h[c]=o)}d&&Object.defineProperty(d,r.name,h),p=!0}function r(e,t,a){for(var r=arguments.length>2,i=0;i<t.length;i++)a=r?t[i].call(e,a):t[i].call(e);return r?a:void 0}"function"==typeof SuppressedError&&SuppressedError,(()=>{let e,i,n,s,o,l,c,d,h,p,v,u,g,m,b,f=[t.element("snice-avatar")],y=[],k=HTMLElement,w=[],_=[],D=[],x=[],E=[],C=[],
|
|
1
|
+
void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be loaded before snice-calendar.min.js");var SniceCalendar=function(e,t){"use strict";function a(e,t,a,r,i,n){function s(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var o,l=r.kind,c="getter"===l?"get":"setter"===l?"set":"value",d=!t&&e?r.static?e:e.prototype:null,h=t||(d?Object.getOwnPropertyDescriptor(d,r.name):{}),p=!1,v=a.length-1;v>=0;v--){var u={};for(var g in r)u[g]="access"===g?{}:r[g];for(var g in r.access)u.access[g]=r.access[g];u.addInitializer=function(e){if(p)throw new TypeError("Cannot add initializers after decoration has completed");n.push(s(e||null))};var m=(0,a[v])("accessor"===l?{get:h.get,set:h.set}:h[c],u);if("accessor"===l){if(void 0===m)continue;if(null===m||"object"!=typeof m)throw new TypeError("Object expected");(o=s(m.get))&&(h.get=o),(o=s(m.set))&&(h.set=o),(o=s(m.init))&&i.unshift(o)}else(o=s(m))&&("field"===l?i.unshift(o):h[c]=o)}d&&Object.defineProperty(d,r.name,h),p=!0}function r(e,t,a){for(var r=arguments.length>2,i=0;i<t.length;i++)a=r?t[i].call(e,a):t[i].call(e);return r?a:void 0}"function"==typeof SuppressedError&&SuppressedError,(()=>{let e,i,n,s,o,l,c,d,h,p,v,u,g,m,b,f=[t.element("snice-avatar")],y=[],k=HTMLElement,w=[],_=[],D=[],x=[],E=[],C=[],S=[],z=[],M=[],A=[],T=[],P=[],N=[],B=[],I=[],$=[],L=[],F=[],O=[],W=[],j=[],q=[],V=[];(class extends k{static{i=this}constructor(){super(...arguments),this.src=(r(this,w),r(this,_,"")),this.alt=(r(this,D),r(this,x,"")),this.name=(r(this,E),r(this,C,"")),this.size=(r(this,S),r(this,z,"medium")),this.shape=(r(this,M),r(this,A,"circle")),this.loading=(r(this,T),r(this,P,"lazy")),this.fallbackColor=(r(this,N),r(this,B,"#ffffff")),this.fallbackBackground=(r(this,I),r(this,$,"")),this.imageElement=(r(this,L),r(this,F,void 0)),this.fallbackElement=(r(this,O),r(this,W,void 0)),this.imageError=(r(this,j),r(this,q,!1)),this.handleImageLoad=(r(this,V),()=>{this.imageError=!1}),this.handleImageError=()=>{this.imageError=!0}}static{const Y="function"==typeof Symbol&&Symbol.metadata?Object.create(k[Symbol.metadata]??null):void 0;n=[t.property({})],s=[t.property({})],o=[t.property({})],l=[t.property({})],c=[t.property({})],d=[t.property({})],h=[t.property({attribute:"fallback-color"})],p=[t.property({attribute:"fallback-background"})],v=[t.query(".avatar-image")],u=[t.query(".avatar-fallback")],g=[t.property({type:Boolean,attribute:!1})],m=[t.render()],b=[t.styles()],a(this,null,m,{kind:"method",name:"render",static:!1,private:!1,access:{has:e=>"render"in e,get:e=>e.render},metadata:Y},null,w),a(this,null,b,{kind:"method",name:"styles",static:!1,private:!1,access:{has:e=>"styles"in e,get:e=>e.styles},metadata:Y},null,w),a(null,null,n,{kind:"field",name:"src",static:!1,private:!1,access:{has:e=>"src"in e,get:e=>e.src,set:(e,t)=>{e.src=t}},metadata:Y},_,D),a(null,null,s,{kind:"field",name:"alt",static:!1,private:!1,access:{has:e=>"alt"in e,get:e=>e.alt,set:(e,t)=>{e.alt=t}},metadata:Y},x,E),a(null,null,o,{kind:"field",name:"name",static:!1,private:!1,access:{has:e=>"name"in e,get:e=>e.name,set:(e,t)=>{e.name=t}},metadata:Y},C,S),a(null,null,l,{kind:"field",name:"size",static:!1,private:!1,access:{has:e=>"size"in e,get:e=>e.size,set:(e,t)=>{e.size=t}},metadata:Y},z,M),a(null,null,c,{kind:"field",name:"shape",static:!1,private:!1,access:{has:e=>"shape"in e,get:e=>e.shape,set:(e,t)=>{e.shape=t}},metadata:Y},A,T),a(null,null,d,{kind:"field",name:"loading",static:!1,private:!1,access:{has:e=>"loading"in e,get:e=>e.loading,set:(e,t)=>{e.loading=t}},metadata:Y},P,N),a(null,null,h,{kind:"field",name:"fallbackColor",static:!1,private:!1,access:{has:e=>"fallbackColor"in e,get:e=>e.fallbackColor,set:(e,t)=>{e.fallbackColor=t}},metadata:Y},B,I),a(null,null,p,{kind:"field",name:"fallbackBackground",static:!1,private:!1,access:{has:e=>"fallbackBackground"in e,get:e=>e.fallbackBackground,set:(e,t)=>{e.fallbackBackground=t}},metadata:Y},$,L),a(null,null,v,{kind:"field",name:"imageElement",static:!1,private:!1,access:{has:e=>"imageElement"in e,get:e=>e.imageElement,set:(e,t)=>{e.imageElement=t}},metadata:Y},F,O),a(null,null,u,{kind:"field",name:"fallbackElement",static:!1,private:!1,access:{has:e=>"fallbackElement"in e,get:e=>e.fallbackElement,set:(e,t)=>{e.fallbackElement=t}},metadata:Y},W,j),a(null,null,g,{kind:"field",name:"imageError",static:!1,private:!1,access:{has:e=>"imageError"in e,get:e=>e.imageError,set:(e,t)=>{e.imageError=t}},metadata:Y},q,V),a(null,e={value:i},f,{kind:"class",name:i.name,metadata:Y},null,y),i=e.value,Y&&Object.defineProperty(i,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:Y}),r(i,y)}render(){const e=this.fallbackBackground?"":this.getColorClass(this.name),a=this.fallbackBackground?`--avatar-bg: ${this.fallbackBackground}; --avatar-color: ${this.fallbackColor}`:"",r=this.getInitials(this.name),i=["avatar",e].filter(Boolean).join(" "),n=["avatar-image",this.imageError?"avatar-image--error":""].filter(Boolean).join(" "),s=["avatar-fallback",!this.src||this.imageError?"avatar-fallback--visible":""].filter(Boolean).join(" ");return t.html`
|
|
2
2
|
<div part="base" class="${i}" style="${a}">
|
|
3
3
|
<if ${this.src}>
|
|
4
4
|
<img part="image" class="${n}"
|
|
@@ -25,5 +25,5 @@ void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be lo
|
|
|
25
25
|
<svg class="avatar-icon" viewBox="0 0 24 24" fill="currentColor">
|
|
26
26
|
<path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/>
|
|
27
27
|
</svg>
|
|
28
|
-
`}})})();let i=(()=>{let e,i,n,s,o,l,c,d,h,p,v,u,g,m,b,f,y,k,w,_,D,x,E,C,z=[t.element("snice-calendar")],S=[],T=HTMLElement,M=[],P=[],A=[],N=[],B=[],I=[],$=[],L=[],F=[],O=[],W=[],j=[],q=[],V=[],Y=[],R=[],U=[],H=[],G=[],X=[],K=[],J=[],Q=[],Z=[],ee=[],te=[],ae=[],re=[],ie=[];var ne=class extends T{static{i=this}constructor(){super(...arguments),this.value=(r(this,M),r(this,P,new Date)),this.view=(r(this,A),r(this,N,"month")),this.events=(r(this,B),r(this,I,[])),this.minDate=(r(this,$),r(this,L,"")),this.maxDate=(r(this,F),r(this,O,"")),this.disabledDates=(r(this,W),r(this,j,[])),this.highlightToday=(r(this,q),r(this,V,!0)),this.showWeekNumbers=(r(this,Y),r(this,R,!1)),this.firstDayOfWeek=(r(this,U),r(this,H,0)),this.locale=(r(this,G),r(this,X,"en-US")),this.noDaySelect=(r(this,K),r(this,J,!1)),this.cellSizing=(r(this,Q),r(this,Z,"square")),this.eventTooltip=(r(this,ee),r(this,te,null)),this.eventPopover=(r(this,ae),r(this,re,null)),this.displayDate=(r(this,ie),new Date),this.tooltipToken=0,this.tooltipBar=null,this.popoverToken=0,this.popoverBar=null,this.boundPopoverEscape=e=>{"Escape"===e.key&&this.popoverBar&&this.closeEventPopover()},this.boundPopoverOutside=e=>{this.popoverBar&&(e.composedPath().includes(this.popoverEl)||this.closeEventPopover({returnFocus:!1}))},this.dayCells=[],this.focusedDate=null,this.handleGridKeydown=e=>{const t=e.target.__date;if(!t)return;let a=null,r=null;switch(e.key){case"ArrowLeft":a=-1;break;case"ArrowRight":a=1;break;case"ArrowUp":a=-7;break;case"ArrowDown":a=7;break;case"Home":a=-t.getDay();break;case"End":a=6-t.getDay();break;case"PageUp":r=-1;break;case"PageDown":r=1;break;case"Enter":case" ":return e.preventDefault(),void this.handleDayClick(t);default:return}e.preventDefault();const i=new Date(t);null!==a&&i.setDate(t.getDate()+a),null!==r&&i.setMonth(t.getMonth()+r),i.getMonth()===this.displayDate.getMonth()&&i.getFullYear()===this.displayDate.getFullYear()||(this.displayDate=new Date(i.getFullYear(),i.getMonth(),1)),this.focusedDate=i,this.updateView(),requestAnimationFrame(()=>{const e=this.dayCells.find(e=>{return a=i,(t=e.__date).getFullYear()===a.getFullYear()&&t.getMonth()===a.getMonth()&&t.getDate()===a.getDate();var t,a});e?.focus()})}}static{const r="function"==typeof Symbol&&Symbol.metadata?Object.create(T[Symbol.metadata]??null):void 0;n=[t.property({type:Date})],s=[t.property({attribute:"view"})],o=[t.property({type:Array,attribute:!1})],l=[t.property({type:Date,attribute:"min-date"})],c=[t.property({type:Date,attribute:"max-date"})],d=[t.property({type:Array,attribute:!1})],h=[t.property({type:Boolean,attribute:"highlight-today"})],p=[t.property({type:Boolean,attribute:"show-week-numbers"})],v=[t.property({type:Number,attribute:"first-day-of-week"})],u=[t.property({attribute:"locale"})],g=[t.property({type:Boolean,attribute:"no-day-select"})],m=[t.property({attribute:"cell-sizing"})],b=[t.property({attribute:!1})],f=[t.property({attribute:!1})],y=[t.dispatch("calendar-change",{bubbles:!0,composed:!0})],k=[t.dispatch("calendar-event-click",{bubbles:!0,composed:!0})],w=[t.styles()],_=[t.ready()],D=[t.request("calendar/event-popover")],x=[t.dispose()],E=[t.watch("value"),t.watch("events"),t.watch("eventTooltip"),t.watch("noDaySelect"),t.watch("cellSizing")],C=[t.watch("locale"),t.watch("firstDayOfWeek")],a(this,null,y,{kind:"method",name:"dispatchChange",static:!1,private:!1,access:{has:e=>"dispatchChange"in e,get:e=>e.dispatchChange},metadata:r},null,M),a(this,null,k,{kind:"method",name:"dispatchEventClick",static:!1,private:!1,access:{has:e=>"dispatchEventClick"in e,get:e=>e.dispatchEventClick},metadata:r},null,M),a(this,null,w,{kind:"method",name:"styles",static:!1,private:!1,access:{has:e=>"styles"in e,get:e=>e.styles},metadata:r},null,M),a(this,null,_,{kind:"method",name:"initialize",static:!1,private:!1,access:{has:e=>"initialize"in e,get:e=>e.initialize},metadata:r},null,M),a(this,null,D,{kind:"method",name:"requestEventPopoverContent",static:!1,private:!1,access:{has:e=>"requestEventPopoverContent"in e,get:e=>e.requestEventPopoverContent},metadata:r},null,M),a(this,null,x,{kind:"method",name:"cleanupPopover",static:!1,private:!1,access:{has:e=>"cleanupPopover"in e,get:e=>e.cleanupPopover},metadata:r},null,M),a(this,null,E,{kind:"method",name:"handlePropertyChange",static:!1,private:!1,access:{has:e=>"handlePropertyChange"in e,get:e=>e.handlePropertyChange},metadata:r},null,M),a(this,null,C,{kind:"method",name:"handleWeekdayInputsChange",static:!1,private:!1,access:{has:e=>"handleWeekdayInputsChange"in e,get:e=>e.handleWeekdayInputsChange},metadata:r},null,M),a(null,null,n,{kind:"field",name:"value",static:!1,private:!1,access:{has:e=>"value"in e,get:e=>e.value,set:(e,t)=>{e.value=t}},metadata:r},P,A),a(null,null,s,{kind:"field",name:"view",static:!1,private:!1,access:{has:e=>"view"in e,get:e=>e.view,set:(e,t)=>{e.view=t}},metadata:r},N,B),a(null,null,o,{kind:"field",name:"events",static:!1,private:!1,access:{has:e=>"events"in e,get:e=>e.events,set:(e,t)=>{e.events=t}},metadata:r},I,$),a(null,null,l,{kind:"field",name:"minDate",static:!1,private:!1,access:{has:e=>"minDate"in e,get:e=>e.minDate,set:(e,t)=>{e.minDate=t}},metadata:r},L,F),a(null,null,c,{kind:"field",name:"maxDate",static:!1,private:!1,access:{has:e=>"maxDate"in e,get:e=>e.maxDate,set:(e,t)=>{e.maxDate=t}},metadata:r},O,W),a(null,null,d,{kind:"field",name:"disabledDates",static:!1,private:!1,access:{has:e=>"disabledDates"in e,get:e=>e.disabledDates,set:(e,t)=>{e.disabledDates=t}},metadata:r},j,q),a(null,null,h,{kind:"field",name:"highlightToday",static:!1,private:!1,access:{has:e=>"highlightToday"in e,get:e=>e.highlightToday,set:(e,t)=>{e.highlightToday=t}},metadata:r},V,Y),a(null,null,p,{kind:"field",name:"showWeekNumbers",static:!1,private:!1,access:{has:e=>"showWeekNumbers"in e,get:e=>e.showWeekNumbers,set:(e,t)=>{e.showWeekNumbers=t}},metadata:r},R,U),a(null,null,v,{kind:"field",name:"firstDayOfWeek",static:!1,private:!1,access:{has:e=>"firstDayOfWeek"in e,get:e=>e.firstDayOfWeek,set:(e,t)=>{e.firstDayOfWeek=t}},metadata:r},H,G),a(null,null,u,{kind:"field",name:"locale",static:!1,private:!1,access:{has:e=>"locale"in e,get:e=>e.locale,set:(e,t)=>{e.locale=t}},metadata:r},X,K),a(null,null,g,{kind:"field",name:"noDaySelect",static:!1,private:!1,access:{has:e=>"noDaySelect"in e,get:e=>e.noDaySelect,set:(e,t)=>{e.noDaySelect=t}},metadata:r},J,Q),a(null,null,m,{kind:"field",name:"cellSizing",static:!1,private:!1,access:{has:e=>"cellSizing"in e,get:e=>e.cellSizing,set:(e,t)=>{e.cellSizing=t}},metadata:r},Z,ee),a(null,null,b,{kind:"field",name:"eventTooltip",static:!1,private:!1,access:{has:e=>"eventTooltip"in e,get:e=>e.eventTooltip,set:(e,t)=>{e.eventTooltip=t}},metadata:r},te,ae),a(null,null,f,{kind:"field",name:"eventPopover",static:!1,private:!1,access:{has:e=>"eventPopover"in e,get:e=>e.eventPopover,set:(e,t)=>{e.eventPopover=t}},metadata:r},re,ie),a(null,e={value:i},z,{kind:"class",name:i.name,metadata:r},null,S),ne=i=e.value,r&&Object.defineProperty(i,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:r})}computeRovingIndex(e){const t=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate();if(this.focusedDate){const a=e.findIndex(e=>t(e,this.focusedDate));if(a>=0)return a}if(this.value){const a=this.value instanceof Date?this.value:new Date(this.value);if(!isNaN(a.getTime())){const r=e.findIndex(e=>t(e,a));if(r>=0)return r}}const a=new Date,r=e.findIndex(e=>t(e,a));return r>=0?r:e.findIndex(e=>e.getMonth()===this.displayDate.getMonth())}dispatchChange(){return{value:this.value,calendar:this}}dispatchEventClick(e){return{event:e,calendar:this}}styles(){return t.css`${":host([hidden]){display:none}:host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style}.calendar{width:100%;max-width:37.5rem}.calendar__header{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);display:flex;align-items:center;justify-content:space-between;padding:var(--snice-spacing-md,1rem);background:var(--snice-color-surface,rgb(255 255 255));border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__title{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);font-size:var(--snice-heading-md, 1.125rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23))}.calendar__nav{display:flex;gap:var(--snice-spacing-xs,.5rem)}.calendar__nav-button{padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));background:var(--snice-color-surface,rgb(255 255 255));border-radius:var(--snice-border-radius-md,.25rem);cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease,border-color var(--snice-transition-fast, 150ms) ease;font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text,rgb(23 23 23));font-family:inherit}.calendar__nav-button:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250));border-color:var(--snice-color-border-hover,rgb(204 204 204))}.calendar__nav-button:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr);background:var(--snice-color-surface,rgb(255 255 255));container-type:inline-size}.calendar__weekday{padding:var(--snice-spacing-sm,.75rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text-secondary,rgb(82 82 82));text-transform:uppercase;letter-spacing:var(--snice-tracking-widest, .1em);border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day{box-sizing:border-box;min-width:0;min-height:max(calc(100cqw / 7),3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)));padding:var(--snice-spacing-xs,.5rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-top:none;border-left:none;cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease;position:relative;background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));overflow:hidden}.calendar__day:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250))}.calendar__day:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__day:nth-child(7n+1){border-left:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day--stretch{min-height:max(3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)))}.calendar__day--static{cursor:default}.calendar__day--static:hover{background:var(--snice-color-surface,rgb(255 255 255))}.calendar__day--static.calendar__day--today:hover{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--other-month{background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5}.calendar__day--other-month:hover{opacity:.7}.calendar__day--today{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--today:hover{background:var(--snice-color-primary-subtle-hover,rgb(219 234 254))}.calendar__day--selected{background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__day--selected:hover{background:var(--snice-color-primary-hover,rgb(29 78 216))}.calendar__day--disabled{background:var(--snice-color-surface-container,rgb(241 241 241));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5;cursor:not-allowed}.calendar__day--disabled:hover{background:var(--snice-color-surface-container,rgb(241 241 241))}.calendar__day-number{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);margin-bottom:var(--snice-spacing-2xs,.25rem)}.calendar__day--selected .calendar__day-number{color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__event-bar{display:flex;align-items:center;gap:var(--snice-spacing-3xs,.125rem);align-self:start;margin-top:calc(1.875rem + var(--calendar-event-lane,0) * 1.375rem);margin-inline:var(--snice-spacing-3xs,0.125rem);height:1.125rem;line-height:1.125rem;font-size:var(--snice-font-size-2xs, .625rem);padding:0 var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-sm,.125rem);background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250));white-space:nowrap;overflow:hidden;cursor:pointer;z-index:1;transition:opacity var(--snice-transition-fast, 150ms) ease}.calendar__event-title{overflow:hidden;text-overflow:ellipsis;min-width:0}.calendar__event-avatar{flex:none;--avatar-size:0.875rem;font-size:.375rem;border-radius:50%;overflow:hidden}.calendar__popover{position:fixed;z-index:var(--snice-z-floating,1000);min-width:14rem;max-width:22rem;padding:var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));font-size:var(--snice-font-size-sm, .875rem);line-height:1.5;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1))}.calendar__popover:focus-visible{outline:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1)),0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__popover-loading{color:var(--snice-color-text-secondary,rgb(82 82 82));font-size:var(--snice-font-size-xs, .75rem)}.calendar__tooltip{position:fixed;z-index:var(--snice-z-floating,1000);max-width:18rem;padding:var(--snice-spacing-2xs,.25rem) var(--snice-spacing-xs,.5rem);border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-tooltip-bg,rgb(51 51 51));color:var(--snice-color-text-inverse,rgb(250 250 250));font-size:var(--snice-font-size-xs, .75rem);line-height:1.4;box-shadow:var(--snice-shadow-md,0 4px 6px -1px rgb(0 0 0 / .1));pointer-events:none}.calendar__event-bar:hover{opacity:.8}.calendar__event-bar--continues-left{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.calendar__event-bar--continues-right{border-top-right-radius:0;border-bottom-right-radius:0;margin-inline-end:0}.calendar__more{position:absolute;bottom:var(--snice-spacing-3xs,.125rem);left:var(--snice-spacing-2xs,.25rem);font-size:var(--snice-font-size-2xs, .625rem);color:var(--snice-color-text-secondary,rgb(82 82 82))}.calendar__week-number{padding:var(--snice-spacing-sm,.75rem) var(--snice-spacing-xs,.5rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);color:var(--snice-color-text-tertiary,rgb(115 115 115));background:var(--snice-color-surface-container-low,rgb(250 250 250));border-right:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar--week .calendar__grid{grid-template-columns:repeat(7,1fr)}.calendar--week .calendar__day{min-height:7.5rem}.calendar--day .calendar__grid{grid-template-columns:1fr}.calendar--day .calendar__day{min-height:25rem}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}"}`}initialize(){this.createDOM(),this.updateView()}createDOM(){const e=this.shadowRoot;this.container=document.createElement("div"),this.container.className=`calendar calendar--${this.view}`,this.container.setAttribute("part","base"),this.header=document.createElement("div"),this.header.className="calendar__header",this.header.setAttribute("part","header");const t=document.createElement("div");t.className="calendar__title";const a=document.createElement("div");a.className="calendar__nav";const r=document.createElement("button");r.className="calendar__nav-button",r.textContent="Today",r.onclick=()=>this.goToToday();const i=document.createElement("button");i.className="calendar__nav-button",i.textContent="‹",i.onclick=()=>this.previousMonth();const n=document.createElement("button");n.className="calendar__nav-button",n.textContent="›",n.onclick=()=>this.nextMonth(),a.appendChild(r),a.appendChild(i),a.appendChild(n),this.header.appendChild(t),this.header.appendChild(a),this.grid=document.createElement("div"),this.grid.className="calendar__grid",this.grid.setAttribute("part","grid"),this.getWeekdays().forEach((e,t)=>{const a=document.createElement("div");a.className="calendar__weekday",a.textContent=e,a.style.gridRow="1",a.style.gridColumn=String(t+1),this.grid.appendChild(a)}),this.grid.setAttribute("role","grid"),this.grid.setAttribute("aria-label","Calendar"),this.grid.addEventListener("keydown",this.handleGridKeydown);for(let e=0;e<42;e++){const t=document.createElement("div");t.className="calendar__day",t.setAttribute("role","gridcell"),t.setAttribute("tabindex",0===e?"0":"-1"),t.style.gridRow=String(Math.floor(e/7)+2),t.style.gridColumn=String(e%7+1);const a=document.createElement("div");a.className="calendar__day-number",t.appendChild(a),this.grid.appendChild(t),this.dayCells.push(t)}this.tooltipEl=document.createElement("div"),this.tooltipEl.className="calendar__tooltip",this.tooltipEl.setAttribute("part","event-tooltip"),this.tooltipEl.setAttribute("role","tooltip"),this.tooltipEl.id="calendar-event-tooltip",this.tooltipEl.hidden=!0,this.popoverEl=document.createElement("div"),this.popoverEl.className="calendar__popover",this.popoverEl.setAttribute("part","event-popover"),this.popoverEl.setAttribute("role","dialog"),this.popoverEl.setAttribute("aria-label","Event details"),this.popoverEl.tabIndex=-1,this.popoverEl.hidden=!0,this.container.appendChild(this.header),this.container.appendChild(this.grid),this.container.appendChild(this.tooltipEl),this.container.appendChild(this.popoverEl),e.appendChild(this.container)}async*requestEventPopoverContent(e){return await(yield{event:e})}async openEventPopover(e,t){const a=++this.popoverToken;this.hideEventTooltip(),this.popoverBar=e,this.popoverEl.replaceChildren();const r=document.createElement("div");let i;r.className="calendar__popover-loading",r.textContent="Loading…",this.popoverEl.appendChild(r),this.popoverEl.hidden=!1,this.positionPopover(e),document.addEventListener("keydown",this.boundPopoverEscape,!0),document.addEventListener("mousedown",this.boundPopoverOutside,!0);try{i=!0!==t.popover&&t.popover?"function"==typeof t.popover?t.popover():t.popover:this.eventPopover?await this.eventPopover(t):await this.requestEventPopoverContent(t)}catch{i=void 0}if(a===this.popoverToken){if(null==i)return console.warn(`[snice-calendar] event "${String(t.id)}" enables a popover but no content was provided — set eventPopover, event.popover content, or a @respond('calendar/event-popover') handler.`),void this.closeEventPopover({returnFocus:!1});"string"==typeof i?this.popoverEl.textContent=i:this.popoverEl.replaceChildren(i),this.positionPopover(e),this.popoverEl.focus()}}positionPopover(e){const t=e.getBoundingClientRect();this.popoverEl.style.left=`${Math.max(4,t.left)}px`,this.popoverEl.style.top=`${t.bottom+6}px`}closeEventPopover(e={}){if(!this.popoverBar)return;this.popoverToken++;const t=this.popoverBar;this.popoverBar=null,this.popoverEl.hidden=!0,this.popoverEl.replaceChildren(),document.removeEventListener("keydown",this.boundPopoverEscape,!0),document.removeEventListener("mousedown",this.boundPopoverOutside,!0),!1!==e.returnFocus&&t.isConnected&&t.focus()}cleanupPopover(){document.removeEventListener("keydown",this.boundPopoverEscape,!0),document.removeEventListener("mousedown",this.boundPopoverOutside,!0)}async showEventTooltip(e,t){const a=++this.tooltipToken,r=this.eventTooltip;let i;if(r)try{i=await r(t)}catch{i=t.tooltip}else i=t.tooltip;if(a!==this.tooltipToken||null==i)return;"string"==typeof i?this.tooltipEl.textContent=i:this.tooltipEl.replaceChildren(i),this.tooltipEl.hidden=!1,this.tooltipBar=e,e.setAttribute("aria-describedby",this.tooltipEl.id);const n=e.getBoundingClientRect();this.tooltipEl.style.left=`${Math.max(4,n.left)}px`,this.tooltipEl.style.top=`${Math.max(4,n.top-this.tooltipEl.offsetHeight-6)}px`}hideEventTooltip(){this.tooltipToken++,this.tooltipEl.hidden=!0,this.tooltipBar?.removeAttribute("aria-describedby"),this.tooltipBar=null}updateView(){const e=this.displayDate.toLocaleDateString(this.locale,{month:"long",year:"numeric"}),t=this.header.querySelector(".calendar__title");t&&(t.textContent=e);const a=this.getMonthDays(),r=this.displayDate.getMonth(),i=this.computeRovingIndex(a);a.forEach((e,t)=>{const a=this.dayCells[t];if(!a)return;const n=e.getMonth()!==r,s=this.highlightToday&&this.isToday(e),o=!this.noDaySelect&&this.isSelected(e),l=this.isDisabled(e);a.className="calendar__day",n&&a.classList.add("calendar__day--other-month"),s&&a.classList.add("calendar__day--today"),o&&a.classList.add("calendar__day--selected"),l&&a.classList.add("calendar__day--disabled"),this.noDaySelect&&a.classList.add("calendar__day--static"),"stretch"===this.cellSizing&&a.classList.add("calendar__day--stretch"),a.setAttribute("role","gridcell"),a.setAttribute("aria-selected",o?"true":"false"),a.setAttribute("aria-disabled",l?"true":"false"),a.setAttribute("aria-current",s&&!n?"date":"false"),a.setAttribute("tabindex",t===i?"0":"-1"),a.setAttribute("aria-label",e.toLocaleDateString(this.locale,{dateStyle:"full"})),a.__date=e;const c=a.querySelector(".calendar__day-number");c&&(c.textContent=String(e.getDate())),a.onclick=()=>this.handleDayClick(e)}),this.renderEventStripes(a)}static{this.MAX_EVENT_LANES=3}renderEventStripes(e){if(this.closeEventPopover({returnFocus:!1}),this.grid.querySelectorAll(".calendar__event-bar").forEach(e=>e.remove()),this.dayCells.forEach(e=>{e.querySelector(".calendar__more")?.remove(),e.style.removeProperty("--calendar-week-lanes"),e.style.removeProperty("--calendar-week-more")}),!this.events||0===this.events.length)return;const t=e.map(e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()),a=new Map(t.map((e,t)=>[e,t])),r=t[0],i=t[t.length-1],n=e=>{const t="string"==typeof e?new Date(e):e;return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()},s=[];this.events.forEach((e,o)=>{if(!e.start)return;const l=n(e.start);if(isNaN(l))return;const c=e.end?Math.max(n(e.end),l):l;if(isNaN(c)||c<r||l>i)return;const d=l<r,h=c>i,p=d?0:a.get(l),v=h?t.length-1:a.get(c);s.push({event:e,startIdx:p,endIdx:v,startsBeforeGrid:d,endsAfterGrid:h,startTime:l,duration:c-l,order:o})}),s.sort((e,t)=>e.startTime-t.startTime||t.duration-e.duration||e.order-t.order);const o=new Array(t.length).fill(0),l=Math.floor(t.length/7),c=new Array(l).fill(0);for(let e=0;e<l;e++){const t=7*e,a=t+6,r=[];for(const i of s){if(i.endIdx<t||i.startIdx>a)continue;const n=Math.max(i.startIdx,t),s=Math.min(i.endIdx,a),l=n-t,d=s-t;let h=0;for(;r[h]?.some(([e,t])=>l<=t&&d>=e);)h++;if((r[h]??=[]).push([l,d]),c[e]=Math.min(Math.max(c[e],h+1),ne.MAX_EVENT_LANES),h>=ne.MAX_EVENT_LANES){for(let e=n;e<=s;e++)o[e]++;continue}const p=n>i.startIdx||n===i.startIdx&&i.startsBeforeGrid,v=s<i.endIdx||s===i.endIdx&&i.endsAfterGrid,u=document.createElement("div");u.className="calendar__event-bar",p&&u.classList.add("calendar__event-bar--continues-left"),v&&u.classList.add("calendar__event-bar--continues-right");const g=i.event.className?i.event.className.split(/\s+/).filter(Boolean):[];if(u.classList.add(...g),u.setAttribute("part",["event-bar",...g].join(" ")),u.setAttribute("data-event-id",String(i.event.id)),u.setAttribute("data-lane",String(h)),u.style.gridRow=String(e+2),u.style.gridColumn=`${l+1} / ${d+2}`,u.style.setProperty("--calendar-event-lane",String(h)),i.event.color&&(u.style.background=i.event.color),i.event.avatar){const e="string"==typeof i.event.avatar?{src:i.event.avatar}:i.event.avatar,t=document.createElement("snice-avatar");t.className="calendar__event-avatar",t.setAttribute("part","event-avatar"),t.setAttribute("size","xs"),t.setAttribute("shape","circle"),t.setAttribute("loading","eager"),e.src&&(t.src=e.src),e.name&&(t.name=e.name),e.alt&&(t.alt=e.alt),u.appendChild(t)}const m=document.createElement("span");m.className="calendar__event-title",m.textContent=i.event.title,u.appendChild(m),i.event.tooltip||this.eventTooltip?(u.onmouseenter=()=>this.showEventTooltip(u,i.event),u.onmouseleave=()=>this.hideEventTooltip()):u.title=i.event.title,i.event.popover?(u.setAttribute("role","button"),u.setAttribute("tabindex","0"),u.setAttribute("aria-haspopup","dialog"),u.onkeydown=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),this.openEventPopover(u,i.event))},u.onclick=e=>{this.handleEventClick(i.event,e),this.openEventPopover(u,i.event)}):u.onclick=e=>this.handleEventClick(i.event,e),this.grid.appendChild(u)}}o.forEach((e,t)=>{if(0===e)return;const a=this.dayCells[t];if(!a)return;const r=document.createElement("div");r.className="calendar__more",r.textContent=`+${e} more`,a.appendChild(r)});for(let e=0;e<l;e++){if(0===c[e])continue;const t=o.slice(7*e,7*e+7).some(e=>e>0);for(let a=7*e;a<7*e+7;a++){const r=this.dayCells[a];r&&(r.style.setProperty("--calendar-week-lanes",String(c[e])),t&&r.style.setProperty("--calendar-week-more","1rem"))}}}goToToday(){this.displayDate=new Date,this.value=new Date,this.updateView(),this.dispatchChange()}goToDate(e){this.displayDate="string"==typeof e?new Date(e):e,this.value=this.displayDate,this.updateView(),this.dispatchChange()}previousMonth(){this.displayDate=new Date(this.displayDate.getFullYear(),this.displayDate.getMonth()-1),this.updateView()}nextMonth(){this.displayDate=new Date(this.displayDate.getFullYear(),this.displayDate.getMonth()+1),this.updateView()}previousWeek(){this.displayDate=new Date(this.displayDate.getTime()-6048e5),this.updateView()}nextWeek(){this.displayDate=new Date(this.displayDate.getTime()+6048e5),this.updateView()}previousDay(){this.displayDate=new Date(this.displayDate.getTime()-864e5),this.updateView()}nextDay(){this.displayDate=new Date(this.displayDate.getTime()+864e5),this.updateView()}getDisplayedMonth(){return{month:this.displayDate.getMonth(),year:this.displayDate.getFullYear()}}getEventsForDate(e){const t="string"==typeof e?new Date(e):e,a=t.getTime();return this.events.filter(e=>{if(!e.start)return!1;const r="string"==typeof e.start?new Date(e.start):e.start,i=new Date(r.getFullYear(),r.getMonth(),r.getDate()).getTime();if(!e.end)return this.isSameDay(t,r);const n="string"==typeof e.end?new Date(e.end):e.end,s=new Date(n.getFullYear(),n.getMonth(),n.getDate()).getTime();return a>=i&&a<=s})}formatDate(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}isSameDay(e,t){return this.formatDate(e)===this.formatDate(t)}isToday(e){return this.isSameDay(e,new Date)}isSelected(e){const t="string"==typeof this.value?new Date(this.value):this.value;return this.isSameDay(e,t)}isDisabled(e){if(this.minDate){const t="string"==typeof this.minDate?new Date(this.minDate):this.minDate;if(e<t)return!0}if(this.maxDate){const t="string"==typeof this.maxDate?new Date(this.maxDate):this.maxDate;if(e>t)return!0}return this.disabledDates.some(t=>{const a="string"==typeof t?new Date(t):t;return this.isSameDay(e,a)})}handleDayClick(e){this.noDaySelect||this.isDisabled(e)||(this.value=e,this.updateView(),this.dispatchChange())}handleEventClick(e,t){t.stopPropagation(),this.dispatchEventClick(e)}getMonthDays(){const e=this.displayDate.getFullYear(),t=this.displayDate.getMonth(),a=new Date(e,t,1).getDay(),r=new Date(e,t,1-(a-this.firstDayOfWeek+7)%7),i=[];for(let e=0;e<42;e++)i.push(new Date(r.getFullYear(),r.getMonth(),r.getDate()+e));return i}getWeekdays(){const e=[],t=new Date(2024,0,this.firstDayOfWeek);for(let a=0;a<7;a++){const r=new Date(t);r.setDate(t.getDate()+a),e.push(r.toLocaleDateString(this.locale,{weekday:"short"}))}return e}handlePropertyChange(){this.grid&&this.updateView()}handleWeekdayInputsChange(){this.grid&&(this.grid.querySelectorAll(".calendar__weekday").forEach(e=>e.remove()),this.getWeekdays().forEach((e,t)=>{const a=document.createElement("div");a.className="calendar__weekday",a.textContent=e,a.style.gridRow="1",a.style.gridColumn=String(t+1),this.grid.insertBefore(a,this.grid.children[t]||null)}),this.updateView())}static{r(i,S)}};return ne=i})();return e.SniceCalendar=i,e}({},Snice);
|
|
28
|
+
`}})})();let i=(()=>{let e,i,n,s,o,l,c,d,h,p,v,u,g,m,b,f,y,k,w,_,D,x,E,C,S,z=[t.element("snice-calendar")],M=[],A=HTMLElement,T=[],P=[],N=[],B=[],I=[],$=[],L=[],F=[],O=[],W=[],j=[],q=[],V=[],Y=[],R=[],U=[],H=[],G=[],X=[],K=[],J=[],Q=[],Z=[],ee=[],te=[],ae=[],re=[],ie=[],ne=[];var se=class extends A{static{i=this}constructor(){super(...arguments),this.value=(r(this,T),r(this,P,new Date)),this.view=(r(this,N),r(this,B,"month")),this.events=(r(this,I),r(this,$,[])),this.minDate=(r(this,L),r(this,F,"")),this.maxDate=(r(this,O),r(this,W,"")),this.disabledDates=(r(this,j),r(this,q,[])),this.highlightToday=(r(this,V),r(this,Y,!0)),this.showWeekNumbers=(r(this,R),r(this,U,!1)),this.firstDayOfWeek=(r(this,H),r(this,G,0)),this.locale=(r(this,X),r(this,K,"en-US")),this.noDaySelect=(r(this,J),r(this,Q,!1)),this.cellSizing=(r(this,Z),r(this,ee,"square")),this.eventTooltip=(r(this,te),r(this,ae,null)),this.eventPopover=(r(this,re),r(this,ie,null)),this.displayDate=(r(this,ne),new Date),this.tooltipToken=0,this.tooltipBar=null,this.popoverToken=0,this.popoverBar=null,this.boundPopoverEscape=e=>{"Escape"===e.key&&this.popoverBar&&this.closeEventPopover()},this.boundPopoverOutside=e=>{this.popoverBar&&(e.composedPath().includes(this.popoverEl)||this.closeEventPopover({returnFocus:!1}))},this.dayCells=[],this.focusedDate=null,this.handleGridKeydown=e=>{const t=e.target.__date;if(!t)return;let a=null,r=null;switch(e.key){case"ArrowLeft":a=-1;break;case"ArrowRight":a=1;break;case"ArrowUp":a=-7;break;case"ArrowDown":a=7;break;case"Home":a=-t.getDay();break;case"End":a=6-t.getDay();break;case"PageUp":r=-1;break;case"PageDown":r=1;break;case"Enter":case" ":return e.preventDefault(),void this.handleDayClick(t);default:return}e.preventDefault();const i=new Date(t);null!==a&&i.setDate(t.getDate()+a),null!==r&&i.setMonth(t.getMonth()+r),i.getMonth()===this.displayDate.getMonth()&&i.getFullYear()===this.displayDate.getFullYear()||(this.displayDate=new Date(i.getFullYear(),i.getMonth(),1)),this.focusedDate=i,this.updateView(),requestAnimationFrame(()=>{const e=this.dayCells.find(e=>{return a=i,(t=e.__date).getFullYear()===a.getFullYear()&&t.getMonth()===a.getMonth()&&t.getDate()===a.getDate();var t,a});e?.focus()})}}static{const r="function"==typeof Symbol&&Symbol.metadata?Object.create(A[Symbol.metadata]??null):void 0;n=[t.property({type:Date})],s=[t.property({attribute:"view"})],o=[t.property({type:Array,attribute:!1})],l=[t.property({type:Date,attribute:"min-date"})],c=[t.property({type:Date,attribute:"max-date"})],d=[t.property({type:Array,attribute:!1})],h=[t.property({type:Boolean,attribute:"highlight-today"})],p=[t.property({type:Boolean,attribute:"show-week-numbers"})],v=[t.property({type:Number,attribute:"first-day-of-week"})],u=[t.property({attribute:"locale"})],g=[t.property({type:Boolean,attribute:"no-day-select"})],m=[t.property({attribute:"cell-sizing"})],b=[t.property({attribute:!1})],f=[t.property({attribute:!1})],y=[t.dispatch("calendar-change",{bubbles:!0,composed:!0})],k=[t.dispatch("calendar-event-click",{bubbles:!0,composed:!0})],w=[t.dispatch("calendar-more-click",{bubbles:!0,composed:!0})],_=[t.styles()],D=[t.ready()],x=[t.request("calendar/event-popover")],E=[t.dispose()],C=[t.watch("value"),t.watch("events"),t.watch("eventTooltip"),t.watch("noDaySelect"),t.watch("cellSizing")],S=[t.watch("locale"),t.watch("firstDayOfWeek")],a(this,null,y,{kind:"method",name:"dispatchChange",static:!1,private:!1,access:{has:e=>"dispatchChange"in e,get:e=>e.dispatchChange},metadata:r},null,T),a(this,null,k,{kind:"method",name:"dispatchEventClick",static:!1,private:!1,access:{has:e=>"dispatchEventClick"in e,get:e=>e.dispatchEventClick},metadata:r},null,T),a(this,null,w,{kind:"method",name:"dispatchMoreClick",static:!1,private:!1,access:{has:e=>"dispatchMoreClick"in e,get:e=>e.dispatchMoreClick},metadata:r},null,T),a(this,null,_,{kind:"method",name:"styles",static:!1,private:!1,access:{has:e=>"styles"in e,get:e=>e.styles},metadata:r},null,T),a(this,null,D,{kind:"method",name:"initialize",static:!1,private:!1,access:{has:e=>"initialize"in e,get:e=>e.initialize},metadata:r},null,T),a(this,null,x,{kind:"method",name:"requestEventPopoverContent",static:!1,private:!1,access:{has:e=>"requestEventPopoverContent"in e,get:e=>e.requestEventPopoverContent},metadata:r},null,T),a(this,null,E,{kind:"method",name:"cleanupPopover",static:!1,private:!1,access:{has:e=>"cleanupPopover"in e,get:e=>e.cleanupPopover},metadata:r},null,T),a(this,null,C,{kind:"method",name:"handlePropertyChange",static:!1,private:!1,access:{has:e=>"handlePropertyChange"in e,get:e=>e.handlePropertyChange},metadata:r},null,T),a(this,null,S,{kind:"method",name:"handleWeekdayInputsChange",static:!1,private:!1,access:{has:e=>"handleWeekdayInputsChange"in e,get:e=>e.handleWeekdayInputsChange},metadata:r},null,T),a(null,null,n,{kind:"field",name:"value",static:!1,private:!1,access:{has:e=>"value"in e,get:e=>e.value,set:(e,t)=>{e.value=t}},metadata:r},P,N),a(null,null,s,{kind:"field",name:"view",static:!1,private:!1,access:{has:e=>"view"in e,get:e=>e.view,set:(e,t)=>{e.view=t}},metadata:r},B,I),a(null,null,o,{kind:"field",name:"events",static:!1,private:!1,access:{has:e=>"events"in e,get:e=>e.events,set:(e,t)=>{e.events=t}},metadata:r},$,L),a(null,null,l,{kind:"field",name:"minDate",static:!1,private:!1,access:{has:e=>"minDate"in e,get:e=>e.minDate,set:(e,t)=>{e.minDate=t}},metadata:r},F,O),a(null,null,c,{kind:"field",name:"maxDate",static:!1,private:!1,access:{has:e=>"maxDate"in e,get:e=>e.maxDate,set:(e,t)=>{e.maxDate=t}},metadata:r},W,j),a(null,null,d,{kind:"field",name:"disabledDates",static:!1,private:!1,access:{has:e=>"disabledDates"in e,get:e=>e.disabledDates,set:(e,t)=>{e.disabledDates=t}},metadata:r},q,V),a(null,null,h,{kind:"field",name:"highlightToday",static:!1,private:!1,access:{has:e=>"highlightToday"in e,get:e=>e.highlightToday,set:(e,t)=>{e.highlightToday=t}},metadata:r},Y,R),a(null,null,p,{kind:"field",name:"showWeekNumbers",static:!1,private:!1,access:{has:e=>"showWeekNumbers"in e,get:e=>e.showWeekNumbers,set:(e,t)=>{e.showWeekNumbers=t}},metadata:r},U,H),a(null,null,v,{kind:"field",name:"firstDayOfWeek",static:!1,private:!1,access:{has:e=>"firstDayOfWeek"in e,get:e=>e.firstDayOfWeek,set:(e,t)=>{e.firstDayOfWeek=t}},metadata:r},G,X),a(null,null,u,{kind:"field",name:"locale",static:!1,private:!1,access:{has:e=>"locale"in e,get:e=>e.locale,set:(e,t)=>{e.locale=t}},metadata:r},K,J),a(null,null,g,{kind:"field",name:"noDaySelect",static:!1,private:!1,access:{has:e=>"noDaySelect"in e,get:e=>e.noDaySelect,set:(e,t)=>{e.noDaySelect=t}},metadata:r},Q,Z),a(null,null,m,{kind:"field",name:"cellSizing",static:!1,private:!1,access:{has:e=>"cellSizing"in e,get:e=>e.cellSizing,set:(e,t)=>{e.cellSizing=t}},metadata:r},ee,te),a(null,null,b,{kind:"field",name:"eventTooltip",static:!1,private:!1,access:{has:e=>"eventTooltip"in e,get:e=>e.eventTooltip,set:(e,t)=>{e.eventTooltip=t}},metadata:r},ae,re),a(null,null,f,{kind:"field",name:"eventPopover",static:!1,private:!1,access:{has:e=>"eventPopover"in e,get:e=>e.eventPopover,set:(e,t)=>{e.eventPopover=t}},metadata:r},ie,ne),a(null,e={value:i},z,{kind:"class",name:i.name,metadata:r},null,M),se=i=e.value,r&&Object.defineProperty(i,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:r})}computeRovingIndex(e){const t=(e,t)=>e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate();if(this.focusedDate){const a=e.findIndex(e=>t(e,this.focusedDate));if(a>=0)return a}if(this.value){const a=this.value instanceof Date?this.value:new Date(this.value);if(!isNaN(a.getTime())){const r=e.findIndex(e=>t(e,a));if(r>=0)return r}}const a=new Date,r=e.findIndex(e=>t(e,a));return r>=0?r:e.findIndex(e=>e.getMonth()===this.displayDate.getMonth())}dispatchChange(){return{value:this.value,calendar:this}}dispatchEventClick(e){return{event:e,calendar:this}}dispatchMoreClick(e,t){return{date:e,count:t,calendar:this}}styles(){return t.css`${":host([hidden]){display:none}:host{display:block;font-family:var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);contain:layout style}.calendar{width:100%;max-width:37.5rem}.calendar__header{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);display:flex;align-items:center;justify-content:space-between;padding:var(--snice-spacing-md,1rem);background:var(--snice-color-surface,rgb(255 255 255));border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__title{font-family:var(--snice-font-family-display, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif);font-size:var(--snice-heading-md, 1.125rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text,rgb(23 23 23))}.calendar__nav{display:flex;gap:var(--snice-spacing-xs,.5rem)}.calendar__nav-button{padding:var(--snice-spacing-xs,.5rem) var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));background:var(--snice-color-surface,rgb(255 255 255));border-radius:var(--snice-border-radius-md,.25rem);cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease,border-color var(--snice-transition-fast, 150ms) ease;font-size:var(--snice-font-size-sm, .875rem);color:var(--snice-color-text,rgb(23 23 23));font-family:inherit}.calendar__nav-button:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250));border-color:var(--snice-color-border-hover,rgb(204 204 204))}.calendar__nav-button:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__grid{display:grid;grid-template-columns:repeat(7,1fr);background:var(--snice-color-surface,rgb(255 255 255));container-type:inline-size}.calendar__weekday{padding:var(--snice-spacing-sm,.75rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-semibold,600);color:var(--snice-color-text-secondary,rgb(82 82 82));text-transform:uppercase;letter-spacing:var(--snice-tracking-widest, .1em);border-bottom:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day{box-sizing:border-box;min-width:0;min-height:max(calc(100cqw / 7),3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)));padding:var(--snice-spacing-xs,.5rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-top:none;border-left:none;cursor:pointer;transition:background-color var(--snice-transition-fast, 150ms) ease;position:relative;background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));overflow:hidden}.calendar__day:hover{background:var(--snice-color-surface-container-low,rgb(250 250 250))}.calendar__day:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__day:nth-child(7n+1){border-left:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar__day--stretch{min-height:max(3rem,calc(2.125rem + var(--calendar-week-lanes,0) * 1.375rem + var(--calendar-week-more,0rem)))}.calendar__day--static{cursor:default}.calendar__day--static:hover{background:var(--snice-color-surface,rgb(255 255 255))}.calendar__day--static.calendar__day--today:hover{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--other-month{background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5}.calendar__day--other-month:hover{opacity:.7}.calendar__day--today{background:var(--snice-color-primary-subtle,rgb(239 246 255))}.calendar__day--today:hover{background:var(--snice-color-primary-subtle-hover,rgb(219 234 254))}.calendar__day--selected{background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__day--selected:hover{background:var(--snice-color-primary-hover,rgb(29 78 216))}.calendar__day--disabled{background:var(--snice-color-surface-container,rgb(241 241 241));color:var(--snice-color-text-tertiary,rgb(115 115 115));opacity:.5;cursor:not-allowed}.calendar__day--disabled:hover{background:var(--snice-color-surface-container,rgb(241 241 241))}.calendar__day-number{font-size:var(--snice-font-size-sm, .875rem);font-weight:var(--snice-font-weight-medium,500);margin-bottom:var(--snice-spacing-2xs,.25rem)}.calendar__day--selected .calendar__day-number{color:var(--snice-color-text-inverse,rgb(250 250 250))}.calendar__event-bar{display:flex;align-items:center;gap:var(--snice-spacing-3xs,.125rem);align-self:start;margin-top:calc(1.875rem + var(--calendar-event-lane,0) * 1.375rem);margin-inline:var(--snice-spacing-3xs,0.125rem);height:1.125rem;line-height:1.125rem;font-size:var(--snice-font-size-2xs, .625rem);padding:0 var(--snice-spacing-2xs,.25rem);border-radius:var(--snice-border-radius-sm,.125rem);background:var(--snice-color-primary,rgb(37 99 235));color:var(--snice-color-text-inverse,rgb(250 250 250));white-space:nowrap;overflow:hidden;cursor:pointer;z-index:1;transition:opacity var(--snice-transition-fast, 150ms) ease}.calendar__event-title{overflow:hidden;text-overflow:ellipsis;min-width:0}.calendar__event-avatar{flex:none;--avatar-size:0.875rem;font-size:.375rem;border-radius:50%;overflow:hidden}.calendar__popover{position:fixed;z-index:var(--snice-z-floating,1000);min-width:14rem;max-width:22rem;padding:var(--snice-spacing-sm,.75rem);border:1px solid var(--snice-color-border,rgb(226 226 226));border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-color-surface,rgb(255 255 255));color:var(--snice-color-text,rgb(23 23 23));font-size:var(--snice-font-size-sm, .875rem);line-height:1.5;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1))}.calendar__popover:focus-visible{outline:0;box-shadow:var(--snice-shadow-lg,0 10px 15px -3px rgb(0 0 0 / .1)),0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__popover-loading{color:var(--snice-color-text-secondary,rgb(82 82 82));font-size:var(--snice-font-size-xs, .75rem)}.calendar__tooltip{position:fixed;z-index:var(--snice-z-floating,1000);max-width:18rem;padding:var(--snice-spacing-2xs,.25rem) var(--snice-spacing-xs,.5rem);border-radius:var(--snice-border-radius-md,.25rem);background:var(--snice-tooltip-bg,rgb(51 51 51));color:var(--snice-color-text-inverse,rgb(250 250 250));font-size:var(--snice-font-size-xs, .75rem);line-height:1.4;box-shadow:var(--snice-shadow-md,0 4px 6px -1px rgb(0 0 0 / .1));pointer-events:none}.calendar__event-bar:hover{opacity:.8}.calendar__event-bar--continues-left{border-top-left-radius:0;border-bottom-left-radius:0;margin-inline-start:0}.calendar__event-bar--continues-right{border-top-right-radius:0;border-bottom-right-radius:0;margin-inline-end:0}.calendar__more{position:absolute;bottom:var(--snice-spacing-3xs,.125rem);left:var(--snice-spacing-2xs,.25rem);font-size:var(--snice-font-size-xs, .75rem);font-weight:var(--snice-font-weight-medium,500);color:var(--snice-color-text,rgb(23 23 23));cursor:pointer}.calendar__more:hover{text-decoration:underline}.calendar__more:focus-visible{outline:0;box-shadow:0 0 0 var(--snice-focus-ring-width,2px) var(--snice-focus-ring-color,rgb(59 130 246 / .5))}.calendar__week-number{padding:var(--snice-spacing-sm,.75rem) var(--snice-spacing-xs,.5rem);text-align:center;font-size:var(--snice-font-size-xs, .75rem);color:var(--snice-color-text-tertiary,rgb(115 115 115));background:var(--snice-color-surface-container-low,rgb(250 250 250));border-right:1px solid var(--snice-color-border,rgb(226 226 226))}.calendar--week .calendar__grid{grid-template-columns:repeat(7,1fr)}.calendar--week .calendar__day{min-height:7.5rem}.calendar--day .calendar__grid{grid-template-columns:1fr}.calendar--day .calendar__day{min-height:25rem}@media (prefers-reduced-motion:reduce){*{transition-duration:0s!important;animation-duration:0s!important}}"}`}initialize(){this.createDOM(),this.updateView()}createDOM(){const e=this.shadowRoot;this.container=document.createElement("div"),this.container.className=`calendar calendar--${this.view}`,this.container.setAttribute("part","base"),this.header=document.createElement("div"),this.header.className="calendar__header",this.header.setAttribute("part","header");const t=document.createElement("div");t.className="calendar__title";const a=document.createElement("div");a.className="calendar__nav";const r=document.createElement("button");r.className="calendar__nav-button",r.textContent="Today",r.onclick=()=>this.goToToday();const i=document.createElement("button");i.className="calendar__nav-button",i.textContent="‹",i.onclick=()=>this.previousMonth();const n=document.createElement("button");n.className="calendar__nav-button",n.textContent="›",n.onclick=()=>this.nextMonth(),a.appendChild(r),a.appendChild(i),a.appendChild(n),this.header.appendChild(t),this.header.appendChild(a),this.grid=document.createElement("div"),this.grid.className="calendar__grid",this.grid.setAttribute("part","grid"),this.getWeekdays().forEach((e,t)=>{const a=document.createElement("div");a.className="calendar__weekday",a.textContent=e,a.style.gridRow="1",a.style.gridColumn=String(t+1),this.grid.appendChild(a)}),this.grid.setAttribute("role","grid"),this.grid.setAttribute("aria-label","Calendar"),this.grid.addEventListener("keydown",this.handleGridKeydown);for(let e=0;e<42;e++){const t=document.createElement("div");t.className="calendar__day",t.setAttribute("role","gridcell"),t.setAttribute("tabindex",0===e?"0":"-1"),t.style.gridRow=String(Math.floor(e/7)+2),t.style.gridColumn=String(e%7+1);const a=document.createElement("div");a.className="calendar__day-number",t.appendChild(a),this.grid.appendChild(t),this.dayCells.push(t)}this.tooltipEl=document.createElement("div"),this.tooltipEl.className="calendar__tooltip",this.tooltipEl.setAttribute("part","event-tooltip"),this.tooltipEl.setAttribute("role","tooltip"),this.tooltipEl.id="calendar-event-tooltip",this.tooltipEl.hidden=!0,this.popoverEl=document.createElement("div"),this.popoverEl.className="calendar__popover",this.popoverEl.setAttribute("part","event-popover"),this.popoverEl.setAttribute("role","dialog"),this.popoverEl.setAttribute("aria-label","Event details"),this.popoverEl.tabIndex=-1,this.popoverEl.hidden=!0,this.container.appendChild(this.header),this.container.appendChild(this.grid),this.container.appendChild(this.tooltipEl),this.container.appendChild(this.popoverEl),e.appendChild(this.container)}async*requestEventPopoverContent(e){return await(yield{event:e})}async openEventPopover(e,t){const a=++this.popoverToken;this.hideEventTooltip(),this.popoverBar=e,this.popoverEl.replaceChildren();const r=document.createElement("div");let i;r.className="calendar__popover-loading",r.textContent="Loading…",this.popoverEl.appendChild(r),this.popoverEl.hidden=!1,this.positionPopover(e),document.addEventListener("keydown",this.boundPopoverEscape,!0),document.addEventListener("mousedown",this.boundPopoverOutside,!0);try{i=!0!==t.popover&&t.popover?"function"==typeof t.popover?t.popover():t.popover:this.eventPopover?await this.eventPopover(t):await this.requestEventPopoverContent(t)}catch{i=void 0}if(a===this.popoverToken){if(null==i)return console.warn(`[snice-calendar] event "${String(t.id)}" enables a popover but no content was provided — set eventPopover, event.popover content, or a @respond('calendar/event-popover') handler.`),void this.closeEventPopover({returnFocus:!1});"string"==typeof i?this.popoverEl.textContent=i:this.popoverEl.replaceChildren(i),this.positionPopover(e),this.popoverEl.focus()}}positionPopover(e){const t=e.getBoundingClientRect();this.popoverEl.style.left=`${Math.max(4,t.left)}px`,this.popoverEl.style.top=`${t.bottom+6}px`}closeEventPopover(e={}){if(!this.popoverBar)return;this.popoverToken++;const t=this.popoverBar;this.popoverBar=null,this.popoverEl.hidden=!0,this.popoverEl.replaceChildren(),document.removeEventListener("keydown",this.boundPopoverEscape,!0),document.removeEventListener("mousedown",this.boundPopoverOutside,!0),!1!==e.returnFocus&&t.isConnected&&t.focus()}cleanupPopover(){document.removeEventListener("keydown",this.boundPopoverEscape,!0),document.removeEventListener("mousedown",this.boundPopoverOutside,!0)}async showEventTooltip(e,t){const a=++this.tooltipToken,r=this.eventTooltip;let i;if(r)try{i=await r(t)}catch{i=t.tooltip}else i=t.tooltip;if(a!==this.tooltipToken||null==i)return;"string"==typeof i?this.tooltipEl.textContent=i:this.tooltipEl.replaceChildren(i),this.tooltipEl.hidden=!1,this.tooltipBar=e,e.setAttribute("aria-describedby",this.tooltipEl.id);const n=e.getBoundingClientRect();this.tooltipEl.style.left=`${Math.max(4,n.left)}px`,this.tooltipEl.style.top=`${Math.max(4,n.top-this.tooltipEl.offsetHeight-6)}px`}hideEventTooltip(){this.tooltipToken++,this.tooltipEl.hidden=!0,this.tooltipBar?.removeAttribute("aria-describedby"),this.tooltipBar=null}updateView(){const e=this.displayDate.toLocaleDateString(this.locale,{month:"long",year:"numeric"}),t=this.header.querySelector(".calendar__title");t&&(t.textContent=e);const a=this.getMonthDays(),r=this.displayDate.getMonth(),i=this.computeRovingIndex(a);a.forEach((e,t)=>{const a=this.dayCells[t];if(!a)return;const n=e.getMonth()!==r,s=this.highlightToday&&this.isToday(e),o=!this.noDaySelect&&this.isSelected(e),l=this.isDisabled(e);a.className="calendar__day",n&&a.classList.add("calendar__day--other-month"),s&&a.classList.add("calendar__day--today"),o&&a.classList.add("calendar__day--selected"),l&&a.classList.add("calendar__day--disabled"),this.noDaySelect&&a.classList.add("calendar__day--static"),"stretch"===this.cellSizing&&a.classList.add("calendar__day--stretch"),a.setAttribute("role","gridcell"),a.setAttribute("aria-selected",o?"true":"false"),a.setAttribute("aria-disabled",l?"true":"false"),a.setAttribute("aria-current",s&&!n?"date":"false"),a.setAttribute("tabindex",t===i?"0":"-1"),a.setAttribute("aria-label",e.toLocaleDateString(this.locale,{dateStyle:"full"})),a.__date=e;const c=a.querySelector(".calendar__day-number");c&&(c.textContent=String(e.getDate())),a.onclick=()=>this.handleDayClick(e)}),this.renderEventStripes(a)}static{this.MAX_EVENT_LANES=3}renderEventStripes(e){if(this.closeEventPopover({returnFocus:!1}),this.grid.querySelectorAll(".calendar__event-bar").forEach(e=>e.remove()),this.dayCells.forEach(e=>{e.querySelector(".calendar__more")?.remove(),e.style.removeProperty("--calendar-week-lanes"),e.style.removeProperty("--calendar-week-more")}),!this.events||0===this.events.length)return;const t=e.map(e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()),a=new Map(t.map((e,t)=>[e,t])),r=t[0],i=t[t.length-1],n=e=>{const t="string"==typeof e?new Date(e):e;return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()},s=[];this.events.forEach((e,o)=>{if(!e.start)return;const l=n(e.start);if(isNaN(l))return;const c=e.end?Math.max(n(e.end),l):l;if(isNaN(c)||c<r||l>i)return;const d=l<r,h=c>i,p=d?0:a.get(l),v=h?t.length-1:a.get(c);s.push({event:e,startIdx:p,endIdx:v,startsBeforeGrid:d,endsAfterGrid:h,startTime:l,duration:c-l,order:o})}),s.sort((e,t)=>e.startTime-t.startTime||t.duration-e.duration||e.order-t.order);const o=new Array(t.length).fill(0),l=Math.floor(t.length/7),c=new Array(l).fill(0);for(let e=0;e<l;e++){const t=7*e,a=t+6,r=[];for(const i of s){if(i.endIdx<t||i.startIdx>a)continue;const n=Math.max(i.startIdx,t),s=Math.min(i.endIdx,a),l=n-t,d=s-t;let h=0;for(;r[h]?.some(([e,t])=>l<=t&&d>=e);)h++;if((r[h]??=[]).push([l,d]),c[e]=Math.min(Math.max(c[e],h+1),se.MAX_EVENT_LANES),h>=se.MAX_EVENT_LANES){for(let e=n;e<=s;e++)o[e]++;continue}const p=n>i.startIdx||n===i.startIdx&&i.startsBeforeGrid,v=s<i.endIdx||s===i.endIdx&&i.endsAfterGrid,u=document.createElement("div");u.className="calendar__event-bar",p&&u.classList.add("calendar__event-bar--continues-left"),v&&u.classList.add("calendar__event-bar--continues-right");const g=i.event.className?i.event.className.split(/\s+/).filter(Boolean):[];if(u.classList.add(...g),u.setAttribute("part",["event-bar",...g].join(" ")),u.setAttribute("data-event-id",String(i.event.id)),u.setAttribute("data-lane",String(h)),u.style.gridRow=String(e+2),u.style.gridColumn=`${l+1} / ${d+2}`,u.style.setProperty("--calendar-event-lane",String(h)),i.event.color&&(u.style.background=i.event.color),i.event.avatar){const e="string"==typeof i.event.avatar?{src:i.event.avatar}:i.event.avatar,t=document.createElement("snice-avatar");t.className="calendar__event-avatar",t.setAttribute("part","event-avatar"),t.setAttribute("size","xs"),t.setAttribute("shape","circle"),t.setAttribute("loading","eager"),e.src&&(t.src=e.src),e.name&&(t.name=e.name),e.alt&&(t.alt=e.alt),u.appendChild(t)}const m=document.createElement("span");m.className="calendar__event-title",m.textContent=i.event.title,u.appendChild(m),i.event.tooltip||this.eventTooltip?(u.onmouseenter=()=>this.showEventTooltip(u,i.event),u.onmouseleave=()=>this.hideEventTooltip()):u.title=i.event.title,i.event.popover?(u.setAttribute("role","button"),u.setAttribute("tabindex","0"),u.setAttribute("aria-haspopup","dialog"),u.onkeydown=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),this.openEventPopover(u,i.event))},u.onclick=e=>{this.handleEventClick(i.event,e),this.openEventPopover(u,i.event)}):u.onclick=e=>this.handleEventClick(i.event,e),this.grid.appendChild(u)}}o.forEach((t,a)=>{if(0===t)return;const r=this.dayCells[a];if(!r)return;const i=e[a],n=document.createElement("div");n.className="calendar__more",n.setAttribute("part","more-chip"),n.textContent=`+${t} more`,n.setAttribute("role","button"),n.setAttribute("tabindex","0"),n.setAttribute("aria-label",`${t} more event${1===t?"":"s"} on ${i.toLocaleDateString(this.locale,{dateStyle:"full"})}`),n.onclick=e=>this.handleMoreClick(i,t,e),n.onkeydown=e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),this.handleMoreClick(i,t,e))},r.appendChild(n)});for(let e=0;e<l;e++){if(0===c[e])continue;const t=o.slice(7*e,7*e+7).some(e=>e>0);for(let a=7*e;a<7*e+7;a++){const r=this.dayCells[a];r&&(r.style.setProperty("--calendar-week-lanes",String(c[e])),t&&r.style.setProperty("--calendar-week-more","1rem"))}}}goToToday(){this.displayDate=new Date,this.value=new Date,this.updateView(),this.dispatchChange()}goToDate(e){this.displayDate="string"==typeof e?new Date(e):e,this.value=this.displayDate,this.updateView(),this.dispatchChange()}previousMonth(){this.displayDate=new Date(this.displayDate.getFullYear(),this.displayDate.getMonth()-1),this.updateView()}nextMonth(){this.displayDate=new Date(this.displayDate.getFullYear(),this.displayDate.getMonth()+1),this.updateView()}previousWeek(){this.displayDate=new Date(this.displayDate.getTime()-6048e5),this.updateView()}nextWeek(){this.displayDate=new Date(this.displayDate.getTime()+6048e5),this.updateView()}previousDay(){this.displayDate=new Date(this.displayDate.getTime()-864e5),this.updateView()}nextDay(){this.displayDate=new Date(this.displayDate.getTime()+864e5),this.updateView()}getDisplayedMonth(){return{month:this.displayDate.getMonth(),year:this.displayDate.getFullYear()}}getEventsForDate(e){const t="string"==typeof e?new Date(e):e,a=t.getTime();return this.events.filter(e=>{if(!e.start)return!1;const r="string"==typeof e.start?new Date(e.start):e.start,i=new Date(r.getFullYear(),r.getMonth(),r.getDate()).getTime();if(!e.end)return this.isSameDay(t,r);const n="string"==typeof e.end?new Date(e.end):e.end,s=new Date(n.getFullYear(),n.getMonth(),n.getDate()).getTime();return a>=i&&a<=s})}formatDate(e){return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`}isSameDay(e,t){return this.formatDate(e)===this.formatDate(t)}isToday(e){return this.isSameDay(e,new Date)}isSelected(e){const t="string"==typeof this.value?new Date(this.value):this.value;return this.isSameDay(e,t)}isDisabled(e){if(this.minDate){const t="string"==typeof this.minDate?new Date(this.minDate):this.minDate;if(e<t)return!0}if(this.maxDate){const t="string"==typeof this.maxDate?new Date(this.maxDate):this.maxDate;if(e>t)return!0}return this.disabledDates.some(t=>{const a="string"==typeof t?new Date(t):t;return this.isSameDay(e,a)})}handleDayClick(e){this.noDaySelect||this.isDisabled(e)||(this.value=e,this.updateView(),this.dispatchChange())}handleEventClick(e,t){t.stopPropagation(),this.dispatchEventClick(e)}handleMoreClick(e,t,a){a.stopPropagation(),this.dispatchMoreClick(e,t)}getMonthDays(){const e=this.displayDate.getFullYear(),t=this.displayDate.getMonth(),a=new Date(e,t,1).getDay(),r=new Date(e,t,1-(a-this.firstDayOfWeek+7)%7),i=[];for(let e=0;e<42;e++)i.push(new Date(r.getFullYear(),r.getMonth(),r.getDate()+e));return i}getWeekdays(){const e=[],t=new Date(2024,0,this.firstDayOfWeek);for(let a=0;a<7;a++){const r=new Date(t);r.setDate(t.getDate()+a),e.push(r.toLocaleDateString(this.locale,{weekday:"short"}))}return e}handlePropertyChange(){this.grid&&this.updateView()}handleWeekdayInputsChange(){this.grid&&(this.grid.querySelectorAll(".calendar__weekday").forEach(e=>e.remove()),this.getWeekdays().forEach((e,t)=>{const a=document.createElement("div");a.className="calendar__weekday",a.textContent=e,a.style.gridRow="1",a.style.gridColumn=String(t+1),this.grid.insertBefore(a,this.grid.children[t]||null)}),this.updateView())}static{r(i,M)}};return se=i})();return e.SniceCalendar=i,e}({},Snice);
|
|
29
29
|
//# sourceMappingURL=snice-calendar.min.js.map
|