snice 7.1.0 → 7.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -0
- package/adapters/react/SniceProvider.js +1 -1
- package/adapters/react/SniceRouter.js +1 -1
- package/adapters/react/matchRoute.js +1 -1
- package/adapters/react/useRequestHandler.js +1 -1
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/binpack/snice-binpack.js +1 -1
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/button/snice-button.js +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/grid/snice-grid.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/popover/snice-popover.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +114 -15
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +114 -15
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/table/snice-table.esm.js +1 -1
- package/dist/cdn/table/snice-table.js +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tag/snice-tag.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/toast/snice-toast.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/controller.d.ts +5 -0
- package/dist/index.cjs +111 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +111 -12
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +111 -12
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +2 -2
- package/dist/react/SniceProvider.js +1 -1
- package/dist/react/SniceRouter.js +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/matchRoute.js +1 -1
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/symbols.cjs +9 -1
- package/dist/symbols.cjs.map +1 -1
- package/dist/symbols.d.ts +2 -0
- package/dist/symbols.esm.js +8 -2
- package/dist/symbols.esm.js.map +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/architecture.md +1 -1
- package/docs/ai/bindings.md +1 -1
- package/docs/ai/controllers.md +1 -1
- package/docs/ai/decorators.md +1 -1
- package/docs/ai/patterns.md +4 -3
- package/docs/bindings.md +1 -1
- package/docs/controllers.md +8 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map;const e=globalThis.snice;function t(e){return Symbol.for(`snice:${e}`)}const n=t("is-controller-class"),o=t("is-controller-instance"),r=t("is-daemon-class"),s=t("is-daemon-instance"),i=t("is-element-class"),a=t("channel-handlers"),c=t("daemon-state"),l=t("ready-promise"),h=t("ready-resolve"),u=t("rendered-promise"),d=t("rendered-resolve"),f=t("pending-reconnect-render"),m=t("render-depth"),p=t("render-root"),y=t("element-options"),g=t("controller"),v=t("initialized"),b=t("controller-key"),w=t("controller-name"),E=t("controller-id"),N=t("controller-operations"),A=t("native-controller"),T=t("direct-controller"),S=t("pending-controller-binding"),_=t("cleanup"),x=t("properties"),C=t("property-values"),O=t("property-defaults"),k=t("property-wrappers"),$=t("pre-init-property-values"),L=t("pre-upgrade-property-bindings"),P=t("properties-initialized"),j=t("property-watchers"),M=t("explicitly-set-properties"),R=t("router-context"),I=t("page-transition"),D=t("created-at"),V=t("ready-handlers"),q=t("dispose-handlers"),B=t("reconnect-handlers"),F=t("moved-handlers"),W=t("adopted-handlers"),z=t("observers"),U=t("setting-from-property"),H=t("moved-timers"),K=t("adopted-timers"),G=t("dispatch-timers"),Q=t("render-method"),J=t("render-options"),X=t("render-instance"),Y=t("render-timers"),Z=t("render-callbacks"),ee=t("styles-method"),te=t("styles-applied"),ne=t("parent-styles-methods"),oe=t("snice-element-base"),re=t("context-handler"),se=t("navigation-context-instance"),ie=t("registered-elements"),ae=t("is-updating"),ce=t("context-register"),le=t("context-unregister"),he=t("context-notify-element"),ue=t("context-timer"),de=t("context-called"),fe=t("context-update"),me=t("context-methods"),pe=t("watch-methods"),ye=t("observe-methods"),ge=t("on-methods"),ve=t("respond-methods"),be=t("ready-methods"),we=t("dispose-methods"),Ee=t("reconnect-methods"),Ne=t("moved-methods"),Ae=t("adopted-methods"),Te=t("controller-abort"),Se=t("controller-attached"),_e=t("property-definers");class xe{static{this.SEPARATOR=","}static serialize(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){if(e.includes(xe.SEPARATOR))throw new Error(`SimpleArray strings cannot contain the character "${xe.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(xe.SEPARATOR):""}static parse(e){return null==e||""===e?[]:e.split(xe.SEPARATOR).map(e=>{if(/^-?\d+\.?\d*$/.test(e)){const t=Number(e);if(!isNaN(t))return t}return"true"===e||"false"!==e&&e})}}var Ce,Oe,ke,$e;!function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(Ce||(Ce={}));const Le=Symbol.for("snice:registered-elements-set");let Pe=0;class je{constructor(e={},t=[],n="",o={},r){if(this[Oe]=new WeakMap,this[ke]=new Set,this[$e]=!1,this.id=Pe++,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)}}[(Oe=ie,ke=Le,$e=ae,ce)](e,t){const n=this[ie];let o=n.get(e);o||(o=new Set,n.set(e,o)),o.add(t),this[Le].add(e)}[le](e,t){const n=this[ie];if(void 0!==t){const o=n.get(e);if(!o)return;if(o.delete(t),o.size>0)return}n.delete(e),this[Le].delete(e)}[fe](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[ae])return;this[ae]=!0;const e=this[Le],t=this[ie];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[ae]=!1}[he](e){const t=this[ie].get(e);if(t)for(const n of t)"function"==typeof e[n]&&e[n](this)}}function Me(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 Re(e,t,n,o){const r=t.type||Me(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 xe:return xe.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 Ie(e,t){return e!==t&&(e==e||t==t)}function De(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 Ve(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function qe(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function Be(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}}function Fe(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}}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[j];if(!s)return;const i=[n],a=t[x]?.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===xe&&Array.isArray(e)&&0===e.length)return null;if(t.converter?.toAttribute)return t.converter.toAttribute(e,t.type);switch(t.type||Me(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 xe:return Array.isArray(e)?xe.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,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,ye)||(n[ye]=new Set),n[ye].has(t))return;if(n[ye].add(t),!Object.prototype.hasOwnProperty.call(n,z)){const e=n[z];n[z]=e?[...e]:[]}const i=Array.isArray(e)?e:[e];for(const e of i){const[i,...a]=e.split(":"),c=a.join(":");n[z].push({type:i,target:c,selector:o,methodName:s,method:t,options:r})}})}}function Ze(e,t){const n=e.constructor[z];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":et(e,t,o,r);break;case"resize":tt(e,t,o,r);break;case"media":nt(e,0,o,r);break;case"mutation":ot(e,t,o,r);break;default:console.warn(`Unknown observer type: ${o.type}`)}}}}function et(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 tt(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 nt(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 ot(e,t,n,r){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 r(e);const o=n.options.maxDepth,s=t.shadowRoot||t,i=e.filter(e=>{let t=0,n=e.target;for(;n&&n!==s&&t<o;)n=n.parentNode,t++;return t<o});i.length>0&&r(i)}catch(e){console.error(`Error in mutation observer ${n.methodName}:`,e)}}),u=!0===e[o];(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 rt(e){if(e[_]?.observers){for(const t of e[_].observers)t();e[_].observers=[]}}const st="@context/request",it=new WeakMap;function at(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[o]?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(st,{bubbles:!0,composed:!0,cancelable:!0,detail:e})),void 0!==e.context)return e.context}const n=e;return void 0!==n[R]?n[R]:!0===n[o]&&void 0!==n.element?.[R]?n.element[R]:void 0}function ct(e){return!!e&&("object"==typeof e||"function"==typeof e)&&!0===e[r]}function lt(e){if(!ct(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");let t=e[c];if(!t){t={target:new EventTarget,bindings:0,active:!1};try{Object.defineProperty(e,c,{value:t,configurable:!0}),Object.defineProperty(e,s,{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?.[o]?"controller":ct(t)?"@daemon instance":"element"}(e)} cannot resolve daemon "${t}" because no app context is provided.`);const r=n.daemons?.[t];if(!r)throw new Error(`[snice] app context does not provide daemon "${t}".`);if(!ct(r))throw new TypeError(`[snice] app context entry "${t}" is not an instance of an @daemon class.`);const s=lt(r);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?.[o]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:e&&"function"==typeof e.dispatchEvent?e:null}function dt(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)})}}}function ft(e,t){return function(n,o){const r=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,ve)||(o[ve]=new Set),!o[ve].has(n)){if(o[ve].add(n),!Object.prototype.hasOwnProperty.call(o,a)){const e=o[a];o[a]=e?[...e]:[]}o[a].push({channelName:e,methodName:r,method:n,options:t})}})}}function mt(e,t){const n=e.constructor[a];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 pt(e){if(e[_]?.channels){for(const t of e[_].channels)t();e[_].channels=[]}}const yt=new Set(["once","prevent","preventdefault","stop","stoppropagation","capture","passive"]);function gt(e){const t=e.lastIndexOf(".");if(t<0)return;const n=e.slice(t+1).toLowerCase();yt.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 vt(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=bt(e)}return o}function bt(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 wt(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 Et=t("on-handlers");function Nt(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,ge)||(n[ge]=new Set),!n[ge].has(a)){if(n[ge].add(a),!Object.prototype.hasOwnProperty.call(n,Et)){const e=n[Et];n[Et]=e?[...e]:[]}for(const e of i)n[Et].push({eventName:e,selector:o,methodName:s,method:t,options:r})}}),t}}function At(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(n=r,e.apply(this,o))}}const Tt=new Set(["scroll","focus","blur","load","unload","error","resize","abort","mouseenter","mouseleave","pointerenter","pointerleave"]);function St(e,t){const n=e.constructor[Et];if(n&&Array.isArray(n)&&0!==n.length){e[_]?e[_].events?e[_].events.length>0&&_t(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&>(o.eventName),s.debounce&&s.debounce>0?r=He(r,s.debounce):s.throttle&&s.throttle>0&&(r=At(r,s.throttle));let d=null;u&&["keydown","keyup","keypress"].includes(h)&&(d=vt(u));const f=(e=>d?t=>{wt(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=Tt.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 _t(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 xt{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 Ct(t){return function(o,r){const s=globalThis.snice?.controllerRegistry;if(!s)throw new Error("Snice global registry not initialized");s.set(t,o),o.prototype[n]=!0;const i=e.pendingControllerAttachments.get(t);return i&&(e.pendingControllerAttachments.delete(t),queueMicrotask(()=>{for(const e of i){const n=e[A];(void 0===n?e[g]:n)===t&&$t(e,t).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${t}":`,e)})}})),o}}function Ot(t,n){if(e.controllerRegistry.has(n))return void queueMicrotask(()=>{const e=t[A];(void 0===e?t[g]:e)===n&&$t(t,n).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${n}":`,e)})});let o=e.pendingControllerAttachments.get(n);o||(o=new Set,e.pendingControllerAttachments.set(n,o)),o.add(t),queueMicrotask(()=>{e.pendingControllerAttachments.get(n)?.has(t)&&console.error(`Failed to attach controller "${n}":`,new Error(`Controller "${n}" not found in registry`))})}function kt(e){return"string"==typeof e?e:e?.name||"(anonymous controller class)"}async function $t(t,r){if("string"!=typeof r){if("function"!=typeof r)throw new Error(`attachController: expected a controller name or a controller class, got ${typeof r}. Controller instances are not supported — pass the class itself.`);if("function"!=typeof(s=r)||!0!==s.prototype?.[n])throw new Error(`Controller class "${kt(r)}" must be decorated with @controller('name') before it can be attached.`)}var s;const i=kt(r),a=t[b],c=t[A];if("string"==typeof r&&void 0!==c&&c!==r)return;if(t[w]===r&&a)return;let l;if(a&&await Lt(t),"string"==typeof r){const e=globalThis.snice?.controllerRegistry;if(!e)throw new Error("Snice global registry not initialized");if(l=e.get(r),!l)throw new Error(`Controller "${r}" not found in registry`)}else l=r,t[T]=!0,delete t[A];const h=new l;e.controllerIdCounter+=1;const u=e.controllerIdCounter,d=new xt;h[o]=!0,h[E]=u,h.element=t;const f=t[R];void 0!==f&&(h[R]=f),t[b]=h,t[w]=r,t[N]=d;const m=new AbortController;t[Te]=m;try{await Promise.race([t.ready,new Promise((e,t)=>{const n=()=>{const e=new Error(`attachController("${i}"): aborted before element was ready (likely detached or never connected)`);e.name="ControllerAttachAborted",t(e)};if(m.signal.aborted)return n();m.signal.addEventListener("abort",n,{once:!0});const o=setTimeout(()=>t(new Error(`attachController("${i}"): element did not become ready within 30000ms (did you forget to appendChild it?)`)),3e4);m.signal.addEventListener("abort",()=>clearTimeout(o),{once:!0})})])}catch(e){throw t[b]===h&&(delete t[b],delete t[w],delete t[N],"string"!=typeof r&&delete t[T]),e}finally{t[Te]===m&&delete t[Te]}h[Se]=!0,await d.runOperation(async()=>{await h.attach(t)}),Ze(h,t),mt(h,t),St(h,t),t.dispatchEvent(new CustomEvent("controller-attached",{detail:{name:i,controller:h}}))}async function Lt(e){const t=e[Te];t&&t.abort();const n=e[b],o=e[w],r=e[N];n&&(delete e[b],delete e[w],delete e[N],"function"==typeof o&&delete e[T],n[Se]&&(r?await r.runOperation(async()=>{await n.detach(e)}):await n.detach(e),n.element=null,rt(n),pt(n),_t(n),r&&await r.cleanup(),delete n[R],e.dispatchEvent(new CustomEvent("controller-detached",{detail:{name:void 0===o?void 0:kt(o),controller:n}}))))}function Pt(e){return e[b]}function jt(){if(globalThis.sniceNativeControllersInitialized)return;function e(e){if(!(e instanceof HTMLElement))return;if(!e.tagName||e.tagName.includes("-"))return;if(e[i])return;if(e[T])return;const t=e.getAttribute("controller"),n=e[A];if(t!==n&&(t||void 0!==n)){if(!t)return delete e[A],delete e[w],void Lt(e).catch(e=>{console.error("Failed to detach controller from native element:",e)});e[A]=t,e.ready||(e.ready=Promise.resolve()),n&&Lt(e).catch(e=>{console.error("Failed to detach old controller from native element:",e)}),$t(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):Ot(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=t("context-handlers");function Rt(e={}){return function(t,n){const o=n.name;return n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,me)||(n[me]=new Set),!n[me].has(t)){if(n[me].add(t),!Object.prototype.hasOwnProperty.call(n,Mt)){const e=n[Mt];n[Mt]=e?[...e]:[]}n[Mt].push({methodName:o,method:t,options:e})}}),t}}function It(e){const t=e.constructor[Mt];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[re];if(n){e[se]=n;for(const o of t){const{methodName:t,method:r,options:s}=o,i=`__wrapped_${t}`;e[i]=function(n){const o=e[de]||(e[de]=new Set);if(s.once&&o.has(t))return;const a=()=>{if(r.call(e,n),s.once){o.add(t);const n=e[se];n&&"function"==typeof n[le]&&n[le](e,i)}},c=e[ue]||(e[ue]={}),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[ce]&&n[ce](e,i)}}}const Dt=Symbol.for("snice:html-result"),Vt=Symbol.for("snice:css-result"),qt=new WeakMap;function Bt(e,...t){return{_$litType$:Dt,strings:e,values:t}}function Ft(e,...t){return{_$litType$:Dt,strings:e,values:t,svg:!0}}function Wt(e,...t){const n=0===t.length?qt.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+=(Ut(r)?r.cssText:String(r))+e[n+1]}const r={_$litType$:Vt,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&&qt.set(e,r),r}function zt(e){return e&&e._$litType$===Dt}function Ut(e){return e&&e._$litType$===Vt}const Ht=Symbol.for("snice:nothing"),Kt=Symbol.for("snice:unsafe-html");function Gt(e){return{_$litType$:Kt,html:e}}function Qt(e){return e&&e._$litType$===Kt}const Jt=Symbol.for("snice:repeat-result");function Xt(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$:Jt,items:n,keys:o,values:n.map(t.render),empty:0===n.length?"function"==typeof t.empty?t.empty():t.empty:void 0}}const Yt=new WeakSet;function Zt(e){return e[p]||e.shadowRoot||null}function en(e){const t=Zt(e);if(t)return t;const n=e.constructor[y];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[p]=o,Yt.add(e),o}function tn(e){const t=e.getRootNode();if(t instanceof ShadowRoot)return t.host;let n=e;for(;n;){if(n instanceof HTMLElement&&Yt.has(n))return n;n=n.parentNode}return null}const nn=`snice$${Math.random().toFixed(9).slice(2)}$`,on="?"+nn,rn=`\x3c!--${on}--\x3e`,sn=new RegExp(nn.replace(/\$/g,"\\$"),"g"),an=new WeakMap,cn=Symbol("not-committed");function ln(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[L]||(r[L]=new Set),r[L].add(t)}const hn=Symbol.for("snice:no-change"),un=Symbol.for("snice:live");function dn(e){return{_$liveMarker$:un,value:e}}const fn=e=>null===e||"object"!=typeof e&&"function"!=typeof e,mn=e=>!!e&&"function"==typeof e[Symbol.asyncIterator];class pn{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(nn))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(nn))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(nn))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(nn))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(nn)&&(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(nn)){o.push(i);const t=n[r]||i.name,s=a.split(nn),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===on){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(nn)){const t=e.data.split(sn);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(nn)){const n=e.parentNode,o=t.split(sn),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 yn(e){const{strings:t}=e,n=an.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(nn);else if(i)r.push(l),o.push(nn);else if(s){const e=n.trimEnd();if(e.endsWith("=")){let t=e.length-2;for(;t>=0&&/[\w\-\.@\?\/:\+~|]/.test(e[t]);)t--;l=e.substring(t+1,e.length-1).trim(),r.push(l),o.push(nn)}else{if(!n.match(/<(if|else-if|case|when)\s*$/))throw new Error("snice: expressions directly in opening tags are not supported; use an explicit attribute, property, event, class, style, or named spread binding.");l="value",r.push("value"),o.push(`value="${nn}"`)}}else r.push(""),o.push(rn)}}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;const d=new pn(e,u,r);return an.set(t,d),d}function gn(e){if(!zt(e))return;const t=yn(e);return-1===t.keyIndex?void 0:e.values[t.keyIndex]}class vn{constructor(e){this.parts=[],this.fragment=null,this.conditionalParts=[],this.regularParts=[],this.template=yn(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 wn(e,r);break;case"attribute":const i=n.get(t.element);o=new En(i,t.name,t.attrStrings);break;case"property":const a=n.get(t.element);o=new _n(a,t.name);break;case"boolean-attribute":const c=n.get(t.element);o=new Cn(c,t.name);break;case"event":const l=n.get(t.element);o=new On(l,t.name);break;case"class":const h=n.get(t.element);o=new An(h,t.name);break;case"style":const u=n.get(t.element);o=new Tn(u,t.name);break;case"spread":const d=n.get(t.element);o=new Sn(d,t.name);break;case"controller":const f=n.get(t.element);o=new xn(f);break;case"conditional-if":const m=n.get(t.element);o=new $n(m);break;case"conditional-else-if":const p=n.get(t.element);o=new Pn(p);break;case"conditional-case":const y=n.get(t.element);o=new jn(y,s);break;case"conditional-when":const g=n.get(t.element);o=new Rn(g);break;case"comment":const v=n.get(t.startNode);o=new Nn(v,t.attrStrings);break;default:throw new Error(`Unknown part type: ${t.type}`)}this.parts.push(o),o instanceof $n||o instanceof Pn||o instanceof jn||o instanceof Rn?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 Pn||e instanceof Rn?e.coordinator:e;t.has(n)||(t.add(n),(n instanceof $n||n instanceof jn)&&n.flush())}for(const{part:t,index:n}of this.regularParts)t instanceof En&&void 0!==t.strings||t instanceof Nn?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 bn{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 wn extends bn{constructor(e,t){super(),this.type="node",this._committedValue=cn,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!==hn)if((e=>!!e&&"function"==typeof e.then)(e)||mn(e))this._commitAsync(e);else if(!this._committingAsyncValue&&this._asyncSource&&this._cancelAsync(!0),e!==Ht&&null!=e&&""!==e)fn(e)?e!==this._committedValue&&this._commitText(e):zt(e)?this._commitTemplateResult(e):function(e){return!!e&&e._$repeat$===Jt}(e)?0===e.values.length?this.commit(e.empty??Ht):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!==Ht){const e=this._clear();if(this._committedValue=Ht,e)throw e}this._committedValue=Ht}}_commitText(e){if(this._committedValue!==cn&&this._committedValue!==Ht&&fn(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 vn){const n=an.get(e.strings);if(n&&t.template===n)return void t.update(e.values)}const n=new vn(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(gn);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 wn||(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 wn(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 wn(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=Ht,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(mn(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=Ht,n;let o=this.startNode.nextSibling;for(;o&&o!==this.endNode;){const t=o.nextSibling;e.removeChild(o),o=t}return this._committedValue=Ht,n}_disposeCommitted(e){let t;if(e instanceof vn)try{e.clear()}catch(e){t=e}else if(Array.isArray(e))for(const n of e)if(n instanceof wn)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 vn)try{this._committedValue.disconnected(e)}catch(e){t??=e}else if(Array.isArray(this._committedValue))for(const n of this._committedValue)if(n instanceof wn)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 vn)try{this._committedValue.reconnected()}catch(t){e??=t}else if(Array.isArray(this._committedValue))for(const t of this._committedValue)if(t instanceof wn)try{t.reconnected()}catch(t){e??=t}if(!this._asyncSource||this._asyncStarted&&!this._asyncPaused||this._startAsyncSource(!0),e)throw e}}class En extends bn{constructor(e,t,n){super(),this.type="attribute",this._committedValue=cn,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(cn),this.strings=n):this._committedValue=cn}commit(e,t=0){let n,o=!1;if(void 0===this.strings){if(e===hn)return;if(o=!fn(e)||e!==this._committedValue&&e!==hn,!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===hn&&(i=s[e],i===cn&&(i="")),o=o||!fn(i)||i!==s[e],i===Ht?n=Ht:n!==Ht&&(n=n+(i??"")+this.strings[e+1]),s[e]=i}if(!o)return}this._commitValue(n)}_commitValue(e){e===Ht?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,String(e??""))}clear(){this.element.removeAttribute(this.name)}}class Nn extends bn{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(cn)}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===hn&&(s=this._committedValues[e],s===cn&&(s="")),o=o||!fn(s)||s!==this._committedValues[e],this._committedValues[e]=s,r+=String(s===Ht?"":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 An extends bn{constructor(e,t){super(),this.type="class",this.committed=cn,this.element=e,this.name=t}commit(e){if(e===hn)return;const t=e!==Ht&&Boolean(e);t!==this.committed&&(this.committed=t,this.element.classList.toggle(this.name,t))}clear(){this.element.classList.remove(this.name),this.committed=cn}}class Tn extends bn{constructor(e,t){super(),this.type="style",this.committed=cn,this.element=e,this.name=t}commit(e){if(e===hn||Object.is(e,this.committed))return;this.committed=e;const t=this.element.style;e===Ht||null==e||!1===e?t.removeProperty(this.name):t.setProperty(this.name,String(e))}clear(){this.element.style.removeProperty(this.name),this.committed=cn}}class Sn extends bn{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===hn)return;if(e!==Ht&&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)||(ln(this.element,t),this.element[t]=void 0);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||(ln(this.element,t),this.element[t]=n===Ht?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===Ht||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!==Ht&&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===Ht||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 tn(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 _n extends bn{constructor(e,t){super(),this.type="property",this._committedValue=cn,this.element=e,this.name=t}commit(e){if(e!==hn){if(function(e){return e&&e._$liveMarker$===un}(e)){if((e=e.value)===hn)return;if(e===this.element[this.name])return void(this._committedValue=e)}else if(e===this._committedValue)return;this._committedValue=e,ln(this.element,this.name),this.element[this.name]=e===Ht?void 0:e}}clear(){this._committedValue=cn}}class xn extends bn{constructor(e){super(),this.type="controller",this._committedValue=cn,this.element=e}commit(e){if(e===hn)return;const t=null==e||!1===e||""===e||e===Ht?null:e,n=this._committedValue===cn,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[S]?delete r[S]:r[i]?r.controller=null:this._detach()),"function"==typeof t?(this.element.hasAttribute("controller")&&this.element.removeAttribute("controller"),this.isConnected?this._apply(t):this.element.localName.includes("-")&&!r[i]&&(r[S]=t)):"string"==typeof t?this.element.setAttribute("controller",t):"string"==typeof o&&this.element.removeAttribute("controller")}_apply(e){const t=this.element;t[i]?t.controller!==e?t.controller=e:this._attach(e):this.element.localName.includes("-")?t[S]=e:(t.ready||(t.ready=Promise.resolve()),this._attach(e))}_attach(e){$t(this.element,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e?.name||e}":`,t)})}_detach(){Lt(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[S]&&(t[i]||this._detach())}reconnected(){const e=this._committedValue;"function"==typeof e&&this._apply(e)}clear(){const e=this.element;void 0!==e[S]&&delete e[S];const t=this._committedValue;this._committedValue=cn,"function"==typeof t&&(e[i]||this._detach())}}class Cn extends bn{constructor(e,t){super(),this.type="boolean-attribute",this._committedValue=cn,this.element=e,this.name=t}commit(e){if(e===hn)return;const t=!!e&&e!==Ht;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=cn}}class On extends bn{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=vt(t)}else this.eventName=n,gt(n)}commit(e){if(e===hn)return;e===Ht&&(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&&!wt(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=tn(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 kn=Symbol("not-set");class $n extends bn{constructor(e){super(),this.type="node",this.conditions=[kn],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]=kn,Ln.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!==hn&&(this.conditions[0]=e)}setAlternative(e,t){t!==hn&&(this.conditions[e]=t)}flush(){let e=-1;for(let t=0;t<this.conditions.length;t++)if(this.conditions[t]!==kn&&this.conditions[t]!==Ht&&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 Ln=new WeakMap;class Pn extends bn{constructor(e){super(),this.type="node";const t=Ln.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 jn extends bn{constructor(e,t){super(),this.type="node",this.value=kn,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?kn:n.getAttribute("value")??""})-1;o&&Mn.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:kn})-1}}n.removeChild(e)}commit(e){e!==hn&&(this.value=e)}setExpected(e,t){t!==hn&&(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 Mn=new WeakMap;class Rn extends bn{constructor(e){super(),this.type="node";const t=Mn.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}}let In=!1;function Dn(e){In=e}function Vn(e){e[d]||(e[u]=new Promise(t=>{e[d]=t}))}function qn(e){const t=e[d];t&&(e[d]=null,t())}const Bn=new class{constructor(){this.pending=new Set,this.scheduled=!1}schedule(e,t){t.sync?Un(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?Un(t,t[J]||{}):t[f]=!0}remove(e){this.pending.delete(e)}};function Fn(e){return Object.prototype.hasOwnProperty.call(e,X)}function Wn(e){const t=e[Z];if(!t||0===t.length)return;const n=[...t];e[Z]=[],n.forEach(e=>e())}const zn=50;function Un(e,t,n){const o=arguments.length>=3,r=e[Q];if(!r)return void qn(e);if(t.once&&Fn(e))return void qn(e);const s=e[m]??0;if(s>=zn){const t=e.tagName?e.tagName.toLowerCase():"element";return console.error(`snice: maximum render depth (${zn}) exceeded for <${t}>. render() is mutating an observed property, causing an infinite render loop.`),void qn(e)}e[m]=s+1;try{const s=o?n:r.call(e),i=en(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[X];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[X]=null,void Wn(e)}if(!zt(s))return void console.warn("Render method must return html`` template result");let a=e[X];if(a&&a.isSameTemplate(s.strings))return a.update(s.values),void Wn(e);const c=new vn(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[X]=c;try{a?.clear()}catch(e){u=e}if(Wn(e),u)throw u}catch(e){if(In)throw e;console.error("Error rendering element:",e)}finally{e[m]=s,qn(e)}}function Hn(e,t=!1){const n=e[J]||{};if(n.once&&Fn(e))e.isConnected&&Kn(e);else if(Vn(e),t)Un(e,n);else{if(void 0!==n.debounce&&n.debounce>0)return e[Y]||(e[Y]={}),clearTimeout(e[Y].debounce),void(e[Y].debounce=setTimeout(()=>{e[Y].debounce=null,Bn.schedule(e,n)},n.debounce));if(void 0!==n.throttle&&n.throttle>0){e[Y]||(e[Y]={lastThrottle:0});const t=e[Y],o=Date.now();return 0===t.lastThrottle||o-t.lastThrottle>=n.throttle?(t.lastThrottle=o,void Bn.schedule(e,n)):void(t.throttleTimer||(t.throttleTimer=setTimeout(()=>{t.throttleTimer=null,t.lastThrottle=Date.now(),Bn.schedule(e,n)},n.throttle-(o-t.lastThrottle))))}Bn.schedule(e,n)}}function Kn(e){const t=e[X];t?.reconnected()}function Gn(e={}){return function(t,n){return n.addInitializer(function(){this[Q]=t,this[J]=e}),function(...n){const o=t.apply(this,n);return Un(this,{...this[J]||e,once:!1},o),o}}}function Qn(){return function(e,t){return t.addInitializer(function(){this[ee]&&!this[ne]?this[ne]=[this[ee]]:this[ee]&&this[ne]&&this[ne].push(this[ee]),this[ee]=e}),e}}function Jn(e,t){return function(n,o){return function(...r){this[G]||(this[G]=new Map);const s=`${e}_${o.name}`;this[G].has(s)||this[G].set(s,{debounceTimeout:null,throttleLastCall:0,throttleTimeout:null});const i=this[G].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)}}}function Xn(e){const t=e[G];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 Yn=t("debounce-timers"),Zn=t("throttle-timers"),eo=t("once-called"),to=t("memoize-cache");function no(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[Yn]||(this[Yn]={});const a=this[Yn],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}}}}function oo(e=300,t={}){const{leading:n=!0,trailing:o=!0}=t;return function(t,r){const s=r.name;return function(...r){this[Zn]||(this[Zn]={});const i=this[Zn],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))}}}function ro(e=!0){let t,n=!1;return function(o,r){const s=r.name;return function(...r){return e?(this[eo]||(this[eo]={}),this[eo][s]||(this[eo][s]={called:!0,result:o.apply(this,r)}),this[eo][s].result):(n||(n=!0,t=o.apply(this,r)),t)}}}function so(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[to]||(this[to]={}),this[to][s]||(this[to][s]=new Map);const i=this[to][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}}}function io(e){if(e[Yn]){for(const t in e[Yn])e[Yn][t]?.timeout&&clearTimeout(e[Yn][t].timeout);e[Yn]={}}}function ao(e){if(e[Zn]){for(const t in e[Zn])e[Zn][t]?.timeout&&clearTimeout(e[Zn][t].timeout);e[Zn]={}}}function co(e,t){e[to]&&(t?delete e[to][t]:e[to]={})}function lo(e,t){e[eo]&&(t?delete e[eo][t]:e[eo]={})}function ho(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 uo(e){e.prototype[i]=!0;const t=e.prototype.connectedCallback,n=e.prototype.disconnectedCallback,o=e.prototype.attributeChangedCallback,r=e.observedAttributes||[];r.includes("controller")||r.push("controller");const s=e[x];if(s)for(const[e,t]of s){if(!1===t.attribute)continue;const n=De(t,e);r.includes(n)||r.push(n)}Object.defineProperty(e,"observedAttributes",{get:()=>r,configurable:!0}),Object.defineProperty(e.prototype,"ready",{get(){return this[l]||(this[l]=new Promise(e=>{this[h]=e})),this[l]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendered",{get(){return this[d]?this[u]:Promise.resolve()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"controller",{get(){return this[g]},set(e){const t=this[g];if(this[g]=e,e!==t){if(e){const t="string"==typeof e?e:e.name||"(anonymous controller class)";return void $t(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):Ot(this,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}t&&Lt(this).catch(e=>{console.error("Failed to detach controller:",e)})}},enumerable:!0,configurable:!0}),e.prototype.connectedCallback=async function(){if(this[l]||(this[l]=new Promise(e=>{this[h]=e})),this[v]){try{Kn(this)}catch(e){console.error(`Error reconnecting the render tree for ${this.tagName}:`,e)}St(this,this),mt(this,this),It(this);try{Ze(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName} on reconnection:`,e)}t&&t.call(this);const n=e[B];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 void(this[Q]&&this[f]&&(this[f]=!1,Hn(this)))}this[P]=!0;const n=e[x];if(n)for(const[e,t]of n){if(!1===t.attribute)continue;const n=De(t,e);if(!this.hasAttribute(n))continue;const o=this.getAttribute(n);We(this,M).add(e),t.type===Boolean&&""===o&&this.setAttribute(n,"true"),this[e]=Re(o,t)}if(this[$]){for(const[e,t]of Array.from(this[$].entries())){const o=n?.get(e),r=De(o||{},e);this[$].delete(e),this.hasAttribute(r)||(this[e]=t)}delete this[$]}if(void 0!==this[S]){const e=this[S];if(delete this[S],!this[g]){this[g]=e;const t=e?.name||"(anonymous controller class)";$t(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[g]){const e=this.getAttribute("controller");e&&(this.controller=e)}!function(e){const t=e[ee],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)Ut(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[te]){e[te]=!0;try{const o=[...n],r=e[ne];if(r)for(const t of r){const n=t.call(e);Ut(n)&&o.push(n)}if(t){const n=t.call(e);if(!Ut(n))return void console.warn("Styles method must return css`` template result");o.push(n)}const s=en(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),St(this,this),mt(this,this),It(this),this[v]=!0,function(e,t){if(Je.has(t))return;Je.add(t);const n=t[j];if(!n||0===n.size)return;const o=t[x],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[j],o=t[x];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[V];if(await new Promise(e=>queueMicrotask(e)),this.isConnected){this[Q]&&Hn(this,!0);try{Ze(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName}:`,e)}if(await new Promise(e=>queueMicrotask(e)),this.isConnected){if(o)for(const e of o)try{await e.method.call(this)}catch(t){console.error(`Error in @ready handler ${e.methodName}:`,t)}this[h]&&(this[h](),this[h]=null)}else this[h]&&(this[h](),this[h]=null)}else this[h]&&(this[h](),this[h]=null)},e.prototype.disconnectedCallback=async function(){try{!function(e){const t=e[X];t?.disconnected(!0)}(this)}catch(e){console.error(`Error disconnecting the render tree for ${this.tagName}:`,e)}const t=e[q];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[g]&&Lt(this).catch(e=>{console.error("Failed to detach controller:",e)}),_t(this),pt(this),function(e){const t=e.constructor[Mt];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[ue];if(n&&"object"==typeof n){for(const e of Object.keys(n))n[e]?.timeout&&clearTimeout(n[e].timeout);delete e[ue]}for(const n of t)delete e[`__wrapped_${n.methodName}`];const o=e[se];o&&"function"==typeof o[le]&&o[le](e),delete e[se],delete e[de]}(this),rt(this),io(this),ao(this),function(e){const t=e[Y];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[f]=!0),Xn(this),Oo(this,H),Oo(this,K)},e.prototype.attributeChangedCallback=function(t,n,r){if(o?.call(this,t,n,r),"controller"===t)return void(this.controller=r);const s=e[x];if(s)for(const[n,o]of s){if(De(o,n).toLowerCase()!==t.toLowerCase())continue;if(this[U]?.has(t.toLowerCase()))break;const s=this[C]?.[n],i=this[O]?.[n];let a=null===r?o.type!==Boolean&&i:Re(r,o,s,i);const c=this[k]?.[n];if(c&&(a=c(a)),!(o?.hasChanged?o.hasChanged(a,s):Ie(a,s)))break;We(this,M).add(n),ze(this,C)[n]=a,this[v]&&Ue(this,e,n,s,a),this[Q]&&this[v]&&Hn(this);break}},e.prototype.connectedMoveCallback=async function(){const t=e[F];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[W];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @adopted handler ${e.methodName}:`,t)}}}function fo(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[x]){e[x]||(e[x]=new Map);for(const[n,o]of t[x])e[x].has(n)||e[x].set(n,o)}t.formAssociated&&!e.formAssociated&&(e.formAssociated=!0)}}(t),n.metadata&&n.metadata[x]){t[x]||(t[x]=new Map);for(const[e,o]of n.metadata[x])t[x].set(e,o)}else if(yo.length>0){t[x]||(t[x]=new Map);const e=yo.pop();for(const[n,o]of e)t[x].set(n,o)}o?.formAssociated&&(t.formAssociated=!0);const r={...Object.getPrototypeOf(t)?.[y]||{}},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[y]=i,!0===t.prototype[oe]&&Object.prototype.hasOwnProperty.call(t.prototype,"render")&&!Object.prototype.hasOwnProperty.call(t.prototype,Q)&&"function"==typeof t.prototype.render&&(t.prototype[Q]=t.prototype.render,t.prototype[J]=t.renderOptions||{}),uo(t),customElements.get(e)?(globalThis.SNICE_DEBUG&&console.warn(`[snice] "${e}" is already registered. Skipping.`),t):(customElements.define(e,t),t)}function mo(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 fo(e,n,o,t)}}function po(e){return function(t,n){return fo(e,t,n)}}const yo=[],go=new WeakMap;function vo(e){return function(t,n){const o=n.name;return n.metadata?(n.metadata[x]||(n.metadata[x]=new Map),n.metadata[x].set(o,e||{})):(0===yo.length&&yo.push(new Map),yo[yo.length-1].set(o,e||{})),function(t){const n=this[L],r=!0===n?.delete(o);0===n?.size&&delete this[L];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=go.get(o);if(!r){const e=o.createElement("div");r=new Map;for(const t of Reflect.ownKeys(e))r.set(t,e[t]);go.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[x]||(c[x]=new Map);const l={...e};l.type||void 0===t||(l.type=Me(t)),l.attributeNaming||"kebab"!==c.propertyAttributeNaming||(l.attributeNaming="kebab"),c[x].set(o,l),ze(this,O)[o]=t;const h=()=>{if(!this[P])return;const e=this[C]?.[o];if(!1!==l.attribute&&!1!==l.reflect){const n=De(l,o),r=Qe(e,l,t),s=n.toLowerCase();We(this,U).add(s);try{null===r?this.removeAttribute?.(n):this.setAttribute?.(n,r)}finally{this[U].delete(s)}}this[v]&&(Ue(this,this.constructor,o,e,e),this[Q]&&Hn(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=ho(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=ho(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=ho(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[C]?.[o]===t&&h()}),t};ze(this,k)[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[$]?.has(o)?this[$].get(o):this[C]&&o in this[C]?this[C][o]:t},set(e){const t=this[o];if(!(l.hasChanged?l.hasChanged(e,t):Ie(e,t)))return;const n=(this[k]?.[o]||(e=>e))(e);if(!this[P])return this[$]||(this[$]=new Map),void this[$].set(o,n);if(ze(this,C)[o]=n,!1!==l.attribute&&!1!==l.reflect){const e=De(l,o),t=Qe(n,l,this[O]?.[o]);We(this,M).add(o);const r=e.toLowerCase();We(this,U).add(r);try{null===t?this.removeAttribute?.(e):this.setAttribute?.(e,t)}finally{this[U].delete(r)}}this[v]&&(Ue(this,this.constructor,o,t,n),this[Q]&&Hn(this))},configurable:!0,enumerable:!0}));const p=u(t);return ze(this,C)[o]=p,ze(this,O)[o]=p,i?a:p}}}function bo(e={}){return vo({...e,attribute:!1,reflect:!1})}function wo(e){return!0===e[o]&&e.element?e.element:e}function Eo(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=wo(this);let n=null;const o=t instanceof HTMLElement?Zt(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}}}function No(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=wo(this),n=new Set,o=t instanceof HTMLElement?Zt(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}}}function Ao(...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,pe)||(n[pe]=new Map);let s=n[pe].get(e);if(s||(s=new Set,n[pe].set(e,s)),!Object.prototype.hasOwnProperty.call(n,j)){const e=n[j],t=new Map;if(e)for(const[n,o]of e)t.set(n,[...o]);n[j]=t}for(const i of t)s.has(i)||(s.add(i),n[j].has(i)||n[j].set(i,[]),n[j].get(i).push({methodName:r,method:e,immediate:o}))})}}function To(){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[R])return this[R];const e=at(this);return void 0!==e?e:void 0},set(){},configurable:!0,enumerable:!0}),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 _o(){return function(e,t){So(V,be,e,t)}}function xo(){return function(e,t){So(q,we,e,t)}}function Co(){return function(e,t){So(B,Ee,e,t)}}function Oo(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 ko(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 $o=ko(F,H,Ne),Lo=ko(W,K,Ae);class Po extends HTMLElement{static{this.propertyAttributeNaming="kebab"}createRenderRoot(){const e=this.constructor[y];return this.attachShadow({mode:"string"==typeof e?.shadow?e.shadow:"open",delegatesFocus:e?.delegatesFocus})}invalidate(){return Hn(this),this.rendered}renderNow(){return function(e){Vn(e),Un(e,{...e[J]||{},once:!1})}(this),this.rendered}}Object.defineProperty(Po.prototype,oe,{value:!0});class jo{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 Mo(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 Ro(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 Io(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 Do(e,t){Object.defineProperty(e.prototype,r,{value:!0,configurable:!0})}function Vo(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{St(e,t.target),mt(e,t.target)}catch(n){throw pt(e),_t(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&&(pt(e),_t(e),Xn(e),t.active=!1,t.target=new EventTarget))}}function qo(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(it.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(st,n),it.set(e,{listener:n});let o=!1;return()=>{if(o)return;o=!0;const t=it.get(e);t?.listener===n&&(e.removeEventListener(st,n),it.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(Vo(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 Bo=new WeakMap;var Fo;function Wo(e){const t=e.window??window,n=e.document??document,o=[];let r,s,i,a=!1,c=[],l=null,h=null;const u=e.context||{};let d=null,f=null;const m=new je(u,[],"",{},e.fetcher);function p(e){if(d===e&&f&&Bo.get(e)===f)return;f?.(),Bo.get(e)?.();const t=qo(e,u);let n=!1;const o=()=>{n||(n=!0,t(),Bo.get(e)===o&&Bo.delete(e))};f=o,d=e,Bo.set(e,o)}function y(e){if(!l||!h)return null;const t=e.querySelectorAll(l);for(const e of t)if(e[D]===h)return e;return null}function g(e,t,n,c,l,h){switch(o.push({route:new jo(e),tag:t,transition:n,guards:c,layout:l,placard:h}),a=!1,e){case"/404":r=t;break;case"/403":s=t;break;case"/":i=t}}function v(){const e=new Set;c=o.filter(e=>e.placard).map(e=>{const t=e.placard;return"function"==typeof t?t(u):t}).filter(t=>!e.has(t.name)&&(e.add(t.name),!0))}function b(e,t,n){m[fe](u,c,t,n)}function w(){switch(e.type){case"hash":return t.location.hash.slice(1);case"pushstate":return`${t.location.pathname}${t.location.search}`}}function E(e){let t;if(s)t=n.createElement(s),t[R]=u;else{const e=n.createElement("div");e.className="default-403",e.innerHTML="<h1>403</h1><p>Unauthorized</p>",t=e}e.innerHTML="",e.appendChild(t),l=null,h=null}async function N(e,t,o,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=n.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}(),o.appendChild(i))},50);try{for(const e of s)if(!await e(u,t))return r&&r()||E(o),!1;return!0}finally{a&&clearTimeout(a),i&&i.remove()}}async function A(t,o,r,s,i,a,d){const f=!1===(m=s)?null:m||(e.layout?e.layout:null);var m;const{element:p,needsNewLayout:g}=function(e){if(e===l)return{element:null,needsNewLayout:!1};if(l=e,e){const t=Date.now();h=t;const o=n.createElement(e);return o[R]=u,o[D]=t,{element:o,needsNewLayout:!0}}return h=null,{element:null,needsNewLayout:!0}}(f),v=r||e.transition;if(null!==p||null!==y(t)){if(await async function(e,t,n,o,r,s,i,a){const l=o||y(e);if(!l)return;!function(e,t,n){"function"==typeof e.update&&e.update(u,c,t,n)}(l,s,i);const h=l.querySelector('[slot="page"]');if(n&&h){if(t.setAttribute("slot","page"),await _(l,h,t,n),a&&a())return;r&&(e.innerHTML="",e.appendChild(l))}else a&&a()||(l.querySelectorAll('[slot="page"]').forEach(e=>e.remove()),t.setAttribute("slot","page"),l.appendChild(t),r&&(e.innerHTML="",e.appendChild(l)))}(t,o,v,p,g,i,a,d),d&&d())return;b(0,i,a)}else await async function(e,t,n,o){const r=e.children[0];n&&r?await _(e,r,t,n):o&&o()||(e.innerHTML="",e.appendChild(t))}(t,o,v,d),d&&d()||b(0,i,a)}let T=0;async function S(s){const a=n.querySelector(e.target);if(!a)throw new Error(`Target element not found: ${e.target}`);p(a);const c=++T,l=()=>c!==T;if(v(),t.scrollTo(0,0),(""===s?.trim()||"/"===s)&&i){const e=o.find(e=>e.route.match("/"));if(!await N(e?.guards,{},a,l))return;if(l())return;const{element:r,transition:c,layout:h}=function(){const e=n.createElement(i);e[R]=u;const r=t.customElements.get(i),s=r?.[I],a=o.find(e=>e.route.match("/"));return{element:e,transition:s,layout:a?.layout}}();return void await A(a,r,c,h,s,{},l)}if(!s)return;const h=await async function(e,t,r){for(const s of o){const o=s.route.match(e);if(!1===o)continue;if(!await N(s.guards,o,t,r))return{result:Fo.GUARDS_FAILED};const i=n.createElement(s.tag);i[R]=u,i[re]=m;const a=o;return Object.keys(a).forEach(e=>i.setAttribute(e,a[e])),{result:Fo.SUCCESS,element:i,transition:s.transition,layout:s.layout,routeParams:a}}return{result:Fo.NOT_FOUND}}(s,a,l);if(l())return;if(h.result===Fo.GUARDS_FAILED)return;if(h.result===Fo.SUCCESS){const{element:e,transition:t,layout:n,routeParams:o={}}=h;return void await A(a,e,t,n,s,o,l)}const{element:d,transition:f,layout:y}=function(){if(r){const e=n.createElement(r);e[R]=u;const o=t.customElements.get(r),s=o?.[I];return{element:e,transition:s,layout:void 0}}const e=n.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 A(a,d,f,y,s,{},l)}async function _(e,t,n,o,r=T){return async function(e,t,n,o={},r=()=>!1){const s=o.outDuration??300,i=o.inDuration??300,a=o.mode||"sequential",c=o.out?Ro(o.out):{opacity:"0"},l={opacity:"0"},h=o.in?Ro(o.in):{opacity:"1"},u=e.style,d=e.tagName.includes("-")&&e.shadowRoot,f=Symbol.for("snice:transition-original-position"),m=Symbol.for("snice:transition-count"),p=e;d||(f in p||(p[f]=u.position,p[m]=0),p[m]++,u.position="relative");const y=()=>{d||(p[m]--,p[m]<=0&&(u.position=p[f],delete p[f],delete p[m]))},g=t.hasAttribute("slot")||n.hasAttribute("slot");switch(Io(t,g,s,"all"),Io(n,g,i,"all"),Object.assign(n.style,l),e.appendChild(n),a){case Ce.SIMULTANEOUS:Object.assign(t.style,c),Object.assign(n.style,h),await new Promise(e=>setTimeout(e,Math.max(s,i)));break;case Ce.SEQUENTIAL:if(Object.assign(t.style,c),await new Promise(e=>setTimeout(e,s)),r())return n.parentNode===e&&n.remove(),void y();Object.assign(n.style,h),await new Promise(e=>setTimeout(e,i))}if(r())return n.parentNode===e&&n.remove(),void y();t.remove(),function(e,t){e.style.position="",e.style.width="",e.style.transition="",t?e.style.height="":(e.style.top="",e.style.left="")}(n,g),Object.keys({...l,...h}).forEach(e=>{n.style[e]=""}),y()}(e,t,n,o,()=>r!==T)}return{page:function(e){return function(n,o){if(o?.metadata&&o.metadata[x]){n[x]||(n[x]=new Map);for(const[e,t]of o.metadata[x])n[x].set(e,t)}uo(n),n[I]=e.transition;const r=n.prototype.connectedCallback;n.prototype.connectedCallback=function(){this[re]=m,r?.call(this)};const s=n.prototype.disconnectedCallback;return n.prototype.disconnectedCallback=function(){s?.call(this),delete this[R],delete this[re]},t.customElements.get(e.tag)||t.customElements.define(e.tag,n),e.routes.forEach(t=>g(t,e.tag,e.transition,e.guards,e.layout,e.placard)),n}},initialize:function(){const r=n.querySelector(e.target);if(!r)throw new Error(`Target element not found: ${e.target}`);p(r),!a&&(o.sort((e,t)=>Mo(t.route.spec)-Mo(e.route.spec)),a=!0),v(),function(){const o=()=>{const t=n.querySelector(e.target);if(t&&(d!==t||!f||Bo.get(t)===f))return d!==t&&it.has(t)?(f?.(),f=null,void(d=null)):void S(w())};switch(e.type){case"hash":t.addEventListener("hashchange",o);break;case"pushstate":t.addEventListener("popstate",o)}}(),S(w())},navigate:async function(n){const o=function(e){const t=e.trim().replace(/^#/,"");return t?t.startsWith("/")?t:`/${t}`:"/"}(n);!function(n){switch(e.type){case"hash":{const e=`#${n}`;t.location.hash!==e&&t.history.pushState(null,"",e);break}case"pushstate":`${t.location.pathname}${t.location.search}`!==n&&t.history.pushState(null,"",n)}}(o),await S(o)},register:g}}function zo(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}}function Uo(e){let t="";for(const n of Object.keys(e))e[n]&&(t+=(t?" ":"")+n);return t}function Ho(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("; ")}!function(e){e.SUCCESS="success",e.GUARDS_FAILED="guards-failed",e.NOT_FOUND="not-found"}(Fo||(Fo={}));let Ko=!1;function Go(e){Ko=e}async function Qo(e,t=500){if(customElements.get(e))return;let n=null;Ko||(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 Jo(e,t=500){const n=e.tagName.toLowerCase();await Qo(n,t),"ready"in e&&"function"==typeof e.ready?.then&&await e.ready}async function Xo(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=>Jo(e,t)))}async function*Yo(e){for(;;)await new Promise(t=>{e[Z]||(e[Z]=[]),e[Z].push(t)}),yield}let Zo=0,er=null;const tr=Symbol.for("snice:body-scroll-lock");function nr(){0===Zo&&(er=document.body.style.overflow,document.body.style.overflow="hidden"),Zo++}function or(){0!==Zo&&(Zo--,0===Zo&&(document.body.style.overflow=er??"",er=null))}function rr(){return Zo}globalThis[tr]={clear(){Zo=0,er=null}};class sr{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)}}var ir;"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"}(ir||(ir={}));export{je as Context,sr as ContextAwareFetcher,o as IS_CONTROLLER_INSTANCE,Wo as Router,xe as SimpleArray,Po as SniceElement,Ce as TransitionMode,Lo as adopted,uo as applyElementFunctionality,$t as attachController,Uo as classMap,io as clearDebounceTimers,co as clearMemoizeCache,ao as clearThrottleTimers,Rt as context,To as contextProperty,Ct as controller,zo as createRequestHandler,Wt as css,Do as daemon,no as debounce,Lt as detachController,Jn as dispatch,xo as dispose,mo as element,qe as escapeAttr,Ve as escapeHtml,rr as getBodyScrollLockCount,at as getContext,Pt as getController,t as getSymbol,Bt as html,Be as isSafeUrl,po as layout,dn as live,nr as lockBodyScroll,so as memoize,$o as moved,hn as noChange,Ht as nothing,Ye as observe,Nt as on,ro as once,Fe as parseDuration,vo as property,qo as provideContext,Eo as query,No as queryAll,_o as ready,Co as reconnect,Gn as render,Xt as repeat,dt as request,lo as resetOnce,ft as respond,Go as setDisableElementReadyWarnings,Dn as setStrictRenderErrors,bo as state,Ho as styleMap,Qn as styles,Ft as svg,oo as throttle,Yo as trackRenders,or as unlockBodyScroll,Gt as unsafeHTML,jt as useNativeElementControllers,Xo as waitForAllCustomElements,Qo as waitForElementDefined,Jo as waitForElementReady,Ao as watch};
|
|
1
|
+
globalThis.snice||(globalThis.snice={controllerRegistry:new Map,pendingControllerAttachments:new Map,controllerIdCounter:0}),globalThis.snice.pendingControllerAttachments??=new Map;const e=globalThis.snice;function t(e){return Symbol.for(`snice:${e}`)}const n=t("is-controller-class"),o=t("is-controller-instance"),r=t("is-daemon-class"),s=t("is-daemon-instance"),i=t("is-element-class"),a=t("channel-handlers"),c=t("daemon-state"),l=t("ready-promise"),h=t("ready-resolve"),u=t("rendered-promise"),d=t("rendered-resolve"),f=t("pending-reconnect-render"),m=t("render-depth"),p=t("render-root"),y=t("element-options"),g=t("controller"),v=t("initialized"),b=t("controller-key"),w=t("controller-name"),E=t("controller-id"),N=t("controller-operations"),A=t("native-controller"),T=t("controller-registry-name"),S=t("direct-controller"),_=t("controller-attribute-sync"),x=t("pending-controller-binding"),O=t("cleanup"),C=t("properties"),k=t("property-values"),$=t("property-defaults"),L=t("property-wrappers"),P=t("pre-init-property-values"),j=t("pre-upgrade-property-bindings"),M=t("properties-initialized"),R=t("property-watchers"),I=t("explicitly-set-properties"),D=t("router-context"),V=t("page-transition"),q=t("created-at"),B=t("ready-handlers"),F=t("dispose-handlers"),W=t("reconnect-handlers"),z=t("moved-handlers"),U=t("adopted-handlers"),H=t("observers"),K=t("setting-from-property"),G=t("moved-timers"),Q=t("adopted-timers"),J=t("dispatch-timers"),X=t("render-method"),Y=t("render-options"),Z=t("render-instance"),ee=t("render-timers"),te=t("render-callbacks"),ne=t("styles-method"),oe=t("styles-applied"),re=t("parent-styles-methods"),se=t("snice-element-base"),ie=t("context-handler"),ae=t("navigation-context-instance"),ce=t("registered-elements"),le=t("is-updating"),he=t("context-register"),ue=t("context-unregister"),de=t("context-notify-element"),fe=t("context-timer"),me=t("context-called"),pe=t("context-update"),ye=t("context-methods"),ge=t("watch-methods"),ve=t("observe-methods"),be=t("on-methods"),we=t("respond-methods"),Ee=t("ready-methods"),Ne=t("dispose-methods"),Ae=t("reconnect-methods"),Te=t("moved-methods"),Se=t("adopted-methods"),_e=t("controller-abort"),xe=t("controller-attached"),Oe=t("property-definers");class Ce{static{this.SEPARATOR=","}static serialize(e){return Array.isArray(e)?e.map(e=>{if("string"==typeof e){if(e.includes(Ce.SEPARATOR))throw new Error(`SimpleArray strings cannot contain the character "${Ce.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(Ce.SEPARATOR):""}static parse(e){return null==e||""===e?[]:e.split(Ce.SEPARATOR).map(e=>{if(/^-?\d+\.?\d*$/.test(e)){const t=Number(e);if(!isNaN(t))return t}return"true"===e||"false"!==e&&e})}}var ke,$e,Le,Pe;!function(e){e.SEQUENTIAL="sequential",e.SIMULTANEOUS="simultaneous"}(ke||(ke={}));const je=Symbol.for("snice:registered-elements-set");let Me=0;class Re{constructor(e={},t=[],n="",o={},r){if(this[$e]=new WeakMap,this[Le]=new Set,this[Pe]=!1,this.id=Me++,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)}}[($e=ce,Le=je,Pe=le,he)](e,t){const n=this[ce];let o=n.get(e);o||(o=new Set,n.set(e,o)),o.add(t),this[je].add(e)}[ue](e,t){const n=this[ce];if(void 0!==t){const o=n.get(e);if(!o)return;if(o.delete(t),o.size>0)return}n.delete(e),this[je].delete(e)}[pe](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[le])return;this[le]=!0;const e=this[je],t=this[ce];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[le]=!1}[de](e){const t=this[ce].get(e);if(t)for(const n of t)"function"==typeof e[n]&&e[n](this)}}function Ie(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 De(e,t,n,o){const r=t.type||Ie(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 Ce:return Ce.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 Ve(e,t){return e!==t&&(e==e||t==t)}function qe(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 Be(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">")}function Fe(e){return String(e??"").replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function We(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}}function ze(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}}function Ue(e,t){return e[t]||(e[t]=new Set),e[t]}function He(e,t){return e[t]||(e[t]={}),e[t]}function Ke(e,t,n,o,r){const s=t[R];if(!s)return;const i=[n],a=t[C]?.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 Ge(e,t){let n=null;return function(...o){null!==n&&clearTimeout(n),n=setTimeout(()=>{e.apply(this,o),n=null},t)}}function Qe(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 Je(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 Xe(e,t,n){if(null==e||!1===e||t?.type===Ce&&Array.isArray(e)&&0===e.length)return null;if(t.converter?.toAttribute)return t.converter.toAttribute(e,t.type);switch(t.type||Ie(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 Ce:return Array.isArray(e)?Ce.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 Ye=new WeakSet,Ze=new Map;function et(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,ve)||(n[ve]=new Set),n[ve].has(t))return;if(n[ve].add(t),!Object.prototype.hasOwnProperty.call(n,H)){const e=n[H];n[H]=e?[...e]:[]}const i=Array.isArray(e)?e:[e];for(const e of i){const[i,...a]=e.split(":"),c=a.join(":");n[H].push({type:i,target:c,selector:o,methodName:s,method:t,options:r})}})}}function tt(e,t){const n=e.constructor[H];if(n&&Array.isArray(n)&&0!==n.length){e[O]?e[O].observers||(e[O].observers=[]):e[O]={events:[],channels:[],observers:[]};for(const o of n){const n=o.method.bind(e),r=o.options?.throttle?Qe(n,o.options.throttle):n;switch(o.type){case"intersection":nt(e,t,o,r);break;case"resize":ot(e,t,o,r);break;case"media":rt(e,0,o,r);break;case"mutation":st(e,t,o,r);break;default:console.warn(`Unknown observer type: ${o.type}`)}}}}function nt(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[O].observers.push(()=>{i.forEach(e=>s.unobserve(e)),0===s.takeRecords().length&&s.disconnect()})}function ot(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[O].observers.push(()=>{s.disconnect()})}function rt(e,t,n,o){const r=n.target;if(!r)return void console.warn("Media query observer requires a query string");let s=Ze.get(r);if(!s)try{s=window.matchMedia(r),Ze.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[O].observers.push(()=>{s.removeEventListener("change",a)})):(s.addListener(a),e[O].observers.push(()=>{s.removeListener(a)}))}function st(e,t,n,r){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 r(e);const o=n.options.maxDepth,s=t.shadowRoot||t,i=e.filter(e=>{let t=0,n=e.target;for(;n&&n!==s&&t<o;)n=n.parentNode,t++;return t<o});i.length>0&&r(i)}catch(e){console.error(`Error in mutation observer ${n.methodName}:`,e)}}),u=!0===e[o];(n.selector?Array.from(t.shadowRoot?.querySelectorAll(n.selector)||[]):u&&t.shadowRoot?[t.shadowRoot]:[t]).forEach(e=>{h.observe(e,c)}),e[O].observers.push(()=>{h.disconnect()})}function it(e){if(e[O]?.observers){for(const t of e[O].observers)t();e[O].observers=[]}}const at="@context/request",ct=new WeakMap;function lt(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[o]?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(at,{bubbles:!0,composed:!0,cancelable:!0,detail:e})),void 0!==e.context)return e.context}const n=e;return void 0!==n[D]?n[D]:!0===n[o]&&void 0!==n.element?.[D]?n.element[D]:void 0}function ht(e){return!!e&&("object"==typeof e||"function"==typeof e)&&!0===e[r]}function ut(e){if(!ht(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");let t=e[c];if(!t){t={target:new EventTarget,bindings:0,active:!1};try{Object.defineProperty(e,c,{value:t,configurable:!0}),Object.defineProperty(e,s,{value:!0,configurable:!0})}catch{throw new TypeError("@daemon instances must remain extensible until they are provided to an app context.")}}return t}function dt(e,t){if("string"!=typeof t||!t.trim())throw new TypeError("Daemon addresses must be non-empty strings.");const n=lt(e);if(!n)throw new Error(`[snice] ${function(e){const t=e;return!0===t?.[o]?"controller":ht(t)?"@daemon instance":"element"}(e)} cannot resolve daemon "${t}" because no app context is provided.`);const r=n.daemons?.[t];if(!r)throw new Error(`[snice] app context does not provide daemon "${t}".`);if(!ht(r))throw new TypeError(`[snice] app context entry "${t}" is not an instance of an @daemon class.`);const s=ut(r);if(!s.active)throw new Error(`[snice] daemon "${t}" is not active because its app context has not been provided.`);return s.target}function ft(e){return ht(e)?function(e){return ut(e).target}(e):!0===e?.[o]?e.element&&"function"==typeof e.element.dispatchEvent?e.element:null:e&&"function"==typeof e.dispatchEvent?e:null}function mt(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?dt(this,t.daemon):ft(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)})}}}function pt(e,t){return function(n,o){const r=o.name;o.addInitializer(function(){const o=this.constructor;if(Object.prototype.hasOwnProperty.call(o,we)||(o[we]=new Set),!o[we].has(n)){if(o[we].add(n),!Object.prototype.hasOwnProperty.call(o,a)){const e=o[a];o[a]=e?[...e]:[]}o[a].push({channelName:e,methodName:r,method:n,options:t})}})}}function yt(e,t){const n=e.constructor[a];if(n){e[O]||(e[O]={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=dt(e,o.options.daemon)}catch(e){console.warn(`[snice/@respond] ${e.message} Responder "${o.channelName}" skipped.`);continue}d.addEventListener(r,u),e[O].channels.push(()=>{d.removeEventListener(r,u)})}}}function gt(e){if(e[O]?.channels){for(const t of e[O].channels)t();e[O].channels=[]}}const vt=new Set(["once","prevent","preventdefault","stop","stoppropagation","capture","passive"]);function bt(e){const t=e.lastIndexOf(".");if(t<0)return;const n=e.slice(t+1).toLowerCase();vt.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 wt(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=Et(e)}return o}function Et(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 Nt(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 At=t("on-handlers");function Tt(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,be)||(n[be]=new Set),!n[be].has(a)){if(n[be].add(a),!Object.prototype.hasOwnProperty.call(n,At)){const e=n[At];n[At]=e?[...e]:[]}for(const e of i)n[At].push({eventName:e,selector:o,methodName:s,method:t,options:r})}}),t}}function St(e,t){let n=0;return function(...o){const r=Date.now();r-n>=t&&(n=r,e.apply(this,o))}}const _t=new Set(["scroll","focus","blur","load","unload","error","resize","abort","mouseenter","mouseleave","pointerenter","pointerleave"]);function xt(e,t){const n=e.constructor[At];if(n&&Array.isArray(n)&&0!==n.length){e[O]?e[O].events?e[O].events.length>0&&Ot(e):e[O].events=[]:e[O]={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&&bt(o.eventName),s.debounce&&s.debounce>0?r=Ge(r,s.debounce):s.throttle&&s.throttle>0&&(r=St(r,s.throttle));let d=null;u&&["keydown","keyup","keypress"].includes(h)&&(d=wt(u));const f=(e=>d?t=>{Nt(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||ht(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=dt(e,s.daemon)}catch(e){console.warn(`[snice/@on] ${e.message} Listener "${o.eventName}" skipped.`);continue}else if(m&&(g=Je(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=_t.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[O].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[O].events.push({target:g,eventName:h,handler:i,options:a});continue}n&&(n.addEventListener(h,i,a),e[O].events.push({target:n,eventName:h,handler:i,options:a})),t.addEventListener(h,i,a),e[O].events.push({target:t,eventName:h,handler:i,options:a})}}}}function Ot(e){if(e[O]?.events){for(const{target:t,eventName:n,handler:o,options:r}of e[O].events)t.removeEventListener(n,o,r);e[O].events=[]}}class Ct{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 kt(t){return function(o,r){const s=globalThis.snice?.controllerRegistry;if(!s)throw new Error("Snice global registry not initialized");s.set(t,o),o.prototype[n]=!0,Object.defineProperty(o,T,{value:t,configurable:!0});const i=e.pendingControllerAttachments.get(t);return i&&(e.pendingControllerAttachments.delete(t),queueMicrotask(()=>{for(const e of i){const n=e[A];(void 0===n?e[g]:n)===t&&Mt(e,t).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${t}":`,e)})}})),o}}function $t(t,n){if(e.controllerRegistry.has(n))return void queueMicrotask(()=>{const e=t[A];(void 0===e?t[g]:e)===n&&Mt(t,n).catch(e=>{"ControllerAttachAborted"!==e?.name&&console.error(`Failed to attach controller "${n}":`,e)})});let o=e.pendingControllerAttachments.get(n);o||(o=new Set,e.pendingControllerAttachments.set(n,o)),o.add(t),queueMicrotask(()=>{e.pendingControllerAttachments.get(n)?.has(t)&&console.error(`Failed to attach controller "${n}":`,new Error(`Controller "${n}" not found in registry`))})}function Lt(e){return"string"==typeof e?e:e?.name||"(anonymous controller class)"}function Pt(e,t){if(null===t){if(!e.hasAttribute("controller"))return}else if(e.getAttribute("controller")===t)return;e[_]=!0;try{null===t?e.removeAttribute("controller"):e.setAttribute("controller",t)}finally{delete e[_]}}function jt(e){if(!e[S])return!1;const t=e[w];return"function"==typeof t&&(Pt(e,function(e){const t=Object.prototype.hasOwnProperty.call(e,T)?e[T]:void 0;return"string"==typeof t?t:Lt(e)}(t)),!0)}async function Mt(t,r){if("string"!=typeof r){if("function"!=typeof r)throw new Error(`attachController: expected a controller name or a controller class, got ${typeof r}. Controller instances are not supported — pass the class itself.`);if("function"!=typeof(s=r)||!0!==s.prototype?.[n])throw new Error(`Controller class "${Lt(r)}" must be decorated with @controller('name') before it can be attached.`)}var s;const i=Lt(r),a=t[b],c=t[A];if("string"==typeof r&&void 0!==c&&c!==r)return;if(t[w]===r&&a)return void("string"!=typeof r&&jt(t));if(a&&(await Rt(t),t[b]&&t[w]===r))return void("string"!=typeof r&&jt(t));let l;if("string"==typeof r){const e=globalThis.snice?.controllerRegistry;if(!e)throw new Error("Snice global registry not initialized");if(l=e.get(r),!l)throw new Error(`Controller "${r}" not found in registry`)}else l=r;const h=new l;"string"!=typeof r&&(t[S]=!0,delete t[A]),e.controllerIdCounter+=1;const u=e.controllerIdCounter,d=new Ct;h[o]=!0,h[E]=u,h.element=t;const f=t[D];void 0!==f&&(h[D]=f),t[b]=h,t[w]=r,t[N]=d,"string"!=typeof r&&jt(t);const m=new AbortController;t[_e]=m;try{await Promise.race([t.ready,new Promise((e,t)=>{const n=()=>{const e=new Error(`attachController("${i}"): aborted before element was ready (likely detached or never connected)`);e.name="ControllerAttachAborted",t(e)};if(m.signal.aborted)return n();m.signal.addEventListener("abort",n,{once:!0});const o=setTimeout(()=>t(new Error(`attachController("${i}"): element did not become ready within 30000ms (did you forget to appendChild it?)`)),3e4);m.signal.addEventListener("abort",()=>clearTimeout(o),{once:!0})})])}catch(e){throw t[b]===h&&("string"!=typeof r&&Pt(t,null),delete t[b],delete t[w],delete t[N],"string"!=typeof r&&delete t[S]),e}finally{t[_e]===m&&delete t[_e]}h[xe]=!0,await d.runOperation(async()=>{await h.attach(t)}),tt(h,t),yt(h,t),xt(h,t),t.dispatchEvent(new CustomEvent("controller-attached",{detail:{name:i,controller:h}}))}async function Rt(e){const t=e[_e];t&&t.abort();const n=e[b],o=e[w],r=e[N];n&&("function"==typeof o&&Pt(e,null),delete e[b],delete e[w],delete e[N],"function"==typeof o&&delete e[S],n[xe]&&(r?await r.runOperation(async()=>{await n.detach(e)}):await n.detach(e),n.element=null,it(n),gt(n),Ot(n),r&&await r.cleanup(),delete n[D],e.dispatchEvent(new CustomEvent("controller-detached",{detail:{name:void 0===o?void 0:Lt(o),controller:n}}))))}function It(e){return e[b]}function Dt(){if(globalThis.sniceNativeControllersInitialized)return;function e(e){if(!(e instanceof HTMLElement))return;if(!e.tagName||e.tagName.includes("-"))return;if(e[i])return;if(e[S])return void jt(e);const t=e.getAttribute("controller"),n=e[A];if(t!==n&&(t||void 0!==n)){if(!t)return delete e[A],delete e[w],void Rt(e).catch(e=>{console.error("Failed to detach controller from native element:",e)});e[A]=t,e.ready||(e.ready=Promise.resolve()),n&&Rt(e).catch(e=>{console.error("Failed to detach old controller from native element:",e)}),Mt(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):$t(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 Vt=t("context-handlers");function qt(e={}){return function(t,n){const o=n.name;return n.addInitializer(function(){const n=this.constructor;if(Object.prototype.hasOwnProperty.call(n,ye)||(n[ye]=new Set),!n[ye].has(t)){if(n[ye].add(t),!Object.prototype.hasOwnProperty.call(n,Vt)){const e=n[Vt];n[Vt]=e?[...e]:[]}n[Vt].push({methodName:o,method:t,options:e})}}),t}}function Bt(e){const t=e.constructor[Vt];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[ie];if(n){e[ae]=n;for(const o of t){const{methodName:t,method:r,options:s}=o,i=`__wrapped_${t}`;e[i]=function(n){const o=e[me]||(e[me]=new Set);if(s.once&&o.has(t))return;const a=()=>{if(r.call(e,n),s.once){o.add(t);const n=e[ae];n&&"function"==typeof n[ue]&&n[ue](e,i)}},c=e[fe]||(e[fe]={}),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[he]&&n[he](e,i)}}}const Ft=Symbol.for("snice:html-result"),Wt=Symbol.for("snice:css-result"),zt=new WeakMap;function Ut(e,...t){return{_$litType$:Ft,strings:e,values:t}}function Ht(e,...t){return{_$litType$:Ft,strings:e,values:t,svg:!0}}function Kt(e,...t){const n=0===t.length?zt.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+=(Qt(r)?r.cssText:String(r))+e[n+1]}const r={_$litType$:Wt,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&&zt.set(e,r),r}function Gt(e){return e&&e._$litType$===Ft}function Qt(e){return e&&e._$litType$===Wt}const Jt=Symbol.for("snice:nothing"),Xt=Symbol.for("snice:unsafe-html");function Yt(e){return{_$litType$:Xt,html:e}}function Zt(e){return e&&e._$litType$===Xt}const en=Symbol.for("snice:repeat-result");function tn(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$:en,items:n,keys:o,values:n.map(t.render),empty:0===n.length?"function"==typeof t.empty?t.empty():t.empty:void 0}}const nn=new WeakSet;function on(e){return e[p]||e.shadowRoot||null}function rn(e){const t=on(e);if(t)return t;const n=e.constructor[y];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[p]=o,nn.add(e),o}function sn(e){const t=e.getRootNode();if(t instanceof ShadowRoot)return t.host;let n=e;for(;n;){if(n instanceof HTMLElement&&nn.has(n))return n;n=n.parentNode}return null}const an=`snice$${Math.random().toFixed(9).slice(2)}$`,cn="?"+an,ln=`\x3c!--${cn}--\x3e`,hn=new RegExp(an.replace(/\$/g,"\\$"),"g"),un=new WeakMap,dn=Symbol("not-committed");function fn(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[j]||(r[j]=new Set),r[j].add(t)}const mn=Symbol.for("snice:no-change"),pn=Symbol.for("snice:live");function yn(e){return{_$liveMarker$:pn,value:e}}const gn=e=>null===e||"object"!=typeof e&&"function"!=typeof e,vn=e=>!!e&&"function"==typeof e[Symbol.asyncIterator];class bn{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(an))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(an))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(an))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(an))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(an)&&(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(an)){o.push(i);const t=n[r]||i.name,s=a.split(an),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===cn){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(an)){const t=e.data.split(hn);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(an)){const n=e.parentNode,o=t.split(hn),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 wn(e){const{strings:t}=e,n=un.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(an);else if(i)r.push(l),o.push(an);else if(s){const e=n.trimEnd();if(e.endsWith("=")){let t=e.length-2;for(;t>=0&&/[\w\-\.@\?\/:\+~|]/.test(e[t]);)t--;l=e.substring(t+1,e.length-1).trim(),r.push(l),o.push(an)}else{if(!n.match(/<(if|else-if|case|when)\s*$/))throw new Error("snice: expressions directly in opening tags are not supported; use an explicit attribute, property, event, class, style, or named spread binding.");l="value",r.push("value"),o.push(`value="${an}"`)}}else r.push(""),o.push(ln)}}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;const d=new bn(e,u,r);return un.set(t,d),d}function En(e){if(!Gt(e))return;const t=wn(e);return-1===t.keyIndex?void 0:e.values[t.keyIndex]}class Nn{constructor(e){this.parts=[],this.fragment=null,this.conditionalParts=[],this.regularParts=[],this.template=wn(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 Tn(e,r);break;case"attribute":const i=n.get(t.element);o=new Sn(i,t.name,t.attrStrings);break;case"property":const a=n.get(t.element);o=new kn(a,t.name);break;case"boolean-attribute":const c=n.get(t.element);o=new Ln(c,t.name);break;case"event":const l=n.get(t.element);o=new Pn(l,t.name);break;case"class":const h=n.get(t.element);o=new xn(h,t.name);break;case"style":const u=n.get(t.element);o=new On(u,t.name);break;case"spread":const d=n.get(t.element);o=new Cn(d,t.name);break;case"controller":const f=n.get(t.element);o=new $n(f);break;case"conditional-if":const m=n.get(t.element);o=new Mn(m);break;case"conditional-else-if":const p=n.get(t.element);o=new In(p);break;case"conditional-case":const y=n.get(t.element);o=new Dn(y,s);break;case"conditional-when":const g=n.get(t.element);o=new qn(g);break;case"comment":const v=n.get(t.startNode);o=new _n(v,t.attrStrings);break;default:throw new Error(`Unknown part type: ${t.type}`)}this.parts.push(o),o instanceof Mn||o instanceof In||o instanceof Dn||o instanceof qn?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 In||e instanceof qn?e.coordinator:e;t.has(n)||(t.add(n),(n instanceof Mn||n instanceof Dn)&&n.flush())}for(const{part:t,index:n}of this.regularParts)t instanceof Sn&&void 0!==t.strings||t instanceof _n?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 An{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 Tn extends An{constructor(e,t){super(),this.type="node",this._committedValue=dn,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!==mn)if((e=>!!e&&"function"==typeof e.then)(e)||vn(e))this._commitAsync(e);else if(!this._committingAsyncValue&&this._asyncSource&&this._cancelAsync(!0),e!==Jt&&null!=e&&""!==e)gn(e)?e!==this._committedValue&&this._commitText(e):Gt(e)?this._commitTemplateResult(e):function(e){return!!e&&e._$repeat$===en}(e)?0===e.values.length?this.commit(e.empty??Jt):this._commitIterable(e.values,e.keys):Zt(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!==Jt){const e=this._clear();if(this._committedValue=Jt,e)throw e}this._committedValue=Jt}}_commitText(e){if(this._committedValue!==dn&&this._committedValue!==Jt&&gn(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 Nn){const n=un.get(e.strings);if(n&&t.template===n)return void t.update(e.values)}const n=new Nn(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(En);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 Tn||(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 Tn(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 Tn(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(Zt(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=Jt,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(vn(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=Jt,n;let o=this.startNode.nextSibling;for(;o&&o!==this.endNode;){const t=o.nextSibling;e.removeChild(o),o=t}return this._committedValue=Jt,n}_disposeCommitted(e){let t;if(e instanceof Nn)try{e.clear()}catch(e){t=e}else if(Array.isArray(e))for(const n of e)if(n instanceof Tn)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 Nn)try{this._committedValue.disconnected(e)}catch(e){t??=e}else if(Array.isArray(this._committedValue))for(const n of this._committedValue)if(n instanceof Tn)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 Nn)try{this._committedValue.reconnected()}catch(t){e??=t}else if(Array.isArray(this._committedValue))for(const t of this._committedValue)if(t instanceof Tn)try{t.reconnected()}catch(t){e??=t}if(!this._asyncSource||this._asyncStarted&&!this._asyncPaused||this._startAsyncSource(!0),e)throw e}}class Sn extends An{constructor(e,t,n){super(),this.type="attribute",this._committedValue=dn,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(dn),this.strings=n):this._committedValue=dn}commit(e,t=0){let n,o=!1;if(void 0===this.strings){if(e===mn)return;if(o=!gn(e)||e!==this._committedValue&&e!==mn,!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===mn&&(i=s[e],i===dn&&(i="")),o=o||!gn(i)||i!==s[e],i===Jt?n=Jt:n!==Jt&&(n=n+(i??"")+this.strings[e+1]),s[e]=i}if(!o)return}this._commitValue(n)}_commitValue(e){e===Jt?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,String(e??""))}clear(){this.element.removeAttribute(this.name)}}class _n extends An{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(dn)}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===mn&&(s=this._committedValues[e],s===dn&&(s="")),o=o||!gn(s)||s!==this._committedValues[e],this._committedValues[e]=s,r+=String(s===Jt?"":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 xn extends An{constructor(e,t){super(),this.type="class",this.committed=dn,this.element=e,this.name=t}commit(e){if(e===mn)return;const t=e!==Jt&&Boolean(e);t!==this.committed&&(this.committed=t,this.element.classList.toggle(this.name,t))}clear(){this.element.classList.remove(this.name),this.committed=dn}}class On extends An{constructor(e,t){super(),this.type="style",this.committed=dn,this.element=e,this.name=t}commit(e){if(e===mn||Object.is(e,this.committed))return;this.committed=e;const t=this.element.style;e===Jt||null==e||!1===e?t.removeProperty(this.name):t.setProperty(this.name,String(e))}clear(){this.element.style.removeProperty(this.name),this.committed=dn}}class Cn extends An{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===mn)return;if(e!==Jt&&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)||(fn(this.element,t),this.element[t]=void 0);for(const[t,n]of Object.entries(e))Object.is(this.committed[t],n)||(fn(this.element,t),this.element[t]=n===Jt?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===Jt||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!==Jt&&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===Jt||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 sn(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 kn extends An{constructor(e,t){super(),this.type="property",this._committedValue=dn,this.element=e,this.name=t}commit(e){if(e!==mn){if(function(e){return e&&e._$liveMarker$===pn}(e)){if((e=e.value)===mn)return;if(e===this.element[this.name])return void(this._committedValue=e)}else if(e===this._committedValue)return;this._committedValue=e,fn(this.element,this.name),this.element[this.name]=e===Jt?void 0:e}}clear(){this._committedValue=dn}}class $n extends An{constructor(e){super(),this.type="controller",this._committedValue=dn,this.element=e}commit(e){if(e===mn)return;const t=null==e||!1===e||""===e||e===Jt?null:e,n=this._committedValue===dn,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[x]?delete r[x]:r[i]?r.controller=null:this._detach()),"function"==typeof t?this.isConnected?this._apply(t):this.element.localName.includes("-")&&!r[i]&&(r[x]=t):"string"==typeof t?this.element.setAttribute("controller",t):"string"==typeof o&&this.element.removeAttribute("controller")}_apply(e){const t=this.element;t[i]?t.controller!==e?t.controller=e:this._attach(e):this.element.localName.includes("-")?t[x]=e:(t.ready||(t.ready=Promise.resolve()),this._attach(e))}_attach(e){Mt(this.element,e).catch(t=>{"ControllerAttachAborted"!==t?.name&&console.error(`Failed to attach controller "${e?.name||e}":`,t)})}_detach(){Rt(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[x]&&(t[i]||this._detach())}reconnected(){const e=this._committedValue;"function"==typeof e&&this._apply(e)}clear(){const e=this.element;void 0!==e[x]&&delete e[x];const t=this._committedValue;this._committedValue=dn,"function"==typeof t&&(e[i]||this._detach())}}class Ln extends An{constructor(e,t){super(),this.type="boolean-attribute",this._committedValue=dn,this.element=e,this.name=t}commit(e){if(e===mn)return;const t=!!e&&e!==Jt;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=dn}}class Pn extends An{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=wt(t)}else this.eventName=n,bt(n)}commit(e){if(e===mn)return;e===Jt&&(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&&!Nt(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=sn(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 jn=Symbol("not-set");class Mn extends An{constructor(e){super(),this.type="node",this.conditions=[jn],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]=jn,Rn.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!==mn&&(this.conditions[0]=e)}setAlternative(e,t){t!==mn&&(this.conditions[e]=t)}flush(){let e=-1;for(let t=0;t<this.conditions.length;t++)if(this.conditions[t]!==jn&&this.conditions[t]!==Jt&&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 Rn=new WeakMap;class In extends An{constructor(e){super(),this.type="node";const t=Rn.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 Dn extends An{constructor(e,t){super(),this.type="node",this.value=jn,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?jn:n.getAttribute("value")??""})-1;o&&Vn.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:jn})-1}}n.removeChild(e)}commit(e){e!==mn&&(this.value=e)}setExpected(e,t){t!==mn&&(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 Vn=new WeakMap;class qn extends An{constructor(e){super(),this.type="node";const t=Vn.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}}let Bn=!1;function Fn(e){Bn=e}function Wn(e){e[d]||(e[u]=new Promise(t=>{e[d]=t}))}function zn(e){const t=e[d];t&&(e[d]=null,t())}const Un=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[Y]||{}):t[f]=!0}remove(e){this.pending.delete(e)}};function Hn(e){return Object.prototype.hasOwnProperty.call(e,Z)}function Kn(e){const t=e[te];if(!t||0===t.length)return;const n=[...t];e[te]=[],n.forEach(e=>e())}const Gn=50;function Qn(e,t,n){const o=arguments.length>=3,r=e[X];if(!r)return void zn(e);if(t.once&&Hn(e))return void zn(e);const s=e[m]??0;if(s>=Gn){const t=e.tagName?e.tagName.toLowerCase():"element";return console.error(`snice: maximum render depth (${Gn}) exceeded for <${t}>. render() is mutating an observed property, causing an infinite render loop.`),void zn(e)}e[m]=s+1;try{const s=o?n:r.call(e),i=rn(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[Z];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[Z]=null,void Kn(e)}if(!Gt(s))return void console.warn("Render method must return html`` template result");let a=e[Z];if(a&&a.isSameTemplate(s.strings))return a.update(s.values),void Kn(e);const c=new Nn(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[Z]=c;try{a?.clear()}catch(e){u=e}if(Kn(e),u)throw u}catch(e){if(Bn)throw e;console.error("Error rendering element:",e)}finally{e[m]=s,zn(e)}}function Jn(e,t=!1){const n=e[Y]||{};if(n.once&&Hn(e))e.isConnected&&Xn(e);else if(Wn(e),t)Qn(e,n);else{if(void 0!==n.debounce&&n.debounce>0)return e[ee]||(e[ee]={}),clearTimeout(e[ee].debounce),void(e[ee].debounce=setTimeout(()=>{e[ee].debounce=null,Un.schedule(e,n)},n.debounce));if(void 0!==n.throttle&&n.throttle>0){e[ee]||(e[ee]={lastThrottle:0});const t=e[ee],o=Date.now();return 0===t.lastThrottle||o-t.lastThrottle>=n.throttle?(t.lastThrottle=o,void Un.schedule(e,n)):void(t.throttleTimer||(t.throttleTimer=setTimeout(()=>{t.throttleTimer=null,t.lastThrottle=Date.now(),Un.schedule(e,n)},n.throttle-(o-t.lastThrottle))))}Un.schedule(e,n)}}function Xn(e){const t=e[Z];t?.reconnected()}function Yn(e={}){return function(t,n){return n.addInitializer(function(){this[X]=t,this[Y]=e}),function(...n){const o=t.apply(this,n);return Qn(this,{...this[Y]||e,once:!1},o),o}}}function Zn(){return function(e,t){return t.addInitializer(function(){this[ne]&&!this[re]?this[re]=[this[ne]]:this[ne]&&this[re]&&this[re].push(this[ne]),this[ne]=e}),e}}function eo(e,t){return function(n,o){return function(...r){this[J]||(this[J]=new Map);const s=`${e}_${o.name}`;this[J].has(s)||this[J].set(s,{debounceTimeout:null,throttleLastCall:0,throttleTimeout:null});const i=this[J].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 dt(this,t.daemon).dispatchEvent(o);if(void 0!==t?.scope){const n=Je(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=ft(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)}}}function to(e){const t=e[J];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 no=t("debounce-timers"),oo=t("throttle-timers"),ro=t("once-called"),so=t("memoize-cache");function io(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[no]||(this[no]={});const a=this[no],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}}}}function ao(e=300,t={}){const{leading:n=!0,trailing:o=!0}=t;return function(t,r){const s=r.name;return function(...r){this[oo]||(this[oo]={});const i=this[oo],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))}}}function co(e=!0){let t,n=!1;return function(o,r){const s=r.name;return function(...r){return e?(this[ro]||(this[ro]={}),this[ro][s]||(this[ro][s]={called:!0,result:o.apply(this,r)}),this[ro][s].result):(n||(n=!0,t=o.apply(this,r)),t)}}}function lo(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[so]||(this[so]={}),this[so][s]||(this[so][s]=new Map);const i=this[so][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}}}function ho(e){if(e[no]){for(const t in e[no])e[no][t]?.timeout&&clearTimeout(e[no][t].timeout);e[no]={}}}function uo(e){if(e[oo]){for(const t in e[oo])e[oo][t]?.timeout&&clearTimeout(e[oo][t].timeout);e[oo]={}}}function fo(e,t){e[so]&&(t?delete e[so][t]:e[so]={})}function mo(e,t){e[ro]&&(t?delete e[ro][t]:e[ro]={})}function po(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 yo(e){e.prototype[i]=!0;const t=e.prototype.connectedCallback,n=e.prototype.disconnectedCallback,o=e.prototype.attributeChangedCallback,r=e.observedAttributes||[];r.includes("controller")||r.push("controller");const s=e[C];if(s)for(const[e,t]of s){if(!1===t.attribute)continue;const n=qe(t,e);r.includes(n)||r.push(n)}Object.defineProperty(e,"observedAttributes",{get:()=>r,configurable:!0}),Object.defineProperty(e.prototype,"ready",{get(){return this[l]||(this[l]=new Promise(e=>{this[h]=e})),this[l]},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"rendered",{get(){return this[d]?this[u]:Promise.resolve()},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"controller",{get(){return this[g]},set(e){const t=this[g];if(this[g]=e,e!==t){if(e){const t="string"==typeof e?e:e.name||"(anonymous controller class)";return void Mt(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):$t(this,e):console.debug(`Controller "${t}" attach aborted (element detached before ready)`)})}t&&Rt(this).catch(e=>{console.error("Failed to detach controller:",e)})}},enumerable:!0,configurable:!0}),e.prototype.connectedCallback=async function(){if(this[l]||(this[l]=new Promise(e=>{this[h]=e})),this[v]){try{Xn(this)}catch(e){console.error(`Error reconnecting the render tree for ${this.tagName}:`,e)}xt(this,this),yt(this,this),Bt(this);try{tt(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName} on reconnection:`,e)}t&&t.call(this);const n=e[W];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 void(this[X]&&this[f]&&(this[f]=!1,Jn(this)))}this[M]=!0;const n=e[C];if(n)for(const[e,t]of n){if(!1===t.attribute)continue;const n=qe(t,e);if(!this.hasAttribute(n))continue;const o=this.getAttribute(n);Ue(this,I).add(e),t.type===Boolean&&""===o&&this.setAttribute(n,"true"),this[e]=De(o,t)}if(this[P]){for(const[e,t]of Array.from(this[P].entries())){const o=n?.get(e),r=qe(o||{},e);this[P].delete(e),this.hasAttribute(r)||(this[e]=t)}delete this[P]}if(void 0!==this[x]){const e=this[x];if(delete this[x],!this[g]){this[g]=e;const t=e?.name||"(anonymous controller class)";Mt(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[g]){const e=this.getAttribute("controller");e&&(this.controller=e)}!function(e){const t=e[ne],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)Qt(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[oe]){e[oe]=!0;try{const o=[...n],r=e[re];if(r)for(const t of r){const n=t.call(e);Qt(n)&&o.push(n)}if(t){const n=t.call(e);if(!Qt(n))return void console.warn("Styles method must return css`` template result");o.push(n)}const s=rn(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),xt(this,this),yt(this,this),Bt(this),this[v]=!0,function(e,t){if(Ye.has(t))return;Ye.add(t);const n=t[R];if(!n||0===n.size)return;const o=t[C],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[R],o=t[C];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[B];if(await new Promise(e=>queueMicrotask(e)),this.isConnected){this[X]&&Jn(this,!0);try{tt(this,this)}catch(e){console.error(`Error setting up observers for ${this.tagName}:`,e)}if(await new Promise(e=>queueMicrotask(e)),this.isConnected){if(o)for(const e of o)try{await e.method.call(this)}catch(t){console.error(`Error in @ready handler ${e.methodName}:`,t)}this[h]&&(this[h](),this[h]=null)}else this[h]&&(this[h](),this[h]=null)}else this[h]&&(this[h](),this[h]=null)},e.prototype.disconnectedCallback=async function(){try{!function(e){const t=e[Z];t?.disconnected(!0)}(this)}catch(e){console.error(`Error disconnecting the render tree for ${this.tagName}:`,e)}const t=e[F];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[g]&&Rt(this).catch(e=>{console.error("Failed to detach controller:",e)}),Ot(this),gt(this),function(e){const t=e.constructor[Vt];if(!t||!Array.isArray(t)||0===t.length)return;const n=e[fe];if(n&&"object"==typeof n){for(const e of Object.keys(n))n[e]?.timeout&&clearTimeout(n[e].timeout);delete e[fe]}for(const n of t)delete e[`__wrapped_${n.methodName}`];const o=e[ae];o&&"function"==typeof o[ue]&&o[ue](e),delete e[ae],delete e[me]}(this),it(this),ho(this),uo(this),function(e){const t=e[ee];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[f]=!0),to(this),Po(this,G),Po(this,Q)},e.prototype.attributeChangedCallback=function(t,n,r){if(o?.call(this,t,n,r),"controller"===t){if(this[_])return;return this[S]?void jt(this):void(this.controller=r)}const s=e[C];if(s)for(const[n,o]of s){if(qe(o,n).toLowerCase()!==t.toLowerCase())continue;if(this[K]?.has(t.toLowerCase()))break;const s=this[k]?.[n],i=this[$]?.[n];let a=null===r?o.type!==Boolean&&i:De(r,o,s,i);const c=this[L]?.[n];if(c&&(a=c(a)),!(o?.hasChanged?o.hasChanged(a,s):Ve(a,s)))break;Ue(this,I).add(n),He(this,k)[n]=a,this[v]&&Ke(this,e,n,s,a),this[X]&&this[v]&&Jn(this);break}},e.prototype.connectedMoveCallback=async function(){const t=e[z];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[U];if(t)for(const e of t)try{await this[e.methodName]()}catch(t){console.error(`Error in @adopted handler ${e.methodName}:`,t)}}}function go(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[C]){e[C]||(e[C]=new Map);for(const[n,o]of t[C])e[C].has(n)||e[C].set(n,o)}t.formAssociated&&!e.formAssociated&&(e.formAssociated=!0)}}(t),n.metadata&&n.metadata[C]){t[C]||(t[C]=new Map);for(const[e,o]of n.metadata[C])t[C].set(e,o)}else if(wo.length>0){t[C]||(t[C]=new Map);const e=wo.pop();for(const[n,o]of e)t[C].set(n,o)}o?.formAssociated&&(t.formAssociated=!0);const r={...Object.getPrototypeOf(t)?.[y]||{}},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[y]=i,!0===t.prototype[se]&&Object.prototype.hasOwnProperty.call(t.prototype,"render")&&!Object.prototype.hasOwnProperty.call(t.prototype,X)&&"function"==typeof t.prototype.render&&(t.prototype[X]=t.prototype.render,t.prototype[Y]=t.renderOptions||{}),yo(t),customElements.get(e)?(globalThis.SNICE_DEBUG&&console.warn(`[snice] "${e}" is already registered. Skipping.`),t):(customElements.define(e,t),t)}function vo(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 go(e,n,o,t)}}function bo(e){return function(t,n){return go(e,t,n)}}const wo=[],Eo=new WeakMap;function No(e){return function(t,n){const o=n.name;return n.metadata?(n.metadata[C]||(n.metadata[C]=new Map),n.metadata[C].set(o,e||{})):(0===wo.length&&wo.push(new Map),wo[wo.length-1].set(o,e||{})),function(t){const n=this[j],r=!0===n?.delete(o);0===n?.size&&delete this[j];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[C]||(c[C]=new Map);const l={...e};l.type||void 0===t||(l.type=Ie(t)),l.attributeNaming||"kebab"!==c.propertyAttributeNaming||(l.attributeNaming="kebab"),c[C].set(o,l),He(this,$)[o]=t;const h=()=>{if(!this[M])return;const e=this[k]?.[o];if(!1!==l.attribute&&!1!==l.reflect){const n=qe(l,o),r=Xe(e,l,t),s=n.toLowerCase();Ue(this,K).add(s);try{null===r?this.removeAttribute?.(n):this.setAttribute?.(n,r)}finally{this[K].delete(s)}}this[v]&&(Ke(this,this.constructor,o,e,e),this[X]&&Jn(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=po(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=po(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=po(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[k]?.[o]===t&&h()}),t};He(this,L)[o]=u;const d=this.constructor.prototype;let f=d[Oe];f&&Object.prototype.hasOwnProperty.call(d,Oe)||(f=new Map(f),d[Oe]=f);const m=f.get(o);m&&m===e||(f.set(o,e),Object.defineProperty(this.constructor.prototype,o,{get(){return this[P]?.has(o)?this[P].get(o):this[k]&&o in this[k]?this[k][o]:t},set(e){const t=this[o];if(!(l.hasChanged?l.hasChanged(e,t):Ve(e,t)))return;const n=(this[L]?.[o]||(e=>e))(e);if(!this[M])return this[P]||(this[P]=new Map),void this[P].set(o,n);if(He(this,k)[o]=n,!1!==l.attribute&&!1!==l.reflect){const e=qe(l,o),t=Xe(n,l,this[$]?.[o]);Ue(this,I).add(o);const r=e.toLowerCase();Ue(this,K).add(r);try{null===t?this.removeAttribute?.(e):this.setAttribute?.(e,t)}finally{this[K].delete(r)}}this[v]&&(Ke(this,this.constructor,o,t,n),this[X]&&Jn(this))},configurable:!0,enumerable:!0}));const p=u(t);return He(this,k)[o]=p,He(this,$)[o]=p,i?a:p}}}function Ao(e={}){return No({...e,attribute:!1,reflect:!1})}function To(e){return!0===e[o]&&e.element?e.element:e}function So(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=To(this);let n=null;const o=t instanceof HTMLElement?on(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}}}function _o(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=To(this),n=new Set,o=t instanceof HTMLElement?on(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}}}function xo(...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,ge)||(n[ge]=new Map);let s=n[ge].get(e);if(s||(s=new Set,n[ge].set(e,s)),!Object.prototype.hasOwnProperty.call(n,R)){const e=n[R],t=new Map;if(e)for(const[n,o]of e)t.set(n,[...o]);n[R]=t}for(const i of t)s.has(i)||(s.add(i),n[R].has(i)||n[R].set(i,[]),n[R].get(i).push({methodName:r,method:e,immediate:o}))})}}function Oo(){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[D])return this[D];const e=lt(this);return void 0!==e?e:void 0},set(){},configurable:!0,enumerable:!0}),e}}}function Co(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 ko(){return function(e,t){Co(B,Ee,e,t)}}function $o(){return function(e,t){Co(F,Ne,e,t)}}function Lo(){return function(e,t){Co(W,Ae,e,t)}}function Po(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 jo(e,t,n){return function(o={}){return function(r,s){Co(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 Mo=jo(z,G,Te),Ro=jo(U,Q,Se);class Io extends HTMLElement{static{this.propertyAttributeNaming="kebab"}createRenderRoot(){const e=this.constructor[y];return this.attachShadow({mode:"string"==typeof e?.shadow?e.shadow:"open",delegatesFocus:e?.delegatesFocus})}invalidate(){return Jn(this),this.rendered}renderNow(){return function(e){Wn(e),Qn(e,{...e[Y]||{},once:!1})}(this),this.rendered}}Object.defineProperty(Io.prototype,se,{value:!0});class Do{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 Vo(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 qo(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 Bo(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 Fo(e,t){Object.defineProperty(e.prototype,r,{value:!0,configurable:!0})}function Wo(e){if(!ht(e))throw new TypeError("Application contexts may provide only instances of @daemon classes.");const t=ut(e);if(0===t.bindings){t.active=!0;try{xt(e,t.target),yt(e,t.target)}catch(n){throw gt(e),Ot(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&&(gt(e),Ot(e),to(e),t.active=!1,t.target=new EventTarget))}}function zo(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(ct.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(at,n),ct.set(e,{listener:n});let o=!1;return()=>{if(o)return;o=!0;const t=ct.get(e);t?.listener===n&&(e.removeEventListener(at,n),ct.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(Wo(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 Uo=new WeakMap;var Ho;function Ko(e){const t=e.window??window,n=e.document??document,o=[];let r,s,i,a=!1,c=[],l=null,h=null;const u=e.context||{};let d=null,f=null;const m=new Re(u,[],"",{},e.fetcher);function p(e){if(d===e&&f&&Uo.get(e)===f)return;f?.(),Uo.get(e)?.();const t=zo(e,u);let n=!1;const o=()=>{n||(n=!0,t(),Uo.get(e)===o&&Uo.delete(e))};f=o,d=e,Uo.set(e,o)}function y(e){if(!l||!h)return null;const t=e.querySelectorAll(l);for(const e of t)if(e[q]===h)return e;return null}function g(e,t,n,c,l,h){switch(o.push({route:new Do(e),tag:t,transition:n,guards:c,layout:l,placard:h}),a=!1,e){case"/404":r=t;break;case"/403":s=t;break;case"/":i=t}}function v(){const e=new Set;c=o.filter(e=>e.placard).map(e=>{const t=e.placard;return"function"==typeof t?t(u):t}).filter(t=>!e.has(t.name)&&(e.add(t.name),!0))}function b(e,t,n){m[pe](u,c,t,n)}function w(){switch(e.type){case"hash":return t.location.hash.slice(1);case"pushstate":return`${t.location.pathname}${t.location.search}`}}function E(e){let t;if(s)t=n.createElement(s),t[D]=u;else{const e=n.createElement("div");e.className="default-403",e.innerHTML="<h1>403</h1><p>Unauthorized</p>",t=e}e.innerHTML="",e.appendChild(t),l=null,h=null}async function N(e,t,o,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=n.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}(),o.appendChild(i))},50);try{for(const e of s)if(!await e(u,t))return r&&r()||E(o),!1;return!0}finally{a&&clearTimeout(a),i&&i.remove()}}async function A(t,o,r,s,i,a,d){const f=!1===(m=s)?null:m||(e.layout?e.layout:null);var m;const{element:p,needsNewLayout:g}=function(e){if(e===l)return{element:null,needsNewLayout:!1};if(l=e,e){const t=Date.now();h=t;const o=n.createElement(e);return o[D]=u,o[q]=t,{element:o,needsNewLayout:!0}}return h=null,{element:null,needsNewLayout:!0}}(f),v=r||e.transition;if(null!==p||null!==y(t)){if(await async function(e,t,n,o,r,s,i,a){const l=o||y(e);if(!l)return;!function(e,t,n){"function"==typeof e.update&&e.update(u,c,t,n)}(l,s,i);const h=l.querySelector('[slot="page"]');if(n&&h){if(t.setAttribute("slot","page"),await _(l,h,t,n),a&&a())return;r&&(e.innerHTML="",e.appendChild(l))}else a&&a()||(l.querySelectorAll('[slot="page"]').forEach(e=>e.remove()),t.setAttribute("slot","page"),l.appendChild(t),r&&(e.innerHTML="",e.appendChild(l)))}(t,o,v,p,g,i,a,d),d&&d())return;b(0,i,a)}else await async function(e,t,n,o){const r=e.children[0];n&&r?await _(e,r,t,n):o&&o()||(e.innerHTML="",e.appendChild(t))}(t,o,v,d),d&&d()||b(0,i,a)}let T=0;async function S(s){const a=n.querySelector(e.target);if(!a)throw new Error(`Target element not found: ${e.target}`);p(a);const c=++T,l=()=>c!==T;if(v(),t.scrollTo(0,0),(""===s?.trim()||"/"===s)&&i){const e=o.find(e=>e.route.match("/"));if(!await N(e?.guards,{},a,l))return;if(l())return;const{element:r,transition:c,layout:h}=function(){const e=n.createElement(i);e[D]=u;const r=t.customElements.get(i),s=r?.[V],a=o.find(e=>e.route.match("/"));return{element:e,transition:s,layout:a?.layout}}();return void await A(a,r,c,h,s,{},l)}if(!s)return;const h=await async function(e,t,r){for(const s of o){const o=s.route.match(e);if(!1===o)continue;if(!await N(s.guards,o,t,r))return{result:Ho.GUARDS_FAILED};const i=n.createElement(s.tag);i[D]=u,i[ie]=m;const a=o;return Object.keys(a).forEach(e=>i.setAttribute(e,a[e])),{result:Ho.SUCCESS,element:i,transition:s.transition,layout:s.layout,routeParams:a}}return{result:Ho.NOT_FOUND}}(s,a,l);if(l())return;if(h.result===Ho.GUARDS_FAILED)return;if(h.result===Ho.SUCCESS){const{element:e,transition:t,layout:n,routeParams:o={}}=h;return void await A(a,e,t,n,s,o,l)}const{element:d,transition:f,layout:y}=function(){if(r){const e=n.createElement(r);e[D]=u;const o=t.customElements.get(r),s=o?.[V];return{element:e,transition:s,layout:void 0}}const e=n.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 A(a,d,f,y,s,{},l)}async function _(e,t,n,o,r=T){return async function(e,t,n,o={},r=()=>!1){const s=o.outDuration??300,i=o.inDuration??300,a=o.mode||"sequential",c=o.out?qo(o.out):{opacity:"0"},l={opacity:"0"},h=o.in?qo(o.in):{opacity:"1"},u=e.style,d=e.tagName.includes("-")&&e.shadowRoot,f=Symbol.for("snice:transition-original-position"),m=Symbol.for("snice:transition-count"),p=e;d||(f in p||(p[f]=u.position,p[m]=0),p[m]++,u.position="relative");const y=()=>{d||(p[m]--,p[m]<=0&&(u.position=p[f],delete p[f],delete p[m]))},g=t.hasAttribute("slot")||n.hasAttribute("slot");switch(Bo(t,g,s,"all"),Bo(n,g,i,"all"),Object.assign(n.style,l),e.appendChild(n),a){case ke.SIMULTANEOUS:Object.assign(t.style,c),Object.assign(n.style,h),await new Promise(e=>setTimeout(e,Math.max(s,i)));break;case ke.SEQUENTIAL:if(Object.assign(t.style,c),await new Promise(e=>setTimeout(e,s)),r())return n.parentNode===e&&n.remove(),void y();Object.assign(n.style,h),await new Promise(e=>setTimeout(e,i))}if(r())return n.parentNode===e&&n.remove(),void y();t.remove(),function(e,t){e.style.position="",e.style.width="",e.style.transition="",t?e.style.height="":(e.style.top="",e.style.left="")}(n,g),Object.keys({...l,...h}).forEach(e=>{n.style[e]=""}),y()}(e,t,n,o,()=>r!==T)}return{page:function(e){return function(n,o){if(o?.metadata&&o.metadata[C]){n[C]||(n[C]=new Map);for(const[e,t]of o.metadata[C])n[C].set(e,t)}yo(n),n[V]=e.transition;const r=n.prototype.connectedCallback;n.prototype.connectedCallback=function(){this[ie]=m,r?.call(this)};const s=n.prototype.disconnectedCallback;return n.prototype.disconnectedCallback=function(){s?.call(this),delete this[D],delete this[ie]},t.customElements.get(e.tag)||t.customElements.define(e.tag,n),e.routes.forEach(t=>g(t,e.tag,e.transition,e.guards,e.layout,e.placard)),n}},initialize:function(){const r=n.querySelector(e.target);if(!r)throw new Error(`Target element not found: ${e.target}`);p(r),!a&&(o.sort((e,t)=>Vo(t.route.spec)-Vo(e.route.spec)),a=!0),v(),function(){const o=()=>{const t=n.querySelector(e.target);if(t&&(d!==t||!f||Uo.get(t)===f))return d!==t&&ct.has(t)?(f?.(),f=null,void(d=null)):void S(w())};switch(e.type){case"hash":t.addEventListener("hashchange",o);break;case"pushstate":t.addEventListener("popstate",o)}}(),S(w())},navigate:async function(n){const o=function(e){const t=e.trim().replace(/^#/,"");return t?t.startsWith("/")?t:`/${t}`:"/"}(n);!function(n){switch(e.type){case"hash":{const e=`#${n}`;t.location.hash!==e&&t.history.pushState(null,"",e);break}case"pushstate":`${t.location.pathname}${t.location.search}`!==n&&t.history.pushState(null,"",n)}}(o),await S(o)},register:g}}function Go(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}}function Qo(e){let t="";for(const n of Object.keys(e))e[n]&&(t+=(t?" ":"")+n);return t}function Jo(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("; ")}!function(e){e.SUCCESS="success",e.GUARDS_FAILED="guards-failed",e.NOT_FOUND="not-found"}(Ho||(Ho={}));let Xo=!1;function Yo(e){Xo=e}async function Zo(e,t=500){if(customElements.get(e))return;let n=null;Xo||(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 er(e,t=500){const n=e.tagName.toLowerCase();await Zo(n,t),"ready"in e&&"function"==typeof e.ready?.then&&await e.ready}async function tr(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=>er(e,t)))}async function*nr(e){for(;;)await new Promise(t=>{e[te]||(e[te]=[]),e[te].push(t)}),yield}let or=0,rr=null;const sr=Symbol.for("snice:body-scroll-lock");function ir(){0===or&&(rr=document.body.style.overflow,document.body.style.overflow="hidden"),or++}function ar(){0!==or&&(or--,0===or&&(document.body.style.overflow=rr??"",rr=null))}function cr(){return or}globalThis[sr]={clear(){or=0,rr=null}};class lr{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)}}var hr;"undefined"!=typeof document&&Dt(),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"}(hr||(hr={}));export{Re as Context,lr as ContextAwareFetcher,o as IS_CONTROLLER_INSTANCE,Ko as Router,Ce as SimpleArray,Io as SniceElement,ke as TransitionMode,Ro as adopted,yo as applyElementFunctionality,Mt as attachController,Qo as classMap,ho as clearDebounceTimers,fo as clearMemoizeCache,uo as clearThrottleTimers,qt as context,Oo as contextProperty,kt as controller,Go as createRequestHandler,Kt as css,Fo as daemon,io as debounce,Rt as detachController,eo as dispatch,$o as dispose,vo as element,Fe as escapeAttr,Be as escapeHtml,cr as getBodyScrollLockCount,lt as getContext,It as getController,t as getSymbol,Ut as html,We as isSafeUrl,bo as layout,yn as live,ir as lockBodyScroll,lo as memoize,Mo as moved,mn as noChange,Jt as nothing,et as observe,Tt as on,co as once,ze as parseDuration,No as property,zo as provideContext,So as query,_o as queryAll,ko as ready,Lo as reconnect,Yn as render,tn as repeat,mt as request,mo as resetOnce,pt as respond,Yo as setDisableElementReadyWarnings,Fn as setStrictRenderErrors,Ao as state,Jo as styleMap,Zn as styles,Ht as svg,ao as throttle,nr as trackRenders,ar as unlockBodyScroll,Yt as unsafeHTML,Dt as useNativeElementControllers,tr as waitForAllCustomElements,Zo as waitForElementDefined,er as waitForElementReady,xo as watch};
|
|
2
2
|
//# sourceMappingURL=snice-runtime.esm.min.js.map
|