cotomy 0.3.14 → 0.3.15

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.
@@ -1 +1 @@
1
- {"version":3,"file":"cotomy.min.js","mappings":"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","sources":["webpack://Cotomy/webpack/universalModuleDefinition","webpack://Cotomy/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://Cotomy/./node_modules/cuid/lib/fingerprint.browser.js","webpack://Cotomy/./node_modules/dayjs/dayjs.min.js","webpack://Cotomy/./node_modules/cuid/lib/pad.js","webpack://Cotomy/./node_modules/dayjs/plugin/timezone.js","webpack://Cotomy/./node_modules/cuid/index.js","webpack://Cotomy/./node_modules/dayjs/plugin/utc.js","webpack://Cotomy/webpack/bootstrap","webpack://Cotomy/webpack/runtime/compat get default export","webpack://Cotomy/webpack/runtime/define property getters","webpack://Cotomy/webpack/runtime/hasOwnProperty shorthand","webpack://Cotomy/webpack/runtime/make namespace object","webpack://Cotomy/./node_modules/http-status-codes/build/es/status-codes.js","webpack://Cotomy/./src/debug.ts","webpack://Cotomy/./src/view.ts","webpack://Cotomy/./src/api.ts","webpack://Cotomy/./src/form.ts","webpack://Cotomy/./src/page.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Cotomy\"] = factory();\n\telse\n\t\troot[\"Cotomy\"] = factory();\n})(this, () => {\nreturn ","\nvar getRandomValue;\n\nvar crypto = typeof window !== 'undefined' &&\n (window.crypto || window.msCrypto) ||\n typeof self !== 'undefined' &&\n self.crypto;\n\nif (crypto) {\n var lim = Math.pow(2, 32) - 1;\n getRandomValue = function () {\n return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);\n };\n} else {\n getRandomValue = Math.random;\n}\n\nmodule.exports = getRandomValue;\n","var pad = require('./pad.js');\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = Object.keys(env).length;\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n navigator.userAgent.length).toString(36) +\n globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n return clientId;\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","module.exports = function pad (num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = require('./lib/fingerprint.js');\nvar pad = require('./lib/pad.js');\nvar getRandomValue = require('./lib/getRandomValue.js');\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n return pad((getRandomValue() *\n discreteValues << 0)\n .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n}\n\nfunction cuid () {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter = pad(safeCounter().toString(base), blockSize),\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n return letter + timestamp + counter + print + random;\n}\n\ncuid.slug = function slug () {\n var date = new Date().getTime().toString(36),\n counter = safeCounter().toString(36).slice(-4),\n print = fingerprint().slice(0, 1) +\n fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n return date.slice(-2) +\n counter + print + random;\n};\n\ncuid.isCuid = function isCuid (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n if (stringToCheck.startsWith('c')) return true;\n return false;\n};\n\ncuid.isSlug = function isSlug (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n var stringLength = stringToCheck.length;\n if (stringLength >= 7 && stringLength <= 10) return true;\n return false;\n};\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Generated file. Do not edit\nexport var StatusCodes;\n(function (StatusCodes) {\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.1\n *\n * This interim response indicates that everything so far is OK and that the client should continue with the request or ignore it if it is already finished.\n */\n StatusCodes[StatusCodes[\"CONTINUE\"] = 100] = \"CONTINUE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.2\n *\n * This code is sent in response to an Upgrade request header by the client, and indicates the protocol the server is switching too.\n */\n StatusCodes[StatusCodes[\"SWITCHING_PROTOCOLS\"] = 101] = \"SWITCHING_PROTOCOLS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.1\n *\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n */\n StatusCodes[StatusCodes[\"PROCESSING\"] = 102] = \"PROCESSING\";\n /**\n * Official Documentation @ https://www.rfc-editor.org/rfc/rfc8297#page-3\n *\n * This code indicates to the client that the server is likely to send a final response with the header fields included in the informational response.\n */\n StatusCodes[StatusCodes[\"EARLY_HINTS\"] = 103] = \"EARLY_HINTS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.1\n *\n * The request has succeeded. The meaning of a success varies depending on the HTTP method:\n * GET: The resource has been fetched and is transmitted in the message body.\n * HEAD: The entity headers are in the message body.\n * POST: The resource describing the result of the action is transmitted in the message body.\n * TRACE: The message body contains the request message as received by the server\n */\n StatusCodes[StatusCodes[\"OK\"] = 200] = \"OK\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.2\n *\n * The request has succeeded and a new resource has been created as a result of it. This is typically the response sent after a PUT request.\n */\n StatusCodes[StatusCodes[\"CREATED\"] = 201] = \"CREATED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.3\n *\n * The request has been received but not yet acted upon. It is non-committal, meaning that there is no way in HTTP to later send an asynchronous response indicating the outcome of processing the request. It is intended for cases where another process or server handles the request, or for batch processing.\n */\n StatusCodes[StatusCodes[\"ACCEPTED\"] = 202] = \"ACCEPTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.4\n *\n * This response code means returned meta-information set is not exact set as available from the origin server, but collected from a local or a third party copy. Except this condition, 200 OK response should be preferred instead of this response.\n */\n StatusCodes[StatusCodes[\"NON_AUTHORITATIVE_INFORMATION\"] = 203] = \"NON_AUTHORITATIVE_INFORMATION\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.5\n *\n * There is no content to send for this request, but the headers may be useful. The user-agent may update its cached headers for this resource with the new ones.\n */\n StatusCodes[StatusCodes[\"NO_CONTENT\"] = 204] = \"NO_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.6\n *\n * This response code is sent after accomplishing request to tell user agent reset document view which sent this request.\n */\n StatusCodes[StatusCodes[\"RESET_CONTENT\"] = 205] = \"RESET_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.1\n *\n * This response code is used because of range header sent by the client to separate download into multiple streams.\n */\n StatusCodes[StatusCodes[\"PARTIAL_CONTENT\"] = 206] = \"PARTIAL_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.2\n *\n * A Multi-Status response conveys information about multiple resources in situations where multiple status codes might be appropriate.\n */\n StatusCodes[StatusCodes[\"MULTI_STATUS\"] = 207] = \"MULTI_STATUS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.1\n *\n * The request has more than one possible responses. User-agent or user should choose one of them. There is no standardized way to choose one of the responses.\n */\n StatusCodes[StatusCodes[\"MULTIPLE_CHOICES\"] = 300] = \"MULTIPLE_CHOICES\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.2\n *\n * This response code means that URI of requested resource has been changed. Probably, new URI would be given in the response.\n */\n StatusCodes[StatusCodes[\"MOVED_PERMANENTLY\"] = 301] = \"MOVED_PERMANENTLY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.3\n *\n * This response code means that URI of requested resource has been changed temporarily. New changes in the URI might be made in the future. Therefore, this same URI should be used by the client in future requests.\n */\n StatusCodes[StatusCodes[\"MOVED_TEMPORARILY\"] = 302] = \"MOVED_TEMPORARILY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.4\n *\n * Server sent this response to directing client to get requested resource to another URI with an GET request.\n */\n StatusCodes[StatusCodes[\"SEE_OTHER\"] = 303] = \"SEE_OTHER\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.1\n *\n * This is used for caching purposes. It is telling to client that response has not been modified. So, client can continue to use same cached version of response.\n */\n StatusCodes[StatusCodes[\"NOT_MODIFIED\"] = 304] = \"NOT_MODIFIED\";\n /**\n * @deprecated\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.6\n *\n * Was defined in a previous version of the HTTP specification to indicate that a requested response must be accessed by a proxy. It has been deprecated due to security concerns regarding in-band configuration of a proxy.\n */\n StatusCodes[StatusCodes[\"USE_PROXY\"] = 305] = \"USE_PROXY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.7\n *\n * Server sent this response to directing client to get requested resource to another URI with same method that used prior request. This has the same semantic than the 302 Found HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\n StatusCodes[StatusCodes[\"TEMPORARY_REDIRECT\"] = 307] = \"TEMPORARY_REDIRECT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7538#section-3\n *\n * This means that the resource is now permanently located at another URI, specified by the Location: HTTP Response header. This has the same semantics as the 301 Moved Permanently HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\n StatusCodes[StatusCodes[\"PERMANENT_REDIRECT\"] = 308] = \"PERMANENT_REDIRECT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.1\n *\n * This response means that server could not understand the request due to invalid syntax.\n */\n StatusCodes[StatusCodes[\"BAD_REQUEST\"] = 400] = \"BAD_REQUEST\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.1\n *\n * Although the HTTP standard specifies \"unauthorized\", semantically this response means \"unauthenticated\". That is, the client must authenticate itself to get the requested response.\n */\n StatusCodes[StatusCodes[\"UNAUTHORIZED\"] = 401] = \"UNAUTHORIZED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.2\n *\n * This response code is reserved for future use. Initial aim for creating this code was using it for digital payment systems however this is not used currently.\n */\n StatusCodes[StatusCodes[\"PAYMENT_REQUIRED\"] = 402] = \"PAYMENT_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.3\n *\n * The client does not have access rights to the content, i.e. they are unauthorized, so server is rejecting to give proper response. Unlike 401, the client's identity is known to the server.\n */\n StatusCodes[StatusCodes[\"FORBIDDEN\"] = 403] = \"FORBIDDEN\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.4\n *\n * The server can not find requested resource. In the browser, this means the URL is not recognized. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client. This response code is probably the most famous one due to its frequent occurence on the web.\n */\n StatusCodes[StatusCodes[\"NOT_FOUND\"] = 404] = \"NOT_FOUND\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.5\n *\n * The request method is known by the server but has been disabled and cannot be used. For example, an API may forbid DELETE-ing a resource. The two mandatory methods, GET and HEAD, must never be disabled and should not return this error code.\n */\n StatusCodes[StatusCodes[\"METHOD_NOT_ALLOWED\"] = 405] = \"METHOD_NOT_ALLOWED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.6\n *\n * This response is sent when the web server, after performing server-driven content negotiation, doesn't find any content following the criteria given by the user agent.\n */\n StatusCodes[StatusCodes[\"NOT_ACCEPTABLE\"] = 406] = \"NOT_ACCEPTABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.2\n *\n * This is similar to 401 but authentication is needed to be done by a proxy.\n */\n StatusCodes[StatusCodes[\"PROXY_AUTHENTICATION_REQUIRED\"] = 407] = \"PROXY_AUTHENTICATION_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.7\n *\n * This response is sent on an idle connection by some servers, even without any previous request by the client. It means that the server would like to shut down this unused connection. This response is used much more since some browsers, like Chrome, Firefox 27+, or IE9, use HTTP pre-connection mechanisms to speed up surfing. Also note that some servers merely shut down the connection without sending this message.\n */\n StatusCodes[StatusCodes[\"REQUEST_TIMEOUT\"] = 408] = \"REQUEST_TIMEOUT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.8\n *\n * This response is sent when a request conflicts with the current state of the server.\n */\n StatusCodes[StatusCodes[\"CONFLICT\"] = 409] = \"CONFLICT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.9\n *\n * This response would be sent when the requested content has been permenantly deleted from server, with no forwarding address. Clients are expected to remove their caches and links to the resource. The HTTP specification intends this status code to be used for \"limited-time, promotional services\". APIs should not feel compelled to indicate resources that have been deleted with this status code.\n */\n StatusCodes[StatusCodes[\"GONE\"] = 410] = \"GONE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.10\n *\n * The server rejected the request because the Content-Length header field is not defined and the server requires it.\n */\n StatusCodes[StatusCodes[\"LENGTH_REQUIRED\"] = 411] = \"LENGTH_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.2\n *\n * The client has indicated preconditions in its headers which the server does not meet.\n */\n StatusCodes[StatusCodes[\"PRECONDITION_FAILED\"] = 412] = \"PRECONDITION_FAILED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.11\n *\n * Request entity is larger than limits defined by server; the server might close the connection or return an Retry-After header field.\n */\n StatusCodes[StatusCodes[\"REQUEST_TOO_LONG\"] = 413] = \"REQUEST_TOO_LONG\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.12\n *\n * The URI requested by the client is longer than the server is willing to interpret.\n */\n StatusCodes[StatusCodes[\"REQUEST_URI_TOO_LONG\"] = 414] = \"REQUEST_URI_TOO_LONG\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.13\n *\n * The media format of the requested data is not supported by the server, so the server is rejecting the request.\n */\n StatusCodes[StatusCodes[\"UNSUPPORTED_MEDIA_TYPE\"] = 415] = \"UNSUPPORTED_MEDIA_TYPE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.4\n *\n * The range specified by the Range header field in the request can't be fulfilled; it's possible that the range is outside the size of the target URI's data.\n */\n StatusCodes[StatusCodes[\"REQUESTED_RANGE_NOT_SATISFIABLE\"] = 416] = \"REQUESTED_RANGE_NOT_SATISFIABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.14\n *\n * This response code means the expectation indicated by the Expect request header field can't be met by the server.\n */\n StatusCodes[StatusCodes[\"EXPECTATION_FAILED\"] = 417] = \"EXPECTATION_FAILED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2324#section-2.3.2\n *\n * Any attempt to brew coffee with a teapot should result in the error code \"418 I'm a teapot\". The resulting entity body MAY be short and stout.\n */\n StatusCodes[StatusCodes[\"IM_A_TEAPOT\"] = 418] = \"IM_A_TEAPOT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.6\n *\n * The 507 (Insufficient Storage) status code means the method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request. This condition is considered to be temporary. If the request which received this status code was the result of a user action, the request MUST NOT be repeated until it is requested by a separate user action.\n */\n StatusCodes[StatusCodes[\"INSUFFICIENT_SPACE_ON_RESOURCE\"] = 419] = \"INSUFFICIENT_SPACE_ON_RESOURCE\";\n /**\n * @deprecated\n * Official Documentation @ https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt\n *\n * A deprecated response used by the Spring Framework when a method has failed.\n */\n StatusCodes[StatusCodes[\"METHOD_FAILURE\"] = 420] = \"METHOD_FAILURE\";\n /**\n * Official Documentation @ https://datatracker.ietf.org/doc/html/rfc7540#section-9.1.2\n *\n * Defined in the specification of HTTP/2 to indicate that a server is not able to produce a response for the combination of scheme and authority that are included in the request URI.\n */\n StatusCodes[StatusCodes[\"MISDIRECTED_REQUEST\"] = 421] = \"MISDIRECTED_REQUEST\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.3\n *\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n StatusCodes[StatusCodes[\"UNPROCESSABLE_ENTITY\"] = 422] = \"UNPROCESSABLE_ENTITY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.4\n *\n * The resource that is being accessed is locked.\n */\n StatusCodes[StatusCodes[\"LOCKED\"] = 423] = \"LOCKED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.5\n *\n * The request failed due to failure of a previous request.\n */\n StatusCodes[StatusCodes[\"FAILED_DEPENDENCY\"] = 424] = \"FAILED_DEPENDENCY\";\n /**\n * Official Documentation @ https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.15\n *\n * The server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol.\n */\n StatusCodes[StatusCodes[\"UPGRADE_REQUIRED\"] = 426] = \"UPGRADE_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-3\n *\n * The origin server requires the request to be conditional. Intended to prevent the 'lost update' problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.\n */\n StatusCodes[StatusCodes[\"PRECONDITION_REQUIRED\"] = 428] = \"PRECONDITION_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-4\n *\n * The user has sent too many requests in a given amount of time (\"rate limiting\").\n */\n StatusCodes[StatusCodes[\"TOO_MANY_REQUESTS\"] = 429] = \"TOO_MANY_REQUESTS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-5\n *\n * The server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.\n */\n StatusCodes[StatusCodes[\"REQUEST_HEADER_FIELDS_TOO_LARGE\"] = 431] = \"REQUEST_HEADER_FIELDS_TOO_LARGE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7725\n *\n * The user-agent requested a resource that cannot legally be provided, such as a web page censored by a government.\n */\n StatusCodes[StatusCodes[\"UNAVAILABLE_FOR_LEGAL_REASONS\"] = 451] = \"UNAVAILABLE_FOR_LEGAL_REASONS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.1\n *\n * The server encountered an unexpected condition that prevented it from fulfilling the request.\n */\n StatusCodes[StatusCodes[\"INTERNAL_SERVER_ERROR\"] = 500] = \"INTERNAL_SERVER_ERROR\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.2\n *\n * The request method is not supported by the server and cannot be handled. The only methods that servers are required to support (and therefore that must not return this code) are GET and HEAD.\n */\n StatusCodes[StatusCodes[\"NOT_IMPLEMENTED\"] = 501] = \"NOT_IMPLEMENTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.3\n *\n * This error response means that the server, while working as a gateway to get a response needed to handle the request, got an invalid response.\n */\n StatusCodes[StatusCodes[\"BAD_GATEWAY\"] = 502] = \"BAD_GATEWAY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.4\n *\n * The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This responses should be used for temporary conditions and the Retry-After: HTTP header should, if possible, contain the estimated time before the recovery of the service. The webmaster must also take care about the caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.\n */\n StatusCodes[StatusCodes[\"SERVICE_UNAVAILABLE\"] = 503] = \"SERVICE_UNAVAILABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.5\n *\n * This error response is given when the server is acting as a gateway and cannot get a response in time.\n */\n StatusCodes[StatusCodes[\"GATEWAY_TIMEOUT\"] = 504] = \"GATEWAY_TIMEOUT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.6\n *\n * The HTTP version used in the request is not supported by the server.\n */\n StatusCodes[StatusCodes[\"HTTP_VERSION_NOT_SUPPORTED\"] = 505] = \"HTTP_VERSION_NOT_SUPPORTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.6\n *\n * The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.\n */\n StatusCodes[StatusCodes[\"INSUFFICIENT_STORAGE\"] = 507] = \"INSUFFICIENT_STORAGE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-6\n *\n * The 511 status code indicates that the client needs to authenticate to gain network access.\n */\n StatusCodes[StatusCodes[\"NETWORK_AUTHENTICATION_REQUIRED\"] = 511] = \"NETWORK_AUTHENTICATION_REQUIRED\";\n})(StatusCodes || (StatusCodes = {}));\n","\n\nexport enum CotomyDebugFeature {\n Api = \"api\",\n Fill = \"fill\",\n Bind = \"bind\",\n FormData = \"formdata\",\n Html = \"html\",\n Page = \"page\",\n FormLoad = \"formload\",\n}\n\nexport class CotomyDebugSettings {\n private static readonly PREFIX = \"cotomy:debug\";\n\n public static isEnabled(key?: string | CotomyDebugFeature): boolean {\n const global = localStorage.getItem(this.PREFIX);\n if (key) {\n const specific = localStorage.getItem(`${this.PREFIX}:${String(key)}`);\n return specific === \"true\" || global === \"true\";\n }\n return global === \"true\";\n }\n\n public static enable(key: string | CotomyDebugFeature): void {\n localStorage.setItem(`${this.PREFIX}:${String(key)}`, \"true\");\n }\n\n public static disable(key: string | CotomyDebugFeature): void {\n localStorage.setItem(`${this.PREFIX}:${String(key)}`, \"false\");\n }\n\n public static enableAll(): void {\n localStorage.setItem(this.PREFIX, \"true\");\n }\n\n public static disableAll(): void {\n localStorage.setItem(this.PREFIX, \"false\");\n }\n\n public static clear(key?: string | CotomyDebugFeature): void {\n if (key) {\n localStorage.removeItem(`${this.PREFIX}:${String(key)}`);\n } else {\n localStorage.removeItem(this.PREFIX);\n }\n }\n}","import cuid from \"cuid\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\n\n\n\n//#region イベントハンドラ管理要\n\ninterface IEventTarget {\n get scopeId(): string;\n element: HTMLElement;\n}\n\ntype EventHandler = (e: Event) => void | Promise<void>;\nclass HandlerEntry {\n public constructor(public readonly handle: EventHandler, public readonly wrapper?: EventHandler, public readonly options?: AddEventListenerOptions) {\n }\n\n public get current(): EventHandler {\n return this.wrapper ?? this.handle;\n }\n\n /**\n * Comparison mode\n * “strict”: Exact match (matches including wrapper)\n * “remove”: For deletion (ignores wrapper = treats as wildcard)\n */\n public equals(entry: HandlerEntry, mode?: \"strict\" | \"remove\"): boolean;\n public equals(handle: EventHandler, options?: AddEventListenerOptions, wrapper?: EventHandler, mode?: \"strict\" | \"remove\"): boolean;\n public equals(entryOrHandle: HandlerEntry | EventHandler, optionsOrMode?: AddEventListenerOptions | \"strict\" | \"remove\", wrapper?: EventHandler, mode?: \"strict\" | \"remove\"): boolean {\n let targetHandle: EventHandler;\n let targetWrapper: EventHandler | undefined;\n let targetOptions: AddEventListenerOptions | undefined;\n let compareMode: \"strict\" | \"remove\" = \"strict\";\n\n if (entryOrHandle instanceof HandlerEntry) {\n targetHandle = entryOrHandle.handle;\n targetWrapper = entryOrHandle.wrapper;\n targetOptions = entryOrHandle.options;\n compareMode = (optionsOrMode as \"strict\" | \"remove\") ?? \"strict\";\n\n } else {\n targetHandle = entryOrHandle;\n\n if (typeof optionsOrMode === \"string\") {\n compareMode = optionsOrMode;\n targetWrapper = wrapper;\n targetOptions = undefined;\n } else {\n targetOptions = optionsOrMode;\n targetWrapper = wrapper;\n compareMode = mode ?? \"strict\";\n }\n }\n\n if (this.handle !== targetHandle) {\n return false;\n }\n\n if (compareMode === \"strict\" && this.wrapper !== targetWrapper) {\n return false;\n }\n\n return HandlerEntry.optionsEquals(this.options, targetOptions);\n }\n\n public static optionsEquals(left?: AddEventListenerOptions, right?: AddEventListenerOptions): boolean {\n const getBoolean = (options: AddEventListenerOptions | undefined, key: \"capture\" | \"once\" | \"passive\"): boolean =>\n options?.[key] ?? false;\n const getSignal = (options: AddEventListenerOptions | undefined): AbortSignal | undefined =>\n options?.signal;\n\n const leftSignal = getSignal(left);\n const rightSignal = getSignal(right);\n // 厳格一致: === のみ\n const signalsEqual = leftSignal === rightSignal;\n\n return getBoolean(left, \"capture\") === getBoolean(right, \"capture\")\n && getBoolean(left, \"once\") === getBoolean(right, \"once\")\n && getBoolean(left, \"passive\") === getBoolean(right, \"passive\")\n && signalsEqual;\n }\n}\n\nclass HandlerRegistory {\n private _registory: Map<string, HandlerEntry[]> = new Map();\n\n public constructor(private readonly target: IEventTarget) {\n }\n\n private ensure(event: string): HandlerEntry[] {\n return this._registory.get(event) ?? this._registory.set(event, []).get(event)!;\n }\n\n private find(event: string, entry: HandlerEntry): HandlerEntry | undefined {\n return this._registory.get(event)?.find(e => e.equals(entry)) ?? undefined;\n }\n\n public add(event: string, entry: HandlerEntry): void {\n if (entry.options?.once) {\n this.remove(event, entry);\n }\n if (!this.find(event, entry)) {\n this.ensure(event).push(entry);\n this.target.element.addEventListener(event, entry.current, entry.options);\n }\n }\n\n public remove(event: string, entry?: HandlerEntry): void {\n if (!entry) {\n const list = this._registory.get(event);\n if (!list) return;\n list.forEach(e => this.target.element.removeEventListener(event, e.current, e.options?.capture ?? false));\n this._registory.delete(event);\n return;\n }\n const list = this._registory.get(event);\n if (list) {\n const remaining: HandlerEntry[] = [];\n for (const e of list) {\n if (e.equals(entry, \"remove\")) {\n this.target.element.removeEventListener(event, e.current, e.options?.capture ?? false);\n } else {\n remaining.push(e);\n }\n }\n if (remaining.length === 0) {\n this._registory.delete(event);\n } else {\n this._registory.set(event, remaining);\n }\n }\n }\n\n public get empty(): boolean {\n return this._registory.size === 0;\n }\n}\n\nclass EventRegistry {\n private static _instance: EventRegistry;\n private _registry: Map<string, HandlerRegistory> = new Map();\n\n public static get instance(): EventRegistry {\n return this._instance ?? (this._instance = new EventRegistry());\n }\n\n private map(target: IEventTarget): HandlerRegistory {\n const scopeId = target.scopeId;\n let registry = this._registry.get(scopeId);\n if (!registry) {\n registry = new HandlerRegistory(target);\n this._registry.set(scopeId, registry);\n }\n return registry;\n }\n\n public on(event: string, target: IEventTarget, entry: HandlerEntry): void {\n const registry = this.map(target);\n registry.add(event, entry);\n }\n\n public off(event: string, target: IEventTarget, entry?: HandlerEntry): void {\n const registry = this._registry.get(target.scopeId);\n if (!registry) return;\n if (entry) {\n registry.remove(event, entry);\n } else {\n registry.remove(event);\n }\n if (registry.empty) {\n this._registry.delete(target.scopeId);\n }\n }\n\n public clear(target: IEventTarget): void {\n this._registry.delete(target.scopeId);\n }\n}\n\n//#endregion\n\n\n\n\nexport class CotomyElement implements IEventTarget {\n //#region Factory and Finder\n\n public static encodeHtml(text: string): string {\n const div = document.createElement(\"div\");\n div.textContent = text ?? \"\";\n return div.innerHTML;\n }\n\n private static createHTMLElement(html: string): HTMLElement {\n const wrapperMap: Record<string, { prefix: string, suffix: string }> = {\n \"tr\": { prefix: \"<table><tbody>\", suffix: \"</tbody></table>\" },\n \"td\": { prefix: \"<table><tbody><tr>\", suffix: \"</tr></tbody></table>\" },\n \"th\": { prefix: \"<table><tbody><tr>\", suffix: \"</tr></tbody></table>\" },\n \"thead\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"tbody\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"tfoot\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"caption\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"colgroup\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"col\": { prefix: \"<table><colgroup>\", suffix: \"</colgroup></table>\" },\n \"option\": { prefix: \"<select>\", suffix: \"</select>\" },\n \"optgroup\": { prefix: \"<select>\", suffix: \"</select>\" },\n \"legend\": { prefix: \"<fieldset>\", suffix: \"</fieldset>\" },\n \"li\": { prefix: \"<ul>\", suffix: \"</ul>\" }\n };\n\n const match = html.match(/<\\s*([a-z0-9]+)/i);\n if (!match) {\n throw new Error(`Invalid HTML: cannot extract tag from \"${html}\"`);\n }\n const tag = match[1].toLowerCase();\n\n const wrap = wrapperMap[tag];\n const wrappedHtml = wrap ? `${wrap.prefix}${html}${wrap.suffix}` : html;\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(wrappedHtml, \"text/html\");\n const errors = doc.querySelector(\"parsererror\");\n if (errors) {\n throw new Error(`HTML parsing failed for tag <${tag}>: \"${html}\"`);\n }\n if (doc.body.children.length !== 1) {\n throw new Error(`CotomyElement requires a single root element, but got ${doc.body.children.length}.`);\n }\n\n const element = doc.body.querySelector(tag);\n if (!element) {\n throw new Error(`Parsed but <${tag}> element not found: \"${html}\"`);\n }\n\n return element as HTMLElement;\n }\n\n public static first<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const element = document.querySelector(selector);\n if (!element) return undefined;\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(<HTMLElement>element);\n }\n\n public static last<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const elements = CotomyElement.find<T>(selector, type);\n return elements.pop();\n }\n\n public static find<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T[] {\n const elements = document.querySelectorAll(selector);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return Array.from(elements).map(e => new ctor(<HTMLElement>e));\n }\n\n public static contains(selector: string): boolean {\n return document.querySelector(selector) !== null;\n }\n\n public static byId<T extends CotomyElement = CotomyElement>(id: string, type?: new (el: HTMLElement) => T): T | undefined {\n const element = document.getElementById(id);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return !element ? undefined : new ctor(<HTMLElement>element);\n }\n\n public static containsById(id: string): boolean {\n return document.getElementById(id) !== null;\n }\n\n public static empty<T extends CotomyElement = CotomyElement>(type?: new (el: HTMLElement) => T): T {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(document.createElement(\"div\")).attribute(\"data-cotomy-empty\", \"\").style(\"display\", \"none\");\n }\n\n //#endregion\n\n\n\n private _element: HTMLElement;\n private _parentElement: CotomyElement | null = null;\n\n public constructor(element: HTMLElement | { html: string, css?: string } | { tagname: string, text?: string, css?: string } | string) {\n if (element instanceof HTMLElement) {\n this._element = element;\n } else if (typeof element === \"string\") {\n this._element = CotomyElement.createHTMLElement(element);\n } else {\n this._element = CotomyElement.createHTMLElement(\"html\" in element ? element.html : `<${element.tagname}></${element.tagname}>`);\n if (\"tagname\" in element && element.text) {\n this._element.textContent = element.text;\n }\n if (element.css) {\n this.useScopedCss(element.css);\n }\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Html)) {\n if (\"html\" in element) {\n console.debug(`CotomyElement {html: \"${element.html}\" } is created`);\n }\n if (\"tagname\" in element) {\n console.debug(`CotomyElement {tagname: \"${element.tagname}\", text: \"${element.text ?? \"\"}\"} is created`);\n }\n if (element.css) {\n console.debug(`CotomyElement {css: \"${element.css}\" } is applied`);\n }\n }\n }\n this.setInstanceId();\n }\n\n\n\n //#region tag identifier\n\n private setInstanceId() {\n if (!this.hasAttribute(\"data-cotomy-instance\")) {\n this.attribute(\"data-cotomy-instance\", cuid());\n this.removed(() => {\n this._element = CotomyElement.createHTMLElement(/* html */ `<div data-cotomy-invalidated style=\"display: none;\"></div>`);\n EventRegistry.instance.clear(this);\n });\n this.on(\"cotomy:transitstart\", () => {\n this.attribute(\"data-cotomy-moving\", \"\");\n this.find(\"[data-cotomy-instance]\").forEach(e => e.attribute(\"data-cotomy-moving\", \"\"));\n });\n this.on(\"cotomy:transitend\", () => {\n this.attribute(\"data-cotomy-moving\", null);\n this.find(\"[data-cotomy-instance]\").forEach(e => e.attribute(\"data-cotomy-moving\", null));\n });\n }\n }\n\n public get instanceId(): string {\n return this.attribute(\"data-cotomy-instance\")!;\n }\n\n public get scopeId(): string {\n if (!this.hasAttribute(\"data-cotomy-scopeid\")) {\n this.attribute(\"data-cotomy-scopeid\", cuid());\n }\n return this.attribute(\"data-cotomy-scopeid\")!;\n }\n\n //#endregion\n\n\n\n //#region Scoped CSS\n\n public get stylable(): boolean {\n return ![\"script\", \"style\", \"link\", \"meta\"].includes(this.tagname);\n }\n\n private get scopedCssElementId(): string {\n return `css-${this.scopeId}`;\n }\n\n private useScopedCss(css: string): this {\n if (css && this.stylable) {\n const cssid = this.scopedCssElementId;\n CotomyElement.find(`#${cssid}`).forEach(e => e.remove());\n const element = document.createElement(\"style\");\n const writeCss = css.replace(/\\[scope\\]/g, `[data-cotomy-scopeid=\"${this.scopeId}\"]`);\n const node = document.createTextNode(writeCss);\n element.appendChild(node);\n element.id = cssid;\n const head = CotomyElement.first(\"head\")\n || new CotomyElement({ html: /* html */ `<head></head>` }).prependTo(new CotomyElement(document.documentElement));\n head.append(new CotomyElement(element));\n\n this.removed(() => {\n CotomyElement.find(`#${cssid}`).forEach(e => e.remove());\n });\n }\n return this;\n }\n\n //#endregion\n\n\n\n //#region Layout Event Listener\n\n public static readonly LISTEN_LAYOUT_EVENTS_ATTRIBUTE: string = \"data-cotomy-layout\";\n\n public listenLayoutEvents(): this {\n this.attribute(CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE, \"\");\n return this;\n }\n\n //#endregion\n\n\n\n //#region Elementの基本情報\n\n public get id(): string | null | undefined {\n return this.attribute(\"id\");\n }\n\n public generateId(prefix: string = \"__cotomy_elem__\"): this {\n if (!this.id) {\n this.attribute(\"id\", `${prefix}${cuid()}`);\n }\n return this;\n }\n\n public get element(): HTMLElement {\n return this._element;\n }\n\n public clone<T extends CotomyElement = CotomyElement>(type?: new (el: HTMLElement) => T): T {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ATTRIBUTES_TO_STRIP = [\"data-cotomy-instance\", \"data-cotomy-scopeid\", \"data-cotomy-moving\"];\n const clonedElement = this.element.cloneNode(true) as HTMLElement;\n\n if (clonedElement.hasAttribute(\"data-cotomy-invalidated\")) {\n throw new Error(\"Cannot clone an invalidated CotomyElement.\");\n }\n\n ATTRIBUTES_TO_STRIP.forEach(attr => {\n clonedElement.removeAttribute(attr);\n clonedElement.querySelectorAll(`[${attr}]`).forEach(el => el.removeAttribute(attr));\n });\n\n const cloned = new ctor(clonedElement);\n return cloned;\n }\n\n public get tagname(): string {\n return this.element.tagName.toLowerCase();\n }\n\n /// <summary>\n /// 指定したセレクタにマッチする要素が存在するかどうかを判定\n /// ・標準の判定だと親要素を辿って判定しないため、セレクタを精査して親要素から判定する\n /// </summary>\n public is(selector: string): boolean {\n const selectors = selector.split(/\\s+(?![^\\[]*\\])|(?<=\\>)\\s+/);\n let element: HTMLElement | null = this.element;\n\n for (let i = selectors.length - 1; i >= 0; i--) {\n let subSelector = selectors[i].trim();\n let directChild = false;\n\n if (subSelector.startsWith(\">\")) {\n directChild = true;\n subSelector = subSelector.slice(1).trim();\n }\n\n if (!element || !element.matches(subSelector)) {\n return false;\n }\n\n if (directChild) {\n element = element.parentElement;\n } else {\n if (i > 0) {\n while (element && !element.matches(selectors[i - 1].trim())) {\n element = element.parentElement;\n }\n }\n }\n }\n\n return true;\n }\n\n public match(selector: string): boolean {\n try {\n return this.element.matches(selector);\n } catch {\n return false;\n }\n }\n\n public get empty(): boolean {\n const nonEmptyTags = new Set([\n \"input\", \"select\", \"textarea\", \"img\", \"video\", \"audio\", \"br\", \"hr\",\n \"iframe\", \"embed\", \"canvas\", \"object\", \"svg\", \"source\", \"track\", \"col\",\n \"link\", \"meta\", \"base\"\n ]);\n\n return nonEmptyTags.has(this.tagname)\n || this._element.hasAttribute(\"data-cotomy-empty\")\n || this._element.innerHTML.trim() === \"\";\n }\n\n //#endregion\n\n\n\n //#region Elementの状態及び値\n\n public get attached(): boolean {\n return document.contains(this.element);\n }\n\n public get readonly(): boolean {\n if (\"readOnly\" in this.element) {\n return <boolean>this.element.readOnly;\n } else {\n return this.element.hasAttribute(\"readonly\");\n }\n }\n\n public set readonly(readonly: boolean) {\n if (\"readOnly\" in this.element) {\n this.element.readOnly = readonly;\n } else {\n if (readonly) {\n this.attribute(\"readonly\", \"readonly\");\n } else {\n this.attribute(\"readonly\", null);\n }\n }\n }\n\n public get value(): string {\n if (\"value\" in this.element) {\n return <string>this.element.value;\n } else {\n // \"value\" プロパティが存在しない場合、空文字列を返す\n return this.attribute(\"data-cotomy-value\") ?? \"\";\n }\n }\n\n public set value(val: string) {\n if (\"value\" in this.element) {\n this.element.value = val;\n } else {\n this.attribute(\"data-cotomy-value\", val);\n }\n }\n\n public get text(): string {\n return this.element.textContent ?? \"\";\n }\n\n public set text(text: string) {\n this.element.textContent = text ?? \"\";\n }\n\n public get html(): string {\n return this.element.innerHTML;\n }\n\n public set html(html: string) {\n this.element.innerHTML = html;\n }\n\n //#endregion\n\n\n\n //#region Elementの操作\n\n public setFocus(): this {\n this.element.focus();\n return this;\n }\n\n public get visible(): boolean {\n if (!this.attached) {\n return false;\n }\n\n if (!this.element.offsetParent && !document.contains(this.element)) {\n return false;\n }\n\n const rect = this.element.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n const style = this.getComputedStyle();\n return style.display !== \"none\" && style.visibility !== \"hidden\" && style.visibility !== \"collapse\";\n }\n\n return false;\n }\n\n public get enabled(): boolean {\n return !(this.element.hasAttribute(\"disabled\") && this.element.getAttribute(\"disabled\") !== null);\n }\n\n public set enabled(value: boolean) {\n if (value) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n\n private get invalidated(): boolean {\n return this.element.hasAttribute(\"data-cotomy-invalidated\");\n }\n\n public remove(): void {\n if (!this.invalidated) {\n this._element.remove();\n }\n }\n\n public clear(): this {\n this.find(\"*\").forEach(e => e.remove());\n this.text = \"\";\n return this;\n }\n\n //#endregion\n\n\n\n //#region Elementのサイズ及び位置\n\n public get width(): number {\n return this.element.offsetWidth;\n }\n\n public set width(width: number) {\n let w = width.toString() + \"px\";\n this.style(\"width\", w);\n }\n\n public get height(): number {\n return this.element.offsetHeight;\n }\n\n public set height(height: number) {\n let h = height.toString() + \"px\";\n this.style(\"height\", h);\n }\n\n public get innerWidth(): number {\n return this.element.clientWidth;\n }\n\n public get innerHeight(): number {\n return this.element.clientHeight;\n }\n\n public get outerWidth(): number {\n const style = this.getComputedStyle();\n const margin = parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n return this.element.offsetWidth + margin;\n }\n\n public get outerHeight(): number {\n const style = this.getComputedStyle();\n const margin = parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n return this.element.offsetHeight + margin;\n }\n\n public get scrollHeight(): number {\n return this.element.scrollHeight;\n }\n\n public get scrollWidth(): number {\n return this.element.scrollWidth;\n }\n\n public get scrollTop(): number {\n return this.element.scrollTop;\n }\n\n public get position(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left };\n }\n\n public get absolutePosition(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top + window.scrollY, left: rect.left + window.scrollX };\n }\n\n public get screenPosition(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left };\n }\n\n public get rect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left, width: rect.width, height: rect.height };\n }\n\n public get innerRect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n const style = this.getComputedStyle();\n const padding = {\n top: parseFloat(style.paddingTop),\n right: parseFloat(style.paddingRight),\n bottom: parseFloat(style.paddingBottom),\n left: parseFloat(style.paddingLeft)\n };\n return {\n top: rect.top + padding.top,\n left: rect.left + padding.left,\n width: rect.width - padding.left - padding.right,\n height: rect.height - padding.top - padding.bottom\n };\n }\n\n public get outerRect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n const style = this.getComputedStyle();\n const margin = {\n top: parseFloat(style.marginTop),\n right: parseFloat(style.marginRight),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft)\n };\n return {\n top: rect.top - margin.top,\n left: rect.left - margin.left,\n width: rect.width + margin.left + margin.right,\n height: rect.height + margin.top + margin.bottom\n };\n }\n\n\n public get padding(): { top: number; right: number; bottom: number; left: number } {\n const style = this.getComputedStyle();\n return {\n top: parseFloat(style.paddingTop),\n right: parseFloat(style.paddingRight),\n bottom: parseFloat(style.paddingBottom),\n left: parseFloat(style.paddingLeft)\n };\n }\n\n public get margin(): { top: number; right: number; bottom: number; left: number } {\n const style = this.getComputedStyle();\n return {\n top: parseFloat(style.marginTop),\n right: parseFloat(style.marginRight),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft)\n };\n }\n\n public get inViewport(): boolean {\n const rect = this.element.getBoundingClientRect();\n return rect.top < window.innerHeight && rect.bottom > 0;\n }\n\n public get isAboveViewport(): boolean {\n return this.element.getBoundingClientRect().bottom < 0;\n }\n\n public get isBelowViewport(): boolean {\n return this.element.getBoundingClientRect().top > window.innerHeight;\n }\n\n public get isLeftViewport(): boolean {\n return this.element.getBoundingClientRect().right < 0;\n }\n\n public get isRightViewport(): boolean {\n return this.element.getBoundingClientRect().left > window.innerWidth;\n }\n\n public comesBefore(target: CotomyElement): boolean {\n const pos = this.element.compareDocumentPosition(target.element);\n if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return false;\n return (pos & Node.DOCUMENT_POSITION_FOLLOWING) !== 0;\n }\n\n public comesAfter(target: CotomyElement): boolean {\n const pos = this.element.compareDocumentPosition(target.element);\n if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return false;\n return (pos & Node.DOCUMENT_POSITION_PRECEDING) !== 0;\n }\n\n //#endregion\n\n\n\n //#region Elementの属性\n\n public hasAttribute(name: string): boolean {\n return this.element.hasAttribute(name);\n }\n\n public attribute(name: string): string | null | undefined;\n public attribute(name: string, value: string | number | undefined): this;\n public attribute(name: string, value: null): this;\n public attribute(name: string, value?: string | number | undefined | null): string | null | undefined | this {\n if (arguments.length === 1) {\n // getter\n return this.element.hasAttribute(name) ? this.element.getAttribute(name) : undefined;\n } else if (value === null) {\n // remove\n this.element.removeAttribute(name);\n return this;\n } else {\n // setter\n this.element.setAttribute(name, value?.toString() ?? \"\");\n return this;\n }\n }\n\n public hasClass(name: string): boolean {\n return this.element.classList.contains(name);\n }\n\n public addClass(name: string): this {\n this.element.classList.add(name);\n return this;\n }\n\n public removeClass(name: string): this {\n this.element.classList.remove(name);\n return this;\n }\n\n public toggleClass(name: string, force?: boolean): this {\n this.element.classList.toggle(name, force);\n return this;\n }\n\n public style(name: string): string;\n public style(name: string, value: string): this;\n public style(name: string, value: null): this;\n public style(name: string, value: undefined): this;\n public style(name: string, value?: string | null): string | this {\n if (arguments.length === 1) {\n // getter\n return this.element.style.getPropertyValue(name);\n } else if (value == null) {\n // remove\n this.element.style.removeProperty(name);\n return this;\n } else {\n // setter\n this.element.style.setProperty(name, value);\n return this;\n }\n }\n\n protected getComputedStyle(): CSSStyleDeclaration {\n return window.getComputedStyle(this.element);\n }\n\n public computedStyle(name: string): string {\n return window.getComputedStyle(this.element).getPropertyValue(name);\n }\n\n //#endregion\n\n\n\n //#region Elementの親子関係\n\n public get parent(): CotomyElement {\n if (this._parentElement == null && this.element.parentElement !== null) {\n this._parentElement = new CotomyElement(this.element.parentElement);\n }\n return this._parentElement ?? CotomyElement.empty();\n }\n\n public get parents(): CotomyElement[] {\n let parents = [];\n let currentElement = this.element.parentElement;\n while (currentElement !== null) {\n parents.push(new CotomyElement(currentElement));\n currentElement = currentElement.parentElement;\n }\n return parents;\n }\n\n public hasChildren(selector: string = \"*\"): boolean {\n return this.element.querySelector(selector) !== null;\n }\n public children<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T[] {\n const children = Array.from(this.element.querySelectorAll(selector));\n const directChildren = children.filter(child => child.parentElement === this.element);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return directChildren.filter((e): e is HTMLElement => e instanceof HTMLElement).map(e => new ctor(e));\n }\n\n public firstChild<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.children<T>(selector, type);\n return elements.shift() ?? undefined;\n }\n\n public lastChild<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.children<T>(selector, type);\n return elements.pop() ?? undefined;\n }\n\n public closest<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const closestElement = this.element.closest(selector);\n if (closestElement !== null && closestElement instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(closestElement);\n } else {\n return undefined;\n }\n }\n\n public previousSibling<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const element = this.element.previousElementSibling;\n if (element !== null && element instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ce = new ctor(element);\n return ce.match(selector) ? ce : ce.previousSibling<T>(selector, type);\n } else {\n return undefined;\n }\n }\n\n public nextSibling<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const element = this.element.nextElementSibling;\n if (element !== null && element instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ce = new ctor(element);\n return ce.match(selector) ? ce : ce.nextSibling<T>(selector, type);\n } else {\n return undefined;\n }\n }\n\n public siblings<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T[] {\n const parent = this.element.parentElement;\n if (!parent) return [];\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return Array.from(parent.children).filter((e): e is HTMLElement => e instanceof HTMLElement\n && e !== this.element).map(e => new ctor(e)).filter(e => e.match(selector));\n }\n\n //#endregion\n\n\n\n //#region 内包するElement\n\n public find<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T[] {\n const elements = Array.from(this.element.querySelectorAll(selector)) as HTMLElement[];\n return <T[]>elements.map(e => new (type ?? CotomyElement)(e));\n }\n\n public first<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.find(selector, type);\n return <T>elements.shift() ?? undefined;\n }\n\n public last<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.find(selector, type);\n return <T>elements.pop() ?? undefined;\n }\n\n public contains(selector: string): boolean {\n return this.find(selector).length > 0;\n }\n\n private static runWithMoveEvents(target: CotomyElement, operation: () => void): void {\n target.trigger(\"cotomy:transitstart\");\n try {\n operation();\n } finally {\n target.trigger(\"cotomy:transitend\");\n }\n }\n\n public prepend(prepend: CotomyElement): this {\n CotomyElement.runWithMoveEvents(prepend, () => {\n this.element.prepend(prepend.element);\n });\n return this;\n }\n\n public append(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(target, () => {\n this.element.append(target.element);\n });\n return this;\n }\n\n public appendAll(targets: CotomyElement[]): this {\n targets.forEach(e => this.append(e));\n return this;\n }\n\n public insertBefore(append: CotomyElement): this {\n CotomyElement.runWithMoveEvents(append, () => {\n this.element.before(append.element);\n });\n return this;\n }\n\n public insertAfter(append: CotomyElement): this {\n CotomyElement.runWithMoveEvents(append, () => {\n this.element.after(append.element);\n });\n return this;\n }\n\n public appendTo(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(this, () => {\n target.element.append(this.element);\n });\n return this;\n }\n\n public prependTo(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(this, () => {\n target.element.prepend(this.element);\n });\n return this;\n }\n\n //#endregion\n\n\n\n\n //#region Event\n\n public trigger(event: string): this;\n public trigger(event: string, e: Event): this;\n public trigger(event: string, e?: Event): this {\n this.element.dispatchEvent(e ?? new Event(event, { bubbles: true }));\n return this;\n }\n\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, undefined, options);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>): this;\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const delegate: EventHandler = (e: Event) => {\n const target = e.target as HTMLElement | null;\n if (target && target.closest(selector)) {\n return handle(e);\n }\n };\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, delegate, options);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const mergedOptions: AddEventListenerOptions = { ...(options ?? {}), once: true };\n this.off(event, handle, mergedOptions);\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, undefined, mergedOptions);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public off(event: string | string[]): this;\n public off(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public off(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public off(event: string | string[], handle?: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (handle) {\n const entry = new HandlerEntry(handle, undefined, options);\n EventRegistry.instance.off(eventName, this, entry);\n } else {\n EventRegistry.instance.off(eventName, this);\n }\n });\n return this;\n }\n\n //#region Mouse Events\n\n public click(): this;\n public click(handle: (e: MouseEvent) => void | Promise<void>): this;\n public click(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"click\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"click\");\n }\n return this;\n }\n\n public dblclick(): this;\n public dblclick(handle: (e: MouseEvent) => void | Promise<void>): this;\n public dblclick(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dblclick\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"dblclick\");\n }\n return this;\n }\n\n public mouseover(): this;\n public mouseover(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseover(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseover\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseover\");\n }\n return this;\n }\n\n public mouseout(): this;\n public mouseout(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseout(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseout\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseout\");\n }\n return this;\n }\n\n public mousedown(): this;\n public mousedown(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mousedown(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mousedown\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mousedown\");\n }\n return this;\n }\n\n public mouseup(): this;\n public mouseup(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseup(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseup\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseup\");\n }\n return this;\n }\n\n public mousemove(): this;\n public mousemove(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mousemove(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mousemove\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mousemove\");\n }\n return this;\n }\n\n public mouseenter(): this;\n public mouseenter(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseenter(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseenter\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseenter\");\n }\n return this;\n }\n\n public mouseleave(): this;\n public mouseleave(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseleave(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseleave\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseleave\");\n }\n return this;\n }\n\n public dragstart(): this;\n public dragstart(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragstart(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragstart\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragstart\");\n }\n return this;\n }\n\n public dragend(): this;\n public dragend(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragend(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragend\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragend\");\n }\n return this;\n }\n\n public dragover(): this;\n public dragover(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragover(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragover\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragover\");\n }\n return this;\n }\n\n public dragenter(): this;\n public dragenter(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragenter(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragenter\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragenter\");\n }\n return this;\n }\n\n public dragleave(): this;\n public dragleave(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragleave(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragleave\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragleave\");\n }\n return this;\n }\n\n public drop(): this;\n public drop(handle: (e: DragEvent) => void | Promise<void>): this;\n public drop(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"drop\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"drop\");\n }\n return this;\n }\n\n public drag(): this;\n public drag(handle: (e: DragEvent) => void | Promise<void>): this;\n public drag(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"drag\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"drag\");\n }\n return this;\n }\n\n public removed(handle: ((e: Event) => void | Promise<void>)): this {\n this.element.addEventListener(\"removed\", async e => await handle(e));\n return this;\n }\n\n //#endregion\n\n\n\n //#region Keyboard Events\n\n public keydown(): this;\n public keydown(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keydown(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keydown\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keydown\");\n }\n return this;\n }\n\n public keyup(): this;\n public keyup(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keyup(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keyup\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keyup\");\n }\n return this;\n }\n\n public keypress(): this;\n public keypress(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keypress(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keypress\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keypress\");\n }\n return this;\n }\n\n //#endregion\n\n\n //#region Input Control Events\n\n public change(): this;\n public change(handle: (e: Event) => void | Promise<void>): this;\n public change(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"change\", async e => await handle(e));\n } else {\n this.trigger(\"change\");\n }\n return this;\n }\n\n public input(): this;\n public input(handle: (e: Event) => void | Promise<void>): this;\n public input(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"input\", async e => await handle(e));\n } else {\n this.trigger(\"input\");\n }\n return this;\n }\n\n //#endregion\n\n\n //#region View and Control Evnet\n\n private static _intersectionObserver: IntersectionObserver | null = null;\n public static get intersectionObserver(): IntersectionObserver {\n return CotomyElement._intersectionObserver = CotomyElement._intersectionObserver\n ?? new IntersectionObserver(entries => {\n entries.filter(entry => entry.isIntersecting).forEach(\n entry => entry.target.dispatchEvent(new Event(\"inview\")));\n entries.filter(entry => !entry.isIntersecting).forEach(\n entry => entry.target.dispatchEvent(new Event(\"outview\")));\n });\n }\n\n public inview(): this;\n public inview(handle: (e: Event) => void | Promise<void>): this;\n public inview(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n CotomyElement.intersectionObserver.observe(this.element);\n this.element.addEventListener(\"inview\", async e => await handle(e));\n } else {\n this.trigger(\"inview\");\n }\n return this;\n }\n\n public outview(): this;\n public outview(handle: (e: Event) => void | Promise<void>): this;\n public outview(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n CotomyElement.intersectionObserver.observe(this.element);\n this.element.addEventListener(\"outview\", async e => await handle(e));\n } else {\n this.trigger(\"outview\");\n }\n return this;\n }\n\n public focus(): this;\n public focus(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focus(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focus\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focus\");\n }\n return this;\n }\n\n public blur(): this;\n public blur(handle: (e: FocusEvent) => void | Promise<void>): this;\n public blur(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"blur\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"blur\");\n }\n return this;\n }\n\n public focusin(): this;\n public focusin(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focusin(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focusin\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focusin\");\n }\n return this;\n }\n\n public focusout(): this;\n public focusout(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focusout(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focusout\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focusout\");\n }\n return this;\n }\n\n public filedrop(handle: (files: File[]) => void | Promise<void>): this {\n this.element.addEventListener(\"drop\", async e => {\n e.preventDefault();\n const dt = e.dataTransfer;\n if (dt && dt.files) {\n await handle(Array.from(dt.files));\n }\n });\n return this;\n }\n\n //#endregion\n\n\n\n //#region Layout Events\n public resize(): this;\n public resize(handle: (e: Event) => void | Promise<void>): this;\n public resize(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:resize\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:resize\");\n }\n return this;\n }\n\n public scroll(): this;\n public scroll(handle: (e: Event) => void | Promise<void>): this;\n public scroll(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:scroll\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:scroll\");\n }\n return this;\n }\n\n public changeLayout(): this;\n public changeLayout(handle: (e: Event) => void | Promise<void>): this;\n public changeLayout(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:changelayout\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:changelayout\");\n }\n return this;\n }\n //#endregion\n //#endregion\n}\n\nexport class CotomyMetaElement extends CotomyElement {\n public static get(name: string): CotomyMetaElement {\n return CotomyElement.first<CotomyMetaElement>(`meta[name=\"${name}\" i]`, CotomyMetaElement)\n ?? CotomyElement.empty<CotomyMetaElement>(CotomyMetaElement);\n }\n\n public get content(): string {\n return this.attribute(\"content\") ?? \"\";\n }\n}\n\n\n\n\nexport class CotomyWindow {\n private static _instance: CotomyWindow | null = null;\n\n public static get instance(): CotomyWindow {\n return CotomyWindow._instance ?? (CotomyWindow._instance = new CotomyWindow());\n }\n\n\n private _body: CotomyElement = CotomyElement.empty();\n private _mutationObserver: MutationObserver | null = null;\n private _reloading: boolean = false;\n private _eventHandlers: { [event: string]: Array<(e: Event) => void | Promise<void>> } = {};\n\n public get initialized(): boolean {\n return this._body.attached;\n }\n\n public initialize(): this {\n if (!this.initialized) {\n if (!document.body) {\n throw new Error(\"<body> element not found. DOM may not be ready.\");\n }\n this._body = CotomyElement.first(\"body\")!;\n\n const changeLayoutEvents = [\"resize\", \"scroll\", \"orientationchange\", \"fullscreenchange\", \"cotomy:ready\"];\n changeLayoutEvents.forEach(e => {\n window.addEventListener(e, () => {\n const changeLayoutEvent = new CustomEvent(\"cotomy:changelayout\");\n window.dispatchEvent(changeLayoutEvent);\n }, { passive: true });\n });\n\n // documentにファイルがドラッグされた場合、開いてしまうことを防ぐ\n document.addEventListener(\"dragover\", e => {\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.resize(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:resize\"));\n });\n });\n\n this.scroll(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:scroll\"));\n });\n });\n\n this.changeLayout(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:changelayout\"));\n });\n });\n\n\n // DOM要素の削除をトラップして、removedイベントを発生させる\n this._mutationObserver = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (typeof HTMLElement !== \"undefined\" && node instanceof HTMLElement) {\n const element = new CotomyElement(node);\n if (!element.hasAttribute(\"data-cotomy-moving\") && !element.attached) {\n element.trigger(\"removed\");\n }\n }\n });\n });\n });\n this._mutationObserver.observe(this.body.element, { childList: true, subtree: true });\n }\n return this;\n }\n\n public get reloading(): boolean {\n return this._reloading;\n }\n\n public reload() {\n this._reloading = true;\n location.reload();\n }\n\n\n\n public get body(): CotomyElement {\n return this._body;\n }\n\n public append(e: CotomyElement): this {\n this._body.append(e);\n return this;\n }\n\n public moveNext(focused: CotomyElement, shift: boolean = false) {\n const selector = \"input, a, select, button, textarea\";\n const focusableElements = Array.from(this.body.element.querySelectorAll(selector))\n .map(e => new CotomyElement(<HTMLElement>e))\n .filter(e => e.width > 0 && e.height > 0 && e.visible && e.enabled && !e.hasAttribute(\"readonly\"));\n\n const focusedIndex = focusableElements.map(e => e.element).indexOf(focused.element);\n\n let nextIndex = focusedIndex + (shift ? -1 : 1);\n if (nextIndex >= focusableElements.length) {\n nextIndex = 0;\n } else if (nextIndex < 0) {\n nextIndex = focusableElements.length - 1;\n }\n\n // 次の要素が存在する場合、フォーカスを移動\n if (focusableElements[nextIndex]) {\n focusableElements[nextIndex].setFocus();\n }\n }\n\n public trigger(event: string): this;\n public trigger(event: string, e: Event): this;\n public trigger(event: string, e?: Event): this {\n window.dispatchEvent(e ?? new Event(event, { bubbles: true }));\n return this;\n }\n\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (!this._eventHandlers[eventName]) this._eventHandlers[eventName] = [];\n this._eventHandlers[eventName].push(handle);\n window.addEventListener(eventName, handle);\n });\n return this;\n }\n\n public off(event: string | string[], handle?: (e: Event) => void | Promise<void>): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (handle) {\n window.removeEventListener(eventName, handle);\n const handlers = this._eventHandlers[eventName]?.filter(h => h !== handle) ?? [];\n if (handlers.length > 0) {\n this._eventHandlers[eventName] = handlers;\n } else {\n delete this._eventHandlers[eventName];\n }\n } else {\n for (const h of this._eventHandlers[eventName] ?? []) {\n window.removeEventListener(eventName, h);\n }\n delete this._eventHandlers[eventName];\n }\n });\n return this;\n }\n\n public load(handle: (e: Event) => void | Promise<void>): this {\n return this.on(\"load\", handle);\n }\n\n public ready(handle: ((e: Event) => void | Promise<void>)): this {\n return this.on(\"cotomy:ready\", handle);\n }\n\n public resize(): this;\n public resize(handle: (event: Event) => void | Promise<void>): this;\n public resize(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"resize\", handle);\n } else {\n return this.trigger(\"resize\");\n }\n }\n\n public scroll(): this;\n public scroll(handle: (event: Event) => void | Promise<void>): this;\n public scroll(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"scroll\", handle);\n } else {\n return this.trigger(\"scroll\");\n }\n }\n\n public changeLayout(): this;\n public changeLayout(handle: (event: Event) => void | Promise<void>): this;\n public changeLayout(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"cotomy:changelayout\", handle);\n } else {\n return this.trigger(\"cotomy:changelayout\");\n }\n }\n\n public pageshow(): this;\n public pageshow(handle: (event: PageTransitionEvent) => void | Promise<void>): this;\n public pageshow(handle?: (event: PageTransitionEvent) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"pageshow\", handle as (e: Event) => void | Promise<void>);\n } else {\n return this.trigger(\"pageshow\");\n }\n }\n\n public get scrollTop(): number {\n return window.scrollY || document.documentElement.scrollTop;\n }\n\n public get scrollLeft(): number {\n return window.scrollX || document.documentElement.scrollLeft;\n }\n\n public get width(): number {\n return window.innerWidth;\n }\n\n public get height(): number {\n return window.innerHeight;\n }\n\n public get documentWidth(): number {\n return document.documentElement.scrollWidth;\n }\n\n public get documentHeight(): number {\n return document.documentElement.scrollHeight;\n }\n}\n","import dayjs from 'dayjs';\nimport { StatusCodes } from \"http-status-codes\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from './debug';\nimport { CotomyElement } from \"./view\";\n\n\n\n//#region 例外クラス\n// 共通基底例外\nexport class CotomyApiException extends Error {\n constructor(\n public readonly status: number,\n public readonly message: string,\n public readonly response: CotomyApiResponse,\n public readonly bodyText: string = \"\"\n ) {\n super(message);\n this.name = \"CotomyApiException\";\n }\n}\n\n// クライアントエラー系\nexport class CotomyHttpClientError extends CotomyApiException {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyHttpClientError\";\n }\n}\nexport class CotomyUnauthorizedException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyUnauthorizedException\";\n }\n}\nexport class CotomyForbiddenException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyForbiddenException\";\n }\n}\nexport class CotomyNotFoundException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyNotFoundException\";\n }\n}\nexport class CotomyConflictException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyConflictException\";\n }\n}\n\nexport class CotomyRequestInvalidException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyRequestInvalidException\";\n }\n}\n\nexport class CotomyTooManyRequestsException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyTooManyRequestsException\";\n }\n}\n\nexport class CotomyHttpServerError extends CotomyApiException {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyHttpServerError\";\n }\n}\n\nexport class CotomyResponseJsonParseException extends Error {\n constructor(message: string = \"Failed to parse JSON response.\") {\n super(message);\n this.name = \"CotomyResponseJsonParseException\";\n }\n}\nexport class CotomyInvalidFormDataBodyException extends Error {\n constructor(message: string = \"Body must be an instance of FormData.\") {\n super(message);\n this.name = \"CotomyInvalidFormDataBodyException\";\n }\n}\n\n//#endregion 例外クラス\n\n\n//#region 定数定義\n\nclass Methods {\n public static readonly GET = 'GET';\n public static readonly POST = 'POST';\n public static readonly PUT = 'PUT';\n public static readonly PATCH = 'PATCH';\n public static readonly DELETE = 'DELETE';\n public static readonly HEAD = 'HEAD';\n public static readonly OPTIONS = 'OPTIONS';\n public static readonly TRACE = 'TRACE';\n public static readonly CONNECT = 'CONNECT';\n}\n\nclass ResponseMessages {\n private static readonly _responseMessages: { [key: number]: string } = {\n [StatusCodes.BAD_REQUEST]: \"There is an error in the input. Please check and try again.\",\n [StatusCodes.UNAUTHORIZED]: \"You are not authenticated. Please log in again.\",\n [StatusCodes.FORBIDDEN]: \"You do not have permission to use this feature. If necessary, please contact the administrator.\",\n [StatusCodes.NOT_FOUND]: \"The specified information could not be found. It may have been deleted. Please start over or contact the administrator.\",\n [StatusCodes.METHOD_NOT_ALLOWED]: \"This operation is currently prohibited on the server.\",\n [StatusCodes.NOT_ACCEPTABLE]: \"The request cannot be accepted. Processing has been stopped.\",\n [StatusCodes.PROXY_AUTHENTICATION_REQUIRED]: \"Proxy authentication is required for internet access.\",\n [StatusCodes.REQUEST_TIMEOUT]: \"The request timed out. Please try again.\",\n [StatusCodes.CONFLICT]: \"The identifier you are trying to register already exists. Please check the content and try again.\",\n [StatusCodes.PAYMENT_REQUIRED]: \"Payment is required for this operation. Please check.\",\n [StatusCodes.GONE]: \"The requested resource is no longer available.\",\n [StatusCodes.LENGTH_REQUIRED]: \"The Content-Length header field is required for the request.\",\n [StatusCodes.PRECONDITION_FAILED]: \"The request failed because the precondition was not met.\",\n [StatusCodes.UNSUPPORTED_MEDIA_TYPE]: \"The requested media type is not supported.\",\n [StatusCodes.EXPECTATION_FAILED]: \"The server cannot meet the Expect header of the request.\",\n [StatusCodes.MISDIRECTED_REQUEST]: \"The server cannot appropriately process this request.\",\n [StatusCodes.UNPROCESSABLE_ENTITY]: \"There is an error in the request content.\",\n [StatusCodes.LOCKED]: \"The requested resource is locked.\",\n [StatusCodes.FAILED_DEPENDENCY]: \"The request failed due to dependency on a previous failed request.\",\n [StatusCodes.UPGRADE_REQUIRED]: \"A protocol upgrade is required to perform this operation.\",\n [StatusCodes.PRECONDITION_REQUIRED]: \"This request requires a precondition.\",\n [StatusCodes.TOO_MANY_REQUESTS]: \"Too many requests have been sent in a short time. Please wait and try again.\",\n [StatusCodes.REQUEST_HEADER_FIELDS_TOO_LARGE]: \"The request headers are too large.\",\n [StatusCodes.INTERNAL_SERVER_ERROR]: \"An unexpected error occurred. Please try again later.\",\n [StatusCodes.BAD_GATEWAY]: \"The server is currently overloaded. Please wait and try again later.\",\n [StatusCodes.SERVICE_UNAVAILABLE]: \"The service is temporarily unavailable. Please try again later.\",\n [StatusCodes.GATEWAY_TIMEOUT]: \"The communication timed out. Please try again.\",\n [StatusCodes.HTTP_VERSION_NOT_SUPPORTED]: \"The current communication method is not supported.\",\n [StatusCodes.NOT_IMPLEMENTED]: \"The server does not support the requested functionality.\",\n [StatusCodes.INSUFFICIENT_STORAGE]: \"The server has insufficient storage.\",\n [StatusCodes.NETWORK_AUTHENTICATION_REQUIRED]: \"Network authentication is required.\",\n 413: \"The payload of the request is too large. Please check the size.\", // PAYLOAD_TOO_LARGE\n 414: \"The request URI is too long.\", // URI_TOO_LONG\n 416: \"The requested range is invalid.\", // RANGE_NOT_SATISFIABLE\n 508: \"The server detected a loop.\", // LOOP_DETECTED\n 510: \"The request does not include the required extensions.\", // NOT_EXTENDED\n };\n\n public static getMessage(status: number): string {\n return this._responseMessages[status] || `Unexpected error: ${status}`;\n }\n}\n\n//#endregion 定数定義\n\n\n\n\n\n\n\n//#region APIレスポンスクラス\n\nexport class CotomyApiResponse {\n private _object: any | null = null;\n private _text: string | null = null;\n\n public constructor(private readonly _response?: Response | null) {\n }\n\n public get available(): boolean {\n return !!this._response;\n }\n\n public get empty(): boolean {\n return !this._response || this._response.status === 0;\n }\n\n public get ok(): boolean {\n return this._response?.ok ?? false;\n }\n\n public get status(): number {\n return this._response?.status ?? 0;\n }\n\n public get statusText(): string {\n return this._response?.statusText ?? '';\n }\n\n public get headers(): Headers {\n return this._response?.headers ?? new Headers();\n }\n\n public async textAsync(): Promise<string> {\n if (!this._response) return \"\";\n return this._text ?? (this._text = await this._response?.text());\n }\n\n /**\n * Centralized helper to ensure response JSON is parsed exactly once.\n */\n private async _ensureJsonParsedAsync(defaultValue: any): Promise<any> {\n if (this._response && this._object === null) {\n try {\n const text = await this.textAsync();\n if (!text) {\n this._object = defaultValue;\n } else {\n this._object = JSON.parse(text);\n }\n } catch (error) {\n throw new CotomyResponseJsonParseException(\n `Failed to parse JSON response: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n return this._object ?? defaultValue;\n }\n\n public async objectAsync<T = any>(defaultValue: T = {} as T): Promise<T> {\n return await this._ensureJsonParsedAsync(defaultValue);\n }\n\n public async arrayAsync<T = any>(defaultValue: T[] = []): Promise<T[]> {\n const parsed = await this._ensureJsonParsedAsync(defaultValue);\n return Array.isArray(parsed) ? parsed : defaultValue;\n }\n}\n\n//#endregion APIレスポンスクラス\n\n\n\n\n//#region APIから取得したデータの展開\n\nexport interface ICotomyBindNameGenerator {\n create(name: string, parent?: string): string;\n createIndex(parent: string | undefined, index: number): string;\n}\n\nexport class CotomyBracketBindNameGenerator implements ICotomyBindNameGenerator {\n create(name: string, parent?: string): string {\n return parent ? `${parent}[${name}]` : name;\n }\n\n createIndex(parent: string | undefined, index: number): string {\n return this.create(String(index), parent);\n }\n}\n\nexport class CotomyDotBindNameGenerator implements ICotomyBindNameGenerator {\n create(name: string, parent?: string): string {\n return parent ? `${parent}.${name}` : name;\n }\n\n createIndex(parent: string | undefined, index: number): string {\n return parent ? `${parent}[${index}]` : `[${index}]`;\n }\n}\n\nexport class CotomyViewRenderer {\n private _renderers: { [key: string]: (element: CotomyElement, value: any) => void } = {};\n private _builded: boolean = false;\n\n public constructor(public readonly element: CotomyElement, public readonly bindNameGenerator: ICotomyBindNameGenerator) {\n }\n\n protected get locale(): string {\n const languages = (navigator.languages && navigator.languages.length ? navigator.languages : [navigator.language]).filter(Boolean);\n let locale = this.element.attribute(\"data-cotomy-locale\")\n || this.element.closest(\"[data-cotomy-locale]\")?.attribute(\"data-cotomy-locale\")\n || languages[0]\n || 'en-US';\n return locale.includes(\"-\") ? locale.split(\"-\")[0] : locale;\n }\n\n public renderer(type: string, callback: (element: CotomyElement, value: any) => void): this {\n this._renderers[type] = callback;\n return this;\n }\n\n protected get renderers(): { [key: string]: (element: CotomyElement, value: any) => void } {\n this.initialize();\n return this._renderers;\n }\n\n protected get initialized(): boolean {\n return this._builded;\n }\n\n protected initialize(): this {\n if (!this.initialized) {\n this.renderer(\"mail\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"mailto:${value}\">${value}</a>`).appendTo(element);\n }\n });\n\n this.renderer(\"tel\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"tel:${value}\">${value}</a>`).appendTo(element);\n }\n });\n \n this.renderer(\"url\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"${value}\" target=\"_blank\">${value}</a>`).appendTo(element);\n }\n });\n\n this.renderer(\"number\", (element, value) => {\n if (value !== undefined && value !== null) {\n // ISO 4217 通貨コード\n const currency = element.attribute(\"data-cotomy-currency\")\n || element.closest(\"[data-cotomy-currency]\")?.attribute(\"data-cotomy-currency\");\n const fractionDigitsAttribute = element.attribute(\"data-cotomy-fraction-digits\")\n || element.closest(\"[data-cotomy-fraction-digits]\")?.attribute(\"data-cotomy-fraction-digits\");\n const fractionDigits = fractionDigitsAttribute ? Number.parseInt(fractionDigitsAttribute, 10) : undefined;\n const hasFractionDigits = Number.isFinite(fractionDigits)\n && fractionDigits && fractionDigits >= 0 && fractionDigits <= 20;\n\n const options: Intl.NumberFormatOptions = {\n ...(currency ? { style: \"currency\", currency } : {}),\n ...(hasFractionDigits ? { minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits } : {}),\n };\n\n element.text = new Intl.NumberFormat(this.locale, options).format(value);\n }\n });\n\n this.renderer(\"utc\", (element, value) => {\n if (value) {\n const hasOffset = /[+-]\\d{2}:\\d{2}$/.test(value);\n const date = hasOffset ? new Date(value) : new Date(`${value}Z`);\n if (!isNaN(date.getTime())) {\n const format = element.attribute(\"data-cotomy-format\") ?? \"YYYY/MM/DD HH:mm\";\n element.text = dayjs(date).format(format);\n }\n }\n });\n\n this.renderer(\"date\", (element, value) => {\n if (value) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n const format = element.attribute(\"data-cotomy-format\") ?? \"YYYY/MM/DD\";\n element.text = dayjs(date).format(format);\n }\n }\n });\n\n this._builded = true;\n }\n return this;\n }\n\n protected bindPrimitiveValue(propertyName: string, value: any): void {\n this.element.find(`[data-cotomy-bind=\"${propertyName}\" i]`).forEach(element => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Bind)) {\n console.debug(`Binding data to element [data-cotomy-bind=\"${propertyName}\"]:`, value);\n }\n const type = element.attribute(\"data-cotomy-bindtype\")?.toLowerCase();\n if (type && this.renderers[type]) {\n this.renderers[type](element, value);\n } else {\n element.text = String(value ?? \"\");\n }\n });\n }\n\n protected async applyArrayAsync(values: any[], propertyName: string): Promise<void> {\n for (let index = 0; index < values.length; index++) {\n const item = values[index];\n const itemName = this.bindNameGenerator.createIndex(propertyName, index);\n if (Array.isArray(item)) {\n await this.applyArrayAsync(item, itemName);\n continue;\n }\n if (item && typeof item === \"object\") {\n await this.applyObjectAsync(item, itemName);\n continue;\n }\n this.bindPrimitiveValue(itemName, item);\n }\n }\n\n protected async applyObjectAsync(target: any, propertyName: string | undefined = undefined): Promise<void> {\n if (!propertyName) {\n this.element.find(\"[data-cotomy-bind]\").forEach(e => e.clear());\n }\n for (const [key, value] of Object.entries(await target)) {\n const pname = this.bindNameGenerator.create(key, propertyName);\n if (Array.isArray(value)) {\n await this.applyArrayAsync(value, pname);\n continue;\n }\n if (value && typeof value === \"object\") {\n await this.applyObjectAsync(value, pname);\n continue;\n }\n this.bindPrimitiveValue(pname, value);\n }\n }\n\n public async applyAsync(respose: CotomyApiResponse): Promise<this> {\n if (!respose.available) {\n throw new Error(\"Response is not available.\");\n }\n\n await this.applyObjectAsync(await respose.objectAsync());\n return this;\n }\n}\n\n//#endregion\n\n\n\n//#region インターフェース定義\n\nexport interface ICotomyApiOptions {\n baseUrl?: string | null;\n headers?: Record<string, string> | null;\n credentials?: RequestCredentials | null;\n redirect?: RequestRedirect | null;\n cache?: RequestCache | null;\n referrerPolicy?: ReferrerPolicy | null;\n mode?: RequestMode | null;\n keepalive?: boolean | null;\n integrity?: string | null;\n}\n\nexport interface ICotomyRestSubmitForm {\n method: string;\n action: string;\n body: globalThis.FormData | Record<string, string> | any;\n}\n\n//#endregion インターフェース定義\n\n\n\n\nexport class CotomyApi {\n private readonly _abortController: AbortController = new AbortController();\n\n public constructor(private readonly _options: ICotomyApiOptions = {\n baseUrl: null, headers: null, credentials: null, redirect: null,\n cache: null, referrerPolicy: null, mode: null, keepalive: true,\n integrity: '', }) {\n }\n\n public get baseUrl(): string {\n return this._options.baseUrl || '';\n }\n\n public get headers(): Record<string, string> {\n return this._options.headers || {};\n }\n\n public get credentials(): RequestCredentials {\n return this._options.credentials || 'same-origin';\n }\n\n public get redirect(): RequestRedirect {\n return this._options.redirect || 'follow';\n }\n\n public get cache(): RequestCache {\n return this._options.cache || 'no-cache';\n }\n\n public get referrerPolicy(): ReferrerPolicy {\n return this._options.referrerPolicy || 'no-referrer';\n }\n\n public get mode(): RequestMode {\n return this._options.mode || 'cors';\n }\n\n public get keepalive(): boolean {\n return this._options.keepalive || true;\n }\n\n public get integrity(): string {\n return this._options.integrity || '';\n }\n\n public get abortController(): AbortController {\n return this._abortController;\n }\n\n\n private async requestAsync<T extends CotomyApiResponse = CotomyApiResponse>(method: string, path: string, body?: globalThis.FormData | Record<string, string> | any, signal?: AbortSignal, responseType?: new (response?: Response | null) => T): Promise<T> {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`API request: ${method} ${path}`, { body, headers: this.headers });\n }\n\n //#region Content-Type毎のbody変換処理\n\n const bodyTransformers: { [key: string]: (body: globalThis.FormData | Record<string, string> | any) => any } = {\n \"application/json\": (body) => JSON.stringify(body),\n \"application/x-www-form-urlencoded\": (body) => {\n if (body instanceof globalThis.FormData) {\n let params = new URLSearchParams();\n body.forEach((value, key) => {\n params.append(key, String(value));\n });\n return params.toString();\n } else {\n return new URLSearchParams(body).toString();\n }\n },\n \"multipart/form-data\": (body) => {\n if (body instanceof globalThis.FormData) {\n return body;\n }\n const formData = new globalThis.FormData();\n for (const [key, value] of Object.entries(body)) {\n formData.append(key, String(value));\n }\n return formData;\n } \n };\n\n //#endregion\n\n\n // 先頭がアルファベットの場合は絶対または相対URLとみなす\n // それ以外はベースURLを使用して組み立てる\n const url = /^[a-zA-Z]/.test(path) ? path\n : `${(this.baseUrl || '').replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n const headers = new Headers(this.headers);\n\n if (headers.has('Content-Type') && headers.get(\"Content-Type\") === \"multipart/form-data\") {\n // multipart/form-dataの場合はbodyをFormDataとして送信するため、Content-Typeヘッダーを削除する\n headers.delete('Content-Type');\n }\n\n const ct = headers.get('Content-Type') || \"multipart/form-data\";\n if (ct === 'multipart/form-data' && body && !(body instanceof globalThis.FormData)) {\n if (typeof body !== 'object' || Array.isArray(body)) {\n throw new CotomyInvalidFormDataBodyException(\n 'Body must be FormData or a plain object when using multipart/form-data.'\n );\n }\n }\n \n const responseClass = responseType ?? CotomyApiResponse as new (response?: Response | null) => T;\n const response = new responseClass(await fetch(url, {\n method,\n headers,\n credentials: this.credentials,\n body: body ? (bodyTransformers[ct] ? bodyTransformers[ct](body) : body) : undefined,\n signal: signal ?? this._abortController.signal,\n redirect: this.redirect,\n cache: this.cache,\n referrerPolicy: this.referrerPolicy,\n mode: this.mode,\n keepalive: this.keepalive,\n integrity: this.integrity,\n }));\n\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`response body: ${response.status} ${response.statusText}`, await response.textAsync());\n }\n\n // 400番台と500番台のエラーハンドリング\n if (response.status >= 400 && response.status < 600) {\n const errorBody = await response.textAsync().catch(() => 'No response body available');\n const errorMessage = response.statusText || ResponseMessages.getMessage(response.status) || `Unexpected error: ${response.status}`;\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(`API request failed: ${errorMessage}`, response, errorBody);\n }\n switch (response.status) {\n case StatusCodes.BAD_REQUEST:\n case StatusCodes.UNPROCESSABLE_ENTITY:\n throw new CotomyRequestInvalidException(response.status, errorMessage, response, errorBody);\n case StatusCodes.UNAUTHORIZED:\n throw new CotomyUnauthorizedException(response.status, errorMessage, response, errorBody);\n case StatusCodes.FORBIDDEN:\n throw new CotomyForbiddenException(response.status, errorMessage, response, errorBody);\n case StatusCodes.NOT_FOUND:\n throw new CotomyNotFoundException(response.status, errorMessage, response, errorBody);\n case StatusCodes.CONFLICT:\n case StatusCodes.GONE:\n throw new CotomyConflictException(response.status, errorMessage, response, errorBody);\n case StatusCodes.TOO_MANY_REQUESTS:\n throw new CotomyTooManyRequestsException(response.status, errorMessage, response, errorBody);\n default:\n if (response.status < 500) {\n throw new CotomyHttpClientError(response.status, errorMessage, response, errorBody);\n } else {\n throw new CotomyHttpServerError(response.status, errorMessage, response, errorBody);\n }\n }\n }\n\n return response as T;\n }\n\n\n //#region HTTPメソッド\n\n public async getAsync(path: string, parameters?: globalThis.FormData | Record<string, string | number>): Promise<CotomyApiResponse> {\n let queryString = '';\n if (parameters instanceof globalThis.FormData) {\n let params = new URLSearchParams();\n parameters.forEach((value, key) => {\n params.append(key, String(value));\n });\n queryString = params.toString();\n } else if (parameters) {\n queryString = new URLSearchParams(\n Object.fromEntries(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n )\n ).toString();\n }\n const fullUrl = queryString ? `${path}?${queryString}` : path;\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`GET request to: ${fullUrl}`);\n }\n return this.requestAsync(Methods.GET, fullUrl);\n }\n\n public async postAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.POST, path, body);\n }\n\n public async putAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.PUT, path, body);\n }\n\n public async patchAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.PATCH, path, body);\n }\n\n public async deleteAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.DELETE, path);\n }\n\n public async headAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.HEAD, path);\n }\n\n public async optionsAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.OPTIONS, path);\n }\n\n public async traceAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.TRACE, path);\n }\n\n public async connectAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.CONNECT, path);\n }\n\n public async submitAsync(form: ICotomyRestSubmitForm): Promise<CotomyApiResponse> {\n return form.method.toUpperCase() === Methods.GET ? this.getAsync(form.action, form.body)\n : this.requestAsync(form.method.toUpperCase(), form.action, form.body);\n }\n\n //#endregion HTTPメソッド\n}\n","import dayjs from \"dayjs\";\nimport { StatusCodes } from \"http-status-codes\";\nimport { CotomyApi, CotomyApiException, CotomyApiResponse, CotomyBracketBindNameGenerator, CotomyNotFoundException, CotomyViewRenderer, ICotomyBindNameGenerator } from \"./api\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\nimport { CotomyElement, CotomyWindow } from \"./view\";\n\n\n\n\nexport abstract class CotomyForm extends CotomyElement {\n public override generateId(prefix: string = \"__cotomy_form__\"): this {\n return super.generateId(prefix);\n }\n\n\n //#region フォームの基本情報\n\n protected get method(): string {\n return this.attribute(\"method\") ?? \"get\";\n }\n\n public get actionUrl(): string {\n return this.attribute(\"action\") ?? location.pathname + location.search;\n }\n\n //#endregion\n\n\n\n //#region フォームの再読み込み\n\n public async reloadAsync(): Promise<void> {\n CotomyWindow.instance.reload();\n }\n\n public get autoReload(): boolean {\n return this.attribute(\"data-cotomy-autoreload\") !== \"false\";\n }\n\n public set autoReload(value: boolean) {\n if (value) {\n this.attribute(\"data-cotomy-autoreload\", null);\n } else {\n this.attribute(\"data-cotomy-autoreload\", \"false\");\n }\n }\n\n //#endregion\n\n\n\n //#region フォームの構築\n\n public get initialized(): boolean {\n return this.hasAttribute(\"data-cotomy-initialized\");\n }\n\n public initialize(): this {\n if (!this.initialized) {\n this.on(\"submit\", async e => {\n e.preventDefault();\n e.stopPropagation();\n await this.submitAsync();\n });\n\n this.attribute(\"data-cotomy-initialized\", \"\");\n }\n return this;\n }\n\n //#endregion\n\n\n\n //#region Submit\n\n public abstract submitAsync(): Promise<void>;\n\n //#endregion\n}\n\n\n\nexport class CotomyQueryForm extends CotomyForm {\n protected override get method(): string {\n return \"get\"; // QueryFormはGETメソッドを使用することが前提\n }\n\n\n public override async submitAsync(): Promise<void> {\n const url = this.actionUrl;\n\n // クエリパラメータを連想配列にする\n const queryParams: { [key: string]: string } = {};\n const queryString = url.split(\"?\")[1];\n if (queryString) {\n queryString.split(\"&\").forEach(param => {\n const [key, value] = param.split(\"=\");\n if (key && value) {\n queryParams[key] = decodeURIComponent(value);\n }\n });\n }\n\n // フォームの入力値をクエリパラメータに追加\n this.find(\"[name]\").forEach(input => {\n const name = input.attribute(\"name\");\n if (name) {\n const value = input.value;\n if (value) {\n queryParams[name] = encodeURIComponent(value);\n } else {\n delete queryParams[name]; // 空の値は削除\n }\n }\n });\n\n // クエリパラメータを再構築\n const newQueryString = Object.entries(queryParams)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"&\");\n\n location.href = `${url.split(\"?\")[0]}?${newQueryString}`;\n }\n}\n\n\nexport class CotomyApiFailedEvent extends Event {\n public constructor(private _response: CotomyApiResponse, eventName: string = \"cotomy:apifailed\") {\n super(eventName, { bubbles: true, cancelable: true });\n }\n\n public get response(): CotomyApiResponse {\n return this._response;\n }\n}\n\n\nexport class CotomyApiForm extends CotomyForm {\n public apiClient(): CotomyApi {\n return new CotomyApi();\n }\n\n public override get actionUrl(): string {\n return this.attribute(\"action\")!;\n }\n\n\n\n //#region API Submit\n\n public apiFailed(handle: ((event: CotomyApiFailedEvent) => void | Promise<void>)): this {\n this.on(\"cotomy:apifailed\", async e => {\n await handle(e as CotomyApiFailedEvent);\n });\n return this;\n }\n\n protected triggerApiFailedEvent(response: CotomyApiResponse): void {\n this.trigger(\"cotomy:apifailed\", new CotomyApiFailedEvent(response));\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(\"API request failed:\", response);\n }\n }\n\n public submitFailed(handle: ((event: CotomyApiFailedEvent) => void | Promise<void>)): this {\n this.on(\"cotomy:submitfailed\", async e => {\n await handle(e as CotomyApiFailedEvent);\n });\n return this;\n }\n\n protected triggerSubmitFailedEvent(response: CotomyApiResponse): void {\n this.trigger(\"cotomy:submitfailed\", new CotomyApiFailedEvent(response, \"cotomy:submitfailed\"));\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(\"Submit failed:\", response);\n }\n }\n\n protected override get method(): string {\n return this.attribute(\"method\") ?? \"post\";\n }\n\n public formData(): FormData {\n const formElement = <HTMLFormElement>this.element;\n const formData = new FormData(formElement);\n\n this.find(\"input[type=datetime-local][name]:not([disabled])\").forEach(input => {\n const localDateTime = input.value;\n if (localDateTime) {\n const date = new Date(localDateTime);\n if (!isNaN(date.getTime())) {\n formData.set(input.attribute(\"name\")!, dayjs(date).format(\"YYYY-MM-DDTHH:mmZ\"));\n }\n }\n });\n\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.FormData)) {\n console.debug(\"FormData:\", Array.from(formData.entries()));\n }\n\n return formData;\n };\n\n public override async submitAsync(): Promise<void> {\n const formData = this.formData();\n await this.submitToApiAsync(formData);\n }\n\n protected async submitToApiAsync(formData: FormData): Promise<CotomyApiResponse> {\n const api = this.apiClient();\n\n try {\n const response = await api.submitAsync({\n method: this.method,\n action: this.actionUrl,\n body: formData,\n });\n\n return response;\n } catch (error) {\n if (error instanceof CotomyApiException) {\n this.triggerApiFailedEvent(error.response);\n this.triggerSubmitFailedEvent(error.response);\n }\n throw error;\n }\n }\n\n //#endregion\n}\n\n\n\nexport class CotomyEntityApiForm extends CotomyApiForm {\n\n public get entityKey(): string | undefined {\n return this.attribute(\"data-cotomy-entity-key\") || undefined;\n }\n\n protected get requiresEntityKey(): boolean {\n return this.attribute(\"data-cotomy-identify\") !== \"false\";\n }\n\n protected get hasEntityKey(): boolean {\n return !!this.entityKey;\n }\n\n public override get actionUrl(): string {\n const action = this.attribute(\"action\")!;\n const normalized = action.replace(/\\/+$/, \"\");\n\n if (!this.entityKey) {\n return action.endsWith(\"/\") ? action : `${normalized}/`;\n }\n\n return `${normalized}/${encodeURIComponent(this.entityKey)}`;\n }\n\n protected override get method(): string {\n if (this.hasAttribute(\"method\") && this.attribute(\"method\") !== \"\") {\n return this.attribute(\"method\")!;\n }\n\n return this.hasEntityKey ? \"put\" : \"post\";\n }\n\n\n //#region データ識別\n\n protected setEntityKey(response: CotomyApiResponse) {\n if (this.requiresEntityKey && response.status === StatusCodes.CREATED) {\n if (this.hasEntityKey) {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.FormLoad)) {\n console.warn(\"Entity key already exists, but server responded with 201 Created. Possible duplicate POST.\");\n }\n return;\n }\n\n const location = response.headers.get(\"Location\");\n if (!location) return;\n\n const normalize = (url: string) => {\n const s = url.replace(/[?#].*$/, \"\");\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n };\n\n const toPath = (u: string) => {\n try { return new URL(u, location).pathname; } catch { return u; }\n };\n\n const baseAction = normalize(toPath(this.attribute(\"action\")!));\n const locPath = normalize(toPath(location));\n const actionParts = baseAction.split(\"/\");\n const locationParts = locPath.split(\"/\");\n const isPrefix = locationParts.length >= actionParts.length && actionParts.every((p, i) => p === locationParts[i]);\n if (!isPrefix) {\n throw new Error(`Location path does not start with action path. action=\"${baseAction}\", location=\"${locPath}\"`);\n }\n\n const addedParts = locationParts.slice(actionParts.length).filter(Boolean);\n if (addedParts.length === 1 && addedParts[0]) {\n this.attribute(\"data-cotomy-entity-key\", addedParts[0]);\n } else {\n const msg = `Location does not contain a single entity key segment.\n action=\"${baseAction}\", location=\"${locPath}\", added=[\"${addedParts.join('\",\"')}\"]`;\n throw new Error(msg);\n }\n }\n }\n\n protected override async submitToApiAsync(formData: FormData): Promise<CotomyApiResponse> {\n const response = await super.submitToApiAsync(formData);\n\n // APIのレスポンスからidを設定\n if (this.requiresEntityKey && response.status === StatusCodes.CREATED) {\n this.setEntityKey(response);\n }\n\n return response;\n }\n\n //#endregion\n}\n\n\n\nexport class CotomyEntityFillApiForm extends CotomyEntityApiForm {\n private _fillers: { [key: string]: (input: CotomyElement, value: any) => void } = {};\n\n public filler(type: string, func: (input: CotomyElement, value: any) => void): this {\n this._fillers[type] = func;\n return this;\n }\n\n public override initialize(): this {\n if (!this.initialized) {\n super.initialize();\n\n this.filler(\"datetime-local\", (input, value) => {\n const hasOffset = /[+-]\\d{2}:\\d{2}$/.test(value);\n const date = hasOffset ? new Date(value) : new Date(`${value}Z`);\n if (!isNaN(date.getTime())) {\n input.value = dayjs(date).format(\"YYYY-MM-DDTHH:mm\");\n } else {\n input.value = \"\";\n }\n });\n\n this.filler(\"checkbox\", (input, value) => {\n input.attribute(\"checked\", null);\n if (value) {\n input.attribute(\"checked\", \"\");\n }\n });\n\n this.filler(\"radio\", (input, value) => {\n input.attribute(\"checked\", null);\n if (input.value === value) {\n input.attribute(\"checked\", \"\");\n }\n });\n\n CotomyWindow.instance.ready(async () => {\n await this.loadAsync();\n });\n }\n return this;\n }\n\n\n\n\n\n public override async reloadAsync(): Promise<void> {\n await this.loadAsync();\n }\n\n protected loadActionUrl(): string {\n return this.actionUrl;\n }\n\n protected bindNameGenerator(): ICotomyBindNameGenerator {\n return new CotomyBracketBindNameGenerator();\n }\n\n public renderer(): CotomyViewRenderer {\n return new CotomyViewRenderer(this, this.bindNameGenerator());\n }\n\n protected canLoad(): boolean {\n return this.hasEntityKey;\n }\n\n protected async loadAsync(): Promise<CotomyApiResponse> {\n if (!this.canLoad()) {\n return new CotomyApiResponse();\n }\n\n const api = this.apiClient();\n try {\n const response = await api.getAsync(this.loadActionUrl());\n await this.fillAsync(response);\n return response;\n } catch (error) {\n if (error instanceof CotomyApiException) {\n this.triggerApiFailedEvent(error.response);\n }\n if (error instanceof CotomyNotFoundException) {\n return error.response;\n }\n throw error;\n }\n }\n\n protected applyValueToInputs(pname: string, value: any): void {\n this.find(`input[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]):not([multiple]),\n textarea[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]), \n select[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]):not([multiple])`).forEach(input => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Fill)) {\n console.debug(`Filling input[name=\"${pname}\"] with value:`, value);\n }\n const type = input.attribute(\"type\")?.toLowerCase();\n if (type && this._fillers[type]) {\n this._fillers[type](input, value);\n } else {\n input.value = String(value || \"\");\n }\n });\n }\n\n protected async fillArrayAsync(bindNameGenerator: ICotomyBindNameGenerator, values: any[], propertyName: string): Promise<void> {\n for (let index = 0; index < values.length; index++) {\n const item = values[index];\n const itemName = bindNameGenerator.createIndex(propertyName, index);\n if (Array.isArray(item)) {\n await this.fillArrayAsync(bindNameGenerator, item, itemName);\n continue;\n }\n if (item && typeof item === \"object\") {\n await this.fillObjectAsync(bindNameGenerator, item, itemName);\n continue;\n }\n this.applyValueToInputs(itemName, item);\n }\n }\n\n protected async fillObjectAsync(bindNameGenerator: ICotomyBindNameGenerator, target: any, propertyName: string | undefined = undefined): Promise<void> {\n for (const [key, value] of Object.entries(target)) {\n if (key.endsWith('[]')) {\n continue;\n }\n\n const pname = bindNameGenerator.create(key, propertyName);\n if (Array.isArray(value)) {\n await this.fillArrayAsync(bindNameGenerator, value, pname);\n continue;\n }\n if (value && typeof value === \"object\") {\n await this.fillObjectAsync(bindNameGenerator, value, pname);\n continue;\n }\n\n this.applyValueToInputs(pname, value);\n }\n }\n\n protected async fillAsync(response: CotomyApiResponse): Promise<void> {\n if (response.ok && response.available) {\n await this.fillObjectAsync(this.bindNameGenerator(), await response.objectAsync());\n await this.renderer().applyAsync(response);\n }\n\n // textareaを自動リサイズ\n this.find(\"textarea\").forEach(e => e.input());\n }\n\n protected override async submitToApiAsync(formData: globalThis.FormData): Promise<CotomyApiResponse> {\n const response = await super.submitToApiAsync(formData);\n if (response.ok) {\n await this.fillAsync(response);\n }\n return response;\n }\n}\n","import dayjs from \"dayjs\";\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\nimport { CotomyForm } from \"./form\";\nimport { CotomyElement, CotomyWindow } from \"./view\";\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\n\nexport class CotomyUrl {\n public static location() {\n return new CotomyUrl();\n }\n\n private _url: URL;\n\n public constructor(url: string | null = null) {\n this._url = new URL(url ?? (location.pathname + location.search), location.origin);\n }\n\n public get url(): string {\n return this._url.pathname + this._url.search;\n }\n\n public get path(): string {\n return this._url.pathname;\n }\n\n public get segments(): string[] {\n return this._url.pathname.split(\"/\").filter(s => s.length > 0);\n }\n\n public get query(): string {\n return this._url.search.replace(/^\\?/, \"\");\n }\n\n public get parameters(): { [key: string]: string } {\n const dict: Record<string, string> = {};\n this._url.searchParams.forEach((value, key) => { dict[key] = value; });\n return dict;\n }\n\n public redirect() {\n window.location.href = this.url;\n }\n\n public replace(): void {\n window.location.replace(this.url);\n }\n\n public replaceState(state: any = null, title: string = \"\"): void {\n window.history.replaceState(state, title, this.url);\n }\n}\n\n\n\n\n\nexport class CotomyPageController {\n private static _instance: CotomyPageController | null = null;\n\n public static set<T extends CotomyPageController = CotomyPageController>(type: new () => T): T {\n if (this._instance) {\n throw new Error(\"PageController is already initialized.\");\n }\n this._instance = new type();\n CotomyWindow.instance.load(async () => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Page)) {\n console.debug(\"CotomyPageController initialize.\");\n }\n CotomyWindow.instance.initialize();\n await CotomyPageController._instance!.initializeAsync();\n CotomyWindow.instance.trigger(\"cotomy:ready\");\n });\n return this._instance as T;\n }\n\n public static get<T extends CotomyPageController = CotomyPageController>(): T {\n if (!(this._instance instanceof CotomyPageController)) {\n throw new Error(\"PageController is not initialized. Use CotomyPageController.set() to initialize it.\");\n }\n return this._instance as T;\n }\n\n\n private _forms: { [key: string]: CotomyForm } = {};\n\n protected setForm<T extends CotomyForm = CotomyForm>(form: T): T {\n if (!form.id) {\n form.generateId();\n }\n this._forms[form.id!] = form;\n form.removed(() => {\n delete this._forms[form.id!];\n });\n return form.initialize();\n }\n\n protected getForm<T extends CotomyForm = CotomyForm>(id: string, type?: { new(...args: any[]): T }): T | undefined {\n const form = this._forms[id];\n if (!form) return undefined;\n\n if (type && !(form instanceof type)) {\n throw new Error(`Form \"${id}\" is not instance of expected type.`);\n }\n\n return form as T;\n }\n\n protected forms(): CotomyForm[] {\n return Object.values(this._forms);\n }\n\n protected async restoreAsync(): Promise<void> {\n for (const f of this.forms()) {\n if (CotomyWindow.instance.reloading) {\n break;\n }\n if (f.autoReload) {\n await f.reloadAsync();\n }\n }\n }\n\n private isValidUtcDateString(value: string): boolean {\n return dayjs(value).isValid() && (value.endsWith(\"Z\") || /[+-]\\d{2}:\\d{2}$/.test(value));\n }\n\n private initializeDateTimeElements() {\n CotomyWindow.instance.body.find(\"[data-cotomy-datetime]:not([data-cotomy-formatted])\").forEach(e => {\n if (dayjs(e.text).isValid()) {\n const timezone = e.attribute(\"data-cotomy-timezone\")\n || e.closest(\"[data-cotomy-timezone]\")?.attribute(\"data-cotomy-timezone\");\n const format: string = e.attribute(\"data-cotomy-format\") ?? \"YYYY-MM-DD HH:mm\";\n const lt = this.isValidUtcDateString(e.text) ? dayjs(e.text) : dayjs(`${dayjs(e.text).format(\"YYYY-MM-DDTHH:mm:ss\")}Z`);\n const dt = e.attribute(\"data-cotomy-datetime\") === \"local\" ? lt : lt.utc();\n e.text = (timezone && timezone.trim() !== \"\") ? dt.tz(timezone).format(format) : dt.format(format);\n e.attribute(\"data-cotomy-formatted\", \"\");\n }\n });\n }\n\n\n protected async initializeAsync(): Promise<void> {\n this.initializeDateTimeElements();\n\n CotomyWindow.instance.pageshow(async e => {\n if (e.persisted) {\n await this.restoreAsync();\n if (CotomyWindow.instance.reloading) {\n e.stopImmediatePropagation();\n }\n }\n });\n }\n\n public get body(): CotomyElement {\n return CotomyWindow.instance.body;\n }\n\n protected get url(): CotomyUrl {\n return new CotomyUrl();\n }\n}\n\n"],"names":["root","factory","exports","module","define","amd","this","getRandomValue","crypto","window","msCrypto","self","lim","Math","pow","abs","getRandomValues","Uint32Array","random","pad","env","globalCount","Object","keys","length","clientId","navigator","mimeTypes","userAgent","toString","e","n","r","i","s","u","a","o","c","f","h","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","Array","join","v","z","utcOffset","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","S","_","O","args","arguments","b","locale","$L","utc","$u","x","$x","$offset","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","k","forEach","extend","$i","isDayjs","en","Ls","num","size","substr","day","hour","minute","second","timeZoneName","Intl","DateTimeFormat","hour12","timeZone","formatToParts","type","value","parseInt","tz","toLocaleString","$timezone","offsetName","guess","find","call","max","resolvedOptions","setDefault","fingerprint","discreteValues","randomBlock","safeCounter","cuid","slug","counter","print","isCuid","stringToCheck","startsWith","isSlug","stringLength","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","StatusCodes","CotomyDebugFeature","CotomyDebugSettings","isEnabled","global","localStorage","getItem","PREFIX","enable","setItem","disable","enableAll","disableAll","clear","removeItem","HandlerEntry","handle","wrapper","options","current","equals","entryOrHandle","optionsOrMode","mode","targetHandle","targetWrapper","targetOptions","compareMode","optionsEquals","left","right","getBoolean","getSignal","signal","signalsEqual","HandlerRegistory","target","_registory","Map","ensure","event","entry","once","remove","push","element","addEventListener","list","removeEventListener","capture","delete","remaining","empty","EventRegistry","_registry","instance","_instance","map","scopeId","registry","on","off","CotomyElement","encodeHtml","text","div","document","createElement","textContent","innerHTML","createHTMLElement","html","Error","tag","wrap","prefix","suffix","wrappedHtml","doc","DOMParser","parseFromString","querySelector","body","children","first","selector","last","pop","elements","querySelectorAll","ctor","from","contains","byId","id","getElementById","containsById","attribute","style","_parentElement","HTMLElement","_element","tagname","css","useScopedCss","Html","console","debug","setInstanceId","hasAttribute","removed","instanceId","stylable","includes","scopedCssElementId","cssid","writeCss","node","createTextNode","appendChild","prependTo","documentElement","append","listenLayoutEvents","LISTEN_LAYOUT_EVENTS_ATTRIBUTE","generateId","clonedElement","cloneNode","attr","removeAttribute","el","tagName","is","selectors","subSelector","trim","directChild","matches","parentElement","Set","has","attached","readonly","readOnly","val","setFocus","focus","visible","offsetParent","rect","getBoundingClientRect","width","height","getComputedStyle","display","visibility","enabled","getAttribute","setAttribute","invalidated","offsetWidth","offsetHeight","innerWidth","clientWidth","innerHeight","clientHeight","outerWidth","margin","parseFloat","marginLeft","marginRight","outerHeight","marginTop","marginBottom","scrollHeight","scrollWidth","scrollTop","position","top","absolutePosition","scrollY","scrollX","screenPosition","innerRect","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","outerRect","bottom","inViewport","isAboveViewport","isBelowViewport","isLeftViewport","isRightViewport","comesBefore","pos","compareDocumentPosition","Node","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_FOLLOWING","comesAfter","DOCUMENT_POSITION_PRECEDING","hasClass","classList","addClass","removeClass","toggleClass","force","toggle","getPropertyValue","removeProperty","setProperty","computedStyle","parent","parents","currentElement","hasChildren","directChildren","filter","child","firstChild","shift","lastChild","closest","closestElement","previousSibling","previousElementSibling","ce","nextSibling","nextElementSibling","siblings","runWithMoveEvents","operation","trigger","prepend","appendAll","targets","insertBefore","before","insertAfter","after","appendTo","dispatchEvent","Event","bubbles","isArray","eventName","onSubTree","delegate","mergedOptions","click","async","dblclick","mouseover","mouseout","mousedown","mouseup","mousemove","mouseenter","mouseleave","dragstart","dragend","dragover","dragenter","dragleave","drop","drag","keydown","keyup","keypress","change","input","intersectionObserver","_intersectionObserver","IntersectionObserver","entries","isIntersecting","inview","observe","outview","blur","focusin","focusout","filedrop","preventDefault","dt","dataTransfer","files","resize","scroll","changeLayout","CotomyMetaElement","content","CotomyWindow","_body","_mutationObserver","_reloading","_eventHandlers","initialized","initialize","changeLayoutEvent","CustomEvent","passive","stopPropagation","MutationObserver","mutations","mutation","removedNodes","childList","subtree","reloading","reload","location","moveNext","focused","focusableElements","nextIndex","indexOf","handlers","load","ready","pageshow","scrollLeft","documentWidth","documentHeight","CotomyApiException","constructor","status","message","response","bodyText","super","CotomyHttpClientError","CotomyUnauthorizedException","CotomyForbiddenException","CotomyNotFoundException","CotomyConflictException","CotomyRequestInvalidException","CotomyTooManyRequestsException","CotomyHttpServerError","CotomyResponseJsonParseException","CotomyInvalidFormDataBodyException","Methods","GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","TRACE","CONNECT","ResponseMessages","getMessage","_responseMessages","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","METHOD_NOT_ALLOWED","NOT_ACCEPTABLE","PROXY_AUTHENTICATION_REQUIRED","REQUEST_TIMEOUT","CONFLICT","PAYMENT_REQUIRED","GONE","LENGTH_REQUIRED","PRECONDITION_FAILED","UNSUPPORTED_MEDIA_TYPE","EXPECTATION_FAILED","MISDIRECTED_REQUEST","UNPROCESSABLE_ENTITY","LOCKED","FAILED_DEPENDENCY","UPGRADE_REQUIRED","PRECONDITION_REQUIRED","TOO_MANY_REQUESTS","REQUEST_HEADER_FIELDS_TOO_LARGE","INTERNAL_SERVER_ERROR","BAD_GATEWAY","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","HTTP_VERSION_NOT_SUPPORTED","NOT_IMPLEMENTED","INSUFFICIENT_STORAGE","NETWORK_AUTHENTICATION_REQUIRED","CotomyApiResponse","_response","_object","_text","available","ok","statusText","headers","Headers","textAsync","_ensureJsonParsedAsync","defaultValue","JSON","error","objectAsync","arrayAsync","parsed","CotomyBracketBindNameGenerator","create","createIndex","index","CotomyDotBindNameGenerator","CotomyViewRenderer","bindNameGenerator","_renderers","_builded","languages","language","Boolean","renderer","callback","renderers","currency","fractionDigitsAttribute","fractionDigits","isFinite","minimumFractionDigits","maximumFractionDigits","NumberFormat","isNaN","bindPrimitiveValue","propertyName","Bind","applyArrayAsync","values","item","itemName","applyObjectAsync","pname","applyAsync","respose","CotomyApi","_options","baseUrl","credentials","redirect","cache","referrerPolicy","keepalive","integrity","_abortController","AbortController","abortController","requestAsync","method","path","responseType","Api","bodyTransformers","stringify","globalThis","FormData","params","URLSearchParams","formData","url","ct","fetch","errorBody","catch","errorMessage","getAsync","parameters","queryString","fromEntries","fullUrl","postAsync","putAsync","patchAsync","deleteAsync","headAsync","optionsAsync","traceAsync","connectAsync","submitAsync","form","toUpperCase","action","CotomyForm","actionUrl","pathname","search","reloadAsync","autoReload","CotomyQueryForm","queryParams","param","decodeURIComponent","encodeURIComponent","newQueryString","href","CotomyApiFailedEvent","cancelable","CotomyApiForm","apiClient","apiFailed","triggerApiFailedEvent","submitFailed","triggerSubmitFailedEvent","formElement","localDateTime","submitToApiAsync","api","CotomyEntityApiForm","entityKey","requiresEntityKey","hasEntityKey","normalized","endsWith","setEntityKey","CREATED","FormLoad","warn","normalize","toPath","URL","baseAction","locPath","actionParts","locationParts","every","addedParts","msg","CotomyEntityFillApiForm","_fillers","filler","func","loadAsync","loadActionUrl","canLoad","fillAsync","applyValueToInputs","Fill","fillArrayAsync","fillObjectAsync","CotomyUrl","_url","origin","segments","query","dict","searchParams","replaceState","state","title","history","CotomyPageController","_forms","Page","initializeAsync","setForm","getForm","forms","restoreAsync","isValidUtcDateString","initializeDateTimeElements","timezone","lt","persisted","stopImmediatePropagation"],"sourceRoot":""}
1
+ {"version":3,"file":"cotomy.min.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAgB,OAAID,IAEpBD,EAAa,OAAIC,GAClB,CATD,CASGK,KAAM,I,oBCRT,IAAIC,EAEAC,EAA2B,oBAAXC,SACjBA,OAAOD,QAAUC,OAAOC,WACT,oBAATC,MACPA,KAAKH,OAEP,GAAIA,EAAQ,CACR,IAAII,EAAMC,KAAKC,IAAI,EAAG,IAAM,EAC5BP,EAAiB,WACb,OAAOM,KAAKE,IAAIP,EAAOQ,gBAAgB,IAAIC,YAAY,IAAI,GAAKL,EACpE,CACJ,MACIL,EAAiBM,KAAKK,OAG1Bf,EAAOD,QAAUK,C,gBCjBjB,IAAIY,EAAM,EAAQ,KAEdC,EAAwB,iBAAXX,OAAsBA,OAASE,KAC5CU,EAAcC,OAAOC,KAAKH,GAAKI,OAE/BC,EAAWN,IADOO,UAAUC,UAAYD,UAAUC,UAAUH,OAAS,GAEvEE,UAAUE,UAAUJ,QAAQK,SAAS,IACrCR,EAAYQ,SAAS,IAAK,GAE5B1B,EAAOD,QAAU,WACf,OAAOuB,CACT,C,kBCXoEtB,EAAOD,QAAkI,WAAY,aAAa,IAAU4B,EAAE,IAAIC,EAAE,KAAKC,EAAE,cAAcC,EAAE,SAASC,EAAE,SAASC,EAAE,OAAOC,EAAE,MAAMC,EAAE,OAAOC,EAAE,QAAQC,EAAE,UAAUC,EAAE,OAAOC,EAAE,OAAOC,EAAE,eAAeC,EAAE,6FAA6FC,EAAE,sFAAsFC,EAAE,CAACC,KAAK,KAAKC,SAAS,2DAA2DC,MAAM,KAAKC,OAAO,wFAAwFD,MAAM,KAAKE,QAAQ,SAASC,GAAG,IAAIrB,EAAE,CAAC,KAAK,KAAK,KAAK,MAAMC,EAAEoB,EAAE,IAAI,MAAM,IAAIA,GAAGrB,GAAGC,EAAE,IAAI,KAAKD,EAAEC,IAAID,EAAE,IAAI,GAAG,GAAGsB,EAAE,SAASD,EAAErB,EAAEC,GAAG,IAAIC,EAAEqB,OAAOF,GAAG,OAAOnB,GAAGA,EAAER,QAAQM,EAAEqB,EAAE,GAAGG,MAAMxB,EAAE,EAAEE,EAAER,QAAQ+B,KAAKxB,GAAGoB,CAAC,EAAEK,EAAE,CAACtB,EAAEkB,EAAEK,EAAE,SAASN,GAAG,IAAIrB,GAAGqB,EAAEO,YAAY3B,EAAElB,KAAKE,IAAIe,GAAGE,EAAEnB,KAAK8C,MAAM5B,EAAE,IAAIE,EAAEF,EAAE,GAAG,OAAOD,GAAG,EAAE,IAAI,KAAKsB,EAAEpB,EAAE,EAAE,KAAK,IAAIoB,EAAEnB,EAAE,EAAE,IAAI,EAAEmB,EAAE,SAASD,EAAErB,EAAEC,GAAG,GAAGD,EAAE8B,OAAO7B,EAAE6B,OAAO,OAAOT,EAAEpB,EAAED,GAAG,IAAIE,EAAE,IAAID,EAAE8B,OAAO/B,EAAE+B,SAAS9B,EAAE+B,QAAQhC,EAAEgC,SAAS7B,EAAEH,EAAEiC,QAAQC,IAAIhC,EAAEM,GAAGJ,EAAEH,EAAEE,EAAE,EAAEE,EAAEL,EAAEiC,QAAQC,IAAIhC,GAAGE,GAAG,EAAE,GAAGI,GAAG,UAAUN,GAAGD,EAAEE,IAAIC,EAAED,EAAEE,EAAEA,EAAEF,KAAK,EAAE,EAAEG,EAAE,SAASe,GAAG,OAAOA,EAAE,EAAEtC,KAAKoD,KAAKd,IAAI,EAAEtC,KAAK8C,MAAMR,EAAE,EAAEe,EAAE,SAASf,GAAG,MAAM,CAACN,EAAEP,EAAEM,EAAEJ,EAAE2B,EAAE9B,EAAEI,EAAEL,EAAEgC,EAAE3B,EAAED,EAAEL,EAAEiB,EAAElB,EAAEA,EAAED,EAAEoC,GAAGrC,EAAEsC,EAAE/B,GAAGY,IAAIE,OAAOF,GAAG,IAAIoB,cAAcC,QAAQ,KAAK,GAAG,EAAErC,EAAE,SAASgB,GAAG,YAAO,IAASA,CAAC,GAAGsB,EAAE,KAAKL,EAAE,CAAC,EAAEA,EAAEK,GAAG5B,EAAE,IAAIqB,EAAE,iBAAiBQ,EAAE,SAASvB,GAAG,OAAOA,aAAawB,MAAMxB,IAAIA,EAAEe,GAAG,EAAEC,EAAE,SAAShB,EAAErB,EAAEC,EAAEC,GAAG,IAAIC,EAAE,IAAIH,EAAE,OAAO2C,EAAE,GAAG,iBAAiB3C,EAAE,CAAC,IAAII,EAAEJ,EAAEyC,cAAcH,EAAElC,KAAKD,EAAEC,GAAGH,IAAIqC,EAAElC,GAAGH,EAAEE,EAAEC,GAAG,IAAIC,EAAEL,EAAEkB,MAAM,KAAK,IAAIf,GAAGE,EAAEX,OAAO,EAAE,OAAO2B,EAAEhB,EAAE,GAAG,KAAK,CAAC,IAAIC,EAAEN,EAAEgB,KAAKsB,EAAEhC,GAAGN,EAAEG,EAAEG,CAAC,CAAC,OAAOJ,GAAGC,IAAIwC,EAAExC,GAAGA,IAAID,GAAGyC,CAAC,EAAEG,EAAE,SAASzB,EAAErB,GAAG,GAAG4C,EAAEvB,GAAG,OAAOA,EAAEY,QAAQ,IAAIhC,EAAE,iBAAiBD,EAAEA,EAAE,CAAC,EAAE,OAAOC,EAAE6B,KAAKT,EAAEpB,EAAE8C,KAAKC,UAAU,IAAIH,EAAE5C,EAAE,EAAEgD,EAAEvB,EAAEuB,EAAErC,EAAEyB,EAAEY,EAAE9C,EAAEyC,EAAEK,EAAEZ,EAAE,SAAShB,EAAErB,GAAG,OAAO8C,EAAEzB,EAAE,CAAC6B,OAAOlD,EAAEmD,GAAGC,IAAIpD,EAAEqD,GAAGC,EAAEtD,EAAEuD,GAAGC,QAAQxD,EAAEwD,SAAS,EAAE,IAAIX,EAAE,WAAW,SAAS9B,EAAEM,GAAG7C,KAAK2E,GAAGd,EAAEhB,EAAE6B,OAAO,MAAK,GAAI1E,KAAKiF,MAAMpC,GAAG7C,KAAK+E,GAAG/E,KAAK+E,IAAIlC,EAAEiC,GAAG,CAAC,EAAE9E,KAAK4D,IAAG,CAAE,CAAC,IAAId,EAAEP,EAAE2C,UAAU,OAAOpC,EAAEmC,MAAM,SAASpC,GAAG7C,KAAKmF,GAAG,SAAStC,GAAG,IAAIrB,EAAEqB,EAAES,KAAK7B,EAAEoB,EAAE+B,IAAI,GAAG,OAAOpD,EAAE,OAAO,IAAI4D,KAAKC,KAAK,GAAGZ,EAAE5C,EAAEL,GAAG,OAAO,IAAI4D,KAAK,GAAG5D,aAAa4D,KAAK,OAAO,IAAIA,KAAK5D,GAAG,GAAG,iBAAiBA,IAAI,MAAM8D,KAAK9D,GAAG,CAAC,IAAIE,EAAEF,EAAE+D,MAAMlD,GAAG,GAAGX,EAAE,CAAC,IAAIC,EAAED,EAAE,GAAG,GAAG,EAAEE,GAAGF,EAAE,IAAI,KAAK8D,UAAU,EAAE,GAAG,OAAO/D,EAAE,IAAI2D,KAAKA,KAAKK,IAAI/D,EAAE,GAAGC,EAAED,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEE,IAAI,IAAIwD,KAAK1D,EAAE,GAAGC,EAAED,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEA,EAAE,IAAI,EAAEE,EAAE,CAAC,CAAC,OAAO,IAAIwD,KAAK5D,EAAE,CAA3X,CAA6XqB,GAAG7C,KAAK0F,MAAM,EAAE5C,EAAE4C,KAAK,WAAW,IAAI7C,EAAE7C,KAAKmF,GAAGnF,KAAK2F,GAAG9C,EAAE+C,cAAc5F,KAAK6F,GAAGhD,EAAEiD,WAAW9F,KAAK+F,GAAGlD,EAAEmD,UAAUhG,KAAKiG,GAAGpD,EAAEqD,SAASlG,KAAKmG,GAAGtD,EAAEuD,WAAWpG,KAAKqG,GAAGxD,EAAEyD,aAAatG,KAAKuG,GAAG1D,EAAE2D,aAAaxG,KAAKyG,IAAI5D,EAAE6D,iBAAiB,EAAE5D,EAAE6D,OAAO,WAAW,OAAOlC,CAAC,EAAE3B,EAAE8D,QAAQ,WAAW,QAAQ5G,KAAKmF,GAAG5D,aAAaa,EAAE,EAAEU,EAAE+D,OAAO,SAAShE,EAAErB,GAAG,IAAIC,EAAE6C,EAAEzB,GAAG,OAAO7C,KAAK8G,QAAQtF,IAAIC,GAAGA,GAAGzB,KAAK+G,MAAMvF,EAAE,EAAEsB,EAAEkE,QAAQ,SAASnE,EAAErB,GAAG,OAAO8C,EAAEzB,GAAG7C,KAAK8G,QAAQtF,EAAE,EAAEsB,EAAEmE,SAAS,SAASpE,EAAErB,GAAG,OAAOxB,KAAK+G,MAAMvF,GAAG8C,EAAEzB,EAAE,EAAEC,EAAEoE,GAAG,SAASrE,EAAErB,EAAEC,GAAG,OAAOgD,EAAE5C,EAAEgB,GAAG7C,KAAKwB,GAAGxB,KAAKmH,IAAI1F,EAAEoB,EAAE,EAAEC,EAAEsE,KAAK,WAAW,OAAO7G,KAAK8C,MAAMrD,KAAKqH,UAAU,IAAI,EAAEvE,EAAEuE,QAAQ,WAAW,OAAOrH,KAAKmF,GAAGmC,SAAS,EAAExE,EAAEgE,QAAQ,SAASjE,EAAErB,GAAG,IAAIC,EAAEzB,KAAK0B,IAAI+C,EAAE5C,EAAEL,IAAIA,EAAES,EAAEwC,EAAEb,EAAEf,GAAGT,EAAE,SAASS,EAAErB,GAAG,IAAIG,EAAE8C,EAAEZ,EAAEpC,EAAEoD,GAAGO,KAAKK,IAAIhE,EAAEkE,GAAGnE,EAAEqB,GAAG,IAAIuC,KAAK3D,EAAEkE,GAAGnE,EAAEqB,GAAGpB,GAAG,OAAOC,EAAEC,EAAEA,EAAEoF,MAAMjF,EAAE,EAAEO,EAAE,SAASQ,EAAErB,GAAG,OAAOiD,EAAEZ,EAAEpC,EAAE8F,SAAS1E,GAAG2E,MAAM/F,EAAE8F,OAAO,MAAM7F,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,MAAM+F,MAAMjG,IAAIC,EAAE,EAAEa,EAAEtC,KAAKiG,GAAG1D,EAAEvC,KAAK6F,GAAG/C,EAAE9C,KAAK+F,GAAG7C,EAAE,OAAOlD,KAAK6E,GAAG,MAAM,IAAI,OAAO5C,GAAG,KAAKC,EAAE,OAAOR,EAAEU,EAAE,EAAE,GAAGA,EAAE,GAAG,IAAI,KAAKJ,EAAE,OAAON,EAAEU,EAAE,EAAEG,GAAGH,EAAE,EAAEG,EAAE,GAAG,KAAKR,EAAE,IAAIoC,EAAEnE,KAAK0H,UAAUC,WAAW,EAAE7D,GAAGxB,EAAE6B,EAAE7B,EAAE,EAAEA,GAAG6B,EAAE,OAAO/B,EAAEV,EAAEoB,EAAEgB,EAAEhB,GAAG,EAAEgB,GAAGvB,GAAG,KAAKT,EAAE,KAAKK,EAAE,OAAOE,EAAEa,EAAE,QAAQ,GAAG,KAAKrB,EAAE,OAAOQ,EAAEa,EAAE,UAAU,GAAG,KAAKtB,EAAE,OAAOS,EAAEa,EAAE,UAAU,GAAG,KAAKvB,EAAE,OAAOU,EAAEa,EAAE,eAAe,GAAG,QAAQ,OAAOlD,KAAKyD,QAAQ,EAAEX,EAAEiE,MAAM,SAASlE,GAAG,OAAO7C,KAAK8G,QAAQjE,GAAE,EAAG,EAAEC,EAAE8E,KAAK,SAAS/E,EAAErB,GAAG,IAAIC,EAAEM,EAAE0C,EAAEb,EAAEf,GAAGZ,EAAE,OAAOjC,KAAK6E,GAAG,MAAM,IAAIzC,GAAGX,EAAE,CAAC,EAAEA,EAAEK,GAAGG,EAAE,OAAOR,EAAEU,GAAGF,EAAE,OAAOR,EAAEO,GAAGC,EAAE,QAAQR,EAAES,GAAGD,EAAE,WAAWR,EAAEI,GAAGI,EAAE,QAAQR,EAAEG,GAAGK,EAAE,UAAUR,EAAEE,GAAGM,EAAE,UAAUR,EAAEC,GAAGO,EAAE,eAAeR,GAAGM,GAAGM,EAAEN,IAAID,EAAE9B,KAAK+F,IAAIvE,EAAExB,KAAKiG,IAAIzE,EAAE,GAAGO,IAAIC,GAAGD,IAAIG,EAAE,CAAC,IAAII,EAAEtC,KAAKyD,QAAQ0D,IAAIhF,EAAE,GAAGG,EAAE6C,GAAG/C,GAAGC,GAAGC,EAAEoD,OAAO1F,KAAKmF,GAAG7C,EAAE6E,IAAIhF,EAAE5B,KAAKsH,IAAI7H,KAAK+F,GAAGzD,EAAEwF,gBAAgB3C,EAAE,MAAM/C,GAAGpC,KAAKmF,GAAG/C,GAAGC,GAAG,OAAOrC,KAAK0F,OAAO1F,IAAI,EAAE8C,EAAEqE,IAAI,SAAStE,EAAErB,GAAG,OAAOxB,KAAKyD,QAAQmE,KAAK/E,EAAErB,EAAE,EAAEsB,EAAEiF,IAAI,SAASlF,GAAG,OAAO7C,KAAKyE,EAAEb,EAAEf,KAAK,EAAEC,EAAEY,IAAI,SAAShC,EAAEO,GAAG,IAAIE,EAAEC,EAAEpC,KAAK0B,EAAEsG,OAAOtG,GAAG,IAAIW,EAAEoC,EAAEb,EAAE3B,GAAGK,EAAE,SAASO,GAAG,IAAIrB,EAAE8C,EAAElC,GAAG,OAAOqC,EAAEZ,EAAErC,EAAE8B,KAAK9B,EAAE8B,OAAO/C,KAAK0H,MAAMpF,EAAEnB,IAAIU,EAAE,EAAE,GAAGC,IAAIL,EAAE,OAAOhC,KAAKmH,IAAInF,EAAEhC,KAAK6F,GAAGnE,GAAG,GAAGW,IAAIH,EAAE,OAAOlC,KAAKmH,IAAIjF,EAAElC,KAAK2F,GAAGjE,GAAG,GAAGW,IAAIP,EAAE,OAAOQ,EAAE,GAAG,GAAGD,IAAIN,EAAE,OAAOO,EAAE,GAAG,IAAIC,GAAGJ,EAAE,CAAC,EAAEA,EAAEP,GAAGJ,EAAEW,EAAEN,GAAGJ,EAAEU,EAAER,GAA50I,IAAi1IQ,GAAGE,IAAI,EAAES,EAAE9C,KAAKmF,GAAGmC,UAAU5F,EAAEa,EAAE,OAAOkC,EAAEZ,EAAEf,EAAE9C,KAAK,EAAE8C,EAAEoF,SAAS,SAASrF,EAAErB,GAAG,OAAOxB,KAAK0D,KAAK,EAAEb,EAAErB,EAAE,EAAEsB,EAAEqF,OAAO,SAAStF,GAAG,IAAIrB,EAAExB,KAAKyB,EAAEzB,KAAK0H,UAAU,IAAI1H,KAAK4G,UAAU,OAAOnF,EAAE2G,aAAahG,EAAE,IAAIV,EAAEmB,GAAG,uBAAuBlB,EAAE8C,EAAEtB,EAAEnD,MAAM4B,EAAE5B,KAAKmG,GAAGtE,EAAE7B,KAAKqG,GAAGvE,EAAE9B,KAAK6F,GAAG9D,EAAEN,EAAEgB,SAAST,EAAEP,EAAEkB,OAAOV,EAAER,EAAE4G,SAASnG,EAAE,SAASW,EAAEpB,EAAEE,EAAEC,GAAG,OAAOiB,IAAIA,EAAEpB,IAAIoB,EAAErB,EAAEE,KAAKC,EAAEF,GAAGgG,MAAM,EAAE7F,EAAE,EAAEO,EAAE,SAASU,GAAG,OAAO4B,EAAE7C,EAAEA,EAAE,IAAI,GAAGiB,EAAE,IAAI,EAAER,EAAEJ,GAAG,SAASY,EAAErB,EAAEC,GAAG,IAAIC,EAAEmB,EAAE,GAAG,KAAK,KAAK,OAAOpB,EAAEC,EAAEuC,cAAcvC,CAAC,EAAE,OAAOA,EAAEwC,QAAQ5B,EAAE,SAAUO,EAAEnB,GAAG,OAAOA,GAAG,SAASmB,GAAG,OAAOA,GAAG,IAAI,KAAK,OAAOE,OAAOvB,EAAEmE,IAAI8B,OAAO,GAAG,IAAI,OAAO,OAAOhD,EAAE7C,EAAEJ,EAAEmE,GAAG,EAAE,KAAK,IAAI,IAAI,OAAO7D,EAAE,EAAE,IAAI,KAAK,OAAO2C,EAAE7C,EAAEE,EAAE,EAAE,EAAE,KAAK,IAAI,MAAM,OAAOI,EAAET,EAAE6G,YAAYxG,EAAEE,EAAE,GAAG,IAAI,OAAO,OAAOE,EAAEF,EAAEF,GAAG,IAAI,IAAI,OAAON,EAAEuE,GAAG,IAAI,KAAK,OAAOtB,EAAE7C,EAAEJ,EAAEuE,GAAG,EAAE,KAAK,IAAI,IAAI,OAAOhD,OAAOvB,EAAEyE,IAAI,IAAI,KAAK,OAAO/D,EAAET,EAAE8G,YAAY/G,EAAEyE,GAAGlE,EAAE,GAAG,IAAI,MAAM,OAAOG,EAAET,EAAE+G,cAAchH,EAAEyE,GAAGlE,EAAE,GAAG,IAAI,OAAO,OAAOA,EAAEP,EAAEyE,IAAI,IAAI,IAAI,OAAOlD,OAAOnB,GAAG,IAAI,KAAK,OAAO6C,EAAE7C,EAAEA,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOO,EAAE,GAAG,IAAI,KAAK,OAAOA,EAAE,GAAG,IAAI,IAAI,OAAOE,EAAET,EAAEC,GAAE,GAAI,IAAI,IAAI,OAAOQ,EAAET,EAAEC,GAAE,GAAI,IAAI,IAAI,OAAOkB,OAAOlB,GAAG,IAAI,KAAK,OAAO4C,EAAE7C,EAAEC,EAAE,EAAE,KAAK,IAAI,IAAI,OAAOkB,OAAOvB,EAAE+E,IAAI,IAAI,KAAK,OAAO9B,EAAE7C,EAAEJ,EAAE+E,GAAG,EAAE,KAAK,IAAI,MAAM,OAAO9B,EAAE7C,EAAEJ,EAAEiF,IAAI,EAAE,KAAK,IAAI,IAAI,OAAO9E,EAAE,OAAO,IAAI,CAAptB,CAAstBkB,IAAIlB,EAAEuC,QAAQ,IAAI,GAAI,EAAE,EAAEpB,EAAEM,UAAU,WAAW,OAAO,IAAI7C,KAAK0H,MAAMjI,KAAKmF,GAAGsD,oBAAoB,GAAG,EAAE3F,EAAE4F,KAAK,SAAShH,EAAES,EAAEC,GAAG,IAAIC,EAAEC,EAAEtC,KAAKuC,EAAEkC,EAAEb,EAAEzB,GAAGW,EAAEwB,EAAE5C,GAAGwB,GAAGJ,EAAEM,YAAYpD,KAAKoD,aAAa5B,EAAE2C,EAAEnE,KAAK8C,EAAEgB,EAAE,WAAW,OAAOW,EAAE3B,EAAER,EAAEQ,EAAE,EAAE,OAAOP,GAAG,KAAKL,EAAEG,EAAEyB,IAAI,GAAG,MAAM,KAAK9B,EAAEK,EAAEyB,IAAI,MAAM,KAAK7B,EAAEI,EAAEyB,IAAI,EAAE,MAAM,KAAK/B,EAAEM,GAAG8B,EAAEjB,GAAG,OAAO,MAAM,KAAKpB,EAAEO,GAAG8B,EAAEjB,GAAG,MAAM,MAAM,KAAKrB,EAAEQ,EAAE8B,EAAE1C,EAAE,MAAM,KAAKG,EAAES,EAAE8B,EAAE3C,EAAE,MAAM,KAAKG,EAAEU,EAAE8B,EAA18L,IAA88L,MAAM,QAAQ9B,EAAE8B,EAAE,OAAO/B,EAAEC,EAAEoC,EAAE3C,EAAEO,EAAE,EAAES,EAAEgF,YAAY,WAAW,OAAO9H,KAAK+G,MAAM/E,GAAG+D,EAAE,EAAEjD,EAAE4E,QAAQ,WAAW,OAAO5D,EAAE9D,KAAK2E,GAAG,EAAE7B,EAAE4B,OAAO,SAAS7B,EAAErB,GAAG,IAAIqB,EAAE,OAAO7C,KAAK2E,GAAG,IAAIlD,EAAEzB,KAAKyD,QAAQ/B,EAAEmC,EAAEhB,EAAErB,GAAE,GAAI,OAAOE,IAAID,EAAEkD,GAAGjD,GAAGD,CAAC,EAAEqB,EAAEW,MAAM,WAAW,OAAOgB,EAAEZ,EAAE7D,KAAKmF,GAAGnF,KAAK,EAAE8C,EAAEyE,OAAO,WAAW,OAAO,IAAInC,KAAKpF,KAAKqH,UAAU,EAAEvE,EAAE6F,OAAO,WAAW,OAAO3I,KAAK4G,UAAU5G,KAAK4I,cAAc,IAAI,EAAE9F,EAAE8F,YAAY,WAAW,OAAO5I,KAAKmF,GAAGyD,aAAa,EAAE9F,EAAEvB,SAAS,WAAW,OAAOvB,KAAKmF,GAAG0D,aAAa,EAAEtG,CAAC,CAA/sJ,GAAmtJuG,EAAEzE,EAAEa,UAAU,OAAOZ,EAAEY,UAAU4D,EAAE,CAAC,CAAC,MAAMpH,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKC,GAAG,CAAC,KAAKE,GAAG,CAAC,KAAKE,GAAG,CAAC,KAAKC,IAAI4G,QAAQ,SAAUlG,GAAGiG,EAAEjG,EAAE,IAAI,SAASrB,GAAG,OAAOxB,KAAKkH,GAAG1F,EAAEqB,EAAE,GAAGA,EAAE,GAAG,CAAE,GAAGyB,EAAE0E,OAAO,SAASnG,EAAErB,GAAG,OAAOqB,EAAEoG,KAAKpG,EAAErB,EAAE6C,EAAEC,GAAGzB,EAAEoG,IAAG,GAAI3E,CAAC,EAAEA,EAAEI,OAAOb,EAAES,EAAE4E,QAAQ9E,EAAEE,EAAE8C,KAAK,SAASvE,GAAG,OAAOyB,EAAE,IAAIzB,EAAE,EAAEyB,EAAE6E,GAAGrF,EAAEK,GAAGG,EAAE8E,GAAGtF,EAAEQ,EAAEV,EAAE,CAAC,EAAEU,CAAE,CAAl6N9C,E,UCAnF3B,EAAOD,QAAU,SAAcyJ,EAAKC,GAClC,IAAI1H,EAAI,YAAcyH,EACtB,OAAOzH,EAAE2H,OAAO3H,EAAEV,OAASoI,EAC7B,C,kBCHoEzJ,EAAOD,QAAkJ,WAAY,aAAa,IAAIiD,EAAE,CAACU,KAAK,EAAEC,MAAM,EAAEgG,IAAI,EAAEC,KAAK,EAAEC,OAAO,EAAEC,OAAO,GAAGnI,EAAE,CAAC,EAAE,OAAO,SAASC,EAAEE,EAAEI,GAAG,IAAIL,EAAEI,EAAE,SAASe,EAAEpB,EAAEE,QAAG,IAASA,IAAIA,EAAE,CAAC,GAAG,IAAII,EAAE,IAAIqD,KAAKvC,GAAGnB,EAAE,SAASmB,EAAEpB,QAAG,IAASA,IAAIA,EAAE,CAAC,GAAG,IAAIE,EAAEF,EAAEmI,cAAc,QAAQ7H,EAAEc,EAAE,IAAIlB,EAAED,EAAEF,EAAEO,GAAG,OAAOL,IAAIA,EAAE,IAAImI,KAAKC,eAAe,QAAQ,CAACC,QAAO,EAAGC,SAASnH,EAAEU,KAAK,UAAUC,MAAM,UAAUgG,IAAI,UAAUC,KAAK,UAAUC,OAAO,UAAUC,OAAO,UAAUC,aAAajI,IAAIH,EAAEO,GAAGL,GAAGA,CAAC,CAA3Q,CAA6QD,EAAEE,GAAG,OAAOD,EAAEuI,cAAclI,EAAE,EAAEF,EAAE,SAASL,EAAEC,GAAG,IAAI,IAAIE,EAAEG,EAAEN,EAAEC,GAAGC,EAAE,GAAGG,EAAE,EAAEA,EAAEF,EAAET,OAAOW,GAAG,EAAE,CAAC,IAAII,EAAEN,EAAEE,GAAGD,EAAEK,EAAEiI,KAAKpH,EAAEb,EAAEkI,MAAMnI,EAAEa,EAAEjB,GAAGI,GAAG,IAAIN,EAAEM,GAAGoI,SAAStH,EAAE,IAAI,CAAC,IAAIX,EAAET,EAAE,GAAGU,EAAE,KAAKD,EAAE,EAAEA,EAAED,EAAER,EAAE,GAAG,IAAIA,EAAE,GAAG,IAAIA,EAAE,GAAG,IAAIU,EAAE,IAAIV,EAAE,GAAG,IAAIA,EAAE,GAAG,OAAOwB,GAAG1B,EAAE,OAAOO,EAAE6C,IAAI1C,GAAGmF,WAAWnE,GAAGA,EAAE,MAAM,GAAG,EAAEjB,EAAEN,EAAEuD,UAAUjD,EAAEoI,GAAG,SAASxH,EAAErB,QAAG,IAASqB,IAAIA,EAAEnB,GAAG,IAAID,EAAEE,EAAE3B,KAAKoD,YAAYtB,EAAE9B,KAAKuH,SAAS1F,EAAEC,EAAEwI,eAAe,QAAQ,CAACN,SAASnH,IAAIZ,EAAE1B,KAAK0H,OAAOnG,EAAE,IAAIsD,KAAKvD,IAAI,IAAI,IAAID,EAAE,IAAIrB,KAAK0H,MAAMnG,EAAE2G,oBAAoB,IAAIxG,EAAE,GAAI+F,OAAOpG,IAA8B,GAAGH,EAAEM,EAAEF,EAAE,CAAC6C,OAAO1E,KAAK2E,KAAKiD,KAAK,cAAc5H,KAAKyG,KAAKrD,UAAUxB,GAAE,GAAIJ,EAAE,CAAC,IAAIsB,EAAErB,EAAE2B,YAAY3B,EAAEA,EAAEiC,IAAI/B,EAAEmB,EAAE,SAAS,OAA/IrB,EAAEzB,KAAKoD,UAAU,EAAE5B,GAA6H,OAAOC,EAAEsD,GAAGwF,UAAU1H,EAAEpB,CAAC,EAAEQ,EAAEuI,WAAW,SAAS3H,GAAG,IAAIrB,EAAExB,KAAK+E,GAAGwF,WAAWxI,EAAEsI,GAAGI,QAAQhJ,EAAEK,EAAE9B,KAAKqH,UAAU7F,EAAE,CAACoI,aAAa/G,IAAI6H,KAAK,SAAU7H,GAAG,MAAM,iBAAiBA,EAAEqH,KAAKjG,aAAc,GAAG,OAAOxC,GAAGA,EAAE0I,KAAK,EAAE,IAAIvI,EAAEK,EAAE6E,QAAQ7E,EAAE6E,QAAQ,SAASjE,EAAErB,GAAG,IAAIxB,KAAK+E,KAAK/E,KAAK+E,GAAGwF,UAAU,OAAO3I,EAAE+I,KAAK3K,KAAK6C,EAAErB,GAAG,IAAIC,EAAEM,EAAE/B,KAAKmI,OAAO,2BAA2B,CAACzD,OAAO1E,KAAK2E,KAAK,OAAO/C,EAAE+I,KAAKlJ,EAAEoB,EAAErB,GAAG6I,GAAGrK,KAAK+E,GAAGwF,WAAU,EAAG,EAAExI,EAAEsI,GAAG,SAASxH,EAAErB,EAAEC,GAAG,IAAIE,EAAEF,GAAGD,EAAEM,EAAEL,GAAGD,GAAGE,EAAEO,EAAEJ,GAAGE,IAAID,GAAG,GAAG,iBAAiBe,EAAE,OAAOd,EAAEc,GAAGwH,GAAGvI,GAAG,IAAIF,EAAE,SAASiB,EAAErB,EAAEC,GAAG,IAAIE,EAAEkB,EAAE,GAAGrB,EAAE,IAAIO,EAAEF,EAAEF,EAAEF,GAAG,GAAGD,IAAIO,EAAE,MAAM,CAACJ,EAAEH,GAAG,IAAIE,EAAEG,EAAEF,GAAG,IAAII,EAAEP,GAAG,IAAIC,GAAG,OAAOM,IAAIL,EAAE,CAACC,EAAEI,GAAG,CAACc,EAAE,GAAGtC,KAAKsH,IAAI9F,EAAEL,GAAG,IAAInB,KAAKqK,IAAI7I,EAAEL,GAAG,CAAnJ,CAAqJK,EAAE6C,IAAI/B,EAAElB,GAAG0F,UAAUpF,EAAEH,GAAGgB,EAAElB,EAAE,GAAGI,EAAEJ,EAAE,GAAGO,EAAEJ,EAAEe,GAAGM,UAAUpB,GAAG,OAAOG,EAAE4C,GAAGwF,UAAUzI,EAAEK,CAAC,EAAEJ,EAAEsI,GAAGI,MAAM,WAAW,OAAOZ,KAAKC,iBAAiBe,kBAAkBb,QAAQ,EAAEjI,EAAEsI,GAAGS,WAAW,SAASjI,GAAGnB,EAAEmB,CAAC,CAAC,CAAE,CAAxjErB,E,gBCYnF,IAAIuJ,EAAc,EAAQ,KACtBlK,EAAM,EAAQ,KACdZ,EAAiB,EAAQ,IAEzB+B,EAAI,EAGNgJ,EAAiBzK,KAAKC,IADf,GADK,GAId,SAASyK,IACP,OAAOpK,GAAKZ,IACV+K,EAAkB,GACjBzJ,SANI,IADK,EAQd,CAEA,SAAS2J,IAGP,OAFAlJ,EAAIA,EAAIgJ,EAAiBhJ,EAAI,IAC7BA,EACW,CACb,CAEA,SAASmJ,IAqBP,MAlBa,KAKE,IAAI/F,MAAOkC,UAAW/F,SAvB9B,IA0BKV,EAAIqK,IAAc3J,SA1BvB,IADK,GAgCFwJ,KAGCE,IAAgBA,IAG7B,CAEAE,EAAKC,KAAO,WACV,IAAI9H,GAAO,IAAI8B,MAAOkC,UAAU/F,SAAS,IACvC8J,EAAUH,IAAc3J,SAAS,IAAIkG,OAAO,GAC5C6D,EAAQP,IAActD,MAAM,EAAG,GAC7BsD,IAActD,OAAO,GACvB7G,EAASqK,IAAcxD,OAAO,GAEhC,OAAOnE,EAAKmE,OAAO,GACjB4D,EAAUC,EAAQ1K,CACtB,EAEAuK,EAAKI,OAAS,SAAiBC,GAC7B,MAA6B,iBAAlBA,KACPA,EAAcC,WAAW,IAE/B,EAEAN,EAAKO,OAAS,SAAiBF,GAC7B,GAA6B,iBAAlBA,EAA4B,OAAO,EAC9C,IAAIG,EAAeH,EAActK,OACjC,OAAIyK,GAAgB,GAAKA,GAAgB,EAE3C,EAEAR,EAAKJ,YAAcA,EAEnBlL,EAAOD,QAAUuL,C,kBCnFmDtL,EAAOD,QAA6I,WAAY,aAAa,IAAIiD,EAAE,SAASlB,EAAE,uBAAuBH,EAAE,eAAe,OAAO,SAASI,EAAEK,EAAER,GAAG,IAAII,EAAEI,EAAEiD,UAAUzD,EAAEmD,IAAI,SAAS/B,GAAwC,OAAO,IAAIZ,EAA1C,CAACqB,KAAKT,EAAE+B,KAAI,EAAGL,KAAKC,WAA0B,EAAE3C,EAAE+C,IAAI,SAASjD,GAAG,IAAIH,EAAEC,EAAEzB,KAAKuH,SAAS,CAAC7C,OAAO1E,KAAK2E,GAAGC,KAAI,IAAK,OAAOjD,EAAEH,EAAEkC,IAAI1D,KAAKoD,YAAYP,GAAGrB,CAAC,EAAEK,EAAE+J,MAAM,WAAW,OAAOnK,EAAEzB,KAAKuH,SAAS,CAAC7C,OAAO1E,KAAK2E,GAAGC,KAAI,GAAI,EAAE,IAAI7C,EAAEF,EAAEoD,MAAMpD,EAAEoD,MAAM,SAASpC,GAAGA,EAAE+B,MAAM5E,KAAK6E,IAAG,GAAI7E,KAAK2G,SAAS9E,EAAEgB,EAAEmC,WAAWhF,KAAKgF,QAAQnC,EAAEmC,SAASjD,EAAE4I,KAAK3K,KAAK6C,EAAE,EAAE,IAAInB,EAAEG,EAAE6D,KAAK7D,EAAE6D,KAAK,WAAW,GAAG1F,KAAK6E,GAAG,CAAC,IAAIhC,EAAE7C,KAAKmF,GAAGnF,KAAK2F,GAAG9C,EAAEgJ,iBAAiB7L,KAAK6F,GAAGhD,EAAEiJ,cAAc9L,KAAK+F,GAAGlD,EAAEkJ,aAAa/L,KAAKiG,GAAGpD,EAAEmJ,YAAYhM,KAAKmG,GAAGtD,EAAEoJ,cAAcjM,KAAKqG,GAAGxD,EAAEqJ,gBAAgBlM,KAAKuG,GAAG1D,EAAEsJ,gBAAgBnM,KAAKyG,IAAI5D,EAAEuJ,oBAAoB,MAAM1K,EAAEiJ,KAAK3K,KAAK,EAAE,IAAI8B,EAAED,EAAEuB,UAAUvB,EAAEuB,UAAU,SAASxB,EAAEK,GAAG,IAAIR,EAAEzB,KAAK2G,SAAS9E,EAAE,GAAGJ,EAAEG,GAAG,OAAO5B,KAAK6E,GAAG,EAAEpD,EAAEzB,KAAKgF,SAASlD,EAAE6I,KAAK3K,MAAMA,KAAKgF,QAAQ,GAAG,iBAAiBpD,IAAIA,EAAE,SAASiB,QAAG,IAASA,IAAIA,EAAE,IAAI,IAAIjB,EAAEiB,EAAE0C,MAAM5D,GAAG,IAAIC,EAAE,OAAO,KAAK,IAAIK,GAAG,GAAGL,EAAE,IAAI2D,MAAM/D,IAAI,CAAC,IAAI,EAAE,GAAGC,EAAEQ,EAAE,GAAGJ,EAAE,IAAII,EAAE,KAAKA,EAAE,GAAG,OAAO,IAAIJ,EAAE,EAAE,MAAMJ,EAAEI,GAAGA,CAAC,CAA1J,CAA4JD,GAAG,OAAOA,GAAG,OAAO5B,KAAK,IAAI6B,EAAEtB,KAAKE,IAAImB,IAAI,GAAG,GAAGA,EAAEA,EAAEG,EAAE/B,KAAK,GAAGiC,EAAE,OAAOF,EAAEiD,QAAQnD,EAAEE,EAAE8C,GAAG,IAAIjD,EAAEG,EAAE,GAAG,IAAIH,EAAE,CAAC,IAAIF,EAAE1B,KAAK6E,GAAG7E,KAAKuH,SAASkB,qBAAqB,EAAEzI,KAAKoD,aAAarB,EAAE/B,KAAK4L,QAAQlI,IAAI7B,EAAEH,EAAEmB,IAAImC,QAAQnD,EAAEE,EAAEgD,GAAGsH,aAAa3K,CAAC,MAAMK,EAAE/B,KAAK4E,MAAM,OAAO7C,CAAC,EAAE,IAAIG,EAAEL,EAAEsG,OAAOtG,EAAEsG,OAAO,SAAStF,GAAG,IAAIlB,EAAEkB,IAAI7C,KAAK6E,GAAG,yBAAyB,IAAI,OAAO3C,EAAEyI,KAAK3K,KAAK2B,EAAE,EAAEE,EAAEwF,QAAQ,WAAW,IAAIxE,EAAE7C,KAAK2G,SAAS9E,EAAE7B,KAAKgF,SAAS,EAAEhF,KAAKgF,SAAShF,KAAK+E,GAAGsH,cAAcrM,KAAKmF,GAAGsD,qBAAqB,OAAOzI,KAAKmF,GAAGkC,UAAU,IAAIxE,CAAC,EAAEhB,EAAEyK,MAAM,WAAW,QAAQtM,KAAK6E,EAAE,EAAEhD,EAAE+G,YAAY,WAAW,OAAO5I,KAAKuH,SAASqB,aAAa,EAAE/G,EAAEN,SAAS,WAAW,OAAOvB,KAAKuH,SAASsB,aAAa,EAAE,IAAIzG,EAAEP,EAAE0F,OAAO1F,EAAE0F,OAAO,SAAS1E,GAAG,MAAM,MAAMA,GAAG7C,KAAKgF,QAAQvD,EAAEzB,KAAKmI,OAAO,4BAA4BZ,SAASnF,EAAEuI,KAAK3K,KAAK,EAAE,IAAIgC,EAAEH,EAAE6G,KAAK7G,EAAE6G,KAAK,SAAS7F,EAAElB,EAAEH,GAAG,GAAGqB,GAAG7C,KAAK6E,KAAKhC,EAAEgC,GAAG,OAAO7C,EAAE2I,KAAK3K,KAAK6C,EAAElB,EAAEH,GAAG,IAAII,EAAE5B,KAAK4L,QAAQ3J,EAAER,EAAEoB,GAAG+I,QAAQ,OAAO5J,EAAE2I,KAAK/I,EAAEK,EAAEN,EAAEH,EAAE,CAAC,CAAE,CAAvnEG,E,GCC/E4K,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAa9M,QAGrB,IAAIC,EAAS0M,EAAyBE,GAAY,CAGjD7M,QAAS,CAAC,GAOX,OAHAgN,EAAoBH,GAAU9B,KAAK9K,EAAOD,QAASC,EAAQA,EAAOD,QAAS4M,GAGpE3M,EAAOD,OACf,CCrBA4M,EAAoB/K,EAAK5B,IACxB,IAAIgN,EAAShN,GAAUA,EAAOiN,WAC7B,IAAOjN,EAAiB,QACxB,IAAM,EAEP,OADA2M,EAAoBrK,EAAE0K,EAAQ,CAAE/K,EAAG+K,IAC5BA,GCLRL,EAAoBrK,EAAI,CAACvC,EAASmN,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBzK,EAAEgL,EAAYC,KAASR,EAAoBzK,EAAEnC,EAASoN,IAC5EhM,OAAOiM,eAAerN,EAASoN,EAAK,CAAEE,YAAY,EAAMnF,IAAKgF,EAAWC,MCJ3ER,EAAoBzK,EAAI,CAACoL,EAAKC,IAAUpM,OAAOkE,UAAUmI,eAAe1C,KAAKwC,EAAKC,GCClFZ,EAAoB9K,EAAK9B,IACH,oBAAX0N,QAA0BA,OAAOC,aAC1CvM,OAAOiM,eAAerN,EAAS0N,OAAOC,YAAa,CAAEpD,MAAO,WAE7DnJ,OAAOiM,eAAerN,EAAS,aAAc,CAAEuK,OAAO,K,+0BCJ5CqD,ECCCC,E,mBDAZ,SAAWD,GAMPA,EAAYA,EAAsB,SAAI,KAAO,WAM7CA,EAAYA,EAAiC,oBAAI,KAAO,sBAMxDA,EAAYA,EAAwB,WAAI,KAAO,aAM/CA,EAAYA,EAAyB,YAAI,KAAO,cAUhDA,EAAYA,EAAgB,GAAI,KAAO,KAMvCA,EAAYA,EAAqB,QAAI,KAAO,UAM5CA,EAAYA,EAAsB,SAAI,KAAO,WAM7CA,EAAYA,EAA2C,8BAAI,KAAO,gCAMlEA,EAAYA,EAAwB,WAAI,KAAO,aAM/CA,EAAYA,EAA2B,cAAI,KAAO,gBAMlDA,EAAYA,EAA6B,gBAAI,KAAO,kBAMpDA,EAAYA,EAA0B,aAAI,KAAO,eAMjDA,EAAYA,EAA8B,iBAAI,KAAO,mBAMrDA,EAAYA,EAA+B,kBAAI,KAAO,oBAMtDA,EAAYA,EAA+B,kBAAI,KAAO,oBAMtDA,EAAYA,EAAuB,UAAI,KAAO,YAM9CA,EAAYA,EAA0B,aAAI,KAAO,eAOjDA,EAAYA,EAAuB,UAAI,KAAO,YAM9CA,EAAYA,EAAgC,mBAAI,KAAO,qBAMvDA,EAAYA,EAAgC,mBAAI,KAAO,qBAMvDA,EAAYA,EAAyB,YAAI,KAAO,cAMhDA,EAAYA,EAA0B,aAAI,KAAO,eAMjDA,EAAYA,EAA8B,iBAAI,KAAO,mBAMrDA,EAAYA,EAAuB,UAAI,KAAO,YAM9CA,EAAYA,EAAuB,UAAI,KAAO,YAM9CA,EAAYA,EAAgC,mBAAI,KAAO,qBAMvDA,EAAYA,EAA4B,eAAI,KAAO,iBAMnDA,EAAYA,EAA2C,8BAAI,KAAO,gCAMlEA,EAAYA,EAA6B,gBAAI,KAAO,kBAMpDA,EAAYA,EAAsB,SAAI,KAAO,WAM7CA,EAAYA,EAAkB,KAAI,KAAO,OAMzCA,EAAYA,EAA6B,gBAAI,KAAO,kBAMpDA,EAAYA,EAAiC,oBAAI,KAAO,sBAMxDA,EAAYA,EAA8B,iBAAI,KAAO,mBAMrDA,EAAYA,EAAkC,qBAAI,KAAO,uBAMzDA,EAAYA,EAAoC,uBAAI,KAAO,yBAM3DA,EAAYA,EAA6C,gCAAI,KAAO,kCAMpEA,EAAYA,EAAgC,mBAAI,KAAO,qBAMvDA,EAAYA,EAAyB,YAAI,KAAO,cAMhDA,EAAYA,EAA4C,+BAAI,KAAO,iCAOnEA,EAAYA,EAA4B,eAAI,KAAO,iBAMnDA,EAAYA,EAAiC,oBAAI,KAAO,sBAMxDA,EAAYA,EAAkC,qBAAI,KAAO,uBAMzDA,EAAYA,EAAoB,OAAI,KAAO,SAM3CA,EAAYA,EAA+B,kBAAI,KAAO,oBAMtDA,EAAYA,EAA8B,iBAAI,KAAO,mBAMrDA,EAAYA,EAAmC,sBAAI,KAAO,wBAM1DA,EAAYA,EAA+B,kBAAI,KAAO,oBAMtDA,EAAYA,EAA6C,gCAAI,KAAO,kCAMpEA,EAAYA,EAA2C,8BAAI,KAAO,gCAMlEA,EAAYA,EAAmC,sBAAI,KAAO,wBAM1DA,EAAYA,EAA6B,gBAAI,KAAO,kBAMpDA,EAAYA,EAAyB,YAAI,KAAO,cAMhDA,EAAYA,EAAiC,oBAAI,KAAO,sBAMxDA,EAAYA,EAA6B,gBAAI,KAAO,kBAMpDA,EAAYA,EAAwC,2BAAI,KAAO,6BAM/DA,EAAYA,EAAkC,qBAAI,KAAO,uBAMzDA,EAAYA,EAA6C,gCAAI,KAAO,iCACvE,CAnWD,CAmWGA,IAAgBA,EAAc,CAAC,ICnWlC,SAAYC,GACR,YACA,cACA,cACA,sBACA,cACA,cACA,qBACH,CARD,CAAYA,IAAAA,EAAkB,KAUvB,MAAMC,EAGF,gBAAOC,CAAUX,GACpB,MAAMY,EAASC,aAAaC,QAAQ9N,KAAK+N,QACzC,OAAIf,GAEoB,SADHa,aAAaC,QAAQ,GAAG9N,KAAK+N,UAAUhL,OAAOiK,OAGjD,SAAXY,CACX,CAEO,aAAOI,CAAOhB,GACjBa,aAAaI,QAAQ,GAAGjO,KAAK+N,UAAUhL,OAAOiK,KAAQ,OAC1D,CAEO,cAAOkB,CAAQlB,GAClBa,aAAaI,QAAQ,GAAGjO,KAAK+N,UAAUhL,OAAOiK,KAAQ,QAC1D,CAEO,gBAAOmB,GACVN,aAAaI,QAAQjO,KAAK+N,OAAQ,OACtC,CAEO,iBAAOK,GACVP,aAAaI,QAAQjO,KAAK+N,OAAQ,QACtC,CAEO,YAAOM,CAAMrB,GACZA,EACAa,aAAaS,WAAW,GAAGtO,KAAK+N,UAAUhL,OAAOiK,MAEjDa,aAAaS,WAAWtO,KAAK+N,OAErC,EAjCwB,EAAAA,OAAS,e,sBCArC,MAAMQ,EACF,YAAmCC,EAAsCC,EAAwCC,GAA9E,KAAAF,OAAAA,EAAsC,KAAAC,QAAAA,EAAwC,KAAAC,QAAAA,CACjH,CAEA,WAAWC,GACP,OAAO3O,KAAKyO,SAAWzO,KAAKwO,MAChC,CASO,MAAAI,CAAOC,EAA4CC,EAA+DL,EAAwBM,GAC7I,IAAIC,EACAC,EACAC,EACAC,EAAmC,SAsBvC,OApBIN,aAAyBN,GACzBS,EAAeH,EAAcL,OAC7BS,EAAgBJ,EAAcJ,QAC9BS,EAAgBL,EAAcH,QAC9BS,EAAeL,GAAyC,WAGxDE,EAAeH,EAEc,iBAAlBC,GACPK,EAAcL,EACdG,EAAgBR,EAChBS,OAAgBvC,IAEhBuC,EAAgBJ,EAChBG,EAAgBR,EAChBU,EAAcJ,GAAQ,WAI1B/O,KAAKwO,SAAWQ,IAIA,WAAhBG,GAA4BnP,KAAKyO,UAAYQ,IAI1CV,EAAaa,cAAcpP,KAAK0O,QAASQ,EACpD,CAEO,oBAAOE,CAAcC,EAAgCC,GACxD,MAAMC,EAAa,CAACb,EAA8C1B,IAC9D0B,IAAU1B,KAAQ,EAChBwC,EAAad,GACfA,GAASe,OAKPC,EAHaF,EAAUH,KACTG,EAAUF,GAI9B,OAAOC,EAAWF,EAAM,aAAeE,EAAWD,EAAO,YAClDC,EAAWF,EAAM,UAAYE,EAAWD,EAAO,SAC/CC,EAAWF,EAAM,aAAeE,EAAWD,EAAO,YAClDI,CACX,EAGJ,MAAMC,EAGF,YAAoCC,GAAA,KAAAA,OAAAA,EAF5B,KAAAC,WAA0C,IAAIC,GAGtD,CAEQ,MAAAC,CAAOC,GACX,OAAOhQ,KAAK6P,WAAW9H,IAAIiI,IAAUhQ,KAAK6P,WAAW1I,IAAI6I,EAAO,IAAIjI,IAAIiI,EAC5E,CAEQ,IAAAtF,CAAKsF,EAAeC,GACxB,OAAOjQ,KAAK6P,WAAW9H,IAAIiI,IAAQtF,KAAKlJ,GAAKA,EAAEoN,OAAOqB,UAAWtD,CACrE,CAEO,GAAAjJ,CAAIsM,EAAeC,GAClBA,EAAMvB,SAASwB,MACflQ,KAAKmQ,OAAOH,EAAOC,GAElBjQ,KAAK0K,KAAKsF,EAAOC,KAClBjQ,KAAK+P,OAAOC,GAAOI,KAAKH,GACxBjQ,KAAK4P,OAAOS,QAAQC,iBAAiBN,EAAOC,EAAMtB,QAASsB,EAAMvB,SAEzE,CAEO,MAAAyB,CAAOH,EAAeC,GACzB,IAAKA,EAAO,CACR,MAAMM,EAAOvQ,KAAK6P,WAAW9H,IAAIiI,GACjC,IAAKO,EAAM,OAGX,OAFAA,EAAKxH,QAAQvH,GAAKxB,KAAK4P,OAAOS,QAAQG,oBAAoBR,EAAOxO,EAAEmN,QAASnN,EAAEkN,SAAS+B,UAAW,SAClGzQ,KAAK6P,WAAWa,OAAOV,EAE3B,CACA,MAAMO,EAAOvQ,KAAK6P,WAAW9H,IAAIiI,GACjC,GAAIO,EAAM,CACN,MAAMI,EAA4B,GAClC,IAAK,MAAMnP,KAAK+O,EACR/O,EAAEoN,OAAOqB,EAAO,UAChBjQ,KAAK4P,OAAOS,QAAQG,oBAAoBR,EAAOxO,EAAEmN,QAASnN,EAAEkN,SAAS+B,UAAW,GAEhFE,EAAUP,KAAK5O,GAGE,IAArBmP,EAAUzP,OACVlB,KAAK6P,WAAWa,OAAOV,GAEvBhQ,KAAK6P,WAAW1I,IAAI6I,EAAOW,EAEnC,CACJ,CAEA,SAAWC,GACP,OAAgC,IAAzB5Q,KAAK6P,WAAWvG,IAC3B,EAGJ,MAAMuH,EAAN,cAEY,KAAAC,UAA2C,IAAIhB,GAqC3D,CAnCW,mBAAWiB,GACd,OAAO/Q,KAAKgR,YAAchR,KAAKgR,UAAY,IAAIH,EACnD,CAEQ,GAAAI,CAAIrB,GACR,MAAMsB,EAAUtB,EAAOsB,QACvB,IAAIC,EAAWnR,KAAK8Q,UAAU/I,IAAImJ,GAKlC,OAJKC,IACDA,EAAW,IAAIxB,EAAiBC,GAChC5P,KAAK8Q,UAAU3J,IAAI+J,EAASC,IAEzBA,CACX,CAEO,EAAAC,CAAGpB,EAAeJ,EAAsBK,GAC1BjQ,KAAKiR,IAAIrB,GACjBlM,IAAIsM,EAAOC,EACxB,CAEO,GAAAoB,CAAIrB,EAAeJ,EAAsBK,GAC5C,MAAMkB,EAAWnR,KAAK8Q,UAAU/I,IAAI6H,EAAOsB,SACtCC,IACDlB,EACAkB,EAAShB,OAAOH,EAAOC,GAEvBkB,EAAShB,OAAOH,GAEhBmB,EAASP,OACT5Q,KAAK8Q,UAAUJ,OAAOd,EAAOsB,SAErC,CAEO,KAAA7C,CAAMuB,GACT5P,KAAK8Q,UAAUJ,OAAOd,EAAOsB,QACjC,EAQG,MAAMI,EAMT,YAAmB5L,EAAqC,CAAC,GALlD,KAAA6L,SAA2B,SAC3B,KAAAC,cAAwB,EACxB,KAAAC,MAA+B,UAC/B,KAAAC,OAAgC,eAGb/E,IAAlBjH,EAAK6L,WAAwBvR,KAAKuR,SAAW7L,EAAK6L,eAC5B5E,IAAtBjH,EAAK8L,eAA4BxR,KAAKwR,aAAe9L,EAAK8L,mBAC3C7E,IAAfjH,EAAK+L,QAAqBzR,KAAKyR,MAAQ/L,EAAK+L,YAC5B9E,IAAhBjH,EAAKgM,SAAsB1R,KAAK0R,OAAShM,EAAKgM,OACtD,CAEO,eAAAC,GACH,OAAO3R,KAAKuR,QAChB,CAEO,WAAOK,CAAKlD,GACf,OAAIA,aAAmB4C,EAA4B5C,EAC5C,IAAI4C,EAAoB5C,GAAW,CAAC,EAC/C,EAGG,MAAMmD,EAGF,iBAAOC,CAAWC,GACrB,MAAMC,EAAMC,SAASC,cAAc,OAEnC,OADAF,EAAIG,YAAcJ,GAAQ,GACnBC,EAAII,SACf,CAEQ,wBAAOC,CAAkBC,GAC7B,MAgBM/M,EAAQ+M,EAAK/M,MAAM,oBACzB,IAAKA,EACD,MAAM,IAAIgN,MAAM,0CAA0CD,MAE9D,MAAME,EAAMjN,EAAM,GAAGtB,cAEfwO,EAtBiE,CACnE,GAAM,CAAEC,OAAQ,iBAAkBC,OAAQ,oBAC1C,GAAM,CAAED,OAAQ,qBAAsBC,OAAQ,yBAC9C,GAAM,CAAED,OAAQ,qBAAsBC,OAAQ,yBAC9C,MAAS,CAAED,OAAQ,UAAWC,OAAQ,YACtC,MAAS,CAAED,OAAQ,UAAWC,OAAQ,YACtC,MAAS,CAAED,OAAQ,UAAWC,OAAQ,YACtC,QAAW,CAAED,OAAQ,UAAWC,OAAQ,YACxC,SAAY,CAAED,OAAQ,UAAWC,OAAQ,YACzC,IAAO,CAAED,OAAQ,oBAAqBC,OAAQ,uBAC9C,OAAU,CAAED,OAAQ,WAAYC,OAAQ,aACxC,SAAY,CAAED,OAAQ,WAAYC,OAAQ,aAC1C,OAAU,CAAED,OAAQ,aAAcC,OAAQ,eAC1C,GAAM,CAAED,OAAQ,OAAQC,OAAQ,UASZH,GAClBI,EAAcH,EAAO,GAAGA,EAAKC,SAASJ,IAAOG,EAAKE,SAAWL,EAG7DO,GADS,IAAIC,WACAC,gBAAgBH,EAAa,aAEhD,GADeC,EAAIG,cAAc,eAE7B,MAAM,IAAIT,MAAM,gCAAgCC,QAAUF,MAE9D,GAAiC,IAA7BO,EAAII,KAAKC,SAAShS,OAClB,MAAM,IAAIqR,MAAM,yDAAyDM,EAAII,KAAKC,SAAShS,WAG/F,MAAMmP,EAAUwC,EAAII,KAAKD,cAAcR,GACvC,IAAKnC,EACD,MAAM,IAAIkC,MAAM,eAAeC,0BAA4BF,MAG/D,OAAOjC,CACX,CAEO,YAAO8C,CAA+CC,EAAkBlJ,GAC3E,MAAMmG,EAAU4B,SAASe,cAAcI,GACvC,GAAK/C,EAEL,OAAO,IADOnG,GAAQ2H,GACOxB,EACjC,CAEO,WAAOgD,CAA8CD,EAAkBlJ,GAE1E,OADiB2H,EAAcnH,KAAQ0I,EAAUlJ,GACjCoJ,KACpB,CAEO,WAAO5I,CAA8C0I,EAAkBlJ,GAC1E,MAAMqJ,EAAWtB,SAASuB,iBAAiBJ,GACrCK,EAAQvJ,GAAQ2H,EACtB,OAAO7O,MAAM4O,KAAK2B,GAAUtC,IAAIzP,GAAK,IAAIiS,EAAkBjS,GAC/D,CAEO,eAAOkS,CAASN,GACnB,OAA4C,OAArCnB,SAASe,cAAcI,EAClC,CAEO,WAAOO,CAA8CC,EAAY1J,GACpE,MAAMmG,EAAU4B,SAAS4B,eAAeD,GAExC,OAAQvD,EAAsB,IADhBnG,GAAQ2H,GAC8BxB,QAAlC1D,CACtB,CAEO,mBAAOmH,CAAaF,GACvB,OAAuC,OAAhC3B,SAAS4B,eAAeD,EACnC,CAEO,YAAOhD,CAA+C1G,GAEzD,OAAO,IADOA,GAAQ2H,GACNI,SAASC,cAAc,QAAQ6B,UAAU,oBAAqB,IAAIC,MAAM,UAAW,OACvG,CASA,YAAmB3D,GAFX,KAAA4D,eAAuC,KAGvC5D,aAAmB6D,YACnBlU,KAAKmU,SAAW9D,EACU,iBAAZA,EACdrQ,KAAKmU,SAAWtC,EAAcQ,kBAAkBhC,IAEhDrQ,KAAKmU,SAAWtC,EAAcQ,kBAAkB,SAAUhC,EAAUA,EAAQiC,KAAO,IAAIjC,EAAQ+D,aAAa/D,EAAQ+D,YAChH,YAAa/D,GAAWA,EAAQ0B,OAChC/R,KAAKmU,SAAShC,YAAc9B,EAAQ0B,MAEpC1B,EAAQgE,KACRrU,KAAKsU,aAAajE,EAAQgE,KAE1B3G,EAAoBC,UAAUF,EAAmB8G,QAC7C,SAAUlE,GACVmE,QAAQC,MAAM,yBAAyBpE,EAAQiC,sBAE/C,YAAajC,GACbmE,QAAQC,MAAM,4BAA4BpE,EAAQ+D,oBAAoB/D,EAAQ0B,MAAQ,mBAEtF1B,EAAQgE,KACRG,QAAQC,MAAM,wBAAwBpE,EAAQgE,uBAI1DrU,KAAK0U,eACT,CAMQ,aAAAA,GACC1U,KAAK2U,aAAa,0BACnB3U,KAAK+T,UAAU,uBAAwB,OACvC/T,KAAK4U,QAAQ,KACT5U,KAAKmU,SAAWtC,EAAcQ,kBAA6B,8DAC3DxB,EAAcE,SAAS1C,MAAMrO,QAEjCA,KAAKoR,GAAG,sBAAuB,KAC3BpR,KAAK+T,UAAU,qBAAsB,IACrC/T,KAAK0K,KAAK,0BAA0B3B,QAAQvH,GAAKA,EAAEuS,UAAU,qBAAsB,OAEvF/T,KAAKoR,GAAG,oBAAqB,KACzBpR,KAAK+T,UAAU,qBAAsB,MACrC/T,KAAK0K,KAAK,0BAA0B3B,QAAQvH,GAAKA,EAAEuS,UAAU,qBAAsB,SAG/F,CAEA,cAAWc,GACP,OAAO7U,KAAK+T,UAAU,uBAC1B,CAEA,WAAW7C,GAIP,OAHKlR,KAAK2U,aAAa,wBACnB3U,KAAK+T,UAAU,sBAAuB,OAEnC/T,KAAK+T,UAAU,sBAC1B,CAQA,YAAWe,GACP,OAAQ,CAAC,SAAU,QAAS,OAAQ,QAAQC,SAAS/U,KAAKoU,QAC9D,CAEA,sBAAYY,GACR,MAAO,OAAOhV,KAAKkR,SACvB,CAEQ,YAAAoD,CAAaD,GACjB,GAAIA,GAAOrU,KAAK8U,SAAU,CACtB,MAAMG,EAAQjV,KAAKgV,mBACnBnD,EAAcnH,KAAK,IAAIuK,KAASlM,QAAQvH,GAAKA,EAAE2O,UAC/C,MAAME,EAAU4B,SAASC,cAAc,SACjCgD,EAAWb,EAAInQ,QAAQ,aAAc,yBAAyBlE,KAAKkR,aACnEiE,EAAOlD,SAASmD,eAAeF,GACrC7E,EAAQgF,YAAYF,GACpB9E,EAAQuD,GAAKqB,GACApD,EAAcsB,MAAM,SACtB,IAAItB,EAAc,CAAES,KAAiB,kBAAmBgD,UAAU,IAAIzD,EAAcI,SAASsD,mBACnGC,OAAO,IAAI3D,EAAcxB,IAE9BrQ,KAAK4U,QAAQ,KACT/C,EAAcnH,KAAK,IAAIuK,KAASlM,QAAQvH,GAAKA,EAAE2O,WAEvD,CACA,OAAOnQ,IACX,CAUO,kBAAAyV,GAEH,OADAzV,KAAK+T,UAAUlC,EAAc6D,+BAAgC,IACtD1V,IACX,CAQA,MAAW4T,GACP,OAAO5T,KAAK+T,UAAU,KAC1B,CAEO,UAAA4B,CAAWjD,EAAiB,mBAI/B,OAHK1S,KAAK4T,IACN5T,KAAK+T,UAAU,KAAM,GAAGrB,IAAS,SAE9B1S,IACX,CAEA,WAAWqQ,GACP,OAAOrQ,KAAKmU,QAChB,CAEO,KAAA1Q,CAA+CyG,GAClD,MAAMuJ,EAAQvJ,GAAQ2H,EAEhB+D,EAAgB5V,KAAKqQ,QAAQwF,WAAU,GAE7C,GAAID,EAAcjB,aAAa,2BAC3B,MAAM,IAAIpC,MAAM,8CASpB,MAb4B,CAAC,uBAAwB,sBAAuB,sBAOxDxJ,QAAQ+M,IACxBF,EAAcG,gBAAgBD,GAC9BF,EAAcpC,iBAAiB,IAAIsC,MAAS/M,QAAQiN,GAAMA,EAAGD,gBAAgBD,MAGlE,IAAIrC,EAAKmC,EAE5B,CAEA,WAAWxB,GACP,OAAOpU,KAAKqQ,QAAQ4F,QAAQhS,aAChC,CAMO,EAAAiS,CAAG9C,GACN,MAAM+C,EAAY/C,EAAS1Q,MAAM,8BACjC,IAAI2N,EAA8BrQ,KAAKqQ,QAEvC,IAAK,IAAI1O,EAAIwU,EAAUjV,OAAS,EAAGS,GAAK,EAAGA,IAAK,CAC5C,IAAIyU,EAAcD,EAAUxU,GAAG0U,OAC3BC,GAAc,EAOlB,GALIF,EAAY3K,WAAW,OACvB6K,GAAc,EACdF,EAAcA,EAAY3O,MAAM,GAAG4O,SAGlChG,IAAYA,EAAQkG,QAAQH,GAC7B,OAAO,EAGX,GAAIE,EACAjG,EAAUA,EAAQmG,mBAElB,GAAI7U,EAAI,EACJ,KAAO0O,IAAYA,EAAQkG,QAAQJ,EAAUxU,EAAI,GAAG0U,SAChDhG,EAAUA,EAAQmG,aAIlC,CAEA,OAAO,CACX,CAEO,KAAAjR,CAAM6N,GACT,IACI,OAAOpT,KAAKqQ,QAAQkG,QAAQnD,EAChC,CAAE,MACE,OAAO,CACX,CACJ,CAEA,SAAWxC,GAOP,OANqB,IAAI6F,IAAI,CACzB,QAAS,SAAU,WAAY,MAAO,QAAS,QAAS,KAAM,KAC9D,SAAU,QAAS,SAAU,SAAU,MAAO,SAAU,QAAS,MACjE,OAAQ,OAAQ,SAGAC,IAAI1W,KAAKoU,UAClBpU,KAAKmU,SAASQ,aAAa,sBACQ,KAAnC3U,KAAKmU,SAAS/B,UAAUiE,MACvC,CAQA,YAAWM,GACP,OAAO1E,SAASyB,SAAS1T,KAAKqQ,QAClC,CAEA,YAAWuG,GACP,MAAI,aAAc5W,KAAKqQ,QACHrQ,KAAKqQ,QAAQwG,SAEtB7W,KAAKqQ,QAAQsE,aAAa,WAEzC,CAEA,YAAWiC,CAASA,GACZ,aAAc5W,KAAKqQ,QACnBrQ,KAAKqQ,QAAQwG,SAAWD,EAEpBA,EACA5W,KAAK+T,UAAU,WAAY,YAE3B/T,KAAK+T,UAAU,WAAY,KAGvC,CAEA,SAAW5J,GACP,MAAI,UAAWnK,KAAKqQ,QACDrQ,KAAKqQ,QAAQlG,MAGrBnK,KAAK+T,UAAU,sBAAwB,EAEtD,CAEA,SAAW5J,CAAM2M,GACT,UAAW9W,KAAKqQ,QAChBrQ,KAAKqQ,QAAQlG,MAAQ2M,EAErB9W,KAAK+T,UAAU,oBAAqB+C,EAE5C,CAEA,QAAW/E,GACP,OAAO/R,KAAKqQ,QAAQ8B,aAAe,EACvC,CAEA,QAAWJ,CAAKA,GACZ/R,KAAKqQ,QAAQ8B,YAAcJ,GAAQ,EACvC,CAEA,QAAWO,GACP,OAAOtS,KAAKqQ,QAAQ+B,SACxB,CAEA,QAAWE,CAAKA,GACZtS,KAAKqQ,QAAQ+B,UAAYE,CAC7B,CAQO,QAAAyE,GAEH,OADA/W,KAAKqQ,QAAQ2G,QACNhX,IACX,CAEA,WAAWiX,GACP,IAAKjX,KAAK2W,SACN,OAAO,EAGX,IAAK3W,KAAKqQ,QAAQ6G,eAAiBjF,SAASyB,SAAS1T,KAAKqQ,SACtD,OAAO,EAGX,MAAM8G,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,GAAID,EAAKE,MAAQ,GAAKF,EAAKG,OAAS,EAAG,CACnC,MAAMtD,EAAQhU,KAAKuX,mBACnB,MAAyB,SAAlBvD,EAAMwD,SAA2C,WAArBxD,EAAMyD,YAAgD,aAArBzD,EAAMyD,UAC9E,CAEA,OAAO,CACX,CAEA,WAAWC,GACP,QAAS1X,KAAKqQ,QAAQsE,aAAa,aAAyD,OAA1C3U,KAAKqQ,QAAQsH,aAAa,YAChF,CAEA,WAAWD,CAAQvN,GACXA,EACAnK,KAAKqQ,QAAQ0F,gBAAgB,YAE7B/V,KAAKqQ,QAAQuH,aAAa,WAAY,WAE9C,CAEA,eAAYC,GACR,OAAO7X,KAAKqQ,QAAQsE,aAAa,0BACrC,CAEO,MAAAxE,GACEnQ,KAAK6X,aACN7X,KAAKmU,SAAShE,QAEtB,CAEO,KAAA9B,GAGH,OAFArO,KAAK0K,KAAK,KAAK3B,QAAQvH,GAAKA,EAAE2O,UAC9BnQ,KAAK+R,KAAO,GACL/R,IACX,CAQA,SAAWqX,GACP,OAAOrX,KAAKqQ,QAAQyH,WACxB,CAEA,SAAWT,CAAMA,GACb,IAAIxT,EAAIwT,EAAM9V,WAAa,KAC3BvB,KAAKgU,MAAM,QAASnQ,EACxB,CAEA,UAAWyT,GACP,OAAOtX,KAAKqQ,QAAQ0H,YACxB,CAEA,UAAWT,CAAOA,GACd,IAAIpV,EAAIoV,EAAO/V,WAAa,KAC5BvB,KAAKgU,MAAM,SAAU9R,EACzB,CAEA,cAAW8V,GACP,OAAOhY,KAAKqQ,QAAQ4H,WACxB,CAEA,eAAWC,GACP,OAAOlY,KAAKqQ,QAAQ8H,YACxB,CAEA,cAAWC,GACP,MAAMpE,EAAQhU,KAAKuX,mBACbc,EAASC,WAAWtE,EAAMuE,YAAcD,WAAWtE,EAAMwE,aAC/D,OAAOxY,KAAKqQ,QAAQyH,YAAcO,CACtC,CAEA,eAAWI,GACP,MAAMzE,EAAQhU,KAAKuX,mBACbc,EAASC,WAAWtE,EAAM0E,WAAaJ,WAAWtE,EAAM2E,cAC9D,OAAO3Y,KAAKqQ,QAAQ0H,aAAeM,CACvC,CAEA,gBAAWO,GACP,OAAO5Y,KAAKqQ,QAAQuI,YACxB,CAEA,eAAWC,GACP,OAAO7Y,KAAKqQ,QAAQwI,WACxB,CAEA,aAAWC,GACP,OAAO9Y,KAAKqQ,QAAQyI,SACxB,CAEA,YAAWC,GACP,MAAM5B,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,MAAO,CAAE4B,IAAK7B,EAAK6B,IAAK3J,KAAM8H,EAAK9H,KACvC,CAEA,oBAAW4J,GACP,MAAM9B,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,MAAO,CAAE4B,IAAK7B,EAAK6B,IAAM7Y,OAAO+Y,QAAS7J,KAAM8H,EAAK9H,KAAOlP,OAAOgZ,QACtE,CAEA,kBAAWC,GACP,MAAMjC,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,MAAO,CAAE4B,IAAK7B,EAAK6B,IAAK3J,KAAM8H,EAAK9H,KACvC,CAEA,QAAW8H,GACP,MAAMA,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,MAAO,CAAE4B,IAAK7B,EAAK6B,IAAK3J,KAAM8H,EAAK9H,KAAMgI,MAAOF,EAAKE,MAAOC,OAAQH,EAAKG,OAC7E,CAEA,aAAW+B,GACP,MAAMlC,EAAOnX,KAAKqQ,QAAQ+G,wBACpBpD,EAAQhU,KAAKuX,mBACb+B,EACGhB,WAAWtE,EAAMuF,YADpBD,EAEKhB,WAAWtE,EAAMwF,cAFtBF,EAGMhB,WAAWtE,EAAMyF,eAHvBH,EAIIhB,WAAWtE,EAAM0F,aAE3B,MAAO,CACHV,IAAK7B,EAAK6B,IAAMM,EAChBjK,KAAM8H,EAAK9H,KAAOiK,EAClBjC,MAAOF,EAAKE,MAAQiC,EAAeA,EACnChC,OAAQH,EAAKG,OAASgC,EAAcA,EAE5C,CAEA,aAAWK,GACP,MAAMxC,EAAOnX,KAAKqQ,QAAQ+G,wBACpBpD,EAAQhU,KAAKuX,mBACbc,EACGC,WAAWtE,EAAM0E,WADpBL,EAEKC,WAAWtE,EAAMwE,aAFtBH,EAGMC,WAAWtE,EAAM2E,cAHvBN,EAIIC,WAAWtE,EAAMuE,YAE3B,MAAO,CACHS,IAAK7B,EAAK6B,IAAMX,EAChBhJ,KAAM8H,EAAK9H,KAAOgJ,EAClBhB,MAAOF,EAAKE,MAAQgB,EAAcA,EAClCf,OAAQH,EAAKG,OAASe,EAAaA,EAE3C,CAGA,WAAWiB,GACP,MAAMtF,EAAQhU,KAAKuX,mBACnB,MAAO,CACHyB,IAAKV,WAAWtE,EAAMuF,YACtBjK,MAAOgJ,WAAWtE,EAAMwF,cACxBI,OAAQtB,WAAWtE,EAAMyF,eACzBpK,KAAMiJ,WAAWtE,EAAM0F,aAE/B,CAEA,UAAWrB,GACP,MAAMrE,EAAQhU,KAAKuX,mBACnB,MAAO,CACHyB,IAAKV,WAAWtE,EAAM0E,WACtBpJ,MAAOgJ,WAAWtE,EAAMwE,aACxBoB,OAAQtB,WAAWtE,EAAM2E,cACzBtJ,KAAMiJ,WAAWtE,EAAMuE,YAE/B,CAEA,cAAWsB,GACP,MAAM1C,EAAOnX,KAAKqQ,QAAQ+G,wBAC1B,OAAOD,EAAK6B,IAAM7Y,OAAO+X,aAAef,EAAKyC,OAAS,CAC1D,CAEA,mBAAWE,GACP,OAAO9Z,KAAKqQ,QAAQ+G,wBAAwBwC,OAAS,CACzD,CAEA,mBAAWG,GACP,OAAO/Z,KAAKqQ,QAAQ+G,wBAAwB4B,IAAM7Y,OAAO+X,WAC7D,CAEA,kBAAW8B,GACP,OAAOha,KAAKqQ,QAAQ+G,wBAAwB9H,MAAQ,CACxD,CAEA,mBAAW2K,GACP,OAAOja,KAAKqQ,QAAQ+G,wBAAwB/H,KAAOlP,OAAO6X,UAC9D,CAEQ,2BAAOkC,CAAqB/P,GAChC,MAAMgQ,GAAYhQ,GAAS,IAAIlG,cAC/B,MAAoB,SAAbkW,GAAoC,WAAbA,CAClC,CAEQ,oCAAOC,CAA8B/J,GACzC,IAAI1B,EAA8B0B,EAAQmG,cAC1C,KAAO7H,GAAS,CACZ,GAAIA,IAAYsD,SAASgB,MAAQtE,IAAYsD,SAASsD,gBAClD,OAAO,KAGX,MAAMvB,EAAQ7T,OAAOoX,iBAAiB5I,GAChC0L,EAAYrG,EAAMqG,UAClBC,EAAYtG,EAAMsG,UAElBC,EAAa1I,EAAcqI,qBAAqBG,IAAc1L,EAAQiK,aAAejK,EAAQwJ,aAC7FqC,EAAa3I,EAAcqI,qBAAqBI,IAAc3L,EAAQkK,YAAclK,EAAQsJ,YAElG,GAAIsC,GAAcC,EACd,OAAO7L,EAEXA,EAAUA,EAAQ6H,aACtB,CACA,OAAO,IACX,CAEQ,2BAAOiE,CACXC,EACAC,EACAC,EACAC,EACAC,EACAtJ,GAEA,MAAMuJ,EAAUL,EAAYC,EAG5B,OAAInJ,GAAgBoJ,GAAgBF,GAAaG,GAAcE,EACpD,KAGG,UAAVD,EACOF,EAEG,QAAVE,EACOD,EAAaF,EAEV,WAAVG,EAEOF,GAAgBD,GADHE,EAAaD,IACgB,EAIjDA,EAAeF,EACRE,EAEPC,EAAaE,EACNF,EAAaF,EAEjB,IACX,CAEO,QAAAK,CAAStM,EAA8D,CAAC,GAC3E,IAAK1O,KAAK2W,SAAU,OAAO3W,KAE3B,MAAMib,EAAW3J,EAAoBM,KAAKlD,GACpC6C,EAAW0J,EAAStJ,kBACpBH,EAAeyJ,EAASzJ,aACxBC,EAAQwJ,EAASxJ,MACjBC,EAASuJ,EAASvJ,OAElBwJ,EAAarJ,EAAcuI,8BAA8Bpa,KAAKqQ,SACpE,GAAI6K,EAAY,CACZ,MAAMC,EAAcnb,KAAKqQ,QAAQ+G,wBAC3BgE,EAAgBF,EAAW9D,wBAE3BiE,EAAwBF,EAAYnC,IAAMoC,EAAcpC,IAAMkC,EAAWpC,UACzEwC,EAA2BH,EAAYvB,OAASwB,EAAcpC,IAAMkC,EAAWpC,UAC/EyC,EAAyBJ,EAAY9L,KAAO+L,EAAc/L,KAAO6L,EAAWM,WAC5EC,EAA0BN,EAAY7L,MAAQ8L,EAAc/L,KAAO6L,EAAWM,WAE9EE,EAAY7J,EAAc4I,qBAC5BS,EAAWpC,UACXoC,EAAW/C,aACXkD,EACAC,EACA7J,EACAD,GAEEmK,EAAa9J,EAAc4I,qBAC7BS,EAAWM,WACXN,EAAWjD,YACXsD,EACAE,EACA/J,EACAF,GAGJ,IAAKA,GAA8B,OAAdkK,GAAqC,OAAfC,EAAqB,CAC5D,MAAMC,EAAUF,GAAaR,EAAWpC,UAClC+C,EAAWF,GAAcT,EAAWM,WACzCN,EAAmBY,WAAW,CAAE9C,IAAK4C,EAASvM,KAAMwM,EAAUtK,aACzD2J,EAAmBY,WACrBZ,EAAWpC,UAAY8C,EACvBV,EAAWM,WAAaK,EAEhC,CACA,OAAO7b,IACX,CAEA,MAAMmX,EAAOnX,KAAKqQ,QAAQ+G,wBACpB2E,EAAa5b,OAAO+Y,SAAWjH,SAASsD,gBAAgBuD,UACxDkD,EAAc7b,OAAOgZ,SAAWlH,SAASsD,gBAAgBiG,WAEzDS,EAAaF,EAAa5E,EAAK6B,IAC/BkD,EAAgBH,EAAa5E,EAAKyC,OAClCuC,EAAcH,EAAc7E,EAAK9H,KACjC+M,EAAeJ,EAAc7E,EAAK7H,MAElCoM,EAAY7J,EAAc4I,qBAAqBsB,EAAY5b,OAAO+X,YAAa+D,EAAYC,EAAezK,EAAOD,GACjHmK,EAAa9J,EAAc4I,qBAAqBuB,EAAa7b,OAAO6X,WAAYmE,EAAaC,EAAc1K,EAAQF,GAKzH,OAHKA,GAA8B,OAAdkK,GAAqC,OAAfC,GACvCxb,OAAO2b,SAAS,CAAE9C,IAAK0C,GAAaK,EAAY1M,KAAMsM,GAAcK,EAAazK,aAE9EvR,IACX,CAEO,QAAA8b,CAASlM,EAA8ClB,EAA8D,CAAC,GACzH,GAAsB,iBAAXkB,EAAqB,CAC5B,MAAMS,EAAUrQ,KAAKmT,MAAMvD,GAE3B,OADAS,GAAS2K,SAAStM,GACX1O,IACX,CACA,OAAI4P,aAAkBiC,GAClBjC,EAAOoL,SAAStM,GACT1O,OAEX,IAAI6R,EAAcjC,GAAQoL,SAAStM,GAC5B1O,KACX,CAEO,WAAAqc,CAAYzM,GACf,MAAM0M,EAAMtc,KAAKqQ,QAAQkM,wBAAwB3M,EAAOS,SACxD,QAAIiM,EAAME,KAAKC,iCACqC,KAA5CH,EAAME,KAAKE,4BACvB,CAEO,UAAAC,CAAW/M,GACd,MAAM0M,EAAMtc,KAAKqQ,QAAQkM,wBAAwB3M,EAAOS,SACxD,QAAIiM,EAAME,KAAKC,iCACqC,KAA5CH,EAAME,KAAKI,4BACvB,CAQO,YAAAjI,CAAanS,GAChB,OAAOxC,KAAKqQ,QAAQsE,aAAanS,EACrC,CAKO,SAAAuR,CAAUvR,EAAc2H,GAC3B,OAAyB,IAArB3F,UAAUtD,OAEHlB,KAAKqQ,QAAQsE,aAAanS,GAAQxC,KAAKqQ,QAAQsH,aAAanV,QAAQmK,EAC1D,OAAVxC,GAEPnK,KAAKqQ,QAAQ0F,gBAAgBvT,GACtBxC,OAGPA,KAAKqQ,QAAQuH,aAAapV,EAAM2H,GAAO5I,YAAc,IAC9CvB,KAEf,CAEO,QAAA6c,CAASra,GACZ,OAAOxC,KAAKqQ,QAAQyM,UAAUpJ,SAASlR,EAC3C,CAEO,QAAAua,CAASva,GAEZ,OADAxC,KAAKqQ,QAAQyM,UAAUpZ,IAAIlB,GACpBxC,IACX,CAEO,WAAAgd,CAAYxa,GAEf,OADAxC,KAAKqQ,QAAQyM,UAAU3M,OAAO3N,GACvBxC,IACX,CAEO,WAAAid,CAAYza,EAAc0a,GAE7B,OADAld,KAAKqQ,QAAQyM,UAAUK,OAAO3a,EAAM0a,GAC7Bld,IACX,CAMO,KAAAgU,CAAMxR,EAAc2H,GACvB,OAAyB,IAArB3F,UAAUtD,OAEHlB,KAAKqQ,QAAQ2D,MAAMoJ,iBAAiB5a,GAC3B,MAAT2H,GAEPnK,KAAKqQ,QAAQ2D,MAAMqJ,eAAe7a,GAC3BxC,OAGPA,KAAKqQ,QAAQ2D,MAAMsJ,YAAY9a,EAAM2H,GAC9BnK,KAEf,CAEU,gBAAAuX,GACN,OAAOpX,OAAOoX,iBAAiBvX,KAAKqQ,QACxC,CAEO,aAAAkN,CAAc/a,GACjB,OAAOrC,OAAOoX,iBAAiBvX,KAAKqQ,SAAS+M,iBAAiB5a,EAClE,CAQA,UAAWgb,GAIP,OAH2B,MAAvBxd,KAAKiU,gBAAyD,OAA/BjU,KAAKqQ,QAAQmG,gBAC5CxW,KAAKiU,eAAiB,IAAIpC,EAAc7R,KAAKqQ,QAAQmG,gBAElDxW,KAAKiU,gBAAkBpC,EAAcjB,OAChD,CAEA,WAAW6M,GACP,IAAIA,EAAU,GACVC,EAAiB1d,KAAKqQ,QAAQmG,cAClC,KAA0B,OAAnBkH,GACHD,EAAQrN,KAAK,IAAIyB,EAAc6L,IAC/BA,EAAiBA,EAAelH,cAEpC,OAAOiH,CACX,CAEO,WAAAE,CAAYvK,EAAmB,KAClC,OAAgD,OAAzCpT,KAAKqQ,QAAQ2C,cAAcI,EACtC,CACO,QAAAF,CAAkDE,EAAmB,IAAKlJ,GAC7E,MACM0T,EADW5a,MAAM4O,KAAK5R,KAAKqQ,QAAQmD,iBAAiBJ,IAC1ByK,OAAOC,GAASA,EAAMtH,gBAAkBxW,KAAKqQ,SACvEoD,EAAQvJ,GAAQ2H,EACtB,OAAO+L,EAAeC,OAAQrc,GAAwBA,aAAa0S,aAAajD,IAAIzP,GAAK,IAAIiS,EAAKjS,GACtG,CAEO,UAAAuc,CAAoD3K,EAAmB,IAAKlJ,GAE/E,OADiBlK,KAAKkT,SAAYE,EAAUlJ,GAC5B8T,cAAWrR,CAC/B,CAEO,SAAAsR,CAAmD7K,EAAmB,IAAKlJ,GAE9E,OADiBlK,KAAKkT,SAAYE,EAAUlJ,GAC5BoJ,YAAS3G,CAC7B,CAEO,OAAAuR,CAAiD9K,EAAkBlJ,GACtE,MAAMiU,EAAiBne,KAAKqQ,QAAQ6N,QAAQ9K,GAC5C,GAAuB,OAAnB+K,GAA2BA,aAA0BjK,YAErD,OAAO,IADOhK,GAAQ2H,GACNsM,EAIxB,CAEO,eAAAC,CAAyDhL,EAAmB,IAAKlJ,GACpF,MAAMmG,EAAUrQ,KAAKqQ,QAAQgO,uBAC7B,GAAgB,OAAZhO,GAAoBA,aAAmB6D,YAAa,CACpD,MACMoK,EAAK,IADGpU,GAAQ2H,GACFxB,GACpB,OAAOiO,EAAG/Y,MAAM6N,GAAYkL,EAAKA,EAAGF,gBAAmBhL,EAAUlJ,EACrE,CAGJ,CAEO,WAAAqU,CAAqDnL,EAAmB,IAAKlJ,GAChF,MAAMmG,EAAUrQ,KAAKqQ,QAAQmO,mBAC7B,GAAgB,OAAZnO,GAAoBA,aAAmB6D,YAAa,CACpD,MACMoK,EAAK,IADGpU,GAAQ2H,GACFxB,GACpB,OAAOiO,EAAG/Y,MAAM6N,GAAYkL,EAAKA,EAAGC,YAAenL,EAAUlJ,EACjE,CAGJ,CAEO,QAAAuU,CAAkDrL,EAAmB,IAAKlJ,GAC7E,MAAMsT,EAASxd,KAAKqQ,QAAQmG,cAC5B,IAAKgH,EAAQ,MAAO,GACpB,MAAM/J,EAAQvJ,GAAQ2H,EACtB,OAAO7O,MAAM4O,KAAK4L,EAAOtK,UAAU2K,OAAQrc,GAAwBA,aAAa0S,aACrE1S,IAAMxB,KAAKqQ,SAASY,IAAIzP,GAAK,IAAIiS,EAAKjS,IAAIqc,OAAOrc,GAAKA,EAAE+D,MAAM6N,GAC7E,CAQO,IAAA1I,CAA8C0I,EAAkBlJ,GAEnE,OADiBlH,MAAM4O,KAAK5R,KAAKqQ,QAAQmD,iBAAiBJ,IACrCnC,IAAIzP,GAAK,IAAK0I,GAAQ2H,GAAerQ,GAC9D,CAEO,KAAA2R,CAA+CC,EAAmB,IAAKlJ,GAE1E,OADiBlK,KAAK0K,KAAK0I,EAAUlJ,GAClB8T,cAAWrR,CAClC,CAEO,IAAA0G,CAA8CD,EAAmB,IAAKlJ,GAEzE,OADiBlK,KAAK0K,KAAK0I,EAAUlJ,GAClBoJ,YAAS3G,CAChC,CAEO,QAAA+G,CAASN,GACZ,OAAOpT,KAAK0K,KAAK0I,GAAUlS,OAAS,CACxC,CAEQ,wBAAOwd,CAAkB9O,EAAuB+O,GACpD/O,EAAOgP,QAAQ,uBACf,IACID,GACJ,C,QACI/O,EAAOgP,QAAQ,oBACnB,CACJ,CAEO,OAAAC,CAAQA,GAIX,OAHAhN,EAAc6M,kBAAkBG,EAAS,KACrC7e,KAAKqQ,QAAQwO,QAAQA,EAAQxO,WAE1BrQ,IACX,CAEO,MAAAwV,CAAO5F,GAIV,OAHAiC,EAAc6M,kBAAkB9O,EAAQ,KACpC5P,KAAKqQ,QAAQmF,OAAO5F,EAAOS,WAExBrQ,IACX,CAEO,SAAA8e,CAAUC,GAEb,OADAA,EAAQhW,QAAQvH,GAAKxB,KAAKwV,OAAOhU,IAC1BxB,IACX,CAEO,YAAAgf,CAAaxJ,GAIhB,OAHA3D,EAAc6M,kBAAkBlJ,EAAQ,KACpCxV,KAAKqQ,QAAQ4O,OAAOzJ,EAAOnF,WAExBrQ,IACX,CAEO,WAAAkf,CAAY1J,GAIf,OAHA3D,EAAc6M,kBAAkBlJ,EAAQ,KACpCxV,KAAKqQ,QAAQ8O,MAAM3J,EAAOnF,WAEvBrQ,IACX,CAEO,QAAAof,CAASxP,GAIZ,OAHAiC,EAAc6M,kBAAkB1e,KAAM,KAClC4P,EAAOS,QAAQmF,OAAOxV,KAAKqQ,WAExBrQ,IACX,CAEO,SAAAsV,CAAU1F,GAIb,OAHAiC,EAAc6M,kBAAkB1e,KAAM,KAClC4P,EAAOS,QAAQwO,QAAQ7e,KAAKqQ,WAEzBrQ,IACX,CAWO,OAAA4e,CAAQ5O,EAAexO,GAE1B,OADAxB,KAAKqQ,QAAQgP,cAAc7d,GAAK,IAAI8d,MAAMtP,EAAO,CAAEuP,SAAS,KACrDvf,IACX,CAIO,EAAAoR,CAAGpB,EAA0BxB,EAA4CE,GAM5E,OALe1L,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACX,MAAMxP,EAAQ,IAAI1B,EAAaC,OAAQ7B,EAAW+B,GAClDmC,EAAcE,SAASK,GAAGqO,EAAWzf,KAAMiQ,KAExCjQ,IACX,CAIO,SAAA0f,CAAU1P,EAA0BoD,EAAkB5E,EAA4CE,GACrG,MAAMiR,EAA0Bne,IAC5B,MAAMoO,EAASpO,EAAEoO,OACjB,GAAIA,GAAUA,EAAOsO,QAAQ9K,GACzB,OAAO5E,EAAOhN,IAQtB,OALewB,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACX,MAAMxP,EAAQ,IAAI1B,EAAaC,EAAQmR,EAAUjR,GACjDmC,EAAcE,SAASK,GAAGqO,EAAWzf,KAAMiQ,KAExCjQ,IACX,CAIO,IAAAkQ,CAAKF,EAA0BxB,EAA4CE,GAC9E,MAAMkR,EAAyC,IAAMlR,GAAW,CAAC,EAAIwB,MAAM,GAO3E,OANAlQ,KAAKqR,IAAIrB,EAAOxB,EAAQoR,IACT5c,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACX,MAAMxP,EAAQ,IAAI1B,EAAaC,OAAQ7B,EAAWiT,GAClD/O,EAAcE,SAASK,GAAGqO,EAAWzf,KAAMiQ,KAExCjQ,IACX,CAKO,GAAAqR,CAAIrB,EAA0BxB,EAA6CE,GAU9E,OATe1L,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACX,GAAIjR,EAAQ,CACR,MAAMyB,EAAQ,IAAI1B,EAAaC,OAAQ7B,EAAW+B,GAClDmC,EAAcE,SAASM,IAAIoO,EAAWzf,KAAMiQ,EAChD,MACIY,EAAcE,SAASM,IAAIoO,EAAWzf,QAGvCA,IACX,CAMO,KAAA6f,CAAMrR,GAMT,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,QAASwP,MAAMte,SAAWgN,EAAOhN,IAE/DxB,KAAK4e,QAAQ,SAEV5e,IACX,CAIO,QAAA+f,CAASvR,GAMZ,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,WAAYwP,MAAMte,SAAWgN,EAAOhN,IAElExB,KAAK4e,QAAQ,YAEV5e,IACX,CAIO,SAAAggB,CAAUxR,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,QAAAigB,CAASzR,GAMZ,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,WAAYwP,MAAMte,SAAWgN,EAAOhN,IAElExB,KAAK4e,QAAQ,YAEV5e,IACX,CAIO,SAAAkgB,CAAU1R,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,OAAAmgB,CAAQ3R,GAMX,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,IAEjExB,KAAK4e,QAAQ,WAEV5e,IACX,CAIO,SAAAogB,CAAU5R,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,UAAAqgB,CAAW7R,GAMd,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,aAAcwP,MAAMte,SAAWgN,EAAOhN,IAEpExB,KAAK4e,QAAQ,cAEV5e,IACX,CAIO,UAAAsgB,CAAW9R,GAMd,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,aAAcwP,MAAMte,SAAWgN,EAAOhN,IAEpExB,KAAK4e,QAAQ,cAEV5e,IACX,CAIO,SAAAugB,CAAU/R,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,OAAAwgB,CAAQhS,GAMX,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,IAEjExB,KAAK4e,QAAQ,WAEV5e,IACX,CAIO,QAAAygB,CAASjS,GAMZ,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,WAAYwP,MAAMte,SAAWgN,EAAOhN,IAElExB,KAAK4e,QAAQ,YAEV5e,IACX,CAIO,SAAA0gB,CAAUlS,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,SAAA2gB,CAAUnS,GAMb,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,YAAawP,MAAMte,SAAWgN,EAAOhN,IAEnExB,KAAK4e,QAAQ,aAEV5e,IACX,CAIO,IAAA4gB,CAAKpS,GAMR,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,OAAQwP,MAAMte,SAAWgN,EAAOhN,IAE9DxB,KAAK4e,QAAQ,QAEV5e,IACX,CAIO,IAAA6gB,CAAKrS,GAMR,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,OAAQwP,MAAMte,SAAWgN,EAAOhN,IAE9DxB,KAAK4e,QAAQ,QAEV5e,IACX,CAEO,OAAA4U,CAAQpG,GAEX,OADAxO,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,IAC1DxB,IACX,CAUO,OAAA8gB,CAAQtS,GAMX,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,IAEjExB,KAAK4e,QAAQ,WAEV5e,IACX,CAIO,KAAA+gB,CAAMvS,GAMT,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,QAASwP,MAAMte,SAAWgN,EAAOhN,IAE/DxB,KAAK4e,QAAQ,SAEV5e,IACX,CAIO,QAAAghB,CAASxS,GAMZ,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,WAAYwP,MAAMte,SAAWgN,EAAOhN,IAElExB,KAAK4e,QAAQ,YAEV5e,IACX,CASO,MAAAihB,CAAOzS,GAMV,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,SAAUwP,MAAMte,SAAWgN,EAAOhN,IAEhExB,KAAK4e,QAAQ,UAEV5e,IACX,CAIO,KAAAkhB,CAAM1S,GAMT,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,QAASwP,MAAMte,SAAWgN,EAAOhN,IAE/DxB,KAAK4e,QAAQ,SAEV5e,IACX,CAQO,+BAAWmhB,GACd,OAAOtP,EAAcuP,sBAAwBvP,EAAcuP,uBAChD,IAAIC,qBAAqBC,IACxBA,EAAQzD,OAAO5N,GAASA,EAAMsR,gBAAgBxY,QACtCkH,GAASA,EAAML,OAAOyP,cAAc,IAAIC,MAAM,YACtDgC,EAAQzD,OAAO5N,IAAUA,EAAMsR,gBAAgBxY,QACvCkH,GAASA,EAAML,OAAOyP,cAAc,IAAIC,MAAM,cAEtE,CAIO,MAAAkC,CAAOhT,GAOV,OANIA,GACAqD,EAAcsP,qBAAqBM,QAAQzhB,KAAKqQ,SAChDrQ,KAAKqQ,QAAQC,iBAAiB,SAAUwP,MAAMte,SAAWgN,EAAOhN,KAEhExB,KAAK4e,QAAQ,UAEV5e,IACX,CAIO,OAAA0hB,CAAQlT,GAOX,OANIA,GACAqD,EAAcsP,qBAAqBM,QAAQzhB,KAAKqQ,SAChDrQ,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,KAEjExB,KAAK4e,QAAQ,WAEV5e,IACX,CAIO,KAAAgX,CAAMxI,GAMT,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,QAASwP,MAAMte,SAAWgN,EAAOhN,IAE/DxB,KAAK4e,QAAQ,SAEV5e,IACX,CAIO,IAAA2hB,CAAKnT,GAMR,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,OAAQwP,MAAMte,SAAWgN,EAAOhN,IAE9DxB,KAAK4e,QAAQ,QAEV5e,IACX,CAIO,OAAA4hB,CAAQpT,GAMX,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,UAAWwP,MAAMte,SAAWgN,EAAOhN,IAEjExB,KAAK4e,QAAQ,WAEV5e,IACX,CAIO,QAAA6hB,CAASrT,GAMZ,OALIA,EACAxO,KAAKqQ,QAAQC,iBAAiB,WAAYwP,MAAMte,SAAWgN,EAAOhN,IAElExB,KAAK4e,QAAQ,YAEV5e,IACX,CAEO,QAAA8hB,CAAStT,GAQZ,OAPAxO,KAAKqQ,QAAQC,iBAAiB,OAAQwP,MAAMte,IACxCA,EAAEugB,iBACF,MAAMC,EAAKxgB,EAAEygB,aACTD,GAAMA,EAAGE,aACH1T,EAAOxL,MAAM4O,KAAKoQ,EAAGE,UAG5BliB,IACX,CASO,MAAAmiB,CAAO3T,GAOV,OANAxO,KAAKyV,qBACDjH,EACAxO,KAAKqQ,QAAQC,iBAAiB,gBAAiBwP,MAAMte,SAAWgN,EAAOhN,IAEvExB,KAAK4e,QAAQ,iBAEV5e,IACX,CAIO,MAAAoiB,CAAO5T,GAOV,OANAxO,KAAKyV,qBACDjH,EACAxO,KAAKqQ,QAAQC,iBAAiB,gBAAiBwP,MAAMte,SAAWgN,EAAOhN,IAEvExB,KAAK4e,QAAQ,iBAEV5e,IACX,CAIO,YAAAqiB,CAAa7T,GAOhB,OANAxO,KAAKyV,qBACDjH,EACAxO,KAAKqQ,QAAQC,iBAAiB,sBAAuBwP,MAAMte,SAAWgN,EAAOhN,IAE7ExB,KAAK4e,QAAQ,uBAEV5e,IACX,EAxsCuB,EAAA0V,+BAAyC,qBAukCjD,EAAA0L,sBAAqD,KAsIjE,MAAMkB,UAA0BzQ,EAC5B,UAAO9J,CAAIvF,GACd,OAAOqP,EAAcsB,MAAyB,cAAc3Q,QAAY8f,IAC7DzQ,EAAcjB,MAAyB0R,EACtD,CAEA,WAAWC,GACP,OAAOviB,KAAK+T,UAAU,YAAc,EACxC,EAMG,MAAMyO,EAAb,cAQY,KAAAC,MAAuB5Q,EAAcjB,QACrC,KAAA8R,kBAA6C,KAC7C,KAAAC,YAAsB,EACtB,KAAAC,eAAiF,CAAC,CAsO9F,CA9OW,mBAAW7R,GACd,OAAOyR,EAAaxR,YAAcwR,EAAaxR,UAAY,IAAIwR,EACnE,CAQA,eAAWK,GACP,OAAO7iB,KAAKyiB,MAAM9L,QACtB,CAEO,UAAAmM,GACH,IAAK9iB,KAAK6iB,YAAa,CACnB,IAAK5Q,SAASgB,KACV,MAAM,IAAIV,MAAM,mDAEpBvS,KAAKyiB,MAAQ5Q,EAAcsB,MAAM,QAEN,CAAC,SAAU,SAAU,oBAAqB,mBAAoB,gBACtEpK,QAAQvH,IACvBrB,OAAOmQ,iBAAiB9O,EAAG,KACvB,MAAMuhB,EAAoB,IAAIC,YAAY,uBAC1C7iB,OAAOkf,cAAc0D,IACtB,CAAEE,SAAS,MAIlBhR,SAAS3B,iBAAiB,WAAY9O,IAClCA,EAAE0hB,kBACF1hB,EAAEugB,mBAGN/hB,KAAKmiB,OAAO,KACRlQ,SAASuB,iBAAiB,IAAI3B,EAAc6D,mCAAmC3M,QAAQvH,IACnFA,EAAE6d,cAAc,IAAI2D,YAAY,sBAIxChjB,KAAKoiB,OAAO,KACRnQ,SAASuB,iBAAiB,IAAI3B,EAAc6D,mCAAmC3M,QAAQvH,IACnFA,EAAE6d,cAAc,IAAI2D,YAAY,sBAIxChjB,KAAKqiB,aAAa,KACdpQ,SAASuB,iBAAiB,IAAI3B,EAAc6D,mCAAmC3M,QAAQvH,IACnFA,EAAE6d,cAAc,IAAI2D,YAAY,4BAMxChjB,KAAK0iB,kBAAoB,IAAIS,iBAAiBC,IAC1CA,EAAUra,QAAQsa,IACdA,EAASC,aAAava,QAAQoM,IAC1B,GAA2B,oBAAhBjB,aAA+BiB,aAAgBjB,YAAa,CACnE,MAAM7D,EAAU,IAAIwB,EAAcsD,GAC7B9E,EAAQsE,aAAa,uBAA0BtE,EAAQsG,UACxDtG,EAAQuO,QAAQ,UAExB,QAIZ5e,KAAK0iB,kBAAkBjB,QAAQzhB,KAAKiT,KAAK5C,QAAS,CAAEkT,WAAW,EAAMC,SAAS,GAClF,CACA,OAAOxjB,IACX,CAEA,aAAWyjB,GACP,OAAOzjB,KAAK2iB,UAChB,CAEO,MAAAe,GACH1jB,KAAK2iB,YAAa,EAClBgB,SAASD,QACb,CAIA,QAAWzQ,GACP,OAAOjT,KAAKyiB,KAChB,CAEO,MAAAjN,CAAOhU,GAEV,OADAxB,KAAKyiB,MAAMjN,OAAOhU,GACXxB,IACX,CAEO,QAAA4jB,CAASC,EAAwB7F,GAAiB,GACrD,MACM8F,EAAoB9gB,MAAM4O,KAAK5R,KAAKiT,KAAK5C,QAAQmD,iBADtC,uCAERvC,IAAIzP,GAAK,IAAIqQ,EAA2BrQ,IACxCqc,OAAOrc,GAAKA,EAAE6V,MAAQ,GAAK7V,EAAE8V,OAAS,GAAK9V,EAAEyV,SAAWzV,EAAEkW,UAAYlW,EAAEmT,aAAa,aAI9F,IAAIoP,EAFiBD,EAAkB7S,IAAIzP,GAAKA,EAAE6O,SAAS2T,QAAQH,EAAQxT,UAE3C2N,GAAS,EAAI,GACzC+F,GAAaD,EAAkB5iB,OAC/B6iB,EAAY,EACLA,EAAY,IACnBA,EAAYD,EAAkB5iB,OAAS,GAIvC4iB,EAAkBC,IAClBD,EAAkBC,GAAWhN,UAErC,CAIO,OAAA6H,CAAQ5O,EAAexO,GAE1B,OADArB,OAAOkf,cAAc7d,GAAK,IAAI8d,MAAMtP,EAAO,CAAEuP,SAAS,KAC/Cvf,IACX,CAEO,EAAAoR,CAAGpB,EAA0BxB,GAOhC,OANexL,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACNzf,KAAK4iB,eAAenD,KAAYzf,KAAK4iB,eAAenD,GAAa,IACtEzf,KAAK4iB,eAAenD,GAAWrP,KAAK5B,GACpCrO,OAAOmQ,iBAAiBmP,EAAWjR,KAEhCxO,IACX,CAEO,GAAAqR,CAAIrB,EAA0BxB,GAkBjC,OAjBexL,MAAMwc,QAAQxP,GAASA,EAAQ,CAACA,IACxCjH,QAAQ0W,IACX,GAAIjR,EAAQ,CACRrO,OAAOqQ,oBAAoBiP,EAAWjR,GACtC,MAAMyV,EAAWjkB,KAAK4iB,eAAenD,IAAY5B,OAAO3b,GAAKA,IAAMsM,IAAW,GAC1EyV,EAAS/iB,OAAS,EAClBlB,KAAK4iB,eAAenD,GAAawE,SAE1BjkB,KAAK4iB,eAAenD,EAEnC,KAAO,CACH,IAAK,MAAMvd,KAAKlC,KAAK4iB,eAAenD,IAAc,GAC9Ctf,OAAOqQ,oBAAoBiP,EAAWvd,UAEnClC,KAAK4iB,eAAenD,EAC/B,IAEGzf,IACX,CAEO,IAAAkkB,CAAK1V,GACR,OAAOxO,KAAKoR,GAAG,OAAQ5C,EAC3B,CAEO,KAAA2V,CAAM3V,GACT,OAAOxO,KAAKoR,GAAG,eAAgB5C,EACnC,CAIO,MAAA2T,CAAO3T,GACV,OAAIA,EACOxO,KAAKoR,GAAG,SAAU5C,GAElBxO,KAAK4e,QAAQ,SAE5B,CAIO,MAAAwD,CAAO5T,GACV,OAAIA,EACOxO,KAAKoR,GAAG,SAAU5C,GAElBxO,KAAK4e,QAAQ,SAE5B,CAEO,QAAA9C,CAASlM,EAA8ClB,EAA8D,CAAC,GACzH,GAAsB,iBAAXkB,EAAqB,CAC5B,MAAMS,EAAUwB,EAAcsB,MAAMvD,GAEpC,OADAS,GAAS2K,SAAStM,GACX1O,IACX,CAEA,OAAI4P,aAAkBiC,GAClBjC,EAAOoL,SAAStM,GACT1O,OAGX,IAAI6R,EAAcjC,GAAQoL,SAAStM,GAC5B1O,KACX,CAIO,YAAAqiB,CAAa7T,GAChB,OAAIA,EACOxO,KAAKoR,GAAG,sBAAuB5C,GAE/BxO,KAAK4e,QAAQ,sBAE5B,CAIO,QAAAwF,CAAS5V,GACZ,OAAIA,EACOxO,KAAKoR,GAAG,WAAY5C,GAEpBxO,KAAK4e,QAAQ,WAE5B,CAEA,aAAW9F,GACP,OAAO3Y,OAAO+Y,SAAWjH,SAASsD,gBAAgBuD,SACtD,CAEA,cAAW0C,GACP,OAAOrb,OAAOgZ,SAAWlH,SAASsD,gBAAgBiG,UACtD,CAEA,SAAWnE,GACP,OAAOlX,OAAO6X,UAClB,CAEA,UAAWV,GACP,OAAOnX,OAAO+X,WAClB,CAEA,iBAAWmM,GACP,OAAOpS,SAASsD,gBAAgBsD,WACpC,CAEA,kBAAWyL,GACP,OAAOrS,SAASsD,gBAAgBqD,YACpC,EA/Oe,EAAA5H,UAAiC,KCxmD7C,MAAMuT,UAA2BhS,MACpC,WAAAiS,CACoBC,EACAC,EACAC,EACAC,EAAmB,IAEnCC,MAAMH,GALU,KAAAD,OAAAA,EACA,KAAAC,QAAAA,EACA,KAAAC,SAAAA,EACA,KAAAC,SAAAA,EAGhB5kB,KAAKwC,KAAO,oBAChB,EAIG,MAAMsiB,UAA8BP,EACvC,WAAAC,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,uBAChB,EAEG,MAAMuiB,UAAoCD,EAC7C,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,6BAChB,EAEG,MAAMwiB,UAAiCF,EAC1C,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,0BAChB,EAEG,MAAMyiB,UAAgCH,EACzC,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,yBAChB,EAEG,MAAM0iB,UAAgCJ,EACzC,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,yBAChB,EAGG,MAAM2iB,UAAsCL,EAC/C,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,+BAChB,EAGG,MAAM4iB,UAAuCN,EAChD,WAAAN,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,gCAChB,EAGG,MAAM6iB,UAA8Bd,EACvC,WAAAC,CAAYC,EAAgBC,EAAiBC,EAA6B1R,EAAO,IAC7E4R,MAAMJ,EAAQC,EAASC,EAAU1R,GACjCjT,KAAKwC,KAAO,uBAChB,EAGG,MAAM8iB,UAAyC/S,MAClD,WAAAiS,CAAYE,EAAkB,kCAC1BG,MAAMH,GACN1kB,KAAKwC,KAAO,kCAChB,EAEG,MAAM+iB,UAA2ChT,MACpD,WAAAiS,CAAYE,EAAkB,yCAC1BG,MAAMH,GACN1kB,KAAKwC,KAAO,oCAChB,EAQJ,MAAMgjB,GACqB,EAAAC,IAAM,MACN,EAAAC,KAAO,OACP,EAAAC,IAAM,MACN,EAAAC,MAAQ,QACR,EAAAC,OAAS,SACT,EAAAC,KAAO,OACP,EAAAC,QAAU,UACV,EAAAC,MAAQ,QACR,EAAAC,QAAU,UAGrC,MAAMC,EAwCK,iBAAOC,CAAW1B,GACrB,OAAOzkB,KAAKomB,kBAAkB3B,IAAW,qBAAqBA,GAClE,EAzCwB,EAAA2B,kBAA+C,CACnE,CAAC5Y,EAAY6Y,aAAc,8DAC3B,CAAC7Y,EAAY8Y,cAAe,kDAC5B,CAAC9Y,EAAY+Y,WAAY,kGACzB,CAAC/Y,EAAYgZ,WAAY,0HACzB,CAAChZ,EAAYiZ,oBAAqB,wDAClC,CAACjZ,EAAYkZ,gBAAiB,+DAC9B,CAAClZ,EAAYmZ,+BAAgC,wDAC7C,CAACnZ,EAAYoZ,iBAAkB,2CAC/B,CAACpZ,EAAYqZ,UAAW,oGACxB,CAACrZ,EAAYsZ,kBAAmB,wDAChC,CAACtZ,EAAYuZ,MAAO,iDACpB,CAACvZ,EAAYwZ,iBAAkB,+DAC/B,CAACxZ,EAAYyZ,qBAAsB,2DACnC,CAACzZ,EAAY0Z,wBAAyB,6CACtC,CAAC1Z,EAAY2Z,oBAAqB,2DAClC,CAAC3Z,EAAY4Z,qBAAsB,wDACnC,CAAC5Z,EAAY6Z,sBAAuB,4CACpC,CAAC7Z,EAAY8Z,QAAS,oCACtB,CAAC9Z,EAAY+Z,mBAAoB,qEACjC,CAAC/Z,EAAYga,kBAAmB,4DAChC,CAACha,EAAYia,uBAAwB,wCACrC,CAACja,EAAYka,mBAAoB,+EACjC,CAACla,EAAYma,iCAAkC,qCAC/C,CAACna,EAAYoa,uBAAwB,wDACrC,CAACpa,EAAYqa,aAAc,uEAC3B,CAACra,EAAYsa,qBAAsB,kEACnC,CAACta,EAAYua,iBAAkB,iDAC/B,CAACva,EAAYwa,4BAA6B,qDAC1C,CAACxa,EAAYya,iBAAkB,2DAC/B,CAACza,EAAY0a,sBAAuB,uCACpC,CAAC1a,EAAY2a,iCAAkC,sCAC/C,IAAK,kEACL,IAAK,+BACL,IAAK,kCACL,IAAK,8BACL,IAAK,yDAkBN,MAAMC,EAIT,YAAoCC,GAAA,KAAAA,UAAAA,EAH5B,KAAAC,QAAsB,KACtB,KAAAC,MAAuB,IAG/B,CAEA,aAAWC,GACP,QAASxoB,KAAKqoB,SAClB,CAEA,SAAWzX,GACP,OAAQ5Q,KAAKqoB,WAAuC,IAA1BroB,KAAKqoB,UAAU5D,MAC7C,CAEA,MAAWgE,GACP,OAAOzoB,KAAKqoB,WAAWI,KAAM,CACjC,CAEA,UAAWhE,GACP,OAAOzkB,KAAKqoB,WAAW5D,QAAU,CACrC,CAEA,cAAWiE,GACP,OAAO1oB,KAAKqoB,WAAWK,YAAc,EACzC,CAEA,WAAWC,GACP,OAAO3oB,KAAKqoB,WAAWM,SAAW,IAAIC,OAC1C,CAEO,eAAMC,GACT,OAAK7oB,KAAKqoB,UACHroB,KAAKuoB,QAAUvoB,KAAKuoB,YAAcvoB,KAAKqoB,WAAWtW,SAD7B,EAEhC,CAKQ,4BAAM+W,CAAuBC,GACjC,GAAI/oB,KAAKqoB,WAA8B,OAAjBroB,KAAKsoB,QACvB,IACI,MAAMvW,QAAa/R,KAAK6oB,YAIpB7oB,KAAKsoB,QAHJvW,EAGciX,KAAK/jB,MAAM8M,GAFXgX,CAIvB,CAAE,MAAOE,GACL,MAAM,IAAI3D,EACN,kCAAkC2D,aAAiB1W,MAAQ0W,EAAMvE,QAAU3hB,OAAOkmB,KAE1F,CAEJ,OAAOjpB,KAAKsoB,SAAWS,CAC3B,CAEO,iBAAMG,CAAqBH,EAAkB,CAAC,GACjD,aAAa/oB,KAAK8oB,uBAAuBC,EAC7C,CAEO,gBAAMI,CAAoBJ,EAAoB,IACjD,MAAMK,QAAeppB,KAAK8oB,uBAAuBC,GACjD,OAAO/lB,MAAMwc,QAAQ4J,GAAUA,EAASL,CAC5C,EAeG,MAAMM,EACT,MAAAC,CAAO9mB,EAAcgb,GACjB,OAAOA,EAAS,GAAGA,KAAUhb,KAAUA,CAC3C,CAEA,WAAA+mB,CAAY/L,EAA4BgM,GACpC,OAAOxpB,KAAKspB,OAAOvmB,OAAOymB,GAAQhM,EACtC,EAGG,MAAMiM,EACT,MAAAH,CAAO9mB,EAAcgb,GACjB,OAAOA,EAAS,GAAGA,KAAUhb,IAASA,CAC1C,CAEA,WAAA+mB,CAAY/L,EAA4BgM,GACpC,OAAOhM,EAAS,GAAGA,KAAUgM,KAAW,IAAIA,IAChD,EAGG,MAAME,EAIT,YAAmCrZ,EAAwCsZ,GAAxC,KAAAtZ,QAAAA,EAAwC,KAAAsZ,kBAAAA,EAHnE,KAAAC,WAA8E,CAAC,EAC/E,KAAAC,UAAoB,CAG5B,CAEA,UAAcnlB,GACV,MAAMolB,GAAa1oB,UAAU0oB,WAAa1oB,UAAU0oB,UAAU5oB,OAASE,UAAU0oB,UAAY,CAAC1oB,UAAU2oB,WAAWlM,OAAOmM,SAC1H,IAAItlB,EAAS1E,KAAKqQ,QAAQ0D,UAAU,uBACzB/T,KAAKqQ,QAAQ6N,QAAQ,yBAAyBnK,UAAU,uBACxD+V,EAAU,IACV,QACX,OAAOplB,EAAOqQ,SAAS,KAAOrQ,EAAOhC,MAAM,KAAK,GAAKgC,CACzD,CAEO,QAAAulB,CAAS/f,EAAcggB,GAE1B,OADAlqB,KAAK4pB,WAAW1f,GAAQggB,EACjBlqB,IACX,CAEA,aAAcmqB,GAEV,OADAnqB,KAAK8iB,aACE9iB,KAAK4pB,UAChB,CAEA,eAAc/G,GACV,OAAO7iB,KAAK6pB,QAChB,CAEU,UAAA/G,GA+DN,OA9DK9iB,KAAK6iB,cACN7iB,KAAKiqB,SAAS,OAAQ,CAAC5Z,EAASlG,KACxBA,GACA,IAAI0H,EAAwB,mBAAmB1H,MAAUA,SAAaiV,SAAS/O,KAIvFrQ,KAAKiqB,SAAS,MAAO,CAAC5Z,EAASlG,KACvBA,GACA,IAAI0H,EAAwB,gBAAgB1H,MAAUA,SAAaiV,SAAS/O,KAIpFrQ,KAAKiqB,SAAS,MAAO,CAAC5Z,EAASlG,KACvBA,GACA,IAAI0H,EAAwB,YAAY1H,sBAA0BA,SAAaiV,SAAS/O,KAIhGrQ,KAAKiqB,SAAS,SAAU,CAAC5Z,EAASlG,KAC9B,GAAIA,QAAuC,CAEvC,MAAMigB,EAAW/Z,EAAQ0D,UAAU,yBACxB1D,EAAQ6N,QAAQ,2BAA2BnK,UAAU,wBAC1DsW,EAA0Bha,EAAQ0D,UAAU,gCACvC1D,EAAQ6N,QAAQ,kCAAkCnK,UAAU,+BACjEuW,EAAiBD,EAA0BriB,OAAOoC,SAASigB,EAAyB,SAAM1d,EAI1F+B,EAAoC,IAClC0b,EAAW,CAAEpW,MAAO,WAAYoW,YAAa,CAAC,KAJ5BpiB,OAAOuiB,SAASD,IAC/BA,GAAkBA,GAAkB,GAAKA,GAAkB,GAI1C,CAAEE,sBAAuBF,EAAgBG,sBAAuBH,GAAmB,CAAC,GAGhHja,EAAQ0B,KAAO,IAAIlI,KAAK6gB,aAAa1qB,KAAK0E,OAAQgK,GAASvG,OAAOgC,EACtE,IAGJnK,KAAKiqB,SAAS,MAAO,CAAC5Z,EAASlG,KAC3B,GAAIA,EAAO,CACP,MACM7G,EADY,mBAAmBgC,KAAK6E,GACjB,IAAI/E,KAAK+E,GAAS,IAAI/E,KAAK,GAAG+E,MACvD,IAAKwgB,MAAMrnB,EAAKgE,WAAY,CACxB,MAAMa,EAASkI,EAAQ0D,UAAU,uBAAyB,mBAC1D1D,EAAQ0B,KAAO,IAAMzO,GAAM6E,OAAOA,EACtC,CACJ,IAGJnI,KAAKiqB,SAAS,OAAQ,CAAC5Z,EAASlG,KAC5B,GAAIA,EAAO,CACP,MAAM7G,EAAO,IAAI8B,KAAK+E,GACtB,IAAKwgB,MAAMrnB,EAAKgE,WAAY,CACxB,MAAMa,EAASkI,EAAQ0D,UAAU,uBAAyB,aAC1D1D,EAAQ0B,KAAO,IAAMzO,GAAM6E,OAAOA,EACtC,CACJ,IAGJnI,KAAK6pB,UAAW,GAEb7pB,IACX,CAEU,kBAAA4qB,CAAmBC,EAAsB1gB,GAC/CnK,KAAKqQ,QAAQ3F,KAAK,sBAAsBmgB,SAAoB9hB,QAAQsH,IAC5D3C,EAAoBC,UAAUF,EAAmBqd,OACjDtW,QAAQC,MAAM,8CAA8CoW,OAAmB1gB,GAEnF,MAAMD,EAAOmG,EAAQ0D,UAAU,yBAAyB9P,cACpDiG,GAAQlK,KAAKmqB,UAAUjgB,GACvBlK,KAAKmqB,UAAUjgB,GAAMmG,EAASlG,GAE9BkG,EAAQ0B,KAAOhP,OAAOoH,GAAS,KAG3C,CAEU,qBAAM4gB,CAAgBC,EAAeH,GAC3C,IAAK,IAAIrB,EAAQ,EAAGA,EAAQwB,EAAO9pB,OAAQsoB,IAAS,CAChD,MAAMyB,EAAOD,EAAOxB,GACd0B,EAAWlrB,KAAK2pB,kBAAkBJ,YAAYsB,EAAcrB,GAC9DxmB,MAAMwc,QAAQyL,SACRjrB,KAAK+qB,gBAAgBE,EAAMC,GAGjCD,GAAwB,iBAATA,QACTjrB,KAAKmrB,iBAAiBF,EAAMC,GAGtClrB,KAAK4qB,mBAAmBM,EAAUD,EACtC,CACJ,CAEU,sBAAME,CAAiBvb,EAAaib,OAAmCle,GACxEke,GACD7qB,KAAKqQ,QAAQ3F,KAAK,sBAAsB3B,QAAQvH,GAAKA,EAAE6M,SAE3D,IAAK,MAAOrB,EAAK7C,KAAUnJ,OAAOsgB,cAAc1R,GAAS,CACrD,MAAMwb,EAAQprB,KAAK2pB,kBAAkBL,OAAOtc,EAAK6d,GAC7C7nB,MAAMwc,QAAQrV,SACRnK,KAAK+qB,gBAAgB5gB,EAAOihB,GAGlCjhB,GAA0B,iBAAVA,QACVnK,KAAKmrB,iBAAiBhhB,EAAOihB,GAGvCprB,KAAK4qB,mBAAmBQ,EAAOjhB,EACnC,CACJ,CAEO,gBAAMkhB,CAAWC,GACpB,IAAKA,EAAQ9C,UACT,MAAM,IAAIjW,MAAM,8BAIpB,aADMvS,KAAKmrB,uBAAuBG,EAAQpC,eACnClpB,IACX,EAgCG,MAAMurB,EAGT,YAAoCC,EAA8B,CAC1DC,QAAS,KAAM9C,QAAS,KAAM+C,YAAa,KAAMC,SAAU,KAC3DC,MAAO,KAAMC,eAAgB,KAAM9c,KAAM,KAAM+c,WAAW,EAC1DC,UAAW,KAHiB,KAAAP,SAAAA,EAFnB,KAAAQ,iBAAoC,IAAIC,eAMzD,CAEA,WAAWR,GACP,OAAOzrB,KAAKwrB,SAASC,SAAW,EACpC,CAEA,WAAW9C,GACP,OAAO3oB,KAAKwrB,SAAS7C,SAAW,CAAC,CACrC,CAEA,eAAW+C,GACP,OAAO1rB,KAAKwrB,SAASE,aAAe,aACxC,CAEA,YAAWC,GACP,OAAO3rB,KAAKwrB,SAASG,UAAY,QACrC,CAEA,SAAWC,GACP,OAAO5rB,KAAKwrB,SAASI,OAAS,UAClC,CAEA,kBAAWC,GACP,OAAO7rB,KAAKwrB,SAASK,gBAAkB,aAC3C,CAEA,QAAW9c,GACP,OAAO/O,KAAKwrB,SAASzc,MAAQ,MACjC,CAEA,aAAW+c,GACP,OAAO9rB,KAAKwrB,SAASM,YAAa,CACtC,CAEA,aAAWC,GACP,OAAO/rB,KAAKwrB,SAASO,WAAa,EACtC,CAEA,mBAAWG,GACP,OAAOlsB,KAAKgsB,gBAChB,CAGQ,kBAAMG,CAA8DC,EAAgBC,EAAcpZ,EAA2DxD,EAAsB6c,GACnL5e,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQC,MAAM,gBAAgB2X,KAAUC,IAAQ,CAAEpZ,OAAM0V,QAAS3oB,KAAK2oB,UAK1E,MAAM6D,EAAyG,CAC3G,mBAAqBvZ,GAAS+V,KAAKyD,UAAUxZ,GAC7C,oCAAsCA,IAClC,GAAIA,aAAgByZ,WAAWC,SAAU,CACrC,IAAIC,EAAS,IAAIC,gBAIjB,OAHA5Z,EAAKlK,QAAQ,CAACoB,EAAO6C,KACjB4f,EAAOpX,OAAOxI,EAAKjK,OAAOoH,MAEvByiB,EAAOrrB,UAClB,CACI,OAAO,IAAIsrB,gBAAgB5Z,GAAM1R,YAGzC,sBAAwB0R,IACpB,GAAIA,aAAgByZ,WAAWC,SAC3B,OAAO1Z,EAEX,MAAM6Z,EAAW,IAAIJ,WAAWC,SAChC,IAAK,MAAO3f,EAAK7C,KAAUnJ,OAAOsgB,QAAQrO,GACtC6Z,EAAStX,OAAOxI,EAAKjK,OAAOoH,IAEhC,OAAO2iB,IASTC,EAAM,YAAYznB,KAAK+mB,GAAQA,EAC3B,IAAIrsB,KAAKyrB,SAAW,IAAIvnB,QAAQ,MAAO,OAAOmoB,EAAKnoB,QAAQ,MAAO,MACtEykB,EAAU,IAAIC,QAAQ5oB,KAAK2oB,SAE7BA,EAAQjS,IAAI,iBAAoD,wBAAhCiS,EAAQ5gB,IAAI,iBAE5C4gB,EAAQjY,OAAO,gBAGnB,MAAMsc,EAAKrE,EAAQ5gB,IAAI,iBAAmB,sBAC1C,GAAW,wBAAPilB,GAAgC/Z,KAAUA,aAAgByZ,WAAWC,YACjD,iBAAT1Z,GAAqBjQ,MAAMwc,QAAQvM,IAC1C,MAAM,IAAIsS,EACN,2EAKZ,MACMZ,EAAW,IADK2H,GAAgBlE,SACG6E,MAAMF,EAAK,CAChDX,SACAzD,UACA+C,YAAa1rB,KAAK0rB,YAClBzY,KAAMA,EAAQuZ,EAAiBQ,GAAMR,EAAiBQ,GAAI/Z,GAAQA,OAAQtG,EAC1E8C,OAAQA,GAAUzP,KAAKgsB,iBAAiBvc,OACxCkc,SAAU3rB,KAAK2rB,SACfC,MAAO5rB,KAAK4rB,MACZC,eAAgB7rB,KAAK6rB,eACrB9c,KAAM/O,KAAK+O,KACX+c,UAAW9rB,KAAK8rB,UAChBC,UAAW/rB,KAAK+rB,aAQpB,GALIre,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQC,MAAM,kBAAkBkQ,EAASF,UAAUE,EAAS+D,mBAAoB/D,EAASkE,aAIzFlE,EAASF,QAAU,KAAOE,EAASF,OAAS,IAAK,CACjD,MAAMyI,QAAkBvI,EAASkE,YAAYsE,MAAM,IAAM,8BACnDC,EAAezI,EAAS+D,YAAcxC,EAAiBC,WAAWxB,EAASF,SAAW,qBAAqBE,EAASF,SAI1H,OAHI/W,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQyU,MAAM,uBAAuBmE,IAAgBzI,EAAUuI,GAE3DvI,EAASF,QACb,KAAKjX,EAAY6Y,YACjB,KAAK7Y,EAAY6Z,qBACb,MAAM,IAAIlC,EAA8BR,EAASF,OAAQ2I,EAAczI,EAAUuI,GACrF,KAAK1f,EAAY8Y,aACb,MAAM,IAAIvB,EAA4BJ,EAASF,OAAQ2I,EAAczI,EAAUuI,GACnF,KAAK1f,EAAY+Y,UACb,MAAM,IAAIvB,EAAyBL,EAASF,OAAQ2I,EAAczI,EAAUuI,GAChF,KAAK1f,EAAYgZ,UACb,MAAM,IAAIvB,EAAwBN,EAASF,OAAQ2I,EAAczI,EAAUuI,GAC/E,KAAK1f,EAAYqZ,SACjB,KAAKrZ,EAAYuZ,KACb,MAAM,IAAI7B,EAAwBP,EAASF,OAAQ2I,EAAczI,EAAUuI,GAC/E,KAAK1f,EAAYka,kBACb,MAAM,IAAItC,EAA+BT,EAASF,OAAQ2I,EAAczI,EAAUuI,GACtF,QACI,MAAIvI,EAASF,OAAS,IACZ,IAAIK,EAAsBH,EAASF,OAAQ2I,EAAczI,EAAUuI,GAEnE,IAAI7H,EAAsBV,EAASF,OAAQ2I,EAAczI,EAAUuI,GAGzF,CAEA,OAAOvI,CACX,CAKO,cAAM0I,CAAShB,EAAciB,GAChC,IAAIC,EAAc,GAClB,GAAID,aAAsBZ,WAAWC,SAAU,CAC3C,IAAIC,EAAS,IAAIC,gBACjBS,EAAWvkB,QAAQ,CAACoB,EAAO6C,KACvB4f,EAAOpX,OAAOxI,EAAKjK,OAAOoH,MAE9BojB,EAAcX,EAAOrrB,UACzB,MAAW+rB,IACPC,EAAc,IAAIV,gBACd7rB,OAAOwsB,YACHxsB,OAAOsgB,QAAQgM,GAAYrc,IAAI,EAAEjE,EAAK7C,KAAW,CAAC6C,EAAKjK,OAAOoH,OAEpE5I,YAEN,MAAMksB,EAAUF,EAAc,GAAGlB,KAAQkB,IAAgBlB,EAIzD,OAHI3e,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQC,MAAM,mBAAmBgZ,KAE9BztB,KAAKmsB,aAAa3G,EAAQC,IAAKgI,EAC1C,CAEO,eAAMC,CAAUrB,EAAcpZ,GACjC,OAAOjT,KAAKmsB,aAAa3G,EAAQE,KAAM2G,EAAMpZ,EACjD,CAEO,cAAM0a,CAAStB,EAAcpZ,GAChC,OAAOjT,KAAKmsB,aAAa3G,EAAQG,IAAK0G,EAAMpZ,EAChD,CAEO,gBAAM2a,CAAWvB,EAAcpZ,GAClC,OAAOjT,KAAKmsB,aAAa3G,EAAQI,MAAOyG,EAAMpZ,EAClD,CAEO,iBAAM4a,CAAYxB,GACrB,OAAOrsB,KAAKmsB,aAAa3G,EAAQK,OAAQwG,EAC7C,CAEO,eAAMyB,CAAUzB,GACnB,OAAOrsB,KAAKmsB,aAAa3G,EAAQM,KAAMuG,EAC3C,CAEO,kBAAM0B,CAAa1B,GACtB,OAAOrsB,KAAKmsB,aAAa3G,EAAQO,QAASsG,EAC9C,CAEO,gBAAM2B,CAAW3B,GACpB,OAAOrsB,KAAKmsB,aAAa3G,EAAQQ,MAAOqG,EAC5C,CAEO,kBAAM4B,CAAa5B,GACtB,OAAOrsB,KAAKmsB,aAAa3G,EAAQS,QAASoG,EAC9C,CAEO,iBAAM6B,CAAYC,GACrB,OAAOA,EAAK/B,OAAOgC,gBAAkB5I,EAAQC,IAAMzlB,KAAKqtB,SAASc,EAAKE,OAAQF,EAAKlb,MACzEjT,KAAKmsB,aAAagC,EAAK/B,OAAOgC,cAAeD,EAAKE,OAAQF,EAAKlb,KAC7E,EC1oBG,MAAeqb,UAAmBzc,EACrB,UAAA8D,CAAWjD,EAAiB,mBACxC,OAAOmS,MAAMlP,WAAWjD,EAC5B,CAKA,UAAc0Z,GACV,OAAOpsB,KAAK+T,UAAU,WAAa,KACvC,CAEA,aAAWwa,GACP,OAAOvuB,KAAK+T,UAAU,WAAa4P,SAAS6K,SAAW7K,SAAS8K,MACpE,CAQO,iBAAMC,GACTlM,EAAazR,SAAS2S,QAC1B,CAEA,cAAWiL,GACP,MAAoD,UAA7C3uB,KAAK+T,UAAU,yBAC1B,CAEA,cAAW4a,CAAWxkB,GACdA,EACAnK,KAAK+T,UAAU,yBAA0B,MAEzC/T,KAAK+T,UAAU,yBAA0B,QAEjD,CAQA,eAAW8O,GACP,OAAO7iB,KAAK2U,aAAa,0BAC7B,CAEO,UAAAmO,GAUH,OATK9iB,KAAK6iB,cACN7iB,KAAKoR,GAAG,SAAU0O,MAAMte,IACpBA,EAAEugB,iBACFvgB,EAAE0hB,wBACIljB,KAAKkuB,gBAGfluB,KAAK+T,UAAU,0BAA2B,KAEvC/T,IACX,EAeG,MAAM4uB,UAAwBN,EACjC,UAAuBlC,GACnB,MAAO,KACX,CAGgB,iBAAM8B,GAClB,MAAMnB,EAAM/sB,KAAKuuB,UAGXM,EAAyC,CAAC,EAC1CtB,EAAcR,EAAIrqB,MAAM,KAAK,GAC/B6qB,GACAA,EAAY7qB,MAAM,KAAKqG,QAAQ+lB,IAC3B,MAAO9hB,EAAK7C,GAAS2kB,EAAMpsB,MAAM,KAC7BsK,GAAO7C,IACP0kB,EAAY7hB,GAAO+hB,mBAAmB5kB,MAMlDnK,KAAK0K,KAAK,UAAU3B,QAAQmY,IACxB,MAAM1e,EAAO0e,EAAMnN,UAAU,QAC7B,GAAIvR,EAAM,CACN,MAAM2H,EAAQ+W,EAAM/W,MAChBA,EACA0kB,EAAYrsB,GAAQwsB,mBAAmB7kB,UAEhC0kB,EAAYrsB,EAE3B,IAIJ,MAAMysB,EAAiBjuB,OAAOsgB,QAAQuN,GACjC5d,IAAI,EAAEjE,EAAK7C,KAAW,GAAG6C,KAAO7C,KAChClH,KAAK,KAEV0gB,SAASuL,KAAO,GAAGnC,EAAIrqB,MAAM,KAAK,MAAMusB,GAC5C,EAIG,MAAME,UAA6B7P,MACtC,YAA2B+I,EAA8B5I,EAAoB,oBACzEoF,MAAMpF,EAAW,CAAEF,SAAS,EAAM6P,YAAY,IADvB,KAAA/G,UAAAA,CAE3B,CAEA,YAAW1D,GACP,OAAO3kB,KAAKqoB,SAChB,EAIG,MAAMgH,UAAsBf,EACxB,SAAAgB,GACH,OAAO,IAAI/D,CACf,CAEA,aAAoBgD,GAChB,OAAOvuB,KAAK+T,UAAU,SAC1B,CAMO,SAAAwb,CAAU/gB,GAIb,OAHAxO,KAAKoR,GAAG,mBAAoB0O,MAAMte,UACxBgN,EAAOhN,KAEVxB,IACX,CAEU,qBAAAwvB,CAAsB7K,GAC5B3kB,KAAK4e,QAAQ,mBAAoB,IAAIuQ,EAAqBxK,IACtDjX,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQyU,MAAM,sBAAuBtE,EAE7C,CAEO,YAAA8K,CAAajhB,GAIhB,OAHAxO,KAAKoR,GAAG,sBAAuB0O,MAAMte,UAC3BgN,EAAOhN,KAEVxB,IACX,CAEU,wBAAA0vB,CAAyB/K,GAC/B3kB,KAAK4e,QAAQ,sBAAuB,IAAIuQ,EAAqBxK,EAAU,wBACnEjX,EAAoBC,UAAUF,EAAmB8e,MACjD/X,QAAQyU,MAAM,iBAAkBtE,EAExC,CAEA,UAAuByH,GACnB,OAAOpsB,KAAK+T,UAAU,WAAa,MACvC,CAEO,QAAA+Y,GACH,MAAM6C,EAA+B3vB,KAAKqQ,QACpCyc,EAAW,IAAIH,SAASgD,GAgB9B,OAdA3vB,KAAK0K,KAAK,oDAAoD3B,QAAQmY,IAClE,MAAM0O,EAAgB1O,EAAM/W,MAC5B,GAAIylB,EAAe,CACf,MAAMtsB,EAAO,IAAI8B,KAAKwqB,GACjBjF,MAAMrnB,EAAKgE,YACZwlB,EAAS3lB,IAAI+Z,EAAMnN,UAAU,QAAU,IAAMzQ,GAAM6E,OAAO,qBAElE,IAGAuF,EAAoBC,UAAUF,EAAmBkf,WACjDnY,QAAQC,MAAM,YAAazR,MAAM4O,KAAKkb,EAASxL,YAG5CwL,CACX,CAEgB,iBAAMoB,GAClB,MAAMpB,EAAW9sB,KAAK8sB,iBAChB9sB,KAAK6vB,iBAAiB/C,EAChC,CAEU,sBAAM+C,CAAiB/C,GAC7B,MAAMgD,EAAM9vB,KAAKsvB,YAEjB,IAOI,aANuBQ,EAAI5B,YAAY,CACnC9B,OAAQpsB,KAAKosB,OACbiC,OAAQruB,KAAKuuB,UACbtb,KAAM6Z,GAId,CAAE,MAAO7D,GAKL,MAJIA,aAAiB1E,IACjBvkB,KAAKwvB,sBAAsBvG,EAAMtE,UACjC3kB,KAAK0vB,yBAAyBzG,EAAMtE,WAElCsE,CACV,CACJ,EAOG,MAAM8G,UAA4BV,EAErC,aAAWW,GACP,OAAOhwB,KAAK+T,UAAU,gCAA6BpH,CACvD,CAEA,qBAAcsjB,GACV,MAAkD,UAA3CjwB,KAAK+T,UAAU,uBAC1B,CAEA,gBAAcmc,GACV,QAASlwB,KAAKgwB,SAClB,CAEA,aAAoBzB,GAChB,MAAMF,EAASruB,KAAK+T,UAAU,UACxBoc,EAAa9B,EAAOnqB,QAAQ,OAAQ,IAE1C,OAAKlE,KAAKgwB,UAIH,GAAGG,KAAcnB,mBAAmBhvB,KAAKgwB,aAHrC3B,EAAO+B,SAAS,KAAO/B,EAAS,GAAG8B,IAIlD,CAEA,UAAuB/D,GACnB,OAAIpsB,KAAK2U,aAAa,WAA0C,KAA7B3U,KAAK+T,UAAU,UACvC/T,KAAK+T,UAAU,UAGnB/T,KAAKkwB,aAAe,MAAQ,MACvC,CAKU,YAAAG,CAAa1L,GACnB,GAAI3kB,KAAKiwB,mBAAqBtL,EAASF,SAAWjX,EAAY8iB,QAAS,CACnE,GAAItwB,KAAKkwB,aAIL,YAHIxiB,EAAoBC,UAAUF,EAAmB8iB,WACjD/b,QAAQgc,KAAK,+FAKrB,MAAM7M,EAAWgB,EAASgE,QAAQ5gB,IAAI,YACtC,IAAK4b,EAAU,OAEf,MAAM8M,EAAa1D,IACf,MAAMnrB,EAAImrB,EAAI7oB,QAAQ,UAAW,IACjC,OAAOtC,EAAEwuB,SAAS,KAAOxuB,EAAE6F,MAAM,GAAI,GAAK7F,GAGxC8uB,EAAU7uB,IACZ,IAAM,OAAO,IAAI8uB,IAAI9uB,EAAG8hB,GAAU6K,QAAU,CAAE,MAAQ,OAAO3sB,CAAG,GAG9D+uB,EAAaH,EAAUC,EAAO1wB,KAAK+T,UAAU,YAC7C8c,EAAUJ,EAAUC,EAAO/M,IAC3BmN,EAAcF,EAAWluB,MAAM,KAC/BquB,EAAgBF,EAAQnuB,MAAM,KAEpC,KADiBquB,EAAc7vB,QAAU4vB,EAAY5vB,QAAU4vB,EAAYE,MAAM,CAACptB,EAAGjC,IAAMiC,IAAMmtB,EAAcpvB,KAE3G,MAAM,IAAI4Q,MAAM,0DAA0Dqe,iBAA0BC,MAGxG,MAAMI,EAAaF,EAActpB,MAAMqpB,EAAY5vB,QAAQ2c,OAAOmM,SAClE,GAA0B,IAAtBiH,EAAW/vB,SAAgB+vB,EAAW,GAEnC,CACH,MAAMC,EAAM,mFACFN,iBAA0BC,eAAqBI,EAAWhuB,KAAK,WACzE,MAAM,IAAIsP,MAAM2e,EACpB,CALIlxB,KAAK+T,UAAU,yBAA0Bkd,EAAW,GAM5D,CACJ,CAEmB,sBAAMpB,CAAiB/C,GACtC,MAAMnI,QAAiBE,MAAMgL,iBAAiB/C,GAO9C,OAJI9sB,KAAKiwB,mBAAqBtL,EAASF,SAAWjX,EAAY8iB,SAC1DtwB,KAAKqwB,aAAa1L,GAGfA,CACX,EAOG,MAAMwM,UAAgCpB,EAA7C,c,oBACY,KAAAqB,SAA0E,CAAC,CA4JvF,CA1JW,MAAAC,CAAOnnB,EAAconB,GAExB,OADAtxB,KAAKoxB,SAASlnB,GAAQonB,EACftxB,IACX,CAEgB,UAAA8iB,GAgCZ,OA/BK9iB,KAAK6iB,cACNgC,MAAM/B,aAEN9iB,KAAKqxB,OAAO,iBAAkB,CAACnQ,EAAO/W,KAClC,MACM7G,EADY,mBAAmBgC,KAAK6E,GACjB,IAAI/E,KAAK+E,GAAS,IAAI/E,KAAK,GAAG+E,MAClDwgB,MAAMrnB,EAAKgE,WAGZ4Z,EAAM/W,MAAQ,GAFd+W,EAAM/W,MAAQ,IAAM7G,GAAM6E,OAAO,sBAMzCnI,KAAKqxB,OAAO,WAAY,CAACnQ,EAAO/W,KAC5B+W,EAAMnN,UAAU,UAAW,MACvB5J,GACA+W,EAAMnN,UAAU,UAAW,MAInC/T,KAAKqxB,OAAO,QAAS,CAACnQ,EAAO/W,KACzB+W,EAAMnN,UAAU,UAAW,MACvBmN,EAAM/W,QAAUA,GAChB+W,EAAMnN,UAAU,UAAW,MAInCyO,EAAazR,SAASoT,MAAMrE,gBAClB9f,KAAKuxB,eAGZvxB,IACX,CAMgB,iBAAM0uB,SACZ1uB,KAAKuxB,WACf,CAEU,aAAAC,GACN,OAAOxxB,KAAKuuB,SAChB,CAEU,iBAAA5E,GACN,OAAO,IAAIN,CACf,CAEO,QAAAY,GACH,OAAO,IAAIP,EAAmB1pB,KAAMA,KAAK2pB,oBAC7C,CAEU,OAAA8H,GACN,OAAOzxB,KAAKkwB,YAChB,CAEU,eAAMqB,GACZ,IAAKvxB,KAAKyxB,UACN,OAAO,IAAIrJ,EAGf,MAAM0H,EAAM9vB,KAAKsvB,YACjB,IACI,MAAM3K,QAAiBmL,EAAIzC,SAASrtB,KAAKwxB,iBAEzC,aADMxxB,KAAK0xB,UAAU/M,GACdA,CACX,CAAE,MAAOsE,GAIL,GAHIA,aAAiB1E,GACjBvkB,KAAKwvB,sBAAsBvG,EAAMtE,UAEjCsE,aAAiBhE,EACjB,OAAOgE,EAAMtE,SAEjB,MAAMsE,CACV,CACJ,CAEU,kBAAA0I,CAAmBvG,EAAejhB,GACxCnK,KAAK0K,KAAK,eAAe0gB,0FACAA,yEACFA,yDAA6DriB,QAAQmY,IACpFxT,EAAoBC,UAAUF,EAAmBmkB,OACjDpd,QAAQC,MAAM,uBAAuB2W,kBAAuBjhB,GAEhE,MAAMD,EAAOgX,EAAMnN,UAAU,SAAS9P,cAClCiG,GAAQlK,KAAKoxB,SAASlnB,GACtBlK,KAAKoxB,SAASlnB,GAAMgX,EAAO/W,GAE3B+W,EAAM/W,MAAQpH,OAAOoH,GAAS,KAG1C,CAEU,oBAAM0nB,CAAelI,EAA6CqB,EAAeH,GACvF,IAAK,IAAIrB,EAAQ,EAAGA,EAAQwB,EAAO9pB,OAAQsoB,IAAS,CAChD,MAAMyB,EAAOD,EAAOxB,GACd0B,EAAWvB,EAAkBJ,YAAYsB,EAAcrB,GACzDxmB,MAAMwc,QAAQyL,SACRjrB,KAAK6xB,eAAelI,EAAmBsB,EAAMC,GAGnDD,GAAwB,iBAATA,QACTjrB,KAAK8xB,gBAAgBnI,EAAmBsB,EAAMC,GAGxDlrB,KAAK2xB,mBAAmBzG,EAAUD,EACtC,CACJ,CAEU,qBAAM6G,CAAgBnI,EAA6C/Z,EAAaib,OAAmCle,GACzH,IAAK,MAAOK,EAAK7C,KAAUnJ,OAAOsgB,QAAQ1R,GAAS,CAC/C,GAAI5C,EAAIojB,SAAS,MACb,SAGJ,MAAMhF,EAAQzB,EAAkBL,OAAOtc,EAAK6d,GACxC7nB,MAAMwc,QAAQrV,SACRnK,KAAK6xB,eAAelI,EAAmBxf,EAAOihB,GAGpDjhB,GAA0B,iBAAVA,QACVnK,KAAK8xB,gBAAgBnI,EAAmBxf,EAAOihB,GAIzDprB,KAAK2xB,mBAAmBvG,EAAOjhB,EACnC,CACJ,CAEU,eAAMunB,CAAU/M,GAClBA,EAAS8D,IAAM9D,EAAS6D,kBAClBxoB,KAAK8xB,gBAAgB9xB,KAAK2pB,0BAA2BhF,EAASuE,qBAC9DlpB,KAAKiqB,WAAWoB,WAAW1G,IAIrC3kB,KAAK0K,KAAK,YAAY3B,QAAQvH,GAAKA,EAAE0f,QACzC,CAEmB,sBAAM2O,CAAiB/C,GACtC,MAAMnI,QAAiBE,MAAMgL,iBAAiB/C,GAI9C,OAHInI,EAAS8D,UACHzoB,KAAK0xB,UAAU/M,GAElBA,CACX,E,wCC5dJ,WAAa,KACb,WAAa,KAGN,MAAMoN,EACF,eAAOpO,GACV,OAAO,IAAIoO,CACf,CAIA,YAAmBhF,EAAqB,MACpC/sB,KAAKgyB,KAAO,IAAIrB,IAAI5D,GAAQpJ,SAAS6K,SAAW7K,SAAS8K,OAAS9K,SAASsO,OAC/E,CAEA,OAAWlF,GACP,OAAO/sB,KAAKgyB,KAAKxD,SAAWxuB,KAAKgyB,KAAKvD,MAC1C,CAEA,QAAWpC,GACP,OAAOrsB,KAAKgyB,KAAKxD,QACrB,CAEA,YAAW0D,GACP,OAAOlyB,KAAKgyB,KAAKxD,SAAS9rB,MAAM,KAAKmb,OAAOjc,GAAKA,EAAEV,OAAS,EAChE,CAEA,SAAWixB,GACP,OAAOnyB,KAAKgyB,KAAKvD,OAAOvqB,QAAQ,MAAO,GAC3C,CAEA,cAAWopB,GACP,MAAM8E,EAA+B,CAAC,EAEtC,OADApyB,KAAKgyB,KAAKK,aAAatpB,QAAQ,CAACoB,EAAO6C,KAAUolB,EAAKplB,GAAO7C,IACtDioB,CACX,CAEO,QAAAzG,GACHxrB,OAAOwjB,SAASuL,KAAOlvB,KAAK+sB,GAChC,CAEO,OAAA7oB,GACH/D,OAAOwjB,SAASzf,QAAQlE,KAAK+sB,IACjC,CAEO,YAAAuF,CAAaC,EAAa,KAAMC,EAAgB,IACnDryB,OAAOsyB,QAAQH,aAAaC,EAAOC,EAAOxyB,KAAK+sB,IACnD,EAOG,MAAM2F,EAAb,cA2BY,KAAAC,OAAwC,CAAC,CA8ErD,CAtGW,UAAOxrB,CAA2D+C,GACrE,GAAIlK,KAAKgR,UACL,MAAM,IAAIuB,MAAM,0CAWpB,OATAvS,KAAKgR,UAAY,IAAI9G,EACrBsY,EAAazR,SAASmT,KAAKpE,UACnBpS,EAAoBC,UAAUF,EAAmBmlB,OACjDpe,QAAQC,MAAM,oCAElB+N,EAAazR,SAAS+R,mBAChB4P,EAAqB1hB,UAAW6hB,kBACtCrQ,EAAazR,SAAS6N,QAAQ,kBAE3B5e,KAAKgR,SAChB,CAEO,UAAOjJ,GACV,KAAM/H,KAAKgR,qBAAqB0hB,GAC5B,MAAM,IAAIngB,MAAM,uFAEpB,OAAOvS,KAAKgR,SAChB,CAKU,OAAA8hB,CAA2C3E,GAQjD,OAPKA,EAAKva,IACNua,EAAKxY,aAET3V,KAAK2yB,OAAOxE,EAAKva,IAAOua,EACxBA,EAAKvZ,QAAQ,YACF5U,KAAK2yB,OAAOxE,EAAKva,MAErBua,EAAKrL,YAChB,CAEU,OAAAiQ,CAA2Cnf,EAAY1J,GAC7D,MAAMikB,EAAOnuB,KAAK2yB,OAAO/e,GACzB,GAAKua,EAAL,CAEA,GAAIjkB,KAAUikB,aAAgBjkB,GAC1B,MAAM,IAAIqI,MAAM,SAASqB,wCAG7B,OAAOua,CANoB,CAO/B,CAEU,KAAA6E,GACN,OAAOhyB,OAAOgqB,OAAOhrB,KAAK2yB,OAC9B,CAEU,kBAAMM,GACZ,IAAK,MAAMhxB,KAAKjC,KAAKgzB,QAAS,CAC1B,GAAIxQ,EAAazR,SAAS0S,UACtB,MAEAxhB,EAAE0sB,kBACI1sB,EAAEysB,aAEhB,CACJ,CAEQ,oBAAAwE,CAAqB/oB,GACzB,OAAO,IAAMA,GAAOvD,YAAcuD,EAAMimB,SAAS,MAAQ,mBAAmB9qB,KAAK6E,GACrF,CAEQ,0BAAAgpB,GACJ3Q,EAAazR,SAASkC,KAAKvI,KAAK,uDAAuD3B,QAAQvH,IAC3F,GAAI,IAAMA,EAAEuQ,MAAMnL,UAAW,CACzB,MAAMwsB,EAAW5xB,EAAEuS,UAAU,yBAClBvS,EAAE0c,QAAQ,2BAA2BnK,UAAU,wBACpD5L,EAAiB3G,EAAEuS,UAAU,uBAAyB,mBACtDsf,EAAKrzB,KAAKkzB,qBAAqB1xB,EAAEuQ,MAAQ,IAAMvQ,EAAEuQ,MAAQ,IAAM,GAAG,IAAMvQ,EAAEuQ,MAAM5J,OAAO,2BACvF6Z,EAA6C,UAAxCxgB,EAAEuS,UAAU,wBAAsCsf,EAAKA,EAAGzuB,MACrEpD,EAAEuQ,KAAQqhB,GAAgC,KAApBA,EAAS/c,OAAiB2L,EAAG3X,GAAG+oB,GAAUjrB,OAAOA,GAAU6Z,EAAG7Z,OAAOA,GAC3F3G,EAAEuS,UAAU,wBAAyB,GACzC,GAER,CAGU,qBAAM8e,GACZ7yB,KAAKmzB,6BAEL3Q,EAAazR,SAASqT,SAAStE,MAAMte,IAC7BA,EAAE8xB,kBACItzB,KAAKizB,eACPzQ,EAAazR,SAAS0S,WACtBjiB,EAAE+xB,6BAIlB,CAEA,QAAWtgB,GACP,OAAOuP,EAAazR,SAASkC,IACjC,CAEA,OAAc8Z,GACV,OAAO,IAAIgF,CACf,EAvGe,EAAA/gB,UAAyC,I","sources":["webpack://Cotomy/webpack/universalModuleDefinition","webpack://Cotomy/./node_modules/cuid/lib/getRandomValue.browser.js","webpack://Cotomy/./node_modules/cuid/lib/fingerprint.browser.js","webpack://Cotomy/./node_modules/dayjs/dayjs.min.js","webpack://Cotomy/./node_modules/cuid/lib/pad.js","webpack://Cotomy/./node_modules/dayjs/plugin/timezone.js","webpack://Cotomy/./node_modules/cuid/index.js","webpack://Cotomy/./node_modules/dayjs/plugin/utc.js","webpack://Cotomy/webpack/bootstrap","webpack://Cotomy/webpack/runtime/compat get default export","webpack://Cotomy/webpack/runtime/define property getters","webpack://Cotomy/webpack/runtime/hasOwnProperty shorthand","webpack://Cotomy/webpack/runtime/make namespace object","webpack://Cotomy/./node_modules/http-status-codes/build/es/status-codes.js","webpack://Cotomy/./src/debug.ts","webpack://Cotomy/./src/view.ts","webpack://Cotomy/./src/api.ts","webpack://Cotomy/./src/form.ts","webpack://Cotomy/./src/page.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Cotomy\"] = factory();\n\telse\n\t\troot[\"Cotomy\"] = factory();\n})(this, () => {\nreturn ","\nvar getRandomValue;\n\nvar crypto = typeof window !== 'undefined' &&\n (window.crypto || window.msCrypto) ||\n typeof self !== 'undefined' &&\n self.crypto;\n\nif (crypto) {\n var lim = Math.pow(2, 32) - 1;\n getRandomValue = function () {\n return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);\n };\n} else {\n getRandomValue = Math.random;\n}\n\nmodule.exports = getRandomValue;\n","var pad = require('./pad.js');\n\nvar env = typeof window === 'object' ? window : self;\nvar globalCount = Object.keys(env).length;\nvar mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;\nvar clientId = pad((mimeTypesLength +\n navigator.userAgent.length).toString(36) +\n globalCount.toString(36), 4);\n\nmodule.exports = function fingerprint () {\n return clientId;\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","module.exports = function pad (num, size) {\n var s = '000000000' + num;\n return s.substr(s.length - size);\n};\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_timezone=e()}(this,(function(){\"use strict\";var t={year:0,month:1,day:2,hour:3,minute:4,second:5},e={};return function(n,i,o){var r,a=function(t,n,i){void 0===i&&(i={});var o=new Date(t),r=function(t,n){void 0===n&&(n={});var i=n.timeZoneName||\"short\",o=t+\"|\"+i,r=e[o];return r||(r=new Intl.DateTimeFormat(\"en-US\",{hour12:!1,timeZone:t,year:\"numeric\",month:\"2-digit\",day:\"2-digit\",hour:\"2-digit\",minute:\"2-digit\",second:\"2-digit\",timeZoneName:i}),e[o]=r),r}(n,i);return r.formatToParts(o)},u=function(e,n){for(var i=a(e,n),r=[],u=0;u<i.length;u+=1){var f=i[u],s=f.type,m=f.value,c=t[s];c>=0&&(r[c]=parseInt(m,10))}var d=r[3],l=24===d?0:d,h=r[0]+\"-\"+r[1]+\"-\"+r[2]+\" \"+l+\":\"+r[4]+\":\"+r[5]+\":000\",v=+e;return(o.utc(h).valueOf()-(v-=v%1e3))/6e4},f=i.prototype;f.tz=function(t,e){void 0===t&&(t=r);var n,i=this.utcOffset(),a=this.toDate(),u=a.toLocaleString(\"en-US\",{timeZone:t}),f=Math.round((a-new Date(u))/1e3/60),s=15*-Math.round(a.getTimezoneOffset()/15)-f;if(!Number(s))n=this.utcOffset(0,e);else if(n=o(u,{locale:this.$L}).$set(\"millisecond\",this.$ms).utcOffset(s,!0),e){var m=n.utcOffset();n=n.add(i-m,\"minute\")}return n.$x.$timezone=t,n},f.offsetName=function(t){var e=this.$x.$timezone||o.tz.guess(),n=a(this.valueOf(),e,{timeZoneName:t}).find((function(t){return\"timezonename\"===t.type.toLowerCase()}));return n&&n.value};var s=f.startOf;f.startOf=function(t,e){if(!this.$x||!this.$x.$timezone)return s.call(this,t,e);var n=o(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\"),{locale:this.$L});return s.call(n,t,e).tz(this.$x.$timezone,!0)},o.tz=function(t,e,n){var i=n&&e,a=n||e||r,f=u(+o(),a);if(\"string\"!=typeof t)return o(t).tz(a);var s=function(t,e,n){var i=t-60*e*1e3,o=u(i,n);if(e===o)return[i,e];var r=u(i-=60*(o-e)*1e3,n);return o===r?[i,o]:[t-60*Math.min(o,r)*1e3,Math.max(o,r)]}(o.utc(t,i).valueOf(),f,a),m=s[0],c=s[1],d=o(m).utcOffset(c);return d.$x.$timezone=a,d},o.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},o.tz.setDefault=function(t){r=t}}}));","/**\n * cuid.js\n * Collision-resistant UID generator for browsers and node.\n * Sequential for fast db lookups and recency sorting.\n * Safe for element IDs and server-side lookups.\n *\n * Extracted from CLCTR\n *\n * Copyright (c) Eric Elliott 2012\n * MIT License\n */\n\nvar fingerprint = require('./lib/fingerprint.js');\nvar pad = require('./lib/pad.js');\nvar getRandomValue = require('./lib/getRandomValue.js');\n\nvar c = 0,\n blockSize = 4,\n base = 36,\n discreteValues = Math.pow(base, blockSize);\n\nfunction randomBlock () {\n return pad((getRandomValue() *\n discreteValues << 0)\n .toString(base), blockSize);\n}\n\nfunction safeCounter () {\n c = c < discreteValues ? c : 0;\n c++; // this is not subliminal\n return c - 1;\n}\n\nfunction cuid () {\n // Starting with a lowercase letter makes\n // it HTML element ID friendly.\n var letter = 'c', // hard-coded allows for sequential access\n\n // timestamp\n // warning: this exposes the exact date and time\n // that the uid was created.\n timestamp = (new Date().getTime()).toString(base),\n\n // Prevent same-machine collisions.\n counter = pad(safeCounter().toString(base), blockSize),\n\n // A few chars to generate distinct ids for different\n // clients (so different computers are far less\n // likely to generate the same id)\n print = fingerprint(),\n\n // Grab some more chars from Math.random()\n random = randomBlock() + randomBlock();\n\n return letter + timestamp + counter + print + random;\n}\n\ncuid.slug = function slug () {\n var date = new Date().getTime().toString(36),\n counter = safeCounter().toString(36).slice(-4),\n print = fingerprint().slice(0, 1) +\n fingerprint().slice(-1),\n random = randomBlock().slice(-2);\n\n return date.slice(-2) +\n counter + print + random;\n};\n\ncuid.isCuid = function isCuid (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n if (stringToCheck.startsWith('c')) return true;\n return false;\n};\n\ncuid.isSlug = function isSlug (stringToCheck) {\n if (typeof stringToCheck !== 'string') return false;\n var stringLength = stringToCheck.length;\n if (stringLength >= 7 && stringLength <= 10) return true;\n return false;\n};\n\ncuid.fingerprint = fingerprint;\n\nmodule.exports = cuid;\n","!function(t,i){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=i():\"function\"==typeof define&&define.amd?define(i):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs_plugin_utc=i()}(this,(function(){\"use strict\";var t=\"minute\",i=/[+-]\\d\\d(?::?\\d\\d)?/g,e=/([+-]|\\d\\d)/g;return function(s,f,n){var u=f.prototype;n.utc=function(t){var i={date:t,utc:!0,args:arguments};return new f(i)},u.utc=function(i){var e=n(this.toDate(),{locale:this.$L,utc:!0});return i?e.add(this.utcOffset(),t):e},u.local=function(){return n(this.toDate(),{locale:this.$L,utc:!1})};var o=u.parse;u.parse=function(t){t.utc&&(this.$u=!0),this.$utils().u(t.$offset)||(this.$offset=t.$offset),o.call(this,t)};var r=u.init;u.init=function(){if(this.$u){var t=this.$d;this.$y=t.getUTCFullYear(),this.$M=t.getUTCMonth(),this.$D=t.getUTCDate(),this.$W=t.getUTCDay(),this.$H=t.getUTCHours(),this.$m=t.getUTCMinutes(),this.$s=t.getUTCSeconds(),this.$ms=t.getUTCMilliseconds()}else r.call(this)};var a=u.utcOffset;u.utcOffset=function(s,f){var n=this.$utils().u;if(n(s))return this.$u?0:n(this.$offset)?a.call(this):this.$offset;if(\"string\"==typeof s&&(s=function(t){void 0===t&&(t=\"\");var s=t.match(i);if(!s)return null;var f=(\"\"+s[0]).match(e)||[\"-\",0,0],n=f[0],u=60*+f[1]+ +f[2];return 0===u?0:\"+\"===n?u:-u}(s),null===s))return this;var u=Math.abs(s)<=16?60*s:s,o=this;if(f)return o.$offset=u,o.$u=0===s,o;if(0!==s){var r=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();(o=this.local().add(u+r,t)).$offset=u,o.$x.$localOffset=r}else o=this.utc();return o};var h=u.format;u.format=function(t){var i=t||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return h.call(this,i)},u.valueOf=function(){var t=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*t},u.isUTC=function(){return!!this.$u},u.toISOString=function(){return this.toDate().toISOString()},u.toString=function(){return this.toDate().toUTCString()};var l=u.toDate;u.toDate=function(t){return\"s\"===t&&this.$offset?n(this.format(\"YYYY-MM-DD HH:mm:ss:SSS\")).toDate():l.call(this)};var c=u.diff;u.diff=function(t,i,e){if(t&&this.$u===t.$u)return c.call(this,t,i,e);var s=this.local(),f=n(t).local();return c.call(s,f,i,e)}}}));","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// Generated file. Do not edit\nexport var StatusCodes;\n(function (StatusCodes) {\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.1\n *\n * This interim response indicates that everything so far is OK and that the client should continue with the request or ignore it if it is already finished.\n */\n StatusCodes[StatusCodes[\"CONTINUE\"] = 100] = \"CONTINUE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.2.2\n *\n * This code is sent in response to an Upgrade request header by the client, and indicates the protocol the server is switching too.\n */\n StatusCodes[StatusCodes[\"SWITCHING_PROTOCOLS\"] = 101] = \"SWITCHING_PROTOCOLS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.1\n *\n * This code indicates that the server has received and is processing the request, but no response is available yet.\n */\n StatusCodes[StatusCodes[\"PROCESSING\"] = 102] = \"PROCESSING\";\n /**\n * Official Documentation @ https://www.rfc-editor.org/rfc/rfc8297#page-3\n *\n * This code indicates to the client that the server is likely to send a final response with the header fields included in the informational response.\n */\n StatusCodes[StatusCodes[\"EARLY_HINTS\"] = 103] = \"EARLY_HINTS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.1\n *\n * The request has succeeded. The meaning of a success varies depending on the HTTP method:\n * GET: The resource has been fetched and is transmitted in the message body.\n * HEAD: The entity headers are in the message body.\n * POST: The resource describing the result of the action is transmitted in the message body.\n * TRACE: The message body contains the request message as received by the server\n */\n StatusCodes[StatusCodes[\"OK\"] = 200] = \"OK\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.2\n *\n * The request has succeeded and a new resource has been created as a result of it. This is typically the response sent after a PUT request.\n */\n StatusCodes[StatusCodes[\"CREATED\"] = 201] = \"CREATED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.3\n *\n * The request has been received but not yet acted upon. It is non-committal, meaning that there is no way in HTTP to later send an asynchronous response indicating the outcome of processing the request. It is intended for cases where another process or server handles the request, or for batch processing.\n */\n StatusCodes[StatusCodes[\"ACCEPTED\"] = 202] = \"ACCEPTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.4\n *\n * This response code means returned meta-information set is not exact set as available from the origin server, but collected from a local or a third party copy. Except this condition, 200 OK response should be preferred instead of this response.\n */\n StatusCodes[StatusCodes[\"NON_AUTHORITATIVE_INFORMATION\"] = 203] = \"NON_AUTHORITATIVE_INFORMATION\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.5\n *\n * There is no content to send for this request, but the headers may be useful. The user-agent may update its cached headers for this resource with the new ones.\n */\n StatusCodes[StatusCodes[\"NO_CONTENT\"] = 204] = \"NO_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.3.6\n *\n * This response code is sent after accomplishing request to tell user agent reset document view which sent this request.\n */\n StatusCodes[StatusCodes[\"RESET_CONTENT\"] = 205] = \"RESET_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.1\n *\n * This response code is used because of range header sent by the client to separate download into multiple streams.\n */\n StatusCodes[StatusCodes[\"PARTIAL_CONTENT\"] = 206] = \"PARTIAL_CONTENT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.2\n *\n * A Multi-Status response conveys information about multiple resources in situations where multiple status codes might be appropriate.\n */\n StatusCodes[StatusCodes[\"MULTI_STATUS\"] = 207] = \"MULTI_STATUS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.1\n *\n * The request has more than one possible responses. User-agent or user should choose one of them. There is no standardized way to choose one of the responses.\n */\n StatusCodes[StatusCodes[\"MULTIPLE_CHOICES\"] = 300] = \"MULTIPLE_CHOICES\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.2\n *\n * This response code means that URI of requested resource has been changed. Probably, new URI would be given in the response.\n */\n StatusCodes[StatusCodes[\"MOVED_PERMANENTLY\"] = 301] = \"MOVED_PERMANENTLY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.3\n *\n * This response code means that URI of requested resource has been changed temporarily. New changes in the URI might be made in the future. Therefore, this same URI should be used by the client in future requests.\n */\n StatusCodes[StatusCodes[\"MOVED_TEMPORARILY\"] = 302] = \"MOVED_TEMPORARILY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.4\n *\n * Server sent this response to directing client to get requested resource to another URI with an GET request.\n */\n StatusCodes[StatusCodes[\"SEE_OTHER\"] = 303] = \"SEE_OTHER\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.1\n *\n * This is used for caching purposes. It is telling to client that response has not been modified. So, client can continue to use same cached version of response.\n */\n StatusCodes[StatusCodes[\"NOT_MODIFIED\"] = 304] = \"NOT_MODIFIED\";\n /**\n * @deprecated\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.6\n *\n * Was defined in a previous version of the HTTP specification to indicate that a requested response must be accessed by a proxy. It has been deprecated due to security concerns regarding in-band configuration of a proxy.\n */\n StatusCodes[StatusCodes[\"USE_PROXY\"] = 305] = \"USE_PROXY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.4.7\n *\n * Server sent this response to directing client to get requested resource to another URI with same method that used prior request. This has the same semantic than the 302 Found HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\n StatusCodes[StatusCodes[\"TEMPORARY_REDIRECT\"] = 307] = \"TEMPORARY_REDIRECT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7538#section-3\n *\n * This means that the resource is now permanently located at another URI, specified by the Location: HTTP Response header. This has the same semantics as the 301 Moved Permanently HTTP response code, with the exception that the user agent must not change the HTTP method used: if a POST was used in the first request, a POST must be used in the second request.\n */\n StatusCodes[StatusCodes[\"PERMANENT_REDIRECT\"] = 308] = \"PERMANENT_REDIRECT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.1\n *\n * This response means that server could not understand the request due to invalid syntax.\n */\n StatusCodes[StatusCodes[\"BAD_REQUEST\"] = 400] = \"BAD_REQUEST\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.1\n *\n * Although the HTTP standard specifies \"unauthorized\", semantically this response means \"unauthenticated\". That is, the client must authenticate itself to get the requested response.\n */\n StatusCodes[StatusCodes[\"UNAUTHORIZED\"] = 401] = \"UNAUTHORIZED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.2\n *\n * This response code is reserved for future use. Initial aim for creating this code was using it for digital payment systems however this is not used currently.\n */\n StatusCodes[StatusCodes[\"PAYMENT_REQUIRED\"] = 402] = \"PAYMENT_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.3\n *\n * The client does not have access rights to the content, i.e. they are unauthorized, so server is rejecting to give proper response. Unlike 401, the client's identity is known to the server.\n */\n StatusCodes[StatusCodes[\"FORBIDDEN\"] = 403] = \"FORBIDDEN\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.4\n *\n * The server can not find requested resource. In the browser, this means the URL is not recognized. In an API, this can also mean that the endpoint is valid but the resource itself does not exist. Servers may also send this response instead of 403 to hide the existence of a resource from an unauthorized client. This response code is probably the most famous one due to its frequent occurence on the web.\n */\n StatusCodes[StatusCodes[\"NOT_FOUND\"] = 404] = \"NOT_FOUND\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.5\n *\n * The request method is known by the server but has been disabled and cannot be used. For example, an API may forbid DELETE-ing a resource. The two mandatory methods, GET and HEAD, must never be disabled and should not return this error code.\n */\n StatusCodes[StatusCodes[\"METHOD_NOT_ALLOWED\"] = 405] = \"METHOD_NOT_ALLOWED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.6\n *\n * This response is sent when the web server, after performing server-driven content negotiation, doesn't find any content following the criteria given by the user agent.\n */\n StatusCodes[StatusCodes[\"NOT_ACCEPTABLE\"] = 406] = \"NOT_ACCEPTABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7235#section-3.2\n *\n * This is similar to 401 but authentication is needed to be done by a proxy.\n */\n StatusCodes[StatusCodes[\"PROXY_AUTHENTICATION_REQUIRED\"] = 407] = \"PROXY_AUTHENTICATION_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.7\n *\n * This response is sent on an idle connection by some servers, even without any previous request by the client. It means that the server would like to shut down this unused connection. This response is used much more since some browsers, like Chrome, Firefox 27+, or IE9, use HTTP pre-connection mechanisms to speed up surfing. Also note that some servers merely shut down the connection without sending this message.\n */\n StatusCodes[StatusCodes[\"REQUEST_TIMEOUT\"] = 408] = \"REQUEST_TIMEOUT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.8\n *\n * This response is sent when a request conflicts with the current state of the server.\n */\n StatusCodes[StatusCodes[\"CONFLICT\"] = 409] = \"CONFLICT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.9\n *\n * This response would be sent when the requested content has been permenantly deleted from server, with no forwarding address. Clients are expected to remove their caches and links to the resource. The HTTP specification intends this status code to be used for \"limited-time, promotional services\". APIs should not feel compelled to indicate resources that have been deleted with this status code.\n */\n StatusCodes[StatusCodes[\"GONE\"] = 410] = \"GONE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.10\n *\n * The server rejected the request because the Content-Length header field is not defined and the server requires it.\n */\n StatusCodes[StatusCodes[\"LENGTH_REQUIRED\"] = 411] = \"LENGTH_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7232#section-4.2\n *\n * The client has indicated preconditions in its headers which the server does not meet.\n */\n StatusCodes[StatusCodes[\"PRECONDITION_FAILED\"] = 412] = \"PRECONDITION_FAILED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.11\n *\n * Request entity is larger than limits defined by server; the server might close the connection or return an Retry-After header field.\n */\n StatusCodes[StatusCodes[\"REQUEST_TOO_LONG\"] = 413] = \"REQUEST_TOO_LONG\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.12\n *\n * The URI requested by the client is longer than the server is willing to interpret.\n */\n StatusCodes[StatusCodes[\"REQUEST_URI_TOO_LONG\"] = 414] = \"REQUEST_URI_TOO_LONG\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.13\n *\n * The media format of the requested data is not supported by the server, so the server is rejecting the request.\n */\n StatusCodes[StatusCodes[\"UNSUPPORTED_MEDIA_TYPE\"] = 415] = \"UNSUPPORTED_MEDIA_TYPE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7233#section-4.4\n *\n * The range specified by the Range header field in the request can't be fulfilled; it's possible that the range is outside the size of the target URI's data.\n */\n StatusCodes[StatusCodes[\"REQUESTED_RANGE_NOT_SATISFIABLE\"] = 416] = \"REQUESTED_RANGE_NOT_SATISFIABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.5.14\n *\n * This response code means the expectation indicated by the Expect request header field can't be met by the server.\n */\n StatusCodes[StatusCodes[\"EXPECTATION_FAILED\"] = 417] = \"EXPECTATION_FAILED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2324#section-2.3.2\n *\n * Any attempt to brew coffee with a teapot should result in the error code \"418 I'm a teapot\". The resulting entity body MAY be short and stout.\n */\n StatusCodes[StatusCodes[\"IM_A_TEAPOT\"] = 418] = \"IM_A_TEAPOT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.6\n *\n * The 507 (Insufficient Storage) status code means the method could not be performed on the resource because the server is unable to store the representation needed to successfully complete the request. This condition is considered to be temporary. If the request which received this status code was the result of a user action, the request MUST NOT be repeated until it is requested by a separate user action.\n */\n StatusCodes[StatusCodes[\"INSUFFICIENT_SPACE_ON_RESOURCE\"] = 419] = \"INSUFFICIENT_SPACE_ON_RESOURCE\";\n /**\n * @deprecated\n * Official Documentation @ https://tools.ietf.org/rfcdiff?difftype=--hwdiff&url2=draft-ietf-webdav-protocol-06.txt\n *\n * A deprecated response used by the Spring Framework when a method has failed.\n */\n StatusCodes[StatusCodes[\"METHOD_FAILURE\"] = 420] = \"METHOD_FAILURE\";\n /**\n * Official Documentation @ https://datatracker.ietf.org/doc/html/rfc7540#section-9.1.2\n *\n * Defined in the specification of HTTP/2 to indicate that a server is not able to produce a response for the combination of scheme and authority that are included in the request URI.\n */\n StatusCodes[StatusCodes[\"MISDIRECTED_REQUEST\"] = 421] = \"MISDIRECTED_REQUEST\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.3\n *\n * The request was well-formed but was unable to be followed due to semantic errors.\n */\n StatusCodes[StatusCodes[\"UNPROCESSABLE_ENTITY\"] = 422] = \"UNPROCESSABLE_ENTITY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.4\n *\n * The resource that is being accessed is locked.\n */\n StatusCodes[StatusCodes[\"LOCKED\"] = 423] = \"LOCKED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.5\n *\n * The request failed due to failure of a previous request.\n */\n StatusCodes[StatusCodes[\"FAILED_DEPENDENCY\"] = 424] = \"FAILED_DEPENDENCY\";\n /**\n * Official Documentation @ https://datatracker.ietf.org/doc/html/rfc7231#section-6.5.15\n *\n * The server refuses to perform the request using the current protocol but might be willing to do so after the client upgrades to a different protocol.\n */\n StatusCodes[StatusCodes[\"UPGRADE_REQUIRED\"] = 426] = \"UPGRADE_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-3\n *\n * The origin server requires the request to be conditional. Intended to prevent the 'lost update' problem, where a client GETs a resource's state, modifies it, and PUTs it back to the server, when meanwhile a third party has modified the state on the server, leading to a conflict.\n */\n StatusCodes[StatusCodes[\"PRECONDITION_REQUIRED\"] = 428] = \"PRECONDITION_REQUIRED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-4\n *\n * The user has sent too many requests in a given amount of time (\"rate limiting\").\n */\n StatusCodes[StatusCodes[\"TOO_MANY_REQUESTS\"] = 429] = \"TOO_MANY_REQUESTS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-5\n *\n * The server is unwilling to process the request because its header fields are too large. The request MAY be resubmitted after reducing the size of the request header fields.\n */\n StatusCodes[StatusCodes[\"REQUEST_HEADER_FIELDS_TOO_LARGE\"] = 431] = \"REQUEST_HEADER_FIELDS_TOO_LARGE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7725\n *\n * The user-agent requested a resource that cannot legally be provided, such as a web page censored by a government.\n */\n StatusCodes[StatusCodes[\"UNAVAILABLE_FOR_LEGAL_REASONS\"] = 451] = \"UNAVAILABLE_FOR_LEGAL_REASONS\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.1\n *\n * The server encountered an unexpected condition that prevented it from fulfilling the request.\n */\n StatusCodes[StatusCodes[\"INTERNAL_SERVER_ERROR\"] = 500] = \"INTERNAL_SERVER_ERROR\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.2\n *\n * The request method is not supported by the server and cannot be handled. The only methods that servers are required to support (and therefore that must not return this code) are GET and HEAD.\n */\n StatusCodes[StatusCodes[\"NOT_IMPLEMENTED\"] = 501] = \"NOT_IMPLEMENTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.3\n *\n * This error response means that the server, while working as a gateway to get a response needed to handle the request, got an invalid response.\n */\n StatusCodes[StatusCodes[\"BAD_GATEWAY\"] = 502] = \"BAD_GATEWAY\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.4\n *\n * The server is not ready to handle the request. Common causes are a server that is down for maintenance or that is overloaded. Note that together with this response, a user-friendly page explaining the problem should be sent. This responses should be used for temporary conditions and the Retry-After: HTTP header should, if possible, contain the estimated time before the recovery of the service. The webmaster must also take care about the caching-related headers that are sent along with this response, as these temporary condition responses should usually not be cached.\n */\n StatusCodes[StatusCodes[\"SERVICE_UNAVAILABLE\"] = 503] = \"SERVICE_UNAVAILABLE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.5\n *\n * This error response is given when the server is acting as a gateway and cannot get a response in time.\n */\n StatusCodes[StatusCodes[\"GATEWAY_TIMEOUT\"] = 504] = \"GATEWAY_TIMEOUT\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc7231#section-6.6.6\n *\n * The HTTP version used in the request is not supported by the server.\n */\n StatusCodes[StatusCodes[\"HTTP_VERSION_NOT_SUPPORTED\"] = 505] = \"HTTP_VERSION_NOT_SUPPORTED\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc2518#section-10.6\n *\n * The server has an internal configuration error: the chosen variant resource is configured to engage in transparent content negotiation itself, and is therefore not a proper end point in the negotiation process.\n */\n StatusCodes[StatusCodes[\"INSUFFICIENT_STORAGE\"] = 507] = \"INSUFFICIENT_STORAGE\";\n /**\n * Official Documentation @ https://tools.ietf.org/html/rfc6585#section-6\n *\n * The 511 status code indicates that the client needs to authenticate to gain network access.\n */\n StatusCodes[StatusCodes[\"NETWORK_AUTHENTICATION_REQUIRED\"] = 511] = \"NETWORK_AUTHENTICATION_REQUIRED\";\n})(StatusCodes || (StatusCodes = {}));\n","\n\nexport enum CotomyDebugFeature {\n Api = \"api\",\n Fill = \"fill\",\n Bind = \"bind\",\n FormData = \"formdata\",\n Html = \"html\",\n Page = \"page\",\n FormLoad = \"formload\",\n}\n\nexport class CotomyDebugSettings {\n private static readonly PREFIX = \"cotomy:debug\";\n\n public static isEnabled(key?: string | CotomyDebugFeature): boolean {\n const global = localStorage.getItem(this.PREFIX);\n if (key) {\n const specific = localStorage.getItem(`${this.PREFIX}:${String(key)}`);\n return specific === \"true\" || global === \"true\";\n }\n return global === \"true\";\n }\n\n public static enable(key: string | CotomyDebugFeature): void {\n localStorage.setItem(`${this.PREFIX}:${String(key)}`, \"true\");\n }\n\n public static disable(key: string | CotomyDebugFeature): void {\n localStorage.setItem(`${this.PREFIX}:${String(key)}`, \"false\");\n }\n\n public static enableAll(): void {\n localStorage.setItem(this.PREFIX, \"true\");\n }\n\n public static disableAll(): void {\n localStorage.setItem(this.PREFIX, \"false\");\n }\n\n public static clear(key?: string | CotomyDebugFeature): void {\n if (key) {\n localStorage.removeItem(`${this.PREFIX}:${String(key)}`);\n } else {\n localStorage.removeItem(this.PREFIX);\n }\n }\n}","import cuid from \"cuid\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\n\n\n\n//#region イベントハンドラ管理要\n\ninterface IEventTarget {\n get scopeId(): string;\n element: HTMLElement;\n}\n\ntype EventHandler = (e: Event) => void | Promise<void>;\nclass HandlerEntry {\n public constructor(public readonly handle: EventHandler, public readonly wrapper?: EventHandler, public readonly options?: AddEventListenerOptions) {\n }\n\n public get current(): EventHandler {\n return this.wrapper ?? this.handle;\n }\n\n /**\n * Comparison mode\n * “strict”: Exact match (matches including wrapper)\n * “remove”: For deletion (ignores wrapper = treats as wildcard)\n */\n public equals(entry: HandlerEntry, mode?: \"strict\" | \"remove\"): boolean;\n public equals(handle: EventHandler, options?: AddEventListenerOptions, wrapper?: EventHandler, mode?: \"strict\" | \"remove\"): boolean;\n public equals(entryOrHandle: HandlerEntry | EventHandler, optionsOrMode?: AddEventListenerOptions | \"strict\" | \"remove\", wrapper?: EventHandler, mode?: \"strict\" | \"remove\"): boolean {\n let targetHandle: EventHandler;\n let targetWrapper: EventHandler | undefined;\n let targetOptions: AddEventListenerOptions | undefined;\n let compareMode: \"strict\" | \"remove\" = \"strict\";\n\n if (entryOrHandle instanceof HandlerEntry) {\n targetHandle = entryOrHandle.handle;\n targetWrapper = entryOrHandle.wrapper;\n targetOptions = entryOrHandle.options;\n compareMode = (optionsOrMode as \"strict\" | \"remove\") ?? \"strict\";\n\n } else {\n targetHandle = entryOrHandle;\n\n if (typeof optionsOrMode === \"string\") {\n compareMode = optionsOrMode;\n targetWrapper = wrapper;\n targetOptions = undefined;\n } else {\n targetOptions = optionsOrMode;\n targetWrapper = wrapper;\n compareMode = mode ?? \"strict\";\n }\n }\n\n if (this.handle !== targetHandle) {\n return false;\n }\n\n if (compareMode === \"strict\" && this.wrapper !== targetWrapper) {\n return false;\n }\n\n return HandlerEntry.optionsEquals(this.options, targetOptions);\n }\n\n public static optionsEquals(left?: AddEventListenerOptions, right?: AddEventListenerOptions): boolean {\n const getBoolean = (options: AddEventListenerOptions | undefined, key: \"capture\" | \"once\" | \"passive\"): boolean =>\n options?.[key] ?? false;\n const getSignal = (options: AddEventListenerOptions | undefined): AbortSignal | undefined =>\n options?.signal;\n\n const leftSignal = getSignal(left);\n const rightSignal = getSignal(right);\n // 厳格一致: === のみ\n const signalsEqual = leftSignal === rightSignal;\n\n return getBoolean(left, \"capture\") === getBoolean(right, \"capture\")\n && getBoolean(left, \"once\") === getBoolean(right, \"once\")\n && getBoolean(left, \"passive\") === getBoolean(right, \"passive\")\n && signalsEqual;\n }\n}\n\nclass HandlerRegistory {\n private _registory: Map<string, HandlerEntry[]> = new Map();\n\n public constructor(private readonly target: IEventTarget) {\n }\n\n private ensure(event: string): HandlerEntry[] {\n return this._registory.get(event) ?? this._registory.set(event, []).get(event)!;\n }\n\n private find(event: string, entry: HandlerEntry): HandlerEntry | undefined {\n return this._registory.get(event)?.find(e => e.equals(entry)) ?? undefined;\n }\n\n public add(event: string, entry: HandlerEntry): void {\n if (entry.options?.once) {\n this.remove(event, entry);\n }\n if (!this.find(event, entry)) {\n this.ensure(event).push(entry);\n this.target.element.addEventListener(event, entry.current, entry.options);\n }\n }\n\n public remove(event: string, entry?: HandlerEntry): void {\n if (!entry) {\n const list = this._registory.get(event);\n if (!list) return;\n list.forEach(e => this.target.element.removeEventListener(event, e.current, e.options?.capture ?? false));\n this._registory.delete(event);\n return;\n }\n const list = this._registory.get(event);\n if (list) {\n const remaining: HandlerEntry[] = [];\n for (const e of list) {\n if (e.equals(entry, \"remove\")) {\n this.target.element.removeEventListener(event, e.current, e.options?.capture ?? false);\n } else {\n remaining.push(e);\n }\n }\n if (remaining.length === 0) {\n this._registory.delete(event);\n } else {\n this._registory.set(event, remaining);\n }\n }\n }\n\n public get empty(): boolean {\n return this._registory.size === 0;\n }\n}\n\nclass EventRegistry {\n private static _instance: EventRegistry;\n private _registry: Map<string, HandlerRegistory> = new Map();\n\n public static get instance(): EventRegistry {\n return this._instance ?? (this._instance = new EventRegistry());\n }\n\n private map(target: IEventTarget): HandlerRegistory {\n const scopeId = target.scopeId;\n let registry = this._registry.get(scopeId);\n if (!registry) {\n registry = new HandlerRegistory(target);\n this._registry.set(scopeId, registry);\n }\n return registry;\n }\n\n public on(event: string, target: IEventTarget, entry: HandlerEntry): void {\n const registry = this.map(target);\n registry.add(event, entry);\n }\n\n public off(event: string, target: IEventTarget, entry?: HandlerEntry): void {\n const registry = this._registry.get(target.scopeId);\n if (!registry) return;\n if (entry) {\n registry.remove(event, entry);\n } else {\n registry.remove(event);\n }\n if (registry.empty) {\n this._registry.delete(target.scopeId);\n }\n }\n\n public clear(target: IEventTarget): void {\n this._registry.delete(target.scopeId);\n }\n}\n\n//#endregion\n\n\n\n\nexport class CotomyScrollOptions {\n public behavior: ScrollBehavior = \"smooth\";\n public onlyIfNeeded: boolean = true;\n public block: ScrollLogicalPosition = \"nearest\";\n public inline: ScrollLogicalPosition = \"nearest\";\n\n public constructor(init: Partial<CotomyScrollOptions> = {}) {\n if (init.behavior !== undefined) this.behavior = init.behavior;\n if (init.onlyIfNeeded !== undefined) this.onlyIfNeeded = init.onlyIfNeeded;\n if (init.block !== undefined) this.block = init.block;\n if (init.inline !== undefined) this.inline = init.inline;\n }\n\n public resolveBehavior(): ScrollBehavior {\n return this.behavior;\n }\n\n public static from(options?: CotomyScrollOptions | Partial<CotomyScrollOptions>): CotomyScrollOptions {\n if (options instanceof CotomyScrollOptions) return options;\n return new CotomyScrollOptions(options ?? {});\n }\n}\n\nexport class CotomyElement implements IEventTarget {\n //#region Factory and Finder\n\n public static encodeHtml(text: string): string {\n const div = document.createElement(\"div\");\n div.textContent = text ?? \"\";\n return div.innerHTML;\n }\n\n private static createHTMLElement(html: string): HTMLElement {\n const wrapperMap: Record<string, { prefix: string, suffix: string }> = {\n \"tr\": { prefix: \"<table><tbody>\", suffix: \"</tbody></table>\" },\n \"td\": { prefix: \"<table><tbody><tr>\", suffix: \"</tr></tbody></table>\" },\n \"th\": { prefix: \"<table><tbody><tr>\", suffix: \"</tr></tbody></table>\" },\n \"thead\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"tbody\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"tfoot\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"caption\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"colgroup\": { prefix: \"<table>\", suffix: \"</table>\" },\n \"col\": { prefix: \"<table><colgroup>\", suffix: \"</colgroup></table>\" },\n \"option\": { prefix: \"<select>\", suffix: \"</select>\" },\n \"optgroup\": { prefix: \"<select>\", suffix: \"</select>\" },\n \"legend\": { prefix: \"<fieldset>\", suffix: \"</fieldset>\" },\n \"li\": { prefix: \"<ul>\", suffix: \"</ul>\" }\n };\n\n const match = html.match(/<\\s*([a-z0-9]+)/i);\n if (!match) {\n throw new Error(`Invalid HTML: cannot extract tag from \"${html}\"`);\n }\n const tag = match[1].toLowerCase();\n\n const wrap = wrapperMap[tag];\n const wrappedHtml = wrap ? `${wrap.prefix}${html}${wrap.suffix}` : html;\n\n const parser = new DOMParser();\n const doc = parser.parseFromString(wrappedHtml, \"text/html\");\n const errors = doc.querySelector(\"parsererror\");\n if (errors) {\n throw new Error(`HTML parsing failed for tag <${tag}>: \"${html}\"`);\n }\n if (doc.body.children.length !== 1) {\n throw new Error(`CotomyElement requires a single root element, but got ${doc.body.children.length}.`);\n }\n\n const element = doc.body.querySelector(tag);\n if (!element) {\n throw new Error(`Parsed but <${tag}> element not found: \"${html}\"`);\n }\n\n return element as HTMLElement;\n }\n\n public static first<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const element = document.querySelector(selector);\n if (!element) return undefined;\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(<HTMLElement>element);\n }\n\n public static last<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const elements = CotomyElement.find<T>(selector, type);\n return elements.pop();\n }\n\n public static find<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T[] {\n const elements = document.querySelectorAll(selector);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return Array.from(elements).map(e => new ctor(<HTMLElement>e));\n }\n\n public static contains(selector: string): boolean {\n return document.querySelector(selector) !== null;\n }\n\n public static byId<T extends CotomyElement = CotomyElement>(id: string, type?: new (el: HTMLElement) => T): T | undefined {\n const element = document.getElementById(id);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return !element ? undefined : new ctor(<HTMLElement>element);\n }\n\n public static containsById(id: string): boolean {\n return document.getElementById(id) !== null;\n }\n\n public static empty<T extends CotomyElement = CotomyElement>(type?: new (el: HTMLElement) => T): T {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(document.createElement(\"div\")).attribute(\"data-cotomy-empty\", \"\").style(\"display\", \"none\");\n }\n\n //#endregion\n\n\n\n private _element: HTMLElement;\n private _parentElement: CotomyElement | null = null;\n\n public constructor(element: HTMLElement | { html: string, css?: string } | { tagname: string, text?: string, css?: string } | string) {\n if (element instanceof HTMLElement) {\n this._element = element;\n } else if (typeof element === \"string\") {\n this._element = CotomyElement.createHTMLElement(element);\n } else {\n this._element = CotomyElement.createHTMLElement(\"html\" in element ? element.html : `<${element.tagname}></${element.tagname}>`);\n if (\"tagname\" in element && element.text) {\n this._element.textContent = element.text;\n }\n if (element.css) {\n this.useScopedCss(element.css);\n }\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Html)) {\n if (\"html\" in element) {\n console.debug(`CotomyElement {html: \"${element.html}\" } is created`);\n }\n if (\"tagname\" in element) {\n console.debug(`CotomyElement {tagname: \"${element.tagname}\", text: \"${element.text ?? \"\"}\"} is created`);\n }\n if (element.css) {\n console.debug(`CotomyElement {css: \"${element.css}\" } is applied`);\n }\n }\n }\n this.setInstanceId();\n }\n\n\n\n //#region tag identifier\n\n private setInstanceId() {\n if (!this.hasAttribute(\"data-cotomy-instance\")) {\n this.attribute(\"data-cotomy-instance\", cuid());\n this.removed(() => {\n this._element = CotomyElement.createHTMLElement(/* html */ `<div data-cotomy-invalidated style=\"display: none;\"></div>`);\n EventRegistry.instance.clear(this);\n });\n this.on(\"cotomy:transitstart\", () => {\n this.attribute(\"data-cotomy-moving\", \"\");\n this.find(\"[data-cotomy-instance]\").forEach(e => e.attribute(\"data-cotomy-moving\", \"\"));\n });\n this.on(\"cotomy:transitend\", () => {\n this.attribute(\"data-cotomy-moving\", null);\n this.find(\"[data-cotomy-instance]\").forEach(e => e.attribute(\"data-cotomy-moving\", null));\n });\n }\n }\n\n public get instanceId(): string {\n return this.attribute(\"data-cotomy-instance\")!;\n }\n\n public get scopeId(): string {\n if (!this.hasAttribute(\"data-cotomy-scopeid\")) {\n this.attribute(\"data-cotomy-scopeid\", cuid());\n }\n return this.attribute(\"data-cotomy-scopeid\")!;\n }\n\n //#endregion\n\n\n\n //#region Scoped CSS\n\n public get stylable(): boolean {\n return ![\"script\", \"style\", \"link\", \"meta\"].includes(this.tagname);\n }\n\n private get scopedCssElementId(): string {\n return `css-${this.scopeId}`;\n }\n\n private useScopedCss(css: string): this {\n if (css && this.stylable) {\n const cssid = this.scopedCssElementId;\n CotomyElement.find(`#${cssid}`).forEach(e => e.remove());\n const element = document.createElement(\"style\");\n const writeCss = css.replace(/\\[scope\\]/g, `[data-cotomy-scopeid=\"${this.scopeId}\"]`);\n const node = document.createTextNode(writeCss);\n element.appendChild(node);\n element.id = cssid;\n const head = CotomyElement.first(\"head\")\n || new CotomyElement({ html: /* html */ `<head></head>` }).prependTo(new CotomyElement(document.documentElement));\n head.append(new CotomyElement(element));\n\n this.removed(() => {\n CotomyElement.find(`#${cssid}`).forEach(e => e.remove());\n });\n }\n return this;\n }\n\n //#endregion\n\n\n\n //#region Layout Event Listener\n\n public static readonly LISTEN_LAYOUT_EVENTS_ATTRIBUTE: string = \"data-cotomy-layout\";\n\n public listenLayoutEvents(): this {\n this.attribute(CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE, \"\");\n return this;\n }\n\n //#endregion\n\n\n\n //#region Elementの基本情報\n\n public get id(): string | null | undefined {\n return this.attribute(\"id\");\n }\n\n public generateId(prefix: string = \"__cotomy_elem__\"): this {\n if (!this.id) {\n this.attribute(\"id\", `${prefix}${cuid()}`);\n }\n return this;\n }\n\n public get element(): HTMLElement {\n return this._element;\n }\n\n public clone<T extends CotomyElement = CotomyElement>(type?: new (el: HTMLElement) => T): T {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ATTRIBUTES_TO_STRIP = [\"data-cotomy-instance\", \"data-cotomy-scopeid\", \"data-cotomy-moving\"];\n const clonedElement = this.element.cloneNode(true) as HTMLElement;\n\n if (clonedElement.hasAttribute(\"data-cotomy-invalidated\")) {\n throw new Error(\"Cannot clone an invalidated CotomyElement.\");\n }\n\n ATTRIBUTES_TO_STRIP.forEach(attr => {\n clonedElement.removeAttribute(attr);\n clonedElement.querySelectorAll(`[${attr}]`).forEach(el => el.removeAttribute(attr));\n });\n\n const cloned = new ctor(clonedElement);\n return cloned;\n }\n\n public get tagname(): string {\n return this.element.tagName.toLowerCase();\n }\n\n /// <summary>\n /// 指定したセレクタにマッチする要素が存在するかどうかを判定\n /// ・標準の判定だと親要素を辿って判定しないため、セレクタを精査して親要素から判定する\n /// </summary>\n public is(selector: string): boolean {\n const selectors = selector.split(/\\s+(?![^\\[]*\\])|(?<=\\>)\\s+/);\n let element: HTMLElement | null = this.element;\n\n for (let i = selectors.length - 1; i >= 0; i--) {\n let subSelector = selectors[i].trim();\n let directChild = false;\n\n if (subSelector.startsWith(\">\")) {\n directChild = true;\n subSelector = subSelector.slice(1).trim();\n }\n\n if (!element || !element.matches(subSelector)) {\n return false;\n }\n\n if (directChild) {\n element = element.parentElement;\n } else {\n if (i > 0) {\n while (element && !element.matches(selectors[i - 1].trim())) {\n element = element.parentElement;\n }\n }\n }\n }\n\n return true;\n }\n\n public match(selector: string): boolean {\n try {\n return this.element.matches(selector);\n } catch {\n return false;\n }\n }\n\n public get empty(): boolean {\n const nonEmptyTags = new Set([\n \"input\", \"select\", \"textarea\", \"img\", \"video\", \"audio\", \"br\", \"hr\",\n \"iframe\", \"embed\", \"canvas\", \"object\", \"svg\", \"source\", \"track\", \"col\",\n \"link\", \"meta\", \"base\"\n ]);\n\n return nonEmptyTags.has(this.tagname)\n || this._element.hasAttribute(\"data-cotomy-empty\")\n || this._element.innerHTML.trim() === \"\";\n }\n\n //#endregion\n\n\n\n //#region Elementの状態及び値\n\n public get attached(): boolean {\n return document.contains(this.element);\n }\n\n public get readonly(): boolean {\n if (\"readOnly\" in this.element) {\n return <boolean>this.element.readOnly;\n } else {\n return this.element.hasAttribute(\"readonly\");\n }\n }\n\n public set readonly(readonly: boolean) {\n if (\"readOnly\" in this.element) {\n this.element.readOnly = readonly;\n } else {\n if (readonly) {\n this.attribute(\"readonly\", \"readonly\");\n } else {\n this.attribute(\"readonly\", null);\n }\n }\n }\n\n public get value(): string {\n if (\"value\" in this.element) {\n return <string>this.element.value;\n } else {\n // \"value\" プロパティが存在しない場合、空文字列を返す\n return this.attribute(\"data-cotomy-value\") ?? \"\";\n }\n }\n\n public set value(val: string) {\n if (\"value\" in this.element) {\n this.element.value = val;\n } else {\n this.attribute(\"data-cotomy-value\", val);\n }\n }\n\n public get text(): string {\n return this.element.textContent ?? \"\";\n }\n\n public set text(text: string) {\n this.element.textContent = text ?? \"\";\n }\n\n public get html(): string {\n return this.element.innerHTML;\n }\n\n public set html(html: string) {\n this.element.innerHTML = html;\n }\n\n //#endregion\n\n\n\n //#region Elementの操作\n\n public setFocus(): this {\n this.element.focus();\n return this;\n }\n\n public get visible(): boolean {\n if (!this.attached) {\n return false;\n }\n\n if (!this.element.offsetParent && !document.contains(this.element)) {\n return false;\n }\n\n const rect = this.element.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n const style = this.getComputedStyle();\n return style.display !== \"none\" && style.visibility !== \"hidden\" && style.visibility !== \"collapse\";\n }\n\n return false;\n }\n\n public get enabled(): boolean {\n return !(this.element.hasAttribute(\"disabled\") && this.element.getAttribute(\"disabled\") !== null);\n }\n\n public set enabled(value: boolean) {\n if (value) {\n this.element.removeAttribute(\"disabled\");\n } else {\n this.element.setAttribute(\"disabled\", \"disabled\");\n }\n }\n\n private get invalidated(): boolean {\n return this.element.hasAttribute(\"data-cotomy-invalidated\");\n }\n\n public remove(): void {\n if (!this.invalidated) {\n this._element.remove();\n }\n }\n\n public clear(): this {\n this.find(\"*\").forEach(e => e.remove());\n this.text = \"\";\n return this;\n }\n\n //#endregion\n\n\n\n //#region Elementのサイズ及び位置\n\n public get width(): number {\n return this.element.offsetWidth;\n }\n\n public set width(width: number) {\n let w = width.toString() + \"px\";\n this.style(\"width\", w);\n }\n\n public get height(): number {\n return this.element.offsetHeight;\n }\n\n public set height(height: number) {\n let h = height.toString() + \"px\";\n this.style(\"height\", h);\n }\n\n public get innerWidth(): number {\n return this.element.clientWidth;\n }\n\n public get innerHeight(): number {\n return this.element.clientHeight;\n }\n\n public get outerWidth(): number {\n const style = this.getComputedStyle();\n const margin = parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n return this.element.offsetWidth + margin;\n }\n\n public get outerHeight(): number {\n const style = this.getComputedStyle();\n const margin = parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n return this.element.offsetHeight + margin;\n }\n\n public get scrollHeight(): number {\n return this.element.scrollHeight;\n }\n\n public get scrollWidth(): number {\n return this.element.scrollWidth;\n }\n\n public get scrollTop(): number {\n return this.element.scrollTop;\n }\n\n public get position(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left };\n }\n\n public get absolutePosition(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top + window.scrollY, left: rect.left + window.scrollX };\n }\n\n public get screenPosition(): { top: number; left: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left };\n }\n\n public get rect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n return { top: rect.top, left: rect.left, width: rect.width, height: rect.height };\n }\n\n public get innerRect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n const style = this.getComputedStyle();\n const padding = {\n top: parseFloat(style.paddingTop),\n right: parseFloat(style.paddingRight),\n bottom: parseFloat(style.paddingBottom),\n left: parseFloat(style.paddingLeft)\n };\n return {\n top: rect.top + padding.top,\n left: rect.left + padding.left,\n width: rect.width - padding.left - padding.right,\n height: rect.height - padding.top - padding.bottom\n };\n }\n\n public get outerRect(): { top: number; left: number; width: number; height: number } {\n const rect = this.element.getBoundingClientRect();\n const style = this.getComputedStyle();\n const margin = {\n top: parseFloat(style.marginTop),\n right: parseFloat(style.marginRight),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft)\n };\n return {\n top: rect.top - margin.top,\n left: rect.left - margin.left,\n width: rect.width + margin.left + margin.right,\n height: rect.height + margin.top + margin.bottom\n };\n }\n\n\n public get padding(): { top: number; right: number; bottom: number; left: number } {\n const style = this.getComputedStyle();\n return {\n top: parseFloat(style.paddingTop),\n right: parseFloat(style.paddingRight),\n bottom: parseFloat(style.paddingBottom),\n left: parseFloat(style.paddingLeft)\n };\n }\n\n public get margin(): { top: number; right: number; bottom: number; left: number } {\n const style = this.getComputedStyle();\n return {\n top: parseFloat(style.marginTop),\n right: parseFloat(style.marginRight),\n bottom: parseFloat(style.marginBottom),\n left: parseFloat(style.marginLeft)\n };\n }\n\n public get inViewport(): boolean {\n const rect = this.element.getBoundingClientRect();\n return rect.top < window.innerHeight && rect.bottom > 0;\n }\n\n public get isAboveViewport(): boolean {\n return this.element.getBoundingClientRect().bottom < 0;\n }\n\n public get isBelowViewport(): boolean {\n return this.element.getBoundingClientRect().top > window.innerHeight;\n }\n\n public get isLeftViewport(): boolean {\n return this.element.getBoundingClientRect().right < 0;\n }\n\n public get isRightViewport(): boolean {\n return this.element.getBoundingClientRect().left > window.innerWidth;\n }\n\n private static isScrollableOverflow(value: string): boolean {\n const overflow = (value ?? \"\").toLowerCase();\n return overflow === \"auto\" || overflow === \"scroll\";\n }\n\n private static findNearestScrollableAncestor(element: HTMLElement): HTMLElement | null {\n let current: HTMLElement | null = element.parentElement;\n while (current) {\n if (current === document.body || current === document.documentElement) {\n return null;\n }\n\n const style = window.getComputedStyle(current);\n const overflowY = style.overflowY;\n const overflowX = style.overflowX;\n\n const canScrollY = CotomyElement.isScrollableOverflow(overflowY) && current.scrollHeight > current.clientHeight;\n const canScrollX = CotomyElement.isScrollableOverflow(overflowX) && current.scrollWidth > current.clientWidth;\n\n if (canScrollY || canScrollX) {\n return current;\n }\n current = current.parentElement;\n }\n return null;\n }\n\n private static computeAlignedScroll(\n viewStart: number,\n viewSize: number,\n elementStart: number,\n elementEnd: number,\n align: ScrollLogicalPosition,\n onlyIfNeeded: boolean\n ): number | null {\n const viewEnd = viewStart + viewSize;\n\n // 既に完全に表示範囲内ならスクロール不要\n if (onlyIfNeeded && elementStart >= viewStart && elementEnd <= viewEnd) {\n return null;\n }\n\n if (align === \"start\") {\n return elementStart;\n }\n if (align === \"end\") {\n return elementEnd - viewSize;\n }\n if (align === \"center\") {\n const elementSize = elementEnd - elementStart;\n return elementStart - (viewSize - elementSize) / 2;\n }\n\n // nearest\n if (elementStart < viewStart) {\n return elementStart;\n }\n if (elementEnd > viewEnd) {\n return elementEnd - viewSize;\n }\n return null;\n }\n\n public scrollIn(options: CotomyScrollOptions | Partial<CotomyScrollOptions> = {}): this {\n if (!this.attached) return this;\n\n const resolved = CotomyScrollOptions.from(options);\n const behavior = resolved.resolveBehavior();\n const onlyIfNeeded = resolved.onlyIfNeeded;\n const block = resolved.block;\n const inline = resolved.inline;\n\n const scrollable = CotomyElement.findNearestScrollableAncestor(this.element);\n if (scrollable) {\n const elementRect = this.element.getBoundingClientRect();\n const containerRect = scrollable.getBoundingClientRect();\n\n const elementTopInContainer = elementRect.top - containerRect.top + scrollable.scrollTop;\n const elementBottomInContainer = elementRect.bottom - containerRect.top + scrollable.scrollTop;\n const elementLeftInContainer = elementRect.left - containerRect.left + scrollable.scrollLeft;\n const elementRightInContainer = elementRect.right - containerRect.left + scrollable.scrollLeft;\n\n const targetTop = CotomyElement.computeAlignedScroll(\n scrollable.scrollTop,\n scrollable.clientHeight,\n elementTopInContainer,\n elementBottomInContainer,\n block,\n onlyIfNeeded\n );\n const targetLeft = CotomyElement.computeAlignedScroll(\n scrollable.scrollLeft,\n scrollable.clientWidth,\n elementLeftInContainer,\n elementRightInContainer,\n inline,\n onlyIfNeeded\n );\n\n if (!onlyIfNeeded || targetTop !== null || targetLeft !== null) {\n const nextTop = targetTop ?? scrollable.scrollTop;\n const nextLeft = targetLeft ?? scrollable.scrollLeft;\n (scrollable as any).scrollTo?.({ top: nextTop, left: nextLeft, behavior });\n if (!(scrollable as any).scrollTo) {\n scrollable.scrollTop = nextTop;\n scrollable.scrollLeft = nextLeft;\n }\n }\n return this;\n }\n\n const rect = this.element.getBoundingClientRect();\n const currentTop = window.scrollY || document.documentElement.scrollTop;\n const currentLeft = window.scrollX || document.documentElement.scrollLeft;\n\n const elementTop = currentTop + rect.top;\n const elementBottom = currentTop + rect.bottom;\n const elementLeft = currentLeft + rect.left;\n const elementRight = currentLeft + rect.right;\n\n const targetTop = CotomyElement.computeAlignedScroll(currentTop, window.innerHeight, elementTop, elementBottom, block, onlyIfNeeded);\n const targetLeft = CotomyElement.computeAlignedScroll(currentLeft, window.innerWidth, elementLeft, elementRight, inline, onlyIfNeeded);\n\n if (!onlyIfNeeded || targetTop !== null || targetLeft !== null) {\n window.scrollTo({ top: targetTop ?? currentTop, left: targetLeft ?? currentLeft, behavior });\n }\n return this;\n }\n\n public scrollTo(target: string | CotomyElement | HTMLElement, options: CotomyScrollOptions | Partial<CotomyScrollOptions> = {}): this {\n if (typeof target === \"string\") {\n const element = this.first(target);\n element?.scrollIn(options);\n return this;\n }\n if (target instanceof CotomyElement) {\n target.scrollIn(options);\n return this;\n }\n new CotomyElement(target).scrollIn(options);\n return this;\n }\n\n public comesBefore(target: CotomyElement): boolean {\n const pos = this.element.compareDocumentPosition(target.element);\n if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return false;\n return (pos & Node.DOCUMENT_POSITION_FOLLOWING) !== 0;\n }\n\n public comesAfter(target: CotomyElement): boolean {\n const pos = this.element.compareDocumentPosition(target.element);\n if (pos & Node.DOCUMENT_POSITION_DISCONNECTED) return false;\n return (pos & Node.DOCUMENT_POSITION_PRECEDING) !== 0;\n }\n\n //#endregion\n\n\n\n //#region Elementの属性\n\n public hasAttribute(name: string): boolean {\n return this.element.hasAttribute(name);\n }\n\n public attribute(name: string): string | null | undefined;\n public attribute(name: string, value: string | number | undefined): this;\n public attribute(name: string, value: null): this;\n public attribute(name: string, value?: string | number | undefined | null): string | null | undefined | this {\n if (arguments.length === 1) {\n // getter\n return this.element.hasAttribute(name) ? this.element.getAttribute(name) : undefined;\n } else if (value === null) {\n // remove\n this.element.removeAttribute(name);\n return this;\n } else {\n // setter\n this.element.setAttribute(name, value?.toString() ?? \"\");\n return this;\n }\n }\n\n public hasClass(name: string): boolean {\n return this.element.classList.contains(name);\n }\n\n public addClass(name: string): this {\n this.element.classList.add(name);\n return this;\n }\n\n public removeClass(name: string): this {\n this.element.classList.remove(name);\n return this;\n }\n\n public toggleClass(name: string, force?: boolean): this {\n this.element.classList.toggle(name, force);\n return this;\n }\n\n public style(name: string): string;\n public style(name: string, value: string): this;\n public style(name: string, value: null): this;\n public style(name: string, value: undefined): this;\n public style(name: string, value?: string | null): string | this {\n if (arguments.length === 1) {\n // getter\n return this.element.style.getPropertyValue(name);\n } else if (value == null) {\n // remove\n this.element.style.removeProperty(name);\n return this;\n } else {\n // setter\n this.element.style.setProperty(name, value);\n return this;\n }\n }\n\n protected getComputedStyle(): CSSStyleDeclaration {\n return window.getComputedStyle(this.element);\n }\n\n public computedStyle(name: string): string {\n return window.getComputedStyle(this.element).getPropertyValue(name);\n }\n\n //#endregion\n\n\n\n //#region Elementの親子関係\n\n public get parent(): CotomyElement {\n if (this._parentElement == null && this.element.parentElement !== null) {\n this._parentElement = new CotomyElement(this.element.parentElement);\n }\n return this._parentElement ?? CotomyElement.empty();\n }\n\n public get parents(): CotomyElement[] {\n let parents = [];\n let currentElement = this.element.parentElement;\n while (currentElement !== null) {\n parents.push(new CotomyElement(currentElement));\n currentElement = currentElement.parentElement;\n }\n return parents;\n }\n\n public hasChildren(selector: string = \"*\"): boolean {\n return this.element.querySelector(selector) !== null;\n }\n public children<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T[] {\n const children = Array.from(this.element.querySelectorAll(selector));\n const directChildren = children.filter(child => child.parentElement === this.element);\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return directChildren.filter((e): e is HTMLElement => e instanceof HTMLElement).map(e => new ctor(e));\n }\n\n public firstChild<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.children<T>(selector, type);\n return elements.shift() ?? undefined;\n }\n\n public lastChild<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.children<T>(selector, type);\n return elements.pop() ?? undefined;\n }\n\n public closest<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T | undefined {\n const closestElement = this.element.closest(selector);\n if (closestElement !== null && closestElement instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return new ctor(closestElement);\n } else {\n return undefined;\n }\n }\n\n public previousSibling<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const element = this.element.previousElementSibling;\n if (element !== null && element instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ce = new ctor(element);\n return ce.match(selector) ? ce : ce.previousSibling<T>(selector, type);\n } else {\n return undefined;\n }\n }\n\n public nextSibling<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const element = this.element.nextElementSibling;\n if (element !== null && element instanceof HTMLElement) {\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n const ce = new ctor(element);\n return ce.match(selector) ? ce : ce.nextSibling<T>(selector, type);\n } else {\n return undefined;\n }\n }\n\n public siblings<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T[] {\n const parent = this.element.parentElement;\n if (!parent) return [];\n const ctor = (type ?? CotomyElement) as new (el: HTMLElement) => T;\n return Array.from(parent.children).filter((e): e is HTMLElement => e instanceof HTMLElement\n && e !== this.element).map(e => new ctor(e)).filter(e => e.match(selector));\n }\n\n //#endregion\n\n\n\n //#region 内包するElement\n\n public find<T extends CotomyElement = CotomyElement>(selector: string, type?: new (el: HTMLElement) => T): T[] {\n const elements = Array.from(this.element.querySelectorAll(selector)) as HTMLElement[];\n return <T[]>elements.map(e => new (type ?? CotomyElement)(e));\n }\n\n public first<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.find(selector, type);\n return <T>elements.shift() ?? undefined;\n }\n\n public last<T extends CotomyElement = CotomyElement>(selector: string = \"*\", type?: new (el: HTMLElement) => T): T | undefined {\n const elements = this.find(selector, type);\n return <T>elements.pop() ?? undefined;\n }\n\n public contains(selector: string): boolean {\n return this.find(selector).length > 0;\n }\n\n private static runWithMoveEvents(target: CotomyElement, operation: () => void): void {\n target.trigger(\"cotomy:transitstart\");\n try {\n operation();\n } finally {\n target.trigger(\"cotomy:transitend\");\n }\n }\n\n public prepend(prepend: CotomyElement): this {\n CotomyElement.runWithMoveEvents(prepend, () => {\n this.element.prepend(prepend.element);\n });\n return this;\n }\n\n public append(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(target, () => {\n this.element.append(target.element);\n });\n return this;\n }\n\n public appendAll(targets: CotomyElement[]): this {\n targets.forEach(e => this.append(e));\n return this;\n }\n\n public insertBefore(append: CotomyElement): this {\n CotomyElement.runWithMoveEvents(append, () => {\n this.element.before(append.element);\n });\n return this;\n }\n\n public insertAfter(append: CotomyElement): this {\n CotomyElement.runWithMoveEvents(append, () => {\n this.element.after(append.element);\n });\n return this;\n }\n\n public appendTo(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(this, () => {\n target.element.append(this.element);\n });\n return this;\n }\n\n public prependTo(target: CotomyElement): this {\n CotomyElement.runWithMoveEvents(this, () => {\n target.element.prepend(this.element);\n });\n return this;\n }\n\n //#endregion\n\n\n\n\n //#region Event\n\n public trigger(event: string): this;\n public trigger(event: string, e: Event): this;\n public trigger(event: string, e?: Event): this {\n this.element.dispatchEvent(e ?? new Event(event, { bubbles: true }));\n return this;\n }\n\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, undefined, options);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>): this;\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public onSubTree(event: string | string[], selector: string, handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const delegate: EventHandler = (e: Event) => {\n const target = e.target as HTMLElement | null;\n if (target && target.closest(selector)) {\n return handle(e);\n }\n };\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, delegate, options);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public once(event: string | string[], handle: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const mergedOptions: AddEventListenerOptions = { ...(options ?? {}), once: true };\n this.off(event, handle, mergedOptions);\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n const entry = new HandlerEntry(handle, undefined, mergedOptions);\n EventRegistry.instance.on(eventName, this, entry);\n });\n return this;\n }\n\n public off(event: string | string[]): this;\n public off(event: string | string[], handle: (e: Event) => void | Promise<void>): this;\n public off(event: string | string[], handle: (e: Event) => void | Promise<void>, options: AddEventListenerOptions): this;\n public off(event: string | string[], handle?: (e: Event) => void | Promise<void>, options?: AddEventListenerOptions): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (handle) {\n const entry = new HandlerEntry(handle, undefined, options);\n EventRegistry.instance.off(eventName, this, entry);\n } else {\n EventRegistry.instance.off(eventName, this);\n }\n });\n return this;\n }\n\n //#region Mouse Events\n\n public click(): this;\n public click(handle: (e: MouseEvent) => void | Promise<void>): this;\n public click(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"click\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"click\");\n }\n return this;\n }\n\n public dblclick(): this;\n public dblclick(handle: (e: MouseEvent) => void | Promise<void>): this;\n public dblclick(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dblclick\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"dblclick\");\n }\n return this;\n }\n\n public mouseover(): this;\n public mouseover(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseover(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseover\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseover\");\n }\n return this;\n }\n\n public mouseout(): this;\n public mouseout(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseout(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseout\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseout\");\n }\n return this;\n }\n\n public mousedown(): this;\n public mousedown(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mousedown(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mousedown\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mousedown\");\n }\n return this;\n }\n\n public mouseup(): this;\n public mouseup(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseup(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseup\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseup\");\n }\n return this;\n }\n\n public mousemove(): this;\n public mousemove(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mousemove(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mousemove\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mousemove\");\n }\n return this;\n }\n\n public mouseenter(): this;\n public mouseenter(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseenter(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseenter\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseenter\");\n }\n return this;\n }\n\n public mouseleave(): this;\n public mouseleave(handle: (e: MouseEvent) => void | Promise<void>): this;\n public mouseleave(handle?: (e: MouseEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"mouseleave\", async e => await handle(e as MouseEvent));\n } else {\n this.trigger(\"mouseleave\");\n }\n return this;\n }\n\n public dragstart(): this;\n public dragstart(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragstart(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragstart\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragstart\");\n }\n return this;\n }\n\n public dragend(): this;\n public dragend(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragend(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragend\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragend\");\n }\n return this;\n }\n\n public dragover(): this;\n public dragover(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragover(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragover\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragover\");\n }\n return this;\n }\n\n public dragenter(): this;\n public dragenter(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragenter(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragenter\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragenter\");\n }\n return this;\n }\n\n public dragleave(): this;\n public dragleave(handle: (e: DragEvent) => void | Promise<void>): this;\n public dragleave(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"dragleave\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"dragleave\");\n }\n return this;\n }\n\n public drop(): this;\n public drop(handle: (e: DragEvent) => void | Promise<void>): this;\n public drop(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"drop\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"drop\");\n }\n return this;\n }\n\n public drag(): this;\n public drag(handle: (e: DragEvent) => void | Promise<void>): this;\n public drag(handle?: (e: DragEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"drag\", async e => await handle(e as DragEvent));\n } else {\n this.trigger(\"drag\");\n }\n return this;\n }\n\n public removed(handle: ((e: Event) => void | Promise<void>)): this {\n this.element.addEventListener(\"removed\", async e => await handle(e));\n return this;\n }\n\n //#endregion\n\n\n\n //#region Keyboard Events\n\n public keydown(): this;\n public keydown(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keydown(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keydown\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keydown\");\n }\n return this;\n }\n\n public keyup(): this;\n public keyup(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keyup(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keyup\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keyup\");\n }\n return this;\n }\n\n public keypress(): this;\n public keypress(handle: (e: KeyboardEvent) => void | Promise<void>): this;\n public keypress(handle?: (e: KeyboardEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"keypress\", async e => await handle(e as KeyboardEvent));\n } else {\n this.trigger(\"keypress\");\n }\n return this;\n }\n\n //#endregion\n\n\n //#region Input Control Events\n\n public change(): this;\n public change(handle: (e: Event) => void | Promise<void>): this;\n public change(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"change\", async e => await handle(e));\n } else {\n this.trigger(\"change\");\n }\n return this;\n }\n\n public input(): this;\n public input(handle: (e: Event) => void | Promise<void>): this;\n public input(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"input\", async e => await handle(e));\n } else {\n this.trigger(\"input\");\n }\n return this;\n }\n\n //#endregion\n\n\n //#region View and Control Evnet\n\n private static _intersectionObserver: IntersectionObserver | null = null;\n public static get intersectionObserver(): IntersectionObserver {\n return CotomyElement._intersectionObserver = CotomyElement._intersectionObserver\n ?? new IntersectionObserver(entries => {\n entries.filter(entry => entry.isIntersecting).forEach(\n entry => entry.target.dispatchEvent(new Event(\"inview\")));\n entries.filter(entry => !entry.isIntersecting).forEach(\n entry => entry.target.dispatchEvent(new Event(\"outview\")));\n });\n }\n\n public inview(): this;\n public inview(handle: (e: Event) => void | Promise<void>): this;\n public inview(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n CotomyElement.intersectionObserver.observe(this.element);\n this.element.addEventListener(\"inview\", async e => await handle(e));\n } else {\n this.trigger(\"inview\");\n }\n return this;\n }\n\n public outview(): this;\n public outview(handle: (e: Event) => void | Promise<void>): this;\n public outview(handle?: (e: Event) => void | Promise<void>): this {\n if (handle) {\n CotomyElement.intersectionObserver.observe(this.element);\n this.element.addEventListener(\"outview\", async e => await handle(e));\n } else {\n this.trigger(\"outview\");\n }\n return this;\n }\n\n public focus(): this;\n public focus(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focus(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focus\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focus\");\n }\n return this;\n }\n\n public blur(): this;\n public blur(handle: (e: FocusEvent) => void | Promise<void>): this;\n public blur(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"blur\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"blur\");\n }\n return this;\n }\n\n public focusin(): this;\n public focusin(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focusin(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focusin\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focusin\");\n }\n return this;\n }\n\n public focusout(): this;\n public focusout(handle: (e: FocusEvent) => void | Promise<void>): this;\n public focusout(handle?: (e: FocusEvent) => void | Promise<void>): this {\n if (handle) {\n this.element.addEventListener(\"focusout\", async e => await handle(e as FocusEvent));\n } else {\n this.trigger(\"focusout\");\n }\n return this;\n }\n\n public filedrop(handle: (files: File[]) => void | Promise<void>): this {\n this.element.addEventListener(\"drop\", async e => {\n e.preventDefault();\n const dt = e.dataTransfer;\n if (dt && dt.files) {\n await handle(Array.from(dt.files));\n }\n });\n return this;\n }\n\n //#endregion\n\n\n\n //#region Layout Events\n public resize(): this;\n public resize(handle: (e: Event) => void | Promise<void>): this;\n public resize(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:resize\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:resize\");\n }\n return this;\n }\n\n public scroll(): this;\n public scroll(handle: (e: Event) => void | Promise<void>): this;\n public scroll(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:scroll\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:scroll\");\n }\n return this;\n }\n\n public changeLayout(): this;\n public changeLayout(handle: (e: Event) => void | Promise<void>): this;\n public changeLayout(handle?: (e: Event) => void | Promise<void>): this {\n this.listenLayoutEvents();\n if (handle) {\n this.element.addEventListener(\"cotomy:changelayout\", async e => await handle(e));\n } else {\n this.trigger(\"cotomy:changelayout\");\n }\n return this;\n }\n //#endregion\n //#endregion\n}\n\nexport class CotomyMetaElement extends CotomyElement {\n public static get(name: string): CotomyMetaElement {\n return CotomyElement.first<CotomyMetaElement>(`meta[name=\"${name}\" i]`, CotomyMetaElement)\n ?? CotomyElement.empty<CotomyMetaElement>(CotomyMetaElement);\n }\n\n public get content(): string {\n return this.attribute(\"content\") ?? \"\";\n }\n}\n\n\n\n\nexport class CotomyWindow {\n private static _instance: CotomyWindow | null = null;\n\n public static get instance(): CotomyWindow {\n return CotomyWindow._instance ?? (CotomyWindow._instance = new CotomyWindow());\n }\n\n\n private _body: CotomyElement = CotomyElement.empty();\n private _mutationObserver: MutationObserver | null = null;\n private _reloading: boolean = false;\n private _eventHandlers: { [event: string]: Array<(e: Event) => void | Promise<void>> } = {};\n\n public get initialized(): boolean {\n return this._body.attached;\n }\n\n public initialize(): this {\n if (!this.initialized) {\n if (!document.body) {\n throw new Error(\"<body> element not found. DOM may not be ready.\");\n }\n this._body = CotomyElement.first(\"body\")!;\n\n const changeLayoutEvents = [\"resize\", \"scroll\", \"orientationchange\", \"fullscreenchange\", \"cotomy:ready\"];\n changeLayoutEvents.forEach(e => {\n window.addEventListener(e, () => {\n const changeLayoutEvent = new CustomEvent(\"cotomy:changelayout\");\n window.dispatchEvent(changeLayoutEvent);\n }, { passive: true });\n });\n\n // documentにファイルがドラッグされた場合、開いてしまうことを防ぐ\n document.addEventListener(\"dragover\", e => {\n e.stopPropagation();\n e.preventDefault();\n });\n\n this.resize(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:resize\"));\n });\n });\n\n this.scroll(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:scroll\"));\n });\n });\n\n this.changeLayout(() => {\n document.querySelectorAll(`[${CotomyElement.LISTEN_LAYOUT_EVENTS_ATTRIBUTE}]`).forEach(e => {\n e.dispatchEvent(new CustomEvent(\"cotomy:changelayout\"));\n });\n });\n\n\n // DOM要素の削除をトラップして、removedイベントを発生させる\n this._mutationObserver = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n mutation.removedNodes.forEach(node => {\n if (typeof HTMLElement !== \"undefined\" && node instanceof HTMLElement) {\n const element = new CotomyElement(node);\n if (!element.hasAttribute(\"data-cotomy-moving\") && !element.attached) {\n element.trigger(\"removed\");\n }\n }\n });\n });\n });\n this._mutationObserver.observe(this.body.element, { childList: true, subtree: true });\n }\n return this;\n }\n\n public get reloading(): boolean {\n return this._reloading;\n }\n\n public reload() {\n this._reloading = true;\n location.reload();\n }\n\n\n\n public get body(): CotomyElement {\n return this._body;\n }\n\n public append(e: CotomyElement): this {\n this._body.append(e);\n return this;\n }\n\n public moveNext(focused: CotomyElement, shift: boolean = false) {\n const selector = \"input, a, select, button, textarea\";\n const focusableElements = Array.from(this.body.element.querySelectorAll(selector))\n .map(e => new CotomyElement(<HTMLElement>e))\n .filter(e => e.width > 0 && e.height > 0 && e.visible && e.enabled && !e.hasAttribute(\"readonly\"));\n\n const focusedIndex = focusableElements.map(e => e.element).indexOf(focused.element);\n\n let nextIndex = focusedIndex + (shift ? -1 : 1);\n if (nextIndex >= focusableElements.length) {\n nextIndex = 0;\n } else if (nextIndex < 0) {\n nextIndex = focusableElements.length - 1;\n }\n\n // 次の要素が存在する場合、フォーカスを移動\n if (focusableElements[nextIndex]) {\n focusableElements[nextIndex].setFocus();\n }\n }\n\n public trigger(event: string): this;\n public trigger(event: string, e: Event): this;\n public trigger(event: string, e?: Event): this {\n window.dispatchEvent(e ?? new Event(event, { bubbles: true }));\n return this;\n }\n\n public on(event: string | string[], handle: (e: Event) => void | Promise<void>): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (!this._eventHandlers[eventName]) this._eventHandlers[eventName] = [];\n this._eventHandlers[eventName].push(handle);\n window.addEventListener(eventName, handle);\n });\n return this;\n }\n\n public off(event: string | string[], handle?: (e: Event) => void | Promise<void>): this {\n const events = Array.isArray(event) ? event : [event];\n events.forEach(eventName => {\n if (handle) {\n window.removeEventListener(eventName, handle);\n const handlers = this._eventHandlers[eventName]?.filter(h => h !== handle) ?? [];\n if (handlers.length > 0) {\n this._eventHandlers[eventName] = handlers;\n } else {\n delete this._eventHandlers[eventName];\n }\n } else {\n for (const h of this._eventHandlers[eventName] ?? []) {\n window.removeEventListener(eventName, h);\n }\n delete this._eventHandlers[eventName];\n }\n });\n return this;\n }\n\n public load(handle: (e: Event) => void | Promise<void>): this {\n return this.on(\"load\", handle);\n }\n\n public ready(handle: ((e: Event) => void | Promise<void>)): this {\n return this.on(\"cotomy:ready\", handle);\n }\n\n public resize(): this;\n public resize(handle: (event: Event) => void | Promise<void>): this;\n public resize(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"resize\", handle);\n } else {\n return this.trigger(\"resize\");\n }\n }\n\n public scroll(): this;\n public scroll(handle: (event: Event) => void | Promise<void>): this;\n public scroll(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"scroll\", handle);\n } else {\n return this.trigger(\"scroll\");\n }\n }\n\n public scrollTo(target: string | CotomyElement | HTMLElement, options: CotomyScrollOptions | Partial<CotomyScrollOptions> = {}): this {\n if (typeof target === \"string\") {\n const element = CotomyElement.first(target);\n element?.scrollIn(options);\n return this;\n }\n\n if (target instanceof CotomyElement) {\n target.scrollIn(options);\n return this;\n }\n\n new CotomyElement(target).scrollIn(options);\n return this;\n }\n\n public changeLayout(): this;\n public changeLayout(handle: (event: Event) => void | Promise<void>): this;\n public changeLayout(handle?: (event: Event) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"cotomy:changelayout\", handle);\n } else {\n return this.trigger(\"cotomy:changelayout\");\n }\n }\n\n public pageshow(): this;\n public pageshow(handle: (event: PageTransitionEvent) => void | Promise<void>): this;\n public pageshow(handle?: (event: PageTransitionEvent) => void | Promise<void>): this {\n if (handle) {\n return this.on(\"pageshow\", handle as (e: Event) => void | Promise<void>);\n } else {\n return this.trigger(\"pageshow\");\n }\n }\n\n public get scrollTop(): number {\n return window.scrollY || document.documentElement.scrollTop;\n }\n\n public get scrollLeft(): number {\n return window.scrollX || document.documentElement.scrollLeft;\n }\n\n public get width(): number {\n return window.innerWidth;\n }\n\n public get height(): number {\n return window.innerHeight;\n }\n\n public get documentWidth(): number {\n return document.documentElement.scrollWidth;\n }\n\n public get documentHeight(): number {\n return document.documentElement.scrollHeight;\n }\n}\n","import dayjs from 'dayjs';\nimport { StatusCodes } from \"http-status-codes\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from './debug';\nimport { CotomyElement } from \"./view\";\n\n\n\n//#region 例外クラス\n// 共通基底例外\nexport class CotomyApiException extends Error {\n constructor(\n public readonly status: number,\n public readonly message: string,\n public readonly response: CotomyApiResponse,\n public readonly bodyText: string = \"\"\n ) {\n super(message);\n this.name = \"CotomyApiException\";\n }\n}\n\n// クライアントエラー系\nexport class CotomyHttpClientError extends CotomyApiException {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyHttpClientError\";\n }\n}\nexport class CotomyUnauthorizedException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyUnauthorizedException\";\n }\n}\nexport class CotomyForbiddenException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyForbiddenException\";\n }\n}\nexport class CotomyNotFoundException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyNotFoundException\";\n }\n}\nexport class CotomyConflictException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyConflictException\";\n }\n}\n\nexport class CotomyRequestInvalidException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyRequestInvalidException\";\n }\n}\n\nexport class CotomyTooManyRequestsException extends CotomyHttpClientError {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyTooManyRequestsException\";\n }\n}\n\nexport class CotomyHttpServerError extends CotomyApiException {\n constructor(status: number, message: string, response: CotomyApiResponse, body = \"\") {\n super(status, message, response, body);\n this.name = \"CotomyHttpServerError\";\n }\n}\n\nexport class CotomyResponseJsonParseException extends Error {\n constructor(message: string = \"Failed to parse JSON response.\") {\n super(message);\n this.name = \"CotomyResponseJsonParseException\";\n }\n}\nexport class CotomyInvalidFormDataBodyException extends Error {\n constructor(message: string = \"Body must be an instance of FormData.\") {\n super(message);\n this.name = \"CotomyInvalidFormDataBodyException\";\n }\n}\n\n//#endregion 例外クラス\n\n\n//#region 定数定義\n\nclass Methods {\n public static readonly GET = 'GET';\n public static readonly POST = 'POST';\n public static readonly PUT = 'PUT';\n public static readonly PATCH = 'PATCH';\n public static readonly DELETE = 'DELETE';\n public static readonly HEAD = 'HEAD';\n public static readonly OPTIONS = 'OPTIONS';\n public static readonly TRACE = 'TRACE';\n public static readonly CONNECT = 'CONNECT';\n}\n\nclass ResponseMessages {\n private static readonly _responseMessages: { [key: number]: string } = {\n [StatusCodes.BAD_REQUEST]: \"There is an error in the input. Please check and try again.\",\n [StatusCodes.UNAUTHORIZED]: \"You are not authenticated. Please log in again.\",\n [StatusCodes.FORBIDDEN]: \"You do not have permission to use this feature. If necessary, please contact the administrator.\",\n [StatusCodes.NOT_FOUND]: \"The specified information could not be found. It may have been deleted. Please start over or contact the administrator.\",\n [StatusCodes.METHOD_NOT_ALLOWED]: \"This operation is currently prohibited on the server.\",\n [StatusCodes.NOT_ACCEPTABLE]: \"The request cannot be accepted. Processing has been stopped.\",\n [StatusCodes.PROXY_AUTHENTICATION_REQUIRED]: \"Proxy authentication is required for internet access.\",\n [StatusCodes.REQUEST_TIMEOUT]: \"The request timed out. Please try again.\",\n [StatusCodes.CONFLICT]: \"The identifier you are trying to register already exists. Please check the content and try again.\",\n [StatusCodes.PAYMENT_REQUIRED]: \"Payment is required for this operation. Please check.\",\n [StatusCodes.GONE]: \"The requested resource is no longer available.\",\n [StatusCodes.LENGTH_REQUIRED]: \"The Content-Length header field is required for the request.\",\n [StatusCodes.PRECONDITION_FAILED]: \"The request failed because the precondition was not met.\",\n [StatusCodes.UNSUPPORTED_MEDIA_TYPE]: \"The requested media type is not supported.\",\n [StatusCodes.EXPECTATION_FAILED]: \"The server cannot meet the Expect header of the request.\",\n [StatusCodes.MISDIRECTED_REQUEST]: \"The server cannot appropriately process this request.\",\n [StatusCodes.UNPROCESSABLE_ENTITY]: \"There is an error in the request content.\",\n [StatusCodes.LOCKED]: \"The requested resource is locked.\",\n [StatusCodes.FAILED_DEPENDENCY]: \"The request failed due to dependency on a previous failed request.\",\n [StatusCodes.UPGRADE_REQUIRED]: \"A protocol upgrade is required to perform this operation.\",\n [StatusCodes.PRECONDITION_REQUIRED]: \"This request requires a precondition.\",\n [StatusCodes.TOO_MANY_REQUESTS]: \"Too many requests have been sent in a short time. Please wait and try again.\",\n [StatusCodes.REQUEST_HEADER_FIELDS_TOO_LARGE]: \"The request headers are too large.\",\n [StatusCodes.INTERNAL_SERVER_ERROR]: \"An unexpected error occurred. Please try again later.\",\n [StatusCodes.BAD_GATEWAY]: \"The server is currently overloaded. Please wait and try again later.\",\n [StatusCodes.SERVICE_UNAVAILABLE]: \"The service is temporarily unavailable. Please try again later.\",\n [StatusCodes.GATEWAY_TIMEOUT]: \"The communication timed out. Please try again.\",\n [StatusCodes.HTTP_VERSION_NOT_SUPPORTED]: \"The current communication method is not supported.\",\n [StatusCodes.NOT_IMPLEMENTED]: \"The server does not support the requested functionality.\",\n [StatusCodes.INSUFFICIENT_STORAGE]: \"The server has insufficient storage.\",\n [StatusCodes.NETWORK_AUTHENTICATION_REQUIRED]: \"Network authentication is required.\",\n 413: \"The payload of the request is too large. Please check the size.\", // PAYLOAD_TOO_LARGE\n 414: \"The request URI is too long.\", // URI_TOO_LONG\n 416: \"The requested range is invalid.\", // RANGE_NOT_SATISFIABLE\n 508: \"The server detected a loop.\", // LOOP_DETECTED\n 510: \"The request does not include the required extensions.\", // NOT_EXTENDED\n };\n\n public static getMessage(status: number): string {\n return this._responseMessages[status] || `Unexpected error: ${status}`;\n }\n}\n\n//#endregion 定数定義\n\n\n\n\n\n\n\n//#region APIレスポンスクラス\n\nexport class CotomyApiResponse {\n private _object: any | null = null;\n private _text: string | null = null;\n\n public constructor(private readonly _response?: Response | null) {\n }\n\n public get available(): boolean {\n return !!this._response;\n }\n\n public get empty(): boolean {\n return !this._response || this._response.status === 0;\n }\n\n public get ok(): boolean {\n return this._response?.ok ?? false;\n }\n\n public get status(): number {\n return this._response?.status ?? 0;\n }\n\n public get statusText(): string {\n return this._response?.statusText ?? '';\n }\n\n public get headers(): Headers {\n return this._response?.headers ?? new Headers();\n }\n\n public async textAsync(): Promise<string> {\n if (!this._response) return \"\";\n return this._text ?? (this._text = await this._response?.text());\n }\n\n /**\n * Centralized helper to ensure response JSON is parsed exactly once.\n */\n private async _ensureJsonParsedAsync(defaultValue: any): Promise<any> {\n if (this._response && this._object === null) {\n try {\n const text = await this.textAsync();\n if (!text) {\n this._object = defaultValue;\n } else {\n this._object = JSON.parse(text);\n }\n } catch (error) {\n throw new CotomyResponseJsonParseException(\n `Failed to parse JSON response: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n return this._object ?? defaultValue;\n }\n\n public async objectAsync<T = any>(defaultValue: T = {} as T): Promise<T> {\n return await this._ensureJsonParsedAsync(defaultValue);\n }\n\n public async arrayAsync<T = any>(defaultValue: T[] = []): Promise<T[]> {\n const parsed = await this._ensureJsonParsedAsync(defaultValue);\n return Array.isArray(parsed) ? parsed : defaultValue;\n }\n}\n\n//#endregion APIレスポンスクラス\n\n\n\n\n//#region APIから取得したデータの展開\n\nexport interface ICotomyBindNameGenerator {\n create(name: string, parent?: string): string;\n createIndex(parent: string | undefined, index: number): string;\n}\n\nexport class CotomyBracketBindNameGenerator implements ICotomyBindNameGenerator {\n create(name: string, parent?: string): string {\n return parent ? `${parent}[${name}]` : name;\n }\n\n createIndex(parent: string | undefined, index: number): string {\n return this.create(String(index), parent);\n }\n}\n\nexport class CotomyDotBindNameGenerator implements ICotomyBindNameGenerator {\n create(name: string, parent?: string): string {\n return parent ? `${parent}.${name}` : name;\n }\n\n createIndex(parent: string | undefined, index: number): string {\n return parent ? `${parent}[${index}]` : `[${index}]`;\n }\n}\n\nexport class CotomyViewRenderer {\n private _renderers: { [key: string]: (element: CotomyElement, value: any) => void } = {};\n private _builded: boolean = false;\n\n public constructor(public readonly element: CotomyElement, public readonly bindNameGenerator: ICotomyBindNameGenerator) {\n }\n\n protected get locale(): string {\n const languages = (navigator.languages && navigator.languages.length ? navigator.languages : [navigator.language]).filter(Boolean);\n let locale = this.element.attribute(\"data-cotomy-locale\")\n || this.element.closest(\"[data-cotomy-locale]\")?.attribute(\"data-cotomy-locale\")\n || languages[0]\n || 'en-US';\n return locale.includes(\"-\") ? locale.split(\"-\")[0] : locale;\n }\n\n public renderer(type: string, callback: (element: CotomyElement, value: any) => void): this {\n this._renderers[type] = callback;\n return this;\n }\n\n protected get renderers(): { [key: string]: (element: CotomyElement, value: any) => void } {\n this.initialize();\n return this._renderers;\n }\n\n protected get initialized(): boolean {\n return this._builded;\n }\n\n protected initialize(): this {\n if (!this.initialized) {\n this.renderer(\"mail\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"mailto:${value}\">${value}</a>`).appendTo(element);\n }\n });\n\n this.renderer(\"tel\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"tel:${value}\">${value}</a>`).appendTo(element);\n }\n });\n \n this.renderer(\"url\", (element, value) => {\n if (value) {\n new CotomyElement(/* html */`<a href=\"${value}\" target=\"_blank\">${value}</a>`).appendTo(element);\n }\n });\n\n this.renderer(\"number\", (element, value) => {\n if (value !== undefined && value !== null) {\n // ISO 4217 通貨コード\n const currency = element.attribute(\"data-cotomy-currency\")\n || element.closest(\"[data-cotomy-currency]\")?.attribute(\"data-cotomy-currency\");\n const fractionDigitsAttribute = element.attribute(\"data-cotomy-fraction-digits\")\n || element.closest(\"[data-cotomy-fraction-digits]\")?.attribute(\"data-cotomy-fraction-digits\");\n const fractionDigits = fractionDigitsAttribute ? Number.parseInt(fractionDigitsAttribute, 10) : undefined;\n const hasFractionDigits = Number.isFinite(fractionDigits)\n && fractionDigits && fractionDigits >= 0 && fractionDigits <= 20;\n\n const options: Intl.NumberFormatOptions = {\n ...(currency ? { style: \"currency\", currency } : {}),\n ...(hasFractionDigits ? { minimumFractionDigits: fractionDigits, maximumFractionDigits: fractionDigits } : {}),\n };\n\n element.text = new Intl.NumberFormat(this.locale, options).format(value);\n }\n });\n\n this.renderer(\"utc\", (element, value) => {\n if (value) {\n const hasOffset = /[+-]\\d{2}:\\d{2}$/.test(value);\n const date = hasOffset ? new Date(value) : new Date(`${value}Z`);\n if (!isNaN(date.getTime())) {\n const format = element.attribute(\"data-cotomy-format\") ?? \"YYYY/MM/DD HH:mm\";\n element.text = dayjs(date).format(format);\n }\n }\n });\n\n this.renderer(\"date\", (element, value) => {\n if (value) {\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n const format = element.attribute(\"data-cotomy-format\") ?? \"YYYY/MM/DD\";\n element.text = dayjs(date).format(format);\n }\n }\n });\n\n this._builded = true;\n }\n return this;\n }\n\n protected bindPrimitiveValue(propertyName: string, value: any): void {\n this.element.find(`[data-cotomy-bind=\"${propertyName}\" i]`).forEach(element => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Bind)) {\n console.debug(`Binding data to element [data-cotomy-bind=\"${propertyName}\"]:`, value);\n }\n const type = element.attribute(\"data-cotomy-bindtype\")?.toLowerCase();\n if (type && this.renderers[type]) {\n this.renderers[type](element, value);\n } else {\n element.text = String(value ?? \"\");\n }\n });\n }\n\n protected async applyArrayAsync(values: any[], propertyName: string): Promise<void> {\n for (let index = 0; index < values.length; index++) {\n const item = values[index];\n const itemName = this.bindNameGenerator.createIndex(propertyName, index);\n if (Array.isArray(item)) {\n await this.applyArrayAsync(item, itemName);\n continue;\n }\n if (item && typeof item === \"object\") {\n await this.applyObjectAsync(item, itemName);\n continue;\n }\n this.bindPrimitiveValue(itemName, item);\n }\n }\n\n protected async applyObjectAsync(target: any, propertyName: string | undefined = undefined): Promise<void> {\n if (!propertyName) {\n this.element.find(\"[data-cotomy-bind]\").forEach(e => e.clear());\n }\n for (const [key, value] of Object.entries(await target)) {\n const pname = this.bindNameGenerator.create(key, propertyName);\n if (Array.isArray(value)) {\n await this.applyArrayAsync(value, pname);\n continue;\n }\n if (value && typeof value === \"object\") {\n await this.applyObjectAsync(value, pname);\n continue;\n }\n this.bindPrimitiveValue(pname, value);\n }\n }\n\n public async applyAsync(respose: CotomyApiResponse): Promise<this> {\n if (!respose.available) {\n throw new Error(\"Response is not available.\");\n }\n\n await this.applyObjectAsync(await respose.objectAsync());\n return this;\n }\n}\n\n//#endregion\n\n\n\n//#region インターフェース定義\n\nexport interface ICotomyApiOptions {\n baseUrl?: string | null;\n headers?: Record<string, string> | null;\n credentials?: RequestCredentials | null;\n redirect?: RequestRedirect | null;\n cache?: RequestCache | null;\n referrerPolicy?: ReferrerPolicy | null;\n mode?: RequestMode | null;\n keepalive?: boolean | null;\n integrity?: string | null;\n}\n\nexport interface ICotomyRestSubmitForm {\n method: string;\n action: string;\n body: globalThis.FormData | Record<string, string> | any;\n}\n\n//#endregion インターフェース定義\n\n\n\n\nexport class CotomyApi {\n private readonly _abortController: AbortController = new AbortController();\n\n public constructor(private readonly _options: ICotomyApiOptions = {\n baseUrl: null, headers: null, credentials: null, redirect: null,\n cache: null, referrerPolicy: null, mode: null, keepalive: true,\n integrity: '', }) {\n }\n\n public get baseUrl(): string {\n return this._options.baseUrl || '';\n }\n\n public get headers(): Record<string, string> {\n return this._options.headers || {};\n }\n\n public get credentials(): RequestCredentials {\n return this._options.credentials || 'same-origin';\n }\n\n public get redirect(): RequestRedirect {\n return this._options.redirect || 'follow';\n }\n\n public get cache(): RequestCache {\n return this._options.cache || 'no-cache';\n }\n\n public get referrerPolicy(): ReferrerPolicy {\n return this._options.referrerPolicy || 'no-referrer';\n }\n\n public get mode(): RequestMode {\n return this._options.mode || 'cors';\n }\n\n public get keepalive(): boolean {\n return this._options.keepalive || true;\n }\n\n public get integrity(): string {\n return this._options.integrity || '';\n }\n\n public get abortController(): AbortController {\n return this._abortController;\n }\n\n\n private async requestAsync<T extends CotomyApiResponse = CotomyApiResponse>(method: string, path: string, body?: globalThis.FormData | Record<string, string> | any, signal?: AbortSignal, responseType?: new (response?: Response | null) => T): Promise<T> {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`API request: ${method} ${path}`, { body, headers: this.headers });\n }\n\n //#region Content-Type毎のbody変換処理\n\n const bodyTransformers: { [key: string]: (body: globalThis.FormData | Record<string, string> | any) => any } = {\n \"application/json\": (body) => JSON.stringify(body),\n \"application/x-www-form-urlencoded\": (body) => {\n if (body instanceof globalThis.FormData) {\n let params = new URLSearchParams();\n body.forEach((value, key) => {\n params.append(key, String(value));\n });\n return params.toString();\n } else {\n return new URLSearchParams(body).toString();\n }\n },\n \"multipart/form-data\": (body) => {\n if (body instanceof globalThis.FormData) {\n return body;\n }\n const formData = new globalThis.FormData();\n for (const [key, value] of Object.entries(body)) {\n formData.append(key, String(value));\n }\n return formData;\n } \n };\n\n //#endregion\n\n\n // 先頭がアルファベットの場合は絶対または相対URLとみなす\n // それ以外はベースURLを使用して組み立てる\n const url = /^[a-zA-Z]/.test(path) ? path\n : `${(this.baseUrl || '').replace(/\\/$/, '')}/${path.replace(/^\\//, '')}`;\n const headers = new Headers(this.headers);\n\n if (headers.has('Content-Type') && headers.get(\"Content-Type\") === \"multipart/form-data\") {\n // multipart/form-dataの場合はbodyをFormDataとして送信するため、Content-Typeヘッダーを削除する\n headers.delete('Content-Type');\n }\n\n const ct = headers.get('Content-Type') || \"multipart/form-data\";\n if (ct === 'multipart/form-data' && body && !(body instanceof globalThis.FormData)) {\n if (typeof body !== 'object' || Array.isArray(body)) {\n throw new CotomyInvalidFormDataBodyException(\n 'Body must be FormData or a plain object when using multipart/form-data.'\n );\n }\n }\n \n const responseClass = responseType ?? CotomyApiResponse as new (response?: Response | null) => T;\n const response = new responseClass(await fetch(url, {\n method,\n headers,\n credentials: this.credentials,\n body: body ? (bodyTransformers[ct] ? bodyTransformers[ct](body) : body) : undefined,\n signal: signal ?? this._abortController.signal,\n redirect: this.redirect,\n cache: this.cache,\n referrerPolicy: this.referrerPolicy,\n mode: this.mode,\n keepalive: this.keepalive,\n integrity: this.integrity,\n }));\n\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`response body: ${response.status} ${response.statusText}`, await response.textAsync());\n }\n\n // 400番台と500番台のエラーハンドリング\n if (response.status >= 400 && response.status < 600) {\n const errorBody = await response.textAsync().catch(() => 'No response body available');\n const errorMessage = response.statusText || ResponseMessages.getMessage(response.status) || `Unexpected error: ${response.status}`;\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(`API request failed: ${errorMessage}`, response, errorBody);\n }\n switch (response.status) {\n case StatusCodes.BAD_REQUEST:\n case StatusCodes.UNPROCESSABLE_ENTITY:\n throw new CotomyRequestInvalidException(response.status, errorMessage, response, errorBody);\n case StatusCodes.UNAUTHORIZED:\n throw new CotomyUnauthorizedException(response.status, errorMessage, response, errorBody);\n case StatusCodes.FORBIDDEN:\n throw new CotomyForbiddenException(response.status, errorMessage, response, errorBody);\n case StatusCodes.NOT_FOUND:\n throw new CotomyNotFoundException(response.status, errorMessage, response, errorBody);\n case StatusCodes.CONFLICT:\n case StatusCodes.GONE:\n throw new CotomyConflictException(response.status, errorMessage, response, errorBody);\n case StatusCodes.TOO_MANY_REQUESTS:\n throw new CotomyTooManyRequestsException(response.status, errorMessage, response, errorBody);\n default:\n if (response.status < 500) {\n throw new CotomyHttpClientError(response.status, errorMessage, response, errorBody);\n } else {\n throw new CotomyHttpServerError(response.status, errorMessage, response, errorBody);\n }\n }\n }\n\n return response as T;\n }\n\n\n //#region HTTPメソッド\n\n public async getAsync(path: string, parameters?: globalThis.FormData | Record<string, string | number>): Promise<CotomyApiResponse> {\n let queryString = '';\n if (parameters instanceof globalThis.FormData) {\n let params = new URLSearchParams();\n parameters.forEach((value, key) => {\n params.append(key, String(value));\n });\n queryString = params.toString();\n } else if (parameters) {\n queryString = new URLSearchParams(\n Object.fromEntries(\n Object.entries(parameters).map(([key, value]) => [key, String(value)])\n )\n ).toString();\n }\n const fullUrl = queryString ? `${path}?${queryString}` : path;\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.debug(`GET request to: ${fullUrl}`);\n }\n return this.requestAsync(Methods.GET, fullUrl);\n }\n\n public async postAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.POST, path, body);\n }\n\n public async putAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.PUT, path, body);\n }\n\n public async patchAsync(path: string, body: globalThis.FormData | Record<string, string | number> | any): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.PATCH, path, body);\n }\n\n public async deleteAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.DELETE, path);\n }\n\n public async headAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.HEAD, path);\n }\n\n public async optionsAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.OPTIONS, path);\n }\n\n public async traceAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.TRACE, path);\n }\n\n public async connectAsync(path: string): Promise<CotomyApiResponse> {\n return this.requestAsync(Methods.CONNECT, path);\n }\n\n public async submitAsync(form: ICotomyRestSubmitForm): Promise<CotomyApiResponse> {\n return form.method.toUpperCase() === Methods.GET ? this.getAsync(form.action, form.body)\n : this.requestAsync(form.method.toUpperCase(), form.action, form.body);\n }\n\n //#endregion HTTPメソッド\n}\n","import dayjs from \"dayjs\";\nimport { StatusCodes } from \"http-status-codes\";\nimport { CotomyApi, CotomyApiException, CotomyApiResponse, CotomyBracketBindNameGenerator, CotomyNotFoundException, CotomyViewRenderer, ICotomyBindNameGenerator } from \"./api\";\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\nimport { CotomyElement, CotomyWindow } from \"./view\";\n\n\n\n\nexport abstract class CotomyForm extends CotomyElement {\n public override generateId(prefix: string = \"__cotomy_form__\"): this {\n return super.generateId(prefix);\n }\n\n\n //#region フォームの基本情報\n\n protected get method(): string {\n return this.attribute(\"method\") ?? \"get\";\n }\n\n public get actionUrl(): string {\n return this.attribute(\"action\") ?? location.pathname + location.search;\n }\n\n //#endregion\n\n\n\n //#region フォームの再読み込み\n\n public async reloadAsync(): Promise<void> {\n CotomyWindow.instance.reload();\n }\n\n public get autoReload(): boolean {\n return this.attribute(\"data-cotomy-autoreload\") !== \"false\";\n }\n\n public set autoReload(value: boolean) {\n if (value) {\n this.attribute(\"data-cotomy-autoreload\", null);\n } else {\n this.attribute(\"data-cotomy-autoreload\", \"false\");\n }\n }\n\n //#endregion\n\n\n\n //#region フォームの構築\n\n public get initialized(): boolean {\n return this.hasAttribute(\"data-cotomy-initialized\");\n }\n\n public initialize(): this {\n if (!this.initialized) {\n this.on(\"submit\", async e => {\n e.preventDefault();\n e.stopPropagation();\n await this.submitAsync();\n });\n\n this.attribute(\"data-cotomy-initialized\", \"\");\n }\n return this;\n }\n\n //#endregion\n\n\n\n //#region Submit\n\n public abstract submitAsync(): Promise<void>;\n\n //#endregion\n}\n\n\n\nexport class CotomyQueryForm extends CotomyForm {\n protected override get method(): string {\n return \"get\"; // QueryFormはGETメソッドを使用することが前提\n }\n\n\n public override async submitAsync(): Promise<void> {\n const url = this.actionUrl;\n\n // クエリパラメータを連想配列にする\n const queryParams: { [key: string]: string } = {};\n const queryString = url.split(\"?\")[1];\n if (queryString) {\n queryString.split(\"&\").forEach(param => {\n const [key, value] = param.split(\"=\");\n if (key && value) {\n queryParams[key] = decodeURIComponent(value);\n }\n });\n }\n\n // フォームの入力値をクエリパラメータに追加\n this.find(\"[name]\").forEach(input => {\n const name = input.attribute(\"name\");\n if (name) {\n const value = input.value;\n if (value) {\n queryParams[name] = encodeURIComponent(value);\n } else {\n delete queryParams[name]; // 空の値は削除\n }\n }\n });\n\n // クエリパラメータを再構築\n const newQueryString = Object.entries(queryParams)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"&\");\n\n location.href = `${url.split(\"?\")[0]}?${newQueryString}`;\n }\n}\n\n\nexport class CotomyApiFailedEvent extends Event {\n public constructor(private _response: CotomyApiResponse, eventName: string = \"cotomy:apifailed\") {\n super(eventName, { bubbles: true, cancelable: true });\n }\n\n public get response(): CotomyApiResponse {\n return this._response;\n }\n}\n\n\nexport class CotomyApiForm extends CotomyForm {\n public apiClient(): CotomyApi {\n return new CotomyApi();\n }\n\n public override get actionUrl(): string {\n return this.attribute(\"action\")!;\n }\n\n\n\n //#region API Submit\n\n public apiFailed(handle: ((event: CotomyApiFailedEvent) => void | Promise<void>)): this {\n this.on(\"cotomy:apifailed\", async e => {\n await handle(e as CotomyApiFailedEvent);\n });\n return this;\n }\n\n protected triggerApiFailedEvent(response: CotomyApiResponse): void {\n this.trigger(\"cotomy:apifailed\", new CotomyApiFailedEvent(response));\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(\"API request failed:\", response);\n }\n }\n\n public submitFailed(handle: ((event: CotomyApiFailedEvent) => void | Promise<void>)): this {\n this.on(\"cotomy:submitfailed\", async e => {\n await handle(e as CotomyApiFailedEvent);\n });\n return this;\n }\n\n protected triggerSubmitFailedEvent(response: CotomyApiResponse): void {\n this.trigger(\"cotomy:submitfailed\", new CotomyApiFailedEvent(response, \"cotomy:submitfailed\"));\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Api)) {\n console.error(\"Submit failed:\", response);\n }\n }\n\n protected override get method(): string {\n return this.attribute(\"method\") ?? \"post\";\n }\n\n public formData(): FormData {\n const formElement = <HTMLFormElement>this.element;\n const formData = new FormData(formElement);\n\n this.find(\"input[type=datetime-local][name]:not([disabled])\").forEach(input => {\n const localDateTime = input.value;\n if (localDateTime) {\n const date = new Date(localDateTime);\n if (!isNaN(date.getTime())) {\n formData.set(input.attribute(\"name\")!, dayjs(date).format(\"YYYY-MM-DDTHH:mmZ\"));\n }\n }\n });\n\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.FormData)) {\n console.debug(\"FormData:\", Array.from(formData.entries()));\n }\n\n return formData;\n };\n\n public override async submitAsync(): Promise<void> {\n const formData = this.formData();\n await this.submitToApiAsync(formData);\n }\n\n protected async submitToApiAsync(formData: FormData): Promise<CotomyApiResponse> {\n const api = this.apiClient();\n\n try {\n const response = await api.submitAsync({\n method: this.method,\n action: this.actionUrl,\n body: formData,\n });\n\n return response;\n } catch (error) {\n if (error instanceof CotomyApiException) {\n this.triggerApiFailedEvent(error.response);\n this.triggerSubmitFailedEvent(error.response);\n }\n throw error;\n }\n }\n\n //#endregion\n}\n\n\n\nexport class CotomyEntityApiForm extends CotomyApiForm {\n\n public get entityKey(): string | undefined {\n return this.attribute(\"data-cotomy-entity-key\") || undefined;\n }\n\n protected get requiresEntityKey(): boolean {\n return this.attribute(\"data-cotomy-identify\") !== \"false\";\n }\n\n protected get hasEntityKey(): boolean {\n return !!this.entityKey;\n }\n\n public override get actionUrl(): string {\n const action = this.attribute(\"action\")!;\n const normalized = action.replace(/\\/+$/, \"\");\n\n if (!this.entityKey) {\n return action.endsWith(\"/\") ? action : `${normalized}/`;\n }\n\n return `${normalized}/${encodeURIComponent(this.entityKey)}`;\n }\n\n protected override get method(): string {\n if (this.hasAttribute(\"method\") && this.attribute(\"method\") !== \"\") {\n return this.attribute(\"method\")!;\n }\n\n return this.hasEntityKey ? \"put\" : \"post\";\n }\n\n\n //#region データ識別\n\n protected setEntityKey(response: CotomyApiResponse) {\n if (this.requiresEntityKey && response.status === StatusCodes.CREATED) {\n if (this.hasEntityKey) {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.FormLoad)) {\n console.warn(\"Entity key already exists, but server responded with 201 Created. Possible duplicate POST.\");\n }\n return;\n }\n\n const location = response.headers.get(\"Location\");\n if (!location) return;\n\n const normalize = (url: string) => {\n const s = url.replace(/[?#].*$/, \"\");\n return s.endsWith(\"/\") ? s.slice(0, -1) : s;\n };\n\n const toPath = (u: string) => {\n try { return new URL(u, location).pathname; } catch { return u; }\n };\n\n const baseAction = normalize(toPath(this.attribute(\"action\")!));\n const locPath = normalize(toPath(location));\n const actionParts = baseAction.split(\"/\");\n const locationParts = locPath.split(\"/\");\n const isPrefix = locationParts.length >= actionParts.length && actionParts.every((p, i) => p === locationParts[i]);\n if (!isPrefix) {\n throw new Error(`Location path does not start with action path. action=\"${baseAction}\", location=\"${locPath}\"`);\n }\n\n const addedParts = locationParts.slice(actionParts.length).filter(Boolean);\n if (addedParts.length === 1 && addedParts[0]) {\n this.attribute(\"data-cotomy-entity-key\", addedParts[0]);\n } else {\n const msg = `Location does not contain a single entity key segment.\n action=\"${baseAction}\", location=\"${locPath}\", added=[\"${addedParts.join('\",\"')}\"]`;\n throw new Error(msg);\n }\n }\n }\n\n protected override async submitToApiAsync(formData: FormData): Promise<CotomyApiResponse> {\n const response = await super.submitToApiAsync(formData);\n\n // APIのレスポンスからidを設定\n if (this.requiresEntityKey && response.status === StatusCodes.CREATED) {\n this.setEntityKey(response);\n }\n\n return response;\n }\n\n //#endregion\n}\n\n\n\nexport class CotomyEntityFillApiForm extends CotomyEntityApiForm {\n private _fillers: { [key: string]: (input: CotomyElement, value: any) => void } = {};\n\n public filler(type: string, func: (input: CotomyElement, value: any) => void): this {\n this._fillers[type] = func;\n return this;\n }\n\n public override initialize(): this {\n if (!this.initialized) {\n super.initialize();\n\n this.filler(\"datetime-local\", (input, value) => {\n const hasOffset = /[+-]\\d{2}:\\d{2}$/.test(value);\n const date = hasOffset ? new Date(value) : new Date(`${value}Z`);\n if (!isNaN(date.getTime())) {\n input.value = dayjs(date).format(\"YYYY-MM-DDTHH:mm\");\n } else {\n input.value = \"\";\n }\n });\n\n this.filler(\"checkbox\", (input, value) => {\n input.attribute(\"checked\", null);\n if (value) {\n input.attribute(\"checked\", \"\");\n }\n });\n\n this.filler(\"radio\", (input, value) => {\n input.attribute(\"checked\", null);\n if (input.value === value) {\n input.attribute(\"checked\", \"\");\n }\n });\n\n CotomyWindow.instance.ready(async () => {\n await this.loadAsync();\n });\n }\n return this;\n }\n\n\n\n\n\n public override async reloadAsync(): Promise<void> {\n await this.loadAsync();\n }\n\n protected loadActionUrl(): string {\n return this.actionUrl;\n }\n\n protected bindNameGenerator(): ICotomyBindNameGenerator {\n return new CotomyBracketBindNameGenerator();\n }\n\n public renderer(): CotomyViewRenderer {\n return new CotomyViewRenderer(this, this.bindNameGenerator());\n }\n\n protected canLoad(): boolean {\n return this.hasEntityKey;\n }\n\n protected async loadAsync(): Promise<CotomyApiResponse> {\n if (!this.canLoad()) {\n return new CotomyApiResponse();\n }\n\n const api = this.apiClient();\n try {\n const response = await api.getAsync(this.loadActionUrl());\n await this.fillAsync(response);\n return response;\n } catch (error) {\n if (error instanceof CotomyApiException) {\n this.triggerApiFailedEvent(error.response);\n }\n if (error instanceof CotomyNotFoundException) {\n return error.response;\n }\n throw error;\n }\n }\n\n protected applyValueToInputs(pname: string, value: any): void {\n this.find(`input[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]):not([multiple]),\n textarea[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]), \n select[name=\"${pname}\" i]:not([data-cotomy-fill=\"false\"]):not([multiple])`).forEach(input => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Fill)) {\n console.debug(`Filling input[name=\"${pname}\"] with value:`, value);\n }\n const type = input.attribute(\"type\")?.toLowerCase();\n if (type && this._fillers[type]) {\n this._fillers[type](input, value);\n } else {\n input.value = String(value || \"\");\n }\n });\n }\n\n protected async fillArrayAsync(bindNameGenerator: ICotomyBindNameGenerator, values: any[], propertyName: string): Promise<void> {\n for (let index = 0; index < values.length; index++) {\n const item = values[index];\n const itemName = bindNameGenerator.createIndex(propertyName, index);\n if (Array.isArray(item)) {\n await this.fillArrayAsync(bindNameGenerator, item, itemName);\n continue;\n }\n if (item && typeof item === \"object\") {\n await this.fillObjectAsync(bindNameGenerator, item, itemName);\n continue;\n }\n this.applyValueToInputs(itemName, item);\n }\n }\n\n protected async fillObjectAsync(bindNameGenerator: ICotomyBindNameGenerator, target: any, propertyName: string | undefined = undefined): Promise<void> {\n for (const [key, value] of Object.entries(target)) {\n if (key.endsWith('[]')) {\n continue;\n }\n\n const pname = bindNameGenerator.create(key, propertyName);\n if (Array.isArray(value)) {\n await this.fillArrayAsync(bindNameGenerator, value, pname);\n continue;\n }\n if (value && typeof value === \"object\") {\n await this.fillObjectAsync(bindNameGenerator, value, pname);\n continue;\n }\n\n this.applyValueToInputs(pname, value);\n }\n }\n\n protected async fillAsync(response: CotomyApiResponse): Promise<void> {\n if (response.ok && response.available) {\n await this.fillObjectAsync(this.bindNameGenerator(), await response.objectAsync());\n await this.renderer().applyAsync(response);\n }\n\n // textareaを自動リサイズ\n this.find(\"textarea\").forEach(e => e.input());\n }\n\n protected override async submitToApiAsync(formData: globalThis.FormData): Promise<CotomyApiResponse> {\n const response = await super.submitToApiAsync(formData);\n if (response.ok) {\n await this.fillAsync(response);\n }\n return response;\n }\n}\n","import dayjs from \"dayjs\";\nimport timezone from 'dayjs/plugin/timezone';\nimport utc from 'dayjs/plugin/utc';\nimport { CotomyDebugFeature, CotomyDebugSettings } from \"./debug\";\nimport { CotomyForm } from \"./form\";\nimport { CotomyElement, CotomyWindow } from \"./view\";\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\n\n\nexport class CotomyUrl {\n public static location() {\n return new CotomyUrl();\n }\n\n private _url: URL;\n\n public constructor(url: string | null = null) {\n this._url = new URL(url ?? (location.pathname + location.search), location.origin);\n }\n\n public get url(): string {\n return this._url.pathname + this._url.search;\n }\n\n public get path(): string {\n return this._url.pathname;\n }\n\n public get segments(): string[] {\n return this._url.pathname.split(\"/\").filter(s => s.length > 0);\n }\n\n public get query(): string {\n return this._url.search.replace(/^\\?/, \"\");\n }\n\n public get parameters(): { [key: string]: string } {\n const dict: Record<string, string> = {};\n this._url.searchParams.forEach((value, key) => { dict[key] = value; });\n return dict;\n }\n\n public redirect() {\n window.location.href = this.url;\n }\n\n public replace(): void {\n window.location.replace(this.url);\n }\n\n public replaceState(state: any = null, title: string = \"\"): void {\n window.history.replaceState(state, title, this.url);\n }\n}\n\n\n\n\n\nexport class CotomyPageController {\n private static _instance: CotomyPageController | null = null;\n\n public static set<T extends CotomyPageController = CotomyPageController>(type: new () => T): T {\n if (this._instance) {\n throw new Error(\"PageController is already initialized.\");\n }\n this._instance = new type();\n CotomyWindow.instance.load(async () => {\n if (CotomyDebugSettings.isEnabled(CotomyDebugFeature.Page)) {\n console.debug(\"CotomyPageController initialize.\");\n }\n CotomyWindow.instance.initialize();\n await CotomyPageController._instance!.initializeAsync();\n CotomyWindow.instance.trigger(\"cotomy:ready\");\n });\n return this._instance as T;\n }\n\n public static get<T extends CotomyPageController = CotomyPageController>(): T {\n if (!(this._instance instanceof CotomyPageController)) {\n throw new Error(\"PageController is not initialized. Use CotomyPageController.set() to initialize it.\");\n }\n return this._instance as T;\n }\n\n\n private _forms: { [key: string]: CotomyForm } = {};\n\n protected setForm<T extends CotomyForm = CotomyForm>(form: T): T {\n if (!form.id) {\n form.generateId();\n }\n this._forms[form.id!] = form;\n form.removed(() => {\n delete this._forms[form.id!];\n });\n return form.initialize();\n }\n\n protected getForm<T extends CotomyForm = CotomyForm>(id: string, type?: { new(...args: any[]): T }): T | undefined {\n const form = this._forms[id];\n if (!form) return undefined;\n\n if (type && !(form instanceof type)) {\n throw new Error(`Form \"${id}\" is not instance of expected type.`);\n }\n\n return form as T;\n }\n\n protected forms(): CotomyForm[] {\n return Object.values(this._forms);\n }\n\n protected async restoreAsync(): Promise<void> {\n for (const f of this.forms()) {\n if (CotomyWindow.instance.reloading) {\n break;\n }\n if (f.autoReload) {\n await f.reloadAsync();\n }\n }\n }\n\n private isValidUtcDateString(value: string): boolean {\n return dayjs(value).isValid() && (value.endsWith(\"Z\") || /[+-]\\d{2}:\\d{2}$/.test(value));\n }\n\n private initializeDateTimeElements() {\n CotomyWindow.instance.body.find(\"[data-cotomy-datetime]:not([data-cotomy-formatted])\").forEach(e => {\n if (dayjs(e.text).isValid()) {\n const timezone = e.attribute(\"data-cotomy-timezone\")\n || e.closest(\"[data-cotomy-timezone]\")?.attribute(\"data-cotomy-timezone\");\n const format: string = e.attribute(\"data-cotomy-format\") ?? \"YYYY-MM-DD HH:mm\";\n const lt = this.isValidUtcDateString(e.text) ? dayjs(e.text) : dayjs(`${dayjs(e.text).format(\"YYYY-MM-DDTHH:mm:ss\")}Z`);\n const dt = e.attribute(\"data-cotomy-datetime\") === \"local\" ? lt : lt.utc();\n e.text = (timezone && timezone.trim() !== \"\") ? dt.tz(timezone).format(format) : dt.format(format);\n e.attribute(\"data-cotomy-formatted\", \"\");\n }\n });\n }\n\n\n protected async initializeAsync(): Promise<void> {\n this.initializeDateTimeElements();\n\n CotomyWindow.instance.pageshow(async e => {\n if (e.persisted) {\n await this.restoreAsync();\n if (CotomyWindow.instance.reloading) {\n e.stopImmediatePropagation();\n }\n }\n });\n }\n\n public get body(): CotomyElement {\n return CotomyWindow.instance.body;\n }\n\n protected get url(): CotomyUrl {\n return new CotomyUrl();\n }\n}\n\n"],"names":["root","factory","exports","module","define","amd","this","getRandomValue","crypto","window","msCrypto","self","lim","Math","pow","abs","getRandomValues","Uint32Array","random","pad","env","globalCount","Object","keys","length","clientId","navigator","mimeTypes","userAgent","toString","e","n","r","i","s","u","a","o","c","f","h","d","l","$","y","M","name","weekdays","split","months","ordinal","t","m","String","Array","join","v","z","utcOffset","floor","date","year","month","clone","add","ceil","p","w","D","ms","Q","toLowerCase","replace","g","S","_","O","args","arguments","b","locale","$L","utc","$u","x","$x","$offset","parse","prototype","$d","Date","NaN","test","match","substring","UTC","init","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","isAfter","isBefore","$g","set","unix","valueOf","getTime","toDate","apply","slice","$locale","weekStart","$set","min","daysInMonth","get","Number","round","subtract","format","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","diff","toJSON","toISOString","toUTCString","k","forEach","extend","$i","isDayjs","en","Ls","num","size","substr","day","hour","minute","second","timeZoneName","Intl","DateTimeFormat","hour12","timeZone","formatToParts","type","value","parseInt","tz","toLocaleString","$timezone","offsetName","guess","find","call","max","resolvedOptions","setDefault","fingerprint","discreteValues","randomBlock","safeCounter","cuid","slug","counter","print","isCuid","stringToCheck","startsWith","isSlug","stringLength","local","getUTCFullYear","getUTCMonth","getUTCDate","getUTCDay","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","$localOffset","isUTC","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","getter","__esModule","definition","key","defineProperty","enumerable","obj","prop","hasOwnProperty","Symbol","toStringTag","StatusCodes","CotomyDebugFeature","CotomyDebugSettings","isEnabled","global","localStorage","getItem","PREFIX","enable","setItem","disable","enableAll","disableAll","clear","removeItem","HandlerEntry","handle","wrapper","options","current","equals","entryOrHandle","optionsOrMode","mode","targetHandle","targetWrapper","targetOptions","compareMode","optionsEquals","left","right","getBoolean","getSignal","signal","signalsEqual","HandlerRegistory","target","_registory","Map","ensure","event","entry","once","remove","push","element","addEventListener","list","removeEventListener","capture","delete","remaining","empty","EventRegistry","_registry","instance","_instance","map","scopeId","registry","on","off","CotomyScrollOptions","behavior","onlyIfNeeded","block","inline","resolveBehavior","from","CotomyElement","encodeHtml","text","div","document","createElement","textContent","innerHTML","createHTMLElement","html","Error","tag","wrap","prefix","suffix","wrappedHtml","doc","DOMParser","parseFromString","querySelector","body","children","first","selector","last","pop","elements","querySelectorAll","ctor","contains","byId","id","getElementById","containsById","attribute","style","_parentElement","HTMLElement","_element","tagname","css","useScopedCss","Html","console","debug","setInstanceId","hasAttribute","removed","instanceId","stylable","includes","scopedCssElementId","cssid","writeCss","node","createTextNode","appendChild","prependTo","documentElement","append","listenLayoutEvents","LISTEN_LAYOUT_EVENTS_ATTRIBUTE","generateId","clonedElement","cloneNode","attr","removeAttribute","el","tagName","is","selectors","subSelector","trim","directChild","matches","parentElement","Set","has","attached","readonly","readOnly","val","setFocus","focus","visible","offsetParent","rect","getBoundingClientRect","width","height","getComputedStyle","display","visibility","enabled","getAttribute","setAttribute","invalidated","offsetWidth","offsetHeight","innerWidth","clientWidth","innerHeight","clientHeight","outerWidth","margin","parseFloat","marginLeft","marginRight","outerHeight","marginTop","marginBottom","scrollHeight","scrollWidth","scrollTop","position","top","absolutePosition","scrollY","scrollX","screenPosition","innerRect","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","outerRect","bottom","inViewport","isAboveViewport","isBelowViewport","isLeftViewport","isRightViewport","isScrollableOverflow","overflow","findNearestScrollableAncestor","overflowY","overflowX","canScrollY","canScrollX","computeAlignedScroll","viewStart","viewSize","elementStart","elementEnd","align","viewEnd","scrollIn","resolved","scrollable","elementRect","containerRect","elementTopInContainer","elementBottomInContainer","elementLeftInContainer","scrollLeft","elementRightInContainer","targetTop","targetLeft","nextTop","nextLeft","scrollTo","currentTop","currentLeft","elementTop","elementBottom","elementLeft","elementRight","comesBefore","pos","compareDocumentPosition","Node","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_FOLLOWING","comesAfter","DOCUMENT_POSITION_PRECEDING","hasClass","classList","addClass","removeClass","toggleClass","force","toggle","getPropertyValue","removeProperty","setProperty","computedStyle","parent","parents","currentElement","hasChildren","directChildren","filter","child","firstChild","shift","lastChild","closest","closestElement","previousSibling","previousElementSibling","ce","nextSibling","nextElementSibling","siblings","runWithMoveEvents","operation","trigger","prepend","appendAll","targets","insertBefore","before","insertAfter","after","appendTo","dispatchEvent","Event","bubbles","isArray","eventName","onSubTree","delegate","mergedOptions","click","async","dblclick","mouseover","mouseout","mousedown","mouseup","mousemove","mouseenter","mouseleave","dragstart","dragend","dragover","dragenter","dragleave","drop","drag","keydown","keyup","keypress","change","input","intersectionObserver","_intersectionObserver","IntersectionObserver","entries","isIntersecting","inview","observe","outview","blur","focusin","focusout","filedrop","preventDefault","dt","dataTransfer","files","resize","scroll","changeLayout","CotomyMetaElement","content","CotomyWindow","_body","_mutationObserver","_reloading","_eventHandlers","initialized","initialize","changeLayoutEvent","CustomEvent","passive","stopPropagation","MutationObserver","mutations","mutation","removedNodes","childList","subtree","reloading","reload","location","moveNext","focused","focusableElements","nextIndex","indexOf","handlers","load","ready","pageshow","documentWidth","documentHeight","CotomyApiException","constructor","status","message","response","bodyText","super","CotomyHttpClientError","CotomyUnauthorizedException","CotomyForbiddenException","CotomyNotFoundException","CotomyConflictException","CotomyRequestInvalidException","CotomyTooManyRequestsException","CotomyHttpServerError","CotomyResponseJsonParseException","CotomyInvalidFormDataBodyException","Methods","GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS","TRACE","CONNECT","ResponseMessages","getMessage","_responseMessages","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","METHOD_NOT_ALLOWED","NOT_ACCEPTABLE","PROXY_AUTHENTICATION_REQUIRED","REQUEST_TIMEOUT","CONFLICT","PAYMENT_REQUIRED","GONE","LENGTH_REQUIRED","PRECONDITION_FAILED","UNSUPPORTED_MEDIA_TYPE","EXPECTATION_FAILED","MISDIRECTED_REQUEST","UNPROCESSABLE_ENTITY","LOCKED","FAILED_DEPENDENCY","UPGRADE_REQUIRED","PRECONDITION_REQUIRED","TOO_MANY_REQUESTS","REQUEST_HEADER_FIELDS_TOO_LARGE","INTERNAL_SERVER_ERROR","BAD_GATEWAY","SERVICE_UNAVAILABLE","GATEWAY_TIMEOUT","HTTP_VERSION_NOT_SUPPORTED","NOT_IMPLEMENTED","INSUFFICIENT_STORAGE","NETWORK_AUTHENTICATION_REQUIRED","CotomyApiResponse","_response","_object","_text","available","ok","statusText","headers","Headers","textAsync","_ensureJsonParsedAsync","defaultValue","JSON","error","objectAsync","arrayAsync","parsed","CotomyBracketBindNameGenerator","create","createIndex","index","CotomyDotBindNameGenerator","CotomyViewRenderer","bindNameGenerator","_renderers","_builded","languages","language","Boolean","renderer","callback","renderers","currency","fractionDigitsAttribute","fractionDigits","isFinite","minimumFractionDigits","maximumFractionDigits","NumberFormat","isNaN","bindPrimitiveValue","propertyName","Bind","applyArrayAsync","values","item","itemName","applyObjectAsync","pname","applyAsync","respose","CotomyApi","_options","baseUrl","credentials","redirect","cache","referrerPolicy","keepalive","integrity","_abortController","AbortController","abortController","requestAsync","method","path","responseType","Api","bodyTransformers","stringify","globalThis","FormData","params","URLSearchParams","formData","url","ct","fetch","errorBody","catch","errorMessage","getAsync","parameters","queryString","fromEntries","fullUrl","postAsync","putAsync","patchAsync","deleteAsync","headAsync","optionsAsync","traceAsync","connectAsync","submitAsync","form","toUpperCase","action","CotomyForm","actionUrl","pathname","search","reloadAsync","autoReload","CotomyQueryForm","queryParams","param","decodeURIComponent","encodeURIComponent","newQueryString","href","CotomyApiFailedEvent","cancelable","CotomyApiForm","apiClient","apiFailed","triggerApiFailedEvent","submitFailed","triggerSubmitFailedEvent","formElement","localDateTime","submitToApiAsync","api","CotomyEntityApiForm","entityKey","requiresEntityKey","hasEntityKey","normalized","endsWith","setEntityKey","CREATED","FormLoad","warn","normalize","toPath","URL","baseAction","locPath","actionParts","locationParts","every","addedParts","msg","CotomyEntityFillApiForm","_fillers","filler","func","loadAsync","loadActionUrl","canLoad","fillAsync","applyValueToInputs","Fill","fillArrayAsync","fillObjectAsync","CotomyUrl","_url","origin","segments","query","dict","searchParams","replaceState","state","title","history","CotomyPageController","_forms","Page","initializeAsync","setForm","getForm","forms","restoreAsync","isValidUtcDateString","initializeDateTimeElements","timezone","lt","persisted","stopImmediatePropagation"],"sourceRoot":""}