snice 7.3.0 → 7.4.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 (209) hide show
  1. package/.agents/skills/snice/SKILL.md +12 -16
  2. package/README.md +5 -1
  3. package/adapters/react/SniceProvider.js +1 -1
  4. package/adapters/react/SniceRouter.js +1 -1
  5. package/adapters/react/matchRoute.js +1 -1
  6. package/adapters/react/useRequestHandler.js +1 -1
  7. package/bin/analyzer-contracts.js +3 -1
  8. package/bin/project-analyzer.js +219 -6
  9. package/bin/snice.js +77 -13
  10. package/dist/app-context.d.ts +10 -10
  11. package/dist/cdn/accordion/snice-accordion.js +1 -1
  12. package/dist/cdn/action-bar/snice-action-bar.js +1 -1
  13. package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
  14. package/dist/cdn/alert/snice-alert.js +1 -1
  15. package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
  16. package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
  17. package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
  18. package/dist/cdn/availability/snice-availability.js +1 -1
  19. package/dist/cdn/avatar/snice-avatar.js +1 -1
  20. package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
  21. package/dist/cdn/badge/snice-badge.js +1 -1
  22. package/dist/cdn/banner/snice-banner.js +1 -1
  23. package/dist/cdn/binpack/snice-binpack.js +1 -1
  24. package/dist/cdn/book/snice-book.js +1 -1
  25. package/dist/cdn/booking/snice-booking.js +1 -1
  26. package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
  27. package/dist/cdn/button/snice-button.js +1 -1
  28. package/dist/cdn/calendar/snice-calendar.js +1 -1
  29. package/dist/cdn/camera/snice-camera.js +1 -1
  30. package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
  31. package/dist/cdn/candlestick/snice-candlestick.js +1 -1
  32. package/dist/cdn/card/snice-card.js +1 -1
  33. package/dist/cdn/carousel/snice-carousel.js +1 -1
  34. package/dist/cdn/cart/snice-cart.js +1 -1
  35. package/dist/cdn/chart/snice-chart.js +1 -1
  36. package/dist/cdn/chat/snice-chat.js +1 -1
  37. package/dist/cdn/checkbox/snice-checkbox.js +1 -1
  38. package/dist/cdn/chip/snice-chip.js +1 -1
  39. package/dist/cdn/code-block/snice-code-block.js +1 -1
  40. package/dist/cdn/color-display/snice-color-display.js +1 -1
  41. package/dist/cdn/color-picker/snice-color-picker.js +1 -1
  42. package/dist/cdn/command-palette/snice-command-palette.js +1 -1
  43. package/dist/cdn/comments/snice-comments.js +1 -1
  44. package/dist/cdn/countdown/snice-countdown.js +1 -1
  45. package/dist/cdn/cropper/snice-cropper.js +1 -1
  46. package/dist/cdn/data-card/snice-data-card.js +1 -1
  47. package/dist/cdn/date-picker/snice-date-picker.js +1 -1
  48. package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
  49. package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
  50. package/dist/cdn/diff/snice-diff.js +1 -1
  51. package/dist/cdn/divider/snice-divider.js +1 -1
  52. package/dist/cdn/doc/snice-doc.js +1 -1
  53. package/dist/cdn/draw/snice-draw.js +1 -1
  54. package/dist/cdn/drawer/snice-drawer.js +1 -1
  55. package/dist/cdn/empty-state/snice-empty-state.js +1 -1
  56. package/dist/cdn/estimate/snice-estimate.js +1 -1
  57. package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
  58. package/dist/cdn/file-upload/snice-file-upload.js +1 -1
  59. package/dist/cdn/flip-card/snice-flip-card.js +1 -1
  60. package/dist/cdn/flow/snice-flow.js +1 -1
  61. package/dist/cdn/form-layout/snice-form-layout.js +1 -1
  62. package/dist/cdn/funnel/snice-funnel.js +1 -1
  63. package/dist/cdn/gantt/snice-gantt.js +1 -1
  64. package/dist/cdn/gauge/snice-gauge.js +1 -1
  65. package/dist/cdn/grid/snice-grid.js +1 -1
  66. package/dist/cdn/heatmap/snice-heatmap.js +1 -1
  67. package/dist/cdn/image/snice-image.js +1 -1
  68. package/dist/cdn/input/snice-input.js +1 -1
  69. package/dist/cdn/invoice/snice-invoice.js +1 -1
  70. package/dist/cdn/kanban/snice-kanban.js +1 -1
  71. package/dist/cdn/key-value/snice-key-value.js +1 -1
  72. package/dist/cdn/kpi/snice-kpi.js +1 -1
  73. package/dist/cdn/layout/snice-layout.js +1 -1
  74. package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
  75. package/dist/cdn/link/snice-link.js +1 -1
  76. package/dist/cdn/link-preview/snice-link-preview.js +1 -1
  77. package/dist/cdn/list/snice-list.js +1 -1
  78. package/dist/cdn/location/snice-location.js +1 -1
  79. package/dist/cdn/login/snice-login.js +1 -1
  80. package/dist/cdn/map/snice-map.js +1 -1
  81. package/dist/cdn/markdown/snice-markdown.js +1 -1
  82. package/dist/cdn/masonry/snice-masonry.js +1 -1
  83. package/dist/cdn/menu/snice-menu.js +1 -1
  84. package/dist/cdn/message-strip/snice-message-strip.js +1 -1
  85. package/dist/cdn/modal/snice-modal.js +1 -1
  86. package/dist/cdn/music-player/snice-music-player.js +1 -1
  87. package/dist/cdn/nav/snice-nav.js +1 -1
  88. package/dist/cdn/network-graph/snice-network-graph.js +1 -1
  89. package/dist/cdn/notification-center/snice-notification-center.js +1 -1
  90. package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
  91. package/dist/cdn/org-chart/snice-org-chart.js +1 -1
  92. package/dist/cdn/pagination/snice-pagination.js +1 -1
  93. package/dist/cdn/paint/snice-paint.js +1 -1
  94. package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
  95. package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
  96. package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
  97. package/dist/cdn/popover/snice-popover.js +1 -1
  98. package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
  99. package/dist/cdn/product-card/snice-product-card.js +1 -1
  100. package/dist/cdn/progress/snice-progress.js +1 -1
  101. package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
  102. package/dist/cdn/qr-code/snice-qr-code.js +1 -1
  103. package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
  104. package/dist/cdn/radio/snice-radio.js +1 -1
  105. package/dist/cdn/range-slider/snice-range-slider.js +1 -1
  106. package/dist/cdn/rating/snice-rating.js +1 -1
  107. package/dist/cdn/receipt/snice-receipt.js +1 -1
  108. package/dist/cdn/recipe/snice-recipe.js +1 -1
  109. package/dist/cdn/runtime/README.md +2 -2
  110. package/dist/cdn/runtime/snice-runtime.esm.js +309 -188
  111. package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
  112. package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
  113. package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
  114. package/dist/cdn/runtime/snice-runtime.js +309 -187
  115. package/dist/cdn/runtime/snice-runtime.js.map +1 -1
  116. package/dist/cdn/runtime/snice-runtime.min.js +1 -1
  117. package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
  118. package/dist/cdn/sankey/snice-sankey.js +1 -1
  119. package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
  120. package/dist/cdn/select/snice-select.js +1 -1
  121. package/dist/cdn/skeleton/snice-skeleton.js +1 -1
  122. package/dist/cdn/slider/snice-slider.js +1 -1
  123. package/dist/cdn/sortable/snice-sortable.js +1 -1
  124. package/dist/cdn/sparkline/snice-sparkline.js +1 -1
  125. package/dist/cdn/spinner/snice-spinner.js +1 -1
  126. package/dist/cdn/split-button/snice-split-button.js +1 -1
  127. package/dist/cdn/split-pane/snice-split-pane.js +1 -1
  128. package/dist/cdn/spotlight/snice-spotlight.js +1 -1
  129. package/dist/cdn/stat-group/snice-stat-group.js +1 -1
  130. package/dist/cdn/step-input/snice-step-input.js +1 -1
  131. package/dist/cdn/stepper/snice-stepper.js +1 -1
  132. package/dist/cdn/switch/snice-switch.js +1 -1
  133. package/dist/cdn/table/snice-table.esm.js +1 -1
  134. package/dist/cdn/table/snice-table.js +1 -1
  135. package/dist/cdn/tabs/snice-tabs.js +1 -1
  136. package/dist/cdn/tag/snice-tag.js +1 -1
  137. package/dist/cdn/tag-input/snice-tag-input.js +1 -1
  138. package/dist/cdn/terminal/snice-terminal.js +1 -1
  139. package/dist/cdn/testimonial/snice-testimonial.js +1 -1
  140. package/dist/cdn/textarea/snice-textarea.js +1 -1
  141. package/dist/cdn/time-picker/snice-time-picker.js +1 -1
  142. package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
  143. package/dist/cdn/timeline/snice-timeline.js +1 -1
  144. package/dist/cdn/timer/snice-timer.js +1 -1
  145. package/dist/cdn/toast/snice-toast.js +1 -1
  146. package/dist/cdn/tooltip/snice-tooltip.js +1 -1
  147. package/dist/cdn/tree/snice-tree.js +1 -1
  148. package/dist/cdn/treemap/snice-treemap.js +1 -1
  149. package/dist/cdn/user-card/snice-user-card.js +1 -1
  150. package/dist/cdn/video-player/snice-video-player.js +1 -1
  151. package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
  152. package/dist/cdn/waterfall/snice-waterfall.js +1 -1
  153. package/dist/cdn/weather/snice-weather.js +1 -1
  154. package/dist/cdn/work-order/snice-work-order.js +1 -1
  155. package/dist/components/pagination/snice-pagination.types.d.ts +5 -0
  156. package/dist/context-provider.d.ts +11 -1
  157. package/dist/context.d.ts +5 -6
  158. package/dist/index.cjs +306 -184
  159. package/dist/index.cjs.map +1 -1
  160. package/dist/index.d.ts +2 -1
  161. package/dist/index.esm.js +306 -185
  162. package/dist/index.esm.js.map +1 -1
  163. package/dist/index.iife.js +306 -184
  164. package/dist/index.iife.js.map +1 -1
  165. package/dist/react/SniceProvider.js +1 -1
  166. package/dist/react/SniceRouter.js +1 -1
  167. package/dist/react/index.js +1 -1
  168. package/dist/react/matchRoute.js +1 -1
  169. package/dist/react/useRequestHandler.js +1 -1
  170. package/dist/symbols.cjs +1 -1
  171. package/dist/symbols.esm.js +1 -1
  172. package/dist/testing-dom.cjs +48 -0
  173. package/dist/testing-dom.cjs.map +1 -0
  174. package/dist/testing-dom.d.ts +23 -0
  175. package/dist/testing-dom.esm.js +45 -0
  176. package/dist/testing-dom.esm.js.map +1 -0
  177. package/dist/transitions.cjs +1 -1
  178. package/dist/transitions.esm.js +1 -1
  179. package/dist/types/context.d.ts +8 -8
  180. package/dist/utils.d.ts +3 -1
  181. package/docs/ai/api.md +12 -1
  182. package/docs/ai/architecture.md +7 -3
  183. package/docs/ai/bindings.md +1 -1
  184. package/docs/ai/cli.md +22 -0
  185. package/docs/ai/components/badge.md +4 -0
  186. package/docs/ai/components/pagination.md +4 -2
  187. package/docs/ai/components/segmented-control.md +5 -1
  188. package/docs/ai/controllers.md +30 -11
  189. package/docs/ai/decorators.md +2 -2
  190. package/docs/ai/events.md +8 -2
  191. package/docs/ai/fetcher.md +32 -1
  192. package/docs/ai/lifecycle.md +4 -1
  193. package/docs/ai/patterns.md +9 -4
  194. package/docs/ai/request-response.md +20 -6
  195. package/docs/ai/routing.md +8 -1
  196. package/docs/ai/testing.md +71 -0
  197. package/docs/bindings.md +1 -1
  198. package/docs/cli.md +23 -0
  199. package/docs/components/badge.md +4 -0
  200. package/docs/components/pagination.md +8 -5
  201. package/docs/components/segmented-control.md +5 -1
  202. package/docs/controllers.md +30 -11
  203. package/docs/events.md +11 -2
  204. package/docs/fetcher.md +32 -1
  205. package/docs/lifecycle.md +5 -1
  206. package/docs/request-response.md +25 -7
  207. package/docs/routing.md +10 -1
  208. package/docs/testing.md +71 -0
  209. package/package.json +6 -1
@@ -1,2 +1,2 @@
1
- var Snice=function(e){"use strict";globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map;const t=globalThis.snice;function n(e){return Symbol.for(`snice:${e}`)}const o=n("is-controller-class"),r=n("is-controller-instance"),s=n("is-daemon-class"),i=n("is-daemon-instance"),a=n("is-element-class"),c=n("channel-handlers"),l=n("daemon-state"),h=n("ready-promise"),u=n("ready-resolve"),d=n("ready-reject"),f=n("ready-handlers-running"),m=n("rendered-promise"),p=n("rendered-resolve"),y=n("pending-reconnect-render"),g=n("render-depth"),b=n("render-root"),v=n("element-options"),w=n("controller"),E=n("initialized"),N=n("controller-key"),A=n("controller-name"),S=n("controller-id"),T=n("controller-operations"),_=n("native-controller"),C=n("controller-registry-name"),x=n("direct-controller"),O=n("controller-attribute-sync"),k=n("pending-controller-binding"),$=n("cleanup"),L=n("properties"),P=n("property-values"),j=n("property-defaults"),M=n("property-wrappers"),R=n("pre-init-property-values"),D=n("pre-upgrade-property-bindings"),I=n("properties-initialized"),V=n("property-watchers"),q=n("explicitly-set-properties"),B=n("router-context"),F=n("page-transition"),W=n("created-at"),z=n("ready-handlers"),U=n("dispose-handlers"),H=n("reconnect-handlers"),K=n("moved-handlers"),G=n("adopted-handlers"),Q=n("observers"),J=n("setting-from-property"),X=n("moved-timers"),Y=n("adopted-timers"),Z=n("dispatch-timers"),ee=n("render-method"),te=n("render-options"),ne=n("render-instance"),oe=n("render-timers"),re=n("render-callbacks"),se=n("styles-method"),ie=n("styles-applied"),ae=n("parent-styles-methods"),ce=n("snice-element-base"),le=n("context-handler"),he=n("navigation-context-instance"),ue=n("registered-elements"),de=n("is-updating"),fe=n("context-register"),me=n("context-unregister"),pe=n("context-notify-element"),ye=n("context-timer"),ge=n("context-called"),be=n("context-update"),ve=n("context-methods"),we=n("watch-methods"),Ee=n("observe-methods"),Ne=n("on-methods"),Ae=n("respond-methods"),Se=n("ready-methods"),Te=n("dispose-methods"),_e=n("reconnect-methods"),Ce=n("moved-methods"),xe=n("adopted-methods"),Oe=n("controller-abort"),ke=n("controller-attached"),$e=n("property-definers");class Le{static{this.SEPARATOR=","}static serialize(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){if(e.includes(Le.SEPARATOR))throw new Error(`SimpleArray strings cannot contain the character "${Le.SEPARATOR}" (U+FF0C)`);return e}if("number"==typeof e||"boolean"==typeof e)return String(e);throw new Error("SimpleArray only supports string, number, and boolean types. Got: "+typeof e)}).join(Le.SEPARATOR):""}static parse(e){return null==e||""===e?[]:e.split(Le.SEPARATOR).map(e=>{if(/^-?\d+\.?\d*$/.test(e)){const t=Number(e);if(!isNaN(t))return t}return"true"===e||"false"!==e&&e})}}var Pe,je,Me;e.TransitionMode=void 0,function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(e.TransitionMode||(e.TransitionMode={}));const Re=Symbol.for("snice:registered-elements-set");let De=0;class Ie{constructor(e={},t=[],n="",o={},r){if(this[Pe]=new WeakMap,this[je]=new Set,this[Me]=!1,this.id=De++,this.application=e,this.navigation={placards:t,route:n,params:o},r&&"function"==typeof r.create)this.fetch=r.create(this);else{if("function"!=typeof fetch)throw new Error("No fetch implementation available");this.fetch=fetch.bind(this)}}[(Pe=ue,je=Re,Me=de,fe)](e,t){const n=this[ue];let o=n.get(e);o||(o=new Set,n.set(e,o)),o.add(t),this[Re].add(e)}[me](e,t){const n=this[ue];if(void 0!==t){const o=n.get(e);if(!o)return;if(o.delete(t),o.size>0)return}n.delete(e),this[Re].delete(e)}[be](e,t,n,o){this.application=e,this.navigation.placards=t,this.navigation.route=n,this.navigation.params=o,this.notify()}update(){this.notify()}notify(){if(this[de])return;this[de]=!0;const e=this[Re],t=this[ue];for(const n of e){const e=t.get(n);if(e)for(const t of e)if("function"==typeof n[t])try{n[t](this)}catch(e){console.error(`Error calling @context method ${t}:`,e)}}this[de]=!1}[pe](e){const t=this[ue].get(e);if(t)for(const n of t)"function"==typeof e[n]&&e[n](this)}}function Ve(e){if(null!=e)return"string"==typeof e?String:"number"==typeof e?Number:"boolean"==typeof e?Boolean:e instanceof Date?Date:"bigint"==typeof e?BigInt:Array.isArray(e)?Array:void 0}function qe(e,t,n,o){const r=t.type||Ve(o);if(t.converter?.fromAttribute)return t.converter.fromAttribute(e,r);switch(r){case Boolean:return null!==e&&"false"!==e;case Number:return null!==e?Number(e):null;case String:return e;case Date:return e?new Date(e):null;case BigInt:return e&&e.endsWith("n")?BigInt(e.slice(0,-1)):e?BigInt(e):null;case Le:return Le.parse(e);case Array:try{return e?JSON.parse(e):[]}catch{return[]}case Object:try{return e?JSON.parse(e):{}}catch{return{}}default:return"number"==typeof n&&null!==e?Number(e):e}}function Be(e,t){return e!==t&&(e==e||t==t)}function Fe(e,t){return"string"==typeof e.attribute?e.attribute.toLowerCase():!0===e.attribute||"kebab"===e.attributeNaming?t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase():t.toLowerCase()}function We(e,t){return e[t]||(e[t]=new Set),e[t]}function ze(e,t){return e[t]||(e[t]={}),e[t]}function Ue(e,t,n,o,r){const s=t[V];if(!s)return;const i=[n],a=t[L]?.get(n),c=a&&"string"==typeof a.attribute?a.attribute:null;c&&c!==n&&i.push(c);for(const t of i)if(s.has(t))for(const i of s.get(t))try{i.method.call(e,o,r,n)}catch(e){console.error(`Error in @watch('${t}') method ${i.methodName}:`,e)}if(s.has("*"))for(const t of s.get("*"))try{t.method.call(e,o,r,n)}catch(e){console.error(`Error in @watch('*') method ${t.methodName}:`,e)}}function He(e,t){let n=null;return function(...o){null!==n&&clearTimeout(n),n=setTimeout(()=>{e.apply(this,o),n=null},t)}}function Ke(e,t){let n=0,o=null;return function(...r){const s=Date.now(),i=t-(s-n);if(i<=0)return o&&(clearTimeout(o),o=null),n=s,e.apply(this,r);o||(o=setTimeout(()=>{n=Date.now(),o=null,e.apply(this,r)},i))}}function Ge(e,t){if(null==t)return e;if("global"===t)return"undefined"!=typeof document?document:null;if("function"==typeof t)try{return t.call(e)||null}catch{return null}return"string"==typeof t?e.closest?.(t)||null:t&&"function"==typeof t.addEventListener?t:null}function Qe(e,t,n){if(null==e||!1===e||t?.type===Le&&Array.isArray(e)&&0===e.length)return null;if(t.converter?.toAttribute)return t.converter.toAttribute(e,t.type);switch(t.type||Ve(n)){case Boolean:return"true";case Date:return e instanceof Date?e.toISOString():String(e);case BigInt:return"bigint"==typeof e?e.toString()+"n":String(e);case Le:return Array.isArray(e)?Le.serialize(e):String(e);case Array:return Array.isArray(e)?JSON.stringify(e):String(e);case Object:return"object"==typeof e&&null!==e?JSON.stringify(e):String(e);default:return String(e)}}const Je=new WeakSet,Xe=new Map;function Ye(e,t){const n=e.constructor[Q];if(n&&Array.isArray(n)&&0!==n.length){e[$]?e[$].observers||(e[$].observers=[]):e[$]={events:[],channels:[],observers:[]};for(const o of n){const n=o.method.bind(e),r=o.options?.throttle?Ke(n,o.options.throttle):n;switch(o.type){case"intersection":Ze(e,t,o,r);break;case"resize":et(e,t,o,r);break;case"media":tt(e,0,o,r);break;case"mutation":nt(e,t,o,r);break;default:console.warn(`Unknown observer type: ${o.type}`)}}}}function Ze(e,t,n,o){const r={threshold:n.options?.threshold??0,rootMargin:n.options?.rootMargin??"0px",root:n.options?.root??null};if("undefined"==typeof IntersectionObserver)return void console.warn("IntersectionObserver is not available in this environment");const s=new IntersectionObserver(e=>{for(const t of e)try{!1===o(t)&&s&&s.unobserve(t.target)}catch(e){console.error(`Error in intersection observer ${n.methodName}:`,e)}},r),i=n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):[t];i.forEach(e=>s.observe(e)),e[$].observers.push(()=>{i.forEach(e=>s.unobserve(e)),0===s.takeRecords().length&&s.disconnect()})}function et(e,t,n,o){const r=n.options?.box||"content-box";if("undefined"==typeof ResizeObserver)return void console.warn("ResizeObserver is not available in this environment");const s=new ResizeObserver(e=>{for(const t of e)try{o(t)}catch(e){console.error(`Error in resize observer ${n.methodName}:`,e)}});(n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):[t]).forEach(e=>{s.observe(e,{box:r})}),e[$].observers.push(()=>{s.disconnect()})}function tt(e,t,n,o){const r=n.target;if(!r)return void console.warn("Media query observer requires a query string");let s=Xe.get(r);if(!s)try{s=window.matchMedia(r),Xe.set(r,s)}catch(e){return void console.error(`Invalid media query: ${r}`,e)}const i=e=>{try{o(e.matches)}catch(e){console.error(`Error in media query observer ${n.methodName}:`,e)}};i(s);const a=e=>i(e);s.addEventListener?(s.addEventListener("change",a),e[$].observers.push(()=>{s.removeEventListener("change",a)})):(s.addListener(a),e[$].observers.push(()=>{s.removeListener(a)}))}function nt(e,t,n,o){const s=n.target.split(":"),i=s[0]||"childList",a=s[1],c={};switch(i){case"childList":c.childList=!0;break;case"attributes":c.attributes=!0,a&&(c.attributeFilter=[a]);break;default:return void(/^[.#[]/.test(i)?console.warn(`@observe: "mutation:${i}" — "${i}" looks like a selector. Selectors are the second argument — did you mean @observe('mutation:childList', '${i}')?`):console.warn(`Unknown mutation type: ${i} (expected childList or attributes)`))}n.options?.subtree&&(c.subtree=!0,n.options.maxDepth&&console.warn("maxDepth is set but requires custom implementation"));const l=!(!n.options?.maxDepth||!n.options.subtree),h=new MutationObserver(e=>{try{if(!l)return void o(e);const r=n.options.maxDepth,s=t.shadowRoot||t,i=e.filter(e=>{let t=0,n=e.target;for(;n&&n!==s&&t<r;)n=n.parentNode,t++;return t<r});i.length>0&&o(i)}catch(e){console.error(`Error in mutation observer ${n.methodName}:`,e)}}),u=!0===e[r];(n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):u&&t.shadowRoot?[t.shadowRoot]:[t]).forEach(e=>{h.observe(e,c)}),e[$].observers.push(()=>{h.disconnect()})}function ot(e){if(e[$]?.observers){for(const t of e[$].observers)t();e[$].observers=[]}}const rt="@context/request",st=new WeakMap;function it(e){if(!e||"object"!=typeof e&&"function"!=typeof e)return;const t=function(e){return!e||"object"!=typeof e&&"function"!=typeof e?null:!0===e[r]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:"function"==typeof e.dispatchEvent?e:null}(e);if(t){const e={};if(t.dispatchEvent(new CustomEvent(rt,{bubbles:!0,composed:!0,cancelable:!0,detail:e})),void 0!==e.context)return e.context}const n=e;return void 0!==n[B]?n[B]:!0===n[r]&&void 0!==n.element?.[B]?n.element[B]:void 0}function at(e){return!!e&&("object"==typeof e||"function"==typeof e)&&!0===e[s]}function ct(e){if(!at(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");let t=e[l];if(!t){t={target:new EventTarget,bindings:0,active:!1};try{Object.defineProperty(e,l,{value:t,configurable:!0}),Object.defineProperty(e,i,{value:!0,configurable:!0})}catch{throw new TypeError("@daemon instances must remain extensible until they are provided to an app context.")}}return t}function lt(e,t){if("string"!=typeof t||!t.trim())throw new TypeError("Daemon addresses must be non-empty strings.");const n=it(e);if(!n)throw new Error(`[snice] ${function(e){const t=e;return!0===t?.[r]?"controller":at(t)?"@daemon instance":"element"}(e)} cannot resolve daemon "${t}" because no app context is provided.`);const o=n.daemons?.[t];if(!o)throw new Error(`[snice] app context does not provide daemon "${t}".`);if(!at(o))throw new TypeError(`[snice] app context entry "${t}" is not an instance of an @daemon class.`);const s=ct(o);if(!s.active)throw new Error(`[snice] daemon "${t}" is not active because its app context has not been provided.`);return s.target}function ht(e){return at(e)?function(e){return ct(e).target}(e):!0===e?.[r]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:e&&"function"==typeof e.dispatchEvent?e:null}function ut(e,t){const n=e.constructor[c];if(n){e[$]||(e[$]={events:[],channels:[]});for(const o of n){const n=o.method.bind(e),r=`@request/${o.channelName}`;let s,i,a=0;const c=[];let l=null;const h=(e=>o.options?.debounce?(...t)=>new Promise((n,r)=>{clearTimeout(s),s=setTimeout(async()=>{try{n(await e(...t))}catch(e){r(e)}},o.options.debounce)}):o.options?.throttle?(...t)=>{const n=Date.now(),r=o.options.throttle-(n-a);if(r<=0){clearTimeout(i),i=null,a=n;const o=c.splice(0);l=null;const r=e(...t);return o.length&&Promise.resolve(r).then(e=>{for(const t of o)t.resolve(e)},e=>{for(const t of o)t.reject(e)}),r}return l=t,new Promise((n,o)=>{c.push({resolve:n,reject:o}),i||(i=setTimeout(async()=>{a=Date.now(),i=null;const n=c.splice(0),o=l??t;l=null;try{const t=await e(...o);for(const e of n)e.resolve(t)}catch(e){for(const t of n)t.reject(e)}},r))})}:e)(n),u=e=>{const{data:t,discovery:n,payload:r}=e.detail;e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation(),n.resolve(),Promise.resolve(h(r)).then(e=>{t.resolve(e)}).catch(e=>{t.reject(e),console.error(`Error in response handler ${o.methodName}:`,e)})};let d=t;if(void 0!==o.options?.daemon)try{d=lt(e,o.options.daemon)}catch(e){console.warn(`[snice/@respond] ${e.message} Responder "${o.channelName}" skipped.`);continue}d.addEventListener(r,u),e[$].channels.push(()=>{d.removeEventListener(r,u)})}}}function dt(e){if(e[$]?.channels){for(const t of e[$].channels)t();e[$].channels=[]}}const ft=new Set(["once","prevent","preventdefault","stop","stoppropagation","capture","passive"]);function mt(e){const t=e.lastIndexOf(".");if(t<0)return;const n=e.slice(t+1).toLowerCase();ft.has(n)&&console.warn(`snice: "@${e}" is not a valid modifier — once/preventDefault/stopPropagation/capture are @on() options, not template modifiers. This registers a listener for event "${e}", which never fires.`)}function pt(e){const t=e.startsWith("~");t&&(e=e.substring(1));const n=e.split("+"),o={key:"",anyModifiers:t};for(const e of n){const t=e.toLowerCase();"ctrl"===t||"control"===t?o.ctrl=!0:"alt"===t?o.alt=!0:"shift"===t?o.shift=!0:"meta"===t||"cmd"===t||"command"===t?o.meta=!0:o.key=yt(e)}return o}function yt(e){return{esc:"Escape",escape:"Escape",enter:"Enter",return:"Enter",space:" ",spacebar:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",arrowup:"ArrowUp",arrowdown:"ArrowDown",arrowleft:"ArrowLeft",arrowright:"ArrowRight",delete:"Delete",del:"Delete",backspace:"Backspace",tab:"Tab",home:"Home",end:"End",pageup:"PageUp",pagedown:"PageDown"}[e.toLowerCase()]||e}function gt(e,t){return e.key===t.key&&(!!t.anyModifiers||(t.ctrl?e.ctrlKey:!e.ctrlKey)&&(t.alt?e.altKey:!e.altKey)&&(t.shift?e.shiftKey:!e.shiftKey)&&(t.meta?e.metaKey:!e.metaKey))}const bt=n("on-handlers");function vt(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(n=r,e.apply(this,o))}}const wt=new Set(["scroll","focus","blur","load","unload","error","resize","abort","mouseenter","mouseleave","pointerenter","pointerleave"]);function Et(e,t){const n=e.constructor[bt];if(n&&Array.isArray(n)&&0!==n.length){e[$]?e[$].events?e[$].events.length>0&&Nt(e):e[$].events=[]:e[$]={events:[],channels:[],observers:[]};for(const o of n){const n=e[o.methodName];let r=n?n.bind(e):o.method.bind(e);const s=o.options||{},i=["keydown","keyup","keypress"].includes(o.eventName.split(".")[0].split(":")[0]),a=i?o.eventName.indexOf("."):-1,c=i?o.eventName.indexOf(":"):-1,l=a>0&&c>0?Math.min(a,c):Math.max(a,c),h=l>0?o.eventName.substring(0,l):o.eventName,u=l>0?o.eventName.substring(l+1):null;l<=0&&mt(o.eventName),s.debounce&&s.debounce>0?r=He(r,s.debounce):s.throttle&&s.throttle>0&&(r=vt(r,s.throttle));let d=null;u&&["keydown","keyup","keypress"].includes(h)&&(d=pt(u));const f=(e=>d?t=>{gt(t,d)&&e(t)}:e)(r),m=void 0!==s.scope,p=void 0!==s.daemon;if(m&&p){console.warn(`[snice/@on] "${o.eventName}" cannot use both scope and daemon — listener skipped.`);continue}if((p||at(e))&&o.selector){console.warn(`[snice/@on] "${o.eventName}" cannot delegate "${o.selector}" on a daemon target — listener skipped.`);continue}const y=m||p;let g=null;if(p)try{g=lt(e,s.daemon)}catch(e){console.warn(`[snice/@on] ${e.message} Listener "${o.eventName}" skipped.`);continue}else if(m&&(g=Ge(t,s.scope),!g)){console.warn(`[snice/@on] scope did not resolve for "${o.eventName}" on ${o.methodName} — listener skipped.`);continue}if(o.selector){const n=y?g:t.shadowRoot||t,r=e=>{const t=e.target;if(t.matches&&t.matches(o.selector)&&t||t.closest&&t.closest(o.selector)){s.preventDefault&&e.preventDefault(),s.stopPropagation&&(e.stopPropagation(),e.stopImmediatePropagation());try{f(e)}catch(e){console.error(`Error in event handler ${o.methodName}:`,e)}}},i=wt.has(h),a={capture:void 0!==s.capture?s.capture:i,once:s.once||!1,passive:s.passive||!1};n.addEventListener(h,r,a),e[$].events.push({target:n,eventName:h,handler:r,options:a})}else{const n=y?null:t.shadowRoot,r=Symbol(),i=e=>{if(!e[r]){e[r]=!0,s.preventDefault&&e.preventDefault(),s.stopPropagation&&e.stopPropagation();try{f(e)}catch(e){console.error(`Error in event handler ${o.methodName}:`,e)}}},a={capture:s.capture||!1,once:s.once||!1,passive:s.passive||!1};if(y){g.addEventListener(h,i,a),e[$].events.push({target:g,eventName:h,handler:i,options:a});continue}n&&(n.addEventListener(h,i,a),e[$].events.push({target:n,eventName:h,handler:i,options:a})),t.addEventListener(h,i,a),e[$].events.push({target:t,eventName:h,handler:i,options:a})}}}}function Nt(e){if(e[$]?.events){for(const{target:t,eventName:n,handler:o,options:r}of e[$].events)t.removeEventListener(n,o,r);e[$].events=[]}}class At{constructor(){this.cleanupFns=new Map,this.pendingOperations=new Set}register(e,t){this.cleanupFns.set(e,t)}unregister(e){this.cleanupFns.delete(e)}async cleanup(){await Promise.all(this.pendingOperations);for(const e of this.cleanupFns.values())try{await e()}catch(e){console.error("Error during cleanup:",e)}this.cleanupFns.clear()}async runOperation(e){const t=e(),n=t.then(()=>{},()=>{});this.pendingOperations.add(n);try{const e=await t;return this.pendingOperations.delete(n),e}catch(e){throw this.pendingOperations.delete(n),e}}}function St(e,n){if(t.controllerRegistry.has(n))return void queueMicrotask(()=>{const t=e[_];(void 0===t?e[w]:t)===n&&xt(e,n).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${n}":`,e)})});let o=t.pendingControllerAttachments.get(n);o||(o=new Set,t.pendingControllerAttachments.set(n,o)),o.add(e),queueMicrotask(()=>{t.pendingControllerAttachments.get(n)?.has(e)&&console.error(`Failed to attach controller "${n}":`,new Error(`Controller "${n}" not found in registry`))})}function Tt(e){return"string"==typeof e?e:e?.name||"(anonymous controller class)"}function _t(e,t){if(null===t){if(!e.hasAttribute("controller"))return}else if(e.getAttribute("controller")===t)return;e[O]=!0;try{null===t?e.removeAttribute("controller"):e.setAttribute("controller",t)}finally{delete e[O]}}function Ct(e){if(!e[x])return!1;const t=e[A];return"function"==typeof t&&(_t(e,function(e){const t=Object.prototype.hasOwnProperty.call(e,C)?e[C]:void 0;return"string"==typeof t?t:Tt(e)}(t)),!0)}async function xt(e,n){if("string"!=typeof n){if("function"!=typeof n)throw new Error(`attachController: expected a controller name or a controller class, got ${typeof n}. Controller instances are not supported — pass the class itself.`);if("function"!=typeof(s=n)||!0!==s.prototype?.[o])throw new Error(`Controller class "${Tt(n)}" must be decorated with @controller('name') before it can be attached.`)}var s;const i=Tt(n),a=e[N],c=e[_];if("string"==typeof n&&void 0!==c&&c!==n)return;if(e[A]===n&&a)return void("string"!=typeof n&&Ct(e));if(a&&(await Ot(e),e[N]&&e[A]===n))return void("string"!=typeof n&&Ct(e));let l;if("string"==typeof n){const e=globalThis.snice?.controllerRegistry;if(!e)throw new Error("Snice global registry not initialized");if(l=e.get(n),!l)throw new Error(`Controller "${n}" not found in registry`)}else l=n;const h=new l;"string"!=typeof n&&(e[x]=!0,delete e[_]),t.controllerIdCounter+=1;const u=t.controllerIdCounter,d=new At;h[r]=!0,h[S]=u,h.element=e;const m=e[B];if(void 0!==m&&(h[B]=m),e[N]=h,e[A]=n,e[T]=d,"string"!=typeof n&&Ct(e),!e[f]){const t=new AbortController;e[Oe]=t;const o=3e4;try{await Promise.race([e.ready,new Promise((e,n)=>{const r=()=>{const e=new Error(`attachController("${i}"): aborted before element was ready (likely detached or never connected)`);e.name="ControllerAttachAborted",n(e)};if(t.signal.aborted)return r();t.signal.addEventListener("abort",r,{once:!0});const s=setTimeout(()=>n(new Error(`attachController("${i}"): element did not become ready within ${o}ms (did you forget to appendChild it?)`)),o);t.signal.addEventListener("abort",()=>clearTimeout(s),{once:!0})})])}catch(t){throw e[N]===h&&("string"!=typeof n&&_t(e,null),delete e[N],delete e[A],delete e[T],"string"!=typeof n&&delete e[x]),t}finally{e[Oe]===t&&delete e[Oe]}}h[ke]=!0,await d.runOperation(async()=>{await h.attach(e)}),Ye(h,e),ut(h,e),Et(h,e),e.dispatchEvent(new CustomEvent("controller-attached",{detail:{name:i,controller:h}}))}async function Ot(e){const t=e[Oe];t&&t.abort();const n=e[N],o=e[A],r=e[T];n&&("function"==typeof o&&_t(e,null),delete e[N],delete e[A],delete e[T],"function"==typeof o&&delete e[x],n[ke]&&(r?await r.runOperation(async()=>{await n.detach(e)}):await n.detach(e),n.element=null,ot(n),dt(n),Nt(n),r&&await r.cleanup(),delete n[B],e.dispatchEvent(new CustomEvent("controller-detached",{detail:{name:void 0===o?void 0:Tt(o),controller:n}}))))}function kt(){if(globalThis.sniceNativeControllersInitialized)return;function e(e){if(!(e instanceof HTMLElement))return;if(!e.tagName||e.tagName.includes("-"))return;if(e[a])return;if(e[x])return void Ct(e);const t=e.getAttribute("controller"),n=e[_];if(t!==n&&(t||void 0!==n)){if(!t)return delete e[_],delete e[A],void Ot(e).catch(e=>{console.error("Failed to detach controller from native element:",e)});e[_]=t,e.ready||(e.ready=Promise.resolve()),n&&Ot(e).catch(e=>{console.error("Failed to detach old controller from native element:",e)}),xt(e,t).catch(n=>{"ControllerAttachAborted"!==n?.name?n?.message!==`Controller "${t}" not found in registry`?console.error(`Failed to attach controller "${t}" to native element:`,n):St(e,t):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}}globalThis.sniceNativeControllersInitialized=!0;const t=new MutationObserver(t=>{for(const n of t)"attributes"===n.type&&"controller"===n.attributeName?e(n.target):"childList"===n.type&&n.addedNodes.forEach(t=>{t instanceof HTMLElement&&(e(t),t.querySelectorAll("[controller]").forEach(e))})});function n(){document.querySelectorAll("[controller]").forEach(e),t.observe(document.body,{attributes:!0,attributeFilter:["controller"],childList:!0,subtree:!0})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n(),globalThis.sniceNativeControllerObserver=t}const $t=n("context-handlers");function Lt(e){const t=e.constructor[$t];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[le];if(n){e[he]=n;for(const o of t){const{methodName:t,method:r,options:s}=o,i=`__wrapped_${t}`;e[i]=function(n){const o=e[ge]||(e[ge]=new Set);if(s.once&&o.has(t))return;const a=()=>{if(r.call(e,n),s.once){o.add(t);const n=e[he];n&&"function"==typeof n[me]&&n[me](e,i)}},c=e[ye]||(e[ye]={}),l=t;if(s.debounce)return clearTimeout(c[l]?.timeout),void(c[l]={timeout:setTimeout(a,s.debounce)});if(s.throttle){const e=Date.now();return void(e-(c[l]?.lastCall||0)>=s.throttle&&(c[l]={lastCall:e},a()))}a()},"function"==typeof n[fe]&&n[fe](e,i)}}}const Pt=Symbol.for("snice:html-result"),jt=Symbol.for("snice:css-result"),Mt=new WeakMap;function Rt(e){return e&&e._$litType$===Pt}function Dt(e){return e&&e._$litType$===jt}const It=Symbol.for("snice:nothing"),Vt=Symbol.for("snice:unsafe-html");function qt(e){return e&&e._$litType$===Vt}const Bt=Symbol.for("snice:repeat-result"),Ft=new WeakSet;function Wt(e){return e[b]||e.shadowRoot||null}function zt(e){const t=Wt(e);if(t)return t;const n=e.constructor[v];let o;if(o="light"===n?.renderRoot||!1===n?.shadow?e:"function"==typeof e.createRenderRoot?e.createRenderRoot():e.attachShadow({mode:"string"==typeof n?.shadow?n.shadow:"open",delegatesFocus:n?.delegatesFocus}),o!==e&&!(o instanceof ShadowRoot))throw new TypeError("snice: createRenderRoot() must return the host element or a ShadowRoot.");return e[b]=o,Ft.add(e),o}function Ut(e){const t=e.getRootNode();if(t instanceof ShadowRoot)return t.host;let n=e;for(;n;){if(n instanceof HTMLElement&&Ft.has(n))return n;n=n.parentNode}return null}const Ht=`snice$${Math.random().toFixed(9).slice(2)}$`,Kt="?"+Ht,Gt=`\x3c!--${Kt}--\x3e`,Qt=new RegExp(Ht.replace(/\$/g,"\\$"),"g"),Jt=new WeakMap,Xt=Symbol("not-committed");function Yt(e,t){const n=e.localName;if(!n?.includes("-"))return;const o=e.ownerDocument?.defaultView?.customElements??globalThis.customElements;if(o?.get(n))return;const r=e;r[D]||(r[D]=new Set),r[D].add(t)}const Zt=Symbol.for("snice:no-change"),en=Symbol.for("snice:live"),tn=e=>null===e||"object"!=typeof e&&"function"!=typeof e,nn=e=>!!e&&"function"==typeof e[Symbol.asyncIterator];class on{constructor(e,t,n){this.parts=[],this.keyIndex=-1,this.element=t;const o=document.createTreeWalker(t.content,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_TEXT);let r=0;const s=[];let i;for(;null!==(i=o.nextNode());)if(i.nodeType===Node.ELEMENT_NODE){const e=i,t=e.tagName.toLowerCase(),o=e.parentElement?.tagName.toLowerCase();if(("else"===t||"else-if"===t)&&"if"!==o)throw new Error(`snice: <${t}> must be a direct child of <if>.`);if(("when"===t||"default"===t)&&"case"!==o)throw new Error(`snice: <${t}> must be a direct child of <case>.`);if("if"===t){const t=e.getAttribute("value");if(!t||!t.includes(Ht))throw new Error("snice: <if> requires a condition expression.");e.removeAttribute("value"),this.parts.push({type:"conditional-if",index:r++,element:e});continue}if("case"===t){const t=e.getAttribute("value");if(!t||!t.includes(Ht))throw new Error("snice: <case> requires a value expression.");for(const t of Array.from(e.childNodes))if(t.nodeType===Node.ELEMENT_NODE){const e=t.tagName.toLowerCase();if("when"!==e&&"default"!==e)throw new Error("snice: <case> may contain only direct <when> and <default> branches.")}else if(t.nodeType===Node.TEXT_NODE&&t.textContent?.trim()||t.nodeType===Node.COMMENT_NODE&&t.data.includes(Ht))throw new Error("snice: content inside <case> must be nested in a <when> or <default> branch.");e.removeAttribute("value"),this.parts.push({type:"conditional-case",index:r++,element:e});continue}if("else-if"===t){const t=e.getAttribute("value");if(!t||!t.includes(Ht))throw new Error("snice: <else-if> requires a condition expression.");e.removeAttribute("value"),this.parts.push({type:"conditional-else-if",index:r++,element:e});continue}if("when"===t){const t=e.getAttribute("value");t&&t.includes(Ht)&&(e.removeAttribute("value"),this.parts.push({type:"conditional-when",index:r++,element:e}));continue}if(e.hasAttributes()){const t=e.attributes,o=[];for(let s=0;s<t.length;s++){const i=t[s],a=i.value;if(a.includes(Ht)){o.push(i);const t=n[r]||i.name,s=a.split(Ht),c=s.length-1;if(/^@@?|^[.?]/.test(t)||t.startsWith("...")||t.startsWith("class:")||t.startsWith("style:")){const e=s.some(e=>""!==e);(c>1||e)&&console.warn(`snice: binding "${t}" takes a single expression; static text and extra interpolations are ignored. Use a plain attribute for string interpolation.`)}if(t.startsWith("...")){const n=t.slice(3).toLowerCase();if(!["props","properties","attrs","attributes","events"].includes(n))throw new Error(`snice: unknown spread binding "${t}". Use ...props, ...attrs, or ...events.`);this.parts.push({type:"spread",index:r,name:n,element:e}),r+=c}else if(t.startsWith("class:")){if(!t.slice(6))throw new Error("snice: class: binding requires a class name.");this.parts.push({type:"class",index:r,name:t.slice(6),element:e}),r+=c}else if(t.startsWith("style:")){if(!t.slice(6))throw new Error("snice: style: binding requires a CSS property name.");this.parts.push({type:"style",index:r,name:t.slice(6),element:e}),r+=c}else if(t.startsWith("@@")){if(!t.slice(2).split("|")[0])throw new Error("snice: event binding requires an event name.");this.parts.push({type:"event",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith("@")){if(!t.slice(1).split("|")[0])throw new Error("snice: event binding requires an event name.");this.parts.push({type:"event",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith(".")){if(!t.slice(1))throw new Error("snice: property binding requires a property name.");this.parts.push({type:"property",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith("?")){if(!t.slice(1))throw new Error("snice: boolean binding requires an attribute name.");this.parts.push({type:"boolean-attribute",index:r,name:t.slice(1),element:e}),r+=c}else"controller"===i.name&&2===s.length&&""===s[0]&&""===s[1]?(this.parts.push({type:"controller",index:r,element:e}),r+=c):(this.parts.push({type:"attribute",index:r,name:i.name,element:e,attrStrings:s}),r+=c)}}for(const t of o)e.removeAttribute(t.name)}}else if(i.nodeType===Node.COMMENT_NODE){const e=i;if(e.data===Kt){const t=e.parentNode,n=document.createComment("");t.insertBefore(n,e.nextSibling),this.parts.push({type:"node",index:r++,startNode:e,endNode:n})}else if(e.data.includes(Ht)){const t=e.data.split(Qt);this.parts.push({type:"comment",index:r,startNode:e,attrStrings:t}),r+=t.length-1}}else if(i.nodeType===Node.TEXT_NODE){const e=i,t=e.data;if(t.includes(Ht)){const n=e.parentNode,o=t.split(Qt),i=o.length-1;for(let t=0;t<i;t++){n.insertBefore(document.createTextNode(o[t]),e);const s=document.createComment(""),i=document.createComment("");n.insertBefore(s,e),n.insertBefore(i,e),this.parts.push({type:"node",index:r++,startNode:s,endNode:i})}""!==o[i]?e.data=o[i]:s.push(e)}}for(const e of s)e.parentNode?.removeChild(e);for(const e of this.parts)if("attribute"===e.type&&"key"===e.name){this.keyIndex=e.index;break}}}function rn(e){const{strings:t}=e,n=Jt.get(t);if(n)return n;const o=[],r=[];let s=!1,i=!1,a=!1,c="",l="";for(let e=0;e<t.length;e++){const n=t[e];if(o.push(n),e<t.length-1){for(let e=0;e<n.length;e++){const t=n[e];if(a)"-"===t&&n.startsWith("--\x3e",e)&&(a=!1,e+=2);else if(s){if(i)t===c&&(i=!1,c="");else if(">"===t)s=!1;else if('"'===t||"'"===t)i=!0,c=t;else if("="===t){let t=e-1;for(;t>=0&&/[\w\-\.@\?/:\+~|]/.test(n[t]);)t--;l=n.substring(t+1,e).trim()}}else"<"===t&&(n.startsWith("\x3c!--",e)?(a=!0,e+=3):/[A-Za-z!/?]/.test(n[e+1]||"")&&(s=!0))}if(a)r.push(""),o.push(Ht);else if(i)r.push(l),o.push(Ht);else if(s){const s=n.trimEnd();if(s.endsWith("=")){let e=s.length-2;for(;e>=0&&/[\w\-\.@\?\/:\+~|]/.test(s[e]);)e--;l=s.substring(e+1,s.length-1).trim(),r.push(l),o.push(Ht)}else{if(!n.match(/<(if|else-if|case|when)\s*$/)){const o=(n.slice(-40)+"${…}"+(t[e+1]??"").slice(0,40)).replace(/\s+/g," ").trim();throw new Error(`snice: expressions directly in opening tags are not supported; use an explicit attribute, property, event, class, style, or named spread binding. Near "${o}".`)}l="value",r.push("value"),o.push(`value="${Ht}"`)}}else r.push(""),o.push(Gt)}}const h=o.join(""),u=document.createElement("template");if(e.svg){u.innerHTML=`<svg>${h}</svg>`;const e=u.content.firstElementChild;for(;e.firstChild;)u.content.insertBefore(e.firstChild,e);u.content.removeChild(e)}else u.innerHTML=h;let d;try{d=new on(e,u,r)}catch(e){throw function(e,t){if(e instanceof Error&&/\bNear "[\s\S]*"\.$/.test(e.message))return e;const n=e instanceof Error?e.message:String(e),o=Array.from(t).join("${…}").replace(/\s+/g," ").trim(),r=/<([a-z][a-z0-9-]*)>/i.exec(n)?.[1],s=/binding "([^"]+)"/i.exec(n)?.[1],i=r?`<${r}`:s??"",a=i?o.indexOf(i):-1,c=a>=0?a:0,l=Math.max(0,c-40),h=Math.min(o.length,c+80),u=h<o.length?"…":"";return new Error(`${n} Near "${l>0?"…":""}${o.slice(l,h)}${u}".`,{cause:e})}(e,t)}return Jt.set(t,d),d}function sn(e){if(!Rt(e))return;const t=rn(e);return-1===t.keyIndex?void 0:e.values[t.keyIndex]}class an{constructor(e){this.parts=[],this.fragment=null,this.conditionalParts=[],this.regularParts=[],this.template=rn(e),this.strings=e.strings}isSameTemplate(e){return this.strings===e}renderFragment(){if(!this.fragment){this.fragment=this.template.element.content.cloneNode(!0);const e=document.createTreeWalker(this.template.element.content,NodeFilter.SHOW_ALL),t=document.createTreeWalker(this.fragment,NodeFilter.SHOW_ALL),n=new Map;let o=e.currentNode,r=t.currentNode;for(;o&&r;)n.set(o,r),o=e.nextNode(),r=t.nextNode();const s=new Set;for(const e of this.template.parts)"conditional-when"===e.type&&s.add(n.get(e.element));for(let e=0;e<this.template.parts.length;e++){const t=this.template.parts[e];let o;switch(t.type){case"node":const e=n.get(t.startNode),r=n.get(t.endNode);o=new ln(e,r);break;case"attribute":const i=n.get(t.element);o=new hn(i,t.name,t.attrStrings);break;case"property":const a=n.get(t.element);o=new pn(a,t.name);break;case"boolean-attribute":const c=n.get(t.element);o=new gn(c,t.name);break;case"event":const l=n.get(t.element);o=new bn(l,t.name);break;case"class":const h=n.get(t.element);o=new dn(h,t.name);break;case"style":const u=n.get(t.element);o=new fn(u,t.name);break;case"spread":const d=n.get(t.element);o=new mn(d,t.name);break;case"controller":const f=n.get(t.element);o=new yn(f);break;case"conditional-if":const m=n.get(t.element);o=new wn(m);break;case"conditional-else-if":const p=n.get(t.element);o=new Nn(p);break;case"conditional-case":const y=n.get(t.element);o=new An(y,s);break;case"conditional-when":const g=n.get(t.element);o=new Tn(g);break;case"comment":const b=n.get(t.startNode);o=new un(b,t.attrStrings);break;default:throw new Error(`Unknown part type: ${t.type}`)}this.parts.push(o),o instanceof wn||o instanceof Nn||o instanceof An||o instanceof Tn?this.conditionalParts.push({part:o,index:t.index}):this.regularParts.push({part:o,index:t.index})}}return this.fragment}render(e){const t=this.renderFragment();return this.update(e),t}update(e){for(const{part:t,index:n}of this.conditionalParts)t.commit(e[n]);const t=new Set;for(const{part:e}of this.conditionalParts){const n=e instanceof Nn||e instanceof Tn?e.coordinator:e;t.has(n)||(t.add(n),(n instanceof wn||n instanceof An)&&n.flush())}for(const{part:t,index:n}of this.regularParts)t instanceof hn&&void 0!==t.strings||t instanceof un?t.commit(e,n):t.commit(e[n]);let n;for(const e of this.parts)try{e.isConnected?e.reconnected():e.disconnected()}catch(e){n??=e}if(n)throw n}clear(){let e;for(const t of this.parts)try{t.destroy()}catch(t){e??=t}if(e)throw e}disconnected(e=!1){let t;for(const n of this.parts)try{n.disconnected(e)}catch(e){t??=e}if(t)throw t}reconnected(){let e;for(const t of this.parts)try{t.reconnected()}catch(t){e??=t}if(e)throw e}}class cn{get isConnected(){return this.element?.isConnected??!1}disconnected(e=!1){}reconnected(){}destroy(){let e;try{this.clear()}catch(t){e=t}if(e)throw e}}class ln extends cn{constructor(e,t){super(),this.type="node",this._committedValue=Xt,this._itemKeys=null,this._asyncSource=null,this._asyncVersion=0,this._asyncIterator=null,this._asyncRunning=!1,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1,this._committingAsyncValue=!1,this.startNode=e,this.endNode=t}commit(e){if(e!==Zt)if((e=>!!e&&"function"==typeof e.then)(e)||nn(e))this._commitAsync(e);else if(!this._committingAsyncValue&&this._asyncSource&&this._cancelAsync(!0),e!==It&&null!=e&&""!==e)tn(e)?e!==this._committedValue&&this._commitText(e):Rt(e)?this._commitTemplateResult(e):function(e){return!!e&&e._$repeat$===Bt}(e)?0===e.values.length?this.commit(e.empty??It):this._commitIterable(e.values,e.keys):qt(e)?this._commitUnsafeHTML(e):void 0===e.nodeType?(e=>Array.isArray(e)||"function"==typeof e?.[Symbol.iterator])(e)?this._commitIterable(e):this._commitText(e):this._commitNode(e);else{if(this._committedValue!==It){const e=this._clear();if(this._committedValue=It,e)throw e}this._committedValue=It}}_commitText(e){if(this._committedValue!==Xt&&this._committedValue!==It&&tn(this._committedValue)&&!Array.isArray(this._committedValue)){const t=this.startNode.nextSibling;if(t&&t.nodeType===Node.TEXT_NODE)return t.data=String(e),void(this._committedValue=e)}const t=this._clear();if(this._insertBefore(document.createTextNode(String(e))),this._committedValue=e,t)throw t}_commitTemplateResult(e){const t=this._committedValue;if(t instanceof an){const n=Jt.get(e.strings);if(n&&t.template===n)return void t.update(e.values)}const n=new an(e),o=n.renderFragment();try{n.update(e.values)}catch(e){throw n.clear(),e}const r=this._committedValue,s=this._itemKeys,i=this.endNode.ownerDocument.createDocumentFragment();let a=this.startNode.nextSibling;for(;a&&a!==this.endNode;){const e=a.nextSibling;i.appendChild(a),a=e}this._insertBefore(o),this._committedValue=n,this._itemKeys=null;try{this.isConnected&&n.reconnected()}catch(e){try{n.clear()}catch(e){console.error("snice: failed to clean up a rejected nested template:",e)}let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const e=t.nextSibling;t.remove(),t=e}throw this._insertBefore(i),this._committedValue=r,this._itemKeys=s,e}this._disposeCommitted(r)}_commitIterable(e,t){const n=Array.isArray(e)?e:Array.from(e),o=t?Array.from(t):n.map(sn);if(o.length!==n.length)throw new Error("snice: keyed iterable produced a different number of keys and values.");const r=o.filter(e=>void 0!==e);if(r.length>0&&r.length!==o.length&&console.warn("snice: a list mixes keyed and unkeyed items. Identity falls back to position; use repeat(items, { key, render }) for deterministic updates."),r.length>0&&new Set(r).size!==r.length)throw new Error("snice: a keyed list contains duplicate keys.");let s;Array.isArray(this._committedValue)&&this._committedValue[0]instanceof ln||(s=this._clear(),this._committedValue=[],this._itemKeys=null);const i=n.length>0&&o.every(e=>void 0!==e),a=this._itemKeys;if(i&&a&&this._committedValue.length>0&&(a.length!==o.length||!o.every((e,t)=>e===a[t]))){if(s??=this._reconcileKeyed(n,o,this._committedValue,a),this._itemKeys=o,s)throw s;return}const c=this._committedValue;let l=0;for(const e of n){let t;if(l>=c.length){const e=document.createComment(""),n=document.createComment("");this._insertBefore(e),this._insertBefore(n),t=new ln(e,n),c.push(t)}else t=c[l];t.commit(e),l++}if(l<c.length){for(let e=l;e<c.length;e++){const t=c[e];try{t.destroy()}catch(e){s??=e}t.startNode.remove(),t.endNode.remove()}c.length=l}if(this._itemKeys=i?o:null,s)throw s}_reconcileKeyed(e,t,n,o){const r=this.endNode.parentNode;let s;const i=new Map;for(let e=0;e<n.length;e++)i.has(o[e])||i.set(o[e],n[e]);const a=new Set,c=new Array(e.length).fill(null);for(let n=0;n<e.length;n++){const e=i.get(t[n]);e&&!a.has(e)&&(a.add(e),c[n]=e)}for(const e of n)if(!a.has(e)){try{e.destroy()}catch(e){s??=e}e.startNode.remove(),e.endNode.remove()}let l=this.startNode.nextSibling;for(let t=0;t<c.length;t++){let n=c[t];if(n)if(n.startNode===l)l=n.endNode.nextSibling;else{const e=document.createDocumentFragment();let t=n.startNode;const o=n.endNode.nextSibling;for(;t&&t!==o;){const n=t.nextSibling;e.appendChild(t),t=n}r.insertBefore(e,l)}else{const e=document.createComment(""),o=document.createComment("");r.insertBefore(e,l),r.insertBefore(o,l),n=new ln(e,o),c[t]=n}n.commit(e[t])}return this._committedValue=c,s}_commitNode(e){if(this._committedValue!==e){const t=this._clear();if(this._insertBefore(e),this._committedValue=e,t)throw t}}_commitUnsafeHTML(e){const t=this._committedValue;if(qt(t)&&t.html===e.html)return;const n=this._clear(),o=document.createElement("template");if(o.innerHTML=e.html,this._insertBefore(o.content),this._committedValue=e,n)throw n}_commitAsync(e){if(e===this._asyncSource)return;this._cancelAsync(!1),this._asyncSource=e,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1;const t=this._clear();if(this._committedValue=It,this._startAsyncSource(),t)throw t}_startAsyncSource(e=!1){const t=this._asyncSource;if(!t||this._asyncRunning||this._asyncCompleted||!e&&!this.isConnected)return;this._asyncRunning=!0,this._asyncStarted=!0,this._asyncPaused=!1;const n=++this._asyncVersion;if(nn(t)){try{this._asyncIterator=t[Symbol.asyncIterator]()}catch(e){return this._asyncRunning=!1,this._asyncCompleted=!0,void console.error("snice: async iterable template value failed:",e)}(async()=>{try{for(;this._asyncIterator;){const e=await this._asyncIterator.next();if(e.done||n!==this._asyncVersion)break;this._commitAsyncValue(e.value)}}catch(e){n===this._asyncVersion&&console.error("snice: async iterable template value failed:",e)}finally{n===this._asyncVersion&&(this._asyncIterator=null,this._asyncRunning=!1,this._asyncCompleted=!0)}})()}else Promise.resolve(t).then(e=>{if(n===this._asyncVersion){this._asyncRunning=!1,this._asyncCompleted=!0;try{this._commitAsyncValue(e)}catch(e){console.error("snice: promise template value failed:",e)}}},e=>{n===this._asyncVersion&&(this._asyncRunning=!1,this._asyncCompleted=!0,console.error("snice: promise template value failed:",e))})}_commitAsyncValue(e){this._committingAsyncValue=!0;try{this.commit(e)}finally{this._committingAsyncValue=!1}}_cancelAsync(e){this._asyncVersion++;const t=this._asyncIterator;if(this._asyncIterator=null,this._asyncRunning=!1,e&&(this._asyncSource=null,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1),t?.return)try{Promise.resolve(t.return()).catch(()=>{})}catch{}}_insertBefore(e){this.endNode.parentNode?.insertBefore(e,this.endNode)}_clear(){const e=this.startNode.parentNode,t=this._committedValue;let n;try{this._disposeCommitted(t)}catch(e){n=e}if(!e)return this._committedValue=It,n;let o=this.startNode.nextSibling;for(;o&&o!==this.endNode;){const t=o.nextSibling;e.removeChild(o),o=t}return this._committedValue=It,n}_disposeCommitted(e){let t;if(e instanceof an)try{e.clear()}catch(e){t=e}else if(Array.isArray(e))for(const n of e)if(n instanceof ln)try{n.destroy()}catch(e){t??=e}if(t)throw t}clear(){this._cancelAsync(!0);const e=this._clear();if(e)throw e}get isConnected(){return this.startNode.isConnected}disconnected(e=!1){let t;if(this._committedValue instanceof an)try{this._committedValue.disconnected(e)}catch(e){t??=e}else if(Array.isArray(this._committedValue))for(const n of this._committedValue)if(n instanceof ln)try{n.disconnected(e)}catch(e){t??=e}if(this._asyncSource&&this._asyncRunning&&(this._cancelAsync(!1),this._asyncPaused=!0),t)throw t}reconnected(){let e;if(this._committedValue instanceof an)try{this._committedValue.reconnected()}catch(t){e??=t}else if(Array.isArray(this._committedValue))for(const t of this._committedValue)if(t instanceof ln)try{t.reconnected()}catch(t){e??=t}if(!this._asyncSource||this._asyncStarted&&!this._asyncPaused||this._startAsyncSource(!0),e)throw e}}class hn extends cn{constructor(e,t,n){super(),this.type="attribute",this._committedValue=Xt,this.lastValues=null,this.lastValueIndex=0,this.element=e,this.name=t,n&&(n.length>2||""!==n[0]||""!==n[1])?(this._committedValue=new Array(n.length-1).fill(Xt),this.strings=n):this._committedValue=Xt}commit(e,t=0){let n,o=!1;if(void 0===this.strings){if(e===Zt)return;if(o=!tn(e)||e!==this._committedValue&&e!==Zt,!o)return;this._committedValue=e,n=e}else{const r=e;this.lastValues=[...r],this.lastValueIndex=t;const s=this._committedValue;n=this.strings[0];for(let e=0;e<this.strings.length-1;e++){let i=r[t+e];i===Zt&&(i=s[e],i===Xt&&(i="")),o=o||!tn(i)||i!==s[e],i===It?n=It:n!==It&&(n=n+(i??"")+this.strings[e+1]),s[e]=i}if(!o)return}this._commitValue(n)}_commitValue(e){e===It?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,String(e??""))}clear(){this.element.removeAttribute(this.name)}}class un extends cn{constructor(e,t){super(),this.type="node",this.lastValues=null,this.lastValueIndex=0,this.node=e,this.strings=t,this._committedValues=new Array(t.length-1).fill(Xt)}commit(e,t=0){const n=e;this.lastValues=[...n],this.lastValueIndex=t;let o=!1,r=this.strings[0];for(let e=0;e<this.strings.length-1;e++){let s=n[t+e];s===Zt&&(s=this._committedValues[e],s===Xt&&(s="")),o=o||!tn(s)||s!==this._committedValues[e],this._committedValues[e]=s,r+=String(s===It?"":s??"")+this.strings[e+1]}if(o){if(r.includes("--")||r.endsWith("-"))throw new Error('snice: comment expressions cannot produce "--" or end with "-".');this.node.data=r}}clear(){}}class dn extends cn{constructor(e,t){super(),this.type="class",this.committed=Xt,this.element=e,this.name=t}commit(e){if(e===Zt)return;const t=e!==It&&Boolean(e);t!==this.committed&&(this.committed=t,this.element.classList.toggle(this.name,t))}clear(){this.element.classList.remove(this.name),this.committed=Xt}}class fn extends cn{constructor(e,t){super(),this.type="style",this.committed=Xt,this.element=e,this.name=t}commit(e){if(e===Zt||Object.is(e,this.committed))return;this.committed=e;const t=this.element.style;e===It||null==e||!1===e?t.removeProperty(this.name):t.setProperty(this.name,String(e))}clear(){this.element.style.removeProperty(this.name),this.committed=Xt}}class mn extends cn{constructor(e,t){super(),this.type="spread",this.committed={},this.listeners=new Map,this.consumedOnce=new Map,this.element=e,this.name=t}commit(e){if(e===Zt)return;if(e!==It&&null!=e||(e={}),"object"!=typeof e||Array.isArray(e))throw new TypeError(`snice: ...${this.name} expects an object.`);const t=e;"events"===this.name?this.commitEvents(t):"props"===this.name||"properties"===this.name?this.commitProperties(t):this.commitAttributes(t),this.committed={...t}}commitProperties(e){for(const t of Object.keys(this.committed))Object.prototype.hasOwnProperty.call(e,t)||(Yt(this.element,t),this.element[t]=void 0);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||(Yt(this.element,t),this.element[t]=n===It?void 0:n)}commitAttributes(e){for(const t of Object.keys(this.committed))Object.prototype.hasOwnProperty.call(e,t)||this.element.removeAttribute(t);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||(n===It||null==n||!1===n?this.element.removeAttribute(t):this.element.setAttribute(t,!0===n?"":String(n)))}commitEvents(e){!function(e,t){const n=new Set;for(const[o,r]of Object.entries(e)){const e=o.startsWith("@")?o.slice(1):o;if(!e)throw new TypeError(`snice: ${t} contains an empty event name.`);if(n.has(e))throw new TypeError(`snice: ${t} contains duplicate event name "${e}".`);if(n.add(e),r!==It&&null!=r&&!1!==r&&"function"!=typeof r&&(!r||"object"!=typeof r||"function"!=typeof r.handleEvent))throw new TypeError(`snice: ${t} event "${e}" expects a function, EventListenerObject, or null.`)}}(e,`...${this.name}`);for(const[t,n]of this.consumedOnce){const o=Object.keys(e).find(e=>this.eventName(e)===t);o&&Object.is(e[o],n)||this.consumedOnce.delete(t)}for(const[t,n]of this.listeners){const o=Object.keys(e).find(e=>this.eventName(e)===t);o&&Object.is(e[o],n.value)||(this.element.removeEventListener(t,n.listener,n.options),this.listeners.delete(t))}for(const[t,n]of Object.entries(e)){const e=this.eventName(t);if(this.listeners.has(e))continue;const o=!!n&&"object"==typeof n&&"function"==typeof n.handleEvent;if(n===It||null==n||!1===n)continue;if(this.consumedOnce.has(e)&&Object.is(this.consumedOnce.get(e),n))continue;this.consumedOnce.delete(e);const r=o?n:void 0,s=t=>{r?.once&&this.consumedOnce.set(e,n),o?n.handleEvent(t):n.call(this.resolveHost(),t)};this.element.addEventListener(e,s,r),this.listeners.set(e,{value:n,listener:s,options:r})}}eventName(e){return e.startsWith("@")?e.slice(1):e}resolveHost(){return Ut(this.element)||this.element}clear(){if("events"===this.name){for(const[e,t]of this.listeners)this.element.removeEventListener(e,t.listener,t.options);this.listeners.clear(),this.consumedOnce.clear()}else if("props"!==this.name&&"properties"!==this.name)for(const e of Object.keys(this.committed))this.element.removeAttribute(e);this.committed={}}disconnected(e=!1){"events"!==this.name||e||this.detachListeners()}reconnected(){"events"===this.name&&0===this.listeners.size&&this.commitEvents(this.committed)}detachListeners(){for(const[e,t]of this.listeners)this.element.removeEventListener(e,t.listener,t.options);this.listeners.clear()}}class pn extends cn{constructor(e,t){super(),this.type="property",this._committedValue=Xt,this.element=e,this.name=t}commit(e){if(e!==Zt){if(function(e){return e&&e._$liveMarker$===en}(e)){if((e=e.value)===Zt)return;if(e===this.element[this.name])return void(this._committedValue=e)}else if(e===this._committedValue)return;this._committedValue=e,Yt(this.element,this.name),this.element[this.name]=e===It?void 0:e}}clear(){this._committedValue=Xt}}class yn extends cn{constructor(e){super(),this.type="controller",this._committedValue=Xt,this.element=e}commit(e){if(e===Zt)return;const t=null==e||!1===e||""===e||e===It?null:e,n=this._committedValue===Xt,o=n?null:this._committedValue;if(!n&&t===o)return;this._committedValue=t;const r=this.element;"function"==typeof o&&"function"!=typeof t&&(void 0!==r[k]?delete r[k]:r[a]?r.controller=null:this._detach()),"function"==typeof t?this.isConnected?this._apply(t):this.element.localName.includes("-")&&!r[a]&&(r[k]=t):"string"==typeof t?this.element.setAttribute("controller",t):"string"==typeof o&&this.element.removeAttribute("controller")}_apply(e){const t=this.element;t[a]?t.controller!==e?t.controller=e:this._attach(e):this.element.localName.includes("-")?t[k]=e:(t.ready||(t.ready=Promise.resolve()),this._attach(e))}_attach(e){xt(this.element,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e?.name||e}":`,t)})}_detach(){Ot(this.element).catch(e=>{console.error("Failed to detach controller:",e)})}disconnected(e=!1){if("function"!=typeof this._committedValue)return;const t=this.element;void 0===t[k]&&(t[a]||this._detach())}reconnected(){const e=this._committedValue;"function"==typeof e&&this._apply(e)}clear(){const e=this.element;void 0!==e[k]&&delete e[k];const t=this._committedValue;this._committedValue=Xt,"function"==typeof t&&(e[a]||this._detach())}}class gn extends cn{constructor(e,t){super(),this.type="boolean-attribute",this._committedValue=Xt,this.element=e,this.name=t}commit(e){if(e===Zt)return;const t=!!e&&e!==It;t!==this._committedValue&&(this._committedValue=t,t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name))}clear(){this.element.removeAttribute(this.name),this._committedValue=Xt}}class bn extends cn{constructor(e,t){super(),this.type="event",this.listener=null,this.listenerOptions=void 0,this.value=void 0,this.keyFilter=null,this.host=null,this.modifiers=new Set,this.once=!1,this.onceConsumed=!1,this.element=e;const[n,...o]=t.split("|"),r={preventdefault:"prevent",stoppropagation:"stop",stopimmediatepropagation:"immediate"},s=new Set(["prevent","stop","immediate","once","capture","passive","self"]);for(const e of o){const n=r[e.toLowerCase()]||e.toLowerCase();if(!s.has(n))throw new Error(`snice: unknown event modifier "${e}" in @${t}. Supported modifiers: prevent, stop, immediate, once, capture, passive, self.`);this.modifiers.add(n)}if(this.modifiers.has("passive")&&this.modifiers.has("prevent"))throw new Error(`snice: @${t} cannot combine passive and prevent.`);const i=["keydown","keyup","keypress"].includes(n.split(".")[0].split(":")[0]),a=i?n.indexOf("."):-1,c=i?n.indexOf(":"):-1,l=a>0&&c>0?Math.min(a,c):Math.max(a,c);if(l>0){const e=n.substring(0,l),t=n.substring(l+1);this.eventName=e,this.keyFilter=pt(t)}else this.eventName=n,mt(n)}commit(e){if(e===Zt)return;e===It&&(e=null);const t=!!e&&"object"==typeof e&&"function"==typeof e.handleEvent;if(null!=e&&!1!==e&&"function"!=typeof e&&!t)throw new TypeError(`snice: @${this.eventName} expects a function, EventListenerObject, or null.`);if(t&&this.modifiers.has("prevent")&&e.passive)throw new Error(`snice: @${this.eventName} cannot combine a passive listener object with prevent.`);if(e!==this.value||null==e){if(this.listener&&(this.element.removeEventListener(this.eventName,this.listener,this.listenerOptions),this.listener=null,this.listenerOptions=void 0),null==e||!1===e)return this.value=e,void(this.onceConsumed=!1);this.onceConsumed=!1;try{this.attachListener(e,t),this.value=e}catch(e){throw this.value=void 0,e}}}attachListener(e,t){const n=this.keyFilter,o=r=>{this.modifiers.has("self")&&r.target!==this.element||n&&!gt(r,n)||(this.once&&(this.onceConsumed=!0,this.element.removeEventListener(this.eventName,o,s),this.listener=null,this.listenerOptions=void 0),this.modifiers.has("prevent")&&r.preventDefault(),this.modifiers.has("immediate")?r.stopImmediatePropagation():this.modifiers.has("stop")&&r.stopPropagation(),t?e.handleEvent(r):(this.host||(this.host=Ut(this.element)),e.call(this.host||this.element,r)))},r=t?e:{};this.once=this.modifiers.has("once")||!!r.once;const s={capture:this.modifiers.has("capture")||r.capture,passive:this.modifiers.has("passive")||r.passive,signal:r.signal};this.element.addEventListener(this.eventName,o,s),this.listener=o,this.listenerOptions=s}clear(){this.detachListener(),this.value=void 0,this.host=null,this.onceConsumed=!1}detachListener(){this.listener&&(this.element.removeEventListener(this.eventName,this.listener,this.listenerOptions),this.listener=null,this.listenerOptions=void 0)}disconnected(e=!1){e||this.detachListener(),this.host=null}reconnected(){this.listener||this.onceConsumed||null==this.value||!1===this.value||this.attachListener(this.value,"object"==typeof this.value)}}const vn=Symbol("not-set");class wn extends cn{constructor(e){super(),this.type="node",this.conditions=[vn],this.branches=[],this.defaultBranch=-1,this.currentBranch=-1;const t=e.parentNode;this.startNode=document.createComment("if"),this.endNode=document.createComment("/if"),t.insertBefore(this.startNode,e),t.insertBefore(this.endNode,e.nextSibling);const n=document.createDocumentFragment();this.branches.push(n);let o=!1,r=n;for(const t of Array.from(e.childNodes)){const e=t.nodeType===Node.ELEMENT_NODE?t.tagName.toLowerCase():"";if("else-if"===e||"else"===e){o=!0;const n=t,s=document.createDocumentFragment();for(;n.firstChild;)s.appendChild(n.firstChild);const i=this.branches.push(s)-1;if(r=s,"else-if"===e){if(-1!==this.defaultBranch)throw new Error("snice: <else> must be the final branch inside <if>.");this.conditions[i]=vn,En.set(n,{coordinator:this,index:i})}else{if(-1!==this.defaultBranch)throw new Error("snice: <if> may contain only one <else> branch.");this.defaultBranch=i}n.remove();continue}o?t.nodeType!==Node.TEXT_NODE||t.textContent?.trim()?r.appendChild(t):t.remove():n.appendChild(t)}t.removeChild(e)}commit(e){e!==Zt&&(this.conditions[0]=e)}setAlternative(e,t){t!==Zt&&(this.conditions[e]=t)}flush(){let e=-1;for(let t=0;t<this.conditions.length;t++)if(this.conditions[t]!==vn&&this.conditions[t]!==It&&Boolean(this.conditions[t])){e=t;break}-1===e&&(e=this.defaultBranch),e!==this.currentBranch&&(this.collectCurrent(),this.currentBranch=e,-1!==e&&this.branches[e].hasChildNodes()&&this.startNode.parentNode?.insertBefore(this.branches[e],this.endNode))}collectCurrent(){if(-1===this.currentBranch)return;const e=this.branches[this.currentBranch];let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const n=t.nextSibling;e.appendChild(t),t=n}}clear(){this.collectCurrent(),this.currentBranch=-1}get isConnected(){return this.startNode.isConnected}}const En=new WeakMap;class Nn extends cn{constructor(e){super(),this.type="node";const t=En.get(e);if(!t)throw new Error("snice: <else-if> must be a direct child of <if>.");this.coordinator=t.coordinator,this.index=t.index}commit(e){this.coordinator.setAlternative(this.index,e)}clear(){}get isConnected(){return this.coordinator.isConnected}}class An extends cn{constructor(e,t){super(),this.type="node",this.value=vn,this.branches=[],this.defaultBranch=-1,this.currentBranch=-1;const n=e.parentNode;this.startNode=document.createComment("case"),this.endNode=document.createComment("/case"),n.insertBefore(this.startNode,e),n.insertBefore(this.endNode,e.nextSibling);for(const n of Array.from(e.children)){const e=n.tagName.toLowerCase();if("when"===e){const e=document.createDocumentFragment();for(;n.firstChild;)e.appendChild(n.firstChild);const o=t.has(n),r=this.branches.push({fragment:e,dynamic:o,expected:o?vn:n.getAttribute("value")??""})-1;o&&Sn.set(n,{coordinator:this,index:r})}else if("default"===e){if(-1!==this.defaultBranch)throw new Error("snice: <case> may contain only one <default> branch.");const e=document.createDocumentFragment();for(;n.firstChild;)e.appendChild(n.firstChild);this.defaultBranch=this.branches.push({fragment:e,dynamic:!1,expected:vn})-1}}n.removeChild(e)}commit(e){e!==Zt&&(this.value=e)}setExpected(e,t){t!==Zt&&(this.branches[e].expected=t)}flush(){let e=this.branches.findIndex((e,t)=>t!==this.defaultBranch&&(e.dynamic?Object.is(this.value,e.expected):String(this.value)===e.expected));-1===e&&(e=this.defaultBranch),e!==this.currentBranch&&(this.collectCurrent(),this.currentBranch=e,-1!==e&&this.branches[e].fragment.hasChildNodes()&&this.startNode.parentNode?.insertBefore(this.branches[e].fragment,this.endNode))}collectCurrent(){if(-1===this.currentBranch)return;const e=this.branches[this.currentBranch].fragment;let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const n=t.nextSibling;e.appendChild(t),t=n}}clear(){this.collectCurrent(),this.currentBranch=-1}get isConnected(){return this.startNode.isConnected}}const Sn=new WeakMap;class Tn extends cn{constructor(e){super(),this.type="node";const t=Sn.get(e);if(!t)throw new Error("snice: dynamic <when> must be a direct child of <case>.");this.coordinator=t.coordinator,this.index=t.index}commit(e){this.coordinator.setExpected(this.index,e)}clear(){}get isConnected(){return this.coordinator.isConnected}}const _n=new WeakSet,Cn=new WeakSet,xn=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","iframe","object","embed","summary","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])','[tabindex]:not([tabindex="-1"])'].join(",");function On(e){try{e.focus()}catch{return!1}return function(e){const t=e.getRootNode().activeElement;return t===e||Boolean(t&&e.contains(t))}(e)}function kn(e){return e?Array.from(e.querySelectorAll("[autofocus]")).filter(e=>!Cn.has(e)):[]}function $n(e){return e?Array.from(e.querySelectorAll(xn)):[]}function Ln(e){if(_n.has(e)||!function(e){return!(!e.hasAttribute("autofocus")||Cn.has(e))||kn(Wt(e)).length>0}(e))return;_n.add(e);const t=()=>{const t=e.ownerDocument.defaultView,n=()=>{_n.delete(e),function(e){if(!e.isConnected)return;const t=Wt(e),n=[];if(e.hasAttribute("autofocus")&&!Cn.has(e)&&n.push(e),n.push(...kn(t)),0!==n.length)if(function(e){const t=e.activeElement;return Boolean(t&&t!==e.body&&t!==e.documentElement)}(e.ownerDocument))for(const e of n)Cn.add(e);else for(const o of n){if(Cn.add(o),On(o))return;if(o===e)for(const e of $n(t))if(On(e))return}}(e)};t?.requestAnimationFrame?t.requestAnimationFrame(n):queueMicrotask(n)};Promise.resolve(e.ready).then(t,t)}let Pn=!1;function jn(e){e[p]||(e[m]=new Promise(t=>{e[p]=t}))}function Mn(e){const t=e[p];t&&(e[p]=null,t())}const Rn=new class{constructor(){this.pending=new Set,this.scheduled=!1}schedule(e,t){t.sync?qn(e,t):(this.pending.add(e),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>this.flush())))}flush(){const e=Array.from(this.pending);this.pending.clear(),this.scheduled=!1;for(const t of e)t.isConnected?qn(t,t[te]||{}):t[y]=!0}remove(e){this.pending.delete(e)}};function Dn(e){return Object.prototype.hasOwnProperty.call(e,ne)}function In(e){const t=e[re];if(!t||0===t.length)return;const n=[...t];e[re]=[],n.forEach(e=>e())}const Vn=50;function qn(e,t,n){const o=arguments.length>=3,r=e[ee];if(!r)return void Mn(e);if(t.once&&Dn(e))return void Mn(e);const s=e[g]??0;if(s>=Vn){const t=e.tagName?e.tagName.toLowerCase():"element";return console.error(`snice: maximum render depth (${Vn}) exceeded for <${t}>. render() is mutating an observed property, causing an infinite render loop.`),void Mn(e)}e[g]=s+1;try{const s=o?n:r.call(e),i=zt(e);if(!1===t.differential){if("string"!=typeof s)return void console.warn("Render method with differential: false must return a string");const t=document.createElement("template");t.innerHTML=s;const n=e[ne];n?.clear();const o=Array.from(i.childNodes).filter(e=>!(e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")));for(const e of o)e.remove();return i.appendChild(t.content),e[ne]=null,In(e),void Ln(e)}if(!Rt(s))return void console.warn("Render method must return html`` template result");let a=e[ne];if(a&&a.isSameTemplate(s.strings))return a.update(s.values),In(e),void Ln(e);const c=new an(s),l=c.renderFragment();try{c.update(s.values)}catch(e){throw c.clear(),e}const h=document.createDocumentFragment();for(const e of Array.from(i.childNodes))e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")||h.appendChild(e);i.appendChild(l);try{e.isConnected&&c.reconnected()}catch(e){try{c.clear()}catch(e){console.error("snice: failed to clean up a rejected render tree:",e)}for(const e of Array.from(i.childNodes))e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")||e.remove();throw i.appendChild(h),e}let u;e[ne]=c;try{a?.clear()}catch(e){u=e}if(In(e),Ln(e),u)throw u}catch(t){const n=function(e,t){const n=e.tagName?.toLowerCase()||"element",o=t instanceof Error?t.message:String(t),r=new Error(`snice: render failed for <${n}>: ${o}`,{cause:t});return t instanceof Error&&(r.name=t.name),r}(e,t);if(Pn)throw n;console.error("Error rendering element:",n)}finally{e[g]=s,Mn(e)}}function Bn(e,t=!1){const n=e[te]||{};if(n.once&&Dn(e))e.isConnected&&Fn(e);else if(jn(e),t)qn(e,n);else{if(void 0!==n.debounce&&n.debounce>0)return e[oe]||(e[oe]={}),clearTimeout(e[oe].debounce),void(e[oe].debounce=setTimeout(()=>{e[oe].debounce=null,Rn.schedule(e,n)},n.debounce));if(void 0!==n.throttle&&n.throttle>0){e[oe]||(e[oe]={lastThrottle:0});const t=e[oe],o=Date.now();return 0===t.lastThrottle||o-t.lastThrottle>=n.throttle?(t.lastThrottle=o,void Rn.schedule(e,n)):void(t.throttleTimer||(t.throttleTimer=setTimeout(()=>{t.throttleTimer=null,t.lastThrottle=Date.now(),Rn.schedule(e,n)},n.throttle-(o-t.lastThrottle))))}Rn.schedule(e,n)}}function Fn(e){const t=e[ne];t?.reconnected()}function Wn(e){const t=e[Z];if(t)for(const e of t.values())e.debounceTimeout&&clearTimeout(e.debounceTimeout),e.throttleTimeout&&clearTimeout(e.throttleTimeout),e.debounceTimeout=null,e.throttleTimeout=null,e.throttleLastCall=0,e.latestDetail=void 0}const zn=n("debounce-timers"),Un=n("throttle-timers"),Hn=n("once-called"),Kn=n("memoize-cache");function Gn(e){if(e[zn]){for(const t in e[zn])e[zn][t]?.timeout&&clearTimeout(e[zn][t].timeout);e[zn]={}}}function Qn(e){if(e[Un]){for(const t in e[Un])e[Un][t]?.timeout&&clearTimeout(e[Un][t].timeout);e[Un]={}}}function Jn(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.configurable?{locked:!1,value:void 0}:"value"in n&&!1===n.writable?{locked:!0,value:n.value}:"value"in n||void 0!==n.get?{locked:!1,value:void 0}:{locked:!0,value:void 0}}function Xn(e){e.prototype[a]=!0;const t=e.prototype.connectedCallback,n=e.prototype.disconnectedCallback,o=e.prototype.attributeChangedCallback,r=e.observedAttributes||[];r.includes("controller")||r.push("controller"),r.includes("autofocus")||r.push("autofocus");const s=e[L];if(s)for(const[e,t]of s){if(!1===t.attribute)continue;const n=Fe(t,e);r.includes(n)||r.push(n)}Object.defineProperty(e,"observedAttributes",{get:()=>r,configurable:!0}),Object.defineProperty(e.prototype,"ready",{get(){return this[h]||(this[h]=new Promise((e,t)=>{this[u]=e,this[d]=t}),this[h].catch(()=>{})),this[h]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendered",{get(){return this[p]?this[m]:Promise.resolve()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"controller",{get(){return this[w]},set(e){const t=this[w];if(this[w]=e,e!==t){if(e){const t="string"==typeof e?e:e.name||"(anonymous controller class)";return void xt(this,e).catch(n=>{"ControllerAttachAborted"!==n?.name?"string"!=typeof e||n?.message!==`Controller "${e}" not found in registry`?console.error(`Failed to attach controller "${t}":`,n):St(this,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}t&&Ot(this).catch(e=>{console.error("Failed to detach controller:",e)})}},enumerable:!0,configurable:!0}),e.prototype.connectedCallback=async function(){if(this[h]||(this[h]=new Promise((e,t)=>{this[u]=e,this[d]=t}),this[h].catch(()=>{})),this[E]){try{Fn(this)}catch(e){console.error(`Error reconnecting the render tree for ${this.tagName}:`,e)}Et(this,this),ut(this,this),Lt(this);try{Ye(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName} on reconnection:`,e)}t&&t.call(this);const n=e[H];if(n)for(const e of n)try{const t=e.method.call(this);t&&"function"==typeof t.then&&t.catch(t=>{console.error(`Error in @reconnect handler ${e.methodName}:`,t)})}catch(t){console.error(`Error in @reconnect handler ${e.methodName}:`,t)}return this[ee]&&this[y]&&(this[y]=!1,Bn(this)),void Ln(this)}this[I]=!0;const n=e[L];if(n)for(const[e,t]of n){if(!1===t.attribute)continue;const n=Fe(t,e);if(!this.hasAttribute(n))continue;const o=this.getAttribute(n);We(this,q).add(e),t.type===Boolean&&""===o&&this.setAttribute(n,"true"),this[e]=qe(o,t)}if(this[R]){for(const[e,t]of Array.from(this[R].entries())){const o=n?.get(e),r=Fe(o||{},e);this[R].delete(e),this.hasAttribute(r)||(this[e]=t)}delete this[R]}if(void 0!==this[k]){const e=this[k];if(delete this[k],!this[w]){this[w]=e;const t=e?.name||"(anonymous controller class)";xt(this,e).catch(e=>{"ControllerAttachAborted"!==e?.name?console.error(`Failed to attach controller "${t}":`,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}}if(this.hasAttribute("controller")&&!this[w]){const e=this.getAttribute("controller");e&&(this.controller=e)}if(function(e){const t=e[se],n=[],o=[];let r=e.constructor;for(;r&&r!==HTMLElement&&r!==Function.prototype;)o.unshift(r),r=Object.getPrototypeOf(r);for(const e of o){if(!Object.prototype.hasOwnProperty.call(e,"styles"))continue;const t=e.styles,o=Array.isArray(t)?t:[t];for(const e of o)Dt(e)?n.push(e):console.warn("Static styles must be a css`` result or an array of css`` results")}if((t||0!==n.length)&&!e[ie]){e[ie]=!0;try{const o=[...n],r=e[ae];if(r)for(const t of r){const n=t.call(e);Dt(n)&&o.push(n)}if(t){const n=t.call(e);if(!Dt(n))return void console.warn("Styles method must return css`` template result");o.push(n)}const s=zt(e),i=Array.from(s.childNodes).filter(e=>e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style"));if(i.length===o.length&&i.every((e,t)=>e.textContent===o[t].cssText))return;for(const e of i)e.remove();if(s instanceof ShadowRoot&&o.every(e=>!!e.styleSheet)&&"adoptedStyleSheets"in s)try{return void(s.adoptedStyleSheets=o.map(e=>e.styleSheet))}catch{}for(const e of o){const t=document.createElement("style");t.setAttribute("data-snice-style",""),t.textContent=e.cssText,s.appendChild(t)}}catch(e){console.error("Error applying styles:",e)}}}(this),this[ee])try{zt(this)}catch{}Et(this,this),ut(this,this),Lt(this),this[E]=!0,function(e,t){if(Je.has(t))return;Je.add(t);const n=t[V];if(!n||0===n.size)return;const o=t[L],r=new Set(["*"]);if(o)for(const[e,t]of o)r.add(e),"string"==typeof t?.attribute&&r.add(t.attribute);for(const t of n.keys()){if(r.has(t))continue;const n=e.tagName?e.tagName.toLowerCase():"element",s=o?[...o.keys()].join(", "):"(none)";console.warn(`@watch('${t}') on <${n}> matches no @property — it will never fire. Known properties: ${s}.`)}}(this,e),function(e,t){const n=t[V],o=t[L];if(n&&o)for(const[t,r]of o){const o=[t],s=r&&"string"==typeof r.attribute?r.attribute:null;s&&s!==t&&o.push(s),o.push("*");for(const r of o)if(n.has(r))for(const o of n.get(r))if(o.immediate)try{o.method.call(e,void 0,e[t],t)}catch(e){console.error(`Error in @watch('${r}') method ${o.methodName}:`,e)}}}(this,e),t&&t.call(this);const o=e[z];if(await new Promise(e=>queueMicrotask(e)),!this.isConnected)return void(this[u]&&(this[u](),this[u]=null,this[d]=null));this[ee]&&Bn(this,!0);try{Ye(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName}:`,e)}if(await new Promise(e=>queueMicrotask(e)),!this.isConnected)return void(this[u]&&(this[u](),this[u]=null,this[d]=null));let r,s=!1;if(o){this[f]=!0;try{for(const e of o)try{await e.method.call(this)}catch(t){console.error(`Error in @ready handler ${e.methodName}:`,t),s||(s=!0,r=t)}}finally{delete this[f]}}s&&this[d]?(this[d](r),this[u]=null,this[d]=null):this[u]&&(this[u](),this[u]=null,this[d]=null),Ln(this)},e.prototype.disconnectedCallback=async function(){try{!function(e){const t=e[ne];t?.disconnected(!0)}(this)}catch(e){console.error(`Error disconnecting the render tree for ${this.tagName}:`,e)}const t=e[U];if(t)for(const e of t)try{await e.method.call(this)}catch(t){console.error(`Error in @dispose handler ${e.methodName}:`,t)}n&&n.call(this),this[w]&&Ot(this).catch(e=>{console.error("Failed to detach controller:",e)}),Nt(this),dt(this),function(e){const t=e.constructor[$t];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[ye];if(n&&"object"==typeof n){for(const e of Object.keys(n))n[e]?.timeout&&clearTimeout(n[e].timeout);delete e[ye]}for(const n of t)delete e[`__wrapped_${n.methodName}`];const o=e[he];o&&"function"==typeof o[me]&&o[me](e),delete e[he],delete e[ge]}(this),ot(this),Gn(this),Qn(this),function(e){const t=e[oe];if(!t)return!1;let n=!1;return t.debounce&&(clearTimeout(t.debounce),t.debounce=null,n=!0),t.throttleTimer&&(clearTimeout(t.throttleTimer),t.throttleTimer=null,n=!0),n}(this)&&(this[y]=!0),Wn(this),ro(this,X),ro(this,Y)},e.prototype.attributeChangedCallback=function(t,n,r){if(o?.call(this,t,n,r),"controller"===t){if(this[O])return;return this[x]?void Ct(this):void(this.controller=r)}"autofocus"===t&&(null===r?Cn.delete(this):this[E]&&Ln(this));const s=e[L];if(s)for(const[n,o]of s){if(Fe(o,n).toLowerCase()!==t.toLowerCase())continue;if(this[J]?.has(t.toLowerCase()))break;const s=this[P]?.[n],i=this[j]?.[n];let a=null===r?o.type!==Boolean&&i:qe(r,o,s,i);const c=this[M]?.[n];if(c&&(a=c(a)),!(o?.hasChanged?o.hasChanged(a,s):Be(a,s)))break;We(this,q).add(n),ze(this,P)[n]=a,this[E]&&Ue(this,e,n,s,a),this[ee]&&this[E]&&Bn(this);break}},e.prototype.connectedMoveCallback=async function(){const t=e[K];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @moved handler ${e.methodName}:`,t)}},e.prototype.adoptedCallback=async function(){const t=e[G];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @adopted handler ${e.methodName}:`,t)}}}function Yn(e,t,n,o){if(function(e){let t=Object.getPrototypeOf(e);const n=[];for(;t&&t!==HTMLElement&&t!==Function.prototype;)n.push(t),t=Object.getPrototypeOf(t);n.reverse();for(const t of n){if(t[L]){e[L]||(e[L]=new Map);for(const[n,o]of t[L])e[L].has(n)||e[L].set(n,o)}t.formAssociated&&!e.formAssociated&&(e.formAssociated=!0)}}(t),n.metadata&&n.metadata[L]){t[L]||(t[L]=new Map);for(const[e,o]of n.metadata[L])t[L].set(e,o)}else if(Zn.length>0){t[L]||(t[L]=new Map);const e=Zn.pop();for(const[n,o]of e)t[L].set(n,o)}o?.formAssociated&&(t.formAssociated=!0);const r={...Object.getPrototypeOf(t)?.[v]||{}},s=o||{};if("light"===s.renderRoot&&"string"==typeof s.shadow||"shadow"===s.renderRoot&&!1===s.shadow)throw new TypeError("snice: @element renderRoot and shadow options select conflicting render roots.");const i={...r,...s};return Object.prototype.hasOwnProperty.call(s,"shadow")?i.renderRoot=!1===s.shadow?"light":"shadow":Object.prototype.hasOwnProperty.call(s,"renderRoot")&&("light"===s.renderRoot?i.shadow=!1:!1===i.shadow&&(i.shadow="open")),t[v]=i,!0===t.prototype[ce]&&Object.prototype.hasOwnProperty.call(t.prototype,"render")&&!Object.prototype.hasOwnProperty.call(t.prototype,ee)&&"function"==typeof t.prototype.render&&(t.prototype[ee]=t.prototype.render,t.prototype[te]=t.renderOptions||{}),Xn(t),customElements.get(e)?(globalThis.SNICE_DEBUG&&console.warn(`[snice] "${e}" is already registered. Skipping.`),t):(customElements.define(e,t),t)}const Zn=[],eo=new WeakMap;function to(e){return function(t,n){const o=n.name;return n.metadata?(n.metadata[L]||(n.metadata[L]=new Map),n.metadata[L].set(o,e||{})):(0===Zn.length&&Zn.push(new Map),Zn[Zn.length-1].set(o,e||{})),function(t){const n=this[D],r=!0===n?.delete(o);0===n?.size&&delete this[D];const s=Object.prototype.hasOwnProperty.call(this,o),i=s&&(r||!function(e,t,n){const o=e?.ownerDocument;if(!o?.createElement)return!1;let r=eo.get(o);if(!r){const e=o.createElement("div");r=new Map;for(const t of Reflect.ownKeys(e))r.set(t,e[t]);eo.set(o,r)}return r.has(t)&&Object.is(r.get(t),n)}(this,o,this[o])),a=i?this[o]:t;s&&delete this[o];const c=this.constructor;c[L]||(c[L]=new Map);const l={...e};l.type||void 0===t||(l.type=Ve(t)),l.attributeNaming||"kebab"!==c.propertyAttributeNaming||(l.attributeNaming="kebab"),c[L].set(o,l),ze(this,j)[o]=t;const h=()=>{if(!this[I])return;const e=this[P]?.[o];if(!1!==l.attribute&&!1!==l.reflect){const n=Fe(l,o),r=Qe(e,l,t),s=n.toLowerCase();We(this,J).add(s);try{null===r?this.removeAttribute?.(n):this.setAttribute?.(n,r)}finally{this[J].delete(s)}}this[E]&&(Ue(this,this.constructor,o,e,e),this[ee]&&Bn(this))},u=e=>{if(!l.deep)return e;let t;return t=function(e,t){if(!e||"object"!=typeof e)return e;const n=new WeakMap,o=new WeakMap,r=e=>e&&"object"==typeof e&&o.get(e)||e,s=e=>{if(!e||"object"!=typeof e)return e;if(n.has(e))return n.get(e);if(e instanceof Map){let i;const a=new Map;return i=new Proxy(e,{get(e,n){const o=Jn(e,n);if(o.locked)return o.value;if(a.has(n))return a.get(n);let c;if("set"===n)c=(n,o)=>{n=r(n),o=r(o);const s=e.has(n),a=e.get(n);return e.set(n,o),s&&Object.is(a,o)||t(),i};else if("delete"===n)c=n=>{n=r(n);const o=e.delete(n);return o&&t(),o};else if("clear"===n)c=()=>{0!==e.size&&(e.clear(),t())};else if("get"===n)c=t=>s(e.get(r(t)));else if("has"===n)c=t=>e.has(r(t));else if("forEach"===n)c=(t,n)=>e.forEach((e,o)=>t.call(n,s(e),s(o),i));else if("values"===n)c=function*(){for(const t of e.values())yield s(t)};else if("keys"===n)c=function*(){for(const t of e.keys())yield s(t)};else if("entries"===n||n===Symbol.iterator)c=function*(){for(const[t,n]of e.entries())yield[s(t),s(n)]};else{const t=Reflect.get(e,n,e);if("function"!=typeof t)return t;if("constructor"===n)return t;c=t.bind(e)}return a.set(n,c),c}}),n.set(e,i),o.set(i,e),i}if(e instanceof Set){let i;const a=new Map;return i=new Proxy(e,{get(e,n){const o=Jn(e,n);if(o.locked)return o.value;if(a.has(n))return a.get(n);let c;if("add"===n)c=n=>{n=r(n);const o=e.has(n);return e.add(n),o||t(),i};else if("delete"===n)c=n=>{n=r(n);const o=e.delete(n);return o&&t(),o};else if("clear"===n)c=()=>{0!==e.size&&(e.clear(),t())};else if("has"===n)c=t=>e.has(r(t));else if("forEach"===n)c=(t,n)=>e.forEach(e=>{const o=s(e);t.call(n,o,o,i)});else if("values"===n||"keys"===n||n===Symbol.iterator)c=function*(){for(const t of e.values())yield s(t)};else if("entries"===n)c=function*(){for(const t of e.values()){const e=s(t);yield[e,e]}};else{const t=Reflect.get(e,n,e);if("function"!=typeof t)return t;if("constructor"===n)return t;c=t.bind(e)}return a.set(n,c),c}}),n.set(e,i),o.set(i,e),i}if(!Array.isArray(e)&&!function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const i=new Proxy(e,{get(e,t,n){const o=Jn(e,t);return o.locked?o.value:s(Reflect.get(e,t,n))},set(e,n,o,s){const i=Reflect.get(e,n,s);o=r(o);const a=Reflect.set(e,n,o);return a&&!Object.is(i,o)&&t(),a},deleteProperty(e,n){const o=Object.prototype.hasOwnProperty.call(e,n),r=Reflect.deleteProperty(e,n);return r&&o&&t(),r},defineProperty(e,n,o){const s=Reflect.getOwnPropertyDescriptor(e,n),i="value"in o?{...o,value:r(o.value)}:o,a=Reflect.defineProperty(e,n,i),c=a?Reflect.getOwnPropertyDescriptor(e,n):s;return a&&!function(e,t){if(!e||!t)return e===t;const n="value"in e||"writable"in e;return n===("value"in t||"writable"in t)&&e.configurable===t.configurable&&e.enumerable===t.enumerable&&(!n||e.writable===t.writable&&Object.is(e.value,t.value))&&(n||e.get===t.get&&e.set===t.set)}(s,c)&&t(),a}});return n.set(e,i),o.set(i,e),i};return s(e)}(e,()=>{this[P]?.[o]===t&&h()}),t};ze(this,M)[o]=u;const d=this.constructor.prototype;let f=d[$e];f&&Object.prototype.hasOwnProperty.call(d,$e)||(f=new Map(f),d[$e]=f);const m=f.get(o);m&&m===e||(f.set(o,e),Object.defineProperty(this.constructor.prototype,o,{get(){return this[R]?.has(o)?this[R].get(o):this[P]&&o in this[P]?this[P][o]:t},set(e){const t=this[o];if(!(l.hasChanged?l.hasChanged(e,t):Be(e,t)))return;const n=(this[M]?.[o]||(e=>e))(e);if(!this[I])return this[R]||(this[R]=new Map),void this[R].set(o,n);if(ze(this,P)[o]=n,!1!==l.attribute&&!1!==l.reflect){const e=Fe(l,o),t=Qe(n,l,this[j]?.[o]);We(this,q).add(o);const r=e.toLowerCase();We(this,J).add(r);try{null===t?this.removeAttribute?.(e):this.setAttribute?.(e,t)}finally{this[J].delete(r)}}this[E]&&(Ue(this,this.constructor,o,t,n),this[ee]&&Bn(this))},configurable:!0,enumerable:!0}));const p=u(t);return ze(this,P)[o]=p,ze(this,j)[o]=p,i?a:p}}}function no(e){return!0===e[r]&&e.element?e.element:e}function oo(e,t,n,o,r){const s=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,t)||(o[t]=new Set),!o[t].has(n)){if(o[t].add(n),!Object.prototype.hasOwnProperty.call(o,e)){const t=o[e];o[e]=t?[...t]:[]}o[e].push({methodName:s,method:n,...r})}})}function ro(e,t){const n=e[t];if(n)for(const e of n.values())e.debounceTimer&&clearTimeout(e.debounceTimer),e.throttleTimer&&clearTimeout(e.throttleTimer),e.debounceTimer=null,e.throttleTimer=null,e.lastThrottleCall=0}function so(e,t,n){return function(o={}){return function(r,s){oo(e,n,r,s,{options:o});const i=s.name;return function(...e){this[t]||(this[t]=new Map),this[t].has(i)||this[t].set(i,{throttleTimer:null,debounceTimer:null,lastThrottleCall:0});const n=this[t].get(i),s=(...e)=>r.apply(this,e),a=(...e)=>{try{const t=r.apply(this,e);t&&"function"==typeof t.then&&t.catch(e=>console.error(`Error in deferred lifecycle handler ${i}:`,e))}catch(e){console.error(`Error in deferred lifecycle handler ${i}:`,e)}};if(o.debounce>0)return clearTimeout(n.debounceTimer),void(n.debounceTimer=setTimeout(()=>a(...e),o.debounce));if(o.throttle>0){const t=Date.now();return 0===n.lastThrottleCall||t-n.lastThrottleCall>=o.throttle?(n.lastThrottleCall=t,s(...e)):void(n.throttleTimer||(n.throttleTimer=setTimeout(()=>{n.throttleTimer=null,n.lastThrottleCall=Date.now(),a(...e)},o.throttle-(t-n.lastThrottleCall))))}return s(...e)}}}}const io=so(K,X,Ce),ao=so(G,Y,xe);class co extends HTMLElement{static{this.propertyAttributeNaming="kebab"}createRenderRoot(){const e=this.constructor[v];return this.attachShadow({mode:"string"==typeof e?.shadow?e.shadow:"open",delegatesFocus:e?.delegatesFocus})}invalidate(){return Bn(this),this.rendered}renderNow(){return jn(this),qn(this,{...this[te]||{},once:!1}),this.rendered}}Object.defineProperty(co.prototype,ce,{value:!0});class lo{constructor(e){this.parsed=this.parsePattern(e)}get spec(){return this.parsed.template}parsePattern(e){let t=e,n="",o=!1;const r=e.indexOf("?");return-1!==r&&(t=e.slice(0,r),n=e.slice(r+1),t.endsWith("(")&&n.endsWith(")")&&(o=!0,t=t.slice(0,-1),n=n.slice(0,-1))),{pathSegments:this.parseSegments(t),querySegments:n?this.parseQuerySegments(n):[],queryOptional:o,template:e}}parseSegments(e){const t=[];let n=0;for(;n<e.length;)switch(e[n]){case"(":const{segments:o,endIndex:r}=this.parseOptionalGroup(e,n);t.push({type:"optional",segments:o}),n=r+1;break;case":":const{name:s,endIndex:i}=this.parseIdentifier(e,n+1);t.push({type:"param",name:s}),n=i;break;case"*":const{name:a,endIndex:c}=this.parseIdentifier(e,n+1);t.push({type:"splat",name:a}),n=c;break;default:const{value:l,endIndex:h}=this.parseLiteral(e,n);l&&t.push({type:"literal",value:l}),n=h}return t}parseOptionalGroup(e,t){let n=1,o=t+1;for(;o<e.length&&n>0;)"("===e[o]&&n++,")"===e[o]&&n--,o++;const r=e.slice(t+1,o-1);return{segments:this.parseSegments(r),endIndex:o-1}}parseIdentifier(e,t){let n=t;for(;n<e.length&&/[\w-]/.test(e[n]);)n++;return{name:e.slice(t,n),endIndex:n}}parseLiteral(e,t){let n=t;for(;n<e.length&&!"(:*(".includes(e[n]);)n++;return{value:e.slice(t,n),endIndex:n}}parseQuerySegments(e){let t=e;t.startsWith("(")&&t.endsWith(")")&&(t=t.slice(1,-1));const n=[];let o=0;for(;o<t.length;)if(":"===t[o]){const{name:e,endIndex:r}=this.parseIdentifier(t,o+1);n.push({type:"param",name:e}),o=r}else{const{value:e,endIndex:r}=this.parseQueryLiteral(t,o);e&&n.push({type:"literal",value:e}),o=r}return n}parseQueryLiteral(e,t){let n=t;for(;n<e.length&&":"!==e[n];)n++;return{value:e.slice(t,n),endIndex:n}}getAllParamNames(){const e=new Set,t=n=>{for(const o of n)switch(o.type){case"param":case"splat":e.add(o.name);break;case"optional":t(o.segments)}};return t(this.parsed.pathSegments),t(this.parsed.querySegments),Array.from(e)}canMatchRemainingSegments(e,t,n){let o=t;for(const t of n)if("literal"===t.type){const n=e.indexOf(t.value,o);if(-1===n)return!1;o=n+t.value.length}return!0}match(e){const[t,n]=e.split("?"),o=this.matchPath(t,this.parsed.pathSegments);if(!1===o)return!1;const r=this.matchQuery(n||"",this.parsed.querySegments);if(!1===r)return!1;const s=this.getAllParamNames(),i={};for(const e of s)i[e]=void 0;return Object.assign(i,o,r),i}matchPath(e,t){const n={};let o=0;for(let r=0;r<t.length;r++){const s=t[r],i=t.slice(r+1),a=this.matchSegment(e,o,s,i);if(!1===a)return!1;Object.assign(n,a.params),o=a.nextIndex}return!(o<e.length)&&n}matchSegment(e,t,n,o=[]){switch(n.type){case"literal":return e.slice(t,t+n.value.length)===n.value&&{params:{},nextIndex:t+n.value.length};case"param":{let r=t;const s=o[0];let i,a=["/","?"];if(s&&"literal"===s.type){const n=e.indexOf(s.value,t);if(-1===n)return!1;r=n}else for(;r<e.length&&!a.includes(e[r]);)r++;if(r===t)return!1;try{i=decodeURIComponent(e.slice(t,r))}catch(n){i=e.slice(t,r)}return!(r<e.length&&"?"===e[r]&&o.length>0)&&{params:{[n.name]:i},nextIndex:r}}case"splat":{let r=e.length;const s=o[0];if(s)switch(s.type){case"literal":if("."===s.value){const n=e.indexOf(".",t);-1!==n&&(r=n)}else{const n=e.lastIndexOf(s.value);-1!==n&&n>=t&&(r=n)}break;case"param":let n=-1;for(let o=e.length-1;o>=t;o--)if("/"===e[o]){n=o;break}-1!==n&&(r=n);break;case"splat":let o=-1;for(let n=e.length-1;n>t;n--)if("/"===e[n]){o=n+1;break}if(-1!==o)r=o;else{const n=e.slice(t).split("/").filter(e=>e);r=n.length>1?t+n.slice(0,-1).join("/").length+1:t}break;case"optional":const i=e=>{for(const t of e){if("literal"===t.type)return t.value;if("optional"===t.type){const e=i(t.segments);if(e)return e}}return null},a=i(s.segments);if(a){const n=e.lastIndexOf(a);-1!==n&&n>=t&&(r=n)}}const i=e.indexOf("?",t);let a;-1!==i&&i<r&&(r=i);try{a=decodeURIComponent(e.slice(t,r))}catch(n){a=e.slice(t,r)}return{params:{[n.name]:a},nextIndex:r}}case"optional":{let r=t,s={},i=!0;for(let t=0;t<n.segments.length;t++){const o=n.segments[t],a=n.segments.slice(t+1),c=this.matchSegment(e,r,o,a);if(!1===c){i=!1;break}Object.assign(s,c.params),r=c.nextIndex}return i&&this.canMatchRemainingSegments(e,r,o)?{params:s,nextIndex:r}:{params:{},nextIndex:t}}default:return!1}}findNextLiteral(e){for(const t of e){if("literal"===t.type)return t;if("optional"===t.type){const e=this.findNextLiteral(t.segments);if(e)return e}}return null}matchQuery(e,t){if(0===t.length)return{};const n={};let o=0;for(const r of t)switch(r.type){case"literal":if(e.slice(o,o+r.value.length)!==r.value)return!1;o+=r.value.length;break;case"param":{let t,s=o;for(;s<e.length&&"&"!==e[s];)s++;if(s===o)return!1;try{t=decodeURIComponent(e.slice(o,s))}catch(n){t=e.slice(o,s)}n[r.name]=t,o=s;break}}return n}reverse(e={}){const t=this.reverseSegments(this.parsed.pathSegments,e);if(!1===t)return!1;let n=t;if(this.parsed.querySegments.length>0){const t=this.reverseSegments(this.parsed.querySegments,e);if(!this.parsed.queryOptional&&!1===t)return!1;t&&""!==t&&(n+="?"+t)}return n}reverseSegments(e,t,n=!1){let o="";for(let r=0;r<e.length;r++){const s=e[r],i=e.slice(r+1);switch(s.type){case"literal":o+=s.value;break;case"param":case"splat":if(!(s.name in t))return!1;o+=String(t[s.name]);break;case"optional":if(this.hasAllParams(s.segments,t,n)||this.hasLaterOptionalGroupNeedingParams(i,t,s.segments)){const e=this.reverseSegments(s.segments,t,!0);if(!1===e)return!1;o+=e}}}return o}hasLaterOptionalGroupNeedingParams(e,t,n){for(const o of e)if("optional"===o.type&&this.hasAnyParamInSegments(o.segments,t))return this.hasOnlyLiteralsAndOptionals(n);return!1}hasOnlyLiteralsAndOptionals(e){for(const t of e)if("param"===t.type||"splat"===t.type)return!1;return!0}hasAllParams(e,t,n=!1){let o=!1,r=!1,s=!1,i=!0;for(const n of e)switch(n.type){case"param":case"splat":i=!1,n.name in t&&void 0!==t[n.name]?o=!0:s=!0}const a=n||o&&!s;for(const n of e)"optional"===n.type&&this.hasAllParams(n.segments,t,a)&&(r=!0);return!(!o||s)||!(!r||s)||!(!i||!n)}hasOnlyOptionalMissingParams(e,t){for(const n of e)switch(n.type){case"param":case"splat":if(!(n.name in t))return!1}return!0}hasAnyParamInSegments(e,t){for(const n of e)switch(n.type){case"param":case"splat":if(n.name in t)return!0;break;case"optional":if(this.hasAnyParamInSegments(n.segments,t))return!0}return!1}}function ho(e){const t=e.split("/").filter(Boolean);let n=t.length;for(const e of t)e.startsWith("*")?n+=-2:e.startsWith(":")?n+=3:n+=10;return n}function uo(e){const t={};return e.split(";").forEach(e=>{const n=e.indexOf(":");if(-1===n)return;const o=e.slice(0,n).trim(),r=e.slice(n+1).trim();o&&r&&(t[o]=r)}),t}function fo(e,t,n,o){if(e.style.position="absolute",e.style.width="100%",t)return e.style.height="100%",void(e.style.transition=`opacity ${n}ms ease-in-out`);e.style.top="0",e.style.left="0",e.style.transition=`${o} ${n}ms ease-in-out`}function mo(e){if(!at(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");const t=ct(e);if(0===t.bindings){t.active=!0;try{Et(e,t.target),ut(e,t.target)}catch(n){throw dt(e),Nt(e),t.active=!1,n}}t.bindings+=1;let n=!1;return()=>{n||(n=!0,t.bindings=Math.max(0,t.bindings-1),0===t.bindings&&(dt(e),Nt(e),Wn(e),t.active=!1,t.target=new EventTarget))}}function po(e,t){const n=function(e,t){if(!e||"function"!=typeof e.addEventListener||"function"!=typeof e.removeEventListener)throw new TypeError("provideContext() requires an EventTarget root.");if(!t||"object"!=typeof t)throw new TypeError("provideContext() requires an application context object.");if(st.has(e))throw new Error("This root already provides an application context. Release it before providing another.");const n=e=>{const n=e;n.detail&&void 0===n.detail.context&&(n.detail.context=t,n.preventDefault(),n.stopPropagation())};e.addEventListener(rt,n),st.set(e,{listener:n});let o=!1;return()=>{if(o)return;o=!0;const t=st.get(e);t?.listener===n&&(e.removeEventListener(rt,n),st.delete(e))}}(e,t);let o;try{o=function(e){const t=e.daemons;if(void 0===t)return()=>{};if(!t||"object"!=typeof t||Array.isArray(t))throw new TypeError("AppContext.daemons must be a readonly record of named @daemon instances.");const n=[],o=new Set;try{for(const[e,r]of Object.entries(t)){if(!e.trim())throw new TypeError("AppContext.daemons keys must be non-empty strings.");if(!r||"object"!=typeof r)throw new TypeError(`AppContext.daemons["${e}"] must be an instance of an @daemon class.`);o.has(r)||(o.add(r),n.push(mo(r)))}}catch(e){for(const e of n.reverse())e();throw e}return()=>{for(const e of n.reverse())e()}}(t)}catch(e){throw n(),e}let r=!1;return()=>{r||(r=!0,n(),o?.())}}const yo=new WeakMap;var go;!function(e){e.SUCCESS="success",e.GUARDS_FAILED="guards-failed",e.NOT_FOUND="not-found"}(go||(go={}));let bo=!1;async function vo(e,t=500){if(customElements.get(e))return;let n=null;bo||(n=setTimeout(()=>{console.warn(`Custom element <${e}> is taking longer than ${t}ms to register. This may indicate a missing import or circular dependency. Set DISABLE_ELEMENT_READY_WARNINGS=true to disable this warning.`)},t));try{await customElements.whenDefined(e)}finally{n&&clearTimeout(n)}}async function wo(e,t=500){const n=e.tagName.toLowerCase();await vo(n,t),"ready"in e&&"function"==typeof e.ready?.then&&await e.ready}let Eo=0,No=null;const Ao=Symbol.for("snice:body-scroll-lock");var So;return globalThis[Ao]={clear(){Eo=0,No=null}},"undefined"!=typeof document&&kt(),globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map,function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(So||(So={})),e.Context=Ie,e.ContextAwareFetcher=class{constructor(){this.requestMiddlewares=[],this.responseMiddlewares=[]}use(e,t){"request"!==e?this.responseMiddlewares.push(t):this.requestMiddlewares.push(t)}create(e){const t=this.requestMiddlewares,n=this.responseMiddlewares;return async function(e,o){const r=new Request(e,o);let s=0;const i=async()=>{if(s<t.length)return t[s++].call(this,r,i);const e=await fetch(r);let o=0;const a=async()=>o<n.length?n[o++].call(this,e,a):e;return a()};return i()}.bind(e)}},e.IS_CONTROLLER_INSTANCE=r,e.Router=function(t){const n=t.window??window,o=t.document??document,r=[];let s,i,a,c=0,l=!1,h=[],u=null,d=null;const f=t.context||{};let m=null,p=null;const y=new Ie(f,[],"",{},t.fetcher);function g(e){if(m===e&&p&&yo.get(e)===p)return;p?.(),yo.get(e)?.();const t=po(e,f);let n=!1;const o=()=>{n||(n=!0,t(),yo.get(e)===o&&yo.delete(e))};p=o,m=e,yo.set(e,o)}function b(e){if(!u||!d)return null;const t=e.querySelectorAll(u);for(const e of t)if(e[W]===d)return e;return null}function v(e,t,n,o,h,u,d=0){if(!Number.isFinite(d))throw new TypeError(`Route order for "${e}" must be a finite number.`);switch(r.push({route:new lo(e),tag:t,transition:n,guards:o,layout:h,placard:u,order:d,registrationOrder:c++}),l=!1,e){case"/404":s=t;break;case"/403":i=t;break;case"/":a=t}}function w(){const e=new Set;h=r.filter(e=>e.placard).map(e=>{const t=e.placard;return"function"==typeof t?t(f):t}).filter(t=>!e.has(t.name)&&(e.add(t.name),!0))}function E(e,t,n){y[be](f,h,t,n)}function N(){switch(t.type){case"hash":return n.location.hash.slice(1);case"pushstate":return`${n.location.pathname}${n.location.search}`}}function A(e){let t;if(i)t=o.createElement(i),t[B]=f;else{const e=o.createElement("div");e.className="default-403",e.innerHTML="<h1>403</h1><p>Unauthorized</p>",t=e}e.innerHTML="",e.appendChild(t),u=null,d=null}async function S(e,t,n,r){if(!e)return!0;const s=Array.isArray(e)?e:[e];let i=null,a=null;a=setTimeout(()=>{r&&r()||(i=function(){const e=o.createElement("div");return e.setAttribute("data-snice-loading",""),e.innerHTML='\n <style>@keyframes snice-spin{to{transform:rotate(360deg)}}</style>\n <div style="display:flex;align-items:center;justify-content:center;height:100%;min-height:200px">\n <div style="width:32px;height:32px;border:3px solid rgba(128,128,128,0.3);border-top-color:rgba(128,128,128,0.8);border-radius:50%;animation:snice-spin 0.6s linear infinite"></div>\n </div>',e}(),n.appendChild(i))},50);try{for(const e of s)if(!await e(f,t))return r&&r()||A(n),!1;return!0}finally{a&&clearTimeout(a),i&&i.remove()}}async function T(e,n,r,s,i,a,c){const l=!1===(m=s)?null:m||(t.layout?t.layout:null);var m;const{element:p,needsNewLayout:y}=function(e){if(e===u)return{element:null,needsNewLayout:!1};if(u=e,e){const t=Date.now();d=t;const n=o.createElement(e);return n[B]=f,n[W]=t,{element:n,needsNewLayout:!0}}return d=null,{element:null,needsNewLayout:!0}}(l),g=r||t.transition;if(null!==p||null!==b(e)){if(await async function(e,t,n,o,r,s,i,a){const c=o||b(e);if(!c)return;!function(e,t,n){"function"==typeof e.update&&e.update(f,h,t,n)}(c,s,i);const l=c.querySelector('[slot="page"]');if(n&&l){if(t.setAttribute("slot","page"),await x(c,l,t,n),a&&a())return;r&&(e.innerHTML="",e.appendChild(c))}else a&&a()||(c.querySelectorAll('[slot="page"]').forEach(e=>e.remove()),t.setAttribute("slot","page"),c.appendChild(t),r&&(e.innerHTML="",e.appendChild(c)))}(e,n,g,p,y,i,a,c),c&&c())return;E(0,i,a)}else await async function(e,t,n,o){const r=e.children[0];n&&r?await x(e,r,t,n):o&&o()||(e.innerHTML="",e.appendChild(t))}(e,n,g,c),c&&c()||E(0,i,a)}let _=0;async function C(e){const i=o.querySelector(t.target);if(!i)throw new Error(`Target element not found: ${t.target}`);g(i);const c=++_,l=()=>c!==_;if(w(),n.scrollTo(0,0),(""===e?.trim()||"/"===e)&&a){const t=r.find(e=>e.route.match("/"));if(!await S(t?.guards,{},i,l))return;if(l())return;const{element:s,transition:c,layout:h}=function(){const e=o.createElement(a);e[B]=f;const t=n.customElements.get(a),s=t?.[F],i=r.find(e=>e.route.match("/"));return{element:e,transition:s,layout:i?.layout}}();return void await T(i,s,c,h,e,{},l)}if(!e)return;const h=await async function(e,t,n){for(const s of r){const r=s.route.match(e);if(!1===r)continue;if(!await S(s.guards,r,t,n))return{result:go.GUARDS_FAILED};const i=o.createElement(s.tag);i[B]=f,i[le]=y;const a=r;return Object.keys(a).forEach(e=>i.setAttribute(e,a[e])),{result:go.SUCCESS,element:i,transition:s.transition,layout:s.layout,routeParams:a}}return{result:go.NOT_FOUND}}(e,i,l);if(l())return;if(h.result===go.GUARDS_FAILED)return;if(h.result===go.SUCCESS){const{element:t,transition:n,layout:o,routeParams:r={}}=h;return void await T(i,t,n,o,e,r,l)}const{element:u,transition:d,layout:m}=function(){if(s){const e=o.createElement(s);e[B]=f;const t=n.customElements.get(s),r=t?.[F];return{element:e,transition:r,layout:void 0}}const e=o.createElement("div");return e.className="default-404",e.innerHTML="<h1>404</h1><p>Page not found</p>",{element:e,transition:void 0,layout:void 0}}();await T(i,u,d,m,e,{},l)}async function x(t,n,o,r,s=_){return async function(t,n,o,r={},s=()=>!1){const i=r.outDuration??300,a=r.inDuration??300,c=r.mode||"sequential",l=r.out?uo(r.out):{opacity:"0"},h={opacity:"0"},u=r.in?uo(r.in):{opacity:"1"},d=t.style,f=t.tagName.includes("-")&&t.shadowRoot,m=Symbol.for("snice:transition-original-position"),p=Symbol.for("snice:transition-count"),y=t;f||(m in y||(y[m]=d.position,y[p]=0),y[p]++,d.position="relative");const g=()=>{f||(y[p]--,y[p]<=0&&(d.position=y[m],delete y[m],delete y[p]))},b=n.hasAttribute("slot")||o.hasAttribute("slot");switch(fo(n,b,i,"all"),fo(o,b,a,"all"),Object.assign(o.style,h),t.appendChild(o),c){case e.TransitionMode.SIMULTANEOUS:Object.assign(n.style,l),Object.assign(o.style,u),await new Promise(e=>setTimeout(e,Math.max(i,a)));break;case e.TransitionMode.SEQUENTIAL:if(Object.assign(n.style,l),await new Promise(e=>setTimeout(e,i)),s())return o.parentNode===t&&o.remove(),void g();Object.assign(o.style,u),await new Promise(e=>setTimeout(e,a))}if(s())return o.parentNode===t&&o.remove(),void g();n.remove(),function(e,t){e.style.position="",e.style.width="",e.style.transition="",t?e.style.height="":(e.style.top="",e.style.left="")}(o,b),Object.keys({...h,...u}).forEach(e=>{o.style[e]=""}),g()}(t,n,o,r,()=>s!==_)}return{page:function(e){return function(t,o){if(o?.metadata&&o.metadata[L]){t[L]||(t[L]=new Map);for(const[e,n]of o.metadata[L])t[L].set(e,n)}Xn(t),t[F]=e.transition;const r=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){this[le]=y,r?.call(this)};const s=t.prototype.disconnectedCallback;return t.prototype.disconnectedCallback=function(){s?.call(this),delete this[B],delete this[le]},n.customElements.get(e.tag)||n.customElements.define(e.tag,t),e.routes.forEach(t=>{v("string"==typeof t?t:t.path,e.tag,e.transition,e.guards,e.layout,e.placard,"string"==typeof t?void 0:t.order)}),t}},initialize:function(){const e=o.querySelector(t.target);if(!e)throw new Error(`Target element not found: ${t.target}`);g(e),!l&&(r.sort((e,t)=>ho(t.route.spec)-ho(e.route.spec)||e.order-t.order||e.registrationOrder-t.registrationOrder),l=!0),w(),function(){const e=()=>{const e=o.querySelector(t.target);if(e&&(m!==e||!p||yo.get(e)===p))return m!==e&&st.has(e)?(p?.(),p=null,void(m=null)):void C(N())};switch(t.type){case"hash":n.addEventListener("hashchange",e);break;case"pushstate":n.addEventListener("popstate",e)}}(),C(N())},navigate:async function(e){const o=function(e){const t=e.trim().replace(/^#/,"");return t?t.startsWith("/")?t:`/${t}`:"/"}(e);!function(e){switch(t.type){case"hash":{const t=`#${e}`;n.location.hash!==t&&n.history.pushState(null,"",t);break}case"pushstate":`${n.location.pathname}${n.location.search}`!==e&&n.history.pushState(null,"",e)}}(o),await C(o)},register:v}},e.SimpleArray=Le,e.SniceElement=co,e.adopted=ao,e.applyElementFunctionality=Xn,e.attachController=xt,e.classMap=function(e){let t="";for(const n of Object.keys(e))e[n]&&(t+=(t?" ":"")+n);return t},e.clearDebounceTimers=Gn,e.clearMemoizeCache=function(e,t){e[Kn]&&(t?delete e[Kn][t]:e[Kn]={})},e.clearThrottleTimers=Qn,e.context=function(e={}){return function(t,n){const o=n.name;return n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,ve)||(n[ve]=new Set),!n[ve].has(t)){if(n[ve].add(t),!Object.prototype.hasOwnProperty.call(n,$t)){const e=n[$t];n[$t]=e?[...e]:[]}n[$t].push({methodName:o,method:t,options:e})}}),t}},e.contextProperty=function(){return function(e,t){const n=t.name;return function(e){return Object.hasOwn(this.constructor.prototype,n)||Object.defineProperty(this.constructor.prototype,n,{get(){if(void 0!==this[B])return this[B];const e=it(this);return void 0!==e?e:void 0},set(){},configurable:!0,enumerable:!0}),e}}},e.controller=function(e){return function(n,r){const s=globalThis.snice?.controllerRegistry;if(!s)throw new Error("Snice global registry not initialized");s.set(e,n),n.prototype[o]=!0,Object.defineProperty(n,C,{value:e,configurable:!0});const i=t.pendingControllerAttachments.get(e);return i&&(t.pendingControllerAttachments.delete(e),queueMicrotask(()=>{for(const t of i){const n=t[_];(void 0===n?t[w]:n)===e&&xt(t,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e}":`,t)})}})),n}},e.createRequestHandler=function(e,t,n){const o=[];for(const[r,s]of Object.entries(t)){const t=`@request/${r}`,i=e=>{const t=e,{discovery:o,data:i,payload:a}=t.detail;n?.passive||(t.preventDefault(),t.stopImmediatePropagation(),t.stopPropagation()),o.resolve(),Promise.resolve().then(()=>s(a)).then(e=>i.resolve(e)).catch(e=>{i.reject(e),console.error(`createRequestHandler: error in "${r}" handler:`,e)})};e.addEventListener(t,i),o.push(()=>e.removeEventListener(t,i))}return()=>{for(const e of o)e();o.length=0}},e.css=function(e,...t){const n=0===t.length?Mt.get(e):void 0;if(n)return n;let o=e[0];for(let n=0;n<t.length;n++){const r=t[n];o+=(Dt(r)?r.cssText:String(r))+e[n+1]}const r={_$litType$:jt,cssText:o};if("undefined"!=typeof CSSStyleSheet&&"undefined"!=typeof Document&&"adoptedStyleSheets"in Document.prototype)try{const e=new CSSStyleSheet;e.replaceSync(o),r.styleSheet=e}catch(e){}return 0===t.length&&Mt.set(e,r),r},e.daemon=function(e,t){Object.defineProperty(e.prototype,s,{value:!0,configurable:!0})},e.debounce=function(e=300,t={}){const{leading:n=!1,trailing:o=!0,maxWait:r}=t;return function(t,s){const i=s.name;return function(...s){this[zn]||(this[zn]={});const a=this[zn],c=i;a[c]&&clearTimeout(a[c].timeout);const l=Date.now(),h=!a[c],u=h?l:a[c].startTime,d=void 0!==r&&l-u>=r;if(n&&h){const e=t.apply(this,s);return a[c]={timeout:null,startTime:u,lastArgs:s},e}const f=setTimeout(()=>{(o||d)&&t.apply(this,a[c].lastArgs),delete a[c]},d?0:e);a[c]={timeout:f,startTime:u,lastArgs:s}}}},e.detachController=Ot,e.dispatch=function(e,t){return function(n,o){return function(...r){this[Z]||(this[Z]=new Map);const s=`${e}_${o.name}`;this[Z].has(s)||this[Z].set(s,{debounceTimeout:null,throttleLastCall:0,throttleTimeout:null});const i=this[Z].get(s),a=n.apply(this,r),c=n=>{if(void 0===n&&!1===t?.dispatchOnUndefined)return;const o=new CustomEvent(e,{bubbles:t?.bubbles??!0,cancelable:t?.cancelable??!1,composed:t?.composed??!0,detail:n});if(void 0!==t?.scope&&void 0!==t?.daemon)throw new TypeError(`@dispatch('${e}') cannot use both scope and daemon.`);if(void 0!==t?.daemon)return void lt(this,t.daemon).dispatchEvent(o);if(void 0!==t?.scope){const n=Ge(this,t.scope);return n?void n.dispatchEvent(o):void console.warn(`[snice/@dispatch] scope did not resolve for "${e}" — event not dispatched.`)}const r=ht(this);if(!r)throw new TypeError(`@dispatch('${e}') requires an element, attached controller, or provided @daemon instance.`);r.dispatchEvent(o)},l=e=>{if(t?.debounce)return clearTimeout(i.debounceTimeout),void(i.debounceTimeout=setTimeout(()=>c(e),t.debounce));if(!t?.throttle)return void c(e);const n=Date.now(),o=t.throttle-(n-i.throttleLastCall);if(o<=0)return clearTimeout(i.throttleTimeout),i.throttleLastCall=n,void c(e);i.latestDetail=e,i.throttleTimeout||(i.throttleTimeout=setTimeout(()=>{i.throttleLastCall=Date.now(),i.throttleTimeout=null;const e=i.latestDetail;i.latestDetail=void 0,c(e)},o))};return a instanceof Promise?a.then(e=>(l(e),e)):(l(a),a)}}},e.dispose=function(){return function(e,t){oo(U,Te,e,t)}},e.element=function(e,t){if(void 0!==t?.renderRoot&&"shadow"!==t.renderRoot&&"light"!==t.renderRoot)throw new TypeError('snice: @element renderRoot must be "shadow" or "light".');if(void 0!==t?.shadow&&!1!==t.shadow&&"open"!==t.shadow&&"closed"!==t.shadow)throw new TypeError('snice: @element shadow must be "open", "closed", or false.');return function(n,o){return Yn(e,n,o,t)}},e.escapeAttr=function(e){return String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")},e.escapeHtml=function(e){return String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},e.getBodyScrollLockCount=function(){return Eo},e.getContext=it,e.getController=function(e){return e[N]},e.getSymbol=n,e.html=function(e,...t){return{_$litType$:Pt,strings:e,values:t}},e.isSafeUrl=function(e,t={}){let n;try{n=String(e??"")}catch{return!1}if(!n||/[\u0000-\u001f\u007f]/.test(n))return!1;const o=n.trim();if(!o)return!1;const r=t.allowed??["http:","https:","mailto:","tel:"];try{const e=new URL(o,"http://__snice-relative.invalid/"),t=/^[a-z][a-z\d+.-]*:/i.test(o),n=/^[\\/]{2}/.test(o);return!t&&!n||r.some(t=>"string"==typeof t&&t.toLowerCase()===e.protocol)}catch{return!1}},e.layout=function(e){return function(t,n){return Yn(e,t,n)}},e.live=function(e){return{_$liveMarker$:en,value:e}},e.lockBodyScroll=function(){0===Eo&&(No=document.body.style.overflow,document.body.style.overflow="hidden"),Eo++},e.memoize=function(e={}){const{keyGenerator:t=(...e)=>JSON.stringify(e),maxSize:n=100,ttl:o}=e;return function(e,r){const s=r.name;return function(...r){this[Kn]||(this[Kn]={}),this[Kn][s]||(this[Kn][s]=new Map);const i=this[Kn][s],a=t(...r);if(i.has(a)){const e=i.get(a);if(!(void 0!==o&&Date.now()-e.timestamp>o))return e.value;i.delete(a)}const c=e.apply(this,r);if(i.set(a,{value:c,timestamp:Date.now()}),i.size>n){const e=i.keys().next().value;i.delete(e)}return c}}},e.moved=io,e.noChange=Zt,e.nothing=It,e.observe=function(e,t,n){let o,r;return"string"==typeof t?(o=t,r=n):(o=void 0,r=t),function(t,n){const s=n.name;n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,Ee)||(n[Ee]=new Set),n[Ee].has(t))return;if(n[Ee].add(t),!Object.prototype.hasOwnProperty.call(n,Q)){const e=n[Q];n[Q]=e?[...e]:[]}const i=Array.isArray(e)?e:[e];for(const e of i){const[i,...a]=e.split(":"),c=a.join(":");n[Q].push({type:i,target:c,selector:o,methodName:s,method:t,options:r})}})}},e.on=function(e,t,n){let o=null,r={};return"string"==typeof t?(o=t,r=n||{}):t&&"object"==typeof t?r=t:null===t&&n&&(r=n),function(t,n){const s=n.name;return n.addInitializer(function(){const n=this.constructor,i=Array.isArray(e)?e:[e],a=`${s}::${i.join(",")}::${o??""}::daemon:${r.daemon??""}`;if(Object.prototype.hasOwnProperty.call(n,Ne)||(n[Ne]=new Set),!n[Ne].has(a)){if(n[Ne].add(a),!Object.prototype.hasOwnProperty.call(n,bt)){const e=n[bt];n[bt]=e?[...e]:[]}for(const e of i)n[bt].push({eventName:e,selector:o,methodName:s,method:t,options:r})}}),t}},e.once=function(e=!0){let t,n=!1;return function(o,r){const s=r.name;return function(...r){return e?(this[Hn]||(this[Hn]={}),this[Hn][s]||(this[Hn][s]={called:!0,result:o.apply(this,r)}),this[Hn][s].result):(n||(n=!0,t=o.apply(this,r)),t)}}},e.parseDuration=function(e){const t=String(e).trim(),n=parseFloat(t);let o;return o=isNaN(n)?0:/ms$/i.test(t)?n:/s$/i.test(t)?1e3*n:/m$/i.test(t)?6e4*n:/h$/i.test(t)?36e5*n:n,{milliseconds:()=>o,seconds:()=>o/1e3,minutes:()=>o/6e4}},e.property=to,e.provideContext=po,e.query=function(e,t={}){return function(n,o){const{light:r=!1,shadow:s=!0}=t,i=o.name;return function(t){return Object.hasOwn(this.constructor.prototype,i)||Object.defineProperty(this.constructor.prototype,i,{get(){const t=no(this);let n=null;const o=t instanceof HTMLElement?Wt(t):null;return s&&o?n=o.querySelector(e):s&&t.shadowRoot&&(n=t.shadowRoot.querySelector(e)),!n&&r&&(n=t.querySelector(e)),n||null},set(){},configurable:!0,enumerable:!0}),t}}},e.queryAll=function(e,t={}){return function(n,o){const{light:r=!1,shadow:s=!0}=t,i=o.name;return function(t){return Object.hasOwn(this.constructor.prototype,i)||Object.defineProperty(this.constructor.prototype,i,{get(){const t=no(this),n=new Set,o=t instanceof HTMLElement?Wt(t):null;if(s&&o)for(const t of o.querySelectorAll(e))n.add(t);else if(s&&t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(e))n.add(o);if(r)for(const o of t.querySelectorAll(e))n.add(o);return[...n]},set(){},configurable:!0,enumerable:!0}),t}}},e.ready=function(){return function(e,t){oo(z,Se,e,t)}},e.reconnect=function(){return function(e,t){oo(H,_e,e,t)}},e.render=function(e={}){return function(t,n){return n.addInitializer(function(){this[ee]=t,this[te]=e}),function(...n){const o=t.apply(this,n);return qn(this,{...this[te]||e,once:!1},o),o}}},e.repeat=function(e,t){if(!t||"function"!=typeof t.key||"function"!=typeof t.render)throw new TypeError("snice: repeat() requires { key, render }.");const n=null==e?[]:Array.from(e),o=n.map(t.key),r=new Set;for(const e of o){if(r.has(e))throw new Error(`snice: repeat() received duplicate key ${String(e)}.`);r.add(e)}return{_$repeat$:Bt,items:n,keys:o,values:n.map(t.render),empty:0===n.length?"function"==typeof t.empty?t.empty():t.empty:void 0}},e.request=function(e,t){return function(n,o){let r,s,i=0;const a=[];return async function(...o){const c=async()=>{const r=t?.timeout??12e4,s=t?.discoveryTimeout??50,i=void 0!==t?.daemon?lt(this,t.daemon):ht(this);if(!i)throw new TypeError(`@request('${e}') requires an element, attached controller, or provided @daemon instance.`);const a=n.apply(this,o),{value:c,done:l}=await a.next();if(l)return c;let h,u;const d=new Promise((e,t)=>{h=e,u=t});let f,m,p,y=!1;const g=new Promise((t,n)=>{f=t,m=n,p=setTimeout(()=>{n(new Error(`Request "${e}" found no @respond('${e}') handler within ${s}ms — attach a responding controller/element, or pass { optional: true } to resolve undefined when unhandled.`))},s)}),b=new CustomEvent(`@request/${e}`,{bubbles:void 0===t?.bubbles||t.bubbles,cancelable:t?.cancelable||!1,composed:!0,detail:{payload:c,discovery:{resolve:()=>{y=!0,clearTimeout(p),f()},reject:m},data:{resolve:h,reject:u}}});i.dispatchEvent(b);try{await g;const t=setTimeout(()=>{u(new Error(`Request "${e}" timed out after ${r}ms`))},r),n=await d;clearTimeout(t);const{value:o}=await a.next(n);return o}catch(e){if(t?.optional&&!y){const{value:e}=await a.next(void 0);return e}const{value:n}=await a.throw(e);return n}};if(t?.debounce)return new Promise((e,n)=>{clearTimeout(r),r=setTimeout(async()=>{try{e(await c())}catch(e){n(e)}},t.debounce)});if(!t?.throttle)return c();const l=Date.now(),h=t.throttle-(l-i);if(h<=0){clearTimeout(s),s=null,i=l;const e=a.splice(0),t=c();return e.length&&t.then(t=>{for(const n of e)n.resolve(t)},t=>{for(const n of e)n.reject(t)}),t}return new Promise(s?(e,t)=>{a.push({resolve:e,reject:t})}:(e,t)=>{a.push({resolve:e,reject:t}),s=setTimeout(async()=>{i=Date.now(),s=null;const e=a.splice(0);try{const t=await c();for(const n of e)n.resolve(t)}catch(t){for(const n of e)n.reject(t)}},h)})}}},e.resetOnce=function(e,t){e[Hn]&&(t?delete e[Hn][t]:e[Hn]={})},e.respond=function(e,t){return function(n,o){const r=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,Ae)||(o[Ae]=new Set),!o[Ae].has(n)){if(o[Ae].add(n),!Object.prototype.hasOwnProperty.call(o,c)){const e=o[c];o[c]=e?[...e]:[]}o[c].push({channelName:e,methodName:r,method:n,options:t})}})}},e.setDisableElementReadyWarnings=function(e){bo=e},e.setStrictRenderErrors=function(e){Pn=e},e.state=function(e={}){return to({...e,attribute:!1,reflect:!1})},e.styleMap=function(e){const t=[];for(const n of Object.keys(e)){const o=e[n];if(null==o||!1===o)continue;const r=n.startsWith("--")?n:n.replace(/[A-Z]/g,e=>"-"+e.toLowerCase());t.push(`${r}: ${o}`)}return t.join("; ")},e.styles=function(){return function(e,t){return t.addInitializer(function(){this[se]&&!this[ae]?this[ae]=[this[se]]:this[se]&&this[ae]&&this[ae].push(this[se]),this[se]=e}),e}},e.svg=function(e,...t){return{_$litType$:Pt,strings:e,values:t,svg:!0}},e.throttle=function(e=300,t={}){const{leading:n=!0,trailing:o=!0}=t;return function(t,r){const s=r.name;return function(...r){this[Un]||(this[Un]={});const i=this[Un],a=s,c=Date.now();if(!i[a])return n&&t.apply(this,r),i[a]={lastInvoke:c,timeout:null,lastArgs:r},void(o&&!n&&(i[a].timeout=setTimeout(()=>{t.apply(this,i[a].lastArgs),delete i[a]},e)));const l=c-i[a].lastInvoke;if(i[a].lastArgs=r,i[a].timeout&&clearTimeout(i[a].timeout),l>=e)return t.apply(this,r),void(i[a].lastInvoke=c);o&&(i[a].timeout=setTimeout(()=>{t.apply(this,i[a].lastArgs),i[a].lastInvoke=Date.now(),i[a].timeout=null},e-l))}}},e.trackRenders=async function*(e){for(;;)await new Promise(t=>{e[re]||(e[re]=[]),e[re].push(t)}),yield},e.unlockBodyScroll=function(){0!==Eo&&(Eo--,0===Eo&&(document.body.style.overflow=No??"",No=null))},e.unsafeHTML=function(e){return{_$litType$:Vt,html:e}},e.useNativeElementControllers=kt,e.waitForAllCustomElements=async function(e,t=500){const n=[];e instanceof Element&&(e.tagName.includes("-")&&n.push(e),e.shadowRoot)&&e.shadowRoot.querySelectorAll("*").forEach(e=>{e.tagName.includes("-")&&n.push(e)}),e instanceof DocumentFragment&&e.querySelectorAll("*").forEach(e=>{e.tagName.includes("-")&&n.push(e)}),await Promise.all(n.map(e=>wo(e,t)))},e.waitForElementDefined=vo,e.waitForElementReady=wo,e.watch=function(...e){const t=e.filter(e=>"string"==typeof e),n=e.find(e=>"object"==typeof e&&null!==e),o=!1!==n?.immediate;return function(e,n){const r=n.name;n.addInitializer(function(){const n=this.constructor;Object.prototype.hasOwnProperty.call(n,we)||(n[we]=new Map);let s=n[we].get(e);if(s||(s=new Set,n[we].set(e,s)),!Object.prototype.hasOwnProperty.call(n,V)){const e=n[V],t=new Map;if(e)for(const[n,o]of e)t.set(n,[...o]);n[V]=t}for(const i of t)s.has(i)||(s.add(i),n[V].has(i)||n[V].set(i,[]),n[V].get(i).push({methodName:r,method:e,immediate:o}))})}},e}({});
1
+ var Snice=function(e){"use strict";globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map;const t=globalThis.snice;function n(e){return Symbol.for(`snice:${e}`)}const o=n("is-controller-class"),r=n("is-controller-instance"),s=n("is-daemon-class"),i=n("is-daemon-instance"),a=n("is-element-class"),c=n("channel-handlers"),l=n("daemon-state"),h=n("ready-promise"),u=n("ready-resolve"),d=n("ready-reject"),f=n("ready-handlers-running"),m=n("rendered-promise"),p=n("rendered-resolve"),y=n("pending-reconnect-render"),g=n("render-depth"),v=n("render-root"),b=n("element-options"),w=n("controller"),E=n("initialized"),N=n("controller-key"),A=n("controller-name"),S=n("controller-id"),T=n("controller-operations"),C=n("native-controller"),_=n("controller-registry-name"),x=n("direct-controller"),O=n("controller-attribute-sync"),k=n("pending-controller-binding"),$=n("cleanup"),L=n("properties"),P=n("property-values"),j=n("property-defaults"),M=n("property-wrappers"),R=n("pre-init-property-values"),D=n("pre-upgrade-property-bindings"),I=n("properties-initialized"),V=n("property-watchers"),q=n("explicitly-set-properties"),B=n("router-context"),F=n("page-transition"),W=n("created-at"),z=n("ready-handlers"),U=n("dispose-handlers"),H=n("reconnect-handlers"),K=n("moved-handlers"),G=n("adopted-handlers"),Q=n("observers"),J=n("setting-from-property"),X=n("moved-timers"),Y=n("adopted-timers"),Z=n("dispatch-timers"),ee=n("render-method"),te=n("render-options"),ne=n("render-instance"),oe=n("render-timers"),re=n("render-callbacks"),se=n("styles-method"),ie=n("styles-applied"),ae=n("parent-styles-methods"),ce=n("snice-element-base"),le=n("context-handler"),he=n("navigation-context-instance"),ue=n("registered-elements"),de=n("is-updating"),fe=n("context-register"),me=n("context-unregister"),pe=n("context-notify-element"),ye=n("context-timer"),ge=n("context-called"),ve=n("context-update"),be=n("context-methods"),we=n("watch-methods"),Ee=n("observe-methods"),Ne=n("on-methods"),Ae=n("respond-methods"),Se=n("ready-methods"),Te=n("dispose-methods"),Ce=n("reconnect-methods"),_e=n("moved-methods"),xe=n("adopted-methods"),Oe=n("controller-abort"),ke=n("controller-attached"),$e=n("property-definers");class Le{static{this.SEPARATOR=","}static serialize(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){if(e.includes(Le.SEPARATOR))throw new Error(`SimpleArray strings cannot contain the character "${Le.SEPARATOR}" (U+FF0C)`);return e}if("number"==typeof e||"boolean"==typeof e)return String(e);throw new Error("SimpleArray only supports string, number, and boolean types. Got: "+typeof e)}).join(Le.SEPARATOR):""}static parse(e){return null==e||""===e?[]:e.split(Le.SEPARATOR).map(e=>{if(/^-?\d+\.?\d*$/.test(e)){const t=Number(e);if(!isNaN(t))return t}return"true"===e||"false"!==e&&e})}}var Pe,je,Me;e.TransitionMode=void 0,function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(e.TransitionMode||(e.TransitionMode={}));const Re=Symbol.for("snice:registered-elements-set");let De=0;class Ie{constructor(e={},t=[],n="",o={},r){if(this[Pe]=new WeakMap,this[je]=new Set,this[Me]=!1,this.id=De++,this.application=e,this.navigation={placards:t,route:n,params:o},r&&"function"==typeof r.create)this.fetch=r.create(this);else{if("function"!=typeof fetch)throw new Error("No fetch implementation available");this.fetch=fetch.bind(this)}}[(Pe=ue,je=Re,Me=de,fe)](e,t){const n=this[ue];let o=n.get(e);o||(o=new Set,n.set(e,o)),o.add(t),this[Re].add(e)}[me](e,t){const n=this[ue];if(void 0!==t){const o=n.get(e);if(!o)return;if(o.delete(t),o.size>0)return}n.delete(e),this[Re].delete(e)}[ve](e,t,n,o){this.application=e,this.navigation.placards=t,this.navigation.route=n,this.navigation.params=o,this.notify()}update(){this.notify()}notify(){if(this[de])return;this[de]=!0;const e=this[Re],t=this[ue];for(const n of e){const e=t.get(n);if(e)for(const t of e)if("function"==typeof n[t])try{n[t](this)}catch(e){console.error(`Error calling @context method ${t}:`,e)}}this[de]=!1}[pe](e){const t=this[ue].get(e);if(t)for(const n of t)if("function"==typeof e[n])try{e[n](this)}catch(e){console.error(`Error calling @context method ${n}:`,e)}}}function Ve(e){if(null!=e)return"string"==typeof e?String:"number"==typeof e?Number:"boolean"==typeof e?Boolean:e instanceof Date?Date:"bigint"==typeof e?BigInt:Array.isArray(e)?Array:void 0}function qe(e,t,n,o){const r=t.type||Ve(o);if(t.converter?.fromAttribute)return t.converter.fromAttribute(e,r);switch(r){case Boolean:return null!==e&&"false"!==e;case Number:return null!==e?Number(e):null;case String:return e;case Date:return e?new Date(e):null;case BigInt:return e&&e.endsWith("n")?BigInt(e.slice(0,-1)):e?BigInt(e):null;case Le:return Le.parse(e);case Array:try{return e?JSON.parse(e):[]}catch{return[]}case Object:try{return e?JSON.parse(e):{}}catch{return{}}default:return"number"==typeof n&&null!==e?Number(e):e}}function Be(e,t){return e!==t&&(e==e||t==t)}function Fe(e,t){return"string"==typeof e.attribute?e.attribute.toLowerCase():!0===e.attribute||"kebab"===e.attributeNaming?t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase():t.toLowerCase()}function We(e,t){return e[t]||(e[t]=new Set),e[t]}function ze(e,t){return e[t]||(e[t]={}),e[t]}function Ue(e,t,n,o,r){const s=t[V];if(!s)return;const i=[n],a=t[L]?.get(n),c=a&&"string"==typeof a.attribute?a.attribute:null;c&&c!==n&&i.push(c);for(const t of i)if(s.has(t))for(const i of s.get(t))try{i.method.call(e,o,r,n)}catch(e){console.error(`Error in @watch('${t}') method ${i.methodName}:`,e)}if(s.has("*"))for(const t of s.get("*"))try{t.method.call(e,o,r,n)}catch(e){console.error(`Error in @watch('*') method ${t.methodName}:`,e)}}function He(e,t){let n=null;const o=function(...o){null!==n&&clearTimeout(n),n=setTimeout(()=>{e.apply(this,o),n=null},t)};return o.cancel=()=>{null!==n&&clearTimeout(n),n=null},o}function Ke(e,t){let n=0,o=null;return function(...r){const s=Date.now(),i=t-(s-n);if(i<=0)return o&&(clearTimeout(o),o=null),n=s,e.apply(this,r);o||(o=setTimeout(()=>{n=Date.now(),o=null,e.apply(this,r)},i))}}function Ge(e,t){if(null==t)return e;if("global"===t)return"undefined"!=typeof document?document:null;if("function"==typeof t)try{return t.call(e)||null}catch{return null}return"string"==typeof t?e.closest?.(t)||null:t&&"function"==typeof t.addEventListener?t:null}function Qe(e,t,n){if(null==e||!1===e||t?.type===Le&&Array.isArray(e)&&0===e.length)return null;if(t.converter?.toAttribute)return t.converter.toAttribute(e,t.type);switch(t.type||Ve(n)){case Boolean:return"true";case Date:return e instanceof Date?e.toISOString():String(e);case BigInt:return"bigint"==typeof e?e.toString()+"n":String(e);case Le:return Array.isArray(e)?Le.serialize(e):String(e);case Array:return Array.isArray(e)?JSON.stringify(e):String(e);case Object:return"object"==typeof e&&null!==e?JSON.stringify(e):String(e);default:return String(e)}}const Je=new WeakSet,Xe=new Map;function Ye(e,t){const n=e.constructor[Q];if(n&&Array.isArray(n)&&0!==n.length){e[$]?e[$].observers||(e[$].observers=[]):e[$]={events:[],channels:[],observers:[]};for(const o of n){const n=o.method.bind(e),r=o.options?.throttle?Ke(n,o.options.throttle):n;switch(o.type){case"intersection":Ze(e,t,o,r);break;case"resize":et(e,t,o,r);break;case"media":tt(e,0,o,r);break;case"mutation":nt(e,t,o,r);break;default:console.warn(`Unknown observer type: ${o.type}`)}}}}function Ze(e,t,n,o){const r={threshold:n.options?.threshold??0,rootMargin:n.options?.rootMargin??"0px",root:n.options?.root??null};if("undefined"==typeof IntersectionObserver)return void console.warn("IntersectionObserver is not available in this environment");const s=new IntersectionObserver(e=>{for(const t of e)try{!1===o(t)&&s&&s.unobserve(t.target)}catch(e){console.error(`Error in intersection observer ${n.methodName}:`,e)}},r),i=n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):[t];i.forEach(e=>s.observe(e)),e[$].observers.push(()=>{i.forEach(e=>s.unobserve(e)),0===s.takeRecords().length&&s.disconnect()})}function et(e,t,n,o){const r=n.options?.box||"content-box";if("undefined"==typeof ResizeObserver)return void console.warn("ResizeObserver is not available in this environment");const s=new ResizeObserver(e=>{for(const t of e)try{o(t)}catch(e){console.error(`Error in resize observer ${n.methodName}:`,e)}});(n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):[t]).forEach(e=>{s.observe(e,{box:r})}),e[$].observers.push(()=>{s.disconnect()})}function tt(e,t,n,o){const r=n.target;if(!r)return void console.warn("Media query observer requires a query string");let s=Xe.get(r);if(!s)try{s=window.matchMedia(r),Xe.set(r,s)}catch(e){return void console.error(`Invalid media query: ${r}`,e)}const i=e=>{try{o(e.matches)}catch(e){console.error(`Error in media query observer ${n.methodName}:`,e)}};i(s);const a=e=>i(e);s.addEventListener?(s.addEventListener("change",a),e[$].observers.push(()=>{s.removeEventListener("change",a)})):(s.addListener(a),e[$].observers.push(()=>{s.removeListener(a)}))}function nt(e,t,n,o){const s=n.target.split(":"),i=s[0]||"childList",a=s[1],c={};switch(i){case"childList":c.childList=!0;break;case"attributes":c.attributes=!0,a&&(c.attributeFilter=[a]);break;default:return void(/^[.#[]/.test(i)?console.warn(`@observe: "mutation:${i}" — "${i}" looks like a selector. Selectors are the second argument — did you mean @observe('mutation:childList', '${i}')?`):console.warn(`Unknown mutation type: ${i} (expected childList or attributes)`))}n.options?.subtree&&(c.subtree=!0,n.options.maxDepth&&console.warn("maxDepth is set but requires custom implementation"));const l=!(!n.options?.maxDepth||!n.options.subtree),h=new MutationObserver(e=>{try{if(!l)return void o(e);const r=n.options.maxDepth,s=t.shadowRoot||t,i=e.filter(e=>{let t=0,n=e.target;for(;n&&n!==s&&t<r;)n=n.parentNode,t++;return t<r});i.length>0&&o(i)}catch(e){console.error(`Error in mutation observer ${n.methodName}:`,e)}}),u=!0===e[r];(n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):u&&t.shadowRoot?[t.shadowRoot]:[t]).forEach(e=>{h.observe(e,c)}),e[$].observers.push(()=>{h.disconnect()})}function ot(e){if(e[$]?.observers){for(const t of e[$].observers)t();e[$].observers=[]}}const rt="@context/request",st=new WeakMap;function it(e){return!e||"object"!=typeof e&&"function"!=typeof e?null:!0===e[r]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:"function"==typeof e.dispatchEvent?e:null}function at(e){if(!e||"object"!=typeof e&&"function"!=typeof e)return;const t=it(e);if(t){const e={kind:"application"};if(t.dispatchEvent(new CustomEvent(rt,{bubbles:!0,composed:!0,cancelable:!0,detail:e})),void 0!==e.context)return e.context}const n=e;return void 0!==n[B]?n[B]:!0===n[r]&&void 0!==n.element?.[B]?n.element[B]:void 0}function ct(e){return!!e&&("object"==typeof e||"function"==typeof e)&&!0===e[s]}function lt(e){if(!ct(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");let t=e[l];if(!t){t={target:new EventTarget,bindings:0,active:!1};try{Object.defineProperty(e,l,{value:t,configurable:!0}),Object.defineProperty(e,i,{value:!0,configurable:!0})}catch{throw new TypeError("@daemon instances must remain extensible until they are provided to an app context.")}}return t}function ht(e,t){if("string"!=typeof t||!t.trim())throw new TypeError("Daemon addresses must be non-empty strings.");const n=at(e);if(!n)throw new Error(`[snice] ${function(e){const t=e;return!0===t?.[r]?"controller":ct(t)?"@daemon instance":"element"}(e)} cannot resolve daemon "${t}" because no app context is provided.`);const o=n.daemons?.[t];if(!o)throw new Error(`[snice] app context does not provide daemon "${t}".`);if(!ct(o))throw new TypeError(`[snice] app context entry "${t}" is not an instance of an @daemon class.`);const s=lt(o);if(!s.active)throw new Error(`[snice] daemon "${t}" is not active because its app context has not been provided.`);return s.target}function ut(e){return ct(e)?function(e){return lt(e).target}(e):!0===e?.[r]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:e&&"function"==typeof e.dispatchEvent?e:null}function dt(e,t){const n=e.constructor[c];if(n){e[$]||(e[$]={events:[],channels:[]});for(const o of n){const n=o.method.bind(e),r=`@request/${o.channelName}`;let s,i,a=0;const c=[];let l=null;const h=(e=>o.options?.debounce?(...t)=>new Promise((n,r)=>{clearTimeout(s),s=setTimeout(async()=>{try{n(await e(...t))}catch(e){r(e)}},o.options.debounce)}):o.options?.throttle?(...t)=>{const n=Date.now(),r=o.options.throttle-(n-a);if(r<=0){clearTimeout(i),i=null,a=n;const o=c.splice(0);l=null;const r=e(...t);return o.length&&Promise.resolve(r).then(e=>{for(const t of o)t.resolve(e)},e=>{for(const t of o)t.reject(e)}),r}return l=t,new Promise((n,o)=>{c.push({resolve:n,reject:o}),i||(i=setTimeout(async()=>{a=Date.now(),i=null;const n=c.splice(0),o=l??t;l=null;try{const t=await e(...o);for(const e of n)e.resolve(t)}catch(e){for(const t of n)t.reject(e)}},r))})}:e)(n),u=e=>{const{data:t,discovery:n,payload:r}=e.detail;e.preventDefault(),e.stopImmediatePropagation(),e.stopPropagation(),n.resolve(),Promise.resolve(h(r)).then(e=>{t.resolve(e)}).catch(e=>{t.reject(e),console.error(`Error in response handler ${o.methodName}:`,e)})};let d=t;if(void 0!==o.options?.daemon)try{d=ht(e,o.options.daemon)}catch(e){console.warn(`[snice/@respond] ${e.message} Responder "${o.channelName}" skipped.`);continue}d.addEventListener(r,u),e[$].channels.push(()=>{d.removeEventListener(r,u)})}}}function ft(e){if(e[$]?.channels){for(const t of e[$].channels)t();e[$].channels=[]}}const mt=new Set(["once","prevent","preventdefault","stop","stoppropagation","capture","passive"]);function pt(e){const t=e.lastIndexOf(".");if(t<0)return;const n=e.slice(t+1).toLowerCase();mt.has(n)&&console.warn(`snice: "@${e}" is not a valid modifier — once/preventDefault/stopPropagation/capture are @on() options, not template modifiers. This registers a listener for event "${e}", which never fires.`)}function yt(e){const t=e.startsWith("~");t&&(e=e.substring(1));const n=e.split("+"),o={key:"",anyModifiers:t};for(const e of n){const t=e.toLowerCase();"ctrl"===t||"control"===t?o.ctrl=!0:"alt"===t?o.alt=!0:"shift"===t?o.shift=!0:"meta"===t||"cmd"===t||"command"===t?o.meta=!0:o.key=gt(e)}return o}function gt(e){return{esc:"Escape",escape:"Escape",enter:"Enter",return:"Enter",space:" ",spacebar:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",arrowup:"ArrowUp",arrowdown:"ArrowDown",arrowleft:"ArrowLeft",arrowright:"ArrowRight",delete:"Delete",del:"Delete",backspace:"Backspace",tab:"Tab",home:"Home",end:"End",pageup:"PageUp",pagedown:"PageDown"}[e.toLowerCase()]||e}function vt(e,t){return e.key===t.key&&(!!t.anyModifiers||(t.ctrl?e.ctrlKey:!e.ctrlKey)&&(t.alt?e.altKey:!e.altKey)&&(t.shift?e.shiftKey:!e.shiftKey)&&(t.meta?e.metaKey:!e.metaKey))}const bt=n("on-handlers");function wt(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(n=r,e.apply(this,o))}}const Et=new Set(["scroll","focus","blur","load","unload","error","resize","abort","mouseenter","mouseleave","pointerenter","pointerleave"]);function Nt(e,t){const n=e.constructor[bt];if(n&&Array.isArray(n)&&0!==n.length){e[$]||(e[$]={events:[],eventCancels:[],channels:[],observers:[]}),e[$].events||(e[$].events=[]),e[$].eventCancels||(e[$].eventCancels=[]),(e[$].events.length>0||e[$].eventCancels.length>0)&&At(e);for(const o of n){const n=e[o.methodName];let r=n?n.bind(e):o.method.bind(e);const s=o.options||{},i=["keydown","keyup","keypress"].includes(o.eventName.split(".")[0].split(":")[0]),a=i?o.eventName.indexOf("."):-1,c=i?o.eventName.indexOf(":"):-1,l=a>0&&c>0?Math.min(a,c):Math.max(a,c),h=l>0?o.eventName.substring(0,l):o.eventName,u=l>0?o.eventName.substring(l+1):null;if(l<=0&&pt(o.eventName),s.debounce&&s.debounce>0){const t=He(r,s.debounce);e[$].eventCancels.push(()=>t.cancel()),r=t}else s.throttle&&s.throttle>0&&(r=wt(r,s.throttle));let d=null;u&&["keydown","keyup","keypress"].includes(h)&&(d=yt(u));const f=(e=>d?t=>{vt(t,d)&&e(t)}:e)(r),m=void 0!==s.scope,p=void 0!==s.daemon;if(m&&p){console.warn(`[snice/@on] "${o.eventName}" cannot use both scope and daemon — listener skipped.`);continue}if((p||ct(e))&&o.selector){console.warn(`[snice/@on] "${o.eventName}" cannot delegate "${o.selector}" on a daemon target — listener skipped.`);continue}const y=m||p;let g=null;if(p)try{g=ht(e,s.daemon)}catch(e){console.warn(`[snice/@on] ${e.message} Listener "${o.eventName}" skipped.`);continue}else if(m&&(g=Ge(t,s.scope),!g)){console.warn(`[snice/@on] scope did not resolve for "${o.eventName}" on ${o.methodName} — listener skipped.`);continue}if(o.selector){const n=y?g:t.shadowRoot||t,r=e=>{const t=e.target;if(t.matches&&t.matches(o.selector)&&t||t.closest&&t.closest(o.selector)){s.preventDefault&&e.preventDefault(),s.stopPropagation&&(e.stopPropagation(),e.stopImmediatePropagation());try{f(e)}catch(e){console.error(`Error in event handler ${o.methodName}:`,e)}}},i=Et.has(h),a={capture:void 0!==s.capture?s.capture:i,once:s.once||!1,passive:s.passive||!1};n.addEventListener(h,r,a),e[$].events.push({target:n,eventName:h,handler:r,options:a})}else{const n=y?null:t.shadowRoot,r=Symbol(),i=e=>{if(!e[r]){e[r]=!0,s.preventDefault&&e.preventDefault(),s.stopPropagation&&e.stopPropagation();try{f(e)}catch(e){console.error(`Error in event handler ${o.methodName}:`,e)}}},a={capture:s.capture||!1,once:s.once||!1,passive:s.passive||!1};if(y){g.addEventListener(h,i,a),e[$].events.push({target:g,eventName:h,handler:i,options:a});continue}n&&(n.addEventListener(h,i,a),e[$].events.push({target:n,eventName:h,handler:i,options:a})),t.addEventListener(h,i,a),e[$].events.push({target:t,eventName:h,handler:i,options:a})}}}}function At(e){if(e[$]?.events){for(const t of e[$].eventCancels??[])t();e[$].eventCancels=[];for(const{target:t,eventName:n,handler:o,options:r}of e[$].events)t.removeEventListener(n,o,r);e[$].events=[]}}const St=n("context-handlers");function Tt(e,t=!1){const n=e.constructor[St];if(!n||!Array.isArray(n)||0===n.length)return;const o=e[le]??function(e){const t=it(e);if(!t)return;const n={kind:"navigation"};return t.dispatchEvent(new CustomEvent(rt,{bubbles:!0,composed:!0,cancelable:!0,detail:n})),n.navigation}(e);if(!o)return;e[he]=o;let r=!1;for(const t of n){const{methodName:n,method:s,options:i}=t,a=`__wrapped_${n}`;e[a]=function(t){r=!0;const o=e[ge]||(e[ge]=new Set);if(i.once&&o.has(n))return;const c=()=>{if(s.call(e,t),i.once){o.add(n);const t=e[he];t&&"function"==typeof t[me]&&t[me](e,a)}},l=e[ye]||(e[ye]={}),h=n;if(i.debounce)return clearTimeout(l[h]?.timeout),void(l[h]={timeout:setTimeout(c,i.debounce)});if(i.throttle){const e=Date.now();return void(e-(l[h]?.lastCall||0)>=i.throttle&&(l[h]={lastCall:e},c()))}c()},"function"==typeof o[fe]&&o[fe](e,a)}return t&&"function"==typeof o[pe]?new Promise(n=>{const s=()=>{try{r||e[he]!==o||o[pe](e)}finally{n()}};"task"===t?setTimeout(s,0):queueMicrotask(s)}):void 0}function Ct(e){const t=e.constructor[St];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[ye];if(n&&"object"==typeof n){for(const e of Object.keys(n))n[e]?.timeout&&clearTimeout(n[e].timeout);delete e[ye]}for(const n of t)delete e[`__wrapped_${n.methodName}`];const o=e[he];o&&"function"==typeof o[me]&&o[me](e),delete e[he],delete e[ge]}class _t{constructor(){this.cleanupFns=new Map,this.pendingOperations=new Set}register(e,t){this.cleanupFns.set(e,t)}unregister(e){this.cleanupFns.delete(e)}async cleanup(){await Promise.all(this.pendingOperations);for(const e of this.cleanupFns.values())try{await e()}catch(e){console.error("Error during cleanup:",e)}this.cleanupFns.clear()}async runOperation(e){const t=e(),n=t.then(()=>{},()=>{});this.pendingOperations.add(n);try{const e=await t;return this.pendingOperations.delete(n),e}catch(e){throw this.pendingOperations.delete(n),e}}}function xt(e,n){if(t.controllerRegistry.has(n))return void queueMicrotask(()=>{const t=e[C];(void 0===t?e[w]:t)===n&&Lt(e,n).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${n}":`,e)})});let o=t.pendingControllerAttachments.get(n);o||(o=new Set,t.pendingControllerAttachments.set(n,o)),o.add(e),queueMicrotask(()=>{t.pendingControllerAttachments.get(n)?.has(e)&&console.error(`Failed to attach controller "${n}":`,new Error(`Controller "${n}" not found in registry`))})}function Ot(e){return"string"==typeof e?e:e?.name||"(anonymous controller class)"}function kt(e,t){if(null===t){if(!e.hasAttribute("controller"))return}else if(e.getAttribute("controller")===t)return;e[O]=!0;try{null===t?e.removeAttribute("controller"):e.setAttribute("controller",t)}finally{delete e[O]}}function $t(e){if(!e[x])return!1;const t=e[A];return"function"==typeof t&&(kt(e,function(e){const t=Object.prototype.hasOwnProperty.call(e,_)?e[_]:void 0;return"string"==typeof t?t:Ot(e)}(t)),!0)}async function Lt(e,n){if("string"!=typeof n){if("function"!=typeof n)throw new Error(`attachController: expected a controller name or a controller class, got ${typeof n}. Controller instances are not supported — pass the class itself.`);if("function"!=typeof(s=n)||!0!==s.prototype?.[o])throw new Error(`Controller class "${Ot(n)}" must be decorated with @controller('name') before it can be attached.`)}var s;const i=Ot(n),a=e[N],c=e[C];if("string"==typeof n&&void 0!==c&&c!==n)return;if(e[A]===n&&a)return void("string"!=typeof n&&$t(e));if(a&&(await Pt(e),e[N]&&e[A]===n))return void("string"!=typeof n&&$t(e));let l;if("string"==typeof n){const e=globalThis.snice?.controllerRegistry;if(!e)throw new Error("Snice global registry not initialized");if(l=e.get(n),!l)throw new Error(`Controller "${n}" not found in registry`)}else l=n;const h=new l;"string"!=typeof n&&(e[x]=!0,delete e[C]),t.controllerIdCounter+=1;const u=t.controllerIdCounter,d=new _t;h[r]=!0,h[S]=u,h.element=e;const m=e[B];if(void 0!==m&&(h[B]=m),e[N]=h,e[A]=n,e[T]=d,"string"!=typeof n&&$t(e),!e[f]){const t=new AbortController;e[Oe]=t;const o=3e4;try{await Promise.race([e.ready,new Promise((e,n)=>{const r=()=>{const e=new Error(`attachController("${i}"): aborted before element was ready (likely detached or never connected)`);e.name="ControllerAttachAborted",n(e)};if(t.signal.aborted)return r();t.signal.addEventListener("abort",r,{once:!0});const s=setTimeout(()=>n(new Error(`attachController("${i}"): element did not become ready within ${o}ms (did you forget to appendChild it?)`)),o);t.signal.addEventListener("abort",()=>clearTimeout(s),{once:!0})})])}catch(t){throw e[N]===h&&("string"!=typeof n&&kt(e,null),delete e[N],delete e[A],delete e[T],"string"!=typeof n&&delete e[x]),t}finally{e[Oe]===t&&delete e[Oe]}}h[ke]=!0,await d.runOperation(async()=>{await h.attach(e)}),await Tt(h,"microtask"),Ye(h,e),dt(h,e),Nt(h,e),e.dispatchEvent(new CustomEvent("controller-attached",{detail:{name:i,controller:h}}))}async function Pt(e){const t=e[Oe];t&&t.abort();const n=e[N],o=e[A],r=e[T];n&&("function"==typeof o&&kt(e,null),delete e[N],delete e[A],delete e[T],"function"==typeof o&&delete e[x],n[ke]&&(r?await r.runOperation(async()=>{await n.detach(e)}):await n.detach(e),n.element=null,ot(n),ft(n),At(n),Ct(n),r&&await r.cleanup(),delete n[B],e.dispatchEvent(new CustomEvent("controller-detached",{detail:{name:void 0===o?void 0:Ot(o),controller:n}}))))}function jt(){if(globalThis.sniceNativeControllersInitialized)return;function e(e){if(!(e instanceof HTMLElement))return;if(!e.tagName||e.tagName.includes("-"))return;if(e[a])return;if(e[x])return void $t(e);const t=e.getAttribute("controller"),n=e[C];if(t!==n&&(t||void 0!==n)){if(!t)return delete e[C],delete e[A],void Pt(e).catch(e=>{console.error("Failed to detach controller from native element:",e)});e[C]=t,e.ready||(e.ready=Promise.resolve()),n&&Pt(e).catch(e=>{console.error("Failed to detach old controller from native element:",e)}),Lt(e,t).catch(n=>{"ControllerAttachAborted"!==n?.name?n?.message!==`Controller "${t}" not found in registry`?console.error(`Failed to attach controller "${t}" to native element:`,n):xt(e,t):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}}globalThis.sniceNativeControllersInitialized=!0;const t=new MutationObserver(t=>{for(const n of t)"attributes"===n.type&&"controller"===n.attributeName?e(n.target):"childList"===n.type&&n.addedNodes.forEach(t=>{t instanceof HTMLElement&&(e(t),t.querySelectorAll("[controller]").forEach(e))})});function n(){document.querySelectorAll("[controller]").forEach(e),t.observe(document.body,{attributes:!0,attributeFilter:["controller"],childList:!0,subtree:!0})}"loading"===document.readyState?document.addEventListener("DOMContentLoaded",n):n(),globalThis.sniceNativeControllerObserver=t}const Mt=Symbol.for("snice:html-result"),Rt=Symbol.for("snice:css-result"),Dt=new WeakMap;function It(e){return e&&e._$litType$===Mt}function Vt(e){return e&&e._$litType$===Rt}const qt=Symbol.for("snice:nothing"),Bt=Symbol.for("snice:unsafe-html");function Ft(e){return e&&e._$litType$===Bt}const Wt=Symbol.for("snice:repeat-result"),zt=new WeakSet;function Ut(e){return e[v]||e.shadowRoot||null}function Ht(e){const t=Ut(e);if(t)return t;const n=e.constructor[b];let o;if(o="light"===n?.renderRoot||!1===n?.shadow?e:"function"==typeof e.createRenderRoot?e.createRenderRoot():e.attachShadow({mode:"string"==typeof n?.shadow?n.shadow:"open",delegatesFocus:n?.delegatesFocus}),o!==e&&!(o instanceof ShadowRoot))throw new TypeError("snice: createRenderRoot() must return the host element or a ShadowRoot.");return e[v]=o,zt.add(e),o}function Kt(e){const t=e.getRootNode();if(t instanceof ShadowRoot)return t.host;let n=e;for(;n;){if(n instanceof HTMLElement&&zt.has(n))return n;n=n.parentNode}return null}const Gt=`snice$${Math.random().toFixed(9).slice(2)}$`,Qt="?"+Gt,Jt=`\x3c!--${Qt}--\x3e`,Xt=new RegExp(Gt.replace(/\$/g,"\\$"),"g"),Yt=new WeakMap,Zt=Symbol("not-committed");function en(e,t,n){!function(e,t){const n=e.localName;if(!n?.includes("-"))return!1;const o=e.ownerDocument?.defaultView?.customElements??globalThis.customElements;if(o?.get(n))return!1;const r=e;return r[D]||(r[D]=new Set),r[D].add(t),!0}(e,t)?e[t]=n:Object.defineProperty(e,t,{configurable:!0,enumerable:!0,writable:!0,value:n})}const tn=Symbol.for("snice:no-change"),nn=Symbol.for("snice:live"),on=e=>null===e||"object"!=typeof e&&"function"!=typeof e,rn=e=>!!e&&"function"==typeof e[Symbol.asyncIterator];class sn{constructor(e,t,n){this.parts=[],this.keyIndex=-1,this.element=t;const o=document.createTreeWalker(t.content,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_COMMENT|NodeFilter.SHOW_TEXT);let r=0;const s=[];let i;for(;null!==(i=o.nextNode());)if(i.nodeType===Node.ELEMENT_NODE){const e=i,t=e.tagName.toLowerCase(),o=e.parentElement?.tagName.toLowerCase();if(("else"===t||"else-if"===t)&&"if"!==o)throw new Error(`snice: <${t}> must be a direct child of <if>.`);if(("when"===t||"default"===t)&&"case"!==o)throw new Error(`snice: <${t}> must be a direct child of <case>.`);if("if"===t){const t=e.getAttribute("value");if(!t||!t.includes(Gt))throw new Error("snice: <if> requires a condition expression.");e.removeAttribute("value"),this.parts.push({type:"conditional-if",index:r++,element:e});continue}if("case"===t){const t=e.getAttribute("value");if(!t||!t.includes(Gt))throw new Error("snice: <case> requires a value expression.");for(const t of Array.from(e.childNodes))if(t.nodeType===Node.ELEMENT_NODE){const e=t.tagName.toLowerCase();if("when"!==e&&"default"!==e)throw new Error("snice: <case> may contain only direct <when> and <default> branches.")}else if(t.nodeType===Node.TEXT_NODE&&t.textContent?.trim()||t.nodeType===Node.COMMENT_NODE&&t.data.includes(Gt))throw new Error("snice: content inside <case> must be nested in a <when> or <default> branch.");e.removeAttribute("value"),this.parts.push({type:"conditional-case",index:r++,element:e});continue}if("else-if"===t){const t=e.getAttribute("value");if(!t||!t.includes(Gt))throw new Error("snice: <else-if> requires a condition expression.");e.removeAttribute("value"),this.parts.push({type:"conditional-else-if",index:r++,element:e});continue}if("when"===t){const t=e.getAttribute("value");t&&t.includes(Gt)&&(e.removeAttribute("value"),this.parts.push({type:"conditional-when",index:r++,element:e}));continue}if(e.hasAttributes()){const t=e.attributes,o=[];for(let s=0;s<t.length;s++){const i=t[s],a=i.value;if(a.includes(Gt)){o.push(i);const t=n[r]||i.name,s=a.split(Gt),c=s.length-1;if(/^@@?|^[.?]/.test(t)||t.startsWith("...")||t.startsWith("class:")||t.startsWith("style:")){const e=s.some(e=>""!==e);(c>1||e)&&console.warn(`snice: binding "${t}" takes a single expression; static text and extra interpolations are ignored. Use a plain attribute for string interpolation.`)}if(t.startsWith("...")){const n=t.slice(3).toLowerCase();if(!["props","properties","attrs","attributes","events"].includes(n))throw new Error(`snice: unknown spread binding "${t}". Use ...props, ...attrs, or ...events.`);this.parts.push({type:"spread",index:r,name:n,element:e}),r+=c}else if(t.startsWith("class:")){if(!t.slice(6))throw new Error("snice: class: binding requires a class name.");this.parts.push({type:"class",index:r,name:t.slice(6),element:e}),r+=c}else if(t.startsWith("style:")){if(!t.slice(6))throw new Error("snice: style: binding requires a CSS property name.");this.parts.push({type:"style",index:r,name:t.slice(6),element:e}),r+=c}else if(t.startsWith("@@")){if(!t.slice(2).split("|")[0])throw new Error("snice: event binding requires an event name.");this.parts.push({type:"event",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith("@")){if(!t.slice(1).split("|")[0])throw new Error("snice: event binding requires an event name.");this.parts.push({type:"event",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith(".")){if(!t.slice(1))throw new Error("snice: property binding requires a property name.");this.parts.push({type:"property",index:r,name:t.slice(1),element:e}),r+=c}else if(t.startsWith("?")){if(!t.slice(1))throw new Error("snice: boolean binding requires an attribute name.");this.parts.push({type:"boolean-attribute",index:r,name:t.slice(1),element:e}),r+=c}else"controller"===i.name&&2===s.length&&""===s[0]&&""===s[1]?(this.parts.push({type:"controller",index:r,element:e}),r+=c):(this.parts.push({type:"attribute",index:r,name:i.name,element:e,attrStrings:s}),r+=c)}}for(const t of o)e.removeAttribute(t.name)}}else if(i.nodeType===Node.COMMENT_NODE){const e=i;if(e.data===Qt){const t=e.parentNode,n=document.createComment("");t.insertBefore(n,e.nextSibling),this.parts.push({type:"node",index:r++,startNode:e,endNode:n})}else if(e.data.includes(Gt)){const t=e.data.split(Xt);this.parts.push({type:"comment",index:r,startNode:e,attrStrings:t}),r+=t.length-1}}else if(i.nodeType===Node.TEXT_NODE){const e=i,t=e.data;if(t.includes(Gt)){const n=e.parentNode,o=t.split(Xt),i=o.length-1;for(let t=0;t<i;t++){n.insertBefore(document.createTextNode(o[t]),e);const s=document.createComment(""),i=document.createComment("");n.insertBefore(s,e),n.insertBefore(i,e),this.parts.push({type:"node",index:r++,startNode:s,endNode:i})}""!==o[i]?e.data=o[i]:s.push(e)}}for(const e of s)e.parentNode?.removeChild(e);for(const e of this.parts)if("attribute"===e.type&&"key"===e.name){this.keyIndex=e.index;break}}}function an(e){const{strings:t}=e,n=Yt.get(t);if(n)return n;const o=[],r=[];let s=!1,i=!1,a=!1,c="",l="";for(let e=0;e<t.length;e++){const n=t[e];if(o.push(n),e<t.length-1){for(let e=0;e<n.length;e++){const t=n[e];if(a)"-"===t&&n.startsWith("--\x3e",e)&&(a=!1,e+=2);else if(s){if(i)t===c&&(i=!1,c="");else if(">"===t)s=!1;else if('"'===t||"'"===t)i=!0,c=t;else if("="===t){let t=e-1;for(;t>=0&&/[\w\-\.@\?/:\+~|]/.test(n[t]);)t--;l=n.substring(t+1,e).trim()}}else"<"===t&&(n.startsWith("\x3c!--",e)?(a=!0,e+=3):/[A-Za-z!/?]/.test(n[e+1]||"")&&(s=!0))}if(a)r.push(""),o.push(Gt);else if(i)r.push(l),o.push(Gt);else if(s){const s=n.trimEnd();if(s.endsWith("=")){let e=s.length-2;for(;e>=0&&/[\w\-\.@\?\/:\+~|]/.test(s[e]);)e--;l=s.substring(e+1,s.length-1).trim(),r.push(l),o.push(Gt)}else{if(!n.match(/<(if|else-if|case|when)\s*$/)){const o=(n.slice(-40)+"${…}"+(t[e+1]??"").slice(0,40)).replace(/\s+/g," ").trim();throw new Error(`snice: expressions directly in opening tags are not supported; use an explicit attribute, property, event, class, style, or named spread binding. Near "${o}".`)}l="value",r.push("value"),o.push(`value="${Gt}"`)}}else r.push(""),o.push(Jt)}}const h=o.join(""),u=document.createElement("template");if(e.svg){u.innerHTML=`<svg>${h}</svg>`;const e=u.content.firstElementChild;for(;e.firstChild;)u.content.insertBefore(e.firstChild,e);u.content.removeChild(e)}else u.innerHTML=h;let d;try{d=new sn(e,u,r)}catch(e){throw function(e,t){if(e instanceof Error&&/\bNear "[\s\S]*"\.$/.test(e.message))return e;const n=e instanceof Error?e.message:String(e),o=Array.from(t).join("${…}").replace(/\s+/g," ").trim(),r=/<([a-z][a-z0-9-]*)>/i.exec(n)?.[1],s=/binding "([^"]+)"/i.exec(n)?.[1],i=r?`<${r}`:s??"",a=i?o.indexOf(i):-1,c=a>=0?a:0,l=Math.max(0,c-40),h=Math.min(o.length,c+80),u=h<o.length?"…":"";return new Error(`${n} Near "${l>0?"…":""}${o.slice(l,h)}${u}".`,{cause:e})}(e,t)}return Yt.set(t,d),d}function cn(e){if(!It(e))return;const t=an(e);return-1===t.keyIndex?void 0:e.values[t.keyIndex]}class ln{constructor(e){this.parts=[],this.fragment=null,this.conditionalParts=[],this.regularParts=[],this.template=an(e),this.strings=e.strings}isSameTemplate(e){return this.strings===e}renderFragment(){if(!this.fragment){this.fragment=this.template.element.content.cloneNode(!0);const e=document.createTreeWalker(this.template.element.content,NodeFilter.SHOW_ALL),t=document.createTreeWalker(this.fragment,NodeFilter.SHOW_ALL),n=new Map;let o=e.currentNode,r=t.currentNode;for(;o&&r;)n.set(o,r),o=e.nextNode(),r=t.nextNode();const s=new Set;for(const e of this.template.parts)"conditional-when"===e.type&&s.add(n.get(e.element));for(let e=0;e<this.template.parts.length;e++){const t=this.template.parts[e];let o;switch(t.type){case"node":const e=n.get(t.startNode),r=n.get(t.endNode);o=new un(e,r);break;case"attribute":const i=n.get(t.element);o=new dn(i,t.name,t.attrStrings);break;case"property":const a=n.get(t.element);o=new gn(a,t.name);break;case"boolean-attribute":const c=n.get(t.element);o=new bn(c,t.name);break;case"event":const l=n.get(t.element);o=new wn(l,t.name);break;case"class":const h=n.get(t.element);o=new mn(h,t.name);break;case"style":const u=n.get(t.element);o=new pn(u,t.name);break;case"spread":const d=n.get(t.element);o=new yn(d,t.name);break;case"controller":const f=n.get(t.element);o=new vn(f);break;case"conditional-if":const m=n.get(t.element);o=new Nn(m);break;case"conditional-else-if":const p=n.get(t.element);o=new Sn(p);break;case"conditional-case":const y=n.get(t.element);o=new Tn(y,s);break;case"conditional-when":const g=n.get(t.element);o=new _n(g);break;case"comment":const v=n.get(t.startNode);o=new fn(v,t.attrStrings);break;default:throw new Error(`Unknown part type: ${t.type}`)}this.parts.push(o),o instanceof Nn||o instanceof Sn||o instanceof Tn||o instanceof _n?this.conditionalParts.push({part:o,index:t.index}):this.regularParts.push({part:o,index:t.index})}}return this.fragment}render(e){const t=this.renderFragment();return this.update(e),t}update(e){for(const{part:t,index:n}of this.conditionalParts)t.commit(e[n]);const t=new Set;for(const{part:e}of this.conditionalParts){const n=e instanceof Sn||e instanceof _n?e.coordinator:e;t.has(n)||(t.add(n),(n instanceof Nn||n instanceof Tn)&&n.flush())}for(const{part:t,index:n}of this.regularParts)t instanceof dn&&void 0!==t.strings||t instanceof fn?t.commit(e,n):t.commit(e[n]);let n;for(const e of this.parts)try{e.isConnected?e.reconnected():e.disconnected()}catch(e){n??=e}if(n)throw n}clear(){let e;for(const t of this.parts)try{t.destroy()}catch(t){e??=t}if(e)throw e}disconnected(e=!1){let t;for(const n of this.parts)try{n.disconnected(e)}catch(e){t??=e}if(t)throw t}reconnected(){let e;for(const t of this.parts)try{t.reconnected()}catch(t){e??=t}if(e)throw e}}class hn{get isConnected(){return this.element?.isConnected??!1}disconnected(e=!1){}reconnected(){}destroy(){let e;try{this.clear()}catch(t){e=t}if(e)throw e}}class un extends hn{constructor(e,t){super(),this.type="node",this._committedValue=Zt,this._itemKeys=null,this._asyncSource=null,this._asyncVersion=0,this._asyncIterator=null,this._asyncRunning=!1,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1,this._committingAsyncValue=!1,this.startNode=e,this.endNode=t}commit(e){if(e!==tn)if((e=>!!e&&"function"==typeof e.then)(e)||rn(e))this._commitAsync(e);else if(!this._committingAsyncValue&&this._asyncSource&&this._cancelAsync(!0),e!==qt&&null!=e&&""!==e)on(e)?e!==this._committedValue&&this._commitText(e):It(e)?this._commitTemplateResult(e):function(e){return!!e&&e._$repeat$===Wt}(e)?0===e.values.length?this.commit(e.empty??qt):this._commitIterable(e.values,e.keys):Ft(e)?this._commitUnsafeHTML(e):void 0===e.nodeType?(e=>Array.isArray(e)||"function"==typeof e?.[Symbol.iterator])(e)?this._commitIterable(e):this._commitText(e):this._commitNode(e);else{if(this._committedValue!==qt){const e=this._clear();if(this._committedValue=qt,e)throw e}this._committedValue=qt}}_commitText(e){if(this._committedValue!==Zt&&this._committedValue!==qt&&on(this._committedValue)&&!Array.isArray(this._committedValue)){const t=this.startNode.nextSibling;if(t&&t.nodeType===Node.TEXT_NODE)return t.data=String(e),void(this._committedValue=e)}const t=this._clear();if(this._insertBefore(document.createTextNode(String(e))),this._committedValue=e,t)throw t}_commitTemplateResult(e){const t=this._committedValue;if(t instanceof ln){const n=Yt.get(e.strings);if(n&&t.template===n)return void t.update(e.values)}const n=new ln(e),o=n.renderFragment();try{n.update(e.values)}catch(e){throw n.clear(),e}const r=this._committedValue,s=this._itemKeys,i=this.endNode.ownerDocument.createDocumentFragment();let a=this.startNode.nextSibling;for(;a&&a!==this.endNode;){const e=a.nextSibling;i.appendChild(a),a=e}this._insertBefore(o),this._committedValue=n,this._itemKeys=null;try{this.isConnected&&n.reconnected()}catch(e){try{n.clear()}catch(e){console.error("snice: failed to clean up a rejected nested template:",e)}let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const e=t.nextSibling;t.remove(),t=e}throw this._insertBefore(i),this._committedValue=r,this._itemKeys=s,e}this._disposeCommitted(r)}_commitIterable(e,t){const n=Array.isArray(e)?e:Array.from(e),o=t?Array.from(t):n.map(cn);if(o.length!==n.length)throw new Error("snice: keyed iterable produced a different number of keys and values.");const r=o.filter(e=>void 0!==e);if(r.length>0&&r.length!==o.length&&console.warn("snice: a list mixes keyed and unkeyed items. Identity falls back to position; use repeat(items, { key, render }) for deterministic updates."),r.length>0&&new Set(r).size!==r.length)throw new Error("snice: a keyed list contains duplicate keys.");let s;Array.isArray(this._committedValue)&&this._committedValue[0]instanceof un||(s=this._clear(),this._committedValue=[],this._itemKeys=null);const i=n.length>0&&o.every(e=>void 0!==e),a=this._itemKeys;if(i&&a&&this._committedValue.length>0&&(a.length!==o.length||!o.every((e,t)=>e===a[t]))){if(s??=this._reconcileKeyed(n,o,this._committedValue,a),this._itemKeys=o,s)throw s;return}const c=this._committedValue;let l=0;for(const e of n){let t;if(l>=c.length){const e=document.createComment(""),n=document.createComment("");this._insertBefore(e),this._insertBefore(n),t=new un(e,n),c.push(t)}else t=c[l];t.commit(e),l++}if(l<c.length){for(let e=l;e<c.length;e++){const t=c[e];try{t.destroy()}catch(e){s??=e}t.startNode.remove(),t.endNode.remove()}c.length=l}if(this._itemKeys=i?o:null,s)throw s}_reconcileKeyed(e,t,n,o){const r=this.endNode.parentNode;let s;const i=new Map;for(let e=0;e<n.length;e++)i.has(o[e])||i.set(o[e],n[e]);const a=new Set,c=new Array(e.length).fill(null);for(let n=0;n<e.length;n++){const e=i.get(t[n]);e&&!a.has(e)&&(a.add(e),c[n]=e)}for(const e of n)if(!a.has(e)){try{e.destroy()}catch(e){s??=e}e.startNode.remove(),e.endNode.remove()}let l=this.startNode.nextSibling;for(let t=0;t<c.length;t++){let n=c[t];if(n)if(n.startNode===l)l=n.endNode.nextSibling;else{const e=document.createDocumentFragment();let t=n.startNode;const o=n.endNode.nextSibling;for(;t&&t!==o;){const n=t.nextSibling;e.appendChild(t),t=n}r.insertBefore(e,l)}else{const e=document.createComment(""),o=document.createComment("");r.insertBefore(e,l),r.insertBefore(o,l),n=new un(e,o),c[t]=n}n.commit(e[t])}return this._committedValue=c,s}_commitNode(e){if(this._committedValue!==e){const t=this._clear();if(this._insertBefore(e),this._committedValue=e,t)throw t}}_commitUnsafeHTML(e){const t=this._committedValue;if(Ft(t)&&t.html===e.html)return;const n=this._clear(),o=document.createElement("template");if(o.innerHTML=e.html,this._insertBefore(o.content),this._committedValue=e,n)throw n}_commitAsync(e){if(e===this._asyncSource)return;this._cancelAsync(!1),this._asyncSource=e,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1;const t=this._clear();if(this._committedValue=qt,this._startAsyncSource(),t)throw t}_startAsyncSource(e=!1){const t=this._asyncSource;if(!t||this._asyncRunning||this._asyncCompleted||!e&&!this.isConnected)return;this._asyncRunning=!0,this._asyncStarted=!0,this._asyncPaused=!1;const n=++this._asyncVersion;if(rn(t)){try{this._asyncIterator=t[Symbol.asyncIterator]()}catch(e){return this._asyncRunning=!1,this._asyncCompleted=!0,void console.error("snice: async iterable template value failed:",e)}(async()=>{try{for(;this._asyncIterator;){const e=await this._asyncIterator.next();if(e.done||n!==this._asyncVersion)break;this._commitAsyncValue(e.value)}}catch(e){n===this._asyncVersion&&console.error("snice: async iterable template value failed:",e)}finally{n===this._asyncVersion&&(this._asyncIterator=null,this._asyncRunning=!1,this._asyncCompleted=!0)}})()}else Promise.resolve(t).then(e=>{if(n===this._asyncVersion){this._asyncRunning=!1,this._asyncCompleted=!0;try{this._commitAsyncValue(e)}catch(e){console.error("snice: promise template value failed:",e)}}},e=>{n===this._asyncVersion&&(this._asyncRunning=!1,this._asyncCompleted=!0,console.error("snice: promise template value failed:",e))})}_commitAsyncValue(e){this._committingAsyncValue=!0;try{this.commit(e)}finally{this._committingAsyncValue=!1}}_cancelAsync(e){this._asyncVersion++;const t=this._asyncIterator;if(this._asyncIterator=null,this._asyncRunning=!1,e&&(this._asyncSource=null,this._asyncStarted=!1,this._asyncCompleted=!1,this._asyncPaused=!1),t?.return)try{Promise.resolve(t.return()).catch(()=>{})}catch{}}_insertBefore(e){this.endNode.parentNode?.insertBefore(e,this.endNode)}_clear(){const e=this.startNode.parentNode,t=this._committedValue;let n;try{this._disposeCommitted(t)}catch(e){n=e}if(!e)return this._committedValue=qt,n;let o=this.startNode.nextSibling;for(;o&&o!==this.endNode;){const t=o.nextSibling;e.removeChild(o),o=t}return this._committedValue=qt,n}_disposeCommitted(e){let t;if(e instanceof ln)try{e.clear()}catch(e){t=e}else if(Array.isArray(e))for(const n of e)if(n instanceof un)try{n.destroy()}catch(e){t??=e}if(t)throw t}clear(){this._cancelAsync(!0);const e=this._clear();if(e)throw e}get isConnected(){return this.startNode.isConnected}disconnected(e=!1){let t;if(this._committedValue instanceof ln)try{this._committedValue.disconnected(e)}catch(e){t??=e}else if(Array.isArray(this._committedValue))for(const n of this._committedValue)if(n instanceof un)try{n.disconnected(e)}catch(e){t??=e}if(this._asyncSource&&this._asyncRunning&&(this._cancelAsync(!1),this._asyncPaused=!0),t)throw t}reconnected(){let e;if(this._committedValue instanceof ln)try{this._committedValue.reconnected()}catch(t){e??=t}else if(Array.isArray(this._committedValue))for(const t of this._committedValue)if(t instanceof un)try{t.reconnected()}catch(t){e??=t}if(!this._asyncSource||this._asyncStarted&&!this._asyncPaused||this._startAsyncSource(!0),e)throw e}}class dn extends hn{constructor(e,t,n){super(),this.type="attribute",this._committedValue=Zt,this.lastValues=null,this.lastValueIndex=0,this.element=e,this.name=t,n&&(n.length>2||""!==n[0]||""!==n[1])?(this._committedValue=new Array(n.length-1).fill(Zt),this.strings=n):this._committedValue=Zt}commit(e,t=0){let n,o=!1;if(void 0===this.strings){if(e===tn)return;if(o=!on(e)||e!==this._committedValue&&e!==tn,!o)return;this._committedValue=e,n=e}else{const r=e;this.lastValues=[...r],this.lastValueIndex=t;const s=this._committedValue;n=this.strings[0];for(let e=0;e<this.strings.length-1;e++){let i=r[t+e];i===tn&&(i=s[e],i===Zt&&(i="")),o=o||!on(i)||i!==s[e],i===qt?n=qt:n!==qt&&(n=n+(i??"")+this.strings[e+1]),s[e]=i}if(!o)return}this._commitValue(n)}_commitValue(e){e===qt?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,String(e??""))}clear(){this.element.removeAttribute(this.name)}}class fn extends hn{constructor(e,t){super(),this.type="node",this.lastValues=null,this.lastValueIndex=0,this.node=e,this.strings=t,this._committedValues=new Array(t.length-1).fill(Zt)}commit(e,t=0){const n=e;this.lastValues=[...n],this.lastValueIndex=t;let o=!1,r=this.strings[0];for(let e=0;e<this.strings.length-1;e++){let s=n[t+e];s===tn&&(s=this._committedValues[e],s===Zt&&(s="")),o=o||!on(s)||s!==this._committedValues[e],this._committedValues[e]=s,r+=String(s===qt?"":s??"")+this.strings[e+1]}if(o){if(r.includes("--")||r.endsWith("-"))throw new Error('snice: comment expressions cannot produce "--" or end with "-".');this.node.data=r}}clear(){}}class mn extends hn{constructor(e,t){super(),this.type="class",this.committed=Zt,this.element=e,this.name=t}commit(e){if(e===tn)return;const t=e!==qt&&Boolean(e);t!==this.committed&&(this.committed=t,this.element.classList.toggle(this.name,t))}clear(){this.element.classList.remove(this.name),this.committed=Zt}}class pn extends hn{constructor(e,t){super(),this.type="style",this.committed=Zt,this.element=e,this.name=t}commit(e){if(e===tn||Object.is(e,this.committed))return;this.committed=e;const t=this.element.style;e===qt||null==e||!1===e?t.removeProperty(this.name):t.setProperty(this.name,String(e))}clear(){this.element.style.removeProperty(this.name),this.committed=Zt}}class yn extends hn{constructor(e,t){super(),this.type="spread",this.committed={},this.listeners=new Map,this.consumedOnce=new Map,this.element=e,this.name=t}commit(e){if(e===tn)return;if(e!==qt&&null!=e||(e={}),"object"!=typeof e||Array.isArray(e))throw new TypeError(`snice: ...${this.name} expects an object.`);const t=e;"events"===this.name?this.commitEvents(t):"props"===this.name||"properties"===this.name?this.commitProperties(t):this.commitAttributes(t),this.committed={...t}}commitProperties(e){for(const t of Object.keys(this.committed))Object.prototype.hasOwnProperty.call(e,t)||en(this.element,t,void 0);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||en(this.element,t,n===qt?void 0:n)}commitAttributes(e){for(const t of Object.keys(this.committed))Object.prototype.hasOwnProperty.call(e,t)||this.element.removeAttribute(t);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||(n===qt||null==n||!1===n?this.element.removeAttribute(t):this.element.setAttribute(t,!0===n?"":String(n)))}commitEvents(e){!function(e,t){const n=new Set;for(const[o,r]of Object.entries(e)){const e=o.startsWith("@")?o.slice(1):o;if(!e)throw new TypeError(`snice: ${t} contains an empty event name.`);if(n.has(e))throw new TypeError(`snice: ${t} contains duplicate event name "${e}".`);if(n.add(e),r!==qt&&null!=r&&!1!==r&&"function"!=typeof r&&(!r||"object"!=typeof r||"function"!=typeof r.handleEvent))throw new TypeError(`snice: ${t} event "${e}" expects a function, EventListenerObject, or null.`)}}(e,`...${this.name}`);for(const[t,n]of this.consumedOnce){const o=Object.keys(e).find(e=>this.eventName(e)===t);o&&Object.is(e[o],n)||this.consumedOnce.delete(t)}for(const[t,n]of this.listeners){const o=Object.keys(e).find(e=>this.eventName(e)===t);o&&Object.is(e[o],n.value)||(this.element.removeEventListener(t,n.listener,n.options),this.listeners.delete(t))}for(const[t,n]of Object.entries(e)){const e=this.eventName(t);if(this.listeners.has(e))continue;const o=!!n&&"object"==typeof n&&"function"==typeof n.handleEvent;if(n===qt||null==n||!1===n)continue;if(this.consumedOnce.has(e)&&Object.is(this.consumedOnce.get(e),n))continue;this.consumedOnce.delete(e);const r=o?n:void 0,s=t=>{r?.once&&this.consumedOnce.set(e,n),o?n.handleEvent(t):n.call(this.resolveHost(),t)};this.element.addEventListener(e,s,r),this.listeners.set(e,{value:n,listener:s,options:r})}}eventName(e){return e.startsWith("@")?e.slice(1):e}resolveHost(){return Kt(this.element)||this.element}clear(){if("events"===this.name){for(const[e,t]of this.listeners)this.element.removeEventListener(e,t.listener,t.options);this.listeners.clear(),this.consumedOnce.clear()}else if("props"!==this.name&&"properties"!==this.name)for(const e of Object.keys(this.committed))this.element.removeAttribute(e);this.committed={}}disconnected(e=!1){"events"!==this.name||e||this.detachListeners()}reconnected(){"events"===this.name&&0===this.listeners.size&&this.commitEvents(this.committed)}detachListeners(){for(const[e,t]of this.listeners)this.element.removeEventListener(e,t.listener,t.options);this.listeners.clear()}}class gn extends hn{constructor(e,t){super(),this.type="property",this._committedValue=Zt,this.element=e,this.name=t}commit(e){if(e!==tn){if(function(e){return e&&e._$liveMarker$===nn}(e)){if((e=e.value)===tn)return;if(e===this.element[this.name])return void(this._committedValue=e)}else if(e===this._committedValue)return;this._committedValue=e,en(this.element,this.name,e===qt?void 0:e)}}clear(){this._committedValue=Zt}}class vn extends hn{constructor(e){super(),this.type="controller",this._committedValue=Zt,this.element=e}commit(e){if(e===tn)return;const t=null==e||!1===e||""===e||e===qt?null:e,n=this._committedValue===Zt,o=n?null:this._committedValue;if(!n&&t===o)return;this._committedValue=t;const r=this.element;"function"==typeof o&&"function"!=typeof t&&(void 0!==r[k]?delete r[k]:r[a]?r.controller=null:this._detach()),"function"==typeof t?this.isConnected?this._apply(t):this.element.localName.includes("-")&&!r[a]&&(r[k]=t):"string"==typeof t?this.element.setAttribute("controller",t):"string"==typeof o&&this.element.removeAttribute("controller")}_apply(e){const t=this.element;t[a]?t.controller!==e?t.controller=e:this._attach(e):this.element.localName.includes("-")?t[k]=e:(t.ready||(t.ready=Promise.resolve()),this._attach(e))}_attach(e){Lt(this.element,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e?.name||e}":`,t)})}_detach(){Pt(this.element).catch(e=>{console.error("Failed to detach controller:",e)})}disconnected(e=!1){if("function"!=typeof this._committedValue)return;const t=this.element;void 0===t[k]&&(t[a]||this._detach())}reconnected(){const e=this._committedValue;"function"==typeof e&&this._apply(e)}clear(){const e=this.element;void 0!==e[k]&&delete e[k];const t=this._committedValue;this._committedValue=Zt,"function"==typeof t&&(e[a]||this._detach())}}class bn extends hn{constructor(e,t){super(),this.type="boolean-attribute",this._committedValue=Zt,this.element=e,this.name=t}commit(e){if(e===tn)return;const t=!!e&&e!==qt;t!==this._committedValue&&(this._committedValue=t,t?this.element.setAttribute(this.name,""):this.element.removeAttribute(this.name))}clear(){this.element.removeAttribute(this.name),this._committedValue=Zt}}class wn extends hn{constructor(e,t){super(),this.type="event",this.listener=null,this.listenerOptions=void 0,this.value=void 0,this.keyFilter=null,this.host=null,this.modifiers=new Set,this.once=!1,this.onceConsumed=!1,this.element=e;const[n,...o]=t.split("|"),r={preventdefault:"prevent",stoppropagation:"stop",stopimmediatepropagation:"immediate"},s=new Set(["prevent","stop","immediate","once","capture","passive","self"]);for(const e of o){const n=r[e.toLowerCase()]||e.toLowerCase();if(!s.has(n))throw new Error(`snice: unknown event modifier "${e}" in @${t}. Supported modifiers: prevent, stop, immediate, once, capture, passive, self.`);this.modifiers.add(n)}if(this.modifiers.has("passive")&&this.modifiers.has("prevent"))throw new Error(`snice: @${t} cannot combine passive and prevent.`);const i=["keydown","keyup","keypress"].includes(n.split(".")[0].split(":")[0]),a=i?n.indexOf("."):-1,c=i?n.indexOf(":"):-1,l=a>0&&c>0?Math.min(a,c):Math.max(a,c);if(l>0){const e=n.substring(0,l),t=n.substring(l+1);this.eventName=e,this.keyFilter=yt(t)}else this.eventName=n,pt(n)}commit(e){if(e===tn)return;e===qt&&(e=null);const t=!!e&&"object"==typeof e&&"function"==typeof e.handleEvent;if(null!=e&&!1!==e&&"function"!=typeof e&&!t)throw new TypeError(`snice: @${this.eventName} expects a function, EventListenerObject, or null.`);if(t&&this.modifiers.has("prevent")&&e.passive)throw new Error(`snice: @${this.eventName} cannot combine a passive listener object with prevent.`);if(e!==this.value||null==e){if(this.listener&&(this.element.removeEventListener(this.eventName,this.listener,this.listenerOptions),this.listener=null,this.listenerOptions=void 0),null==e||!1===e)return this.value=e,void(this.onceConsumed=!1);this.onceConsumed=!1;try{this.attachListener(e,t),this.value=e}catch(e){throw this.value=void 0,e}}}attachListener(e,t){const n=this.keyFilter,o=r=>{this.modifiers.has("self")&&r.target!==this.element||n&&!vt(r,n)||(this.once&&(this.onceConsumed=!0,this.element.removeEventListener(this.eventName,o,s),this.listener=null,this.listenerOptions=void 0),this.modifiers.has("prevent")&&r.preventDefault(),this.modifiers.has("immediate")?r.stopImmediatePropagation():this.modifiers.has("stop")&&r.stopPropagation(),t?e.handleEvent(r):(this.host||(this.host=Kt(this.element)),e.call(this.host||this.element,r)))},r=t?e:{};this.once=this.modifiers.has("once")||!!r.once;const s={capture:this.modifiers.has("capture")||r.capture,passive:this.modifiers.has("passive")||r.passive,signal:r.signal};this.element.addEventListener(this.eventName,o,s),this.listener=o,this.listenerOptions=s}clear(){this.detachListener(),this.value=void 0,this.host=null,this.onceConsumed=!1}detachListener(){this.listener&&(this.element.removeEventListener(this.eventName,this.listener,this.listenerOptions),this.listener=null,this.listenerOptions=void 0)}disconnected(e=!1){e||this.detachListener(),this.host=null}reconnected(){this.listener||this.onceConsumed||null==this.value||!1===this.value||this.attachListener(this.value,"object"==typeof this.value)}}const En=Symbol("not-set");class Nn extends hn{constructor(e){super(),this.type="node",this.conditions=[En],this.branches=[],this.defaultBranch=-1,this.currentBranch=-1;const t=e.parentNode;this.startNode=document.createComment("if"),this.endNode=document.createComment("/if"),t.insertBefore(this.startNode,e),t.insertBefore(this.endNode,e.nextSibling);const n=document.createDocumentFragment();this.branches.push(n);let o=!1,r=n;for(const t of Array.from(e.childNodes)){const e=t.nodeType===Node.ELEMENT_NODE?t.tagName.toLowerCase():"";if("else-if"===e||"else"===e){o=!0;const n=t,s=document.createDocumentFragment();for(;n.firstChild;)s.appendChild(n.firstChild);const i=this.branches.push(s)-1;if(r=s,"else-if"===e){if(-1!==this.defaultBranch)throw new Error("snice: <else> must be the final branch inside <if>.");this.conditions[i]=En,An.set(n,{coordinator:this,index:i})}else{if(-1!==this.defaultBranch)throw new Error("snice: <if> may contain only one <else> branch.");this.defaultBranch=i}n.remove();continue}o?t.nodeType!==Node.TEXT_NODE||t.textContent?.trim()?r.appendChild(t):t.remove():n.appendChild(t)}t.removeChild(e)}commit(e){e!==tn&&(this.conditions[0]=e)}setAlternative(e,t){t!==tn&&(this.conditions[e]=t)}flush(){let e=-1;for(let t=0;t<this.conditions.length;t++)if(this.conditions[t]!==En&&this.conditions[t]!==qt&&Boolean(this.conditions[t])){e=t;break}-1===e&&(e=this.defaultBranch),e!==this.currentBranch&&(this.collectCurrent(),this.currentBranch=e,-1!==e&&this.branches[e].hasChildNodes()&&this.startNode.parentNode?.insertBefore(this.branches[e],this.endNode))}collectCurrent(){if(-1===this.currentBranch)return;const e=this.branches[this.currentBranch];let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const n=t.nextSibling;e.appendChild(t),t=n}}clear(){this.collectCurrent(),this.currentBranch=-1}get isConnected(){return this.startNode.isConnected}}const An=new WeakMap;class Sn extends hn{constructor(e){super(),this.type="node";const t=An.get(e);if(!t)throw new Error("snice: <else-if> must be a direct child of <if>.");this.coordinator=t.coordinator,this.index=t.index}commit(e){this.coordinator.setAlternative(this.index,e)}clear(){}get isConnected(){return this.coordinator.isConnected}}class Tn extends hn{constructor(e,t){super(),this.type="node",this.value=En,this.branches=[],this.defaultBranch=-1,this.currentBranch=-1;const n=e.parentNode;this.startNode=document.createComment("case"),this.endNode=document.createComment("/case"),n.insertBefore(this.startNode,e),n.insertBefore(this.endNode,e.nextSibling);for(const n of Array.from(e.children)){const e=n.tagName.toLowerCase();if("when"===e){const e=document.createDocumentFragment();for(;n.firstChild;)e.appendChild(n.firstChild);const o=t.has(n),r=this.branches.push({fragment:e,dynamic:o,expected:o?En:n.getAttribute("value")??""})-1;o&&Cn.set(n,{coordinator:this,index:r})}else if("default"===e){if(-1!==this.defaultBranch)throw new Error("snice: <case> may contain only one <default> branch.");const e=document.createDocumentFragment();for(;n.firstChild;)e.appendChild(n.firstChild);this.defaultBranch=this.branches.push({fragment:e,dynamic:!1,expected:En})-1}}n.removeChild(e)}commit(e){e!==tn&&(this.value=e)}setExpected(e,t){t!==tn&&(this.branches[e].expected=t)}flush(){let e=this.branches.findIndex((e,t)=>t!==this.defaultBranch&&(e.dynamic?Object.is(this.value,e.expected):String(this.value)===e.expected));-1===e&&(e=this.defaultBranch),e!==this.currentBranch&&(this.collectCurrent(),this.currentBranch=e,-1!==e&&this.branches[e].fragment.hasChildNodes()&&this.startNode.parentNode?.insertBefore(this.branches[e].fragment,this.endNode))}collectCurrent(){if(-1===this.currentBranch)return;const e=this.branches[this.currentBranch].fragment;let t=this.startNode.nextSibling;for(;t&&t!==this.endNode;){const n=t.nextSibling;e.appendChild(t),t=n}}clear(){this.collectCurrent(),this.currentBranch=-1}get isConnected(){return this.startNode.isConnected}}const Cn=new WeakMap;class _n extends hn{constructor(e){super(),this.type="node";const t=Cn.get(e);if(!t)throw new Error("snice: dynamic <when> must be a direct child of <case>.");this.coordinator=t.coordinator,this.index=t.index}commit(e){this.coordinator.setExpected(this.index,e)}clear(){}get isConnected(){return this.coordinator.isConnected}}const xn=new WeakSet,On=new WeakSet,kn=["a[href]","area[href]","button:not([disabled])",'input:not([disabled]):not([type="hidden"])',"select:not([disabled])","textarea:not([disabled])","iframe","object","embed","summary","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])','[tabindex]:not([tabindex="-1"])'].join(",");function $n(e){try{e.focus()}catch{return!1}return function(e){const t=e.getRootNode().activeElement;return t===e||Boolean(t&&e.contains(t))}(e)}function Ln(e){return e?Array.from(e.querySelectorAll("[autofocus]")).filter(e=>!On.has(e)):[]}function Pn(e){return e?Array.from(e.querySelectorAll(kn)):[]}function jn(e){if(xn.has(e)||!function(e){return!(!e.hasAttribute("autofocus")||On.has(e))||Ln(Ut(e)).length>0}(e))return;xn.add(e);const t=()=>{const t=e.ownerDocument.defaultView,n=()=>{xn.delete(e),function(e){if(!e.isConnected)return;const t=Ut(e),n=[];if(e.hasAttribute("autofocus")&&!On.has(e)&&n.push(e),n.push(...Ln(t)),0!==n.length)if(function(e){const t=e.activeElement;return Boolean(t&&t!==e.body&&t!==e.documentElement)}(e.ownerDocument))for(const e of n)On.add(e);else for(const o of n){if(On.add(o),$n(o))return;if(o===e)for(const e of Pn(t))if($n(e))return}}(e)};t?.requestAnimationFrame?t.requestAnimationFrame(n):queueMicrotask(n)};Promise.resolve(e.ready).then(t,t)}let Mn=!1;function Rn(e){e[p]||(e[m]=new Promise(t=>{e[p]=t}))}function Dn(e){const t=e[p];t&&(e[p]=null,t())}const In=new class{constructor(){this.pending=new Set,this.scheduled=!1}schedule(e,t){t.sync?Fn(e,t):(this.pending.add(e),this.scheduled||(this.scheduled=!0,queueMicrotask(()=>this.flush())))}flush(){const e=Array.from(this.pending);this.pending.clear(),this.scheduled=!1;for(const t of e)t.isConnected?Fn(t,t[te]||{}):t[y]=!0}remove(e){this.pending.delete(e)}};function Vn(e){return Object.prototype.hasOwnProperty.call(e,ne)}function qn(e){const t=e[re];if(!t||0===t.length)return;const n=[...t];e[re]=[],n.forEach(e=>e())}const Bn=50;function Fn(e,t,n){const o=arguments.length>=3,r=e[ee];if(!r)return void Dn(e);if(t.once&&Vn(e))return void Dn(e);const s=e[g]??0;if(s>=Bn){const t=e.tagName?e.tagName.toLowerCase():"element";return console.error(`snice: maximum render depth (${Bn}) exceeded for <${t}>. render() is mutating an observed property, causing an infinite render loop.`),void Dn(e)}e[g]=s+1;try{const s=o?n:r.call(e),i=Ht(e);if(!1===t.differential){if("string"!=typeof s)return void console.warn("Render method with differential: false must return a string");const t=document.createElement("template");t.innerHTML=s;const n=e[ne];n?.clear();const o=Array.from(i.childNodes).filter(e=>!(e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")));for(const e of o)e.remove();return i.appendChild(t.content),e[ne]=null,qn(e),void jn(e)}if(!It(s))return void console.warn("Render method must return html`` template result");let a=e[ne];if(a&&a.isSameTemplate(s.strings))return a.update(s.values),qn(e),void jn(e);const c=new ln(s),l=c.renderFragment();try{c.update(s.values)}catch(e){throw c.clear(),e}const h=document.createDocumentFragment();for(const e of Array.from(i.childNodes))e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")||h.appendChild(e);i.appendChild(l);try{e.isConnected&&c.reconnected()}catch(e){try{c.clear()}catch(e){console.error("snice: failed to clean up a rejected render tree:",e)}for(const e of Array.from(i.childNodes))e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style")||e.remove();throw i.appendChild(h),e}let u;e[ne]=c;try{a?.clear()}catch(e){u=e}if(qn(e),jn(e),u)throw u}catch(t){const n=function(e,t){const n=e.tagName?.toLowerCase()||"element",o=t instanceof Error?t.message:String(t),r=new Error(`snice: render failed for <${n}>: ${o}`,{cause:t});return t instanceof Error&&(r.name=t.name),r}(e,t);if(Mn)throw n;console.error("Error rendering element:",n)}finally{e[g]=s,Dn(e)}}function Wn(e,t=!1){const n=e[te]||{};if(n.once&&Vn(e))e.isConnected&&zn(e);else if(Rn(e),t)Fn(e,n);else{if(void 0!==n.debounce&&n.debounce>0)return e[oe]||(e[oe]={}),clearTimeout(e[oe].debounce),void(e[oe].debounce=setTimeout(()=>{e[oe].debounce=null,In.schedule(e,n)},n.debounce));if(void 0!==n.throttle&&n.throttle>0){e[oe]||(e[oe]={lastThrottle:0});const t=e[oe],o=Date.now();return 0===t.lastThrottle||o-t.lastThrottle>=n.throttle?(t.lastThrottle=o,void In.schedule(e,n)):void(t.throttleTimer||(t.throttleTimer=setTimeout(()=>{t.throttleTimer=null,t.lastThrottle=Date.now(),In.schedule(e,n)},n.throttle-(o-t.lastThrottle))))}In.schedule(e,n)}}function zn(e){const t=e[ne];t?.reconnected()}function Un(e){const t=e[Z];if(t)for(const e of t.values())e.debounceTimeout&&clearTimeout(e.debounceTimeout),e.throttleTimeout&&clearTimeout(e.throttleTimeout),e.debounceTimeout=null,e.throttleTimeout=null,e.throttleLastCall=0,e.latestDetail=void 0}const Hn=n("debounce-timers"),Kn=n("throttle-timers"),Gn=n("once-called"),Qn=n("memoize-cache");function Jn(e){if(e[Hn]){for(const t in e[Hn])e[Hn][t]?.timeout&&clearTimeout(e[Hn][t].timeout);e[Hn]={}}}function Xn(e){if(e[Kn]){for(const t in e[Kn])e[Kn][t]?.timeout&&clearTimeout(e[Kn][t].timeout);e[Kn]={}}}function Yn(e,t){const n=Reflect.getOwnPropertyDescriptor(e,t);return!n||n.configurable?{locked:!1,value:void 0}:"value"in n&&!1===n.writable?{locked:!0,value:n.value}:"value"in n||void 0!==n.get?{locked:!1,value:void 0}:{locked:!0,value:void 0}}function Zn(e){e.prototype[a]=!0;const t=e.prototype.connectedCallback,n=e.prototype.disconnectedCallback,o=e.prototype.attributeChangedCallback,r=e.observedAttributes||[];r.includes("controller")||r.push("controller"),r.includes("autofocus")||r.push("autofocus");const s=e[L];if(s)for(const[e,t]of s){if(!1===t.attribute)continue;const n=Fe(t,e);r.includes(n)||r.push(n)}Object.defineProperty(e,"observedAttributes",{get:()=>r,configurable:!0}),Object.defineProperty(e.prototype,"ready",{get(){return this[h]||(this[h]=new Promise((e,t)=>{this[u]=e,this[d]=t}),this[h].catch(()=>{})),this[h]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendered",{get(){return this[p]?this[m]:Promise.resolve()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"controller",{get(){return this[w]},set(e){const t=this[w];if(this[w]=e,e!==t){if(e){const t="string"==typeof e?e:e.name||"(anonymous controller class)";return void Lt(this,e).catch(n=>{"ControllerAttachAborted"!==n?.name?"string"!=typeof e||n?.message!==`Controller "${e}" not found in registry`?console.error(`Failed to attach controller "${t}":`,n):xt(this,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}t&&Pt(this).catch(e=>{console.error("Failed to detach controller:",e)})}},enumerable:!0,configurable:!0}),e.prototype.connectedCallback=async function(){if(this[h]||(this[h]=new Promise((e,t)=>{this[u]=e,this[d]=t}),this[h].catch(()=>{})),this[E]){try{zn(this)}catch(e){console.error(`Error reconnecting the render tree for ${this.tagName}:`,e)}Nt(this,this),dt(this,this),Tt(this,"task");try{Ye(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName} on reconnection:`,e)}t&&t.call(this);const n=e[H];if(n)for(const e of n)try{const t=e.method.call(this);t&&"function"==typeof t.then&&t.catch(t=>{console.error(`Error in @reconnect handler ${e.methodName}:`,t)})}catch(t){console.error(`Error in @reconnect handler ${e.methodName}:`,t)}return this[ee]&&this[y]&&(this[y]=!1,Wn(this)),void jn(this)}this[I]=!0;const n=e[L];if(n)for(const[e,t]of n){if(!1===t.attribute)continue;const n=Fe(t,e);if(!this.hasAttribute(n))continue;const o=this.getAttribute(n);We(this,q).add(e),t.type===Boolean&&""===o&&this.setAttribute(n,"true"),this[e]=qe(o,t)}if(this[R]){for(const[e,t]of Array.from(this[R].entries())){const o=n?.get(e),r=Fe(o||{},e);this[R].delete(e),this.hasAttribute(r)||(this[e]=t)}delete this[R]}if(void 0!==this[k]){const e=this[k];if(delete this[k],!this[w]){this[w]=e;const t=e?.name||"(anonymous controller class)";Lt(this,e).catch(e=>{"ControllerAttachAborted"!==e?.name?console.error(`Failed to attach controller "${t}":`,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}}if(this.hasAttribute("controller")&&!this[w]){const e=this.getAttribute("controller");e&&(this.controller=e)}if(function(e){const t=e[se],n=[],o=[];let r=e.constructor;for(;r&&r!==HTMLElement&&r!==Function.prototype;)o.unshift(r),r=Object.getPrototypeOf(r);for(const e of o){if(!Object.prototype.hasOwnProperty.call(e,"styles"))continue;const t=e.styles,o=Array.isArray(t)?t:[t];for(const e of o)Vt(e)?n.push(e):console.warn("Static styles must be a css`` result or an array of css`` results")}if((t||0!==n.length)&&!e[ie]){e[ie]=!0;try{const o=[...n],r=e[ae];if(r)for(const t of r){const n=t.call(e);Vt(n)&&o.push(n)}if(t){const n=t.call(e);if(!Vt(n))return void console.warn("Styles method must return css`` template result");o.push(n)}const s=Ht(e),i=Array.from(s.childNodes).filter(e=>e.nodeType===Node.ELEMENT_NODE&&"STYLE"===e.tagName&&e.hasAttribute("data-snice-style"));if(i.length===o.length&&i.every((e,t)=>e.textContent===o[t].cssText))return;for(const e of i)e.remove();if(s instanceof ShadowRoot&&o.every(e=>!!e.styleSheet)&&"adoptedStyleSheets"in s)try{return void(s.adoptedStyleSheets=o.map(e=>e.styleSheet))}catch{}for(const e of o){const t=document.createElement("style");t.setAttribute("data-snice-style",""),t.textContent=e.cssText,s.appendChild(t)}}catch(e){console.error("Error applying styles:",e)}}}(this),this[ee])try{Ht(this)}catch{}Nt(this,this),dt(this,this),Tt(this,"task"),this[E]=!0,function(e,t){if(Je.has(t))return;Je.add(t);const n=t[V];if(!n||0===n.size)return;const o=t[L],r=new Set(["*"]);if(o)for(const[e,t]of o)r.add(e),"string"==typeof t?.attribute&&r.add(t.attribute);for(const t of n.keys()){if(r.has(t))continue;const n=e.tagName?e.tagName.toLowerCase():"element",s=o?[...o.keys()].join(", "):"(none)";console.warn(`@watch('${t}') on <${n}> matches no @property — it will never fire. Known properties: ${s}.`)}}(this,e),function(e,t){const n=t[V],o=t[L];if(n&&o)for(const[t,r]of o){const o=[t],s=r&&"string"==typeof r.attribute?r.attribute:null;s&&s!==t&&o.push(s),o.push("*");for(const r of o)if(n.has(r))for(const o of n.get(r))if(o.immediate)try{o.method.call(e,void 0,e[t],t)}catch(e){console.error(`Error in @watch('${r}') method ${o.methodName}:`,e)}}}(this,e),t&&t.call(this);const o=e[z];if(await new Promise(e=>queueMicrotask(e)),!this.isConnected)return void(this[u]&&(this[u](),this[u]=null,this[d]=null));this[ee]&&Wn(this,!0);try{Ye(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName}:`,e)}if(await new Promise(e=>queueMicrotask(e)),!this.isConnected)return void(this[u]&&(this[u](),this[u]=null,this[d]=null));let r,s=!1;if(o){this[f]=!0;try{for(const e of o)try{await e.method.call(this)}catch(t){console.error(`Error in @ready handler ${e.methodName}:`,t),s||(s=!0,r=t)}}finally{delete this[f]}}s&&this[d]?(this[d](r),this[u]=null,this[d]=null):this[u]&&(this[u](),this[u]=null,this[d]=null),jn(this)},e.prototype.disconnectedCallback=async function(){try{!function(e){const t=e[ne];t?.disconnected(!0)}(this)}catch(e){console.error(`Error disconnecting the render tree for ${this.tagName}:`,e)}const t=e[U];if(t)for(const e of t)try{await e.method.call(this)}catch(t){console.error(`Error in @dispose handler ${e.methodName}:`,t)}n&&n.call(this),this[w]&&Pt(this).catch(e=>{console.error("Failed to detach controller:",e)}),At(this),ft(this),Ct(this),ot(this),Jn(this),Xn(this),function(e){const t=e[oe];if(!t)return!1;let n=!1;return t.debounce&&(clearTimeout(t.debounce),t.debounce=null,n=!0),t.throttleTimer&&(clearTimeout(t.throttleTimer),t.throttleTimer=null,n=!0),n}(this)&&(this[y]=!0),Un(this),io(this,X),io(this,Y)},e.prototype.attributeChangedCallback=function(t,n,r){if(o?.call(this,t,n,r),"controller"===t){if(this[O])return;return this[x]?void $t(this):void(this.controller=r)}"autofocus"===t&&(null===r?On.delete(this):this[E]&&jn(this));const s=e[L];if(s)for(const[n,o]of s){if(Fe(o,n).toLowerCase()!==t.toLowerCase())continue;if(this[J]?.has(t.toLowerCase()))break;const s=this[P]?.[n],i=this[j]?.[n];let a=null===r?o.type!==Boolean&&i:qe(r,o,s,i);const c=this[M]?.[n];if(c&&(a=c(a)),!(o?.hasChanged?o.hasChanged(a,s):Be(a,s)))break;We(this,q).add(n),ze(this,P)[n]=a,this[E]&&Ue(this,e,n,s,a),this[ee]&&this[E]&&Wn(this);break}},e.prototype.connectedMoveCallback=async function(){const t=e[K];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @moved handler ${e.methodName}:`,t)}},e.prototype.adoptedCallback=async function(){const t=e[G];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @adopted handler ${e.methodName}:`,t)}}}function eo(e,t,n,o){if(function(e){let t=Object.getPrototypeOf(e);const n=[];for(;t&&t!==HTMLElement&&t!==Function.prototype;)n.push(t),t=Object.getPrototypeOf(t);n.reverse();for(const t of n){if(t[L]){e[L]||(e[L]=new Map);for(const[n,o]of t[L])e[L].has(n)||e[L].set(n,o)}t.formAssociated&&!e.formAssociated&&(e.formAssociated=!0)}}(t),n.metadata&&n.metadata[L]){t[L]||(t[L]=new Map);for(const[e,o]of n.metadata[L])t[L].set(e,o)}else if(to.length>0){t[L]||(t[L]=new Map);const e=to.pop();for(const[n,o]of e)t[L].set(n,o)}o?.formAssociated&&(t.formAssociated=!0);const r={...Object.getPrototypeOf(t)?.[b]||{}},s=o||{};if("light"===s.renderRoot&&"string"==typeof s.shadow||"shadow"===s.renderRoot&&!1===s.shadow)throw new TypeError("snice: @element renderRoot and shadow options select conflicting render roots.");const i={...r,...s};return Object.prototype.hasOwnProperty.call(s,"shadow")?i.renderRoot=!1===s.shadow?"light":"shadow":Object.prototype.hasOwnProperty.call(s,"renderRoot")&&("light"===s.renderRoot?i.shadow=!1:!1===i.shadow&&(i.shadow="open")),t[b]=i,!0===t.prototype[ce]&&Object.prototype.hasOwnProperty.call(t.prototype,"render")&&!Object.prototype.hasOwnProperty.call(t.prototype,ee)&&"function"==typeof t.prototype.render&&(t.prototype[ee]=t.prototype.render,t.prototype[te]=t.renderOptions||{}),Zn(t),customElements.get(e)?(globalThis.SNICE_DEBUG&&console.warn(`[snice] "${e}" is already registered. Skipping.`),t):(customElements.define(e,t),t)}const to=[],no=new WeakMap;function oo(e){return function(t,n){const o=n.name;return n.metadata?(n.metadata[L]||(n.metadata[L]=new Map),n.metadata[L].set(o,e||{})):(0===to.length&&to.push(new Map),to[to.length-1].set(o,e||{})),function(t){const n=this[D],r=!0===n?.delete(o);0===n?.size&&delete this[D];const s=Object.prototype.hasOwnProperty.call(this,o),i=s&&(r||!function(e,t,n){const o=e?.ownerDocument;if(!o?.createElement)return!1;let r=no.get(o);if(!r){const e=o.createElement("div");r=new Map;for(const t of Reflect.ownKeys(e))r.set(t,e[t]);no.set(o,r)}return r.has(t)&&Object.is(r.get(t),n)}(this,o,this[o])),a=i?this[o]:t;s&&delete this[o];const c=this.constructor;c[L]||(c[L]=new Map);const l={...e};l.type||void 0===t||(l.type=Ve(t)),l.attributeNaming||"kebab"!==c.propertyAttributeNaming||(l.attributeNaming="kebab"),c[L].set(o,l),ze(this,j)[o]=t;const h=()=>{if(!this[I])return;const e=this[P]?.[o];if(!1!==l.attribute&&!1!==l.reflect){const n=Fe(l,o),r=Qe(e,l,t),s=n.toLowerCase();We(this,J).add(s);try{null===r?this.removeAttribute?.(n):this.setAttribute?.(n,r)}finally{this[J].delete(s)}}this[E]&&(Ue(this,this.constructor,o,e,e),this[ee]&&Wn(this))},u=e=>{if(!l.deep)return e;let t;return t=function(e,t){if(!e||"object"!=typeof e)return e;const n=new WeakMap,o=new WeakMap,r=e=>e&&"object"==typeof e&&o.get(e)||e,s=e=>{if(!e||"object"!=typeof e)return e;if(n.has(e))return n.get(e);if(e instanceof Map){let i;const a=new Map;return i=new Proxy(e,{get(e,n){const o=Yn(e,n);if(o.locked)return o.value;if(a.has(n))return a.get(n);let c;if("set"===n)c=(n,o)=>{n=r(n),o=r(o);const s=e.has(n),a=e.get(n);return e.set(n,o),s&&Object.is(a,o)||t(),i};else if("delete"===n)c=n=>{n=r(n);const o=e.delete(n);return o&&t(),o};else if("clear"===n)c=()=>{0!==e.size&&(e.clear(),t())};else if("get"===n)c=t=>s(e.get(r(t)));else if("has"===n)c=t=>e.has(r(t));else if("forEach"===n)c=(t,n)=>e.forEach((e,o)=>t.call(n,s(e),s(o),i));else if("values"===n)c=function*(){for(const t of e.values())yield s(t)};else if("keys"===n)c=function*(){for(const t of e.keys())yield s(t)};else if("entries"===n||n===Symbol.iterator)c=function*(){for(const[t,n]of e.entries())yield[s(t),s(n)]};else{const t=Reflect.get(e,n,e);if("function"!=typeof t)return t;if("constructor"===n)return t;c=t.bind(e)}return a.set(n,c),c}}),n.set(e,i),o.set(i,e),i}if(e instanceof Set){let i;const a=new Map;return i=new Proxy(e,{get(e,n){const o=Yn(e,n);if(o.locked)return o.value;if(a.has(n))return a.get(n);let c;if("add"===n)c=n=>{n=r(n);const o=e.has(n);return e.add(n),o||t(),i};else if("delete"===n)c=n=>{n=r(n);const o=e.delete(n);return o&&t(),o};else if("clear"===n)c=()=>{0!==e.size&&(e.clear(),t())};else if("has"===n)c=t=>e.has(r(t));else if("forEach"===n)c=(t,n)=>e.forEach(e=>{const o=s(e);t.call(n,o,o,i)});else if("values"===n||"keys"===n||n===Symbol.iterator)c=function*(){for(const t of e.values())yield s(t)};else if("entries"===n)c=function*(){for(const t of e.values()){const e=s(t);yield[e,e]}};else{const t=Reflect.get(e,n,e);if("function"!=typeof t)return t;if("constructor"===n)return t;c=t.bind(e)}return a.set(n,c),c}}),n.set(e,i),o.set(i,e),i}if(!Array.isArray(e)&&!function(e){const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t}(e))return e;const i=new Proxy(e,{get(e,t,n){const o=Yn(e,t);return o.locked?o.value:s(Reflect.get(e,t,n))},set(e,n,o,s){const i=Reflect.get(e,n,s);o=r(o);const a=Reflect.set(e,n,o);return a&&!Object.is(i,o)&&t(),a},deleteProperty(e,n){const o=Object.prototype.hasOwnProperty.call(e,n),r=Reflect.deleteProperty(e,n);return r&&o&&t(),r},defineProperty(e,n,o){const s=Reflect.getOwnPropertyDescriptor(e,n),i="value"in o?{...o,value:r(o.value)}:o,a=Reflect.defineProperty(e,n,i),c=a?Reflect.getOwnPropertyDescriptor(e,n):s;return a&&!function(e,t){if(!e||!t)return e===t;const n="value"in e||"writable"in e;return n===("value"in t||"writable"in t)&&e.configurable===t.configurable&&e.enumerable===t.enumerable&&(!n||e.writable===t.writable&&Object.is(e.value,t.value))&&(n||e.get===t.get&&e.set===t.set)}(s,c)&&t(),a}});return n.set(e,i),o.set(i,e),i};return s(e)}(e,()=>{this[P]?.[o]===t&&h()}),t};ze(this,M)[o]=u;const d=this.constructor.prototype;let f=d[$e];f&&Object.prototype.hasOwnProperty.call(d,$e)||(f=new Map(f),d[$e]=f);const m=f.get(o);m&&m===e||(f.set(o,e),Object.defineProperty(this.constructor.prototype,o,{get(){return this[R]?.has(o)?this[R].get(o):this[P]&&o in this[P]?this[P][o]:t},set(e){const t=this[o];if(!(l.hasChanged?l.hasChanged(e,t):Be(e,t)))return;const n=(this[M]?.[o]||(e=>e))(e);if(!this[I])return this[R]||(this[R]=new Map),void this[R].set(o,n);if(ze(this,P)[o]=n,!1!==l.attribute&&!1!==l.reflect){const e=Fe(l,o),t=Qe(n,l,this[j]?.[o]);We(this,q).add(o);const r=e.toLowerCase();We(this,J).add(r);try{null===t?this.removeAttribute?.(e):this.setAttribute?.(e,t)}finally{this[J].delete(r)}}this[E]&&(Ue(this,this.constructor,o,t,n),this[ee]&&Wn(this))},configurable:!0,enumerable:!0}));const p=u(t);return ze(this,P)[o]=p,ze(this,j)[o]=p,i?a:p}}}function ro(e){return!0===e[r]&&e.element?e.element:e}function so(e,t,n,o,r){const s=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,t)||(o[t]=new Set),!o[t].has(n)){if(o[t].add(n),!Object.prototype.hasOwnProperty.call(o,e)){const t=o[e];o[e]=t?[...t]:[]}o[e].push({methodName:s,method:n,...r})}})}function io(e,t){const n=e[t];if(n)for(const e of n.values())e.debounceTimer&&clearTimeout(e.debounceTimer),e.throttleTimer&&clearTimeout(e.throttleTimer),e.debounceTimer=null,e.throttleTimer=null,e.lastThrottleCall=0}function ao(e,t,n){return function(o={}){return function(r,s){so(e,n,r,s,{options:o});const i=s.name;return function(...e){this[t]||(this[t]=new Map),this[t].has(i)||this[t].set(i,{throttleTimer:null,debounceTimer:null,lastThrottleCall:0});const n=this[t].get(i),s=(...e)=>r.apply(this,e),a=(...e)=>{try{const t=r.apply(this,e);t&&"function"==typeof t.then&&t.catch(e=>console.error(`Error in deferred lifecycle handler ${i}:`,e))}catch(e){console.error(`Error in deferred lifecycle handler ${i}:`,e)}};if(o.debounce>0)return clearTimeout(n.debounceTimer),void(n.debounceTimer=setTimeout(()=>a(...e),o.debounce));if(o.throttle>0){const t=Date.now();return 0===n.lastThrottleCall||t-n.lastThrottleCall>=o.throttle?(n.lastThrottleCall=t,s(...e)):void(n.throttleTimer||(n.throttleTimer=setTimeout(()=>{n.throttleTimer=null,n.lastThrottleCall=Date.now(),a(...e)},o.throttle-(t-n.lastThrottleCall))))}return s(...e)}}}}const co=ao(K,X,_e),lo=ao(G,Y,xe);class ho extends HTMLElement{static{this.propertyAttributeNaming="kebab"}createRenderRoot(){const e=this.constructor[b];return this.attachShadow({mode:"string"==typeof e?.shadow?e.shadow:"open",delegatesFocus:e?.delegatesFocus})}invalidate(){return Wn(this),this.rendered}renderNow(){return Rn(this),Fn(this,{...this[te]||{},once:!1}),this.rendered}}Object.defineProperty(ho.prototype,ce,{value:!0});class uo{constructor(e){this.parsed=this.parsePattern(e)}get spec(){return this.parsed.template}parsePattern(e){let t=e,n="",o=!1;const r=e.indexOf("?");return-1!==r&&(t=e.slice(0,r),n=e.slice(r+1),t.endsWith("(")&&n.endsWith(")")&&(o=!0,t=t.slice(0,-1),n=n.slice(0,-1))),{pathSegments:this.parseSegments(t),querySegments:n?this.parseQuerySegments(n):[],queryOptional:o,template:e}}parseSegments(e){const t=[];let n=0;for(;n<e.length;)switch(e[n]){case"(":const{segments:o,endIndex:r}=this.parseOptionalGroup(e,n);t.push({type:"optional",segments:o}),n=r+1;break;case":":const{name:s,endIndex:i}=this.parseIdentifier(e,n+1);t.push({type:"param",name:s}),n=i;break;case"*":const{name:a,endIndex:c}=this.parseIdentifier(e,n+1);t.push({type:"splat",name:a}),n=c;break;default:const{value:l,endIndex:h}=this.parseLiteral(e,n);l&&t.push({type:"literal",value:l}),n=h}return t}parseOptionalGroup(e,t){let n=1,o=t+1;for(;o<e.length&&n>0;)"("===e[o]&&n++,")"===e[o]&&n--,o++;const r=e.slice(t+1,o-1);return{segments:this.parseSegments(r),endIndex:o-1}}parseIdentifier(e,t){let n=t;for(;n<e.length&&/[\w-]/.test(e[n]);)n++;return{name:e.slice(t,n),endIndex:n}}parseLiteral(e,t){let n=t;for(;n<e.length&&!"(:*(".includes(e[n]);)n++;return{value:e.slice(t,n),endIndex:n}}parseQuerySegments(e){let t=e;t.startsWith("(")&&t.endsWith(")")&&(t=t.slice(1,-1));const n=[];let o=0;for(;o<t.length;)if(":"===t[o]){const{name:e,endIndex:r}=this.parseIdentifier(t,o+1);n.push({type:"param",name:e}),o=r}else{const{value:e,endIndex:r}=this.parseQueryLiteral(t,o);e&&n.push({type:"literal",value:e}),o=r}return n}parseQueryLiteral(e,t){let n=t;for(;n<e.length&&":"!==e[n];)n++;return{value:e.slice(t,n),endIndex:n}}getAllParamNames(){const e=new Set,t=n=>{for(const o of n)switch(o.type){case"param":case"splat":e.add(o.name);break;case"optional":t(o.segments)}};return t(this.parsed.pathSegments),t(this.parsed.querySegments),Array.from(e)}canMatchRemainingSegments(e,t,n){let o=t;for(const t of n)if("literal"===t.type){const n=e.indexOf(t.value,o);if(-1===n)return!1;o=n+t.value.length}return!0}match(e){const[t,n]=e.split("?"),o=this.matchPath(t,this.parsed.pathSegments);if(!1===o)return!1;const r=this.matchQuery(n||"",this.parsed.querySegments);if(!1===r)return!1;const s=this.getAllParamNames(),i={};for(const e of s)i[e]=void 0;return Object.assign(i,o,r),i}matchPath(e,t){const n={};let o=0;for(let r=0;r<t.length;r++){const s=t[r],i=t.slice(r+1),a=this.matchSegment(e,o,s,i);if(!1===a)return!1;Object.assign(n,a.params),o=a.nextIndex}return!(o<e.length)&&n}matchSegment(e,t,n,o=[]){switch(n.type){case"literal":return e.slice(t,t+n.value.length)===n.value&&{params:{},nextIndex:t+n.value.length};case"param":{let r=t;const s=o[0];let i,a=["/","?"];if(s&&"literal"===s.type){const n=e.indexOf(s.value,t);if(-1===n)return!1;r=n}else for(;r<e.length&&!a.includes(e[r]);)r++;if(r===t)return!1;try{i=decodeURIComponent(e.slice(t,r))}catch(n){i=e.slice(t,r)}return!(r<e.length&&"?"===e[r]&&o.length>0)&&{params:{[n.name]:i},nextIndex:r}}case"splat":{let r=e.length;const s=o[0];if(s)switch(s.type){case"literal":if("."===s.value){const n=e.indexOf(".",t);-1!==n&&(r=n)}else{const n=e.lastIndexOf(s.value);-1!==n&&n>=t&&(r=n)}break;case"param":let n=-1;for(let o=e.length-1;o>=t;o--)if("/"===e[o]){n=o;break}-1!==n&&(r=n);break;case"splat":let o=-1;for(let n=e.length-1;n>t;n--)if("/"===e[n]){o=n+1;break}if(-1!==o)r=o;else{const n=e.slice(t).split("/").filter(e=>e);r=n.length>1?t+n.slice(0,-1).join("/").length+1:t}break;case"optional":const i=e=>{for(const t of e){if("literal"===t.type)return t.value;if("optional"===t.type){const e=i(t.segments);if(e)return e}}return null},a=i(s.segments);if(a){const n=e.lastIndexOf(a);-1!==n&&n>=t&&(r=n)}}const i=e.indexOf("?",t);let a;-1!==i&&i<r&&(r=i);try{a=decodeURIComponent(e.slice(t,r))}catch(n){a=e.slice(t,r)}return{params:{[n.name]:a},nextIndex:r}}case"optional":{let r=t,s={},i=!0;for(let t=0;t<n.segments.length;t++){const o=n.segments[t],a=n.segments.slice(t+1),c=this.matchSegment(e,r,o,a);if(!1===c){i=!1;break}Object.assign(s,c.params),r=c.nextIndex}return i&&this.canMatchRemainingSegments(e,r,o)?{params:s,nextIndex:r}:{params:{},nextIndex:t}}default:return!1}}findNextLiteral(e){for(const t of e){if("literal"===t.type)return t;if("optional"===t.type){const e=this.findNextLiteral(t.segments);if(e)return e}}return null}matchQuery(e,t){if(0===t.length)return{};const n={};let o=0;for(const r of t)switch(r.type){case"literal":if(e.slice(o,o+r.value.length)!==r.value)return!1;o+=r.value.length;break;case"param":{let t,s=o;for(;s<e.length&&"&"!==e[s];)s++;if(s===o)return!1;try{t=decodeURIComponent(e.slice(o,s))}catch(n){t=e.slice(o,s)}n[r.name]=t,o=s;break}}return n}reverse(e={}){const t=this.reverseSegments(this.parsed.pathSegments,e);if(!1===t)return!1;let n=t;if(this.parsed.querySegments.length>0){const t=this.reverseSegments(this.parsed.querySegments,e);if(!this.parsed.queryOptional&&!1===t)return!1;t&&""!==t&&(n+="?"+t)}return n}reverseSegments(e,t,n=!1){let o="";for(let r=0;r<e.length;r++){const s=e[r],i=e.slice(r+1);switch(s.type){case"literal":o+=s.value;break;case"param":case"splat":if(!(s.name in t))return!1;o+=String(t[s.name]);break;case"optional":if(this.hasAllParams(s.segments,t,n)||this.hasLaterOptionalGroupNeedingParams(i,t,s.segments)){const e=this.reverseSegments(s.segments,t,!0);if(!1===e)return!1;o+=e}}}return o}hasLaterOptionalGroupNeedingParams(e,t,n){for(const o of e)if("optional"===o.type&&this.hasAnyParamInSegments(o.segments,t))return this.hasOnlyLiteralsAndOptionals(n);return!1}hasOnlyLiteralsAndOptionals(e){for(const t of e)if("param"===t.type||"splat"===t.type)return!1;return!0}hasAllParams(e,t,n=!1){let o=!1,r=!1,s=!1,i=!0;for(const n of e)switch(n.type){case"param":case"splat":i=!1,n.name in t&&void 0!==t[n.name]?o=!0:s=!0}const a=n||o&&!s;for(const n of e)"optional"===n.type&&this.hasAllParams(n.segments,t,a)&&(r=!0);return!(!o||s)||!(!r||s)||!(!i||!n)}hasOnlyOptionalMissingParams(e,t){for(const n of e)switch(n.type){case"param":case"splat":if(!(n.name in t))return!1}return!0}hasAnyParamInSegments(e,t){for(const n of e)switch(n.type){case"param":case"splat":if(n.name in t)return!0;break;case"optional":if(this.hasAnyParamInSegments(n.segments,t))return!0}return!1}}function fo(e){const t=e.split("/").filter(Boolean);let n=t.length;for(const e of t)e.startsWith("*")?n+=-2:e.startsWith(":")?n+=3:n+=10;return n}function mo(e){const t={};return e.split(";").forEach(e=>{const n=e.indexOf(":");if(-1===n)return;const o=e.slice(0,n).trim(),r=e.slice(n+1).trim();o&&r&&(t[o]=r)}),t}function po(e,t,n,o){if(e.style.position="absolute",e.style.width="100%",t)return e.style.height="100%",void(e.style.transition=`opacity ${n}ms ease-in-out`);e.style.top="0",e.style.left="0",e.style.transition=`${o} ${n}ms ease-in-out`}function yo(e){if(!ct(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");const t=lt(e);if(0===t.bindings){t.active=!0;try{Nt(e,t.target),dt(e,t.target)}catch(n){throw ft(e),At(e),t.active=!1,n}}t.bindings+=1;let n=!1;return()=>{n||(n=!0,t.bindings=Math.max(0,t.bindings-1),0===t.bindings&&(ft(e),At(e),Un(e),t.active=!1,t.target=new EventTarget))}}function go(e,t,n,o){const r=function(e,t,n,o){if(!e||"function"!=typeof e.addEventListener||"function"!=typeof e.removeEventListener)throw new TypeError("provideContext() requires an EventTarget root.");if(!t||"object"!=typeof t)throw new TypeError("provideContext() requires an application context object.");if(st.has(e))throw new Error("This root already provides an application context. Release it before providing another.");const r=e=>{const r=e;if(r.detail){if("application"===r.detail.kind){if(void 0!==r.detail.context)return;r.detail.context=t}else if("fetch"===r.detail.kind){if(!n||void 0!==r.detail.fetch)return;r.detail.fetch=n}else{if("navigation"!==r.detail.kind)return;if(!o||void 0!==r.detail.navigation)return;r.detail.navigation=o}r.preventDefault(),r.stopPropagation()}};e.addEventListener(rt,r),st.set(e,{listener:r});let s=!1;return()=>{if(s)return;s=!0;const t=st.get(e);t?.listener===r&&(e.removeEventListener(rt,r),st.delete(e))}}(e,t,n.fetch,o);let s;try{s=function(e){const t=e.daemons;if(void 0===t)return()=>{};if(!t||"object"!=typeof t||Array.isArray(t))throw new TypeError("AppContext.daemons must be a readonly record of named @daemon instances.");const n=[],o=new Set;try{for(const[e,r]of Object.entries(t)){if(!e.trim())throw new TypeError("AppContext.daemons keys must be non-empty strings.");if(!r||"object"!=typeof r)throw new TypeError(`AppContext.daemons["${e}"] must be an instance of an @daemon class.`);o.has(r)||(o.add(r),n.push(yo(r)))}}catch(e){for(const e of n.reverse())e();throw e}return()=>{for(const e of n.reverse())e()}}(t)}catch(e){throw r(),e}let i=!1;return()=>{i||(i=!0,r(),s?.())}}const vo=new WeakMap;var bo;!function(e){e.SUCCESS="success",e.GUARDS_FAILED="guards-failed",e.NOT_FOUND="not-found"}(bo||(bo={}));let wo=!1;async function Eo(e,t=500){if(customElements.get(e))return;let n=null;wo||(n=setTimeout(()=>{console.warn(`Custom element <${e}> is taking longer than ${t}ms to register. This may indicate a missing import or circular dependency. Set DISABLE_ELEMENT_READY_WARNINGS=true to disable this warning.`)},t));try{await customElements.whenDefined(e)}finally{n&&clearTimeout(n)}}async function No(e,t=500){const n=e.tagName.toLowerCase();await Eo(n,t),"ready"in e&&"function"==typeof e.ready?.then&&await e.ready}let Ao=0,So=null;const To=Symbol.for("snice:body-scroll-lock");var Co;return globalThis[To]={clear(){Ao=0,So=null}},"undefined"!=typeof document&&jt(),globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map,function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(Co||(Co={})),e.Context=Ie,e.ContextAwareFetcher=class{constructor(){this.requestMiddlewares=[],this.responseMiddlewares=[]}use(e,t){"request"!==e?this.responseMiddlewares.push(t):this.requestMiddlewares.push(t)}create(e){const t=this.requestMiddlewares,n=this.responseMiddlewares;return async function(e,o){const r=new Request(e,o);let s=0;const i=async()=>{if(s<t.length)return t[s++].call(this,r,i);const e=await fetch(r);let o=0;const a=async()=>o<n.length?n[o++].call(this,e,a):e;return a()};return i()}.bind(e)}},e.IS_CONTROLLER_INSTANCE=r,e.Router=function(t){const n=t.window??window,o=t.document??document,r=[];let s,i,a,c=0,l=!1,h=[],u=null,d=null;const f=t.context||{};let m=null,p=null;const y=new Ie(f,[],"",{},t.fetcher);function g(e){if(m===e&&p&&vo.get(e)===p)return;p?.(),vo.get(e)?.();const t=go(e,(n=y).application,{fetch:n.fetch},n);var n;let o=!1;const r=()=>{o||(o=!0,t(),vo.get(e)===r&&vo.delete(e))};p=r,m=e,vo.set(e,r)}function v(e){if(!u||!d)return null;const t=e.querySelectorAll(u);for(const e of t)if(e[W]===d)return e;return null}function b(e,t,n,o,h,u,d=0){if(!Number.isFinite(d))throw new TypeError(`Route order for "${e}" must be a finite number.`);switch(r.push({route:new uo(e),tag:t,transition:n,guards:o,layout:h,placard:u,order:d,registrationOrder:c++}),l=!1,e){case"/404":s=t;break;case"/403":i=t;break;case"/":a=t}}function w(){const e=new Set;h=r.filter(e=>e.placard).map(e=>{const t=e.placard;return"function"==typeof t?t(f):t}).filter(t=>!e.has(t.name)&&(e.add(t.name),!0))}function E(e,t,n){y[ve](f,h,t,n)}function N(){switch(t.type){case"hash":return n.location.hash.slice(1);case"pushstate":return`${n.location.pathname}${n.location.search}`}}function A(e){let t;if(i)t=o.createElement(i),t[B]=f;else{const e=o.createElement("div");e.className="default-403",e.innerHTML="<h1>403</h1><p>Unauthorized</p>",t=e}e.innerHTML="",e.appendChild(t),u=null,d=null}async function S(e,t,n,r){if(!e)return!0;const s=Array.isArray(e)?e:[e];let i=null,a=null;a=setTimeout(()=>{r&&r()||(i=function(){const e=o.createElement("div");return e.setAttribute("data-snice-loading",""),e.innerHTML='\n <style>@keyframes snice-spin{to{transform:rotate(360deg)}}</style>\n <div style="display:flex;align-items:center;justify-content:center;height:100%;min-height:200px">\n <div style="width:32px;height:32px;border:3px solid rgba(128,128,128,0.3);border-top-color:rgba(128,128,128,0.8);border-radius:50%;animation:snice-spin 0.6s linear infinite"></div>\n </div>',e}(),n.appendChild(i))},50);try{for(const e of s)if(!await e(f,t))return r&&r()||A(n),!1;return!0}finally{a&&clearTimeout(a),i&&i.remove()}}async function T(e,n,r,s,i,a,c){const l=!1===(m=s)?null:m||(t.layout?t.layout:null);var m;const{element:p,needsNewLayout:y}=function(e){if(e===u)return{element:null,needsNewLayout:!1};if(u=e,e){const t=Date.now();d=t;const n=o.createElement(e);return n[B]=f,n[W]=t,{element:n,needsNewLayout:!0}}return d=null,{element:null,needsNewLayout:!0}}(l),g=r||t.transition;if(null!==p||null!==v(e)){if(await async function(e,t,n,o,r,s,i,a){const c=o||v(e);if(!c)return;!function(e,t,n){"function"==typeof e.update&&e.update(f,h,t,n)}(c,s,i);const l=c.querySelector('[slot="page"]');if(n&&l){if(t.setAttribute("slot","page"),await x(c,l,t,n),a&&a())return;r&&(e.innerHTML="",e.appendChild(c))}else a&&a()||(c.querySelectorAll('[slot="page"]').forEach(e=>e.remove()),t.setAttribute("slot","page"),c.appendChild(t),r&&(e.innerHTML="",e.appendChild(c)))}(e,n,g,p,y,i,a,c),c&&c())return;E(0,i,a)}else await async function(e,t,n,o){const r=e.children[0];n&&r?await x(e,r,t,n):o&&o()||(e.innerHTML="",e.appendChild(t))}(e,n,g,c),c&&c()||E(0,i,a)}let C=0;async function _(e){const i=o.querySelector(t.target);if(!i)throw new Error(`Target element not found: ${t.target}`);g(i);const c=++C,l=()=>c!==C;if(w(),n.scrollTo(0,0),(""===e?.trim()||"/"===e)&&a){const t=r.find(e=>e.route.match("/"));if(!await S(t?.guards,{},i,l))return;if(l())return;const{element:s,transition:c,layout:h}=function(){const e=o.createElement(a);e[B]=f;const t=n.customElements.get(a),s=t?.[F],i=r.find(e=>e.route.match("/"));return{element:e,transition:s,layout:i?.layout}}();return void await T(i,s,c,h,e,{},l)}if(!e)return;const h=await async function(e,t,n){for(const s of r){const r=s.route.match(e);if(!1===r)continue;if(!await S(s.guards,r,t,n))return{result:bo.GUARDS_FAILED};const i=o.createElement(s.tag);i[B]=f,i[le]=y;const a=r;return Object.keys(a).forEach(e=>i.setAttribute(e,a[e])),{result:bo.SUCCESS,element:i,transition:s.transition,layout:s.layout,routeParams:a}}return{result:bo.NOT_FOUND}}(e,i,l);if(l())return;if(h.result===bo.GUARDS_FAILED)return;if(h.result===bo.SUCCESS){const{element:t,transition:n,layout:o,routeParams:r={}}=h;return void await T(i,t,n,o,e,r,l)}const{element:u,transition:d,layout:m}=function(){if(s){const e=o.createElement(s);e[B]=f;const t=n.customElements.get(s),r=t?.[F];return{element:e,transition:r,layout:void 0}}const e=o.createElement("div");return e.className="default-404",e.innerHTML="<h1>404</h1><p>Page not found</p>",{element:e,transition:void 0,layout:void 0}}();await T(i,u,d,m,e,{},l)}async function x(t,n,o,r,s=C){return async function(t,n,o,r={},s=()=>!1){const i=r.outDuration??300,a=r.inDuration??300,c=r.mode||"sequential",l=r.out?mo(r.out):{opacity:"0"},h={opacity:"0"},u=r.in?mo(r.in):{opacity:"1"},d=t.style,f=t.tagName.includes("-")&&t.shadowRoot,m=Symbol.for("snice:transition-original-position"),p=Symbol.for("snice:transition-count"),y=t;f||(m in y||(y[m]=d.position,y[p]=0),y[p]++,d.position="relative");const g=()=>{f||(y[p]--,y[p]<=0&&(d.position=y[m],delete y[m],delete y[p]))},v=n.hasAttribute("slot")||o.hasAttribute("slot");switch(po(n,v,i,"all"),po(o,v,a,"all"),Object.assign(o.style,h),t.appendChild(o),c){case e.TransitionMode.SIMULTANEOUS:Object.assign(n.style,l),Object.assign(o.style,u),await new Promise(e=>setTimeout(e,Math.max(i,a)));break;case e.TransitionMode.SEQUENTIAL:if(Object.assign(n.style,l),await new Promise(e=>setTimeout(e,i)),s())return o.parentNode===t&&o.remove(),void g();Object.assign(o.style,u),await new Promise(e=>setTimeout(e,a))}if(s())return o.parentNode===t&&o.remove(),void g();n.remove(),function(e,t){e.style.position="",e.style.width="",e.style.transition="",t?e.style.height="":(e.style.top="",e.style.left="")}(o,v),Object.keys({...h,...u}).forEach(e=>{o.style[e]=""}),g()}(t,n,o,r,()=>s!==C)}return{page:function(e){return function(t,o){if(o?.metadata&&o.metadata[L]){t[L]||(t[L]=new Map);for(const[e,n]of o.metadata[L])t[L].set(e,n)}Zn(t),t[F]=e.transition;const r=t.prototype.connectedCallback;t.prototype.connectedCallback=function(){this[le]=y,r?.call(this)};const s=t.prototype.disconnectedCallback;return t.prototype.disconnectedCallback=function(){s?.call(this),delete this[B],delete this[le]},n.customElements.get(e.tag)||n.customElements.define(e.tag,t),e.routes.forEach(t=>{b("string"==typeof t?t:t.path,e.tag,e.transition,e.guards,e.layout,e.placard,"string"==typeof t?void 0:t.order)}),t}},initialize:function(){const e=o.querySelector(t.target);if(!e)throw new Error(`Target element not found: ${t.target}`);g(e),!l&&(r.sort((e,t)=>fo(t.route.spec)-fo(e.route.spec)||e.order-t.order||e.registrationOrder-t.registrationOrder),l=!0),w(),function(){const e=()=>{const e=o.querySelector(t.target);if(e&&(m!==e||!p||vo.get(e)===p))return m!==e&&st.has(e)?(p?.(),p=null,void(m=null)):void _(N())};switch(t.type){case"hash":n.addEventListener("hashchange",e);break;case"pushstate":n.addEventListener("popstate",e)}}(),_(N())},navigate:async function(e){const o=function(e){const t=e.trim().replace(/^#/,"");return t?t.startsWith("/")?t:`/${t}`:"/"}(e);!function(e){switch(t.type){case"hash":{const t=`#${e}`;n.location.hash!==t&&n.history.pushState(null,"",t);break}case"pushstate":`${n.location.pathname}${n.location.search}`!==e&&n.history.pushState(null,"",e)}}(o),await _(o)},register:b}},e.SimpleArray=Le,e.SniceElement=ho,e.adopted=lo,e.applyElementFunctionality=Zn,e.attachController=Lt,e.classMap=function(e){let t="";for(const n of Object.keys(e))e[n]&&(t+=(t?" ":"")+n);return t},e.clearDebounceTimers=Jn,e.clearMemoizeCache=function(e,t){e[Qn]&&(t?delete e[Qn][t]:e[Qn]={})},e.clearThrottleTimers=Xn,e.context=function(e={}){return function(t,n){const o=n.name;return n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,be)||(n[be]=new Set),!n[be].has(t)){if(n[be].add(t),!Object.prototype.hasOwnProperty.call(n,St)){const e=n[St];n[St]=e?[...e]:[]}n[St].push({methodName:o,method:t,options:e})}}),t}},e.contextProperty=function(){return function(e,t){const n=t.name;return function(e){return Object.hasOwn(this.constructor.prototype,n)||Object.defineProperty(this.constructor.prototype,n,{get(){if(void 0!==this[B])return this[B];const e=at(this);return void 0!==e?e:void 0},set(){},configurable:!0,enumerable:!0}),e}}},e.controller=function(e){return function(n,r){const s=globalThis.snice?.controllerRegistry;if(!s)throw new Error("Snice global registry not initialized");s.set(e,n),n.prototype[o]=!0,Object.defineProperty(n,_,{value:e,configurable:!0});const i=t.pendingControllerAttachments.get(e);return i&&(t.pendingControllerAttachments.delete(e),queueMicrotask(()=>{for(const t of i){const n=t[C];(void 0===n?t[w]:n)===e&&Lt(t,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e}":`,t)})}})),n}},e.createRequestHandler=function(e,t,n){const o=[];for(const[r,s]of Object.entries(t)){const t=`@request/${r}`,i=e=>{const t=e,{discovery:o,data:i,payload:a}=t.detail;n?.passive||(t.preventDefault(),t.stopImmediatePropagation(),t.stopPropagation()),o.resolve(),Promise.resolve().then(()=>s(a)).then(e=>i.resolve(e)).catch(e=>{i.reject(e),console.error(`createRequestHandler: error in "${r}" handler:`,e)})};e.addEventListener(t,i),o.push(()=>e.removeEventListener(t,i))}return()=>{for(const e of o)e();o.length=0}},e.css=function(e,...t){const n=0===t.length?Dt.get(e):void 0;if(n)return n;let o=e[0];for(let n=0;n<t.length;n++){const r=t[n];o+=(Vt(r)?r.cssText:String(r))+e[n+1]}const r={_$litType$:Rt,cssText:o};if("undefined"!=typeof CSSStyleSheet&&"undefined"!=typeof Document&&"adoptedStyleSheets"in Document.prototype)try{const e=new CSSStyleSheet;e.replaceSync(o),r.styleSheet=e}catch(e){}return 0===t.length&&Dt.set(e,r),r},e.daemon=function(e,t){Object.defineProperty(e.prototype,s,{value:!0,configurable:!0})},e.debounce=function(e=300,t={}){const{leading:n=!1,trailing:o=!0,maxWait:r}=t;return function(t,s){const i=s.name;return function(...s){this[Hn]||(this[Hn]={});const a=this[Hn],c=i;a[c]&&clearTimeout(a[c].timeout);const l=Date.now(),h=!a[c],u=h?l:a[c].startTime,d=void 0!==r&&l-u>=r;if(n&&h){const e=t.apply(this,s);return a[c]={timeout:null,startTime:u,lastArgs:s},e}const f=setTimeout(()=>{(o||d)&&t.apply(this,a[c].lastArgs),delete a[c]},d?0:e);a[c]={timeout:f,startTime:u,lastArgs:s}}}},e.detachController=Pt,e.dispatch=function(e,t){return function(n,o){return function(...r){this[Z]||(this[Z]=new Map);const s=`${e}_${o.name}`;this[Z].has(s)||this[Z].set(s,{debounceTimeout:null,throttleLastCall:0,throttleTimeout:null});const i=this[Z].get(s),a=n.apply(this,r),c=n=>{if(void 0===n&&!1===t?.dispatchOnUndefined)return;const o=new CustomEvent(e,{bubbles:t?.bubbles??!0,cancelable:t?.cancelable??!1,composed:t?.composed??!0,detail:n});if(void 0!==t?.scope&&void 0!==t?.daemon)throw new TypeError(`@dispatch('${e}') cannot use both scope and daemon.`);if(void 0!==t?.daemon)return void ht(this,t.daemon).dispatchEvent(o);if(void 0!==t?.scope){const n=Ge(this,t.scope);return n?void n.dispatchEvent(o):void console.warn(`[snice/@dispatch] scope did not resolve for "${e}" — event not dispatched.`)}const r=ut(this);if(!r)throw new TypeError(`@dispatch('${e}') requires an element, attached controller, or provided @daemon instance.`);r.dispatchEvent(o)},l=e=>{if(t?.debounce)return clearTimeout(i.debounceTimeout),void(i.debounceTimeout=setTimeout(()=>c(e),t.debounce));if(!t?.throttle)return void c(e);const n=Date.now(),o=t.throttle-(n-i.throttleLastCall);if(o<=0)return clearTimeout(i.throttleTimeout),i.throttleLastCall=n,void c(e);i.latestDetail=e,i.throttleTimeout||(i.throttleTimeout=setTimeout(()=>{i.throttleLastCall=Date.now(),i.throttleTimeout=null;const e=i.latestDetail;i.latestDetail=void 0,c(e)},o))};return a instanceof Promise?a.then(e=>(l(e),e)):(l(a),a)}}},e.dispose=function(){return function(e,t){so(U,Te,e,t)}},e.element=function(e,t){if(void 0!==t?.renderRoot&&"shadow"!==t.renderRoot&&"light"!==t.renderRoot)throw new TypeError('snice: @element renderRoot must be "shadow" or "light".');if(void 0!==t?.shadow&&!1!==t.shadow&&"open"!==t.shadow&&"closed"!==t.shadow)throw new TypeError('snice: @element shadow must be "open", "closed", or false.');return function(n,o){return eo(e,n,o,t)}},e.escapeAttr=function(e){return String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")},e.escapeHtml=function(e){return String(e??"").replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},e.getBodyScrollLockCount=function(){return Ao},e.getContext=at,e.getContextFetch=function(e){const t=it(e);if(!t)return;const n={kind:"fetch"};return t.dispatchEvent(new CustomEvent(rt,{bubbles:!0,composed:!0,cancelable:!0,detail:n})),n.fetch},e.getController=function(e){return e[N]},e.getSymbol=n,e.html=function(e,...t){return{_$litType$:Mt,strings:e,values:t}},e.isSafeUrl=function(e,t={}){let n;try{n=String(e??"")}catch{return!1}if(!n||/[\u0000-\u001f\u007f]/.test(n))return!1;const o=n.trim();if(!o)return!1;const r=t.allowed??["http:","https:","mailto:","tel:"];try{const e=new URL(o,"http://__snice-relative.invalid/"),t=/^[a-z][a-z\d+.-]*:/i.test(o),n=/^[\\/]{2}/.test(o);return!t&&!n||r.some(t=>"string"==typeof t&&t.toLowerCase()===e.protocol)}catch{return!1}},e.layout=function(e){return function(t,n){return eo(e,t,n)}},e.live=function(e){return{_$liveMarker$:nn,value:e}},e.lockBodyScroll=function(){0===Ao&&(So=document.body.style.overflow,document.body.style.overflow="hidden"),Ao++},e.memoize=function(e={}){const{keyGenerator:t=(...e)=>JSON.stringify(e),maxSize:n=100,ttl:o}=e;return function(e,r){const s=r.name;return function(...r){this[Qn]||(this[Qn]={}),this[Qn][s]||(this[Qn][s]=new Map);const i=this[Qn][s],a=t(...r);if(i.has(a)){const e=i.get(a);if(!(void 0!==o&&Date.now()-e.timestamp>o))return e.value;i.delete(a)}const c=e.apply(this,r);if(i.set(a,{value:c,timestamp:Date.now()}),i.size>n){const e=i.keys().next().value;i.delete(e)}return c}}},e.moved=co,e.noChange=tn,e.nothing=qt,e.observe=function(e,t,n){let o,r;return"string"==typeof t?(o=t,r=n):(o=void 0,r=t),function(t,n){const s=n.name;n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,Ee)||(n[Ee]=new Set),n[Ee].has(t))return;if(n[Ee].add(t),!Object.prototype.hasOwnProperty.call(n,Q)){const e=n[Q];n[Q]=e?[...e]:[]}const i=Array.isArray(e)?e:[e];for(const e of i){const[i,...a]=e.split(":"),c=a.join(":");n[Q].push({type:i,target:c,selector:o,methodName:s,method:t,options:r})}})}},e.on=function(e,t,n){let o=null,r={};return"string"==typeof t?(o=t,r=n||{}):t&&"object"==typeof t?r=t:null===t&&n&&(r=n),function(t,n){const s=n.name;return n.addInitializer(function(){const n=this.constructor,i=Array.isArray(e)?e:[e],a=`${s}::${i.join(",")}::${o??""}::daemon:${r.daemon??""}`;if(Object.prototype.hasOwnProperty.call(n,Ne)||(n[Ne]=new Set),!n[Ne].has(a)){if(n[Ne].add(a),!Object.prototype.hasOwnProperty.call(n,bt)){const e=n[bt];n[bt]=e?[...e]:[]}for(const e of i)n[bt].push({eventName:e,selector:o,methodName:s,method:t,options:r})}}),t}},e.once=function(e=!0){let t,n=!1;return function(o,r){const s=r.name;return function(...r){return e?(this[Gn]||(this[Gn]={}),this[Gn][s]||(this[Gn][s]={called:!0,result:o.apply(this,r)}),this[Gn][s].result):(n||(n=!0,t=o.apply(this,r)),t)}}},e.parseDuration=function(e){const t=String(e).trim(),n=parseFloat(t);let o;return o=isNaN(n)?0:/ms$/i.test(t)?n:/s$/i.test(t)?1e3*n:/m$/i.test(t)?6e4*n:/h$/i.test(t)?36e5*n:n,{milliseconds:()=>o,seconds:()=>o/1e3,minutes:()=>o/6e4}},e.property=oo,e.provideContext=function(e,t,n={}){return go(e,t,n)},e.query=function(e,t={}){return function(n,o){const{light:r=!1,shadow:s=!0}=t,i=o.name;return function(t){return Object.hasOwn(this.constructor.prototype,i)||Object.defineProperty(this.constructor.prototype,i,{get(){const t=ro(this);let n=null;const o=t instanceof HTMLElement?Ut(t):null;return s&&o?n=o.querySelector(e):s&&t.shadowRoot&&(n=t.shadowRoot.querySelector(e)),!n&&r&&(n=t.querySelector(e)),n||null},set(){},configurable:!0,enumerable:!0}),t}}},e.queryAll=function(e,t={}){return function(n,o){const{light:r=!1,shadow:s=!0}=t,i=o.name;return function(t){return Object.hasOwn(this.constructor.prototype,i)||Object.defineProperty(this.constructor.prototype,i,{get(){const t=ro(this),n=new Set,o=t instanceof HTMLElement?Ut(t):null;if(s&&o)for(const t of o.querySelectorAll(e))n.add(t);else if(s&&t.shadowRoot)for(const o of t.shadowRoot.querySelectorAll(e))n.add(o);if(r)for(const o of t.querySelectorAll(e))n.add(o);return[...n]},set(){},configurable:!0,enumerable:!0}),t}}},e.ready=function(){return function(e,t){so(z,Se,e,t)}},e.reconnect=function(){return function(e,t){so(H,Ce,e,t)}},e.render=function(e={}){return function(t,n){return n.addInitializer(function(){this[ee]=t,this[te]=e}),function(...n){const o=t.apply(this,n);return Fn(this,{...this[te]||e,once:!1},o),o}}},e.repeat=function(e,t){if(!t||"function"!=typeof t.key||"function"!=typeof t.render)throw new TypeError("snice: repeat() requires { key, render }.");const n=null==e?[]:Array.from(e),o=n.map(t.key),r=new Set;for(const e of o){if(r.has(e))throw new Error(`snice: repeat() received duplicate key ${String(e)}.`);r.add(e)}return{_$repeat$:Wt,items:n,keys:o,values:n.map(t.render),empty:0===n.length?"function"==typeof t.empty?t.empty():t.empty:void 0}},e.request=function(e,t){return function(n,o){let r,s,i=0;const a=[];return async function(...o){const c=async()=>{const r=t?.timeout??12e4,s=t?.discoveryTimeout??50,i=void 0!==t?.daemon?ht(this,t.daemon):ut(this);if(!i)throw new TypeError(`@request('${e}') requires an element, attached controller, or provided @daemon instance.`);const a=n.apply(this,o),{value:c,done:l}=await a.next();if(l)return c;let h,u;const d=new Promise((e,t)=>{h=e,u=t});let f,m,p,y=!1;const g=new Promise((t,n)=>{f=t,m=n,p=setTimeout(()=>{n(new Error(`Request "${e}" found no @respond('${e}') handler within ${s}ms — attach a responding controller/element, or pass { optional: true } to resolve undefined when unhandled.`))},s)}),v=new CustomEvent(`@request/${e}`,{bubbles:void 0===t?.bubbles||t.bubbles,cancelable:t?.cancelable||!1,composed:!0,detail:{payload:c,discovery:{resolve:()=>{y=!0,clearTimeout(p),f()},reject:m},data:{resolve:h,reject:u}}});i.dispatchEvent(v);try{await g;const t=setTimeout(()=>{u(new Error(`Request "${e}" timed out after ${r}ms`))},r),n=await d;clearTimeout(t);const{value:o}=await a.next(n);return o}catch(e){if(t?.optional&&!y){const{value:e}=await a.next(void 0);return e}const{value:n}=await a.throw(e);return n}};if(t?.debounce)return new Promise((e,n)=>{clearTimeout(r),r=setTimeout(async()=>{try{e(await c())}catch(e){n(e)}},t.debounce)});if(!t?.throttle)return c();const l=Date.now(),h=t.throttle-(l-i);if(h<=0){clearTimeout(s),s=null,i=l;const e=a.splice(0),t=c();return e.length&&t.then(t=>{for(const n of e)n.resolve(t)},t=>{for(const n of e)n.reject(t)}),t}return new Promise(s?(e,t)=>{a.push({resolve:e,reject:t})}:(e,t)=>{a.push({resolve:e,reject:t}),s=setTimeout(async()=>{i=Date.now(),s=null;const e=a.splice(0);try{const t=await c();for(const n of e)n.resolve(t)}catch(t){for(const n of e)n.reject(t)}},h)})}}},e.resetOnce=function(e,t){e[Gn]&&(t?delete e[Gn][t]:e[Gn]={})},e.respond=function(e,t){return function(n,o){const r=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,Ae)||(o[Ae]=new Set),!o[Ae].has(n)){if(o[Ae].add(n),!Object.prototype.hasOwnProperty.call(o,c)){const e=o[c];o[c]=e?[...e]:[]}o[c].push({channelName:e,methodName:r,method:n,options:t})}})}},e.setDisableElementReadyWarnings=function(e){wo=e},e.setStrictRenderErrors=function(e){Mn=e},e.state=function(e={}){return oo({...e,attribute:!1,reflect:!1})},e.styleMap=function(e){const t=[];for(const n of Object.keys(e)){const o=e[n];if(null==o||!1===o)continue;const r=n.startsWith("--")?n:n.replace(/[A-Z]/g,e=>"-"+e.toLowerCase());t.push(`${r}: ${o}`)}return t.join("; ")},e.styles=function(){return function(e,t){return t.addInitializer(function(){this[se]&&!this[ae]?this[ae]=[this[se]]:this[se]&&this[ae]&&this[ae].push(this[se]),this[se]=e}),e}},e.svg=function(e,...t){return{_$litType$:Mt,strings:e,values:t,svg:!0}},e.throttle=function(e=300,t={}){const{leading:n=!0,trailing:o=!0}=t;return function(t,r){const s=r.name;return function(...r){this[Kn]||(this[Kn]={});const i=this[Kn],a=s,c=Date.now();if(!i[a])return n&&t.apply(this,r),i[a]={lastInvoke:c,timeout:null,lastArgs:r},void(o&&!n&&(i[a].timeout=setTimeout(()=>{t.apply(this,i[a].lastArgs),delete i[a]},e)));const l=c-i[a].lastInvoke;if(i[a].lastArgs=r,i[a].timeout&&clearTimeout(i[a].timeout),l>=e)return t.apply(this,r),void(i[a].lastInvoke=c);o&&(i[a].timeout=setTimeout(()=>{t.apply(this,i[a].lastArgs),i[a].lastInvoke=Date.now(),i[a].timeout=null},e-l))}}},e.trackRenders=async function*(e){for(;;)await new Promise(t=>{e[re]||(e[re]=[]),e[re].push(t)}),yield},e.unlockBodyScroll=function(){0!==Ao&&(Ao--,0===Ao&&(document.body.style.overflow=So??"",So=null))},e.unsafeHTML=function(e){return{_$litType$:Bt,html:e}},e.useNativeElementControllers=jt,e.waitForAllCustomElements=async function(e,t=500){const n=[];e instanceof Element&&(e.tagName.includes("-")&&n.push(e),e.shadowRoot)&&e.shadowRoot.querySelectorAll("*").forEach(e=>{e.tagName.includes("-")&&n.push(e)}),e instanceof DocumentFragment&&e.querySelectorAll("*").forEach(e=>{e.tagName.includes("-")&&n.push(e)}),await Promise.all(n.map(e=>No(e,t)))},e.waitForElementDefined=Eo,e.waitForElementReady=No,e.watch=function(...e){const t=e.filter(e=>"string"==typeof e),n=e.find(e=>"object"==typeof e&&null!==e),o=!1!==n?.immediate;return function(e,n){const r=n.name;n.addInitializer(function(){const n=this.constructor;Object.prototype.hasOwnProperty.call(n,we)||(n[we]=new Map);let s=n[we].get(e);if(s||(s=new Set,n[we].set(e,s)),!Object.prototype.hasOwnProperty.call(n,V)){const e=n[V],t=new Map;if(e)for(const[n,o]of e)t.set(n,[...o]);n[V]=t}for(const i of t)s.has(i)||(s.add(i),n[V].has(i)||n[V].set(i,[]),n[V].get(i).push({methodName:r,method:e,immediate:o}))})}},e}({});
2
2
  //# sourceMappingURL=snice-runtime.min.js.map