proto-sudoku-wc 0.1.68 → 0.1.69
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.
@@ -133,6 +133,8 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
133
133
|
set: [],
|
134
134
|
reset: [],
|
135
135
|
};
|
136
|
+
// Track onChange listeners to enable removeListener functionality
|
137
|
+
const changeListeners = new Map();
|
136
138
|
const reset = () => {
|
137
139
|
// When resetting the state, the default state may be a function - unwrap it to invoke it.
|
138
140
|
// otherwise, the state won't be properly reset
|
@@ -186,17 +188,21 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
186
188
|
};
|
187
189
|
};
|
188
190
|
const onChange = (propName, cb) => {
|
189
|
-
const
|
191
|
+
const setHandler = (key, newValue) => {
|
190
192
|
if (key === propName) {
|
191
193
|
cb(newValue);
|
192
194
|
}
|
193
|
-
}
|
194
|
-
|
195
|
-
//
|
196
|
-
const
|
195
|
+
};
|
196
|
+
const resetHandler = () => cb(unwrap(defaultState)[propName]);
|
197
|
+
// Register the handlers
|
198
|
+
const unSet = on('set', setHandler);
|
199
|
+
const unReset = on('reset', resetHandler);
|
200
|
+
// Track the relationship between the user callback and internal handlers
|
201
|
+
changeListeners.set(cb, { setHandler, resetHandler, propName });
|
197
202
|
return () => {
|
198
203
|
unSet();
|
199
204
|
unReset();
|
205
|
+
changeListeners.delete(cb);
|
200
206
|
};
|
201
207
|
};
|
202
208
|
const use = (...subscriptions) => {
|
@@ -221,6 +227,15 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
221
227
|
const oldValue = states.get(key);
|
222
228
|
handlers.set.forEach((cb) => cb(key, oldValue, oldValue));
|
223
229
|
};
|
230
|
+
const removeListener = (propName, listener) => {
|
231
|
+
const listenerInfo = changeListeners.get(listener);
|
232
|
+
if (listenerInfo && listenerInfo.propName === propName) {
|
233
|
+
// Remove the specific handlers that were created for this listener
|
234
|
+
removeFromArray(handlers.set, listenerInfo.setHandler);
|
235
|
+
removeFromArray(handlers.reset, listenerInfo.resetHandler);
|
236
|
+
changeListeners.delete(listener);
|
237
|
+
}
|
238
|
+
};
|
224
239
|
return {
|
225
240
|
state,
|
226
241
|
get,
|
@@ -231,6 +246,7 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
231
246
|
dispose,
|
232
247
|
reset,
|
233
248
|
forceUpdate,
|
249
|
+
removeListener,
|
234
250
|
};
|
235
251
|
};
|
236
252
|
const removeFromArray = (array, item) => {
|
@@ -301,6 +317,7 @@ const supportsRequestStreams = (() => {
|
|
301
317
|
return duplexAccessed && !hasContentType;
|
302
318
|
})();
|
303
319
|
const supportsAbortController = typeof globalThis.AbortController === 'function';
|
320
|
+
const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';
|
304
321
|
const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';
|
305
322
|
const supportsFormData = typeof globalThis.FormData === 'function';
|
306
323
|
const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];
|
@@ -724,7 +741,7 @@ class Ky {
|
|
724
741
|
}
|
725
742
|
this._input = this._options.prefixUrl + this._input;
|
726
743
|
}
|
727
|
-
if (supportsAbortController) {
|
744
|
+
if (supportsAbortController && supportsAbortSignal) {
|
728
745
|
const originalSignal = this._options.signal ?? this._input.signal;
|
729
746
|
this.abortController = new globalThis.AbortController();
|
730
747
|
this._options.signal = originalSignal ? AbortSignal.any([originalSignal, this.abortController.signal]) : this.abortController.signal;
|
@@ -131,6 +131,8 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
131
131
|
set: [],
|
132
132
|
reset: [],
|
133
133
|
};
|
134
|
+
// Track onChange listeners to enable removeListener functionality
|
135
|
+
const changeListeners = new Map();
|
134
136
|
const reset = () => {
|
135
137
|
// When resetting the state, the default state may be a function - unwrap it to invoke it.
|
136
138
|
// otherwise, the state won't be properly reset
|
@@ -184,17 +186,21 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
184
186
|
};
|
185
187
|
};
|
186
188
|
const onChange = (propName, cb) => {
|
187
|
-
const
|
189
|
+
const setHandler = (key, newValue) => {
|
188
190
|
if (key === propName) {
|
189
191
|
cb(newValue);
|
190
192
|
}
|
191
|
-
}
|
192
|
-
|
193
|
-
//
|
194
|
-
const
|
193
|
+
};
|
194
|
+
const resetHandler = () => cb(unwrap(defaultState)[propName]);
|
195
|
+
// Register the handlers
|
196
|
+
const unSet = on('set', setHandler);
|
197
|
+
const unReset = on('reset', resetHandler);
|
198
|
+
// Track the relationship between the user callback and internal handlers
|
199
|
+
changeListeners.set(cb, { setHandler, resetHandler, propName });
|
195
200
|
return () => {
|
196
201
|
unSet();
|
197
202
|
unReset();
|
203
|
+
changeListeners.delete(cb);
|
198
204
|
};
|
199
205
|
};
|
200
206
|
const use = (...subscriptions) => {
|
@@ -219,6 +225,15 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
219
225
|
const oldValue = states.get(key);
|
220
226
|
handlers.set.forEach((cb) => cb(key, oldValue, oldValue));
|
221
227
|
};
|
228
|
+
const removeListener = (propName, listener) => {
|
229
|
+
const listenerInfo = changeListeners.get(listener);
|
230
|
+
if (listenerInfo && listenerInfo.propName === propName) {
|
231
|
+
// Remove the specific handlers that were created for this listener
|
232
|
+
removeFromArray(handlers.set, listenerInfo.setHandler);
|
233
|
+
removeFromArray(handlers.reset, listenerInfo.resetHandler);
|
234
|
+
changeListeners.delete(listener);
|
235
|
+
}
|
236
|
+
};
|
222
237
|
return {
|
223
238
|
state,
|
224
239
|
get,
|
@@ -229,6 +244,7 @@ const createObservableMap = (defaultState, shouldUpdate = (a, b) => a !== b) =>
|
|
229
244
|
dispose,
|
230
245
|
reset,
|
231
246
|
forceUpdate,
|
247
|
+
removeListener,
|
232
248
|
};
|
233
249
|
};
|
234
250
|
const removeFromArray = (array, item) => {
|
@@ -299,6 +315,7 @@ const supportsRequestStreams = (() => {
|
|
299
315
|
return duplexAccessed && !hasContentType;
|
300
316
|
})();
|
301
317
|
const supportsAbortController = typeof globalThis.AbortController === 'function';
|
318
|
+
const supportsAbortSignal = typeof globalThis.AbortSignal === 'function' && typeof globalThis.AbortSignal.any === 'function';
|
302
319
|
const supportsResponseStreams = typeof globalThis.ReadableStream === 'function';
|
303
320
|
const supportsFormData = typeof globalThis.FormData === 'function';
|
304
321
|
const requestMethods = ['get', 'post', 'put', 'patch', 'head', 'delete'];
|
@@ -722,7 +739,7 @@ class Ky {
|
|
722
739
|
}
|
723
740
|
this._input = this._options.prefixUrl + this._input;
|
724
741
|
}
|
725
|
-
if (supportsAbortController) {
|
742
|
+
if (supportsAbortController && supportsAbortSignal) {
|
726
743
|
const originalSignal = this._options.signal ?? this._input.signal;
|
727
744
|
this.abortController = new globalThis.AbortController();
|
728
745
|
this._options.signal = originalSignal ? AbortSignal.any([originalSignal, this.abortController.signal]) : this.abortController.signal;
|
@@ -0,0 +1,2 @@
|
|
1
|
+
import{h as t,g as n,f as e,r}from"./p-moxqhnZq.js";const o=n=>{const e=n.hex||"currentColor",r=n.size||24;return t("svg",{class:n.class,width:r,height:r,viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,n.label||"alien"),t("g",{fill:e},t("path",{d:"M10.31 10.93C11.33 12.57 11.18 14.5 9.96 15.28C8.74 16.04 6.92 15.33\n 5.89 13.69C4.87 12.05 5.03 10.1 6.25 9.34C7.47 8.58 9.29 9.29 10.31\n 10.93M12 17.75C14 17.75 14.5 17 14.5 17C14.5 17 14 19 12 19C10 19 9.5\n 17.03 9.5 17C9.5 17 10 17.75 12 17.75M17.75 9.34C18.97 10.1 19.13 12.05\n 18.11 13.69C17.08 15.33 15.26 16.04 14.04 15.28C12.82 14.5 12.67 12.57\n 13.69 10.93C14.71 9.29 16.53 8.58 17.75 9.34M12 20C14.5 20 20 14.86 20\n 11C20 7.14 16.41 4 12 4C7.59 4 4 7.14 4 11C4 14.86 9.5 20 12 20M12 2C17.5\n 2 22 6.04 22 11C22 15.08 16.32 22 12 22C7.68 22 2 15.08 2 11C2 6.04 6.5 2\n 12 2Z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},s="proto-sudoku",a=`${s}::data`,i=`${s}::inputs`,l=`${s}::pick`,c=t=>{const n=localStorage.getItem(t);return n?JSON.parse(n):void 0},d=(t,n)=>{const e=JSON.stringify(n);localStorage.setItem(t,e)},f=()=>[...c(i)],h=t=>{d(i,t.join(""))},p=()=>{const t=c(l);return null!==t?t:void 0},u=t=>{d(l,t>=0&&t<81?t:null)},g="Check ?",b="New Puzzle",w=t=>!("isConnected"in t)||t.isConnected,y=(()=>{let t;return(...n)=>{t&&clearTimeout(t),t=setTimeout((()=>{t=0,(t=>{for(let n of t.keys())t.set(n,t.get(n).filter(w))})(...n)}),2e3)}})(),m=t=>"function"==typeof t?t():t,v=(t,n)=>{const e=t.indexOf(n);e>=0&&(t[e]=t[t.length-1],t.length--)};class x extends Error{response;request;options;constructor(t,n,e){const r=`${t.status||0===t.status?t.status:""} ${t.statusText||""}`.trim();super(`Request failed with ${r?`status code ${r}`:"an unknown error"}: ${n.method} ${n.url}`),this.name="HTTPError",this.response=t,this.request=n,this.options=e}}class C extends Error{request;constructor(t){super(`Request timed out: ${t.method} ${t.url}`),this.name="TimeoutError",this.request=t}}const k=(()=>{let t=!1,n=!1;const e="function"==typeof globalThis.ReadableStream,r="function"==typeof globalThis.Request;if(e&&r)try{n=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type")}catch(t){if(t instanceof Error&&"unsupported BodyInit type"===t.message)return!1;throw t}return t&&!n})(),T="function"==typeof globalThis.AbortController,R="function"==typeof globalThis.AbortSignal&&"function"==typeof globalThis.AbortSignal.any,E="function"==typeof globalThis.ReadableStream,M="function"==typeof globalThis.FormData,S=["get","post","put","patch","head","delete"],z={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},j=2147483647,A=(new TextEncoder).encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length,P=Symbol("stop"),B={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0},q={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0,priority:!0},U=t=>null!==t&&"object"==typeof t,L=(...t)=>{for(const n of t)if((!U(n)||Array.isArray(n))&&void 0!==n)throw new TypeError("The `options` argument must be an object");return D({},...t)},$=(t={},n={})=>{const e=new globalThis.Headers(t),r=n instanceof globalThis.Headers,o=new globalThis.Headers(n);for(const[t,n]of o.entries())r&&"undefined"===n||void 0===n?e.delete(t):e.set(t,n);return e};function N(t,n,e){return Object.hasOwn(n,e)&&void 0===n[e]?[]:D(t[e]??[],n[e]??[])}const O=(t={},n={})=>({beforeRequest:N(t,n,"beforeRequest"),beforeRetry:N(t,n,"beforeRetry"),afterResponse:N(t,n,"afterResponse"),beforeError:N(t,n,"beforeError")}),D=(...t)=>{let n={},e={},r={};for(const o of t)if(Array.isArray(o))Array.isArray(n)||(n=[]),n=[...n,...o];else if(U(o)){for(let[t,e]of Object.entries(o))U(e)&&t in n&&(e=D(n[t],e)),n={...n,[t]:e};U(o.hooks)&&(r=O(r,o.hooks),n.hooks=r),U(o.headers)&&(e=$(e,o.headers),n.headers=e)}return n},H=t=>S.includes(t)?t.toUpperCase():t,_={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:[413,429,503],maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:t=>.3*2**(t-1)*1e3},J=(t={})=>{if("number"==typeof t)return{..._,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{..._,...t}};class I{static create(t,n){const e=new I(t,n),r=async()=>{if("number"==typeof e._options.timeout&&e._options.timeout>j)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await Promise.resolve();let t=await e._fetch();for(const n of e._options.hooks.afterResponse){const r=await n(e.request,e._options,e._decorateResponse(t.clone()));r instanceof globalThis.Response&&(t=r)}if(e._decorateResponse(t),!t.ok&&e._options.throwHttpErrors){let n=new x(t,e.request,e._options);for(const t of e._options.hooks.beforeError)n=await t(n);throw n}if(e._options.onDownloadProgress){if("function"!=typeof e._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!E)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return((t,n)=>{const e=Number(t.headers.get("content-length"))||0;let r=0;return 204===t.status?(n&&n({percent:1,totalBytes:e,transferredBytes:r},new Uint8Array),new Response(null,{status:t.status,statusText:t.statusText,headers:t.headers})):new Response(new ReadableStream({async start(o){const s=t.body.getReader();n&&n({percent:0,transferredBytes:0,totalBytes:e},new Uint8Array),await async function t(){const{done:a,value:i}=await s.read();a?o.close():(n&&(r+=i.byteLength,n({percent:0===e?0:r/e,transferredBytes:r,totalBytes:e},i)),o.enqueue(i),await t())}()}}),{status:t.status,statusText:t.statusText,headers:t.headers})})(t.clone(),e._options.onDownloadProgress)}return t},o=(e._options.retry.methods.includes(e.request.method.toLowerCase())?e._retry(r):r()).finally((async()=>{e.request.bodyUsed||await(e.request.body?.cancel())}));for(const[t,r]of Object.entries(z))o[t]=async()=>{e.request.headers.set("accept",e.request.headers.get("accept")||r);const s=await o;if("json"===t){if(204===s.status)return"";if(0===(await s.clone().arrayBuffer()).byteLength)return"";if(n.parseJson)return n.parseJson(await s.text())}return s[t]()};return o}request;abortController;_retryCount=0;_input;_options;constructor(t,n={}){if(this._input=t,this._options={...n,headers:$(this._input.headers,n.headers),hooks:O({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},n.hooks),method:H(n.method??this._input.method??"GET"),prefixUrl:String(n.prefixUrl||""),retry:J(n.retry),throwHttpErrors:!1!==n.throwHttpErrors,timeout:n.timeout??1e4,fetch:n.fetch??globalThis.fetch.bind(globalThis)},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(T&&R){const t=this._options.signal??this._input.signal;this.abortController=new globalThis.AbortController,this._options.signal=t?AbortSignal.any([t,this.abortController.signal]):this.abortController.signal}if(k&&(this._options.duplex="half"),void 0!==this._options.json&&(this._options.body=this._options.stringifyJson?.(this._options.json)??JSON.stringify(this._options.json),this._options.headers.set("content-type",this._options.headers.get("content-type")??"application/json")),this.request=new globalThis.Request(this._input,this._options),this._options.searchParams){const t="string"==typeof this._options.searchParams?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString(),n=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,"?"+t);!(M&&this._options.body instanceof globalThis.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new globalThis.Request(new globalThis.Request(n,{...this.request}),this._options)}if(this._options.onUploadProgress){if("function"!=typeof this._options.onUploadProgress)throw new TypeError("The `onUploadProgress` option must be a function");if(!k)throw new Error("Request streams are not supported in your environment. The `duplex` option for `Request` is not available.");this.request.body&&(this.request=((t,n)=>{const e=(t=>{if(!t)return 0;if(t instanceof FormData){let n=0;for(const[e,r]of t)n+=A,n+=(new TextEncoder).encode(`Content-Disposition: form-data; name="${e}"`).length,n+="string"==typeof r?(new TextEncoder).encode(r).length:r.size;return n}if(t instanceof Blob)return t.size;if(t instanceof ArrayBuffer)return t.byteLength;if("string"==typeof t)return(new TextEncoder).encode(t).length;if(t instanceof URLSearchParams)return(new TextEncoder).encode(t.toString()).length;if("byteLength"in t)return t.byteLength;if("object"==typeof t&&null!==t)try{const n=JSON.stringify(t);return(new TextEncoder).encode(n).length}catch{return 0}return 0})(t.body);let r=0;return new Request(t,{duplex:"half",body:new ReadableStream({async start(o){const s=t.body instanceof ReadableStream?t.body.getReader():new Response("").body.getReader();await async function t(){const{done:a,value:i}=await s.read();if(a)return n&&n({percent:1,transferredBytes:r,totalBytes:Math.max(e,r)},new Uint8Array),void o.close();r+=i.byteLength;let l=0===e?0:r/e;(e<r||1===l)&&(l=.99),n&&n({percent:Number(l.toFixed(2)),transferredBytes:r,totalBytes:e},i),o.enqueue(i),await t()}()}})})})(this.request,this._options.onUploadProgress))}}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount>this._options.retry.limit||t instanceof C)throw t;if(t instanceof x){if(!this._options.retry.statusCodes.includes(t.response.status))throw t;const n=t.response.headers.get("Retry-After")??t.response.headers.get("RateLimit-Reset")??t.response.headers.get("X-RateLimit-Reset")??t.response.headers.get("X-Rate-Limit-Reset");if(n&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=1e3*Number(n);Number.isNaN(t)?t=Date.parse(n)-Date.now():t>=Date.parse("2024-01-01")&&(t-=Date.now());const e=this._options.retry.maxRetryAfter??t;return t<e?t:e}if(413===t.response.status)throw t}const n=this._options.retry.delay(this._retryCount);return Math.min(this._options.retry.backoffLimit,n)}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(n){const e=Math.min(this._calculateRetryDelay(n),j);if(this._retryCount<1)throw n;await async function(t,{signal:n}){return new Promise(((e,r)=>{function o(){clearTimeout(s),r(n.reason)}n&&(n.throwIfAborted(),n.addEventListener("abort",o,{once:!0}));const s=setTimeout((()=>{n?.removeEventListener("abort",o),e()}),t)}))}(e,{signal:this._options.signal});for(const t of this._options.hooks.beforeRetry)if(await t({request:this.request,options:this._options,error:n,retryCount:this._retryCount})===P)return;return this._retry(t)}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const n=await t(this.request,this._options);if(n instanceof Request){this.request=n;break}if(n instanceof Response)return n}const t=((t,n)=>{const e={};for(const r in n)r in q||r in B||r in t||(e[r]=n[r]);return e})(this.request,this._options),n=this.request;return this.request=n.clone(),!1===this._options.timeout?this._options.fetch(n,t):async function(t,n,e,r){return new Promise(((o,s)=>{const a=setTimeout((()=>{e&&e.abort(),s(new C(t))}),r.timeout);r.fetch(t,n).then(o).catch(s).then((()=>{clearTimeout(a)}))}))}(n,t,this.abortController,this._options)}}
|
2
|
+
/*! MIT License © Sindre Sorhus */const X=t=>{const n=(n,e)=>I.create(n,L(t,e));for(const e of S)n[e]=(n,r)=>I.create(n,L(t,r,{method:e}));return n.create=t=>X(L(t)),n.extend=n=>("function"==typeof n&&(n=n(t??{})),X(L(t,n))),n.stop=P,n},W=X(),Z={list:[],keys:[],locs:[],loading:!1,solved:!1,error:void 0,pick:void 0,data:void 0},{state:F}=(()=>{const t=((t,n=(t,n)=>t!==n)=>{const e=m(t);let r=new Map(Object.entries(e??{}));const o={dispose:[],get:[],set:[],reset:[]},s=new Map,a=()=>{r=new Map(Object.entries(m(t)??{})),o.reset.forEach((t=>t()))},i=t=>(o.get.forEach((n=>n(t))),r.get(t)),l=(t,e)=>{const s=r.get(t);n(e,s,t)&&(r.set(t,e),o.set.forEach((n=>n(t,e,s))))},c="undefined"==typeof Proxy?{}:new Proxy(e,{get:(t,n)=>i(n),ownKeys:()=>Array.from(r.keys()),getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0}),has:(t,n)=>r.has(n),set:(t,n,e)=>(l(n,e),!0)}),d=(t,n)=>(o[t].push(n),()=>{v(o[t],n)});return{state:c,get:i,set:l,on:d,onChange:(n,e)=>{const r=(t,r)=>{t===n&&e(r)},o=()=>e(m(t)[n]),a=d("set",r),i=d("reset",o);return s.set(e,{setHandler:r,resetHandler:o,propName:n}),()=>{a(),i(),s.delete(e)}},use:(...t)=>{const n=t.reduce(((t,n)=>(n.set&&t.push(d("set",n.set)),n.get&&t.push(d("get",n.get)),n.reset&&t.push(d("reset",n.reset)),n.dispose&&t.push(d("dispose",n.dispose)),t)),[]);return()=>n.forEach((t=>t()))},dispose:()=>{o.dispose.forEach((t=>t())),a()},reset:a,forceUpdate:t=>{const n=r.get(t);o.set.forEach((e=>e(t,n,n)))},removeListener:(t,n)=>{const e=s.get(n);e&&e.propName===t&&(v(o.set,e.setHandler),v(o.reset,e.resetHandler),s.delete(n))}}})(Z,void 0);return t.use((()=>{if("function"!=typeof n)return{};const t=new Map;return{dispose:()=>t.clear(),get:e=>{const r=n();r&&((t,n,e)=>{const r=t.get(n);r?r.includes(e)||r.push(e):t.set(n,[e])})(t,e,r)},set:n=>{const r=t.get(n);r&&t.set(n,r.filter(e)),y(t)},reset:()=>{t.forEach((t=>t.forEach(e))),y(t)}}})()),t})(),K=new Map([["row",new Map],["column",new Map],["box",new Map]]),G=["1","2","3","4","5","6","7","8","9"],V=t=>{if(void 0!==t&&t.indx!=F.pick){const{isClue:n,indx:e,row:r,column:o,box:s}=t,a=((t,n,e,r)=>{const o=new Map([["row",n],["column",e],["box",r]]),s=new Set;return o.forEach(((n,e)=>{K.get(e).get(n).forEach((n=>{n!==t&&s.add(n)}))})),Array.from(s)})(e,r,o,s),i=n?[]:(t=>{const{list:n}=F,e=new Set;return t.map((t=>{const{key:r}=n[t];"."!=r&&e.add(r)})),G.filter((t=>!e.has(t)))})(a);F.pick=e,F.keys=i,F.locs=a}else F.pick=void 0,F.keys=[],F.locs=[];nt(F.pick)};let Y;const Q={local:"http://localhost:8080/api",netlify:"/.netlify/functions",vercel:"https://sudoku-rust-api.vercel.app/api"},tt=t=>{h(t)},nt=t=>{u(t)},et=(t=!1)=>{F.list=[],F.keys=[],F.locs=[],F.loading=t,F.solved=!1,F.error=void 0,F.pick=void 0,F.data=void 0},rt=(t,n=!0)=>{const{puzzle:e,ref:r}=t;n&&(h([]),d(a,t)),(t=>{if(t){const{puzzle:n,ref:e}=t,r=n?[...n]:[],o=e?atob(e):void 0,s=o?[...o]:[],a=r.map(((t,n)=>{const e=s[n],r=t===e,o=Math.floor(n/9),a=n%9,i=((t,n)=>n<3?t<3?0:t<6?3:6:n<6?t<3?1:t<6?4:7:t<3?2:t<6?5:8)(o,a);return((t,n,e,r)=>{new Map([["row",n],["column",e],["box",r]]).forEach(((n,e)=>{const r=K.get(e);r.has(n)?r.get(n).add(t):r.set(n,new Set([t]))}))})(n,o,a,i),{key:t,isClue:r,value:e,indx:n,row:o,column:a,box:i}}));(t=>{f().forEach(((n,e)=>{const r=t[e],{isClue:o}=r;o||(r.key=n)}))})(a),F.data=t,F.list=a}else F.data=void 0,F.list=[]})({puzzle:e,ref:r})},ot=t=>{F.list=[...t],t.length=0},st={initApp:t=>{(t=>{const n=(t=>{const n=Object.keys(Q).includes(t)?t:"vercel";return Q[n]})(t);Y=W.extend({hooks:{beforeRequest:[t=>{t.headers.set("X-Requested-With","ky"),t.headers.set("X-Custom-Header","foobar")}]},prefixUrl:n,timeout:1e4})})(t),et();const n=c(a),e=p();if(n&&(rt(n,!1),e>=0)){const{list:t}=F;V(t[e])}},refresh:async()=>{et(!0),tt([]),nt(F.pick);try{const t=await Y.get("puzzle").json();rt(t)}catch(t){const{message:n}=t;console.log("-- ",n),console.log(t),F.error=n}finally{F.loading=!1}},select:t=>{V(t)},check:()=>{const{list:t}=F,n=[];let e=0,r=0,o=0;t.forEach((t=>{const{key:s,value:a,isClue:i}=t;i?o+=1:"."!==s&&(s!==a?(e+=1,t.key="."):r+=1),n.push(t.key)}));const s=o+r;tt(r?n:[]),e>0?ot(t):81===s&&(F.solved=!0)},input:t=>{const{pick:n,list:e}=F;e[n].key=t,ot(e)}},at=(...t)=>t.filter(Boolean).join(" "),it=n=>{const e=n.hex||"currentColor",r=n.label||"loading...",o=n.size||24;return t("svg",{class:at(n.class||"","animate-spin"),width:o,height:o,fill:"none",viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,r),t("g",null,t("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:e,"stroke-width":"4"}),t("path",{class:"opacity-75",fill:e,d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},lt=n=>{const{message:e,salute:r,spinner:s=!1}=n;return t("div",{class:"mt-5 flex h-24px flex-row items-center"},t(s?it:o,{class:"mr-2"}),r?t("label",{class:"mr-1 font-bold"},r,":"):"",t("label",{class:"italic"},e))},ct=()=>{const{solved:n,loading:e,error:r}=F;return t("div",{class:"flex flex-col"},e||r||n?"":t(lt,{message:"Welcome, are you ready to play?..."}),e?t(lt,{message:"Loading...",spinner:!0}):"",r?t(lt,{message:r,salute:"ERROR"}):"",n?t(lt,{message:"You solved the puzzle!!"}):"")},dt=n=>{const e=n.hex||"currentColor",r=n.size||24;return t("svg",{class:n.class,width:r,height:r,viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,n.label||"fingerprint"),t("g",{fill:e},t("path",{d:"M17.81,4.47C17.73,4.47 17.65,4.45 17.58,4.41C15.66,3.42 14,3\n 12,3C10.03,3 8.15,3.47 6.44,4.41C6.2,4.54 5.9,4.45 5.76,4.21C5.63,3.97\n 5.72,3.66 5.96,3.53C7.82,2.5 9.86,2 12,2C14.14,2 16,2.47\n 18.04,3.5C18.29,3.65 18.38,3.95 18.25,4.19C18.16,4.37 18,4.47\n 17.81,4.47M3.5,9.72C3.4,9.72 3.3,9.69 3.21,9.63C3,9.47 2.93,9.16\n 3.09,8.93C4.08,7.53 5.34,6.43 6.84,5.66C10,4.04 14,4.03\n 17.15,5.65C18.65,6.42 19.91,7.5 20.9,8.9C21.06,9.12 21,9.44\n 20.78,9.6C20.55,9.76 20.24,9.71 20.08,9.5C19.18,8.22 18.04,7.23\n 16.69,6.54C13.82,5.07 10.15,5.07 7.29,6.55C5.93,7.25 4.79,8.25\n 3.89,9.5C3.81,9.65 3.66,9.72 3.5,9.72M9.75,21.79C9.62,21.79 9.5,21.74\n 9.4,21.64C8.53,20.77 8.06,20.21 7.39,19C6.7,17.77 6.34,16.27\n 6.34,14.66C6.34,11.69 8.88,9.27 12,9.27C15.12,9.27 17.66,11.69\n 17.66,14.66A0.5,0.5 0 0,1 17.16,15.16A0.5,0.5 0 0,1\n 16.66,14.66C16.66,12.24 14.57,10.27 12,10.27C9.43,10.27 7.34,12.24\n 7.34,14.66C7.34,16.1 7.66,17.43 8.27,18.5C8.91,19.66 9.35,20.15\n 10.12,20.93C10.31,21.13 10.31,21.44 10.12,21.64C10,21.74 9.88,21.79\n 9.75,21.79M16.92,19.94C15.73,19.94 14.68,19.64 13.82,19.05C12.33,18.04\n 11.44,16.4 11.44,14.66A0.5,0.5 0 0,1 11.94,14.16A0.5,0.5 0 0,1\n 12.44,14.66C12.44,16.07 13.16,17.4 14.38,18.22C15.09,18.7 15.92,18.93\n 16.92,18.93C17.16,18.93 17.56,18.9 17.96,18.83C18.23,18.78 18.5,18.96\n 18.54,19.24C18.59,19.5 18.41,19.77 18.13,19.82C17.56,19.93 17.06,19.94\n 16.92,19.94M14.91,22C14.87,22 14.82,22 14.78,22C13.19,21.54 12.15,20.95\n 11.06,19.88C9.66,18.5 8.89,16.64 8.89,14.66C8.89,13.04 10.27,11.72\n 11.97,11.72C13.67,11.72 15.05,13.04 15.05,14.66C15.05,15.73 16,16.6\n 17.13,16.6C18.28,16.6 19.21,15.73 19.21,14.66C19.21,10.89 15.96,7.83\n 11.96,7.83C9.12,7.83 6.5,9.41 5.35,11.86C4.96,12.67 4.76,13.62\n 4.76,14.66C4.76,15.44 4.83,16.67 5.43,18.27C5.53,18.53 5.4,18.82\n 5.14,18.91C4.88,19 4.59,18.87 4.5,18.62C4,17.31 3.77,16\n 3.77,14.66C3.77,13.46 4,12.37 4.45,11.42C5.78,8.63 8.73,6.82\n 11.96,6.82C16.5,6.82 20.21,10.33 20.21,14.65C20.21,16.27 18.83,17.59\n 17.13,17.59C15.43,17.59 14.05,16.27 14.05,14.65C14.05,13.58 13.12,12.71\n 11.97,12.71C10.82,12.71 9.89,13.58 9.89,14.65C9.89,16.36 10.55,17.96\n 11.76,19.16C12.71,20.1 13.62,20.62 15.03,21C15.3,21.08 15.45,21.36\n 15.38,21.62C15.33,21.85 15.12,22 14.91,22Z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},ft="eswat2",ht=()=>t("a",{class:"absolute right-0 top-0 text-clrs-gray hover:text-clrs-navy",href:"https://eswat2.dev","aria-label":ft,target:"blank",title:ft},t(dt,{label:ft})),pt=(n,e)=>t("h1",{class:at("text-center uppercase text-clrs-red","mb-11 ml-0 mr-0 mt-11","text-6xl font-thin")},e),ut=n=>{const{label:e,callback:r,matched:o=!1}=n;return t("button",{class:at("rounded-md border border-solid border-clrs-slate4 font-bold",e===g?"mr-2 bg-clrs-yellow px-3 py-2 text-clrs-navy":e===b?"mr-2 bg-clrs-navy px-3 py-2 text-white":"x"===e?"mr-1 bg-clrs-red px-2 py-1 text-white":o?"mr-1 bg-clrs-slate4 px-2 py-1 text-white":"mr-1 bg-gray-50 px-2 py-1 text-clrs-navy"),onClick:r},e)},gt=()=>{const{keys:n,list:e,pick:r,solved:o}=F,s=t=>()=>{st.input(t)},a=o?[]:n,i=null!=r?e[r]:void 0;return t("div",{class:"mt-2 flex flex-row justify-end"},o||!i||i.isClue||"."==i.key?"":t(ut,{label:"x",callback:s(".")}),a.map((n=>t(ut,{label:n,callback:s(n),matched:i.key===n}))))},bt=[2,5,11,14,20,23,29,32,38,41,47,50,56,59,65,68,74,77],wt=bt.map((t=>t+1)),yt=[18,19,20,21,22,23,24,25,26,45,46,47,48,49,50,51,52,53],mt=yt.map((t=>t+9)),vt=n=>{const{cell:e,focus:r,selected:o,solved:s}=n,{key:a,isClue:i,indx:l}=e,c="."!=a?a:"";return t("label",{class:at(`cell-${l}`,bt.includes(l)?"border-xbr-clrs-navy":"",wt.includes(l)?"border-xbl-clrs-navy":"",yt.includes(l)?"border-xbb-clrs-navy":"",mt.includes(l)?"border-xbt-clrs-navy":"","h-8 w-8 border border-solid text-center leading-8",o?"border-clrs-red bg-clrs-red-a50 text-clrs-red":r?"border-clrs-gray bg-clrs-green-a50 font-bold":i?"border-clrs-gray bg-clrs-silver":""!==c?"border-clrs-gray text-clrs-red":"border-clrs-gray"),onClick:((t,n)=>()=>{n||st.select(t)})(e,s)},c)},xt=()=>{const{list:n,pick:e,locs:r,solved:o}=F;return t("div",{class:at("flex flex-row flex-wrap","border border-solid border-clrs-navy","h-76p5 w-76p5 text-lg")},n.map(((n,s)=>{const a=!o&&s===e,i=!o&&r.includes(s);return t(vt,{cell:n,focus:i,selected:a,solved:o})})))},Ct=()=>t("label",{class:"ml-auto align-top text-xs italic text-clrs-slate4"},"Tailwind ","4.1.11"),kt=t=>()=>{t.refresh()},Tt=t=>()=>{t.check()},Rt=()=>{const{list:n,solved:e}=F;return t("div",{class:"flex flex-row"},t(ut,{label:b,callback:kt(st)}),81!==n.length||e?"":t(ut,{label:g,callback:Tt(st)}),t(Ct,null))},Et=class{constructor(t){r(this,t),this.tag="proto-sudoku",this.platform="vercel"}componentDidLoad(){st.initApp(this.platform)}render(){return t("div",{key:"9f50eec975c4da5f4984b80380067d5155dda0d1",id:"app",class:"ds1-main relative max-w-min p-0.5"},t(ht,{key:"e7bab7e257022a9920f8b43785d9dc33ab7fed65"}),t(pt,{key:"d8c32e6b9c20b9fe6c8ff2e9fc7a9900057a2679"},"Sudoku"),t(xt,{key:"8a028015ae4380aaa54a406ccf5cc908816ca6a4"}),t(gt,{key:"951b6d20ca7a99ced4c60aa39fe040af6e96dd46"}),t("hr",{key:"35ba2812a3b068b21b5252c5f07d0b5dc2f18527",class:"ml-0 mr-0"}),t(Rt,{key:"114e7edd4bf3da82ae344f56cb7e856ce17a6da8"}),t(ct,{key:"2c15eb0ba714d1e0c378882c62ce575c428adc2a"}))}};Et.style="/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root,\n :host {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji',\n 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-thin: 100;\n --font-weight-bold: 700;\n --radius-md: 0.375rem;\n --animate-spin: spin 1s linear infinite;\n }\n}\n@layer utilities {\n .absolute {\n position: absolute;\n }\n .relative {\n position: relative;\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .m-6 {\n margin: calc(var(--spacing) * 6);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-11 {\n margin-top: calc(var(--spacing) * 11);\n }\n .mr-0 {\n margin-right: calc(var(--spacing) * 0);\n }\n .mr-1 {\n margin-right: calc(var(--spacing) * 1);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-11 {\n margin-bottom: calc(var(--spacing) * 11);\n }\n .ml-0 {\n margin-left: calc(var(--spacing) * 0);\n }\n .ml-auto {\n margin-left: auto;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-24px {\n height: 24px;\n }\n .h-76p5 {\n height: 19.125rem;\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-76p5 {\n width: 19.125rem;\n }\n .max-w-min {\n max-width: min-content;\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-clrs-gray {\n border-color: var(--clrs-gray, #aaaaaa);\n }\n .border-clrs-navy {\n border-color: var(--clrs-navy, #001f3f);\n }\n .border-clrs-red {\n border-color: var(--clrs-red, #ff4136);\n }\n .border-clrs-slate4 {\n border-color: var(--clrs-slate4, #4e5964);\n }\n .bg-clrs-green-a50 {\n background-color: var(--clrs-green-a50, #2ecc4050);\n }\n .bg-clrs-navy {\n background-color: var(--clrs-navy, #001f3f);\n }\n .bg-clrs-red {\n background-color: var(--clrs-red, #ff4136);\n }\n .bg-clrs-red-a50 {\n background-color: var(--clrs-red-a50, #ff413650);\n }\n .bg-clrs-silver {\n background-color: var(--clrs-silver, #dddddd);\n }\n .bg-clrs-slate4 {\n background-color: var(--clrs-slate4, #4e5964);\n }\n .bg-clrs-yellow {\n background-color: var(--clrs-yellow, #ffdc00);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .text-center {\n text-align: center;\n }\n .align-top {\n vertical-align: top;\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .leading-8 {\n --tw-leading: calc(var(--spacing) * 8);\n line-height: calc(var(--spacing) * 8);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-thin {\n --tw-font-weight: var(--font-weight-thin);\n font-weight: var(--font-weight-thin);\n }\n .text-clrs-gray {\n color: var(--clrs-gray, #aaaaaa);\n }\n .text-clrs-navy {\n color: var(--clrs-navy, #001f3f);\n }\n .text-clrs-red {\n color: var(--clrs-red, #ff4136);\n }\n .text-clrs-slate4 {\n color: var(--clrs-slate4, #4e5964);\n }\n .text-white {\n color: var(--color-white);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .opacity-25 {\n opacity: 25%;\n }\n .opacity-75 {\n opacity: 75%;\n }\n .shadow {\n --tw-shadow:\n 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)),\n 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow), var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .border-xbb-clrs-navy {\n border-bottom: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbl-clrs-navy {\n border-left: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbr-clrs-navy {\n border-right: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbt-clrs-navy {\n border-top: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .hover\\:text-clrs-navy {\n &:hover {\n @media (hover: hover) {\n color: var(--clrs-navy, #001f3f);\n }\n }\n }\n}\n@layer components {\n .ds1-main {\n margin: calc(var(--spacing) * 6);\n display: flex;\n flex-direction: column;\n font-family: var(--font-sans);\n color: var(--clrs-navy, #001f3f);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or\n ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *,\n ::before,\n ::after,\n ::backdrop {\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n }\n }\n}\n";export{Et as proto_sudoku}
|
@@ -1 +1 @@
|
|
1
|
-
import{p as o,b as t}from"./p-moxqhnZq.js";export{s as setNonce}from"./p-moxqhnZq.js";import{g as
|
1
|
+
import{p as o,b as t}from"./p-moxqhnZq.js";export{s as setNonce}from"./p-moxqhnZq.js";import{g as a}from"./p-DQuL1Twl.js";(()=>{const s=import.meta.url,t={};return""!==s&&(t.resourcesUrl=new URL(".",s).href),o(t)})().then((async o=>(await a(),t([["p-a5b9d6f1",[[1,"proto-sudoku",{tag:[1],platform:[1]}]]]],o))));
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "proto-sudoku-wc",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.69",
|
4
4
|
"description": "prototype - a simple Sudoku app rendered in Stencil and Tailwind",
|
5
5
|
"main": "dist/index.cjs.js",
|
6
6
|
"module": "dist/index.js",
|
@@ -28,8 +28,8 @@
|
|
28
28
|
},
|
29
29
|
"dependencies": {
|
30
30
|
"@stencil/core": "4.36.0",
|
31
|
-
"@stencil/store": "2.
|
32
|
-
"ky": "1.8.
|
31
|
+
"@stencil/store": "2.2.0",
|
32
|
+
"ky": "1.8.2"
|
33
33
|
},
|
34
34
|
"devDependencies": {
|
35
35
|
"autoprefixer": "10.4.21",
|
@@ -1,2 +0,0 @@
|
|
1
|
-
import{h as t,g as n,f as e,r}from"./p-moxqhnZq.js";const o=n=>{const e=n.hex||"currentColor",r=n.size||24;return t("svg",{class:n.class,width:r,height:r,viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,n.label||"alien"),t("g",{fill:e},t("path",{d:"M10.31 10.93C11.33 12.57 11.18 14.5 9.96 15.28C8.74 16.04 6.92 15.33\n 5.89 13.69C4.87 12.05 5.03 10.1 6.25 9.34C7.47 8.58 9.29 9.29 10.31\n 10.93M12 17.75C14 17.75 14.5 17 14.5 17C14.5 17 14 19 12 19C10 19 9.5\n 17.03 9.5 17C9.5 17 10 17.75 12 17.75M17.75 9.34C18.97 10.1 19.13 12.05\n 18.11 13.69C17.08 15.33 15.26 16.04 14.04 15.28C12.82 14.5 12.67 12.57\n 13.69 10.93C14.71 9.29 16.53 8.58 17.75 9.34M12 20C14.5 20 20 14.86 20\n 11C20 7.14 16.41 4 12 4C7.59 4 4 7.14 4 11C4 14.86 9.5 20 12 20M12 2C17.5\n 2 22 6.04 22 11C22 15.08 16.32 22 12 22C7.68 22 2 15.08 2 11C2 6.04 6.5 2\n 12 2Z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},s="proto-sudoku",a=`${s}::data`,i=`${s}::inputs`,l=`${s}::pick`,c=t=>{const n=localStorage.getItem(t);return n?JSON.parse(n):void 0},d=(t,n)=>{const e=JSON.stringify(n);localStorage.setItem(t,e)},f=()=>[...c(i)],h=t=>{d(i,t.join(""))},p=()=>{const t=c(l);return null!==t?t:void 0},u=t=>{d(l,t>=0&&t<81?t:null)},g="Check ?",b="New Puzzle",w=t=>!("isConnected"in t)||t.isConnected,y=(()=>{let t;return(...n)=>{t&&clearTimeout(t),t=setTimeout((()=>{t=0,(t=>{for(let n of t.keys())t.set(n,t.get(n).filter(w))})(...n)}),2e3)}})(),m=t=>"function"==typeof t?t():t;class v extends Error{response;request;options;constructor(t,n,e){const r=`${t.status||0===t.status?t.status:""} ${t.statusText||""}`.trim();super(`Request failed with ${r?`status code ${r}`:"an unknown error"}: ${n.method} ${n.url}`),this.name="HTTPError",this.response=t,this.request=n,this.options=e}}class x extends Error{request;constructor(t){super(`Request timed out: ${t.method} ${t.url}`),this.name="TimeoutError",this.request=t}}const C=(()=>{let t=!1,n=!1;const e="function"==typeof globalThis.ReadableStream,r="function"==typeof globalThis.Request;if(e&&r)try{n=new globalThis.Request("https://empty.invalid",{body:new globalThis.ReadableStream,method:"POST",get duplex(){return t=!0,"half"}}).headers.has("Content-Type")}catch(t){if(t instanceof Error&&"unsupported BodyInit type"===t.message)return!1;throw t}return t&&!n})(),k="function"==typeof globalThis.AbortController,T="function"==typeof globalThis.ReadableStream,R="function"==typeof globalThis.FormData,E=["get","post","put","patch","head","delete"],M={json:"application/json",text:"text/*",formData:"multipart/form-data",arrayBuffer:"*/*",blob:"*/*"},S=2147483647,z=(new TextEncoder).encode("------WebKitFormBoundaryaxpyiPgbbPti10Rw").length,j=Symbol("stop"),A={json:!0,parseJson:!0,stringifyJson:!0,searchParams:!0,prefixUrl:!0,retry:!0,timeout:!0,hooks:!0,throwHttpErrors:!0,onDownloadProgress:!0,onUploadProgress:!0,fetch:!0},P={method:!0,headers:!0,body:!0,mode:!0,credentials:!0,cache:!0,redirect:!0,referrer:!0,referrerPolicy:!0,integrity:!0,keepalive:!0,signal:!0,window:!0,dispatcher:!0,duplex:!0,priority:!0},B=t=>null!==t&&"object"==typeof t,q=(...t)=>{for(const n of t)if((!B(n)||Array.isArray(n))&&void 0!==n)throw new TypeError("The `options` argument must be an object");return O({},...t)},U=(t={},n={})=>{const e=new globalThis.Headers(t),r=n instanceof globalThis.Headers,o=new globalThis.Headers(n);for(const[t,n]of o.entries())r&&"undefined"===n||void 0===n?e.delete(t):e.set(t,n);return e};function $(t,n,e){return Object.hasOwn(n,e)&&void 0===n[e]?[]:O(t[e]??[],n[e]??[])}const L=(t={},n={})=>({beforeRequest:$(t,n,"beforeRequest"),beforeRetry:$(t,n,"beforeRetry"),afterResponse:$(t,n,"afterResponse"),beforeError:$(t,n,"beforeError")}),O=(...t)=>{let n={},e={},r={};for(const o of t)if(Array.isArray(o))Array.isArray(n)||(n=[]),n=[...n,...o];else if(B(o)){for(let[t,e]of Object.entries(o))B(e)&&t in n&&(e=O(n[t],e)),n={...n,[t]:e};B(o.hooks)&&(r=L(r,o.hooks),n.hooks=r),B(o.headers)&&(e=U(e,o.headers),n.headers=e)}return n},D=t=>E.includes(t)?t.toUpperCase():t,N={limit:2,methods:["get","put","head","delete","options","trace"],statusCodes:[408,413,429,500,502,503,504],afterStatusCodes:[413,429,503],maxRetryAfter:Number.POSITIVE_INFINITY,backoffLimit:Number.POSITIVE_INFINITY,delay:t=>.3*2**(t-1)*1e3},H=(t={})=>{if("number"==typeof t)return{...N,limit:t};if(t.methods&&!Array.isArray(t.methods))throw new Error("retry.methods must be an array");if(t.statusCodes&&!Array.isArray(t.statusCodes))throw new Error("retry.statusCodes must be an array");return{...N,...t}};class _{static create(t,n){const e=new _(t,n),r=async()=>{if("number"==typeof e._options.timeout&&e._options.timeout>S)throw new RangeError("The `timeout` option cannot be greater than 2147483647");await Promise.resolve();let t=await e._fetch();for(const n of e._options.hooks.afterResponse){const r=await n(e.request,e._options,e._decorateResponse(t.clone()));r instanceof globalThis.Response&&(t=r)}if(e._decorateResponse(t),!t.ok&&e._options.throwHttpErrors){let n=new v(t,e.request,e._options);for(const t of e._options.hooks.beforeError)n=await t(n);throw n}if(e._options.onDownloadProgress){if("function"!=typeof e._options.onDownloadProgress)throw new TypeError("The `onDownloadProgress` option must be a function");if(!T)throw new Error("Streams are not supported in your environment. `ReadableStream` is missing.");return((t,n)=>{const e=Number(t.headers.get("content-length"))||0;let r=0;return 204===t.status?(n&&n({percent:1,totalBytes:e,transferredBytes:r},new Uint8Array),new Response(null,{status:t.status,statusText:t.statusText,headers:t.headers})):new Response(new ReadableStream({async start(o){const s=t.body.getReader();n&&n({percent:0,transferredBytes:0,totalBytes:e},new Uint8Array),await async function t(){const{done:a,value:i}=await s.read();a?o.close():(n&&(r+=i.byteLength,n({percent:0===e?0:r/e,transferredBytes:r,totalBytes:e},i)),o.enqueue(i),await t())}()}}),{status:t.status,statusText:t.statusText,headers:t.headers})})(t.clone(),e._options.onDownloadProgress)}return t},o=(e._options.retry.methods.includes(e.request.method.toLowerCase())?e._retry(r):r()).finally((async()=>{e.request.bodyUsed||await(e.request.body?.cancel())}));for(const[t,r]of Object.entries(M))o[t]=async()=>{e.request.headers.set("accept",e.request.headers.get("accept")||r);const s=await o;if("json"===t){if(204===s.status)return"";if(0===(await s.clone().arrayBuffer()).byteLength)return"";if(n.parseJson)return n.parseJson(await s.text())}return s[t]()};return o}request;abortController;_retryCount=0;_input;_options;constructor(t,n={}){if(this._input=t,this._options={...n,headers:U(this._input.headers,n.headers),hooks:L({beforeRequest:[],beforeRetry:[],beforeError:[],afterResponse:[]},n.hooks),method:D(n.method??this._input.method??"GET"),prefixUrl:String(n.prefixUrl||""),retry:H(n.retry),throwHttpErrors:!1!==n.throwHttpErrors,timeout:n.timeout??1e4,fetch:n.fetch??globalThis.fetch.bind(globalThis)},"string"!=typeof this._input&&!(this._input instanceof URL||this._input instanceof globalThis.Request))throw new TypeError("`input` must be a string, URL, or Request");if(this._options.prefixUrl&&"string"==typeof this._input){if(this._input.startsWith("/"))throw new Error("`input` must not begin with a slash when using `prefixUrl`");this._options.prefixUrl.endsWith("/")||(this._options.prefixUrl+="/"),this._input=this._options.prefixUrl+this._input}if(k){const t=this._options.signal??this._input.signal;this.abortController=new globalThis.AbortController,this._options.signal=t?AbortSignal.any([t,this.abortController.signal]):this.abortController.signal}if(C&&(this._options.duplex="half"),void 0!==this._options.json&&(this._options.body=this._options.stringifyJson?.(this._options.json)??JSON.stringify(this._options.json),this._options.headers.set("content-type",this._options.headers.get("content-type")??"application/json")),this.request=new globalThis.Request(this._input,this._options),this._options.searchParams){const t="string"==typeof this._options.searchParams?this._options.searchParams.replace(/^\?/,""):new URLSearchParams(this._options.searchParams).toString(),n=this.request.url.replace(/(?:\?.*?)?(?=#|$)/,"?"+t);!(R&&this._options.body instanceof globalThis.FormData||this._options.body instanceof URLSearchParams)||this._options.headers&&this._options.headers["content-type"]||this.request.headers.delete("content-type"),this.request=new globalThis.Request(new globalThis.Request(n,{...this.request}),this._options)}if(this._options.onUploadProgress){if("function"!=typeof this._options.onUploadProgress)throw new TypeError("The `onUploadProgress` option must be a function");if(!C)throw new Error("Request streams are not supported in your environment. The `duplex` option for `Request` is not available.");this.request.body&&(this.request=((t,n)=>{const e=(t=>{if(!t)return 0;if(t instanceof FormData){let n=0;for(const[e,r]of t)n+=z,n+=(new TextEncoder).encode(`Content-Disposition: form-data; name="${e}"`).length,n+="string"==typeof r?(new TextEncoder).encode(r).length:r.size;return n}if(t instanceof Blob)return t.size;if(t instanceof ArrayBuffer)return t.byteLength;if("string"==typeof t)return(new TextEncoder).encode(t).length;if(t instanceof URLSearchParams)return(new TextEncoder).encode(t.toString()).length;if("byteLength"in t)return t.byteLength;if("object"==typeof t&&null!==t)try{const n=JSON.stringify(t);return(new TextEncoder).encode(n).length}catch{return 0}return 0})(t.body);let r=0;return new Request(t,{duplex:"half",body:new ReadableStream({async start(o){const s=t.body instanceof ReadableStream?t.body.getReader():new Response("").body.getReader();await async function t(){const{done:a,value:i}=await s.read();if(a)return n&&n({percent:1,transferredBytes:r,totalBytes:Math.max(e,r)},new Uint8Array),void o.close();r+=i.byteLength;let l=0===e?0:r/e;(e<r||1===l)&&(l=.99),n&&n({percent:Number(l.toFixed(2)),transferredBytes:r,totalBytes:e},i),o.enqueue(i),await t()}()}})})})(this.request,this._options.onUploadProgress))}}_calculateRetryDelay(t){if(this._retryCount++,this._retryCount>this._options.retry.limit||t instanceof x)throw t;if(t instanceof v){if(!this._options.retry.statusCodes.includes(t.response.status))throw t;const n=t.response.headers.get("Retry-After")??t.response.headers.get("RateLimit-Reset")??t.response.headers.get("X-RateLimit-Reset")??t.response.headers.get("X-Rate-Limit-Reset");if(n&&this._options.retry.afterStatusCodes.includes(t.response.status)){let t=1e3*Number(n);Number.isNaN(t)?t=Date.parse(n)-Date.now():t>=Date.parse("2024-01-01")&&(t-=Date.now());const e=this._options.retry.maxRetryAfter??t;return t<e?t:e}if(413===t.response.status)throw t}const n=this._options.retry.delay(this._retryCount);return Math.min(this._options.retry.backoffLimit,n)}_decorateResponse(t){return this._options.parseJson&&(t.json=async()=>this._options.parseJson(await t.text())),t}async _retry(t){try{return await t()}catch(n){const e=Math.min(this._calculateRetryDelay(n),S);if(this._retryCount<1)throw n;await async function(t,{signal:n}){return new Promise(((e,r)=>{function o(){clearTimeout(s),r(n.reason)}n&&(n.throwIfAborted(),n.addEventListener("abort",o,{once:!0}));const s=setTimeout((()=>{n?.removeEventListener("abort",o),e()}),t)}))}(e,{signal:this._options.signal});for(const t of this._options.hooks.beforeRetry)if(await t({request:this.request,options:this._options,error:n,retryCount:this._retryCount})===j)return;return this._retry(t)}}async _fetch(){for(const t of this._options.hooks.beforeRequest){const n=await t(this.request,this._options);if(n instanceof Request){this.request=n;break}if(n instanceof Response)return n}const t=((t,n)=>{const e={};for(const r in n)r in P||r in A||r in t||(e[r]=n[r]);return e})(this.request,this._options),n=this.request;return this.request=n.clone(),!1===this._options.timeout?this._options.fetch(n,t):async function(t,n,e,r){return new Promise(((o,s)=>{const a=setTimeout((()=>{e&&e.abort(),s(new x(t))}),r.timeout);r.fetch(t,n).then(o).catch(s).then((()=>{clearTimeout(a)}))}))}(n,t,this.abortController,this._options)}}
|
2
|
-
/*! MIT License © Sindre Sorhus */const J=t=>{const n=(n,e)=>_.create(n,q(t,e));for(const e of E)n[e]=(n,r)=>_.create(n,q(t,r,{method:e}));return n.create=t=>J(q(t)),n.extend=n=>("function"==typeof n&&(n=n(t??{})),J(q(t,n))),n.stop=j,n},I=J(),X={list:[],keys:[],locs:[],loading:!1,solved:!1,error:void 0,pick:void 0,data:void 0},{state:W}=(()=>{const t=((t,n=(t,n)=>t!==n)=>{const e=m(t);let r=new Map(Object.entries(e??{}));const o={dispose:[],get:[],set:[],reset:[]},s=()=>{r=new Map(Object.entries(m(t)??{})),o.reset.forEach((t=>t()))},a=t=>(o.get.forEach((n=>n(t))),r.get(t)),i=(t,e)=>{const s=r.get(t);n(e,s,t)&&(r.set(t,e),o.set.forEach((n=>n(t,e,s))))},l="undefined"==typeof Proxy?{}:new Proxy(e,{get:(t,n)=>a(n),ownKeys:()=>Array.from(r.keys()),getOwnPropertyDescriptor:()=>({enumerable:!0,configurable:!0}),has:(t,n)=>r.has(n),set:(t,n,e)=>(i(n,e),!0)}),c=(t,n)=>(o[t].push(n),()=>{((t,n)=>{const e=t.indexOf(n);e>=0&&(t[e]=t[t.length-1],t.length--)})(o[t],n)});return{state:l,get:a,set:i,on:c,onChange:(n,e)=>{const r=c("set",((t,r)=>{t===n&&e(r)})),o=c("reset",(()=>e(m(t)[n])));return()=>{r(),o()}},use:(...t)=>{const n=t.reduce(((t,n)=>(n.set&&t.push(c("set",n.set)),n.get&&t.push(c("get",n.get)),n.reset&&t.push(c("reset",n.reset)),n.dispose&&t.push(c("dispose",n.dispose)),t)),[]);return()=>n.forEach((t=>t()))},dispose:()=>{o.dispose.forEach((t=>t())),s()},reset:s,forceUpdate:t=>{const n=r.get(t);o.set.forEach((e=>e(t,n,n)))}}})(X,void 0);return t.use((()=>{if("function"!=typeof n)return{};const t=new Map;return{dispose:()=>t.clear(),get:e=>{const r=n();r&&((t,n,e)=>{const r=t.get(n);r?r.includes(e)||r.push(e):t.set(n,[e])})(t,e,r)},set:n=>{const r=t.get(n);r&&t.set(n,r.filter(e)),y(t)},reset:()=>{t.forEach((t=>t.forEach(e))),y(t)}}})()),t})(),Z=new Map([["row",new Map],["column",new Map],["box",new Map]]),F=["1","2","3","4","5","6","7","8","9"],K=t=>{if(void 0!==t&&t.indx!=W.pick){const{isClue:n,indx:e,row:r,column:o,box:s}=t,a=((t,n,e,r)=>{const o=new Map([["row",n],["column",e],["box",r]]),s=new Set;return o.forEach(((n,e)=>{Z.get(e).get(n).forEach((n=>{n!==t&&s.add(n)}))})),Array.from(s)})(e,r,o,s),i=n?[]:(t=>{const{list:n}=W,e=new Set;return t.map((t=>{const{key:r}=n[t];"."!=r&&e.add(r)})),F.filter((t=>!e.has(t)))})(a);W.pick=e,W.keys=i,W.locs=a}else W.pick=void 0,W.keys=[],W.locs=[];Q(W.pick)};let G;const V={local:"http://localhost:8080/api",netlify:"/.netlify/functions",vercel:"https://sudoku-rust-api.vercel.app/api"},Y=t=>{h(t)},Q=t=>{u(t)},tt=(t=!1)=>{W.list=[],W.keys=[],W.locs=[],W.loading=t,W.solved=!1,W.error=void 0,W.pick=void 0,W.data=void 0},nt=(t,n=!0)=>{const{puzzle:e,ref:r}=t;n&&(h([]),d(a,t)),(t=>{if(t){const{puzzle:n,ref:e}=t,r=n?[...n]:[],o=e?atob(e):void 0,s=o?[...o]:[],a=r.map(((t,n)=>{const e=s[n],r=t===e,o=Math.floor(n/9),a=n%9,i=((t,n)=>n<3?t<3?0:t<6?3:6:n<6?t<3?1:t<6?4:7:t<3?2:t<6?5:8)(o,a);return((t,n,e,r)=>{new Map([["row",n],["column",e],["box",r]]).forEach(((n,e)=>{const r=Z.get(e);r.has(n)?r.get(n).add(t):r.set(n,new Set([t]))}))})(n,o,a,i),{key:t,isClue:r,value:e,indx:n,row:o,column:a,box:i}}));(t=>{f().forEach(((n,e)=>{const r=t[e],{isClue:o}=r;o||(r.key=n)}))})(a),W.data=t,W.list=a}else W.data=void 0,W.list=[]})({puzzle:e,ref:r})},et=t=>{W.list=[...t],t.length=0},rt={initApp:t=>{(t=>{const n=(t=>{const n=Object.keys(V).includes(t)?t:"vercel";return V[n]})(t);G=I.extend({hooks:{beforeRequest:[t=>{t.headers.set("X-Requested-With","ky"),t.headers.set("X-Custom-Header","foobar")}]},prefixUrl:n,timeout:1e4})})(t),tt();const n=c(a),e=p();if(n&&(nt(n,!1),e>=0)){const{list:t}=W;K(t[e])}},refresh:async()=>{tt(!0),Y([]),Q(W.pick);try{const t=await G.get("puzzle").json();nt(t)}catch(t){const{message:n}=t;console.log("-- ",n),console.log(t),W.error=n}finally{W.loading=!1}},select:t=>{K(t)},check:()=>{const{list:t}=W,n=[];let e=0,r=0,o=0;t.forEach((t=>{const{key:s,value:a,isClue:i}=t;i?o+=1:"."!==s&&(s!==a?(e+=1,t.key="."):r+=1),n.push(t.key)}));const s=o+r;Y(r?n:[]),e>0?et(t):81===s&&(W.solved=!0)},input:t=>{const{pick:n,list:e}=W;e[n].key=t,et(e)}},ot=(...t)=>t.filter(Boolean).join(" "),st=n=>{const e=n.hex||"currentColor",r=n.label||"loading...",o=n.size||24;return t("svg",{class:ot(n.class||"","animate-spin"),width:o,height:o,fill:"none",viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,r),t("g",null,t("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:e,"stroke-width":"4"}),t("path",{class:"opacity-75",fill:e,d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},at=n=>{const{message:e,salute:r,spinner:s=!1}=n;return t("div",{class:"mt-5 flex h-24px flex-row items-center"},t(s?st:o,{class:"mr-2"}),r?t("label",{class:"mr-1 font-bold"},r,":"):"",t("label",{class:"italic"},e))},it=()=>{const{solved:n,loading:e,error:r}=W;return t("div",{class:"flex flex-col"},e||r||n?"":t(at,{message:"Welcome, are you ready to play?..."}),e?t(at,{message:"Loading...",spinner:!0}):"",r?t(at,{message:r,salute:"ERROR"}):"",n?t(at,{message:"You solved the puzzle!!"}):"")},lt=n=>{const e=n.hex||"currentColor",r=n.size||24;return t("svg",{class:n.class,width:r,height:r,viewBox:"0 0 24 24",role:"img","aria-label":"title"},t("title",null,n.label||"fingerprint"),t("g",{fill:e},t("path",{d:"M17.81,4.47C17.73,4.47 17.65,4.45 17.58,4.41C15.66,3.42 14,3\n 12,3C10.03,3 8.15,3.47 6.44,4.41C6.2,4.54 5.9,4.45 5.76,4.21C5.63,3.97\n 5.72,3.66 5.96,3.53C7.82,2.5 9.86,2 12,2C14.14,2 16,2.47\n 18.04,3.5C18.29,3.65 18.38,3.95 18.25,4.19C18.16,4.37 18,4.47\n 17.81,4.47M3.5,9.72C3.4,9.72 3.3,9.69 3.21,9.63C3,9.47 2.93,9.16\n 3.09,8.93C4.08,7.53 5.34,6.43 6.84,5.66C10,4.04 14,4.03\n 17.15,5.65C18.65,6.42 19.91,7.5 20.9,8.9C21.06,9.12 21,9.44\n 20.78,9.6C20.55,9.76 20.24,9.71 20.08,9.5C19.18,8.22 18.04,7.23\n 16.69,6.54C13.82,5.07 10.15,5.07 7.29,6.55C5.93,7.25 4.79,8.25\n 3.89,9.5C3.81,9.65 3.66,9.72 3.5,9.72M9.75,21.79C9.62,21.79 9.5,21.74\n 9.4,21.64C8.53,20.77 8.06,20.21 7.39,19C6.7,17.77 6.34,16.27\n 6.34,14.66C6.34,11.69 8.88,9.27 12,9.27C15.12,9.27 17.66,11.69\n 17.66,14.66A0.5,0.5 0 0,1 17.16,15.16A0.5,0.5 0 0,1\n 16.66,14.66C16.66,12.24 14.57,10.27 12,10.27C9.43,10.27 7.34,12.24\n 7.34,14.66C7.34,16.1 7.66,17.43 8.27,18.5C8.91,19.66 9.35,20.15\n 10.12,20.93C10.31,21.13 10.31,21.44 10.12,21.64C10,21.74 9.88,21.79\n 9.75,21.79M16.92,19.94C15.73,19.94 14.68,19.64 13.82,19.05C12.33,18.04\n 11.44,16.4 11.44,14.66A0.5,0.5 0 0,1 11.94,14.16A0.5,0.5 0 0,1\n 12.44,14.66C12.44,16.07 13.16,17.4 14.38,18.22C15.09,18.7 15.92,18.93\n 16.92,18.93C17.16,18.93 17.56,18.9 17.96,18.83C18.23,18.78 18.5,18.96\n 18.54,19.24C18.59,19.5 18.41,19.77 18.13,19.82C17.56,19.93 17.06,19.94\n 16.92,19.94M14.91,22C14.87,22 14.82,22 14.78,22C13.19,21.54 12.15,20.95\n 11.06,19.88C9.66,18.5 8.89,16.64 8.89,14.66C8.89,13.04 10.27,11.72\n 11.97,11.72C13.67,11.72 15.05,13.04 15.05,14.66C15.05,15.73 16,16.6\n 17.13,16.6C18.28,16.6 19.21,15.73 19.21,14.66C19.21,10.89 15.96,7.83\n 11.96,7.83C9.12,7.83 6.5,9.41 5.35,11.86C4.96,12.67 4.76,13.62\n 4.76,14.66C4.76,15.44 4.83,16.67 5.43,18.27C5.53,18.53 5.4,18.82\n 5.14,18.91C4.88,19 4.59,18.87 4.5,18.62C4,17.31 3.77,16\n 3.77,14.66C3.77,13.46 4,12.37 4.45,11.42C5.78,8.63 8.73,6.82\n 11.96,6.82C16.5,6.82 20.21,10.33 20.21,14.65C20.21,16.27 18.83,17.59\n 17.13,17.59C15.43,17.59 14.05,16.27 14.05,14.65C14.05,13.58 13.12,12.71\n 11.97,12.71C10.82,12.71 9.89,13.58 9.89,14.65C9.89,16.36 10.55,17.96\n 11.76,19.16C12.71,20.1 13.62,20.62 15.03,21C15.3,21.08 15.45,21.36\n 15.38,21.62C15.33,21.85 15.12,22 14.91,22Z"})),t("path",{d:"M0 0h24v24H0z",fill:"none"}))},ct="eswat2",dt=()=>t("a",{class:"absolute right-0 top-0 text-clrs-gray hover:text-clrs-navy",href:"https://eswat2.dev","aria-label":ct,target:"blank",title:ct},t(lt,{label:ct})),ft=(n,e)=>t("h1",{class:ot("text-center uppercase text-clrs-red","mb-11 ml-0 mr-0 mt-11","text-6xl font-thin")},e),ht=n=>{const{label:e,callback:r,matched:o=!1}=n;return t("button",{class:ot("rounded-md border border-solid border-clrs-slate4 font-bold",e===g?"mr-2 bg-clrs-yellow px-3 py-2 text-clrs-navy":e===b?"mr-2 bg-clrs-navy px-3 py-2 text-white":"x"===e?"mr-1 bg-clrs-red px-2 py-1 text-white":o?"mr-1 bg-clrs-slate4 px-2 py-1 text-white":"mr-1 bg-gray-50 px-2 py-1 text-clrs-navy"),onClick:r},e)},pt=()=>{const{keys:n,list:e,pick:r,solved:o}=W,s=t=>()=>{rt.input(t)},a=o?[]:n,i=null!=r?e[r]:void 0;return t("div",{class:"mt-2 flex flex-row justify-end"},o||!i||i.isClue||"."==i.key?"":t(ht,{label:"x",callback:s(".")}),a.map((n=>t(ht,{label:n,callback:s(n),matched:i.key===n}))))},ut=[2,5,11,14,20,23,29,32,38,41,47,50,56,59,65,68,74,77],gt=ut.map((t=>t+1)),bt=[18,19,20,21,22,23,24,25,26,45,46,47,48,49,50,51,52,53],wt=bt.map((t=>t+9)),yt=n=>{const{cell:e,focus:r,selected:o,solved:s}=n,{key:a,isClue:i,indx:l}=e,c="."!=a?a:"";return t("label",{class:ot(`cell-${l}`,ut.includes(l)?"border-xbr-clrs-navy":"",gt.includes(l)?"border-xbl-clrs-navy":"",bt.includes(l)?"border-xbb-clrs-navy":"",wt.includes(l)?"border-xbt-clrs-navy":"","h-8 w-8 border border-solid text-center leading-8",o?"border-clrs-red bg-clrs-red-a50 text-clrs-red":r?"border-clrs-gray bg-clrs-green-a50 font-bold":i?"border-clrs-gray bg-clrs-silver":""!==c?"border-clrs-gray text-clrs-red":"border-clrs-gray"),onClick:((t,n)=>()=>{n||rt.select(t)})(e,s)},c)},mt=()=>{const{list:n,pick:e,locs:r,solved:o}=W;return t("div",{class:ot("flex flex-row flex-wrap","border border-solid border-clrs-navy","h-76p5 w-76p5 text-lg")},n.map(((n,s)=>{const a=!o&&s===e,i=!o&&r.includes(s);return t(yt,{cell:n,focus:i,selected:a,solved:o})})))},vt=()=>t("label",{class:"ml-auto align-top text-xs italic text-clrs-slate4"},"Tailwind ","4.1.11"),xt=t=>()=>{t.refresh()},Ct=t=>()=>{t.check()},kt=()=>{const{list:n,solved:e}=W;return t("div",{class:"flex flex-row"},t(ht,{label:b,callback:xt(rt)}),81!==n.length||e?"":t(ht,{label:g,callback:Ct(rt)}),t(vt,null))},Tt=class{constructor(t){r(this,t),this.tag="proto-sudoku",this.platform="vercel"}componentDidLoad(){rt.initApp(this.platform)}render(){return t("div",{key:"9f50eec975c4da5f4984b80380067d5155dda0d1",id:"app",class:"ds1-main relative max-w-min p-0.5"},t(dt,{key:"e7bab7e257022a9920f8b43785d9dc33ab7fed65"}),t(ft,{key:"d8c32e6b9c20b9fe6c8ff2e9fc7a9900057a2679"},"Sudoku"),t(mt,{key:"8a028015ae4380aaa54a406ccf5cc908816ca6a4"}),t(pt,{key:"951b6d20ca7a99ced4c60aa39fe040af6e96dd46"}),t("hr",{key:"35ba2812a3b068b21b5252c5f07d0b5dc2f18527",class:"ml-0 mr-0"}),t(kt,{key:"114e7edd4bf3da82ae344f56cb7e856ce17a6da8"}),t(it,{key:"2c15eb0ba714d1e0c378882c62ce575c428adc2a"}))}};Tt.style="/*! tailwindcss v4.1.11 | MIT License | https://tailwindcss.com */\n@layer properties;\n@layer theme, base, components, utilities;\n@layer theme {\n :root,\n :host {\n --font-sans:\n ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji',\n 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n --color-gray-50: oklch(98.5% 0.002 247.839);\n --color-white: #fff;\n --spacing: 0.25rem;\n --text-xs: 0.75rem;\n --text-xs--line-height: calc(1 / 0.75);\n --text-lg: 1.125rem;\n --text-lg--line-height: calc(1.75 / 1.125);\n --text-6xl: 3.75rem;\n --text-6xl--line-height: 1;\n --font-weight-thin: 100;\n --font-weight-bold: 700;\n --radius-md: 0.375rem;\n --animate-spin: spin 1s linear infinite;\n }\n}\n@layer utilities {\n .absolute {\n position: absolute;\n }\n .relative {\n position: relative;\n }\n .top-0 {\n top: calc(var(--spacing) * 0);\n }\n .right-0 {\n right: calc(var(--spacing) * 0);\n }\n .m-6 {\n margin: calc(var(--spacing) * 6);\n }\n .mt-2 {\n margin-top: calc(var(--spacing) * 2);\n }\n .mt-5 {\n margin-top: calc(var(--spacing) * 5);\n }\n .mt-11 {\n margin-top: calc(var(--spacing) * 11);\n }\n .mr-0 {\n margin-right: calc(var(--spacing) * 0);\n }\n .mr-1 {\n margin-right: calc(var(--spacing) * 1);\n }\n .mr-2 {\n margin-right: calc(var(--spacing) * 2);\n }\n .mb-11 {\n margin-bottom: calc(var(--spacing) * 11);\n }\n .ml-0 {\n margin-left: calc(var(--spacing) * 0);\n }\n .ml-auto {\n margin-left: auto;\n }\n .flex {\n display: flex;\n }\n .grid {\n display: grid;\n }\n .h-8 {\n height: calc(var(--spacing) * 8);\n }\n .h-24px {\n height: 24px;\n }\n .h-76p5 {\n height: 19.125rem;\n }\n .w-8 {\n width: calc(var(--spacing) * 8);\n }\n .w-76p5 {\n width: 19.125rem;\n }\n .max-w-min {\n max-width: min-content;\n }\n .animate-spin {\n animation: var(--animate-spin);\n }\n .flex-col {\n flex-direction: column;\n }\n .flex-row {\n flex-direction: row;\n }\n .flex-wrap {\n flex-wrap: wrap;\n }\n .items-center {\n align-items: center;\n }\n .justify-end {\n justify-content: flex-end;\n }\n .rounded-md {\n border-radius: var(--radius-md);\n }\n .border {\n border-style: var(--tw-border-style);\n border-width: 1px;\n }\n .border-solid {\n --tw-border-style: solid;\n border-style: solid;\n }\n .border-clrs-gray {\n border-color: var(--clrs-gray, #aaaaaa);\n }\n .border-clrs-navy {\n border-color: var(--clrs-navy, #001f3f);\n }\n .border-clrs-red {\n border-color: var(--clrs-red, #ff4136);\n }\n .border-clrs-slate4 {\n border-color: var(--clrs-slate4, #4e5964);\n }\n .bg-clrs-green-a50 {\n background-color: var(--clrs-green-a50, #2ecc4050);\n }\n .bg-clrs-navy {\n background-color: var(--clrs-navy, #001f3f);\n }\n .bg-clrs-red {\n background-color: var(--clrs-red, #ff4136);\n }\n .bg-clrs-red-a50 {\n background-color: var(--clrs-red-a50, #ff413650);\n }\n .bg-clrs-silver {\n background-color: var(--clrs-silver, #dddddd);\n }\n .bg-clrs-slate4 {\n background-color: var(--clrs-slate4, #4e5964);\n }\n .bg-clrs-yellow {\n background-color: var(--clrs-yellow, #ffdc00);\n }\n .bg-gray-50 {\n background-color: var(--color-gray-50);\n }\n .p-0\\.5 {\n padding: calc(var(--spacing) * 0.5);\n }\n .px-2 {\n padding-inline: calc(var(--spacing) * 2);\n }\n .px-3 {\n padding-inline: calc(var(--spacing) * 3);\n }\n .py-1 {\n padding-block: calc(var(--spacing) * 1);\n }\n .py-2 {\n padding-block: calc(var(--spacing) * 2);\n }\n .text-center {\n text-align: center;\n }\n .align-top {\n vertical-align: top;\n }\n .font-sans {\n font-family: var(--font-sans);\n }\n .text-6xl {\n font-size: var(--text-6xl);\n line-height: var(--tw-leading, var(--text-6xl--line-height));\n }\n .text-lg {\n font-size: var(--text-lg);\n line-height: var(--tw-leading, var(--text-lg--line-height));\n }\n .text-xs {\n font-size: var(--text-xs);\n line-height: var(--tw-leading, var(--text-xs--line-height));\n }\n .leading-8 {\n --tw-leading: calc(var(--spacing) * 8);\n line-height: calc(var(--spacing) * 8);\n }\n .font-bold {\n --tw-font-weight: var(--font-weight-bold);\n font-weight: var(--font-weight-bold);\n }\n .font-thin {\n --tw-font-weight: var(--font-weight-thin);\n font-weight: var(--font-weight-thin);\n }\n .text-clrs-gray {\n color: var(--clrs-gray, #aaaaaa);\n }\n .text-clrs-navy {\n color: var(--clrs-navy, #001f3f);\n }\n .text-clrs-red {\n color: var(--clrs-red, #ff4136);\n }\n .text-clrs-slate4 {\n color: var(--clrs-slate4, #4e5964);\n }\n .text-white {\n color: var(--color-white);\n }\n .uppercase {\n text-transform: uppercase;\n }\n .italic {\n font-style: italic;\n }\n .opacity-25 {\n opacity: 25%;\n }\n .opacity-75 {\n opacity: 75%;\n }\n .shadow {\n --tw-shadow:\n 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)),\n 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));\n box-shadow:\n var(--tw-inset-shadow), var(--tw-inset-ring-shadow),\n var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);\n }\n .border-xbb-clrs-navy {\n border-bottom: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbl-clrs-navy {\n border-left: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbr-clrs-navy {\n border-right: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .border-xbt-clrs-navy {\n border-top: 1px solid var(--clrs-navy, #001f3f) !important;\n }\n .hover\\:text-clrs-navy {\n &:hover {\n @media (hover: hover) {\n color: var(--clrs-navy, #001f3f);\n }\n }\n }\n}\n@layer components {\n .ds1-main {\n margin: calc(var(--spacing) * 6);\n display: flex;\n flex-direction: column;\n font-family: var(--font-sans);\n color: var(--clrs-navy, #001f3f);\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n@layer properties {\n @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or\n ((-moz-orient: inline) and (not (color: rgb(from red r g b)))) {\n *,\n ::before,\n ::after,\n ::backdrop {\n --tw-border-style: solid;\n --tw-leading: initial;\n --tw-font-weight: initial;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-color: initial;\n --tw-shadow-alpha: 100%;\n --tw-inset-shadow: 0 0 #0000;\n --tw-inset-shadow-color: initial;\n --tw-inset-shadow-alpha: 100%;\n --tw-ring-color: initial;\n --tw-ring-shadow: 0 0 #0000;\n --tw-inset-ring-color: initial;\n --tw-inset-ring-shadow: 0 0 #0000;\n --tw-ring-inset: initial;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-offset-shadow: 0 0 #0000;\n }\n }\n}\n";export{Tt as proto_sudoku}
|