snice 7.5.0 → 7.7.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.
Files changed (265) hide show
  1. package/adapters/react/SniceProvider.js +1 -1
  2. package/adapters/react/SniceRouter.js +1 -1
  3. package/adapters/react/avatar.d.ts +1 -0
  4. package/adapters/react/avatar.d.ts.map +1 -1
  5. package/adapters/react/avatar.js +1 -1
  6. package/adapters/react/avatar.js.map +1 -1
  7. package/adapters/react/avatar.tsx +2 -1
  8. package/adapters/react/calendar.d.ts +4 -0
  9. package/adapters/react/calendar.d.ts.map +1 -1
  10. package/adapters/react/calendar.js +1 -1
  11. package/adapters/react/calendar.js.map +1 -1
  12. package/adapters/react/calendar.tsx +5 -1
  13. package/adapters/react/matchRoute.js +68 -2
  14. package/adapters/react/matchRoute.js.map +1 -1
  15. package/adapters/react/route-match.d.ts +7 -0
  16. package/adapters/react/useRequestHandler.js +1 -1
  17. package/bin/analyzer-contracts.js +60 -2
  18. package/bin/project-analyzer.js +1262 -118
  19. package/bin/snice.js +95 -5
  20. package/custom-elements.json +112 -0
  21. package/dist/cdn/accordion/snice-accordion.js +1 -1
  22. package/dist/cdn/action-bar/snice-action-bar.js +1 -1
  23. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  24. package/dist/cdn/alert/snice-alert.js +1 -1
  25. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  26. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  27. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  28. package/dist/cdn/availability/snice-availability.js +1 -1
  29. package/dist/cdn/avatar/README.md +1 -1
  30. package/dist/cdn/avatar/snice-avatar.js +9 -3
  31. package/dist/cdn/avatar/snice-avatar.js.map +1 -1
  32. package/dist/cdn/avatar/snice-avatar.min.js +2 -2
  33. package/dist/cdn/avatar/snice-avatar.min.js.map +1 -1
  34. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  35. package/dist/cdn/badge/snice-badge.js +1 -1
  36. package/dist/cdn/banner/snice-banner.js +1 -1
  37. package/dist/cdn/binpack/snice-binpack.js +1 -1
  38. package/dist/cdn/book/snice-book.js +1 -1
  39. package/dist/cdn/booking/snice-booking.js +1 -1
  40. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  41. package/dist/cdn/button/snice-button.js +2 -2
  42. package/dist/cdn/button/snice-button.js.map +1 -1
  43. package/dist/cdn/button/snice-button.min.js +1 -1
  44. package/dist/cdn/button/snice-button.min.js.map +1 -1
  45. package/dist/cdn/calendar/README.md +2 -2
  46. package/dist/cdn/calendar/snice-calendar.js +562 -40
  47. package/dist/cdn/calendar/snice-calendar.js.map +1 -1
  48. package/dist/cdn/calendar/snice-calendar.min.js +28 -1
  49. package/dist/cdn/calendar/snice-calendar.min.js.map +1 -1
  50. package/dist/cdn/camera/snice-camera.js +1 -1
  51. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  52. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  53. package/dist/cdn/card/snice-card.js +1 -1
  54. package/dist/cdn/carousel/snice-carousel.js +1 -1
  55. package/dist/cdn/cart/snice-cart.js +1 -1
  56. package/dist/cdn/chart/snice-chart.js +1 -1
  57. package/dist/cdn/chat/snice-chat.js +1 -1
  58. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  59. package/dist/cdn/chip/snice-chip.js +1 -1
  60. package/dist/cdn/code-block/snice-code-block.js +1 -1
  61. package/dist/cdn/color-display/snice-color-display.js +1 -1
  62. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  63. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  64. package/dist/cdn/comments/snice-comments.js +1 -1
  65. package/dist/cdn/countdown/snice-countdown.js +1 -1
  66. package/dist/cdn/cropper/snice-cropper.js +1 -1
  67. package/dist/cdn/data-card/snice-data-card.js +1 -1
  68. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  69. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  70. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  71. package/dist/cdn/diff/snice-diff.js +1 -1
  72. package/dist/cdn/divider/snice-divider.js +1 -1
  73. package/dist/cdn/doc/snice-doc.js +1 -1
  74. package/dist/cdn/draw/snice-draw.js +1 -1
  75. package/dist/cdn/drawer/snice-drawer.js +1 -1
  76. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  77. package/dist/cdn/estimate/snice-estimate.js +1 -1
  78. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  79. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  80. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  81. package/dist/cdn/flow/snice-flow.js +1 -1
  82. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  83. package/dist/cdn/funnel/snice-funnel.js +1 -1
  84. package/dist/cdn/gantt/snice-gantt.js +1 -1
  85. package/dist/cdn/gauge/snice-gauge.js +1 -1
  86. package/dist/cdn/grid/snice-grid.js +1 -1
  87. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  88. package/dist/cdn/image/snice-image.js +1 -1
  89. package/dist/cdn/input/snice-input.js +1 -1
  90. package/dist/cdn/invoice/snice-invoice.js +1 -1
  91. package/dist/cdn/kanban/snice-kanban.js +1 -1
  92. package/dist/cdn/key-value/snice-key-value.js +1 -1
  93. package/dist/cdn/kpi/snice-kpi.js +1 -1
  94. package/dist/cdn/layout/snice-layout.js +1 -1
  95. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  96. package/dist/cdn/link/snice-link.js +1 -1
  97. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  98. package/dist/cdn/list/snice-list.js +1 -1
  99. package/dist/cdn/location/snice-location.js +1 -1
  100. package/dist/cdn/login/README.md +1 -1
  101. package/dist/cdn/login/snice-login.js +2 -2
  102. package/dist/cdn/login/snice-login.js.map +1 -1
  103. package/dist/cdn/login/snice-login.min.js +1 -1
  104. package/dist/cdn/login/snice-login.min.js.map +1 -1
  105. package/dist/cdn/map/snice-map.js +1 -1
  106. package/dist/cdn/markdown/snice-markdown.js +1 -1
  107. package/dist/cdn/masonry/snice-masonry.js +1 -1
  108. package/dist/cdn/menu/snice-menu.js +1 -1
  109. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  110. package/dist/cdn/modal/snice-modal.js +1 -1
  111. package/dist/cdn/music-player/snice-music-player.js +1 -1
  112. package/dist/cdn/nav/snice-nav.js +1 -1
  113. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  114. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  115. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  116. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  117. package/dist/cdn/pagination/snice-pagination.js +1 -1
  118. package/dist/cdn/paint/snice-paint.js +1 -1
  119. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  120. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  121. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  122. package/dist/cdn/popover/snice-popover.js +1 -1
  123. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  124. package/dist/cdn/product-card/snice-product-card.js +1 -1
  125. package/dist/cdn/progress/snice-progress.js +1 -1
  126. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  127. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  128. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  129. package/dist/cdn/radio/snice-radio.js +1 -1
  130. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  131. package/dist/cdn/rating/snice-rating.js +1 -1
  132. package/dist/cdn/receipt/snice-receipt.js +1 -1
  133. package/dist/cdn/recipe/snice-recipe.js +1 -1
  134. package/dist/cdn/runtime/README.md +2 -2
  135. package/dist/cdn/runtime/snice-runtime.esm.js +706 -267
  136. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  137. package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
  138. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  139. package/dist/cdn/runtime/snice-runtime.js +706 -267
  140. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  141. package/dist/cdn/runtime/snice-runtime.min.js +1 -1
  142. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  143. package/dist/cdn/sankey/snice-sankey.js +1 -1
  144. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  145. package/dist/cdn/select/snice-select.js +3 -1
  146. package/dist/cdn/select/snice-select.js.map +1 -1
  147. package/dist/cdn/select/snice-select.min.js +2 -2
  148. package/dist/cdn/select/snice-select.min.js.map +1 -1
  149. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  150. package/dist/cdn/slider/snice-slider.js +1 -1
  151. package/dist/cdn/sortable/snice-sortable.js +1 -1
  152. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  153. package/dist/cdn/spinner/snice-spinner.js +1 -1
  154. package/dist/cdn/split-button/snice-split-button.js +1 -1
  155. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  156. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  157. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  158. package/dist/cdn/step-input/snice-step-input.js +1 -1
  159. package/dist/cdn/stepper/snice-stepper.js +1 -1
  160. package/dist/cdn/switch/README.md +1 -1
  161. package/dist/cdn/switch/snice-switch.js +8 -4
  162. package/dist/cdn/switch/snice-switch.js.map +1 -1
  163. package/dist/cdn/switch/snice-switch.min.js +8 -4
  164. package/dist/cdn/switch/snice-switch.min.js.map +1 -1
  165. package/dist/cdn/table/README.md +2 -2
  166. package/dist/cdn/table/snice-table.esm.js +77 -5
  167. package/dist/cdn/table/snice-table.esm.js.map +1 -1
  168. package/dist/cdn/table/snice-table.esm.min.js +68 -47
  169. package/dist/cdn/table/snice-table.esm.min.js.map +1 -1
  170. package/dist/cdn/table/snice-table.js +76 -4
  171. package/dist/cdn/table/snice-table.js.map +1 -1
  172. package/dist/cdn/table/snice-table.min.js +53 -32
  173. package/dist/cdn/table/snice-table.min.js.map +1 -1
  174. package/dist/cdn/tabs/snice-tabs.js +1 -1
  175. package/dist/cdn/tag/snice-tag.js +1 -1
  176. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  177. package/dist/cdn/terminal/snice-terminal.js +1 -1
  178. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  179. package/dist/cdn/textarea/snice-textarea.js +1 -1
  180. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  181. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  182. package/dist/cdn/timeline/snice-timeline.js +1 -1
  183. package/dist/cdn/timer/snice-timer.js +1 -1
  184. package/dist/cdn/toast/snice-toast.js +1 -1
  185. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  186. package/dist/cdn/tree/snice-tree.js +1 -1
  187. package/dist/cdn/treemap/snice-treemap.js +1 -1
  188. package/dist/cdn/user-card/snice-user-card.js +1 -1
  189. package/dist/cdn/video-player/snice-video-player.js +1 -1
  190. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  191. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  192. package/dist/cdn/weather/snice-weather.js +1 -1
  193. package/dist/cdn/work-order/snice-work-order.js +1 -1
  194. package/dist/components/avatar/snice-avatar.d.ts +1 -0
  195. package/dist/components/avatar/snice-avatar.js +8 -2
  196. package/dist/components/avatar/snice-avatar.js.map +1 -1
  197. package/dist/components/avatar/snice-avatar.types.d.ts +2 -0
  198. package/dist/components/button/snice-button.js +1 -1
  199. package/dist/components/button/snice-button.js.map +1 -1
  200. package/dist/components/calendar/snice-calendar.d.ts +38 -1
  201. package/dist/components/calendar/snice-calendar.js +390 -40
  202. package/dist/components/calendar/snice-calendar.js.map +1 -1
  203. package/dist/components/calendar/snice-calendar.types.d.ts +63 -0
  204. package/dist/components/select/snice-select.js +2 -0
  205. package/dist/components/select/snice-select.js.map +1 -1
  206. package/dist/components/switch/snice-switch.js +7 -3
  207. package/dist/components/switch/snice-switch.js.map +1 -1
  208. package/dist/components/table/snice-table.d.ts +9 -0
  209. package/dist/components/table/snice-table.js +72 -2
  210. package/dist/components/table/snice-table.js.map +1 -1
  211. package/dist/components/table/table-keyboard.js +1 -1
  212. package/dist/components/table/table-keyboard.js.map +1 -1
  213. package/dist/index.cjs +703 -264
  214. package/dist/index.cjs.map +1 -1
  215. package/dist/index.d.ts +3 -1
  216. package/dist/index.esm.js +703 -264
  217. package/dist/index.esm.js.map +1 -1
  218. package/dist/index.iife.js +703 -264
  219. package/dist/index.iife.js.map +1 -1
  220. package/dist/parts.d.ts +14 -4
  221. package/dist/react/SniceProvider.js +1 -1
  222. package/dist/react/SniceRouter.js +1 -1
  223. package/dist/react/index.js +1 -1
  224. package/dist/react/matchRoute.js +68 -2
  225. package/dist/react/matchRoute.js.map +1 -1
  226. package/dist/react/route-match.d.ts +7 -0
  227. package/dist/react/useRequestHandler.js +1 -1
  228. package/dist/render-errors.d.ts +9 -0
  229. package/dist/route-match.d.ts +7 -0
  230. package/dist/symbols.cjs +1 -1
  231. package/dist/symbols.esm.js +1 -1
  232. package/dist/template-marker.d.ts +5 -0
  233. package/dist/testing-dom.cjs +1 -1
  234. package/dist/testing-dom.esm.js +1 -1
  235. package/dist/testing.d.ts +3 -0
  236. package/dist/transitions.cjs +1 -1
  237. package/dist/transitions.esm.js +1 -1
  238. package/dist/types/dispatch-options.d.ts +5 -4
  239. package/dist/types/event-timing.d.ts +7 -0
  240. package/dist/types/index.d.ts +1 -0
  241. package/dist/types/on-options.d.ts +21 -6
  242. package/dist/utils.d.ts +3 -0
  243. package/docs/ai/DEVELOPMENT.md +1 -1
  244. package/docs/ai/api.md +7 -2
  245. package/docs/ai/cli.md +14 -0
  246. package/docs/ai/components/avatar.md +1 -0
  247. package/docs/ai/components/calendar.md +24 -1
  248. package/docs/ai/components/switch.md +3 -0
  249. package/docs/ai/components/table.md +1 -1
  250. package/docs/ai/decorators.md +3 -2
  251. package/docs/ai/events.md +45 -8
  252. package/docs/ai/rendering.md +7 -0
  253. package/docs/ai/routing.md +6 -1
  254. package/docs/ai/testing.md +17 -0
  255. package/docs/cli.md +19 -0
  256. package/docs/components/avatar.md +1 -0
  257. package/docs/components/calendar.md +112 -2
  258. package/docs/components/switch.md +7 -1
  259. package/docs/components/table.md +2 -1
  260. package/docs/events.md +90 -10
  261. package/docs/rendering.md +10 -0
  262. package/docs/routing.md +22 -1
  263. package/docs/testing.md +19 -0
  264. package/package.json +2 -2
  265. package/vscode.html-custom-data.json +28 -0
@@ -1,2 +1,29 @@
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,i,n,s){function r(e){if(void 0!==e&&"function"!=typeof e)throw new TypeError("Function expected");return e}for(var l,o=i.kind,c="getter"===o?"get":"setter"===o?"set":"value",d=!t&&e?i.static?e:e.prototype:null,h=t||(d?Object.getOwnPropertyDescriptor(d,i.name):{}),u=!1,g=a.length-1;g>=0;g--){var p={};for(var m in i)p[m]="access"===m?{}:i[m];for(var m in i.access)p.access[m]=i.access[m];p.addInitializer=function(e){if(u)throw new TypeError("Cannot add initializers after decoration has completed");s.push(r(e||null))};var y=(0,a[g])("accessor"===o?{get:h.get,set:h.set}:h[c],p);if("accessor"===o){if(void 0===y)continue;if(null===y||"object"!=typeof y)throw new TypeError("Object expected");(l=r(y.get))&&(h.get=l),(l=r(y.set))&&(h.set=l),(l=r(y.init))&&n.unshift(l)}else(l=r(y))&&("field"===o?n.unshift(l):h[c]=l)}d&&Object.defineProperty(d,i.name,h),u=!0}function i(e,t,a){for(var i=arguments.length>2,n=0;n<t.length;n++)a=i?t[n].call(e,a):t[n].call(e);return i?a:void 0}"function"==typeof SuppressedError&&SuppressedError;let n=(()=>{let e,n,s,r,l,o,c,d,h,u,g,p,m,y,v,b,f,D,_=[t.element("snice-calendar")],w=[],k=HTMLElement,x=[],C=[],E=[],S=[],M=[],T=[],A=[],N=[],F=[],W=[],z=[],O=[],Y=[],I=[],V=[],L=[],P=[],j=[],R=[],B=[],H=[];return class extends k{static{n=this}constructor(){super(...arguments),this.value=(i(this,x),i(this,C,new Date)),this.view=(i(this,E),i(this,S,"month")),this.events=(i(this,M),i(this,T,[])),this.minDate=(i(this,A),i(this,N,"")),this.maxDate=(i(this,F),i(this,W,"")),this.disabledDates=(i(this,z),i(this,O,[])),this.highlightToday=(i(this,Y),i(this,I,!0)),this.showWeekNumbers=(i(this,V),i(this,L,!1)),this.firstDayOfWeek=(i(this,P),i(this,j,0)),this.locale=(i(this,R),i(this,B,"en-US")),this.displayDate=(i(this,H),new Date),this.dayCells=[],this.focusedDate=null,this.handleGridKeydown=e=>{const t=e.target.__date;if(!t)return;let a=null,i=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":i=-1;break;case"PageDown":i=1;break;case"Enter":case" ":return e.preventDefault(),void this.handleDayClick(t);default:return}e.preventDefault();const n=new Date(t);null!==a&&n.setDate(t.getDate()+a),null!==i&&n.setMonth(t.getMonth()+i),n.getMonth()===this.displayDate.getMonth()&&n.getFullYear()===this.displayDate.getFullYear()||(this.displayDate=new Date(n.getFullYear(),n.getMonth(),1)),this.focusedDate=n,this.updateView(),requestAnimationFrame(()=>{const e=this.dayCells.find(e=>{return a=n,(t=e.__date).getFullYear()===a.getFullYear()&&t.getMonth()===a.getMonth()&&t.getDate()===a.getDate();var t,a});e?.focus()})}}static{const U="function"==typeof Symbol&&Symbol.metadata?Object.create(k[Symbol.metadata]??null):void 0;s=[t.property({type:Date})],r=[t.property({attribute:"view"})],l=[t.property({type:Array,attribute:!1})],o=[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"})],u=[t.property({type:Boolean,attribute:"show-week-numbers"})],g=[t.property({type:Number,attribute:"first-day-of-week"})],p=[t.property({attribute:"locale"})],m=[t.dispatch("calendar-change",{bubbles:!0,composed:!0})],y=[t.dispatch("calendar-event-click",{bubbles:!0,composed:!0})],v=[t.styles()],b=[t.ready()],f=[t.watch("value"),t.watch("events")],D=[t.watch("locale"),t.watch("firstDayOfWeek")],a(this,null,m,{kind:"method",name:"dispatchChange",static:!1,private:!1,access:{has:e=>"dispatchChange"in e,get:e=>e.dispatchChange},metadata:U},null,x),a(this,null,y,{kind:"method",name:"dispatchEventClick",static:!1,private:!1,access:{has:e=>"dispatchEventClick"in e,get:e=>e.dispatchEventClick},metadata:U},null,x),a(this,null,v,{kind:"method",name:"styles",static:!1,private:!1,access:{has:e=>"styles"in e,get:e=>e.styles},metadata:U},null,x),a(this,null,b,{kind:"method",name:"initialize",static:!1,private:!1,access:{has:e=>"initialize"in e,get:e=>e.initialize},metadata:U},null,x),a(this,null,f,{kind:"method",name:"handlePropertyChange",static:!1,private:!1,access:{has:e=>"handlePropertyChange"in e,get:e=>e.handlePropertyChange},metadata:U},null,x),a(this,null,D,{kind:"method",name:"handleWeekdayInputsChange",static:!1,private:!1,access:{has:e=>"handleWeekdayInputsChange"in e,get:e=>e.handleWeekdayInputsChange},metadata:U},null,x),a(null,null,s,{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:U},C,E),a(null,null,r,{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:U},S,M),a(null,null,l,{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:U},T,A),a(null,null,o,{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:U},N,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:U},W,z),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:U},O,Y),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:U},I,V),a(null,null,u,{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:U},L,P),a(null,null,g,{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:U},j,R),a(null,null,p,{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:U},B,H),a(null,e={value:n},_,{kind:"class",name:n.name,metadata:U},null,w),n=e.value,U&&Object.defineProperty(n,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:U}),i(n,w)}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 i=e.findIndex(e=>t(e,a));if(i>=0)return i}}const a=new Date,i=e.findIndex(e=>t(e,a));return i>=0?i: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))}.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{aspect-ratio:1;min-height:3rem;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--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__events{display:flex;flex-direction:column;gap:var(--snice-spacing-3xs,.125rem);margin-top:var(--snice-spacing-2xs,.25rem)}.calendar__event{font-size:var(--snice-font-size-2xs, .625rem);padding:var(--snice-spacing-3xs,.125rem) 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;text-overflow:ellipsis;cursor:pointer;transition:opacity var(--snice-transition-fast, 150ms) ease}.calendar__event:hover{opacity:.8}.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 i=document.createElement("button");i.className="calendar__nav-button",i.textContent="Today",i.onclick=()=>this.goToToday();const n=document.createElement("button");n.className="calendar__nav-button",n.textContent="‹",n.onclick=()=>this.previousMonth();const s=document.createElement("button");s.className="calendar__nav-button",s.textContent="›",s.onclick=()=>this.nextMonth(),a.appendChild(i),a.appendChild(n),a.appendChild(s),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=>{const t=document.createElement("div");t.className="calendar__weekday",t.textContent=e,this.grid.appendChild(t)}),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");const a=document.createElement("div");a.className="calendar__day-number",t.appendChild(a);const i=document.createElement("div");i.className="calendar__events",i.style.display="none",t.appendChild(i),this.grid.appendChild(t),this.dayCells.push(t)}this.container.appendChild(this.header),this.container.appendChild(this.grid),e.appendChild(this.container)}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(),i=this.displayDate.getMonth(),n=this.computeRovingIndex(a);a.forEach((e,t)=>{const a=this.dayCells[t];if(!a)return;const s=e.getMonth()!==i,r=this.highlightToday&&this.isToday(e),l=this.isSelected(e),o=this.isDisabled(e),c=this.getEventsForDate(e);a.className="calendar__day",s&&a.classList.add("calendar__day--other-month"),r&&a.classList.add("calendar__day--today"),l&&a.classList.add("calendar__day--selected"),o&&a.classList.add("calendar__day--disabled"),a.setAttribute("role","gridcell"),a.setAttribute("aria-selected",l?"true":"false"),a.setAttribute("aria-disabled",o?"true":"false"),a.setAttribute("aria-current",r&&!s?"date":"false"),a.setAttribute("tabindex",t===n?"0":"-1"),a.setAttribute("aria-label",e.toLocaleDateString(this.locale,{dateStyle:"full"})),a.__date=e;const d=a.querySelector(".calendar__day-number");d&&(d.textContent=String(e.getDate())),a.onclick=()=>this.handleDayClick(e);const h=a.querySelector(".calendar__events");if(h)if(c.length>0){if(h.style.display="",h.innerHTML="",c.slice(0,3).forEach(e=>{const t=document.createElement("div");t.className="calendar__event",e.color&&(t.style.background=e.color),t.textContent=e.title,t.onclick=t=>this.handleEventClick(e,t),h.appendChild(t)}),c.length>3){const e=document.createElement("div");e.className="calendar__event",e.style.background="#999",e.textContent=`+${c.length-3} more`,h.appendChild(e)}}else h.style.display="none"})}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 i="string"==typeof e.start?new Date(e.start):e.start,n=new Date(i.getFullYear(),i.getMonth(),i.getDate()).getTime();if(!e.end)return this.isSameDay(t,i);const s="string"==typeof e.end?new Date(e.end):e.end,r=new Date(s.getFullYear(),s.getMonth(),s.getDate()).getTime();return a>=n&&a<=r})}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.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(),i=new Date(e,t,1-(a-this.firstDayOfWeek+7)%7),n=[];for(let e=0;e<42;e++)n.push(new Date(i.getFullYear(),i.getMonth(),i.getDate()+e));return n}getWeekdays(){const e=[],t=new Date(2024,0,this.firstDayOfWeek);for(let a=0;a<7;a++){const i=new Date(t);i.setDate(t.getDate()+a),e.push(i.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,this.grid.insertBefore(a,this.grid.children[t]||null)}),this.updateView())}},n})();return e.SniceCalendar=n,e}({},Snice);
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=[],z=[],S=[],T=[],M=[],P=[],A=[],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,z),r(this,S,"medium")),this.shape=(r(this,T),r(this,M,"circle")),this.loading=(r(this,P),r(this,A,"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,z),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},S,T),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},M,P),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},A,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
+ <div part="base" class="${i}" style="${a}">
3
+ <if ${this.src}>
4
+ <img part="image" class="${n}"
5
+ src="${this.src}"
6
+ alt="${this.alt||this.name}"
7
+ loading="${this.loading}"
8
+ @load=${this.handleImageLoad}
9
+ @error=${this.handleImageError}>
10
+ </if>
11
+ <div part="fallback" class="${s}">
12
+ <case ${r}>
13
+ <when value="">
14
+ <svg class="avatar-icon" viewBox="0 0 24 24" fill="currentColor">
15
+ <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"/>
16
+ </svg>
17
+ </when>
18
+ <default>
19
+ ${r}
20
+ </default>
21
+ </case>
22
+ </div>
23
+ </div>
24
+ `}styles(){return t.css`${":host([hidden]){display:none}:host{display:inline-block;--avatar-size:2.5rem;--avatar-bg:var(--snice-color-text-tertiary, rgb(115 115 115));--avatar-color:var(--snice-color-text-inverse, rgb(255 255 255))}case,default,if,when{display:contents}.avatar{position:relative;width:var(--avatar-size);height:var(--avatar-size);overflow:hidden;background:var(--avatar-bg);color:var(--avatar-color);display:flex;align-items:center;justify-content:center;font-weight:var(--snice-font-weight-semibold,600);user-select:none}:host([shape=circle]) .avatar{border-radius:50%}:host([shape=square]) .avatar{border-radius:0}:host([shape=rounded]) .avatar{border-radius:var(--snice-border-radius-lg,.5rem)}:host([size=xs]){--avatar-size:1.5rem;font-size:.625rem}:host([size=small]){--avatar-size:2rem;font-size:.75rem}:host([size=medium]){--avatar-size:2.5rem;font-size:.875rem}:host([size=large]){--avatar-size:3rem;font-size:1rem}:host([size=xl]){--avatar-size:4rem;font-size:1.25rem}:host([size=xxl]){--avatar-size:6rem;font-size:2rem}.avatar-image{width:100%;height:100%;object-fit:cover;display:block}.avatar-image--error{display:none}.avatar-fallback{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;opacity:0;visibility:hidden;transition:opacity .2s}.avatar-fallback--visible{opacity:1;visibility:visible}.avatar-icon{width:60%;height:60%;opacity:.9;display:block}.avatar--red{background:var(--avatar-palette-red,rgb(239 68 68))}.avatar--orange{background:var(--avatar-palette-orange,rgb(251 146 60))}.avatar--yellow{background:var(--avatar-palette-yellow,rgb(234 179 8))}.avatar--lime{background:var(--avatar-palette-lime,rgb(163 230 53))}.avatar--green{background:var(--avatar-palette-green,rgb(34 197 94))}.avatar--teal{background:var(--avatar-palette-teal,rgb(20 184 166))}.avatar--cyan{background:var(--avatar-palette-cyan,rgb(6 182 212))}.avatar--sky{background:var(--avatar-palette-sky,rgb(14 165 233))}.avatar--blue{background:var(--avatar-palette-blue,rgb(59 130 246))}.avatar--indigo{background:var(--avatar-palette-indigo,rgb(99 102 241))}.avatar--violet{background:var(--avatar-palette-violet,rgb(139 92 246))}.avatar--purple{background:var(--avatar-palette-purple,rgb(168 85 247))}.avatar--fuchsia{background:var(--avatar-palette-fuchsia,rgb(217 70 239))}.avatar--pink{background:var(--avatar-palette-pink,rgb(236 72 153))}.avatar--rose{background:var(--avatar-palette-rose,rgb(244 63 94))}:host(.avatar-group-item){margin-left:-.5rem;border:2px solid var(--snice-color-surface,rgb(255 255 255));border-radius:50%}:host(.avatar-group-item:first-child){margin-left:0}:host(.avatar-group-item) .avatar{border:2px solid var(--snice-color-surface,rgb(255 255 255))}"}`}getInitials(e){if(!e)return"";const t=e.trim().split(/\s+/).filter(e=>e.length>0);return 0===t.length?"":1===t.length?t[0][0].toUpperCase():(t[0][0]+t[1][0]).toUpperCase()}getColorClass(e){if(!e)return"";const t=["red","orange","yellow","lime","green","teal","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"];let a=0;for(let t=0;t<e.length;t++)a=e.charCodeAt(t)+((a<<5)-a);return`avatar--${t[Math.abs(a)%t.length]}`}renderIcon(){return t.html`
25
+ <svg class="avatar-icon" viewBox="0 0 24 24" fill="currentColor">
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
+ </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);
2
29
  //# sourceMappingURL=snice-calendar.min.js.map