diff --git a/dist/index.497c99a1.js b/dist/index.497c99a1.js index f8ad8d6..c59f3ed 100644 --- a/dist/index.497c99a1.js +++ b/dist/index.497c99a1.js @@ -142,464 +142,11 @@ this[globalName] = mainExports; } } -})({"gAhhU":[function(require,module,exports,__globalThis) { -var global = arguments[3]; -var HMR_HOST = null; -var HMR_PORT = null; -var HMR_SECURE = false; -var HMR_ENV_HASH = "d6ea1d42532a7575"; -var HMR_USE_SSE = false; -module.bundle.HMR_BUNDLE_ID = "69a3e010497c99a1"; -"use strict"; -/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ /*:: -import type { - HMRAsset, - HMRMessage, -} from '@parcel/reporter-dev-server/src/HMRServer.js'; -interface ParcelRequire { - (string): mixed; - cache: {|[string]: ParcelModule|}; - hotData: {|[string]: mixed|}; - Module: any; - parent: ?ParcelRequire; - isParcelRequire: true; - modules: {|[string]: [Function, {|[string]: string|}]|}; - HMR_BUNDLE_ID: string; - root: ParcelRequire; -} -interface ParcelModule { - hot: {| - data: mixed, - accept(cb: (Function) => void): void, - dispose(cb: (mixed) => void): void, - // accept(deps: Array | string, cb: (Function) => void): void, - // decline(): void, - _acceptCallbacks: Array<(Function) => void>, - _disposeCallbacks: Array<(mixed) => void>, - |}; -} -interface ExtensionContext { - runtime: {| - reload(): void, - getURL(url: string): string; - getManifest(): {manifest_version: number, ...}; - |}; -} -declare var module: {bundle: ParcelRequire, ...}; -declare var HMR_HOST: string; -declare var HMR_PORT: string; -declare var HMR_ENV_HASH: string; -declare var HMR_SECURE: boolean; -declare var HMR_USE_SSE: boolean; -declare var chrome: ExtensionContext; -declare var browser: ExtensionContext; -declare var __parcel__import__: (string) => Promise; -declare var __parcel__importScripts__: (string) => Promise; -declare var globalThis: typeof self; -declare var ServiceWorkerGlobalScope: Object; -*/ var OVERLAY_ID = '__parcel__error__overlay__'; -var OldModule = module.bundle.Module; -function Module(moduleName) { - OldModule.call(this, moduleName); - this.hot = { - data: module.bundle.hotData[moduleName], - _acceptCallbacks: [], - _disposeCallbacks: [], - accept: function(fn) { - this._acceptCallbacks.push(fn || function() {}); - }, - dispose: function(fn) { - this._disposeCallbacks.push(fn); - } - }; - module.bundle.hotData[moduleName] = undefined; -} -module.bundle.Module = Module; -module.bundle.hotData = {}; -var checkedAssets /*: {|[string]: boolean|} */ , disposedAssets /*: {|[string]: boolean|} */ , assetsToDispose /*: Array<[ParcelRequire, string]> */ , assetsToAccept /*: Array<[ParcelRequire, string]> */ ; -function getHostname() { - return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost'); -} -function getPort() { - return HMR_PORT || location.port; -} -// eslint-disable-next-line no-redeclare -var parent = module.bundle.parent; -if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { - var hostname = getHostname(); - var port = getPort(); - var protocol = HMR_SECURE || location.protocol == 'https:' && ![ - 'localhost', - '127.0.0.1', - '0.0.0.0' - ].includes(hostname) ? 'wss' : 'ws'; - var ws; - if (HMR_USE_SSE) ws = new EventSource('/__parcel_hmr'); - else try { - ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/'); - } catch (err) { - if (err.message) console.error(err.message); - ws = {}; - } - // Web extension context - var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser; - // Safari doesn't support sourceURL in error stacks. - // eval may also be disabled via CSP, so do a quick check. - var supportsSourceURL = false; - try { - (0, eval)('throw new Error("test"); //# sourceURL=test.js'); - } catch (err) { - supportsSourceURL = err.stack.includes('test.js'); - } - // $FlowFixMe - ws.onmessage = async function(event /*: {data: string, ...} */ ) { - checkedAssets = {} /*: {|[string]: boolean|} */ ; - disposedAssets = {} /*: {|[string]: boolean|} */ ; - assetsToAccept = []; - assetsToDispose = []; - var data /*: HMRMessage */ = JSON.parse(event.data); - if (data.type === 'reload') fullReload(); - else if (data.type === 'update') { - // Remove error overlay if there is one - if (typeof document !== 'undefined') removeErrorOverlay(); - let assets = data.assets.filter((asset)=>asset.envHash === HMR_ENV_HASH); - // Handle HMR Update - let handled = assets.every((asset)=>{ - return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle); - }); - if (handled) { - console.clear(); - // Dispatch custom event so other runtimes (e.g React Refresh) are aware. - if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') window.dispatchEvent(new CustomEvent('parcelhmraccept')); - await hmrApplyUpdates(assets); - hmrDisposeQueue(); - // Run accept callbacks. This will also re-execute other disposed assets in topological order. - let processedAssets = {}; - for(let i = 0; i < assetsToAccept.length; i++){ - let id = assetsToAccept[i][1]; - if (!processedAssets[id]) { - hmrAccept(assetsToAccept[i][0], id); - processedAssets[id] = true; - } - } - } else fullReload(); - } - if (data.type === 'error') { - // Log parcel errors to console - for (let ansiDiagnostic of data.diagnostics.ansi){ - let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack; - console.error("\uD83D\uDEA8 [parcel]: " + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n')); - } - if (typeof document !== 'undefined') { - // Render the fancy html overlay - removeErrorOverlay(); - var overlay = createErrorOverlay(data.diagnostics.html); - // $FlowFixMe - document.body.appendChild(overlay); - } - } - }; - if (ws instanceof WebSocket) { - ws.onerror = function(e) { - if (e.message) console.error(e.message); - }; - ws.onclose = function() { - console.warn("[parcel] \uD83D\uDEA8 Connection to the HMR server was lost"); - }; - } -} -function removeErrorOverlay() { - var overlay = document.getElementById(OVERLAY_ID); - if (overlay) { - overlay.remove(); - console.log("[parcel] \u2728 Error resolved"); - } -} -function createErrorOverlay(diagnostics) { - var overlay = document.createElement('div'); - overlay.id = OVERLAY_ID; - let errorHTML = '
'; - for (let diagnostic of diagnostics){ - let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame)=>{ - return `${p} -${frame.location} -${frame.code}`; - }, '') : diagnostic.stack; - errorHTML += ` -
-
- \u{1F6A8} ${diagnostic.message} -
-
${stack}
-
- ${diagnostic.hints.map((hint)=>"
\uD83D\uDCA1 " + hint + '
').join('')} -
- ${diagnostic.documentation ? `
\u{1F4DD} Learn more
` : ''} -
- `; - } - errorHTML += '
'; - overlay.innerHTML = errorHTML; - return overlay; -} -function fullReload() { - if ('reload' in location) location.reload(); - else if (extCtx && extCtx.runtime && extCtx.runtime.reload) extCtx.runtime.reload(); -} -function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ { - var modules = bundle.modules; - if (!modules) return []; - var parents = []; - var k, d, dep; - for(k in modules)for(d in modules[k][1]){ - dep = modules[k][1][d]; - if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) parents.push([ - bundle, - k - ]); - } - if (bundle.parent) parents = parents.concat(getParents(bundle.parent, id)); - return parents; -} -function updateLink(link) { - var href = link.getAttribute('href'); - if (!href) return; - var newLink = link.cloneNode(); - newLink.onload = function() { - if (link.parentNode !== null) // $FlowFixMe - link.parentNode.removeChild(link); - }; - newLink.setAttribute('href', // $FlowFixMe - href.split('?')[0] + '?' + Date.now()); - // $FlowFixMe - link.parentNode.insertBefore(newLink, link.nextSibling); -} -var cssTimeout = null; -function reloadCSS() { - if (cssTimeout) return; - cssTimeout = setTimeout(function() { - var links = document.querySelectorAll('link[rel="stylesheet"]'); - for(var i = 0; i < links.length; i++){ - // $FlowFixMe[incompatible-type] - var href /*: string */ = links[i].getAttribute('href'); - var hostname = getHostname(); - var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort()); - var absolute = /^https?:\/\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer; - if (!absolute) updateLink(links[i]); - } - cssTimeout = null; - }, 50); -} -function hmrDownload(asset) { - if (asset.type === 'js') { - if (typeof document !== 'undefined') { - let script = document.createElement('script'); - script.src = asset.url + '?t=' + Date.now(); - if (asset.outputFormat === 'esmodule') script.type = 'module'; - return new Promise((resolve, reject)=>{ - var _document$head; - script.onload = ()=>resolve(script); - script.onerror = reject; - (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script); - }); - } else if (typeof importScripts === 'function') { - // Worker scripts - if (asset.outputFormat === 'esmodule') return import(asset.url + '?t=' + Date.now()); - else return new Promise((resolve, reject)=>{ - try { - importScripts(asset.url + '?t=' + Date.now()); - resolve(); - } catch (err) { - reject(err); - } - }); - } - } -} -async function hmrApplyUpdates(assets) { - global.parcelHotUpdate = Object.create(null); - let scriptsToRemove; - try { - // If sourceURL comments aren't supported in eval, we need to load - // the update from the dev server over HTTP so that stack traces - // are correct in errors/logs. This is much slower than eval, so - // we only do it if needed (currently just Safari). - // https://bugs.webkit.org/show_bug.cgi?id=137297 - // This path is also taken if a CSP disallows eval. - if (!supportsSourceURL) { - let promises = assets.map((asset)=>{ - var _hmrDownload; - return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch((err)=>{ - // Web extension fix - if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) { - extCtx.runtime.reload(); - return; - } - throw err; - }); - }); - scriptsToRemove = await Promise.all(promises); - } - assets.forEach(function(asset) { - hmrApply(module.bundle.root, asset); - }); - } finally{ - delete global.parcelHotUpdate; - if (scriptsToRemove) scriptsToRemove.forEach((script)=>{ - if (script) { - var _document$head2; - (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script); - } - }); - } -} -function hmrApply(bundle /*: ParcelRequire */ , asset /*: HMRAsset */ ) { - var modules = bundle.modules; - if (!modules) return; - if (asset.type === 'css') reloadCSS(); - else if (asset.type === 'js') { - let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; - if (deps) { - if (modules[asset.id]) { - // Remove dependencies that are removed and will become orphaned. - // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. - let oldDeps = modules[asset.id][1]; - for(let dep in oldDeps)if (!deps[dep] || deps[dep] !== oldDeps[dep]) { - let id = oldDeps[dep]; - let parents = getParents(module.bundle.root, id); - if (parents.length === 1) hmrDelete(module.bundle.root, id); - } - } - if (supportsSourceURL) // Global eval. We would use `new Function` here but browser - // support for source maps is better with eval. - (0, eval)(asset.output); - // $FlowFixMe - let fn = global.parcelHotUpdate[asset.id]; - modules[asset.id] = [ - fn, - deps - ]; - } - // Always traverse to the parent bundle, even if we already replaced the asset in this bundle. - // This is required in case modules are duplicated. We need to ensure all instances have the updated code. - if (bundle.parent) hmrApply(bundle.parent, asset); - } -} -function hmrDelete(bundle, id) { - let modules = bundle.modules; - if (!modules) return; - if (modules[id]) { - // Collect dependencies that will become orphaned when this module is deleted. - let deps = modules[id][1]; - let orphans = []; - for(let dep in deps){ - let parents = getParents(module.bundle.root, deps[dep]); - if (parents.length === 1) orphans.push(deps[dep]); - } - // Delete the module. This must be done before deleting dependencies in case of circular dependencies. - delete modules[id]; - delete bundle.cache[id]; - // Now delete the orphans. - orphans.forEach((id)=>{ - hmrDelete(module.bundle.root, id); - }); - } else if (bundle.parent) hmrDelete(bundle.parent, id); -} -function hmrAcceptCheck(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - if (hmrAcceptCheckOne(bundle, id, depsByBundle)) return true; - // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. - let parents = getParents(module.bundle.root, id); - let accepted = false; - while(parents.length > 0){ - let v = parents.shift(); - let a = hmrAcceptCheckOne(v[0], v[1], null); - if (a) // If this parent accepts, stop traversing upward, but still consider siblings. - accepted = true; - else { - // Otherwise, queue the parents in the next level upward. - let p = getParents(module.bundle.root, v[1]); - if (p.length === 0) { - // If there are no parents, then we've reached an entry without accepting. Reload. - accepted = false; - break; - } - parents.push(...p); - } - } - return accepted; -} -function hmrAcceptCheckOne(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - var modules = bundle.modules; - if (!modules) return; - if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { - // If we reached the root bundle without finding where the asset should go, - // there's nothing to do. Mark as "accepted" so we don't reload the page. - if (!bundle.parent) return true; - return hmrAcceptCheck(bundle.parent, id, depsByBundle); - } - if (checkedAssets[id]) return true; - checkedAssets[id] = true; - var cached = bundle.cache[id]; - assetsToDispose.push([ - bundle, - id - ]); - if (!cached || cached.hot && cached.hot._acceptCallbacks.length) { - assetsToAccept.push([ - bundle, - id - ]); - return true; - } -} -function hmrDisposeQueue() { - // Dispose all old assets. - for(let i = 0; i < assetsToDispose.length; i++){ - let id = assetsToDispose[i][1]; - if (!disposedAssets[id]) { - hmrDispose(assetsToDispose[i][0], id); - disposedAssets[id] = true; - } - } - assetsToDispose = []; -} -function hmrDispose(bundle /*: ParcelRequire */ , id /*: string */ ) { - var cached = bundle.cache[id]; - bundle.hotData[id] = {}; - if (cached && cached.hot) cached.hot.data = bundle.hotData[id]; - if (cached && cached.hot && cached.hot._disposeCallbacks.length) cached.hot._disposeCallbacks.forEach(function(cb) { - cb(bundle.hotData[id]); - }); - delete bundle.cache[id]; -} -function hmrAccept(bundle /*: ParcelRequire */ , id /*: string */ ) { - // Execute the module. - bundle(id); - // Run the accept callbacks in the new version of the module. - var cached = bundle.cache[id]; - if (cached && cached.hot && cached.hot._acceptCallbacks.length) { - let assetsToAlsoAccept = []; - cached.hot._acceptCallbacks.forEach(function(cb) { - let additionalAssets = cb(function() { - return getParents(module.bundle.root, id); - }); - if (Array.isArray(additionalAssets) && additionalAssets.length) assetsToAlsoAccept.push(...additionalAssets); - }); - if (assetsToAlsoAccept.length) { - let handled = assetsToAlsoAccept.every(function(a) { - return hmrAcceptCheck(a[0], a[1]); - }); - if (!handled) return fullReload(); - hmrDisposeQueue(); - } - } -} - -},{}],"jhnsJ":[function(require,module,exports,__globalThis) { +})({"jhnsJ":[function(require,module,exports,__globalThis) { module.exports = JSON.parse("{\"_\":\"\",\"B\":\"black\",\"W\":\"white\",\"g\":\"#231f20\",\"y\":\"#ffd300\",\"b\":\"#6262EA\",\"t\":\"#5DA3EA\",\"s\":\"#E67070\",\"r\":\"#e32119\",\"R\":\"#ab0c0c\",\"c\":\"#59EEA3\",\"G\":\"#A1F051\",\"v\":\"#A664E8\",\"p\":\"#E869E8\",\"a\":\"#5BECEC\",\"C\":\"#53EE53\",\"S\":\"#F44848\",\"P\":\"#E66BA8\",\"O\":\"#F29E4A\",\"k\":\"#618227\",\"e\":\"#e1c8b4\",\"l\":\"#9b9fa4\"}"); },{}],"kqnNl":[function(require,module,exports,__globalThis) { -module.exports = JSON.parse('[{"name":"71 mini","size":5,"bricks":"bbb____bt__btt__b_t___ttt","svg":23,"color":""},{"name":"Butterfly","bricks":"_________bb_t_t_bbbbb_t_bbbbbbbtbbbb_bbbtbbb____btb____bbbtbbb__bb_t_bb___________________","size":9,"svg":20,"color":""},{"name":"Castle","size":7,"bricks":"s_s_s_ssssssssssBBBssssBBBssttbbbttttbbbtttbtbtbt","svg":16},{"name":"Eyes","size":9,"bricks":"ttttttt__tWWWWWWW_tWrrWttW_tWWWWWWW_ttttttt_____t______ttttt____ttttt_____t_t","svg":null,"color":""},{"name":"Creeper","size":10,"bricks":"___________ccGGccGG__cGccGcGc__GBBccBBc__cBBGcBBc__GccBBGGc__ccBBBBcG__GGBBBBcG__cGBccBGc___________","svg":22},{"name":"Stairs","size":8,"bricks":"tt______tt______bbtt____bbtt____vvbbtt__vvbbtt__ppvvbbttppvvbbtt","svg":14},{"name":"Dots","size":9,"bricks":"b_t_a_c_C__________b_t_a_c__________v_b_t_a_c__________v_b_t_a__________p_v_b_t_a","svg":null},{"name":"Lines","size":9,"bricks":"aaaaaaaa___________tttttttt_________aaaaaaaa___________tttttttt_________aaaaaaaa","svg":8,"color":""},{"name":"Heart","size":15,"bricks":"__________________RRR___RRR_____RSSSR_RSSSR___RSWWSSRSSSSSR__RSWSSSSSSSSSR__RSSSSSSSSSSSR__RSWSSSSSSSSSR___RSSSSSSSSSR_____RSSSSSSSR_______RSSSSSR_________RSSSR___________RSR_____________R____________________________________","svg":17,"color":""},{"name":"Swiss","size":7,"bricks":"________RRRRR__RRWRR__RWWWR__RRWRR__RRRRR","svg":13,"color":""},{"name":"Germany","size":6,"bricks":"_______gggg__rrrr__yyyy","svg":null,"color":""},{"name":"France","size":8,"bricks":"_________ttWWrr__ttWWrr__ttWWrr__ttWWrr__ttWWrr________","svg":null,"color":""},{"name":"Smiley","size":8,"bricks":"_________yy__yy__yy__yy__________________yyyyyy___yyyy__________","svg":29,"color":""},{"name":"Labyrinthe","size":11,"bricks":"_______tttS_Stttt_S________t___S__Stt_ttttt____t_____S__ttt_S_S____t___t_tttt_t_S_t____tSt_t_t_Sttt___t_t_____Sttt_tttttS","svg":21},{"name":"Temple","size":11,"bricks":"_______________WWW______WWWWWWW___WWWWWWWWW___t_t_t_t____b_b_b_b____v_v_v_v____p_p_p_p____P_P_P_P____WWWWWWW___WWWWWWWWW_","svg":null,"color":""},{"name":"Pacman","size":12,"bricks":"____yyyy______yyyyyyyy___yyyyByyyyy__yyyyyyyyy__yyyyyyyy____yyyyyy______yyyyyy___S_Syyyyyyyy_____yyyyyyyyy___yyyyyyyyyy___yyyyyyyy______yyyy","svg":7,"color":""},{"name":"Ship","size":11,"bricks":"____sWW________sWWW_______sWWW_______s___OOOOOOOOOOOOOO_OBOBOBOBOO__OOOOOOOO_bbbbbbbbgbbbbgbbbbggbbbggbbbbbbbb","svg":19},{"name":"We come in peace","size":13,"bricks":"________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________","svg":24,"color":""},{"name":"Space mushroom","size":10,"bricks":"______________WW_______WWWW_____WWWWWW___WWBWWBWW__WWWWWWWW____W__W_____W_WW_W___W_W__W_W","svg":6,"color":""},{"name":"Wololo","size":9,"bricks":"____WW_OOW___WW__OWW__W___OWWWbbbW_WWW_WbW_WOW__WWb__OW__bbb__O___W_W__O___W_W__O","svg":null,"color":""},{"name":"Small heart","size":15,"bricks":"________________________________RRRR___RRRR___RrWWrR_RWWrrR__RWWrrrRWWrrrR__RrrrrrrrrrrrR__RrrrrrrrrrrrR___RrrrrrrrrrR_____RrrrrrrrR_______RrrrrrR_________RrrrR___________RrR_____________R______________________","svg":29,"color":""},{"name":"Eye","size":9,"bricks":"____________ggg_____gWWWg___gWbbbWg_gWWbBbWWg_gWbbbWg___gWWWg_____ggg____________","svg":null,"color":"#5da3ea"},{"name":"Enderman","size":10,"bricks":"___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________","svg":"","color":"#26a269"},{"name":"Mushroom","size":16,"bricks":"_____________________rrrrWW________WWrrrrWWWW_____WWrrrrrrWWWW____WrrWWWWrrWWW___rrrWWWWWWrrrrr__rrrWWWWWWrrWWr__WrrWWWWWWrWWWW__WWrrWWWWrrWWWW__WWrrrrrrrrrWWr__WrrWWWWWWWWrrr_____WWBWWBWW_______WWWBWWBWWW______WWWWWWWWWW_______WWWWWWWW____________________","svg":null,"color":""},{"name":"Tulip","size":11,"bricks":"______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________","svg":29,"color":""},{"name":"Chain","size":7,"bricks":"yyy____yBy____yyyyy____yBy____yyyyy____yBy____yyy","svg":31,"color":""},{"name":"Marion","size":9,"bricks":"rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr","svg":null,"color":""},{"name":"Renan","size":9,"bricks":"yyyyyyy___yyyyyyy__yy___yy__yy___yy__yyyyyy___yy_yy____yy__yy___yy___yy_yyy___yyy","svg":3,"color":""},{"name":"Violet Pairs","size":8,"bricks":"b_b_b_b_b_b_b_b__________t_t_t_t_t_t_t_t________b_b_b_b_b_b_b_b","svg":5,"color":""},{"name":"Red Cups","size":11,"bricks":"___________rBr_rBr_rBrrrr_rrr_rrr___________r_rBr_rBr_rr_rrr_rrr_r___________rBr_rBr_rBrrrr_rrr_rrr__________","svg":23,"color":""},{"name":"Cactus","size":10,"bricks":"____G______rG_Gk______G_Gk______kkkk_r_____kkk_G______GkGk_____rGkk_______Gk________kk________kk_____","svg":27,"color":""},{"name":"Sunny Face","size":11,"bricks":"____yyy______yyyyyyy___yyyyyyyyy__yyyyyyyyy_yyyWWyWWyyyyyyyyyyyyyyyyyyyyyyyyy_yyWWWWWyy__yyyWWWyyy___yyyyyyy______yyy","svg":null,"color":"#5da3ea"},{"name":"Mountain","size":9,"bricks":"_______________W_______WWW______GGWW__W_GGGGG_kkkGGGGG_kkkkGGGGkkkkkGGGGkkkkkkGGG_________","svg":15,"color":""},{"name":"Dollar","size":17,"bricks":"________________________G_G______________G_G____________GGGGGGG_________GGGGGGGGG_______GG__G_G__GG______GG__G_G__GG______GG__G_G___________GGGGGGGG__________GGGGGGGG___________G_G__GG______GG__G_G__GG______GG__G_G__GG_______GGGGGGGGG_________GGGGGGG____________G_G______________G_G________________________","svg":null,"color":""},{"name":"Waves","size":8,"bricks":"___bbb____bbb____bbttbbbbbttbbbbttttaatttttaattttaaaaaaa","svg":20,"color":""},{"name":"Box","size":8,"bricks":"yyyyyyyyy______yy_bbbb_yy_b__b_yy_b__b_yy_bbbb_yy______yyyyyyyyy","svg":30,"color":"","squared":false},{"name":"Rose","size":9,"bricks":"__SS______SSSS_____SSSS_____SSSS______SS_k______k_kk_____kk_k______kk________k","svg":4,"color":""},{"name":"Time","size":9,"bricks":"__________WWWWWWW___WWWWW_____yyy_______y________y_______WyW_____WyyyW___yyyyyyy__________","svg":9,"color":"","squared":false},{"name":"Watermelon","size":8,"bricks":"_____Sk_____SSBk___SBSSk__SSSSSk_SSBSSk_SBSSSSk_kSSSkk___kkk____","svg":28,"color":""},{"name":"Worms","size":13,"bricks":"___sssss_______sssssss______WWsWWsss_____WBsBWsss_____WBsBWsss_____WWsWWsss_____sssssss_______ssssss_____WWWWWWss_______WssWs__s_____ssss__sss___sssssssssss__sssssssss_ss","svg":null,"color":"","squared":false},{"name":"Ocean Sunrise","size":8,"bricks":"SSSSSSSSSSSyySSSSSyyyySSSyyWWyySbttaattbbbttttbbbbbttbbbbbbbbbbb","svg":12,"color":""},{"name":"Crosses","size":13,"bricks":"b___b___b___b__v___v___v___vvv_vvv_vvv___v___v___v__p___p___p___ppp_ppp_ppp_ppp___p___p___p__P___P___P___PPP_PPP_PPP___P___P___P__p___p___p___ppp_ppp_ppp_ppp___p___p___p","svg":10,"color":""},{"name":"Negative space","size":9,"bricks":"tttttttttt_t_t_t_t_________b_b_b_b_bbbbbbbbbb_b_b_b_b___________t_t_t_t_ttttttttt_________","svg":null},{"name":"UK","size":11,"bricks":"brbbWrWbbrbbbrbWrWbrbbbbbrWrWrbbbWWWWWrWWWWWrrrrrrrrrrrWWWWWrWWWWWbbbrWrWrbbbbbrbWrWbrbbbrbbWrWbbrb__________","svg":null,"color":""},{"name":"Greece","size":11,"bricks":"ttWttttttttttWttWWWWWWWWWWWttttttttWttWWWWWWttWttttttttWWWWWWWWWWWtttttttttttWWWWWWWWWWWttttttttttt__________","svg":null,"color":""},{"name":"Russia","size":8,"bricks":"________WWWWWWWWWWWWWWWWttttttttttttttttrrrrrrrrrrrrrrrr________________","svg":null,"color":""},{"name":"Ukraine","size":8,"bricks":"________ttttttttttttttttttttttttyyyyyyyyyyyyyyyyyyyyyyyy________","svg":null,"color":""},{"name":"Poland","size":7,"bricks":"________WWWWW__WWWWW__rrrrr__rrrrr_______________","svg":null,"color":""},{"name":"Yellow 71","size":9,"bricks":"_________yyyyy__yyyyyyy_yyy___yy__yy__yyy__yy_yyy___yy_yy____yy_yy____yy__________________","svg":26,"color":""},{"name":"71 on white","size":6,"bricks":"WWWWWWrrrWWrWWrWrrWrWWWrWrWWWrWWWWWW______","svg":null},{"name":"Blue 71","size":8,"bricks":"ttttt__bttttt_bb___ttbbb__tt__bb__tt__bb_tt___bb_tt___bb_tt___bb","svg":null,"color":""},{"name":"Seventy one","size":21,"bricks":"rr_yy_rrry_yrrry_yrrrr_ry_yr__y_yr_ry_y_r_rr_yy_rr_yy_r_ry_y_r_r_ry_yr__y_yr_ry_y_r_rr_y_yrrry_yrrryyy_r_yyy__________________y______________r_____yyyrrry_yrrryyyrr_y_y__yrr_y_yrr_y_yr__y_yyyyrrr_y_rrry_yrrryyy____________________yrrryyyrrr_________yy_r_ry_yrr_____________rrry_yrrryyyyyyyyyyyy_____________________________________________________________________________________________________________________________","svg":null},{"name":"B71","size":10,"bricks":"__________bbbtttt_b_b__b__tbb_b__b__t_b_bbb__t__b_b__b_t__b_b__bt___b_bbb_t__bbb__________","svg":null},{"name":"Pig","size":9,"bricks":"__________PP___PP__PPP_PPP__WWPPPWW__WBPPPBW__PPsssPP__PsBsBsP__PPsssPP___________","svg":null},{"name":"Big Pig","size":15,"bricks":"________________sss_______sss__ss__sssss__ss____sssssssss_____sWBsssssBWs___ssBBsssssBBss__ssss_____ssss__sss_sssss_sss__sss_sBsBs_sss__sss_sssss_sss___sss_____sss____sssssssssss__GGGsssssssssGGGGGGsGsssssGsGGGGGGssGGGGGssGGG_______________","svg":2,"color":""},{"name":"Donkey Kong","size":9,"bricks":"OOr__a___OOr__a___ppppppp_O______a________a____pppppppr_a______b_a___O__ppppppp__","svg":null,"color":""},{"name":"Banana","size":12,"bricks":"_________________e__________eee_________eee_________eee_________eeeyy_____yyeeyyyy___yyyyey_yC___yy_yyy___C_____yyyy_________yyyy_________yyyy","svg":null},{"name":"Fox","size":8,"bricks":"e______eee_OO_eeeeOOOOeeeOBOOBOeOOOOOOOO_WWBBWW___WWWW_____WW___","svg":null},{"name":"Wiki","size":10,"bricks":"_______________________GGGG_____GGkkGG___GkggggkG__GgWWWWgG__GkggggkG___GGkkGG_____GGGG_______________________","svg":null},{"name":"Baby Dog","size":8,"bricks":"_______W__eeeeWWWWeeWeWWWegWegeeeeWWWWee_eWggWe__eWWWWe____WW","svg":null},{"name":"Cute dog","size":9,"bricks":"__________O_____O_OOOWWWOOOOOWWWWWOOOOeWWWWOO_eBeWWBW__eBeWWBW___eWBWW_____WRW____________","svg":null},{"name":"icon:extra_life","size":9,"bricks":"___________rr_rr___rrrrrrr_rrrrrrrrrrrrrrrrrr_rrrrrrr___rrrrr_____rrr_______r_____________","svg":null},{"name":"icon:streak_shots","size":8,"bricks":"_W_W_W__W_W_W_W_tttttt_WttttttW_tttttt_W______W______W_____WWWW","svg":null},{"name":"icon:base_combo","size":8,"bricks":"ttttttttttyyttttttyytyyttttttyyttyyttttttyytyyttttttyytttttttttt________","svg":null},{"name":"icon:slow_down","size":10,"bricks":"_____________kk_______kkkk_____kkkkkkGG__kkkkkkGBG_kkkkkkGGGGkkkkkkGG__GGGGGG____GG__GG_____________","svg":null},{"name":"icon:bigger_puck","size":8,"bricks":"_________tttttt__tttttt______________________W___________WWWWWW_","svg":null},{"name":"icon:viscosity","size":8,"bricks":"________tt______bbtt__ttbbbbttbbbtbbtbbbbbtbbtbbbbbybbybbbbbbbbb","svg":null},{"name":"icon:left_is_lava","size":8,"bricks":"r_______rtttttt_rtttttt_r_______r_______r____W__r_______r_WWW___","svg":null},{"name":"icon:right_is_lava","size":8,"bricks":"_______r_ttttttr_ttttttr_______r_______r_____W_r_______r__WWW__r","svg":null},{"name":"icon:telekinesis","size":8,"bricks":"_____PW_____s______P______s_______P_______s_______P_____WWWWW","svg":null},{"name":"icon:top_is_lava","size":8,"bricks":"rrrrrrrr_tttttt__tttttt____________________W_______________WWW__","svg":null},{"name":"icon:coin_magnet","size":8,"bricks":"__y__y_yy_________y_y_y_y________y_y______________y______WWW____","svg":null},{"name":"icon:skip_last","size":5,"bricks":"_ttt_t_t_ttt_ttt_t_t_ttt_","svg":null},{"name":"icon:multiball","size":8,"bricks":"_________tttttt__tttttt___________W__W____________________WWW___","svg":null},{"name":"icon:smaller_puck","size":8,"bricks":"_________tttttt__tttttt_____________W_____________________WW____","svg":null},{"name":"icon:pierce","size":6,"bricks":"ttttttttttWtttt__ttt__ttt__ttt__tttt","svg":null},{"name":"icon:picky_eater","size":8,"bricks":"rtrtrtrttrtrtrtrrtrtrtrt____________________t_____________WWWW","svg":null},{"name":"icon:metamorphosis","size":8,"bricks":"aaaaaa__aaaa__________W___________ttaatt__tttttt_________WWW","svg":null},{"name":"icon:compound_interest","size":8,"bricks":"_________tttttt__ttt__t______y_____________W__y_________rrWWWrrr","svg":null},{"name":"icon:hot_start","size":7,"bricks":"ttttttttttt_tt_____W_____y_y_____y_____y_y_WWW_y_","svg":null},{"name":"icon:sapper","size":9,"bricks":"_____WW______W__W_tttWttt_yttgggtt__tgggggt__tgggggt__tgggggt__ttgggtt__ttttttt___________","svg":null,"color":"#000000"},{"name":"icon:bigger_explosions","size":8,"bricks":"__r_______ry_rr___ryry__ryyyW_rr_rrWyyy___yryrr__yrry_rr_rr","svg":null},{"name":"icon:extra_levels","size":6,"bricks":"__________b__t_bb_ttt_b__t_bbb____________","svg":null},{"name":"icon:pierce_color","size":8,"bricks":"bb___bbbb__b_bbb_____bbb____bbbbb____bbbbb____bbbbb____bbbbb____","svg":null},{"name":"icon:soft_reset","size":8,"bricks":"___rg_____rrgg___rryggg_rryWggggrryWgggg_ryyggg___rrgg_____rg___","svg":null},{"name":"icon:ball_repulse_ball","size":8,"bricks":"WsP__PsWs______sP______P________________P______Ps______sWsP__PsW","svg":null},{"name":"icon:ball_attract_ball","size":8,"bricks":"__P__P____s__s__PsW__WsP________________PsW__WsP__s__s____P__P__","svg":null},{"name":"icon:puck_repulse_ball","size":8,"bricks":"__________________W_______s___W___P__s______P____________WWW__","svg":null},{"name":"A","size":7,"bricks":"___t_____ttt___t___t__t___t_tttttttt_____tt_____t","svg":null},{"name":"B","size":9,"bricks":"_bbbbb_____bb_bb____bb_bb____bb_bb____bbbb_____bb_bb____bb_bb____bb_bb___bbbbb____","svg":null},{"name":"C","size":8,"bricks":"__rrrr___rrrrrr_rrr___rrrr______rr______rrr___rr_rrrrrr___rrrr","svg":null},{"name":"D","size":8,"bricks":"_GGGGG____GG__G___GG__GG__GG__GG__GG__GG__GG__GG__GG__G__GGGGG","svg":null},{"name":"e","size":8,"bricks":"__tttt___tttttt_tt____tttt____tttttttttttt_______tt__tt___tttt_","svg":null},{"name":"icon:wind","size":9,"bricks":"_ss______s___PPPP_s_________sssssss___________sssssss_s________s___PPPP__ss","svg":null},{"name":"icon:sturdy_bricks","size":7,"bricks":"ttbttttbtttbtt____W_____W_W___W___W_______WWW____","svg":null},{"name":"icon:respawn","size":9,"bricks":"tttt___ttttt__t__ttta_ttt_______________________________W_________________WWW","svg":null},{"name":"Elephant","size":18,"bricks":"_________________________llll_________lll_llllll_lll___lsssllllllllsssl__lsssllllllllsssl__lsssllBllBllsssl__lssllWllllWllssl___ll__llllll__ll_________llll_______________ll______________llll______________ll________________________________________________________________________________________________________________________________________","svg":25,"color":""},{"name":"Orca","size":20,"bricks":"____________________________________________________________________________________________BBBBB____BBB_BBB___BBBBBBB____BBBBB___BBBBBBBBB____BBB___BBBBWBBWWW_____BBBBBBBBBBBWWWW_____BBBBBBBBBBWWWWW_____BBBBBBBBBWWWWW_______BBBBBBBWWWWW___________WWBBWWW______________BBB_BB______________BB__B______________________________________________________________________________________________________________________________","svg":null,"color":"#1c71d8"},{"name":"Shark","size":17,"bricks":"__________________________________________g_______________ggg____________ggggggg_________ggggggggg_______ggggggggggg_____gggggWWWggggg____gBgWWWWWWWgBg___ggWWWWrWrWWWWgg__ggWWWrrrrrWWWgg_ggWWWrrrrrrrWWWggggWWrrrrrrrrrWWgggWWWrWrWrWrWrWWWggWWrrWWWWWWWrrWWggWWWWWWWWWWWWWWWg_________________","svg":null,"color":"#3584e4"},{"name":"Bird","size":13,"bricks":"_______RRR____R____RSSSR___RR__RSSWWWR__RSR_RSWWBWR__RSSRRSW_WWyy_RSSSRSWWWR___RSSSSSSRR_____RRSSyyyy______RSyyyyy___RRRRSyyyy____RSSSRyyy_____RRRR________","svg":null,"color":""},{"name":"Tux","size":14,"bricks":"_____gggg________gggggggg_____gggggggggg____gggggggggg___gggggggggggg__gggWBggWBggg__gggBBggBBggg__ggggyyyygggg_ggggggyyggggggggggWWWWWWggggg_gWWWWWWWWg_g__WWWWWWWWWW____WWWWWWWWWW____yyy____yyy__","svg":null,"color":"#62a0ea"},{"name":"Armenia","size":6,"bricks":"_______rrrr__bbbb__yyyy_____________","svg":null,"color":""},{"name":"Austria","size":6,"bricks":"_______rrrr__WWWW__rrrr______","svg":null,"color":""},{"name":"Benin","size":8,"bricks":"_________kkyyyy__kkyyyy__kkrrrr__kkrrrr__________________________","svg":null,"color":""},{"name":"Botswana","size":10,"bricks":"___________tttttttt__tttttttt__tttttttt__WWWWWWWW__BBBBBBBB__WWWWWWWW__tttttttt__tttttttt__tttttttt___________","svg":null,"color":""},{"name":"Bulgaria","size":6,"bricks":"_______WWWW__cccc__rrrr_____________","svg":null,"color":""},{"name":"Canada","size":7,"bricks":"________rWWWr__rWrWr__rWWWr______________________","svg":null,"color":""},{"name":"Chad","size":8,"bricks":"_________bbyyRR__bbyyRR__bbyyRR","svg":null,"color":""},{"name":"China","size":8,"bricks":"_________RRyRRR__RyRyRR__RRyRRR__RRRRRR","svg":null,"color":""},{"name":"Colombia","size":7,"bricks":"________yyyyy__yyyyy__bbbbb__RRRRR_______________","svg":null,"color":""},{"name":"Republic of the Congo","size":7,"bricks":"________kkkyy__kkyyr__kyyrr__yyrrr_______________","svg":null,"color":""},{"name":"C\xf4te d\'Ivoire","size":8,"bricks":"_________OOWWGG__OOWWGG__OOWWGG","svg":null,"color":""},{"name":"Denmark","size":8,"bricks":"_________rrWrrr__rrWrrr__WWWWWW__rrWrrr__rrWrrr","svg":null,"color":""},{"name":"El Salvador","size":8,"bricks":"_________bbbbbb__bbbbbb__WWWkWW__WWkWWW__bbbbbb__bbbbbb","svg":null,"color":""},{"name":"Egypt","size":8,"bricks":"_________RRRRRR__RRRRRR__WWWyWW__WWyWWW__gggggg__gggggg","svg":null,"color":"#1c71d8"},{"name":"Estonia","size":8,"bricks":"_________tttttt__tttttt__gggggg__gggggg__WWWWWW__WWWWWW","svg":null,"color":"#986a44"},{"name":"Finland","size":6,"bricks":"_______WtWW__tttt__WtWW_____________","svg":null,"color":""},{"name":"Gabon","size":5,"bricks":"______CCC__yyy__ttt______","svg":null,"color":""},{"name":"Georgia","size":9,"bricks":"__________WrWrWrW__WWWrWWW__rrrrrrr__WWWrWWW__WrWrWrW__________________","svg":null,"color":""},{"name":"Guinea","size":8,"bricks":"_________rryycc__rryycc__rryycc","svg":null,"color":""},{"name":"Indonesia","size":6,"bricks":"_______rrrr__rrrr__WWWW__WWWW_______","svg":null,"color":""},{"name":"icon:one_more_choice","size":7,"bricks":"ttt____tbbb___tbttt__tbtbbb__btbbb___tbbb____bbb_","svg":null},{"name":"icon:instant_upgrade","size":5,"bricks":"ttt__tbbb_tbbb_tbbb__bbb_","svg":null},{"name":"icon:checkmark_checked","size":6,"bricks":"_WWWWGWBBBGGGGBGGWWGGGBWWBGBBW_WWWW_","svg":null},{"name":"icon:checkmark_unchecked","size":6,"bricks":"_WWWW_WBBBBWWBBBBWWBBBBWWBBBBW_WWWW_","svg":null},{"name":"icon:fullscreen","size":6,"bricks":"WW__WWW____W____________W____WWW__WW","svg":null},{"name":"icon:exit_fullscreen","size":6,"bricks":"_W__W_WW__WW____________WW__WW_W__W_","svg":null}]'); +module.exports = JSON.parse('[{"name":"71 mini","size":5,"bricks":"bbb____bt__btt__b_t___ttt","svg":23,"color":""},{"name":"Butterfly","bricks":"_________bb_t_t_bbbbb_t_bbbbbbbtbbbb_bbbtbbb____btb____bbbtbbb__bb_t_bb___________________","size":9,"svg":20,"color":""},{"name":"Castle","size":7,"bricks":"s_s_s_ssssssssssBBBssssBBBssttbbbttttbbbtttbtbtbt","svg":16},{"name":"Eyes","size":9,"bricks":"ttttttt__tWWWWWWW_tWrrWttW_tWWWWWWW_ttttttt_____t______ttttt____ttttt_____t_t","svg":null,"color":""},{"name":"Creeper","size":10,"bricks":"___________ccGGccGG__cGccGcGc__GBBccBBc__cBBGcBBc__GccBBGGc__ccBBBBcG__GGBBBBcG__cGBccBGc___________","svg":22},{"name":"Stairs","size":8,"bricks":"tt______tt______bbtt____bbtt____vvbbtt__vvbbtt__ppvvbbttppvvbbtt","svg":14},{"name":"Dots","size":9,"bricks":"b_t_a_c_C__________b_t_a_c__________v_b_t_a_c__________v_b_t_a__________p_v_b_t_a","svg":null},{"name":"Lines","size":9,"bricks":"aaaaaaaa___________tttttttt_________aaaaaaaa___________tttttttt_________aaaaaaaa","svg":8,"color":""},{"name":"Heart","size":15,"bricks":"__________________RRR___RRR_____RSSSR_RSSSR___RSWWSSRSSSSSR__RSWSSSSSSSSSR__RSSSSSSSSSSSR__RSWSSSSSSSSSR___RSSSSSSSSSR_____RSSSSSSSR_______RSSSSSR_________RSSSR___________RSR_____________R____________________________________","svg":17,"color":""},{"name":"Swiss","size":7,"bricks":"________RRRRR__RRWRR__RWWWR__RRWRR__RRRRR","svg":13,"color":""},{"name":"Germany","size":6,"bricks":"_______gggg__rrrr__yyyy","svg":null,"color":""},{"name":"France","size":8,"bricks":"_________ttWWrr__ttWWrr__ttWWrr__ttWWrr__ttWWrr________","svg":null,"color":""},{"name":"Smiley","size":8,"bricks":"_________yy__yy__yy__yy__________________yyyyyy___yyyy__________","svg":29,"color":""},{"name":"Labyrinthe","size":11,"bricks":"_______tttS_Stttt_S________t___S__Stt_ttttt____t_____S__ttt_S_S____t___t_tttt_t_S_t____tSt_t_t_Sttt___t_t_____Sttt_tttttS","svg":21},{"name":"Temple","size":11,"bricks":"_______________WWW______WWWWWWW___WWWWWWWWW___t_t_t_t____b_b_b_b____v_v_v_v____p_p_p_p____P_P_P_P____WWWWWWW___WWWWWWWWW_","svg":null,"color":""},{"name":"Pacman","size":12,"bricks":"____yyyy______yyyyyyyy___yyyyByyyyy__yyyyyyyyy__yyyyyyyy____yyyyyy______yyyyyy___S_Syyyyyyyy_____yyyyyyyyy___yyyyyyyyyy___yyyyyyyy______yyyy","svg":7,"color":""},{"name":"Ship","size":11,"bricks":"____sWW________sWWW_______sWWW_______s___OOOOOOOOOOOOOO_OBOBOBOBOO__OOOOOOOO_bbbbbbbbgbbbbgbbbbggbbbggbbbbbbbb","svg":19},{"name":"We come in peace","size":13,"bricks":"________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________","svg":29,"color":""},{"name":"Space mushroom","size":10,"bricks":"______________WW_______WWWW_____WWWWWW___WWBWWBWW__WWWWWWWW____W__W_____W_WW_W___W_W__W_W","svg":6,"color":""},{"name":"Wololo","size":9,"bricks":"____WW_OOW___WW__OWW__W___OWWWbbbW_WWW_WbW_WOW__WWb__OW__bbb__O___W_W__O___W_W__O","svg":null,"color":""},{"name":"Small heart","size":15,"bricks":"________________________________RRRR___RRRR___RrWWrR_RWWrrR__RWWrrrRWWrrrR__RrrrrrrrrrrrR__RrrrrrrrrrrrR___RrrrrrrrrrR_____RrrrrrrrR_______RrrrrrR_________RrrrR___________RrR_____________R______________________","svg":29,"color":""},{"name":"Eye","size":9,"bricks":"____________ggg_____gWWWg___gWbbbWg_gWWbBbWWg_gWbbbWg___gWWWg_____ggg____________","svg":null,"color":"#5da3ea"},{"name":"Enderman","size":10,"bricks":"___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________","svg":null,"color":"#154b07"},{"name":"Mushroom","size":16,"bricks":"_____________________rrrrWW________WWrrrrWWWW_____WWrrrrrrWWWW____WrrWWWWrrWWW___rrrWWWWWWrrrrr__rrrWWWWWWrrWWr__WrrWWWWWWrWWWW__WWrrWWWWrrWWWW__WWrrrrrrrrrWWr__WrrWWWWWWWWrrr_____WWBWWBWW_______WWWBWWBWWW______WWWWWWWWWW_______WWWWWWWW____________________","svg":null,"color":""},{"name":"Tulip","size":11,"bricks":"______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________","svg":17,"color":""},{"name":"Chain","size":7,"bricks":"yyy____yBy____yyyyy____yBy____yyyyy____yBy____yyy","svg":31,"color":""},{"name":"Marion","size":9,"bricks":"rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr","svg":27,"color":""},{"name":"Renan","size":9,"bricks":"yyyyyyy___yyyyyyy__yy___yy__yy___yy__yyyyyy___yy_yy____yy__yy___yy___yy_yyy___yyy","svg":3,"color":""},{"name":"Violet Pairs","size":8,"bricks":"b_b_b_b_b_b_b_b__________t_t_t_t_t_t_t_t________b_b_b_b_b_b_b_b","svg":5,"color":""},{"name":"Red Cups","size":11,"bricks":"___________rBr_rBr_rBrrrr_rrr_rrr___________r_rBr_rBr_rr_rrr_rrr_r___________rBr_rBr_rBrrrr_rrr_rrr__________","svg":23,"color":""},{"name":"Cactus","size":10,"bricks":"____G______rG_Gk______G_Gk______kkkk_r_____kkk_G______GkGk_____rGkk_______Gk________kk________kk_____","svg":27,"color":""},{"name":"Sunny Face","size":11,"bricks":"____yyy______yyyyyyy___yyyyyyyyy__yyyyyyyyy_yyyWWyWWyyyyyyyyyyyyyyyyyyyyyyyyy_yyWWWWWyy__yyyWWWyyy___yyyyyyy______yyy","svg":null,"color":"#5da3ea"},{"name":"Mountain","size":9,"bricks":"_______________W_______WWW______GGWW__W_GGGGG_kkkGGGGG_kkkkGGGGkkkkkGGGGkkkkkkGGG_________","svg":15,"color":""},{"name":"Dollar","size":17,"bricks":"________________________G_G______________G_G____________GGGGGGG_________GGGGGGGGG_______GG__G_G__GG______GG__G_G__GG______GG__G_G___________GGGGGGGG__________GGGGGGGG___________G_G__GG______GG__G_G__GG______GG__G_G__GG_______GGGGGGGGG_________GGGGGGG____________G_G______________G_G________________________","svg":null,"color":""},{"name":"Waves","size":8,"bricks":"___bbb____bbb____bbttbbbbbttbbbbttttaatttttaattttaaaaaaa","svg":20,"color":""},{"name":"Box","size":8,"bricks":"yyyyyyyyy______yy_bbbb_yy_b__b_yy_b__b_yy_bbbb_yy______yyyyyyyyy","svg":30,"color":"","squared":false},{"name":"Rose","size":9,"bricks":"__SS______SSSS_____SSSS_____SSSS______SS_k______k_kk_____kk_k______kk________k","svg":4,"color":""},{"name":"Time","size":9,"bricks":"__________WWWWWWW___WWWWW_____yyy_______y________y_______WyW_____WyyyW___yyyyyyy__________","svg":9,"color":"","squared":false},{"name":"Watermelon","size":8,"bricks":"_____Sk_____SSBk___SBSSk__SSSSSk_SSBSSk_SBSSSSk_kSSSkk___kkk____","svg":28,"color":""},{"name":"Worms","size":13,"bricks":"___sssss_______sssssss______WWsWWsss_____WBsBWsss_____WBsBWsss_____WWsWWsss_____sssssss_______ssssss_____WWWWWWss_______WssWs__s_____ssss__sss___sssssssssss__sssssssss_ss","svg":null,"color":"","squared":false},{"name":"Ocean Sunrise","size":8,"bricks":"SSSSSSSSSSSyySSSSSyyyySSSyyWWyySbttaattbbbttttbbbbbttbbbbbbbbbbb","svg":12,"color":""},{"name":"Crosses","size":13,"bricks":"b___b___b___b__v___v___v___vvv_vvv_vvv___v___v___v__p___p___p___ppp_ppp_ppp_ppp___p___p___p__P___P___P___PPP_PPP_PPP___P___P___P__p___p___p___ppp_ppp_ppp_ppp___p___p___p","svg":10,"color":""},{"name":"Negative space","size":9,"bricks":"tttttttttt_t_t_t_t_________b_b_b_b_bbbbbbbbbb_b_b_b_b___________t_t_t_t_ttttttttt_________","svg":null},{"name":"UK","size":11,"bricks":"brbbWrWbbrbbbrbWrWbrbbbbbrWrWrbbbWWWWWrWWWWWrrrrrrrrrrrWWWWWrWWWWWbbbrWrWrbbbbbrbWrWbrbbbrbbWrWbbrb__________","svg":null,"color":""},{"name":"Greece","size":11,"bricks":"ttWttttttttttWttWWWWWWWWWWWttttttttWttWWWWWWttWttttttttWWWWWWWWWWWtttttttttttWWWWWWWWWWWttttttttttt__________","svg":null,"color":""},{"name":"Russia","size":8,"bricks":"________WWWWWWWWWWWWWWWWttttttttttttttttrrrrrrrrrrrrrrrr________________","svg":null,"color":""},{"name":"Ukraine","size":8,"bricks":"________ttttttttttttttttttttttttyyyyyyyyyyyyyyyyyyyyyyyy________","svg":null,"color":""},{"name":"Poland","size":7,"bricks":"________WWWWW__WWWWW__rrrrr__rrrrr_______________","svg":null,"color":""},{"name":"Yellow 71","size":9,"bricks":"_________yyyyy__yyyyyyy_yyy___yy__yy__yyy__yy_yyy___yy_yy____yy_yy____yy__________________","svg":26,"color":""},{"name":"71 on white","size":6,"bricks":"WWWWWWrrrWWrWWrWrrWrWWWrWrWWWrWWWWWW______","svg":null},{"name":"Blue 71","size":8,"bricks":"ttttt__bttttt_bb___ttbbb__tt__bb__tt__bb_tt___bb_tt___bb_tt___bb","svg":null,"color":""},{"name":"Seventy one","size":21,"bricks":"rr_yy_rrry_yrrry_yrrrr_ry_yr__y_yr_ry_y_r_rr_yy_rr_yy_r_ry_y_r_r_ry_yr__y_yr_ry_y_r_rr_y_yrrry_yrrryyy_r_yyy__________________y______________r_____yyyrrry_yrrryyyrr_y_y__yrr_y_yrr_y_yr__y_yyyyrrr_y_rrry_yrrryyy____________________yrrryyyrrr_________yy_r_ry_yrr_____________rrry_yrrryyyyyyyyyyyy_____________________________________________________________________________________________________________________________","svg":null},{"name":"B71","size":10,"bricks":"__________bbbtttt_b_b__b__tbb_b__b__t_b_bbb__t__b_b__b_t__b_b__bt___b_bbb_t__bbb__________","svg":null},{"name":"Pig","size":9,"bricks":"__________PP___PP__PPP_PPP__WWPPPWW__WBPPPBW__PPsssPP__PsBsBsP__PPsssPP___________","svg":null},{"name":"Big Pig","size":15,"bricks":"________________sss_______sss__ss__sssss__ss____sssssssss_____sWBsssssBWs___ssBBsssssBBss__ssss_____ssss__sss_sssss_sss__sss_sBsBs_sss__sss_sssss_sss___sss_____sss____sssssssssss__GGGsssssssssGGGGGGsGsssssGsGGGGGGssGGGGGssGGG_______________","svg":2,"color":""},{"name":"Donkey Kong","size":9,"bricks":"OOr__a___OOr__a___ppppppp_O______a________a____pppppppr_a______b_a___O__ppppppp__","svg":null,"color":""},{"name":"Banana","size":12,"bricks":"_________________e__________eee_________eee_________eee_________eeeyy_____yyeeyyyy___yyyyey_yC___yy_yyy___C_____yyyy_________yyyy_________yyyy","svg":null},{"name":"Fox","size":8,"bricks":"e______eee_OO_eeeeOOOOeeeOBOOBOeOOOOOOOO_WWBBWW___WWWW_____WW___","svg":null},{"name":"Wiki","size":10,"bricks":"_______________________GGGG_____GGkkGG___GkggggkG__GgWWWWgG__GkggggkG___GGkkGG_____GGGG_______________________","svg":null},{"name":"Baby Dog","size":8,"bricks":"_______W__eeeeWWWWeeWeWWWegWegeeeeWWWWee_eWggWe__eWWWWe____WW","svg":null},{"name":"Cute dog","size":9,"bricks":"__________O_____O_OOOWWWOOOOOWWWWWOOOOeWWWWOO_eBeWWBW__eBeWWBW___eWBWW_____WRW____________","svg":null},{"name":"icon:extra_life","size":9,"bricks":"___________rr_rr___rrrrrrr_rrrrrrrrrrrrrrrrrr_rrrrrrr___rrrrr_____rrr_______r_____________","svg":null},{"name":"icon:streak_shots","size":8,"bricks":"_W_W_W__W_W_W_W_tttttt_WttttttW_tttttt_W______W______W_____WWWW","svg":null},{"name":"icon:base_combo","size":8,"bricks":"ttttttttttyyttttttyytyyttttttyyttyyttttttyytyyttttttyytttttttttt________","svg":null},{"name":"icon:slow_down","size":10,"bricks":"_____________kk_______kkkk_____kkkkkkGG__kkkkkkGBG_kkkkkkGGGGkkkkkkGG__GGGGGG____GG__GG_____________","svg":null},{"name":"icon:bigger_puck","size":8,"bricks":"_________tttttt__tttttt______________________W___________WWWWWW_","svg":null},{"name":"icon:viscosity","size":8,"bricks":"________tt______bbtt__ttbbbbttbbbtbbtbbbbbtbbtbbbbbybbybbbbbbbbb","svg":null},{"name":"icon:left_is_lava","size":8,"bricks":"r_______rtttttt_rtttttt_r_______r_______r____W__r_______r_WWW___","svg":null},{"name":"icon:right_is_lava","size":8,"bricks":"_______r_ttttttr_ttttttr_______r_______r_____W_r_______r__WWW__r","svg":null},{"name":"icon:telekinesis","size":8,"bricks":"_____PW_____s______P______s_______P_______s_______P_____WWWWW","svg":null},{"name":"icon:top_is_lava","size":8,"bricks":"rrrrrrrr_tttttt__tttttt____________________W_______________WWW__","svg":null},{"name":"icon:coin_magnet","size":8,"bricks":"__y__y_yy_________y_y_y_y________y_y______________y______WWW____","svg":null},{"name":"icon:skip_last","size":5,"bricks":"_ttt_t_t_ttt_ttt_t_t_ttt_","svg":null},{"name":"icon:multiball","size":8,"bricks":"_________tttttt__tttttt___________W__W____________________WWW___","svg":null},{"name":"icon:smaller_puck","size":8,"bricks":"_________tttttt__tttttt_____________W_____________________WW____","svg":null},{"name":"icon:pierce","size":6,"bricks":"ttttttttttWtttt__ttt__ttt__ttt__tttt","svg":null},{"name":"icon:picky_eater","size":8,"bricks":"rtrtrtrttrtrtrtrrtrtrtrt____________________t_____________WWWW","svg":null},{"name":"icon:metamorphosis","size":8,"bricks":"aaaaaa__aaaa__________W___________ttaatt__tttttt_________WWW","svg":null},{"name":"icon:compound_interest","size":8,"bricks":"_________tttttt__ttt__t______y_____________W__y_________rrWWWrrr","svg":null},{"name":"icon:hot_start","size":7,"bricks":"ttttttttttt_tt_____W_____y_y_____y_____y_y_WWW_y_","svg":null},{"name":"icon:sapper","size":9,"bricks":"_____WW______W__W_tttWttt_yttgggtt__tgggggt__tgggggt__tgggggt__ttgggtt__ttttttt___________","svg":null,"color":"#000000"},{"name":"icon:bigger_explosions","size":8,"bricks":"__r_______ry_rr___ryry__ryyyW_rr_rrWyyy___yryrr__yrry_rr_rr","svg":null},{"name":"icon:extra_levels","size":6,"bricks":"__________b__t_bb_ttt_b__t_bbb____________","svg":null},{"name":"icon:pierce_color","size":8,"bricks":"bb___bbbb__b_bbb_____bbb____bbbbb____bbbbb____bbbbb____bbbbb____","svg":null},{"name":"icon:soft_reset","size":8,"bricks":"___rg_____rrgg___rryggg_rryWggggrryWgggg_ryyggg___rrgg_____rg___","svg":null},{"name":"icon:ball_repulse_ball","size":8,"bricks":"WsP__PsWs______sP______P________________P______Ps______sWsP__PsW","svg":null},{"name":"icon:ball_attract_ball","size":8,"bricks":"__P__P____s__s__PsW__WsP________________PsW__WsP__s__s____P__P__","svg":null},{"name":"icon:puck_repulse_ball","size":8,"bricks":"__________________W_______s___W___P__s______P____________WWW__","svg":null},{"name":"A","size":7,"bricks":"___t_____ttt___t___t__t___t_tttttttt_____tt_____t","svg":null},{"name":"B","size":9,"bricks":"_bbbbb_____bb_bb____bb_bb____bb_bb____bbbb_____bb_bb____bb_bb____bb_bb___bbbbb____","svg":null},{"name":"C","size":8,"bricks":"__rrrr___rrrrrr_rrr___rrrr______rr______rrr___rr_rrrrrr___rrrr","svg":null},{"name":"D","size":8,"bricks":"_GGGGG____GG__G___GG__GG__GG__GG__GG__GG__GG__GG__GG__G__GGGGG","svg":null},{"name":"e","size":8,"bricks":"__tttt___tttttt_tt____tttt____tttttttttttt_______tt__tt___tttt_","svg":null},{"name":"icon:wind","size":9,"bricks":"_ss______s___PPPP_s_________sssssss___________sssssss_s________s___PPPP__ss","svg":null},{"name":"icon:sturdy_bricks","size":7,"bricks":"ttbttttbtttbtt____W_____W_W___W___W_______WWW____","svg":null},{"name":"icon:respawn","size":9,"bricks":"tttt___ttttt__t__ttta_ttt_______________________________W_________________WWW","svg":null},{"name":"Elephant","size":18,"bricks":"_________________________llll_________lll_llllll_lll___lsssllllllllsssl__lsssllllllllsssl__lsssllBllBllsssl__lssllWllllWllssl___ll__llllll__ll_________llll_______________ll______________llll______________ll________________________________________________________________________________________________________________________________________","svg":25,"color":""},{"name":"Orca","size":20,"bricks":"____________________________________________________________________________________________BBBBB____BBB_BBB___BBBBBBB____BBBBB___BBBBBBBBB____BBB___BBBBWBBWWW_____BBBBBBBBBBBWWWW_____BBBBBBBBBBWWWWW_____BBBBBBBBBWWWWW_______BBBBBBBWWWWW___________WWBBWWW______________BBB_BB______________BB__B______________________________________________________________________________________________________________________________","svg":null,"color":"#1c71d8"},{"name":"Shark","size":17,"bricks":"__________________________________________g_______________ggg____________ggggggg_________ggggggggg_______ggggggggggg_____gggggWWWggggg____gBgWWWWWWWgBg___ggWWWWrWrWWWWgg__ggWWWrrrrrWWWgg_ggWWWrrrrrrrWWWggggWWrrrrrrrrrWWgggWWWrWrWrWrWrWWWggWWrrWWWWWWWrrWWggWWWWWWWWWWWWWWWg_________________","svg":null,"color":"#3584e4"},{"name":"Bird","size":13,"bricks":"_______RRR____R____RSSSR___RR__RSSWWWR__RSR_RSWWBWR__RSSRRSW_WWyy_RSSSRSWWWR___RSSSSSSRR_____RRSSyyyy______RSyyyyy___RRRRSyyyy____RSSSRyyy_____RRRR________","svg":null,"color":""},{"name":"Tux","size":14,"bricks":"_____gggg________gggggggg_____gggggggggg____gggggggggg___gggggggggggg__gggWBggWBggg__gggBBggBBggg__ggggyyyygggg_ggggggyyggggggggggWWWWWWggggg_gWWWWWWWWg_g__WWWWWWWWWW____WWWWWWWWWW____yyy____yyy__","svg":null,"color":"#62a0ea"},{"name":"Armenia","size":6,"bricks":"_______rrrr__bbbb__yyyy_____________","svg":null,"color":""},{"name":"Austria","size":6,"bricks":"_______rrrr__WWWW__rrrr______","svg":null,"color":""},{"name":"Benin","size":8,"bricks":"_________kkyyyy__kkyyyy__kkrrrr__kkrrrr__________________________","svg":null,"color":""},{"name":"Botswana","size":10,"bricks":"___________tttttttt__tttttttt__tttttttt__WWWWWWWW__BBBBBBBB__WWWWWWWW__tttttttt__tttttttt__tttttttt___________","svg":null,"color":""},{"name":"Bulgaria","size":6,"bricks":"_______WWWW__cccc__rrrr_____________","svg":null,"color":""},{"name":"Canada","size":7,"bricks":"________rWWWr__rWrWr__rWWWr______________________","svg":null,"color":""},{"name":"Chad","size":8,"bricks":"_________bbyyRR__bbyyRR__bbyyRR","svg":null,"color":""},{"name":"China","size":8,"bricks":"_________RRyRRR__RyRyRR__RRyRRR__RRRRRR","svg":null,"color":""},{"name":"Colombia","size":7,"bricks":"________yyyyy__yyyyy__bbbbb__RRRRR_______________","svg":null,"color":""},{"name":"Republic of the Congo","size":7,"bricks":"________kkkyy__kkyyr__kyyrr__yyrrr_______________","svg":null,"color":""},{"name":"C\xf4te d\'Ivoire","size":8,"bricks":"_________OOWWGG__OOWWGG__OOWWGG","svg":null,"color":""},{"name":"Denmark","size":8,"bricks":"_________rrWrrr__rrWrrr__WWWWWW__rrWrrr__rrWrrr","svg":null,"color":""},{"name":"El Salvador","size":8,"bricks":"_________bbbbbb__bbbbbb__WWWkWW__WWkWWW__bbbbbb__bbbbbb","svg":null,"color":""},{"name":"Egypt","size":8,"bricks":"_________RRRRRR__RRRRRR__WWWyWW__WWyWWW__gggggg__gggggg","svg":null,"color":"#1c71d8"},{"name":"Estonia","size":8,"bricks":"_________tttttt__tttttt__gggggg__gggggg__WWWWWW__WWWWWW","svg":null,"color":"#986a44"},{"name":"Finland","size":6,"bricks":"_______WtWW__tttt__WtWW_____________","svg":null,"color":""},{"name":"Gabon","size":5,"bricks":"______CCC__yyy__ttt______","svg":null,"color":""},{"name":"Georgia","size":9,"bricks":"__________WrWrWrW__WWWrWWW__rrrrrrr__WWWrWWW__WrWrWrW__________________","svg":null,"color":""},{"name":"Guinea","size":8,"bricks":"_________rryycc__rryycc__rryycc","svg":null,"color":""},{"name":"Indonesia","size":6,"bricks":"_______rrrr__rrrr__WWWW__WWWW_______","svg":null,"color":""},{"name":"icon:one_more_choice","size":7,"bricks":"ttt____tbbb___tbttt__tbtbbb__btbbb___tbbb____bbb_","svg":null},{"name":"icon:instant_upgrade","size":5,"bricks":"ttt__tbbb_tbbb_tbbb__bbb_","svg":null},{"name":"icon:checkmark_checked","size":6,"bricks":"_WWWWGWBBBGGGGBGGWWGGGBWWBGBBW_WWWW_","svg":null},{"name":"icon:checkmark_unchecked","size":6,"bricks":"_WWWW_WBBBBWWBBBBWWBBBBWWBBBBW_WWWW_","svg":null},{"name":"icon:fullscreen","size":6,"bricks":"WW__WWW____W____________W____WWW__WW","svg":null},{"name":"icon:exit_fullscreen","size":6,"bricks":"_W__W_WW__WW____________WW__WW_W__W_","svg":null}]'); },{}],"gkKU3":[function(require,module,exports,__globalThis) { exports.interopDefault = function(a) { @@ -634,6 +181,6 @@ exports.export = function(dest, destName, get) { },{}],"el6Kx":[function(require,module,exports,__globalThis) { module.exports = JSON.parse("[\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\"]"); -},{}]},["gAhhU"], null, "parcelRequire94c2") +},{}]},[], null, "parcelRequire94c2") //# sourceMappingURL=index.497c99a1.js.map diff --git a/dist/index.497c99a1.js.map b/dist/index.497c99a1.js.map index c8e0504..045818e 100644 --- a/dist/index.497c99a1.js.map +++ b/dist/index.497c99a1.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["node_modules/@parcel/runtime-browser-hmr/lib/runtime-966d18ba8f085846.js","src/palette.json","src/levels.json","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","src/backgrounds.json"],"sourcesContent":["var HMR_HOST = null;var HMR_PORT = null;var HMR_SECURE = false;var HMR_ENV_HASH = \"d6ea1d42532a7575\";var HMR_USE_SSE = false;module.bundle.HMR_BUNDLE_ID = \"69a3e010497c99a1\";\"use strict\";\n\n/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */\n/*::\nimport type {\n HMRAsset,\n HMRMessage,\n} from '@parcel/reporter-dev-server/src/HMRServer.js';\ninterface ParcelRequire {\n (string): mixed;\n cache: {|[string]: ParcelModule|};\n hotData: {|[string]: mixed|};\n Module: any;\n parent: ?ParcelRequire;\n isParcelRequire: true;\n modules: {|[string]: [Function, {|[string]: string|}]|};\n HMR_BUNDLE_ID: string;\n root: ParcelRequire;\n}\ninterface ParcelModule {\n hot: {|\n data: mixed,\n accept(cb: (Function) => void): void,\n dispose(cb: (mixed) => void): void,\n // accept(deps: Array | string, cb: (Function) => void): void,\n // decline(): void,\n _acceptCallbacks: Array<(Function) => void>,\n _disposeCallbacks: Array<(mixed) => void>,\n |};\n}\ninterface ExtensionContext {\n runtime: {|\n reload(): void,\n getURL(url: string): string;\n getManifest(): {manifest_version: number, ...};\n |};\n}\ndeclare var module: {bundle: ParcelRequire, ...};\ndeclare var HMR_HOST: string;\ndeclare var HMR_PORT: string;\ndeclare var HMR_ENV_HASH: string;\ndeclare var HMR_SECURE: boolean;\ndeclare var HMR_USE_SSE: boolean;\ndeclare var chrome: ExtensionContext;\ndeclare var browser: ExtensionContext;\ndeclare var __parcel__import__: (string) => Promise;\ndeclare var __parcel__importScripts__: (string) => Promise;\ndeclare var globalThis: typeof self;\ndeclare var ServiceWorkerGlobalScope: Object;\n*/\nvar OVERLAY_ID = '__parcel__error__overlay__';\nvar OldModule = module.bundle.Module;\nfunction Module(moduleName) {\n OldModule.call(this, moduleName);\n this.hot = {\n data: module.bundle.hotData[moduleName],\n _acceptCallbacks: [],\n _disposeCallbacks: [],\n accept: function (fn) {\n this._acceptCallbacks.push(fn || function () {});\n },\n dispose: function (fn) {\n this._disposeCallbacks.push(fn);\n }\n };\n module.bundle.hotData[moduleName] = undefined;\n}\nmodule.bundle.Module = Module;\nmodule.bundle.hotData = {};\nvar checkedAssets /*: {|[string]: boolean|} */, disposedAssets /*: {|[string]: boolean|} */, assetsToDispose /*: Array<[ParcelRequire, string]> */, assetsToAccept /*: Array<[ParcelRequire, string]> */;\nfunction getHostname() {\n return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');\n}\nfunction getPort() {\n return HMR_PORT || location.port;\n}\n\n// eslint-disable-next-line no-redeclare\nvar parent = module.bundle.parent;\nif ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {\n var hostname = getHostname();\n var port = getPort();\n var protocol = HMR_SECURE || location.protocol == 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws';\n var ws;\n if (HMR_USE_SSE) {\n ws = new EventSource('/__parcel_hmr');\n } else {\n try {\n ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');\n } catch (err) {\n if (err.message) {\n console.error(err.message);\n }\n ws = {};\n }\n }\n\n // Web extension context\n var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser;\n\n // Safari doesn't support sourceURL in error stacks.\n // eval may also be disabled via CSP, so do a quick check.\n var supportsSourceURL = false;\n try {\n (0, eval)('throw new Error(\"test\"); //# sourceURL=test.js');\n } catch (err) {\n supportsSourceURL = err.stack.includes('test.js');\n }\n\n // $FlowFixMe\n ws.onmessage = async function (event /*: {data: string, ...} */) {\n checkedAssets = {} /*: {|[string]: boolean|} */;\n disposedAssets = {} /*: {|[string]: boolean|} */;\n assetsToAccept = [];\n assetsToDispose = [];\n var data /*: HMRMessage */ = JSON.parse(event.data);\n if (data.type === 'reload') {\n fullReload();\n } else if (data.type === 'update') {\n // Remove error overlay if there is one\n if (typeof document !== 'undefined') {\n removeErrorOverlay();\n }\n let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH);\n\n // Handle HMR Update\n let handled = assets.every(asset => {\n return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);\n });\n if (handled) {\n console.clear();\n\n // Dispatch custom event so other runtimes (e.g React Refresh) are aware.\n if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n window.dispatchEvent(new CustomEvent('parcelhmraccept'));\n }\n await hmrApplyUpdates(assets);\n hmrDisposeQueue();\n\n // Run accept callbacks. This will also re-execute other disposed assets in topological order.\n let processedAssets = {};\n for (let i = 0; i < assetsToAccept.length; i++) {\n let id = assetsToAccept[i][1];\n if (!processedAssets[id]) {\n hmrAccept(assetsToAccept[i][0], id);\n processedAssets[id] = true;\n }\n }\n } else fullReload();\n }\n if (data.type === 'error') {\n // Log parcel errors to console\n for (let ansiDiagnostic of data.diagnostics.ansi) {\n let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;\n console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\\n' + stack + '\\n\\n' + ansiDiagnostic.hints.join('\\n'));\n }\n if (typeof document !== 'undefined') {\n // Render the fancy html overlay\n removeErrorOverlay();\n var overlay = createErrorOverlay(data.diagnostics.html);\n // $FlowFixMe\n document.body.appendChild(overlay);\n }\n }\n };\n if (ws instanceof WebSocket) {\n ws.onerror = function (e) {\n if (e.message) {\n console.error(e.message);\n }\n };\n ws.onclose = function () {\n console.warn('[parcel] 🚨 Connection to the HMR server was lost');\n };\n }\n}\nfunction removeErrorOverlay() {\n var overlay = document.getElementById(OVERLAY_ID);\n if (overlay) {\n overlay.remove();\n console.log('[parcel] ✨ Error resolved');\n }\n}\nfunction createErrorOverlay(diagnostics) {\n var overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n let errorHTML = '
';\n for (let diagnostic of diagnostics) {\n let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => {\n return `${p}\n${frame.location}\n${frame.code}`;\n }, '') : diagnostic.stack;\n errorHTML += `\n
\n
\n 🚨 ${diagnostic.message}\n
\n
${stack}
\n
\n ${diagnostic.hints.map(hint => '
πŸ’‘ ' + hint + '
').join('')}\n
\n ${diagnostic.documentation ? `
πŸ“ Learn more
` : ''}\n
\n `;\n }\n errorHTML += '
';\n overlay.innerHTML = errorHTML;\n return overlay;\n}\nfunction fullReload() {\n if ('reload' in location) {\n location.reload();\n } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) {\n extCtx.runtime.reload();\n }\n}\nfunction getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{\n var modules = bundle.modules;\n if (!modules) {\n return [];\n }\n var parents = [];\n var k, d, dep;\n for (k in modules) {\n for (d in modules[k][1]) {\n dep = modules[k][1][d];\n if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {\n parents.push([bundle, k]);\n }\n }\n }\n if (bundle.parent) {\n parents = parents.concat(getParents(bundle.parent, id));\n }\n return parents;\n}\nfunction updateLink(link) {\n var href = link.getAttribute('href');\n if (!href) {\n return;\n }\n var newLink = link.cloneNode();\n newLink.onload = function () {\n if (link.parentNode !== null) {\n // $FlowFixMe\n link.parentNode.removeChild(link);\n }\n };\n newLink.setAttribute('href',\n // $FlowFixMe\n href.split('?')[0] + '?' + Date.now());\n // $FlowFixMe\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n // $FlowFixMe[incompatible-type]\n var href /*: string */ = links[i].getAttribute('href');\n var hostname = getHostname();\n var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\\\/\\\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());\n var absolute = /^https?:\\/\\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer;\n if (!absolute) {\n updateLink(links[i]);\n }\n }\n cssTimeout = null;\n }, 50);\n}\nfunction hmrDownload(asset) {\n if (asset.type === 'js') {\n if (typeof document !== 'undefined') {\n let script = document.createElement('script');\n script.src = asset.url + '?t=' + Date.now();\n if (asset.outputFormat === 'esmodule') {\n script.type = 'module';\n }\n return new Promise((resolve, reject) => {\n var _document$head;\n script.onload = () => resolve(script);\n script.onerror = reject;\n (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script);\n });\n } else if (typeof importScripts === 'function') {\n // Worker scripts\n if (asset.outputFormat === 'esmodule') {\n return __parcel__import__(asset.url + '?t=' + Date.now());\n } else {\n return new Promise((resolve, reject) => {\n try {\n __parcel__importScripts__(asset.url + '?t=' + Date.now());\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n }\n }\n}\nasync function hmrApplyUpdates(assets) {\n global.parcelHotUpdate = Object.create(null);\n let scriptsToRemove;\n try {\n // If sourceURL comments aren't supported in eval, we need to load\n // the update from the dev server over HTTP so that stack traces\n // are correct in errors/logs. This is much slower than eval, so\n // we only do it if needed (currently just Safari).\n // https://bugs.webkit.org/show_bug.cgi?id=137297\n // This path is also taken if a CSP disallows eval.\n if (!supportsSourceURL) {\n let promises = assets.map(asset => {\n var _hmrDownload;\n return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => {\n // Web extension fix\n if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) {\n extCtx.runtime.reload();\n return;\n }\n throw err;\n });\n });\n scriptsToRemove = await Promise.all(promises);\n }\n assets.forEach(function (asset) {\n hmrApply(module.bundle.root, asset);\n });\n } finally {\n delete global.parcelHotUpdate;\n if (scriptsToRemove) {\n scriptsToRemove.forEach(script => {\n if (script) {\n var _document$head2;\n (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script);\n }\n });\n }\n }\n}\nfunction hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (asset.type === 'css') {\n reloadCSS();\n } else if (asset.type === 'js') {\n let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];\n if (deps) {\n if (modules[asset.id]) {\n // Remove dependencies that are removed and will become orphaned.\n // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload.\n let oldDeps = modules[asset.id][1];\n for (let dep in oldDeps) {\n if (!deps[dep] || deps[dep] !== oldDeps[dep]) {\n let id = oldDeps[dep];\n let parents = getParents(module.bundle.root, id);\n if (parents.length === 1) {\n hmrDelete(module.bundle.root, id);\n }\n }\n }\n }\n if (supportsSourceURL) {\n // Global eval. We would use `new Function` here but browser\n // support for source maps is better with eval.\n (0, eval)(asset.output);\n }\n\n // $FlowFixMe\n let fn = global.parcelHotUpdate[asset.id];\n modules[asset.id] = [fn, deps];\n }\n\n // Always traverse to the parent bundle, even if we already replaced the asset in this bundle.\n // This is required in case modules are duplicated. We need to ensure all instances have the updated code.\n if (bundle.parent) {\n hmrApply(bundle.parent, asset);\n }\n }\n}\nfunction hmrDelete(bundle, id) {\n let modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (modules[id]) {\n // Collect dependencies that will become orphaned when this module is deleted.\n let deps = modules[id][1];\n let orphans = [];\n for (let dep in deps) {\n let parents = getParents(module.bundle.root, deps[dep]);\n if (parents.length === 1) {\n orphans.push(deps[dep]);\n }\n }\n\n // Delete the module. This must be done before deleting dependencies in case of circular dependencies.\n delete modules[id];\n delete bundle.cache[id];\n\n // Now delete the orphans.\n orphans.forEach(id => {\n hmrDelete(module.bundle.root, id);\n });\n } else if (bundle.parent) {\n hmrDelete(bundle.parent, id);\n }\n}\nfunction hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n if (hmrAcceptCheckOne(bundle, id, depsByBundle)) {\n return true;\n }\n\n // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload.\n let parents = getParents(module.bundle.root, id);\n let accepted = false;\n while (parents.length > 0) {\n let v = parents.shift();\n let a = hmrAcceptCheckOne(v[0], v[1], null);\n if (a) {\n // If this parent accepts, stop traversing upward, but still consider siblings.\n accepted = true;\n } else {\n // Otherwise, queue the parents in the next level upward.\n let p = getParents(module.bundle.root, v[1]);\n if (p.length === 0) {\n // If there are no parents, then we've reached an entry without accepting. Reload.\n accepted = false;\n break;\n }\n parents.push(...p);\n }\n }\n return accepted;\n}\nfunction hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {\n // If we reached the root bundle without finding where the asset should go,\n // there's nothing to do. Mark as \"accepted\" so we don't reload the page.\n if (!bundle.parent) {\n return true;\n }\n return hmrAcceptCheck(bundle.parent, id, depsByBundle);\n }\n if (checkedAssets[id]) {\n return true;\n }\n checkedAssets[id] = true;\n var cached = bundle.cache[id];\n assetsToDispose.push([bundle, id]);\n if (!cached || cached.hot && cached.hot._acceptCallbacks.length) {\n assetsToAccept.push([bundle, id]);\n return true;\n }\n}\nfunction hmrDisposeQueue() {\n // Dispose all old assets.\n for (let i = 0; i < assetsToDispose.length; i++) {\n let id = assetsToDispose[i][1];\n if (!disposedAssets[id]) {\n hmrDispose(assetsToDispose[i][0], id);\n disposedAssets[id] = true;\n }\n }\n assetsToDispose = [];\n}\nfunction hmrDispose(bundle /*: ParcelRequire */, id /*: string */) {\n var cached = bundle.cache[id];\n bundle.hotData[id] = {};\n if (cached && cached.hot) {\n cached.hot.data = bundle.hotData[id];\n }\n if (cached && cached.hot && cached.hot._disposeCallbacks.length) {\n cached.hot._disposeCallbacks.forEach(function (cb) {\n cb(bundle.hotData[id]);\n });\n }\n delete bundle.cache[id];\n}\nfunction hmrAccept(bundle /*: ParcelRequire */, id /*: string */) {\n // Execute the module.\n bundle(id);\n\n // Run the accept callbacks in the new version of the module.\n var cached = bundle.cache[id];\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n let assetsToAlsoAccept = [];\n cached.hot._acceptCallbacks.forEach(function (cb) {\n let additionalAssets = cb(function () {\n return getParents(module.bundle.root, id);\n });\n if (Array.isArray(additionalAssets) && additionalAssets.length) {\n assetsToAlsoAccept.push(...additionalAssets);\n }\n });\n if (assetsToAlsoAccept.length) {\n let handled = assetsToAlsoAccept.every(function (a) {\n return hmrAcceptCheck(a[0], a[1]);\n });\n if (!handled) {\n return fullReload();\n }\n hmrDisposeQueue();\n }\n }\n}","{\n \"_\": \"\",\n \"B\": \"black\",\n \"W\": \"white\",\n \"g\": \"#231f20\",\n \"y\": \"#ffd300\",\n \"b\": \"#6262EA\",\n \"t\": \"#5DA3EA\",\n \"s\": \"#E67070\",\n \"r\": \"#e32119\",\n \"R\": \"#ab0c0c\",\n \"c\": \"#59EEA3\",\n \"G\": \"#A1F051\",\n \"v\": \"#A664E8\",\n \"p\": \"#E869E8\",\n \"a\": \"#5BECEC\",\n \"C\": \"#53EE53\",\n \"S\": \"#F44848\",\n \"P\": \"#E66BA8\",\n \"O\": \"#F29E4A\",\n \"k\": \"#618227\",\n \"e\": \"#e1c8b4\",\n \"l\": \"#9b9fa4\"\n}\n","[\n {\n \"name\": \"71 mini\",\n \"size\": 5,\n \"bricks\": \"bbb____bt__btt__b_t___ttt\",\n \"svg\": 23,\n \"color\": \"\"\n },\n {\n \"name\": \"Butterfly\",\n \"bricks\": \"_________bb_t_t_bbbbb_t_bbbbbbbtbbbb_bbbtbbb____btb____bbbtbbb__bb_t_bb___________________\",\n \"size\": 9,\n \"svg\": 20,\n \"color\": \"\"\n },\n {\n \"name\": \"Castle\",\n \"size\": 7,\n \"bricks\": \"s_s_s_ssssssssssBBBssssBBBssttbbbttttbbbtttbtbtbt\",\n \"svg\": 16\n },\n {\n \"name\": \"Eyes\",\n \"size\": 9,\n \"bricks\": \"ttttttt__tWWWWWWW_tWrrWttW_tWWWWWWW_ttttttt_____t______ttttt____ttttt_____t_t\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Creeper\",\n \"size\": 10,\n \"bricks\": \"___________ccGGccGG__cGccGcGc__GBBccBBc__cBBGcBBc__GccBBGGc__ccBBBBcG__GGBBBBcG__cGBccBGc___________\",\n \"svg\": 22\n },\n {\n \"name\": \"Stairs\",\n \"size\": 8,\n \"bricks\": \"tt______tt______bbtt____bbtt____vvbbtt__vvbbtt__ppvvbbttppvvbbtt\",\n \"svg\": 14\n },\n {\n \"name\": \"Dots\",\n \"size\": 9,\n \"bricks\": \"b_t_a_c_C__________b_t_a_c__________v_b_t_a_c__________v_b_t_a__________p_v_b_t_a\",\n \"svg\": null\n },\n {\n \"name\": \"Lines\",\n \"size\": 9,\n \"bricks\": \"aaaaaaaa___________tttttttt_________aaaaaaaa___________tttttttt_________aaaaaaaa\",\n \"svg\": 8,\n \"color\": \"\"\n },\n {\n \"name\": \"Heart\",\n \"size\": 15,\n \"bricks\": \"__________________RRR___RRR_____RSSSR_RSSSR___RSWWSSRSSSSSR__RSWSSSSSSSSSR__RSSSSSSSSSSSR__RSWSSSSSSSSSR___RSSSSSSSSSR_____RSSSSSSSR_______RSSSSSR_________RSSSR___________RSR_____________R____________________________________\",\n \"svg\": 17,\n \"color\": \"\"\n },\n {\n \"name\": \"Swiss\",\n \"size\": 7,\n \"bricks\": \"________RRRRR__RRWRR__RWWWR__RRWRR__RRRRR\",\n \"svg\": 13,\n \"color\": \"\"\n },\n {\n \"name\": \"Germany\",\n \"size\": 6,\n \"bricks\": \"_______gggg__rrrr__yyyy\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"France\",\n \"size\": 8,\n \"bricks\": \"_________ttWWrr__ttWWrr__ttWWrr__ttWWrr__ttWWrr________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Smiley\",\n \"size\": 8,\n \"bricks\": \"_________yy__yy__yy__yy__________________yyyyyy___yyyy__________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Labyrinthe\",\n \"size\": 11,\n \"bricks\": \"_______tttS_Stttt_S________t___S__Stt_ttttt____t_____S__ttt_S_S____t___t_tttt_t_S_t____tSt_t_t_Sttt___t_t_____Sttt_tttttS\",\n \"svg\": 21\n },\n {\n \"name\": \"Temple\",\n \"size\": 11,\n \"bricks\": \"_______________WWW______WWWWWWW___WWWWWWWWW___t_t_t_t____b_b_b_b____v_v_v_v____p_p_p_p____P_P_P_P____WWWWWWW___WWWWWWWWW_\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Pacman\",\n \"size\": 12,\n \"bricks\": \"____yyyy______yyyyyyyy___yyyyByyyyy__yyyyyyyyy__yyyyyyyy____yyyyyy______yyyyyy___S_Syyyyyyyy_____yyyyyyyyy___yyyyyyyyyy___yyyyyyyy______yyyy\",\n \"svg\": 7,\n \"color\": \"\"\n },\n {\n \"name\": \"Ship\",\n \"size\": 11,\n \"bricks\": \"____sWW________sWWW_______sWWW_______s___OOOOOOOOOOOOOO_OBOBOBOBOO__OOOOOOOO_bbbbbbbbgbbbbgbbbbggbbbggbbbbbbbb\",\n \"svg\": 19\n },\n {\n \"name\": \"We come in peace\",\n \"size\": 13,\n \"bricks\": \"________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________\",\n \"svg\": 24,\n \"color\": \"\"\n },\n {\n \"name\": \"Space mushroom\",\n \"size\": 10,\n \"bricks\": \"______________WW_______WWWW_____WWWWWW___WWBWWBWW__WWWWWWWW____W__W_____W_WW_W___W_W__W_W\",\n \"svg\": 6,\n \"color\": \"\"\n },\n {\n \"name\": \"Wololo\",\n \"size\": 9,\n \"bricks\": \"____WW_OOW___WW__OWW__W___OWWWbbbW_WWW_WbW_WOW__WWb__OW__bbb__O___W_W__O___W_W__O\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Small heart\",\n \"size\": 15,\n \"bricks\": \"________________________________RRRR___RRRR___RrWWrR_RWWrrR__RWWrrrRWWrrrR__RrrrrrrrrrrrR__RrrrrrrrrrrrR___RrrrrrrrrrR_____RrrrrrrrR_______RrrrrrR_________RrrrR___________RrR_____________R______________________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Eye\",\n \"size\": 9,\n \"bricks\": \"____________ggg_____gWWWg___gWbbbWg_gWWbBbWWg_gWbbbWg___gWWWg_____ggg____________\",\n \"svg\": null,\n \"color\": \"#5da3ea\"\n },\n {\n \"name\": \"Enderman\",\n \"size\": 10,\n \"bricks\": \"___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________\",\n \"svg\": \"\",\n \"color\": \"#26a269\"\n },\n {\n \"name\": \"Mushroom\",\n \"size\": 16,\n \"bricks\": \"_____________________rrrrWW________WWrrrrWWWW_____WWrrrrrrWWWW____WrrWWWWrrWWW___rrrWWWWWWrrrrr__rrrWWWWWWrrWWr__WrrWWWWWWrWWWW__WWrrWWWWrrWWWW__WWrrrrrrrrrWWr__WrrWWWWWWWWrrr_____WWBWWBWW_______WWWBWWBWWW______WWWWWWWWWW_______WWWWWWWW____________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Tulip\",\n \"size\": 11,\n \"bricks\": \"______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Chain\",\n \"size\": 7,\n \"bricks\": \"yyy____yBy____yyyyy____yBy____yyyyy____yBy____yyy\",\n \"svg\": 31,\n \"color\": \"\"\n },\n {\n \"name\": \"Marion\",\n \"size\": 9,\n \"bricks\": \"rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Renan\",\n \"size\": 9,\n \"bricks\": \"yyyyyyy___yyyyyyy__yy___yy__yy___yy__yyyyyy___yy_yy____yy__yy___yy___yy_yyy___yyy\",\n \"svg\": 3,\n \"color\": \"\"\n },\n {\n \"name\": \"Violet Pairs\",\n \"size\": 8,\n \"bricks\": \"b_b_b_b_b_b_b_b__________t_t_t_t_t_t_t_t________b_b_b_b_b_b_b_b\",\n \"svg\": 5,\n \"color\": \"\"\n },\n {\n \"name\": \"Red Cups\",\n \"size\": 11,\n \"bricks\": \"___________rBr_rBr_rBrrrr_rrr_rrr___________r_rBr_rBr_rr_rrr_rrr_r___________rBr_rBr_rBrrrr_rrr_rrr__________\",\n \"svg\": 23,\n \"color\": \"\"\n },\n {\n \"name\": \"Cactus\",\n \"size\": 10,\n \"bricks\": \"____G______rG_Gk______G_Gk______kkkk_r_____kkk_G______GkGk_____rGkk_______Gk________kk________kk_____\",\n \"svg\": 27,\n \"color\": \"\"\n },\n {\n \"name\": \"Sunny Face\",\n \"size\": 11,\n \"bricks\": \"____yyy______yyyyyyy___yyyyyyyyy__yyyyyyyyy_yyyWWyWWyyyyyyyyyyyyyyyyyyyyyyyyy_yyWWWWWyy__yyyWWWyyy___yyyyyyy______yyy\",\n \"svg\": null,\n \"color\": \"#5da3ea\"\n },\n {\n \"name\": \"Mountain\",\n \"size\": 9,\n \"bricks\": \"_______________W_______WWW______GGWW__W_GGGGG_kkkGGGGG_kkkkGGGGkkkkkGGGGkkkkkkGGG_________\",\n \"svg\": 15,\n \"color\": \"\"\n },\n {\n \"name\": \"Dollar\",\n \"size\": 17,\n \"bricks\": \"________________________G_G______________G_G____________GGGGGGG_________GGGGGGGGG_______GG__G_G__GG______GG__G_G__GG______GG__G_G___________GGGGGGGG__________GGGGGGGG___________G_G__GG______GG__G_G__GG______GG__G_G__GG_______GGGGGGGGG_________GGGGGGG____________G_G______________G_G________________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Waves\",\n \"size\": 8,\n \"bricks\": \"___bbb____bbb____bbttbbbbbttbbbbttttaatttttaattttaaaaaaa\",\n \"svg\": 20,\n \"color\": \"\"\n },\n {\n \"name\": \"Box\",\n \"size\": 8,\n \"bricks\": \"yyyyyyyyy______yy_bbbb_yy_b__b_yy_b__b_yy_bbbb_yy______yyyyyyyyy\",\n \"svg\": 30,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Rose\",\n \"size\": 9,\n \"bricks\": \"__SS______SSSS_____SSSS_____SSSS______SS_k______k_kk_____kk_k______kk________k\",\n \"svg\": 4,\n \"color\": \"\"\n },\n {\n \"name\": \"Time\",\n \"size\": 9,\n \"bricks\": \"__________WWWWWWW___WWWWW_____yyy_______y________y_______WyW_____WyyyW___yyyyyyy__________\",\n \"svg\": 9,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Watermelon\",\n \"size\": 8,\n \"bricks\": \"_____Sk_____SSBk___SBSSk__SSSSSk_SSBSSk_SBSSSSk_kSSSkk___kkk____\",\n \"svg\": 28,\n \"color\": \"\"\n },\n {\n \"name\": \"Worms\",\n \"size\": 13,\n \"bricks\": \"___sssss_______sssssss______WWsWWsss_____WBsBWsss_____WBsBWsss_____WWsWWsss_____sssssss_______ssssss_____WWWWWWss_______WssWs__s_____ssss__sss___sssssssssss__sssssssss_ss\",\n \"svg\": null,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Ocean Sunrise\",\n \"size\": 8,\n \"bricks\": \"SSSSSSSSSSSyySSSSSyyyySSSyyWWyySbttaattbbbttttbbbbbttbbbbbbbbbbb\",\n \"svg\": 12,\n \"color\": \"\"\n },\n {\n \"name\": \"Crosses\",\n \"size\": 13,\n \"bricks\": \"b___b___b___b__v___v___v___vvv_vvv_vvv___v___v___v__p___p___p___ppp_ppp_ppp_ppp___p___p___p__P___P___P___PPP_PPP_PPP___P___P___P__p___p___p___ppp_ppp_ppp_ppp___p___p___p\",\n \"svg\": 10,\n \"color\": \"\"\n },\n {\n \"name\": \"Negative space\",\n \"size\": 9,\n \"bricks\": \"tttttttttt_t_t_t_t_________b_b_b_b_bbbbbbbbbb_b_b_b_b___________t_t_t_t_ttttttttt_________\",\n \"svg\": null\n },\n {\n \"name\": \"UK\",\n \"size\": 11,\n \"bricks\": \"brbbWrWbbrbbbrbWrWbrbbbbbrWrWrbbbWWWWWrWWWWWrrrrrrrrrrrWWWWWrWWWWWbbbrWrWrbbbbbrbWrWbrbbbrbbWrWbbrb__________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Greece\",\n \"size\": 11,\n \"bricks\": \"ttWttttttttttWttWWWWWWWWWWWttttttttWttWWWWWWttWttttttttWWWWWWWWWWWtttttttttttWWWWWWWWWWWttttttttttt__________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Russia\",\n \"size\": 8,\n \"bricks\": \"________WWWWWWWWWWWWWWWWttttttttttttttttrrrrrrrrrrrrrrrr________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Ukraine\",\n \"size\": 8,\n \"bricks\": \"________ttttttttttttttttttttttttyyyyyyyyyyyyyyyyyyyyyyyy________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Poland\",\n \"size\": 7,\n \"bricks\": \"________WWWWW__WWWWW__rrrrr__rrrrr_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Yellow 71\",\n \"size\": 9,\n \"bricks\": \"_________yyyyy__yyyyyyy_yyy___yy__yy__yyy__yy_yyy___yy_yy____yy_yy____yy__________________\",\n \"svg\": 26,\n \"color\": \"\"\n },\n {\n \"name\": \"71 on white\",\n \"size\": 6,\n \"bricks\": \"WWWWWWrrrWWrWWrWrrWrWWWrWrWWWrWWWWWW______\",\n \"svg\": null\n },\n {\n \"name\": \"Blue 71\",\n \"size\": 8,\n \"bricks\": \"ttttt__bttttt_bb___ttbbb__tt__bb__tt__bb_tt___bb_tt___bb_tt___bb\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Seventy one\",\n \"size\": 21,\n \"bricks\": \"rr_yy_rrry_yrrry_yrrrr_ry_yr__y_yr_ry_y_r_rr_yy_rr_yy_r_ry_y_r_r_ry_yr__y_yr_ry_y_r_rr_y_yrrry_yrrryyy_r_yyy__________________y______________r_____yyyrrry_yrrryyyrr_y_y__yrr_y_yrr_y_yr__y_yyyyrrr_y_rrry_yrrryyy____________________yrrryyyrrr_________yy_r_ry_yrr_____________rrry_yrrryyyyyyyyyyyy_____________________________________________________________________________________________________________________________\",\n \"svg\": null\n },\n {\n \"name\": \"B71\",\n \"size\": 10,\n \"bricks\": \"__________bbbtttt_b_b__b__tbb_b__b__t_b_bbb__t__b_b__b_t__b_b__bt___b_bbb_t__bbb__________\",\n \"svg\": null\n },\n {\n \"name\": \"Pig\",\n \"size\": 9,\n \"bricks\": \"__________PP___PP__PPP_PPP__WWPPPWW__WBPPPBW__PPsssPP__PsBsBsP__PPsssPP___________\",\n \"svg\": null\n },\n {\n \"name\": \"Big Pig\",\n \"size\": 15,\n \"bricks\": \"________________sss_______sss__ss__sssss__ss____sssssssss_____sWBsssssBWs___ssBBsssssBBss__ssss_____ssss__sss_sssss_sss__sss_sBsBs_sss__sss_sssss_sss___sss_____sss____sssssssssss__GGGsssssssssGGGGGGsGsssssGsGGGGGGssGGGGGssGGG_______________\",\n \"svg\": 2,\n \"color\": \"\"\n },\n {\n \"name\": \"Donkey Kong\",\n \"size\": 9,\n \"bricks\": \"OOr__a___OOr__a___ppppppp_O______a________a____pppppppr_a______b_a___O__ppppppp__\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Banana\",\n \"size\": 12,\n \"bricks\": \"_________________e__________eee_________eee_________eee_________eeeyy_____yyeeyyyy___yyyyey_yC___yy_yyy___C_____yyyy_________yyyy_________yyyy\",\n \"svg\": null\n },\n {\n \"name\": \"Fox\",\n \"size\": 8,\n \"bricks\": \"e______eee_OO_eeeeOOOOeeeOBOOBOeOOOOOOOO_WWBBWW___WWWW_____WW___\",\n \"svg\": null\n },\n {\n \"name\": \"Wiki\",\n \"size\": 10,\n \"bricks\": \"_______________________GGGG_____GGkkGG___GkggggkG__GgWWWWgG__GkggggkG___GGkkGG_____GGGG_______________________\",\n \"svg\": null\n },\n {\n \"name\": \"Baby Dog\",\n \"size\": 8,\n \"bricks\": \"_______W__eeeeWWWWeeWeWWWegWegeeeeWWWWee_eWggWe__eWWWWe____WW\",\n \"svg\": null\n },\n {\n \"name\": \"Cute dog\",\n \"size\": 9,\n \"bricks\": \"__________O_____O_OOOWWWOOOOOWWWWWOOOOeWWWWOO_eBeWWBW__eBeWWBW___eWBWW_____WRW____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:extra_life\",\n \"size\": 9,\n \"bricks\": \"___________rr_rr___rrrrrrr_rrrrrrrrrrrrrrrrrr_rrrrrrr___rrrrr_____rrr_______r_____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:streak_shots\",\n \"size\": 8,\n \"bricks\": \"_W_W_W__W_W_W_W_tttttt_WttttttW_tttttt_W______W______W_____WWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:base_combo\",\n \"size\": 8,\n \"bricks\": \"ttttttttttyyttttttyytyyttttttyyttyyttttttyytyyttttttyytttttttttt________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:slow_down\",\n \"size\": 10,\n \"bricks\": \"_____________kk_______kkkk_____kkkkkkGG__kkkkkkGBG_kkkkkkGGGGkkkkkkGG__GGGGGG____GG__GG_____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:bigger_puck\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt______________________W___________WWWWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:viscosity\",\n \"size\": 8,\n \"bricks\": \"________tt______bbtt__ttbbbbttbbbtbbtbbbbbtbbtbbbbbybbybbbbbbbbb\",\n \"svg\": null\n },\n {\n \"name\": \"icon:left_is_lava\",\n \"size\": 8,\n \"bricks\": \"r_______rtttttt_rtttttt_r_______r_______r____W__r_______r_WWW___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:right_is_lava\",\n \"size\": 8,\n \"bricks\": \"_______r_ttttttr_ttttttr_______r_______r_____W_r_______r__WWW__r\",\n \"svg\": null\n },\n {\n \"name\": \"icon:telekinesis\",\n \"size\": 8,\n \"bricks\": \"_____PW_____s______P______s_______P_______s_______P_____WWWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:top_is_lava\",\n \"size\": 8,\n \"bricks\": \"rrrrrrrr_tttttt__tttttt____________________W_______________WWW__\",\n \"svg\": null\n },\n {\n \"name\": \"icon:coin_magnet\",\n \"size\": 8,\n \"bricks\": \"__y__y_yy_________y_y_y_y________y_y______________y______WWW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:skip_last\",\n \"size\": 5,\n \"bricks\": \"_ttt_t_t_ttt_ttt_t_t_ttt_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:multiball\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt___________W__W____________________WWW___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:smaller_puck\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt_____________W_____________________WW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:pierce\",\n \"size\": 6,\n \"bricks\": \"ttttttttttWtttt__ttt__ttt__ttt__tttt\",\n \"svg\": null\n },\n {\n \"name\": \"icon:picky_eater\",\n \"size\": 8,\n \"bricks\": \"rtrtrtrttrtrtrtrrtrtrtrt____________________t_____________WWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:metamorphosis\",\n \"size\": 8,\n \"bricks\": \"aaaaaa__aaaa__________W___________ttaatt__tttttt_________WWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:compound_interest\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__ttt__t______y_____________W__y_________rrWWWrrr\",\n \"svg\": null\n },\n {\n \"name\": \"icon:hot_start\",\n \"size\": 7,\n \"bricks\": \"ttttttttttt_tt_____W_____y_y_____y_____y_y_WWW_y_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:sapper\",\n \"size\": 9,\n \"bricks\": \"_____WW______W__W_tttWttt_yttgggtt__tgggggt__tgggggt__tgggggt__ttgggtt__ttttttt___________\",\n \"svg\": null,\n \"color\": \"#000000\"\n },\n {\n \"name\": \"icon:bigger_explosions\",\n \"size\": 8,\n \"bricks\": \"__r_______ry_rr___ryry__ryyyW_rr_rrWyyy___yryrr__yrry_rr_rr\",\n \"svg\": null\n },\n {\n \"name\": \"icon:extra_levels\",\n \"size\": 6,\n \"bricks\": \"__________b__t_bb_ttt_b__t_bbb____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:pierce_color\",\n \"size\": 8,\n \"bricks\": \"bb___bbbb__b_bbb_____bbb____bbbbb____bbbbb____bbbbb____bbbbb____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:soft_reset\",\n \"size\": 8,\n \"bricks\": \"___rg_____rrgg___rryggg_rryWggggrryWgggg_ryyggg___rrgg_____rg___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:ball_repulse_ball\",\n \"size\": 8,\n \"bricks\": \"WsP__PsWs______sP______P________________P______Ps______sWsP__PsW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:ball_attract_ball\",\n \"size\": 8,\n \"bricks\": \"__P__P____s__s__PsW__WsP________________PsW__WsP__s__s____P__P__\",\n \"svg\": null\n },\n {\n \"name\": \"icon:puck_repulse_ball\",\n \"size\": 8,\n \"bricks\": \"__________________W_______s___W___P__s______P____________WWW__\",\n \"svg\": null\n },\n {\n \"name\": \"A\",\n \"size\": 7,\n \"bricks\": \"___t_____ttt___t___t__t___t_tttttttt_____tt_____t\",\n \"svg\": null\n },\n {\n \"name\": \"B\",\n \"size\": 9,\n \"bricks\": \"_bbbbb_____bb_bb____bb_bb____bb_bb____bbbb_____bb_bb____bb_bb____bb_bb___bbbbb____\",\n \"svg\": null\n },\n {\n \"name\": \"C\",\n \"size\": 8,\n \"bricks\": \"__rrrr___rrrrrr_rrr___rrrr______rr______rrr___rr_rrrrrr___rrrr\",\n \"svg\": null\n },\n {\n \"name\": \"D\",\n \"size\": 8,\n \"bricks\": \"_GGGGG____GG__G___GG__GG__GG__GG__GG__GG__GG__GG__GG__G__GGGGG\",\n \"svg\": null\n },\n {\n \"name\": \"e\",\n \"size\": 8,\n \"bricks\": \"__tttt___tttttt_tt____tttt____tttttttttttt_______tt__tt___tttt_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:wind\",\n \"size\": 9,\n \"bricks\": \"_ss______s___PPPP_s_________sssssss___________sssssss_s________s___PPPP__ss\",\n \"svg\": null\n },\n {\n \"name\": \"icon:sturdy_bricks\",\n \"size\": 7,\n \"bricks\": \"ttbttttbtttbtt____W_____W_W___W___W_______WWW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:respawn\",\n \"size\": 9,\n \"bricks\": \"tttt___ttttt__t__ttta_ttt_______________________________W_________________WWW\",\n \"svg\": null\n },\n {\n \"name\": \"Elephant\",\n \"size\": 18,\n \"bricks\": \"_________________________llll_________lll_llllll_lll___lsssllllllllsssl__lsssllllllllsssl__lsssllBllBllsssl__lssllWllllWllssl___ll__llllll__ll_________llll_______________ll______________llll______________ll________________________________________________________________________________________________________________________________________\",\n \"svg\": 25,\n \"color\": \"\"\n },\n {\n \"name\": \"Orca\",\n \"size\": 20,\n \"bricks\": \"____________________________________________________________________________________________BBBBB____BBB_BBB___BBBBBBB____BBBBB___BBBBBBBBB____BBB___BBBBWBBWWW_____BBBBBBBBBBBWWWW_____BBBBBBBBBBWWWWW_____BBBBBBBBBWWWWW_______BBBBBBBWWWWW___________WWBBWWW______________BBB_BB______________BB__B______________________________________________________________________________________________________________________________\",\n \"svg\": null,\n \"color\": \"#1c71d8\"\n },\n {\n \"name\": \"Shark\",\n \"size\": 17,\n \"bricks\": \"__________________________________________g_______________ggg____________ggggggg_________ggggggggg_______ggggggggggg_____gggggWWWggggg____gBgWWWWWWWgBg___ggWWWWrWrWWWWgg__ggWWWrrrrrWWWgg_ggWWWrrrrrrrWWWggggWWrrrrrrrrrWWgggWWWrWrWrWrWrWWWggWWrrWWWWWWWrrWWggWWWWWWWWWWWWWWWg_________________\",\n \"svg\": null,\n \"color\": \"#3584e4\"\n },\n {\n \"name\": \"Bird\",\n \"size\": 13,\n \"bricks\": \"_______RRR____R____RSSSR___RR__RSSWWWR__RSR_RSWWBWR__RSSRRSW_WWyy_RSSSRSWWWR___RSSSSSSRR_____RRSSyyyy______RSyyyyy___RRRRSyyyy____RSSSRyyy_____RRRR________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Tux\",\n \"size\": 14,\n \"bricks\": \"_____gggg________gggggggg_____gggggggggg____gggggggggg___gggggggggggg__gggWBggWBggg__gggBBggBBggg__ggggyyyygggg_ggggggyyggggggggggWWWWWWggggg_gWWWWWWWWg_g__WWWWWWWWWW____WWWWWWWWWW____yyy____yyy__\",\n \"svg\": null,\n \"color\": \"#62a0ea\"\n },\n {\n \"name\": \"Armenia\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__bbbb__yyyy_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Austria\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__WWWW__rrrr______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Benin\",\n \"size\": 8,\n \"bricks\": \"_________kkyyyy__kkyyyy__kkrrrr__kkrrrr__________________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Botswana\",\n \"size\": 10,\n \"bricks\": \"___________tttttttt__tttttttt__tttttttt__WWWWWWWW__BBBBBBBB__WWWWWWWW__tttttttt__tttttttt__tttttttt___________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Bulgaria\",\n \"size\": 6,\n \"bricks\": \"_______WWWW__cccc__rrrr_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Canada\",\n \"size\": 7,\n \"bricks\": \"________rWWWr__rWrWr__rWWWr______________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Chad\",\n \"size\": 8,\n \"bricks\": \"_________bbyyRR__bbyyRR__bbyyRR\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"China\",\n \"size\": 8,\n \"bricks\": \"_________RRyRRR__RyRyRR__RRyRRR__RRRRRR\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Colombia\",\n \"size\": 7,\n \"bricks\": \"________yyyyy__yyyyy__bbbbb__RRRRR_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Republic of the Congo\",\n \"size\": 7,\n \"bricks\": \"________kkkyy__kkyyr__kyyrr__yyrrr_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"CΓ΄te d'Ivoire\",\n \"size\": 8,\n \"bricks\": \"_________OOWWGG__OOWWGG__OOWWGG\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Denmark\",\n \"size\": 8,\n \"bricks\": \"_________rrWrrr__rrWrrr__WWWWWW__rrWrrr__rrWrrr\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"El Salvador\",\n \"size\": 8,\n \"bricks\": \"_________bbbbbb__bbbbbb__WWWkWW__WWkWWW__bbbbbb__bbbbbb\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Egypt\",\n \"size\": 8,\n \"bricks\": \"_________RRRRRR__RRRRRR__WWWyWW__WWyWWW__gggggg__gggggg\",\n \"svg\": null,\n \"color\": \"#1c71d8\"\n },\n {\n \"name\": \"Estonia\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt__gggggg__gggggg__WWWWWW__WWWWWW\",\n \"svg\": null,\n \"color\": \"#986a44\"\n },\n {\n \"name\": \"Finland\",\n \"size\": 6,\n \"bricks\": \"_______WtWW__tttt__WtWW_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Gabon\",\n \"size\": 5,\n \"bricks\": \"______CCC__yyy__ttt______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Georgia\",\n \"size\": 9,\n \"bricks\": \"__________WrWrWrW__WWWrWWW__rrrrrrr__WWWrWWW__WrWrWrW__________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Guinea\",\n \"size\": 8,\n \"bricks\": \"_________rryycc__rryycc__rryycc\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Indonesia\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__rrrr__WWWW__WWWW_______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"icon:one_more_choice\",\n \"size\": 7,\n \"bricks\": \"ttt____tbbb___tbttt__tbtbbb__btbbb___tbbb____bbb_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:instant_upgrade\",\n \"size\": 5,\n \"bricks\": \"ttt__tbbb_tbbb_tbbb__bbb_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:checkmark_checked\",\n \"size\": 6,\n \"bricks\": \"_WWWWGWBBBGGGGBGGWWGGGBWWBGBBW_WWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:checkmark_unchecked\",\n \"size\": 6,\n \"bricks\": \"_WWWW_WBBBBWWBBBBWWBBBBWWBBBBW_WWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:fullscreen\",\n \"size\": 6,\n \"bricks\": \"WW__WWW____W____________W____WWW__WW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:exit_fullscreen\",\n \"size\": 6,\n \"bricks\": \"_W__W_WW__WW____________WW__WW_W__W_\",\n \"svg\": null\n }\n]\n","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","[\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\"\n]\n"],"names":[],"version":3,"file":"index.497c99a1.js.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file +{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,OAAO,GAAG,KAAK,KAAK,CAAC;;;ACA5B,OAAO,OAAO,GAAG,KAAK,KAAK,CAAC;;;ACA5B,QAAQ,cAAc,GAAG,SAAU,CAAC;IAClC,OAAO,KAAK,EAAE,UAAU,GAAG,IAAI;QAAC,SAAS;IAAC;AAC5C;AAEA,QAAQ,iBAAiB,GAAG,SAAU,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,cAAc;QAAC,OAAO;IAAI;AACrD;AAEA,QAAQ,SAAS,GAAG,SAAU,MAAM,EAAE,IAAI;IACxC,OAAO,IAAI,CAAC,QAAQ,OAAO,CAAC,SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF;;;AClCA,OAAO,OAAO,GAAG,KAAK,KAAK,CAAC","sources":["src/palette.json","src/levels.json","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","src/backgrounds.json"],"sourcesContent":["{\n \"_\": \"\",\n \"B\": \"black\",\n \"W\": \"white\",\n \"g\": \"#231f20\",\n \"y\": \"#ffd300\",\n \"b\": \"#6262EA\",\n \"t\": \"#5DA3EA\",\n \"s\": \"#E67070\",\n \"r\": \"#e32119\",\n \"R\": \"#ab0c0c\",\n \"c\": \"#59EEA3\",\n \"G\": \"#A1F051\",\n \"v\": \"#A664E8\",\n \"p\": \"#E869E8\",\n \"a\": \"#5BECEC\",\n \"C\": \"#53EE53\",\n \"S\": \"#F44848\",\n \"P\": \"#E66BA8\",\n \"O\": \"#F29E4A\",\n \"k\": \"#618227\",\n \"e\": \"#e1c8b4\",\n \"l\": \"#9b9fa4\"\n}\n","[\n {\n \"name\": \"71 mini\",\n \"size\": 5,\n \"bricks\": \"bbb____bt__btt__b_t___ttt\",\n \"svg\": 23,\n \"color\": \"\"\n },\n {\n \"name\": \"Butterfly\",\n \"bricks\": \"_________bb_t_t_bbbbb_t_bbbbbbbtbbbb_bbbtbbb____btb____bbbtbbb__bb_t_bb___________________\",\n \"size\": 9,\n \"svg\": 20,\n \"color\": \"\"\n },\n {\n \"name\": \"Castle\",\n \"size\": 7,\n \"bricks\": \"s_s_s_ssssssssssBBBssssBBBssttbbbttttbbbtttbtbtbt\",\n \"svg\": 16\n },\n {\n \"name\": \"Eyes\",\n \"size\": 9,\n \"bricks\": \"ttttttt__tWWWWWWW_tWrrWttW_tWWWWWWW_ttttttt_____t______ttttt____ttttt_____t_t\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Creeper\",\n \"size\": 10,\n \"bricks\": \"___________ccGGccGG__cGccGcGc__GBBccBBc__cBBGcBBc__GccBBGGc__ccBBBBcG__GGBBBBcG__cGBccBGc___________\",\n \"svg\": 22\n },\n {\n \"name\": \"Stairs\",\n \"size\": 8,\n \"bricks\": \"tt______tt______bbtt____bbtt____vvbbtt__vvbbtt__ppvvbbttppvvbbtt\",\n \"svg\": 14\n },\n {\n \"name\": \"Dots\",\n \"size\": 9,\n \"bricks\": \"b_t_a_c_C__________b_t_a_c__________v_b_t_a_c__________v_b_t_a__________p_v_b_t_a\",\n \"svg\": null\n },\n {\n \"name\": \"Lines\",\n \"size\": 9,\n \"bricks\": \"aaaaaaaa___________tttttttt_________aaaaaaaa___________tttttttt_________aaaaaaaa\",\n \"svg\": 8,\n \"color\": \"\"\n },\n {\n \"name\": \"Heart\",\n \"size\": 15,\n \"bricks\": \"__________________RRR___RRR_____RSSSR_RSSSR___RSWWSSRSSSSSR__RSWSSSSSSSSSR__RSSSSSSSSSSSR__RSWSSSSSSSSSR___RSSSSSSSSSR_____RSSSSSSSR_______RSSSSSR_________RSSSR___________RSR_____________R____________________________________\",\n \"svg\": 17,\n \"color\": \"\"\n },\n {\n \"name\": \"Swiss\",\n \"size\": 7,\n \"bricks\": \"________RRRRR__RRWRR__RWWWR__RRWRR__RRRRR\",\n \"svg\": 13,\n \"color\": \"\"\n },\n {\n \"name\": \"Germany\",\n \"size\": 6,\n \"bricks\": \"_______gggg__rrrr__yyyy\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"France\",\n \"size\": 8,\n \"bricks\": \"_________ttWWrr__ttWWrr__ttWWrr__ttWWrr__ttWWrr________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Smiley\",\n \"size\": 8,\n \"bricks\": \"_________yy__yy__yy__yy__________________yyyyyy___yyyy__________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Labyrinthe\",\n \"size\": 11,\n \"bricks\": \"_______tttS_Stttt_S________t___S__Stt_ttttt____t_____S__ttt_S_S____t___t_tttt_t_S_t____tSt_t_t_Sttt___t_t_____Sttt_tttttS\",\n \"svg\": 21\n },\n {\n \"name\": \"Temple\",\n \"size\": 11,\n \"bricks\": \"_______________WWW______WWWWWWW___WWWWWWWWW___t_t_t_t____b_b_b_b____v_v_v_v____p_p_p_p____P_P_P_P____WWWWWWW___WWWWWWWWW_\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Pacman\",\n \"size\": 12,\n \"bricks\": \"____yyyy______yyyyyyyy___yyyyByyyyy__yyyyyyyyy__yyyyyyyy____yyyyyy______yyyyyy___S_Syyyyyyyy_____yyyyyyyyy___yyyyyyyyyy___yyyyyyyy______yyyy\",\n \"svg\": 7,\n \"color\": \"\"\n },\n {\n \"name\": \"Ship\",\n \"size\": 11,\n \"bricks\": \"____sWW________sWWW_______sWWW_______s___OOOOOOOOOOOOOO_OBOBOBOBOO__OOOOOOOO_bbbbbbbbgbbbbgbbbbggbbbggbbbbbbbb\",\n \"svg\": 19\n },\n {\n \"name\": \"We come in peace\",\n \"size\": 13,\n \"bricks\": \"________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Space mushroom\",\n \"size\": 10,\n \"bricks\": \"______________WW_______WWWW_____WWWWWW___WWBWWBWW__WWWWWWWW____W__W_____W_WW_W___W_W__W_W\",\n \"svg\": 6,\n \"color\": \"\"\n },\n {\n \"name\": \"Wololo\",\n \"size\": 9,\n \"bricks\": \"____WW_OOW___WW__OWW__W___OWWWbbbW_WWW_WbW_WOW__WWb__OW__bbb__O___W_W__O___W_W__O\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Small heart\",\n \"size\": 15,\n \"bricks\": \"________________________________RRRR___RRRR___RrWWrR_RWWrrR__RWWrrrRWWrrrR__RrrrrrrrrrrrR__RrrrrrrrrrrrR___RrrrrrrrrrR_____RrrrrrrrR_______RrrrrrR_________RrrrR___________RrR_____________R______________________\",\n \"svg\": 29,\n \"color\": \"\"\n },\n {\n \"name\": \"Eye\",\n \"size\": 9,\n \"bricks\": \"____________ggg_____gWWWg___gWbbbWg_gWWbBbWWg_gWbbbWg___gWWWg_____ggg____________\",\n \"svg\": null,\n \"color\": \"#5da3ea\"\n },\n {\n \"name\": \"Enderman\",\n \"size\": 10,\n \"bricks\": \"___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________\",\n \"svg\": null,\n \"color\": \"#154b07\"\n },\n {\n \"name\": \"Mushroom\",\n \"size\": 16,\n \"bricks\": \"_____________________rrrrWW________WWrrrrWWWW_____WWrrrrrrWWWW____WrrWWWWrrWWW___rrrWWWWWWrrrrr__rrrWWWWWWrrWWr__WrrWWWWWWrWWWW__WWrrWWWWrrWWWW__WWrrrrrrrrrWWr__WrrWWWWWWWWrrr_____WWBWWBWW_______WWWBWWBWWW______WWWWWWWWWW_______WWWWWWWW____________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Tulip\",\n \"size\": 11,\n \"bricks\": \"______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________\",\n \"svg\": 17,\n \"color\": \"\"\n },\n {\n \"name\": \"Chain\",\n \"size\": 7,\n \"bricks\": \"yyy____yBy____yyyyy____yBy____yyyyy____yBy____yyy\",\n \"svg\": 31,\n \"color\": \"\"\n },\n {\n \"name\": \"Marion\",\n \"size\": 9,\n \"bricks\": \"rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr\",\n \"svg\": 27,\n \"color\": \"\"\n },\n {\n \"name\": \"Renan\",\n \"size\": 9,\n \"bricks\": \"yyyyyyy___yyyyyyy__yy___yy__yy___yy__yyyyyy___yy_yy____yy__yy___yy___yy_yyy___yyy\",\n \"svg\": 3,\n \"color\": \"\"\n },\n {\n \"name\": \"Violet Pairs\",\n \"size\": 8,\n \"bricks\": \"b_b_b_b_b_b_b_b__________t_t_t_t_t_t_t_t________b_b_b_b_b_b_b_b\",\n \"svg\": 5,\n \"color\": \"\"\n },\n {\n \"name\": \"Red Cups\",\n \"size\": 11,\n \"bricks\": \"___________rBr_rBr_rBrrrr_rrr_rrr___________r_rBr_rBr_rr_rrr_rrr_r___________rBr_rBr_rBrrrr_rrr_rrr__________\",\n \"svg\": 23,\n \"color\": \"\"\n },\n {\n \"name\": \"Cactus\",\n \"size\": 10,\n \"bricks\": \"____G______rG_Gk______G_Gk______kkkk_r_____kkk_G______GkGk_____rGkk_______Gk________kk________kk_____\",\n \"svg\": 27,\n \"color\": \"\"\n },\n {\n \"name\": \"Sunny Face\",\n \"size\": 11,\n \"bricks\": \"____yyy______yyyyyyy___yyyyyyyyy__yyyyyyyyy_yyyWWyWWyyyyyyyyyyyyyyyyyyyyyyyyy_yyWWWWWyy__yyyWWWyyy___yyyyyyy______yyy\",\n \"svg\": null,\n \"color\": \"#5da3ea\"\n },\n {\n \"name\": \"Mountain\",\n \"size\": 9,\n \"bricks\": \"_______________W_______WWW______GGWW__W_GGGGG_kkkGGGGG_kkkkGGGGkkkkkGGGGkkkkkkGGG_________\",\n \"svg\": 15,\n \"color\": \"\"\n },\n {\n \"name\": \"Dollar\",\n \"size\": 17,\n \"bricks\": \"________________________G_G______________G_G____________GGGGGGG_________GGGGGGGGG_______GG__G_G__GG______GG__G_G__GG______GG__G_G___________GGGGGGGG__________GGGGGGGG___________G_G__GG______GG__G_G__GG______GG__G_G__GG_______GGGGGGGGG_________GGGGGGG____________G_G______________G_G________________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Waves\",\n \"size\": 8,\n \"bricks\": \"___bbb____bbb____bbttbbbbbttbbbbttttaatttttaattttaaaaaaa\",\n \"svg\": 20,\n \"color\": \"\"\n },\n {\n \"name\": \"Box\",\n \"size\": 8,\n \"bricks\": \"yyyyyyyyy______yy_bbbb_yy_b__b_yy_b__b_yy_bbbb_yy______yyyyyyyyy\",\n \"svg\": 30,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Rose\",\n \"size\": 9,\n \"bricks\": \"__SS______SSSS_____SSSS_____SSSS______SS_k______k_kk_____kk_k______kk________k\",\n \"svg\": 4,\n \"color\": \"\"\n },\n {\n \"name\": \"Time\",\n \"size\": 9,\n \"bricks\": \"__________WWWWWWW___WWWWW_____yyy_______y________y_______WyW_____WyyyW___yyyyyyy__________\",\n \"svg\": 9,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Watermelon\",\n \"size\": 8,\n \"bricks\": \"_____Sk_____SSBk___SBSSk__SSSSSk_SSBSSk_SBSSSSk_kSSSkk___kkk____\",\n \"svg\": 28,\n \"color\": \"\"\n },\n {\n \"name\": \"Worms\",\n \"size\": 13,\n \"bricks\": \"___sssss_______sssssss______WWsWWsss_____WBsBWsss_____WBsBWsss_____WWsWWsss_____sssssss_______ssssss_____WWWWWWss_______WssWs__s_____ssss__sss___sssssssssss__sssssssss_ss\",\n \"svg\": null,\n \"color\": \"\",\n \"squared\": false\n },\n {\n \"name\": \"Ocean Sunrise\",\n \"size\": 8,\n \"bricks\": \"SSSSSSSSSSSyySSSSSyyyySSSyyWWyySbttaattbbbttttbbbbbttbbbbbbbbbbb\",\n \"svg\": 12,\n \"color\": \"\"\n },\n {\n \"name\": \"Crosses\",\n \"size\": 13,\n \"bricks\": \"b___b___b___b__v___v___v___vvv_vvv_vvv___v___v___v__p___p___p___ppp_ppp_ppp_ppp___p___p___p__P___P___P___PPP_PPP_PPP___P___P___P__p___p___p___ppp_ppp_ppp_ppp___p___p___p\",\n \"svg\": 10,\n \"color\": \"\"\n },\n {\n \"name\": \"Negative space\",\n \"size\": 9,\n \"bricks\": \"tttttttttt_t_t_t_t_________b_b_b_b_bbbbbbbbbb_b_b_b_b___________t_t_t_t_ttttttttt_________\",\n \"svg\": null\n },\n {\n \"name\": \"UK\",\n \"size\": 11,\n \"bricks\": \"brbbWrWbbrbbbrbWrWbrbbbbbrWrWrbbbWWWWWrWWWWWrrrrrrrrrrrWWWWWrWWWWWbbbrWrWrbbbbbrbWrWbrbbbrbbWrWbbrb__________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Greece\",\n \"size\": 11,\n \"bricks\": \"ttWttttttttttWttWWWWWWWWWWWttttttttWttWWWWWWttWttttttttWWWWWWWWWWWtttttttttttWWWWWWWWWWWttttttttttt__________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Russia\",\n \"size\": 8,\n \"bricks\": \"________WWWWWWWWWWWWWWWWttttttttttttttttrrrrrrrrrrrrrrrr________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Ukraine\",\n \"size\": 8,\n \"bricks\": \"________ttttttttttttttttttttttttyyyyyyyyyyyyyyyyyyyyyyyy________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Poland\",\n \"size\": 7,\n \"bricks\": \"________WWWWW__WWWWW__rrrrr__rrrrr_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Yellow 71\",\n \"size\": 9,\n \"bricks\": \"_________yyyyy__yyyyyyy_yyy___yy__yy__yyy__yy_yyy___yy_yy____yy_yy____yy__________________\",\n \"svg\": 26,\n \"color\": \"\"\n },\n {\n \"name\": \"71 on white\",\n \"size\": 6,\n \"bricks\": \"WWWWWWrrrWWrWWrWrrWrWWWrWrWWWrWWWWWW______\",\n \"svg\": null\n },\n {\n \"name\": \"Blue 71\",\n \"size\": 8,\n \"bricks\": \"ttttt__bttttt_bb___ttbbb__tt__bb__tt__bb_tt___bb_tt___bb_tt___bb\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Seventy one\",\n \"size\": 21,\n \"bricks\": \"rr_yy_rrry_yrrry_yrrrr_ry_yr__y_yr_ry_y_r_rr_yy_rr_yy_r_ry_y_r_r_ry_yr__y_yr_ry_y_r_rr_y_yrrry_yrrryyy_r_yyy__________________y______________r_____yyyrrry_yrrryyyrr_y_y__yrr_y_yrr_y_yr__y_yyyyrrr_y_rrry_yrrryyy____________________yrrryyyrrr_________yy_r_ry_yrr_____________rrry_yrrryyyyyyyyyyyy_____________________________________________________________________________________________________________________________\",\n \"svg\": null\n },\n {\n \"name\": \"B71\",\n \"size\": 10,\n \"bricks\": \"__________bbbtttt_b_b__b__tbb_b__b__t_b_bbb__t__b_b__b_t__b_b__bt___b_bbb_t__bbb__________\",\n \"svg\": null\n },\n {\n \"name\": \"Pig\",\n \"size\": 9,\n \"bricks\": \"__________PP___PP__PPP_PPP__WWPPPWW__WBPPPBW__PPsssPP__PsBsBsP__PPsssPP___________\",\n \"svg\": null\n },\n {\n \"name\": \"Big Pig\",\n \"size\": 15,\n \"bricks\": \"________________sss_______sss__ss__sssss__ss____sssssssss_____sWBsssssBWs___ssBBsssssBBss__ssss_____ssss__sss_sssss_sss__sss_sBsBs_sss__sss_sssss_sss___sss_____sss____sssssssssss__GGGsssssssssGGGGGGsGsssssGsGGGGGGssGGGGGssGGG_______________\",\n \"svg\": 2,\n \"color\": \"\"\n },\n {\n \"name\": \"Donkey Kong\",\n \"size\": 9,\n \"bricks\": \"OOr__a___OOr__a___ppppppp_O______a________a____pppppppr_a______b_a___O__ppppppp__\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Banana\",\n \"size\": 12,\n \"bricks\": \"_________________e__________eee_________eee_________eee_________eeeyy_____yyeeyyyy___yyyyey_yC___yy_yyy___C_____yyyy_________yyyy_________yyyy\",\n \"svg\": null\n },\n {\n \"name\": \"Fox\",\n \"size\": 8,\n \"bricks\": \"e______eee_OO_eeeeOOOOeeeOBOOBOeOOOOOOOO_WWBBWW___WWWW_____WW___\",\n \"svg\": null\n },\n {\n \"name\": \"Wiki\",\n \"size\": 10,\n \"bricks\": \"_______________________GGGG_____GGkkGG___GkggggkG__GgWWWWgG__GkggggkG___GGkkGG_____GGGG_______________________\",\n \"svg\": null\n },\n {\n \"name\": \"Baby Dog\",\n \"size\": 8,\n \"bricks\": \"_______W__eeeeWWWWeeWeWWWegWegeeeeWWWWee_eWggWe__eWWWWe____WW\",\n \"svg\": null\n },\n {\n \"name\": \"Cute dog\",\n \"size\": 9,\n \"bricks\": \"__________O_____O_OOOWWWOOOOOWWWWWOOOOeWWWWOO_eBeWWBW__eBeWWBW___eWBWW_____WRW____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:extra_life\",\n \"size\": 9,\n \"bricks\": \"___________rr_rr___rrrrrrr_rrrrrrrrrrrrrrrrrr_rrrrrrr___rrrrr_____rrr_______r_____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:streak_shots\",\n \"size\": 8,\n \"bricks\": \"_W_W_W__W_W_W_W_tttttt_WttttttW_tttttt_W______W______W_____WWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:base_combo\",\n \"size\": 8,\n \"bricks\": \"ttttttttttyyttttttyytyyttttttyyttyyttttttyytyyttttttyytttttttttt________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:slow_down\",\n \"size\": 10,\n \"bricks\": \"_____________kk_______kkkk_____kkkkkkGG__kkkkkkGBG_kkkkkkGGGGkkkkkkGG__GGGGGG____GG__GG_____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:bigger_puck\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt______________________W___________WWWWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:viscosity\",\n \"size\": 8,\n \"bricks\": \"________tt______bbtt__ttbbbbttbbbtbbtbbbbbtbbtbbbbbybbybbbbbbbbb\",\n \"svg\": null\n },\n {\n \"name\": \"icon:left_is_lava\",\n \"size\": 8,\n \"bricks\": \"r_______rtttttt_rtttttt_r_______r_______r____W__r_______r_WWW___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:right_is_lava\",\n \"size\": 8,\n \"bricks\": \"_______r_ttttttr_ttttttr_______r_______r_____W_r_______r__WWW__r\",\n \"svg\": null\n },\n {\n \"name\": \"icon:telekinesis\",\n \"size\": 8,\n \"bricks\": \"_____PW_____s______P______s_______P_______s_______P_____WWWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:top_is_lava\",\n \"size\": 8,\n \"bricks\": \"rrrrrrrr_tttttt__tttttt____________________W_______________WWW__\",\n \"svg\": null\n },\n {\n \"name\": \"icon:coin_magnet\",\n \"size\": 8,\n \"bricks\": \"__y__y_yy_________y_y_y_y________y_y______________y______WWW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:skip_last\",\n \"size\": 5,\n \"bricks\": \"_ttt_t_t_ttt_ttt_t_t_ttt_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:multiball\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt___________W__W____________________WWW___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:smaller_puck\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt_____________W_____________________WW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:pierce\",\n \"size\": 6,\n \"bricks\": \"ttttttttttWtttt__ttt__ttt__ttt__tttt\",\n \"svg\": null\n },\n {\n \"name\": \"icon:picky_eater\",\n \"size\": 8,\n \"bricks\": \"rtrtrtrttrtrtrtrrtrtrtrt____________________t_____________WWWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:metamorphosis\",\n \"size\": 8,\n \"bricks\": \"aaaaaa__aaaa__________W___________ttaatt__tttttt_________WWW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:compound_interest\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__ttt__t______y_____________W__y_________rrWWWrrr\",\n \"svg\": null\n },\n {\n \"name\": \"icon:hot_start\",\n \"size\": 7,\n \"bricks\": \"ttttttttttt_tt_____W_____y_y_____y_____y_y_WWW_y_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:sapper\",\n \"size\": 9,\n \"bricks\": \"_____WW______W__W_tttWttt_yttgggtt__tgggggt__tgggggt__tgggggt__ttgggtt__ttttttt___________\",\n \"svg\": null,\n \"color\": \"#000000\"\n },\n {\n \"name\": \"icon:bigger_explosions\",\n \"size\": 8,\n \"bricks\": \"__r_______ry_rr___ryry__ryyyW_rr_rrWyyy___yryrr__yrry_rr_rr\",\n \"svg\": null\n },\n {\n \"name\": \"icon:extra_levels\",\n \"size\": 6,\n \"bricks\": \"__________b__t_bb_ttt_b__t_bbb____________\",\n \"svg\": null\n },\n {\n \"name\": \"icon:pierce_color\",\n \"size\": 8,\n \"bricks\": \"bb___bbbb__b_bbb_____bbb____bbbbb____bbbbb____bbbbb____bbbbb____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:soft_reset\",\n \"size\": 8,\n \"bricks\": \"___rg_____rrgg___rryggg_rryWggggrryWgggg_ryyggg___rrgg_____rg___\",\n \"svg\": null\n },\n {\n \"name\": \"icon:ball_repulse_ball\",\n \"size\": 8,\n \"bricks\": \"WsP__PsWs______sP______P________________P______Ps______sWsP__PsW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:ball_attract_ball\",\n \"size\": 8,\n \"bricks\": \"__P__P____s__s__PsW__WsP________________PsW__WsP__s__s____P__P__\",\n \"svg\": null\n },\n {\n \"name\": \"icon:puck_repulse_ball\",\n \"size\": 8,\n \"bricks\": \"__________________W_______s___W___P__s______P____________WWW__\",\n \"svg\": null\n },\n {\n \"name\": \"A\",\n \"size\": 7,\n \"bricks\": \"___t_____ttt___t___t__t___t_tttttttt_____tt_____t\",\n \"svg\": null\n },\n {\n \"name\": \"B\",\n \"size\": 9,\n \"bricks\": \"_bbbbb_____bb_bb____bb_bb____bb_bb____bbbb_____bb_bb____bb_bb____bb_bb___bbbbb____\",\n \"svg\": null\n },\n {\n \"name\": \"C\",\n \"size\": 8,\n \"bricks\": \"__rrrr___rrrrrr_rrr___rrrr______rr______rrr___rr_rrrrrr___rrrr\",\n \"svg\": null\n },\n {\n \"name\": \"D\",\n \"size\": 8,\n \"bricks\": \"_GGGGG____GG__G___GG__GG__GG__GG__GG__GG__GG__GG__GG__G__GGGGG\",\n \"svg\": null\n },\n {\n \"name\": \"e\",\n \"size\": 8,\n \"bricks\": \"__tttt___tttttt_tt____tttt____tttttttttttt_______tt__tt___tttt_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:wind\",\n \"size\": 9,\n \"bricks\": \"_ss______s___PPPP_s_________sssssss___________sssssss_s________s___PPPP__ss\",\n \"svg\": null\n },\n {\n \"name\": \"icon:sturdy_bricks\",\n \"size\": 7,\n \"bricks\": \"ttbttttbtttbtt____W_____W_W___W___W_______WWW____\",\n \"svg\": null\n },\n {\n \"name\": \"icon:respawn\",\n \"size\": 9,\n \"bricks\": \"tttt___ttttt__t__ttta_ttt_______________________________W_________________WWW\",\n \"svg\": null\n },\n {\n \"name\": \"Elephant\",\n \"size\": 18,\n \"bricks\": \"_________________________llll_________lll_llllll_lll___lsssllllllllsssl__lsssllllllllsssl__lsssllBllBllsssl__lssllWllllWllssl___ll__llllll__ll_________llll_______________ll______________llll______________ll________________________________________________________________________________________________________________________________________\",\n \"svg\": 25,\n \"color\": \"\"\n },\n {\n \"name\": \"Orca\",\n \"size\": 20,\n \"bricks\": \"____________________________________________________________________________________________BBBBB____BBB_BBB___BBBBBBB____BBBBB___BBBBBBBBB____BBB___BBBBWBBWWW_____BBBBBBBBBBBWWWW_____BBBBBBBBBBWWWWW_____BBBBBBBBBWWWWW_______BBBBBBBWWWWW___________WWBBWWW______________BBB_BB______________BB__B______________________________________________________________________________________________________________________________\",\n \"svg\": null,\n \"color\": \"#1c71d8\"\n },\n {\n \"name\": \"Shark\",\n \"size\": 17,\n \"bricks\": \"__________________________________________g_______________ggg____________ggggggg_________ggggggggg_______ggggggggggg_____gggggWWWggggg____gBgWWWWWWWgBg___ggWWWWrWrWWWWgg__ggWWWrrrrrWWWgg_ggWWWrrrrrrrWWWggggWWrrrrrrrrrWWgggWWWrWrWrWrWrWWWggWWrrWWWWWWWrrWWggWWWWWWWWWWWWWWWg_________________\",\n \"svg\": null,\n \"color\": \"#3584e4\"\n },\n {\n \"name\": \"Bird\",\n \"size\": 13,\n \"bricks\": \"_______RRR____R____RSSSR___RR__RSSWWWR__RSR_RSWWBWR__RSSRRSW_WWyy_RSSSRSWWWR___RSSSSSSRR_____RRSSyyyy______RSyyyyy___RRRRSyyyy____RSSSRyyy_____RRRR________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Tux\",\n \"size\": 14,\n \"bricks\": \"_____gggg________gggggggg_____gggggggggg____gggggggggg___gggggggggggg__gggWBggWBggg__gggBBggBBggg__ggggyyyygggg_ggggggyyggggggggggWWWWWWggggg_gWWWWWWWWg_g__WWWWWWWWWW____WWWWWWWWWW____yyy____yyy__\",\n \"svg\": null,\n \"color\": \"#62a0ea\"\n },\n {\n \"name\": \"Armenia\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__bbbb__yyyy_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Austria\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__WWWW__rrrr______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Benin\",\n \"size\": 8,\n \"bricks\": \"_________kkyyyy__kkyyyy__kkrrrr__kkrrrr__________________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Botswana\",\n \"size\": 10,\n \"bricks\": \"___________tttttttt__tttttttt__tttttttt__WWWWWWWW__BBBBBBBB__WWWWWWWW__tttttttt__tttttttt__tttttttt___________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Bulgaria\",\n \"size\": 6,\n \"bricks\": \"_______WWWW__cccc__rrrr_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Canada\",\n \"size\": 7,\n \"bricks\": \"________rWWWr__rWrWr__rWWWr______________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Chad\",\n \"size\": 8,\n \"bricks\": \"_________bbyyRR__bbyyRR__bbyyRR\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"China\",\n \"size\": 8,\n \"bricks\": \"_________RRyRRR__RyRyRR__RRyRRR__RRRRRR\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Colombia\",\n \"size\": 7,\n \"bricks\": \"________yyyyy__yyyyy__bbbbb__RRRRR_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Republic of the Congo\",\n \"size\": 7,\n \"bricks\": \"________kkkyy__kkyyr__kyyrr__yyrrr_______________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"CΓ΄te d'Ivoire\",\n \"size\": 8,\n \"bricks\": \"_________OOWWGG__OOWWGG__OOWWGG\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Denmark\",\n \"size\": 8,\n \"bricks\": \"_________rrWrrr__rrWrrr__WWWWWW__rrWrrr__rrWrrr\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"El Salvador\",\n \"size\": 8,\n \"bricks\": \"_________bbbbbb__bbbbbb__WWWkWW__WWkWWW__bbbbbb__bbbbbb\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Egypt\",\n \"size\": 8,\n \"bricks\": \"_________RRRRRR__RRRRRR__WWWyWW__WWyWWW__gggggg__gggggg\",\n \"svg\": null,\n \"color\": \"#1c71d8\"\n },\n {\n \"name\": \"Estonia\",\n \"size\": 8,\n \"bricks\": \"_________tttttt__tttttt__gggggg__gggggg__WWWWWW__WWWWWW\",\n \"svg\": null,\n \"color\": \"#986a44\"\n },\n {\n \"name\": \"Finland\",\n \"size\": 6,\n \"bricks\": \"_______WtWW__tttt__WtWW_____________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Gabon\",\n \"size\": 5,\n \"bricks\": \"______CCC__yyy__ttt______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Georgia\",\n \"size\": 9,\n \"bricks\": \"__________WrWrWrW__WWWrWWW__rrrrrrr__WWWrWWW__WrWrWrW__________________\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Guinea\",\n \"size\": 8,\n \"bricks\": \"_________rryycc__rryycc__rryycc\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"Indonesia\",\n \"size\": 6,\n \"bricks\": \"_______rrrr__rrrr__WWWW__WWWW_______\",\n \"svg\": null,\n \"color\": \"\"\n },\n {\n \"name\": \"icon:one_more_choice\",\n \"size\": 7,\n \"bricks\": \"ttt____tbbb___tbttt__tbtbbb__btbbb___tbbb____bbb_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:instant_upgrade\",\n \"size\": 5,\n \"bricks\": \"ttt__tbbb_tbbb_tbbb__bbb_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:checkmark_checked\",\n \"size\": 6,\n \"bricks\": \"_WWWWGWBBBGGGGBGGWWGGGBWWBGBBW_WWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:checkmark_unchecked\",\n \"size\": 6,\n \"bricks\": \"_WWWW_WBBBBWWBBBBWWBBBBWWBBBBW_WWWW_\",\n \"svg\": null\n },\n {\n \"name\": \"icon:fullscreen\",\n \"size\": 6,\n \"bricks\": \"WW__WWW____W____________W____WWW__WW\",\n \"svg\": null\n },\n {\n \"name\": \"icon:exit_fullscreen\",\n \"size\": 6,\n \"bricks\": \"_W__W_WW__WW____________WW__WW_W__W_\",\n \"svg\": null\n }\n]","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(dest, key)\n ) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","[\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\"\n]\n"],"names":[],"version":3,"file":"index.497c99a1.js.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file diff --git a/dist/index.c0fd3053.js b/dist/index.c0fd3053.js new file mode 100644 index 0000000..9d282c6 --- /dev/null +++ b/dist/index.c0fd3053.js @@ -0,0 +1,209 @@ +// modules are defined as an array +// [ module function, map of requires ] +// +// map of requires is short require name -> numeric require +// +// anything defined in a previous bundle is accessed via the +// orig method which is the require for previous bundles + +(function (modules, entry, mainEntry, parcelRequireName, globalName) { + /* eslint-disable no-undef */ + var globalObject = + typeof globalThis !== 'undefined' + ? globalThis + : typeof self !== 'undefined' + ? self + : typeof window !== 'undefined' + ? window + : typeof global !== 'undefined' + ? global + : {}; + /* eslint-enable no-undef */ + + // Save the require from previous bundle to this closure if any + var previousRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + + var cache = previousRequire.cache || {}; + // Do not use `require` to prevent Webpack from trying to bundle this call + var nodeRequire = + typeof module !== 'undefined' && + typeof module.require === 'function' && + module.require.bind(module); + + function newRequire(name, jumped) { + if (!cache[name]) { + if (!modules[name]) { + // if we cannot find the module within our internal map or + // cache jump to the current global require ie. the last bundle + // that was added to the page. + var currentRequire = + typeof globalObject[parcelRequireName] === 'function' && + globalObject[parcelRequireName]; + if (!jumped && currentRequire) { + return currentRequire(name, true); + } + + // If there are other bundles on this page the require from the + // previous one is saved to 'previousRequire'. Repeat this as + // many times as there are bundles until the module is found or + // we exhaust the require chain. + if (previousRequire) { + return previousRequire(name, true); + } + + // Try the node require function if it exists. + if (nodeRequire && typeof name === 'string') { + return nodeRequire(name); + } + + var err = new Error("Cannot find module '" + name + "'"); + err.code = 'MODULE_NOT_FOUND'; + throw err; + } + + localRequire.resolve = resolve; + localRequire.cache = {}; + + var module = (cache[name] = new newRequire.Module(name)); + + modules[name][0].call( + module.exports, + localRequire, + module, + module.exports, + globalObject + ); + } + + return cache[name].exports; + + function localRequire(x) { + var res = localRequire.resolve(x); + return res === false ? {} : newRequire(res); + } + + function resolve(x) { + var id = modules[name][1][x]; + return id != null ? id : x; + } + } + + function Module(moduleName) { + this.id = moduleName; + this.bundle = newRequire; + this.exports = {}; + } + + newRequire.isParcelRequire = true; + newRequire.Module = Module; + newRequire.modules = modules; + newRequire.cache = cache; + newRequire.parent = previousRequire; + newRequire.register = function (id, exports) { + modules[id] = [ + function (require, module) { + module.exports = exports; + }, + {}, + ]; + }; + + Object.defineProperty(newRequire, 'root', { + get: function () { + return globalObject[parcelRequireName]; + }, + }); + + globalObject[parcelRequireName] = newRequire; + + for (var i = 0; i < entry.length; i++) { + newRequire(entry[i]); + } + + if (mainEntry) { + // Expose entry point to Node, AMD or browser globals + // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js + var mainExports = newRequire(mainEntry); + + // CommonJS + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = mainExports; + + // RequireJS + } else if (typeof define === 'function' && define.amd) { + define(function () { + return mainExports; + }); + + // + @@ -468,463 +468,10 @@ h2.histogram-title strong { this[globalName] = mainExports; } } -})({"hhTAC":[function(require,module,exports,__globalThis) { -var global = arguments[3]; -var HMR_HOST = null; -var HMR_PORT = null; -var HMR_SECURE = false; -var HMR_ENV_HASH = "d6ea1d42532a7575"; -var HMR_USE_SSE = false; -module.bundle.HMR_BUNDLE_ID = "bcc179bbafd39a7c"; -"use strict"; -/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ /*:: -import type { - HMRAsset, - HMRMessage, -} from '@parcel/reporter-dev-server/src/HMRServer.js'; -interface ParcelRequire { - (string): mixed; - cache: {|[string]: ParcelModule|}; - hotData: {|[string]: mixed|}; - Module: any; - parent: ?ParcelRequire; - isParcelRequire: true; - modules: {|[string]: [Function, {|[string]: string|}]|}; - HMR_BUNDLE_ID: string; - root: ParcelRequire; -} -interface ParcelModule { - hot: {| - data: mixed, - accept(cb: (Function) => void): void, - dispose(cb: (mixed) => void): void, - // accept(deps: Array | string, cb: (Function) => void): void, - // decline(): void, - _acceptCallbacks: Array<(Function) => void>, - _disposeCallbacks: Array<(mixed) => void>, - |}; -} -interface ExtensionContext { - runtime: {| - reload(): void, - getURL(url: string): string; - getManifest(): {manifest_version: number, ...}; - |}; -} -declare var module: {bundle: ParcelRequire, ...}; -declare var HMR_HOST: string; -declare var HMR_PORT: string; -declare var HMR_ENV_HASH: string; -declare var HMR_SECURE: boolean; -declare var HMR_USE_SSE: boolean; -declare var chrome: ExtensionContext; -declare var browser: ExtensionContext; -declare var __parcel__import__: (string) => Promise; -declare var __parcel__importScripts__: (string) => Promise; -declare var globalThis: typeof self; -declare var ServiceWorkerGlobalScope: Object; -*/ var OVERLAY_ID = '__parcel__error__overlay__'; -var OldModule = module.bundle.Module; -function Module(moduleName) { - OldModule.call(this, moduleName); - this.hot = { - data: module.bundle.hotData[moduleName], - _acceptCallbacks: [], - _disposeCallbacks: [], - accept: function(fn) { - this._acceptCallbacks.push(fn || function() {}); - }, - dispose: function(fn) { - this._disposeCallbacks.push(fn); - } - }; - module.bundle.hotData[moduleName] = undefined; -} -module.bundle.Module = Module; -module.bundle.hotData = {}; -var checkedAssets /*: {|[string]: boolean|} */ , disposedAssets /*: {|[string]: boolean|} */ , assetsToDispose /*: Array<[ParcelRequire, string]> */ , assetsToAccept /*: Array<[ParcelRequire, string]> */ ; -function getHostname() { - return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost'); -} -function getPort() { - return HMR_PORT || location.port; -} -// eslint-disable-next-line no-redeclare -var parent = module.bundle.parent; -if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { - var hostname = getHostname(); - var port = getPort(); - var protocol = HMR_SECURE || location.protocol == 'https:' && ![ - 'localhost', - '127.0.0.1', - '0.0.0.0' - ].includes(hostname) ? 'wss' : 'ws'; - var ws; - if (HMR_USE_SSE) ws = new EventSource('/__parcel_hmr'); - else try { - ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/'); - } catch (err) { - if (err.message) console.error(err.message); - ws = {}; - } - // Web extension context - var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser; - // Safari doesn't support sourceURL in error stacks. - // eval may also be disabled via CSP, so do a quick check. - var supportsSourceURL = false; - try { - (0, eval)('throw new Error("test"); //# sourceURL=test.js'); - } catch (err) { - supportsSourceURL = err.stack.includes('test.js'); - } - // $FlowFixMe - ws.onmessage = async function(event /*: {data: string, ...} */ ) { - checkedAssets = {} /*: {|[string]: boolean|} */ ; - disposedAssets = {} /*: {|[string]: boolean|} */ ; - assetsToAccept = []; - assetsToDispose = []; - var data /*: HMRMessage */ = JSON.parse(event.data); - if (data.type === 'reload') fullReload(); - else if (data.type === 'update') { - // Remove error overlay if there is one - if (typeof document !== 'undefined') removeErrorOverlay(); - let assets = data.assets.filter((asset)=>asset.envHash === HMR_ENV_HASH); - // Handle HMR Update - let handled = assets.every((asset)=>{ - return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle); - }); - if (handled) { - console.clear(); - // Dispatch custom event so other runtimes (e.g React Refresh) are aware. - if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') window.dispatchEvent(new CustomEvent('parcelhmraccept')); - await hmrApplyUpdates(assets); - hmrDisposeQueue(); - // Run accept callbacks. This will also re-execute other disposed assets in topological order. - let processedAssets = {}; - for(let i = 0; i < assetsToAccept.length; i++){ - let id = assetsToAccept[i][1]; - if (!processedAssets[id]) { - hmrAccept(assetsToAccept[i][0], id); - processedAssets[id] = true; - } - } - } else fullReload(); - } - if (data.type === 'error') { - // Log parcel errors to console - for (let ansiDiagnostic of data.diagnostics.ansi){ - let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack; - console.error("\uD83D\uDEA8 [parcel]: " + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n')); - } - if (typeof document !== 'undefined') { - // Render the fancy html overlay - removeErrorOverlay(); - var overlay = createErrorOverlay(data.diagnostics.html); - // $FlowFixMe - document.body.appendChild(overlay); - } - } - }; - if (ws instanceof WebSocket) { - ws.onerror = function(e) { - if (e.message) console.error(e.message); - }; - ws.onclose = function() { - console.warn("[parcel] \uD83D\uDEA8 Connection to the HMR server was lost"); - }; - } -} -function removeErrorOverlay() { - var overlay = document.getElementById(OVERLAY_ID); - if (overlay) { - overlay.remove(); - console.log("[parcel] \u2728 Error resolved"); - } -} -function createErrorOverlay(diagnostics) { - var overlay = document.createElement('div'); - overlay.id = OVERLAY_ID; - let errorHTML = '
'; - for (let diagnostic of diagnostics){ - let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame)=>{ - return `${p} -${frame.location} -${frame.code}`; - }, '') : diagnostic.stack; - errorHTML += ` -
-
- \u{1F6A8} ${diagnostic.message} -
-
${stack}
-
- ${diagnostic.hints.map((hint)=>"
\uD83D\uDCA1 " + hint + '
').join('')} -
- ${diagnostic.documentation ? `
\u{1F4DD} Learn more
` : ''} -
- `; - } - errorHTML += '
'; - overlay.innerHTML = errorHTML; - return overlay; -} -function fullReload() { - if ('reload' in location) location.reload(); - else if (extCtx && extCtx.runtime && extCtx.runtime.reload) extCtx.runtime.reload(); -} -function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ { - var modules = bundle.modules; - if (!modules) return []; - var parents = []; - var k, d, dep; - for(k in modules)for(d in modules[k][1]){ - dep = modules[k][1][d]; - if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) parents.push([ - bundle, - k - ]); - } - if (bundle.parent) parents = parents.concat(getParents(bundle.parent, id)); - return parents; -} -function updateLink(link) { - var href = link.getAttribute('href'); - if (!href) return; - var newLink = link.cloneNode(); - newLink.onload = function() { - if (link.parentNode !== null) // $FlowFixMe - link.parentNode.removeChild(link); - }; - newLink.setAttribute('href', // $FlowFixMe - href.split('?')[0] + '?' + Date.now()); - // $FlowFixMe - link.parentNode.insertBefore(newLink, link.nextSibling); -} -var cssTimeout = null; -function reloadCSS() { - if (cssTimeout) return; - cssTimeout = setTimeout(function() { - var links = document.querySelectorAll('link[rel="stylesheet"]'); - for(var i = 0; i < links.length; i++){ - // $FlowFixMe[incompatible-type] - var href /*: string */ = links[i].getAttribute('href'); - var hostname = getHostname(); - var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort()); - var absolute = /^https?:\/\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer; - if (!absolute) updateLink(links[i]); - } - cssTimeout = null; - }, 50); -} -function hmrDownload(asset) { - if (asset.type === 'js') { - if (typeof document !== 'undefined') { - let script = document.createElement('script'); - script.src = asset.url + '?t=' + Date.now(); - if (asset.outputFormat === 'esmodule') script.type = 'module'; - return new Promise((resolve, reject)=>{ - var _document$head; - script.onload = ()=>resolve(script); - script.onerror = reject; - (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script); - }); - } else if (typeof importScripts === 'function') { - // Worker scripts - if (asset.outputFormat === 'esmodule') return import(asset.url + '?t=' + Date.now()); - else return new Promise((resolve, reject)=>{ - try { - importScripts(asset.url + '?t=' + Date.now()); - resolve(); - } catch (err) { - reject(err); - } - }); - } - } -} -async function hmrApplyUpdates(assets) { - global.parcelHotUpdate = Object.create(null); - let scriptsToRemove; - try { - // If sourceURL comments aren't supported in eval, we need to load - // the update from the dev server over HTTP so that stack traces - // are correct in errors/logs. This is much slower than eval, so - // we only do it if needed (currently just Safari). - // https://bugs.webkit.org/show_bug.cgi?id=137297 - // This path is also taken if a CSP disallows eval. - if (!supportsSourceURL) { - let promises = assets.map((asset)=>{ - var _hmrDownload; - return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch((err)=>{ - // Web extension fix - if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) { - extCtx.runtime.reload(); - return; - } - throw err; - }); - }); - scriptsToRemove = await Promise.all(promises); - } - assets.forEach(function(asset) { - hmrApply(module.bundle.root, asset); - }); - } finally{ - delete global.parcelHotUpdate; - if (scriptsToRemove) scriptsToRemove.forEach((script)=>{ - if (script) { - var _document$head2; - (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script); - } - }); - } -} -function hmrApply(bundle /*: ParcelRequire */ , asset /*: HMRAsset */ ) { - var modules = bundle.modules; - if (!modules) return; - if (asset.type === 'css') reloadCSS(); - else if (asset.type === 'js') { - let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; - if (deps) { - if (modules[asset.id]) { - // Remove dependencies that are removed and will become orphaned. - // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. - let oldDeps = modules[asset.id][1]; - for(let dep in oldDeps)if (!deps[dep] || deps[dep] !== oldDeps[dep]) { - let id = oldDeps[dep]; - let parents = getParents(module.bundle.root, id); - if (parents.length === 1) hmrDelete(module.bundle.root, id); - } - } - if (supportsSourceURL) // Global eval. We would use `new Function` here but browser - // support for source maps is better with eval. - (0, eval)(asset.output); - // $FlowFixMe - let fn = global.parcelHotUpdate[asset.id]; - modules[asset.id] = [ - fn, - deps - ]; - } - // Always traverse to the parent bundle, even if we already replaced the asset in this bundle. - // This is required in case modules are duplicated. We need to ensure all instances have the updated code. - if (bundle.parent) hmrApply(bundle.parent, asset); - } -} -function hmrDelete(bundle, id) { - let modules = bundle.modules; - if (!modules) return; - if (modules[id]) { - // Collect dependencies that will become orphaned when this module is deleted. - let deps = modules[id][1]; - let orphans = []; - for(let dep in deps){ - let parents = getParents(module.bundle.root, deps[dep]); - if (parents.length === 1) orphans.push(deps[dep]); - } - // Delete the module. This must be done before deleting dependencies in case of circular dependencies. - delete modules[id]; - delete bundle.cache[id]; - // Now delete the orphans. - orphans.forEach((id)=>{ - hmrDelete(module.bundle.root, id); - }); - } else if (bundle.parent) hmrDelete(bundle.parent, id); -} -function hmrAcceptCheck(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - if (hmrAcceptCheckOne(bundle, id, depsByBundle)) return true; - // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. - let parents = getParents(module.bundle.root, id); - let accepted = false; - while(parents.length > 0){ - let v = parents.shift(); - let a = hmrAcceptCheckOne(v[0], v[1], null); - if (a) // If this parent accepts, stop traversing upward, but still consider siblings. - accepted = true; - else { - // Otherwise, queue the parents in the next level upward. - let p = getParents(module.bundle.root, v[1]); - if (p.length === 0) { - // If there are no parents, then we've reached an entry without accepting. Reload. - accepted = false; - break; - } - parents.push(...p); - } - } - return accepted; -} -function hmrAcceptCheckOne(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - var modules = bundle.modules; - if (!modules) return; - if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { - // If we reached the root bundle without finding where the asset should go, - // there's nothing to do. Mark as "accepted" so we don't reload the page. - if (!bundle.parent) return true; - return hmrAcceptCheck(bundle.parent, id, depsByBundle); - } - if (checkedAssets[id]) return true; - checkedAssets[id] = true; - var cached = bundle.cache[id]; - assetsToDispose.push([ - bundle, - id - ]); - if (!cached || cached.hot && cached.hot._acceptCallbacks.length) { - assetsToAccept.push([ - bundle, - id - ]); - return true; - } -} -function hmrDisposeQueue() { - // Dispose all old assets. - for(let i = 0; i < assetsToDispose.length; i++){ - let id = assetsToDispose[i][1]; - if (!disposedAssets[id]) { - hmrDispose(assetsToDispose[i][0], id); - disposedAssets[id] = true; - } - } - assetsToDispose = []; -} -function hmrDispose(bundle /*: ParcelRequire */ , id /*: string */ ) { - var cached = bundle.cache[id]; - bundle.hotData[id] = {}; - if (cached && cached.hot) cached.hot.data = bundle.hotData[id]; - if (cached && cached.hot && cached.hot._disposeCallbacks.length) cached.hot._disposeCallbacks.forEach(function(cb) { - cb(bundle.hotData[id]); - }); - delete bundle.cache[id]; -} -function hmrAccept(bundle /*: ParcelRequire */ , id /*: string */ ) { - // Execute the module. - bundle(id); - // Run the accept callbacks in the new version of the module. - var cached = bundle.cache[id]; - if (cached && cached.hot && cached.hot._acceptCallbacks.length) { - let assetsToAlsoAccept = []; - cached.hot._acceptCallbacks.forEach(function(cb) { - let additionalAssets = cb(function() { - return getParents(module.bundle.root, id); - }); - if (Array.isArray(additionalAssets) && additionalAssets.length) assetsToAlsoAccept.push(...additionalAssets); - }); - if (assetsToAlsoAccept.length) { - let handled = assetsToAlsoAccept.every(function(a) { - return hmrAcceptCheck(a[0], a[1]); - }); - if (!handled) return fullReload(); - hmrDisposeQueue(); - } - } -} +})({"eBxNa":[function(require,module,exports,__globalThis) { +require("f4e3916d5ea9aa97")(require("c38567b56f7e0944").getBundleURL('gcK2a') + "index.c0fd3053.js"); -},{}],"3UXKE":[function(require,module,exports,__globalThis) { -require("24fcd25505014b08")(require("6fd669fa965b6506").getBundleURL('gcK2a') + "index.497c99a1.js"); - -},{"24fcd25505014b08":"61B45","6fd669fa965b6506":"lgJ39"}],"61B45":[function(require,module,exports,__globalThis) { +},{"f4e3916d5ea9aa97":"61B45","c38567b56f7e0944":"lgJ39"}],"61B45":[function(require,module,exports,__globalThis) { "use strict"; var cacheLoader = require("ca2a84f7fa4a3bb0"); module.exports = cacheLoader(function(bundle) { @@ -1114,7 +661,8 @@ let running = false, puck = 400, pauseTimeout = null; function play() { if (running) return; running = true; - (0, _sounds.getAudioContext)()?.resume().then(); + startRecordingGame(); + (0, _sounds.getAudioContext)()?.resume(); resumeRecording(); document.body.className = running ? " running " : " paused "; } @@ -1125,7 +673,7 @@ function pause(playerAskedForPause) { running = false; needsRender = true; setTimeout(()=>{ - if (!running) (0, _sounds.getAudioContext)()?.suspend().then(); + if (!running) (0, _sounds.getAudioContext)()?.suspend(); }, 1000); pauseRecording(); pauseTimeout = null; @@ -1360,8 +908,9 @@ async function openUpgradesPicker() { resetBalls(); } function setLevel(l) { + stopRecording(); pause(false); - if (l > 0) openUpgradesPicker().then(); + if (l > 0) openUpgradesPicker(); currentLevel = l; levelTime = 0; level_skip_last_uses = 0; @@ -1386,8 +935,6 @@ function setLevel(l) { // This caused problems with accented characters like the Γ΄ of cΓ΄te d'ivoire for odd reasons // background.src = 'data:image/svg+xml;base64,' + btoa(lvl.svg) background.src = "data:image/svg+xml;UTF8," + lvl.svg; - stopRecording(); - startRecordingGame(); } function currentLevelInfo() { return runLevels[currentLevel % runLevels.length]; @@ -1478,7 +1025,7 @@ gameCanvas.addEventListener("mouseup", (e)=>{ if (running) pause(true); else { play(); - if (isSettingOn("pointerLock")) gameCanvas.requestPointerLock().then(); + if (isSettingOn("pointerLock")) gameCanvas.requestPointerLock(); } }); gameCanvas.addEventListener("mousemove", (e)=>{ @@ -2686,7 +2233,7 @@ function toggleSetting(key) { } scoreDisplay.addEventListener("click", (e)=>{ e.preventDefault(); - openScorePanel().then(); + openScorePanel(); }); async function openScorePanel() { pause(true); @@ -2717,7 +2264,7 @@ async function openScorePanel() { } document.getElementById("menu")?.addEventListener("click", (e)=>{ e.preventDefault(); - openSettingsPanel().then(); + openSettingsPanel(); }); async function openSettingsPanel() { pause(true); @@ -3012,6 +2559,7 @@ function drawMainCanvasOnSmallCanvas() { } function startRecordingGame() { if (!isSettingOn("record")) return; + if (mediaRecorder) return; if (!recordCanvas) { // Smaller canvas with fewer details recordCanvas = document.createElement("canvas"); @@ -3088,11 +2636,11 @@ function findLast(arr, predicate) { function toggleFullScreen() { try { if (document.fullscreenElement !== null) { - if (document.exitFullscreen) document.exitFullscreen().then(); + if (document.exitFullscreen) document.exitFullscreen(); else if (document.webkitCancelFullScreen) document.webkitCancelFullScreen(); } else { const docel = document.documentElement; - if (docel.requestFullscreen) docel.requestFullscreen().then(); + if (docel.requestFullscreen) docel.requestFullscreen(); else if (docel.webkitRequestFullscreen) docel.webkitRequestFullscreen(); } } catch (e) { @@ -3124,8 +2672,8 @@ document.addEventListener("keyup", (e)=>{ else if (e.key === "ArrowUp" && focused?.previousElementSibling?.tagName === "BUTTON") focused?.previousElementSibling?.focus(); else if (e.key === "Escape" && closeModal) closeModal(); else if (e.key === "Escape" && running) pause(true); - else if (e.key.toLowerCase() === "m" && !alertsOpen) openSettingsPanel().then(); - else if (e.key.toLowerCase() === "s" && !alertsOpen) openScorePanel().then(); + else if (e.key.toLowerCase() === "m" && !alertsOpen) openSettingsPanel(); + else if (e.key.toLowerCase() === "s" && !alertsOpen) openScorePanel(); else return; e.preventDefault(); }); @@ -3157,9 +2705,7 @@ var _levelsJsonDefault = parcelHelpers.interopDefault(_levelsJson); var _versionJson = require("./version.json"); var _versionJsonDefault = parcelHelpers.interopDefault(_versionJson); var _rawUpgrades = require("./rawUpgrades"); -var _backgroundsJson = require("./backgrounds.json"); -var _backgroundsJsonDefault = parcelHelpers.interopDefault(_backgroundsJson); -const backgrounds = (0, _backgroundsJsonDefault.default); +var _getLevelBackground = require("./getLevelBackground"); const palette = (0, _paletteJsonDefault.default); const rawLevelsList = (0, _levelsJsonDefault.default); const appVersion = (0, _versionJsonDefault.default); @@ -3186,7 +2732,7 @@ function levelIconHTML(bricks, levelSize, levelName, color) { ctx.fillRect(Math.floor(pxSize * x), Math.floor(pxSize * y), Math.ceil(pxSize), Math.ceil(pxSize)); } } - // I don't think many blind people will benefit for this but it's nice to have something to put in "alt" + // I don't think many blind people will benefit for this, but it's nice to have something to put in "alt" return `${levelName}`; } const icons = {}; @@ -3194,13 +2740,11 @@ const allLevels = rawLevelsList.map((level)=>{ const bricks = level.bricks.split("").map((c)=>palette[c]).slice(0, level.size * level.size); const icon = levelIconHTML(bricks, level.size, level.name, level.color); icons[level.name] = icon; - let svg = level.svg !== null && backgrounds[level.svg]; - if (!level.color && !svg) svg = backgrounds[hashCode(level.name) % backgrounds.length]; return { ...level, bricks, icon, - svg + svg: (0, _getLevelBackground.getLevelBackground)(level) }; }).filter((l)=>!l.name.startsWith("icon:")).map((l, li)=>({ ...l, @@ -3211,17 +2755,8 @@ const upgrades = (0, _rawUpgrades.rawUpgrades).map((u)=>({ ...u, icon: icons["icon:" + u.id] })); -function hashCode(string) { - let hash = 0; - for(let i = 0; i < string.length; i++){ - let code = string.charCodeAt(i); - hash = (hash << 5) - hash + code; - hash = hash & hash; // Convert to 32bit integer - } - return Math.abs(hash); -} -},{"./palette.json":"jhnsJ","./levels.json":"kqnNl","./version.json":"h1X9A","./rawUpgrades":"cvg5m","./backgrounds.json":"el6Kx","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}],"h1X9A":[function(require,module,exports,__globalThis) { +},{"./palette.json":"jhnsJ","./levels.json":"kqnNl","./version.json":"h1X9A","./rawUpgrades":"cvg5m","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3","./getLevelBackground":"7OIPf"}],"h1X9A":[function(require,module,exports,__globalThis) { module.exports = JSON.parse("\"29030875\""); },{}],"cvg5m":[function(require,module,exports,__globalThis) { @@ -3837,7 +3372,7 @@ function createOscillator(context, frequency, type) { return oscillator; } -},{"./game":"edeGs","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}]},["hhTAC","3UXKE","3qndx"], "3qndx", "parcelRequire94c2") +},{"./game":"edeGs","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}]},["eBxNa","3qndx"], "3qndx", "parcelRequire94c2") diff --git a/dist/levels_editor.227fd609.js b/dist/levels_editor.227fd609.js index b588db1..b5dca89 100644 --- a/dist/levels_editor.227fd609.js +++ b/dist/levels_editor.227fd609.js @@ -142,463 +142,10 @@ this[globalName] = mainExports; } } -})({"cv6W2":[function(require,module,exports,__globalThis) { -var global = arguments[3]; -var HMR_HOST = null; -var HMR_PORT = null; -var HMR_SECURE = false; -var HMR_ENV_HASH = "d6ea1d42532a7575"; -var HMR_USE_SSE = false; -module.bundle.HMR_BUNDLE_ID = "d8554468227fd609"; -"use strict"; -/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */ /*:: -import type { - HMRAsset, - HMRMessage, -} from '@parcel/reporter-dev-server/src/HMRServer.js'; -interface ParcelRequire { - (string): mixed; - cache: {|[string]: ParcelModule|}; - hotData: {|[string]: mixed|}; - Module: any; - parent: ?ParcelRequire; - isParcelRequire: true; - modules: {|[string]: [Function, {|[string]: string|}]|}; - HMR_BUNDLE_ID: string; - root: ParcelRequire; -} -interface ParcelModule { - hot: {| - data: mixed, - accept(cb: (Function) => void): void, - dispose(cb: (mixed) => void): void, - // accept(deps: Array | string, cb: (Function) => void): void, - // decline(): void, - _acceptCallbacks: Array<(Function) => void>, - _disposeCallbacks: Array<(mixed) => void>, - |}; -} -interface ExtensionContext { - runtime: {| - reload(): void, - getURL(url: string): string; - getManifest(): {manifest_version: number, ...}; - |}; -} -declare var module: {bundle: ParcelRequire, ...}; -declare var HMR_HOST: string; -declare var HMR_PORT: string; -declare var HMR_ENV_HASH: string; -declare var HMR_SECURE: boolean; -declare var HMR_USE_SSE: boolean; -declare var chrome: ExtensionContext; -declare var browser: ExtensionContext; -declare var __parcel__import__: (string) => Promise; -declare var __parcel__importScripts__: (string) => Promise; -declare var globalThis: typeof self; -declare var ServiceWorkerGlobalScope: Object; -*/ var OVERLAY_ID = '__parcel__error__overlay__'; -var OldModule = module.bundle.Module; -function Module(moduleName) { - OldModule.call(this, moduleName); - this.hot = { - data: module.bundle.hotData[moduleName], - _acceptCallbacks: [], - _disposeCallbacks: [], - accept: function(fn) { - this._acceptCallbacks.push(fn || function() {}); - }, - dispose: function(fn) { - this._disposeCallbacks.push(fn); - } - }; - module.bundle.hotData[moduleName] = undefined; -} -module.bundle.Module = Module; -module.bundle.hotData = {}; -var checkedAssets /*: {|[string]: boolean|} */ , disposedAssets /*: {|[string]: boolean|} */ , assetsToDispose /*: Array<[ParcelRequire, string]> */ , assetsToAccept /*: Array<[ParcelRequire, string]> */ ; -function getHostname() { - return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost'); -} -function getPort() { - return HMR_PORT || location.port; -} -// eslint-disable-next-line no-redeclare -var parent = module.bundle.parent; -if ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') { - var hostname = getHostname(); - var port = getPort(); - var protocol = HMR_SECURE || location.protocol == 'https:' && ![ - 'localhost', - '127.0.0.1', - '0.0.0.0' - ].includes(hostname) ? 'wss' : 'ws'; - var ws; - if (HMR_USE_SSE) ws = new EventSource('/__parcel_hmr'); - else try { - ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/'); - } catch (err) { - if (err.message) console.error(err.message); - ws = {}; - } - // Web extension context - var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser; - // Safari doesn't support sourceURL in error stacks. - // eval may also be disabled via CSP, so do a quick check. - var supportsSourceURL = false; - try { - (0, eval)('throw new Error("test"); //# sourceURL=test.js'); - } catch (err) { - supportsSourceURL = err.stack.includes('test.js'); - } - // $FlowFixMe - ws.onmessage = async function(event /*: {data: string, ...} */ ) { - checkedAssets = {} /*: {|[string]: boolean|} */ ; - disposedAssets = {} /*: {|[string]: boolean|} */ ; - assetsToAccept = []; - assetsToDispose = []; - var data /*: HMRMessage */ = JSON.parse(event.data); - if (data.type === 'reload') fullReload(); - else if (data.type === 'update') { - // Remove error overlay if there is one - if (typeof document !== 'undefined') removeErrorOverlay(); - let assets = data.assets.filter((asset)=>asset.envHash === HMR_ENV_HASH); - // Handle HMR Update - let handled = assets.every((asset)=>{ - return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle); - }); - if (handled) { - console.clear(); - // Dispatch custom event so other runtimes (e.g React Refresh) are aware. - if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') window.dispatchEvent(new CustomEvent('parcelhmraccept')); - await hmrApplyUpdates(assets); - hmrDisposeQueue(); - // Run accept callbacks. This will also re-execute other disposed assets in topological order. - let processedAssets = {}; - for(let i = 0; i < assetsToAccept.length; i++){ - let id = assetsToAccept[i][1]; - if (!processedAssets[id]) { - hmrAccept(assetsToAccept[i][0], id); - processedAssets[id] = true; - } - } - } else fullReload(); - } - if (data.type === 'error') { - // Log parcel errors to console - for (let ansiDiagnostic of data.diagnostics.ansi){ - let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack; - console.error("\uD83D\uDEA8 [parcel]: " + ansiDiagnostic.message + '\n' + stack + '\n\n' + ansiDiagnostic.hints.join('\n')); - } - if (typeof document !== 'undefined') { - // Render the fancy html overlay - removeErrorOverlay(); - var overlay = createErrorOverlay(data.diagnostics.html); - // $FlowFixMe - document.body.appendChild(overlay); - } - } - }; - if (ws instanceof WebSocket) { - ws.onerror = function(e) { - if (e.message) console.error(e.message); - }; - ws.onclose = function() { - console.warn("[parcel] \uD83D\uDEA8 Connection to the HMR server was lost"); - }; - } -} -function removeErrorOverlay() { - var overlay = document.getElementById(OVERLAY_ID); - if (overlay) { - overlay.remove(); - console.log("[parcel] \u2728 Error resolved"); - } -} -function createErrorOverlay(diagnostics) { - var overlay = document.createElement('div'); - overlay.id = OVERLAY_ID; - let errorHTML = '
'; - for (let diagnostic of diagnostics){ - let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame)=>{ - return `${p} -${frame.location} -${frame.code}`; - }, '') : diagnostic.stack; - errorHTML += ` -
-
- \u{1F6A8} ${diagnostic.message} -
-
${stack}
-
- ${diagnostic.hints.map((hint)=>"
\uD83D\uDCA1 " + hint + '
').join('')} -
- ${diagnostic.documentation ? `
\u{1F4DD} Learn more
` : ''} -
- `; - } - errorHTML += '
'; - overlay.innerHTML = errorHTML; - return overlay; -} -function fullReload() { - if ('reload' in location) location.reload(); - else if (extCtx && extCtx.runtime && extCtx.runtime.reload) extCtx.runtime.reload(); -} -function getParents(bundle, id) /*: Array<[ParcelRequire, string]> */ { - var modules = bundle.modules; - if (!modules) return []; - var parents = []; - var k, d, dep; - for(k in modules)for(d in modules[k][1]){ - dep = modules[k][1][d]; - if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) parents.push([ - bundle, - k - ]); - } - if (bundle.parent) parents = parents.concat(getParents(bundle.parent, id)); - return parents; -} -function updateLink(link) { - var href = link.getAttribute('href'); - if (!href) return; - var newLink = link.cloneNode(); - newLink.onload = function() { - if (link.parentNode !== null) // $FlowFixMe - link.parentNode.removeChild(link); - }; - newLink.setAttribute('href', // $FlowFixMe - href.split('?')[0] + '?' + Date.now()); - // $FlowFixMe - link.parentNode.insertBefore(newLink, link.nextSibling); -} -var cssTimeout = null; -function reloadCSS() { - if (cssTimeout) return; - cssTimeout = setTimeout(function() { - var links = document.querySelectorAll('link[rel="stylesheet"]'); - for(var i = 0; i < links.length; i++){ - // $FlowFixMe[incompatible-type] - var href /*: string */ = links[i].getAttribute('href'); - var hostname = getHostname(); - var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\/\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort()); - var absolute = /^https?:\/\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer; - if (!absolute) updateLink(links[i]); - } - cssTimeout = null; - }, 50); -} -function hmrDownload(asset) { - if (asset.type === 'js') { - if (typeof document !== 'undefined') { - let script = document.createElement('script'); - script.src = asset.url + '?t=' + Date.now(); - if (asset.outputFormat === 'esmodule') script.type = 'module'; - return new Promise((resolve, reject)=>{ - var _document$head; - script.onload = ()=>resolve(script); - script.onerror = reject; - (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script); - }); - } else if (typeof importScripts === 'function') { - // Worker scripts - if (asset.outputFormat === 'esmodule') return import(asset.url + '?t=' + Date.now()); - else return new Promise((resolve, reject)=>{ - try { - importScripts(asset.url + '?t=' + Date.now()); - resolve(); - } catch (err) { - reject(err); - } - }); - } - } -} -async function hmrApplyUpdates(assets) { - global.parcelHotUpdate = Object.create(null); - let scriptsToRemove; - try { - // If sourceURL comments aren't supported in eval, we need to load - // the update from the dev server over HTTP so that stack traces - // are correct in errors/logs. This is much slower than eval, so - // we only do it if needed (currently just Safari). - // https://bugs.webkit.org/show_bug.cgi?id=137297 - // This path is also taken if a CSP disallows eval. - if (!supportsSourceURL) { - let promises = assets.map((asset)=>{ - var _hmrDownload; - return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch((err)=>{ - // Web extension fix - if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) { - extCtx.runtime.reload(); - return; - } - throw err; - }); - }); - scriptsToRemove = await Promise.all(promises); - } - assets.forEach(function(asset) { - hmrApply(module.bundle.root, asset); - }); - } finally{ - delete global.parcelHotUpdate; - if (scriptsToRemove) scriptsToRemove.forEach((script)=>{ - if (script) { - var _document$head2; - (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script); - } - }); - } -} -function hmrApply(bundle /*: ParcelRequire */ , asset /*: HMRAsset */ ) { - var modules = bundle.modules; - if (!modules) return; - if (asset.type === 'css') reloadCSS(); - else if (asset.type === 'js') { - let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID]; - if (deps) { - if (modules[asset.id]) { - // Remove dependencies that are removed and will become orphaned. - // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload. - let oldDeps = modules[asset.id][1]; - for(let dep in oldDeps)if (!deps[dep] || deps[dep] !== oldDeps[dep]) { - let id = oldDeps[dep]; - let parents = getParents(module.bundle.root, id); - if (parents.length === 1) hmrDelete(module.bundle.root, id); - } - } - if (supportsSourceURL) // Global eval. We would use `new Function` here but browser - // support for source maps is better with eval. - (0, eval)(asset.output); - // $FlowFixMe - let fn = global.parcelHotUpdate[asset.id]; - modules[asset.id] = [ - fn, - deps - ]; - } - // Always traverse to the parent bundle, even if we already replaced the asset in this bundle. - // This is required in case modules are duplicated. We need to ensure all instances have the updated code. - if (bundle.parent) hmrApply(bundle.parent, asset); - } -} -function hmrDelete(bundle, id) { - let modules = bundle.modules; - if (!modules) return; - if (modules[id]) { - // Collect dependencies that will become orphaned when this module is deleted. - let deps = modules[id][1]; - let orphans = []; - for(let dep in deps){ - let parents = getParents(module.bundle.root, deps[dep]); - if (parents.length === 1) orphans.push(deps[dep]); - } - // Delete the module. This must be done before deleting dependencies in case of circular dependencies. - delete modules[id]; - delete bundle.cache[id]; - // Now delete the orphans. - orphans.forEach((id)=>{ - hmrDelete(module.bundle.root, id); - }); - } else if (bundle.parent) hmrDelete(bundle.parent, id); -} -function hmrAcceptCheck(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - if (hmrAcceptCheckOne(bundle, id, depsByBundle)) return true; - // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload. - let parents = getParents(module.bundle.root, id); - let accepted = false; - while(parents.length > 0){ - let v = parents.shift(); - let a = hmrAcceptCheckOne(v[0], v[1], null); - if (a) // If this parent accepts, stop traversing upward, but still consider siblings. - accepted = true; - else { - // Otherwise, queue the parents in the next level upward. - let p = getParents(module.bundle.root, v[1]); - if (p.length === 0) { - // If there are no parents, then we've reached an entry without accepting. Reload. - accepted = false; - break; - } - parents.push(...p); - } - } - return accepted; -} -function hmrAcceptCheckOne(bundle /*: ParcelRequire */ , id /*: string */ , depsByBundle /*: ?{ [string]: { [string]: string } }*/ ) { - var modules = bundle.modules; - if (!modules) return; - if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) { - // If we reached the root bundle without finding where the asset should go, - // there's nothing to do. Mark as "accepted" so we don't reload the page. - if (!bundle.parent) return true; - return hmrAcceptCheck(bundle.parent, id, depsByBundle); - } - if (checkedAssets[id]) return true; - checkedAssets[id] = true; - var cached = bundle.cache[id]; - assetsToDispose.push([ - bundle, - id - ]); - if (!cached || cached.hot && cached.hot._acceptCallbacks.length) { - assetsToAccept.push([ - bundle, - id - ]); - return true; - } -} -function hmrDisposeQueue() { - // Dispose all old assets. - for(let i = 0; i < assetsToDispose.length; i++){ - let id = assetsToDispose[i][1]; - if (!disposedAssets[id]) { - hmrDispose(assetsToDispose[i][0], id); - disposedAssets[id] = true; - } - } - assetsToDispose = []; -} -function hmrDispose(bundle /*: ParcelRequire */ , id /*: string */ ) { - var cached = bundle.cache[id]; - bundle.hotData[id] = {}; - if (cached && cached.hot) cached.hot.data = bundle.hotData[id]; - if (cached && cached.hot && cached.hot._disposeCallbacks.length) cached.hot._disposeCallbacks.forEach(function(cb) { - cb(bundle.hotData[id]); - }); - delete bundle.cache[id]; -} -function hmrAccept(bundle /*: ParcelRequire */ , id /*: string */ ) { - // Execute the module. - bundle(id); - // Run the accept callbacks in the new version of the module. - var cached = bundle.cache[id]; - if (cached && cached.hot && cached.hot._acceptCallbacks.length) { - let assetsToAlsoAccept = []; - cached.hot._acceptCallbacks.forEach(function(cb) { - let additionalAssets = cb(function() { - return getParents(module.bundle.root, id); - }); - if (Array.isArray(additionalAssets) && additionalAssets.length) assetsToAlsoAccept.push(...additionalAssets); - }); - if (assetsToAlsoAccept.length) { - let handled = assetsToAlsoAccept.every(function(a) { - return hmrAcceptCheck(a[0], a[1]); - }); - if (!handled) return fullReload(); - hmrDisposeQueue(); - } - } -} +})({"7tSz9":[function(require,module,exports,__globalThis) { +require("27eb2bc3af6e974d")(require("b23fa2c1e78907d1").getBundleURL('izxdV') + "index.c0fd3053.js"); -},{}],"5iVMc":[function(require,module,exports,__globalThis) { -require("b393ab0c6dc0c92d")(require("6acefb54a655961").getBundleURL('izxdV') + "index.497c99a1.js"); - -},{"b393ab0c6dc0c92d":"61B45","6acefb54a655961":"lgJ39"}],"61B45":[function(require,module,exports,__globalThis) { +},{"27eb2bc3af6e974d":"61B45","b23fa2c1e78907d1":"lgJ39"}],"61B45":[function(require,module,exports,__globalThis) { "use strict"; var cacheLoader = require("ca2a84f7fa4a3bb0"); module.exports = cacheLoader(function(bundle) { @@ -703,6 +250,7 @@ var _paletteJson = require("./palette.json"); var _paletteJsonDefault = parcelHelpers.interopDefault(_paletteJson); var _levelsJson = require("./levels.json"); var _levelsJsonDefault = parcelHelpers.interopDefault(_levelsJson); +var _getLevelBackground = require("./getLevelBackground"); const backgrounds = (0, _backgroundsJsonDefault.default); const palette = (0, _paletteJsonDefault.default); let allLevels = (0, _levelsJsonDefault.default); @@ -736,7 +284,7 @@ function addLevelEditorToList(level, levelIndex) { const { name, bricks, size, svg, color } = level; let div = document.createElement('div'); div.innerHTML = ` - +
@@ -745,10 +293,9 @@ function addLevelEditorToList(level, levelIndex) { - - - - + + +
@@ -769,9 +316,7 @@ function updateLevelBackground(levelIndex) { backgroundColor: color }); else { - const index = svg || hashCode(level.name) % backgrounds.length; - const svgSource = backgrounds[index]; - console.log(index); + const svgSource = (0, _getLevelBackground.getLevelBackground)(level); div.setAttribute('data-svg', svgSource); Object.assign(div.style, { backgroundImage: `url("data:image/svg+xml;UTF8,${encodeURIComponent(svgSource)}")`, @@ -796,16 +341,20 @@ function renderLevelBricks(levelIndex) { levelsListEl.addEventListener('change', (e)=>{ const target = e.target; const levelIndexStr = target.getAttribute('data-level'); - if (levelIndexStr) { - const levelIndex = parseInt(levelIndexStr); - const level = allLevels[levelIndex]; - if (target.getAttribute('type') === 'color') { - level.color = target.value; - level.svg = null; - updateLevelBackground(levelIndex); - } - save(); + if (!levelIndexStr) return; + const levelIndex = parseInt(levelIndexStr); + const level = allLevels[levelIndex]; + if (target.getAttribute('data-text-val') == 'name') level.name = target.value; + if (target.getAttribute('data-text-val') == 'color') { + level.color = target.value; + level.svg = null; } + if (target.getAttribute('data-num-val') == 'svg') { + level.color = ''; + level.svg = parseFloat(target.value); + } + updateLevelBackground(levelIndex); + save(); }); levelsListEl.addEventListener('click', (e)=>{ const target = e.target; @@ -912,16 +461,7 @@ function save() { body: JSON.stringify(allLevels, null, 2) }); } -function hashCode(string) { - let hash = 0; - for(let i = 0; i < string.length; i++){ - let code = string.charCodeAt(i); - hash = (hash << 5) - hash + code; - hash = hash & hash; // Convert to 32bit integer - } - return Math.abs(hash); -} -},{"./backgrounds.json":"el6Kx","./palette.json":"jhnsJ","./levels.json":"kqnNl","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3"}]},["cv6W2","5iVMc","434tO"], "434tO", "parcelRequire94c2") +},{"./backgrounds.json":"el6Kx","./palette.json":"jhnsJ","./levels.json":"kqnNl","@parcel/transformer-js/src/esmodule-helpers.js":"gkKU3","./getLevelBackground":"7OIPf"}]},["7tSz9","434tO"], "434tO", "parcelRequire94c2") //# sourceMappingURL=levels_editor.227fd609.js.map diff --git a/dist/levels_editor.227fd609.js.map b/dist/levels_editor.227fd609.js.map index d55241a..ef8bb10 100644 --- a/dist/levels_editor.227fd609.js.map +++ b/dist/levels_editor.227fd609.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["node_modules/@parcel/runtime-browser-hmr/lib/runtime-5cddba783f08b27d.js","node_modules/@parcel/runtime-js/lib/runtime-163213cf0249a61e.js","node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js","node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js","node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js","src/levels_editor.ts"],"sourcesContent":["var HMR_HOST = null;var HMR_PORT = null;var HMR_SECURE = false;var HMR_ENV_HASH = \"d6ea1d42532a7575\";var HMR_USE_SSE = false;module.bundle.HMR_BUNDLE_ID = \"d8554468227fd609\";\"use strict\";\n\n/* global HMR_HOST, HMR_PORT, HMR_ENV_HASH, HMR_SECURE, HMR_USE_SSE, chrome, browser, __parcel__import__, __parcel__importScripts__, ServiceWorkerGlobalScope */\n/*::\nimport type {\n HMRAsset,\n HMRMessage,\n} from '@parcel/reporter-dev-server/src/HMRServer.js';\ninterface ParcelRequire {\n (string): mixed;\n cache: {|[string]: ParcelModule|};\n hotData: {|[string]: mixed|};\n Module: any;\n parent: ?ParcelRequire;\n isParcelRequire: true;\n modules: {|[string]: [Function, {|[string]: string|}]|};\n HMR_BUNDLE_ID: string;\n root: ParcelRequire;\n}\ninterface ParcelModule {\n hot: {|\n data: mixed,\n accept(cb: (Function) => void): void,\n dispose(cb: (mixed) => void): void,\n // accept(deps: Array | string, cb: (Function) => void): void,\n // decline(): void,\n _acceptCallbacks: Array<(Function) => void>,\n _disposeCallbacks: Array<(mixed) => void>,\n |};\n}\ninterface ExtensionContext {\n runtime: {|\n reload(): void,\n getURL(url: string): string;\n getManifest(): {manifest_version: number, ...};\n |};\n}\ndeclare var module: {bundle: ParcelRequire, ...};\ndeclare var HMR_HOST: string;\ndeclare var HMR_PORT: string;\ndeclare var HMR_ENV_HASH: string;\ndeclare var HMR_SECURE: boolean;\ndeclare var HMR_USE_SSE: boolean;\ndeclare var chrome: ExtensionContext;\ndeclare var browser: ExtensionContext;\ndeclare var __parcel__import__: (string) => Promise;\ndeclare var __parcel__importScripts__: (string) => Promise;\ndeclare var globalThis: typeof self;\ndeclare var ServiceWorkerGlobalScope: Object;\n*/\nvar OVERLAY_ID = '__parcel__error__overlay__';\nvar OldModule = module.bundle.Module;\nfunction Module(moduleName) {\n OldModule.call(this, moduleName);\n this.hot = {\n data: module.bundle.hotData[moduleName],\n _acceptCallbacks: [],\n _disposeCallbacks: [],\n accept: function (fn) {\n this._acceptCallbacks.push(fn || function () {});\n },\n dispose: function (fn) {\n this._disposeCallbacks.push(fn);\n }\n };\n module.bundle.hotData[moduleName] = undefined;\n}\nmodule.bundle.Module = Module;\nmodule.bundle.hotData = {};\nvar checkedAssets /*: {|[string]: boolean|} */, disposedAssets /*: {|[string]: boolean|} */, assetsToDispose /*: Array<[ParcelRequire, string]> */, assetsToAccept /*: Array<[ParcelRequire, string]> */;\nfunction getHostname() {\n return HMR_HOST || (location.protocol.indexOf('http') === 0 ? location.hostname : 'localhost');\n}\nfunction getPort() {\n return HMR_PORT || location.port;\n}\n\n// eslint-disable-next-line no-redeclare\nvar parent = module.bundle.parent;\nif ((!parent || !parent.isParcelRequire) && typeof WebSocket !== 'undefined') {\n var hostname = getHostname();\n var port = getPort();\n var protocol = HMR_SECURE || location.protocol == 'https:' && !['localhost', '127.0.0.1', '0.0.0.0'].includes(hostname) ? 'wss' : 'ws';\n var ws;\n if (HMR_USE_SSE) {\n ws = new EventSource('/__parcel_hmr');\n } else {\n try {\n ws = new WebSocket(protocol + '://' + hostname + (port ? ':' + port : '') + '/');\n } catch (err) {\n if (err.message) {\n console.error(err.message);\n }\n ws = {};\n }\n }\n\n // Web extension context\n var extCtx = typeof browser === 'undefined' ? typeof chrome === 'undefined' ? null : chrome : browser;\n\n // Safari doesn't support sourceURL in error stacks.\n // eval may also be disabled via CSP, so do a quick check.\n var supportsSourceURL = false;\n try {\n (0, eval)('throw new Error(\"test\"); //# sourceURL=test.js');\n } catch (err) {\n supportsSourceURL = err.stack.includes('test.js');\n }\n\n // $FlowFixMe\n ws.onmessage = async function (event /*: {data: string, ...} */) {\n checkedAssets = {} /*: {|[string]: boolean|} */;\n disposedAssets = {} /*: {|[string]: boolean|} */;\n assetsToAccept = [];\n assetsToDispose = [];\n var data /*: HMRMessage */ = JSON.parse(event.data);\n if (data.type === 'reload') {\n fullReload();\n } else if (data.type === 'update') {\n // Remove error overlay if there is one\n if (typeof document !== 'undefined') {\n removeErrorOverlay();\n }\n let assets = data.assets.filter(asset => asset.envHash === HMR_ENV_HASH);\n\n // Handle HMR Update\n let handled = assets.every(asset => {\n return asset.type === 'css' || asset.type === 'js' && hmrAcceptCheck(module.bundle.root, asset.id, asset.depsByBundle);\n });\n if (handled) {\n console.clear();\n\n // Dispatch custom event so other runtimes (e.g React Refresh) are aware.\n if (typeof window !== 'undefined' && typeof CustomEvent !== 'undefined') {\n window.dispatchEvent(new CustomEvent('parcelhmraccept'));\n }\n await hmrApplyUpdates(assets);\n hmrDisposeQueue();\n\n // Run accept callbacks. This will also re-execute other disposed assets in topological order.\n let processedAssets = {};\n for (let i = 0; i < assetsToAccept.length; i++) {\n let id = assetsToAccept[i][1];\n if (!processedAssets[id]) {\n hmrAccept(assetsToAccept[i][0], id);\n processedAssets[id] = true;\n }\n }\n } else fullReload();\n }\n if (data.type === 'error') {\n // Log parcel errors to console\n for (let ansiDiagnostic of data.diagnostics.ansi) {\n let stack = ansiDiagnostic.codeframe ? ansiDiagnostic.codeframe : ansiDiagnostic.stack;\n console.error('🚨 [parcel]: ' + ansiDiagnostic.message + '\\n' + stack + '\\n\\n' + ansiDiagnostic.hints.join('\\n'));\n }\n if (typeof document !== 'undefined') {\n // Render the fancy html overlay\n removeErrorOverlay();\n var overlay = createErrorOverlay(data.diagnostics.html);\n // $FlowFixMe\n document.body.appendChild(overlay);\n }\n }\n };\n if (ws instanceof WebSocket) {\n ws.onerror = function (e) {\n if (e.message) {\n console.error(e.message);\n }\n };\n ws.onclose = function () {\n console.warn('[parcel] 🚨 Connection to the HMR server was lost');\n };\n }\n}\nfunction removeErrorOverlay() {\n var overlay = document.getElementById(OVERLAY_ID);\n if (overlay) {\n overlay.remove();\n console.log('[parcel] ✨ Error resolved');\n }\n}\nfunction createErrorOverlay(diagnostics) {\n var overlay = document.createElement('div');\n overlay.id = OVERLAY_ID;\n let errorHTML = '
';\n for (let diagnostic of diagnostics) {\n let stack = diagnostic.frames.length ? diagnostic.frames.reduce((p, frame) => {\n return `${p}\n${frame.location}\n${frame.code}`;\n }, '') : diagnostic.stack;\n errorHTML += `\n
\n
\n 🚨 ${diagnostic.message}\n
\n
${stack}
\n
\n ${diagnostic.hints.map(hint => '
πŸ’‘ ' + hint + '
').join('')}\n
\n ${diagnostic.documentation ? `
πŸ“ Learn more
` : ''}\n
\n `;\n }\n errorHTML += '
';\n overlay.innerHTML = errorHTML;\n return overlay;\n}\nfunction fullReload() {\n if ('reload' in location) {\n location.reload();\n } else if (extCtx && extCtx.runtime && extCtx.runtime.reload) {\n extCtx.runtime.reload();\n }\n}\nfunction getParents(bundle, id) /*: Array<[ParcelRequire, string]> */{\n var modules = bundle.modules;\n if (!modules) {\n return [];\n }\n var parents = [];\n var k, d, dep;\n for (k in modules) {\n for (d in modules[k][1]) {\n dep = modules[k][1][d];\n if (dep === id || Array.isArray(dep) && dep[dep.length - 1] === id) {\n parents.push([bundle, k]);\n }\n }\n }\n if (bundle.parent) {\n parents = parents.concat(getParents(bundle.parent, id));\n }\n return parents;\n}\nfunction updateLink(link) {\n var href = link.getAttribute('href');\n if (!href) {\n return;\n }\n var newLink = link.cloneNode();\n newLink.onload = function () {\n if (link.parentNode !== null) {\n // $FlowFixMe\n link.parentNode.removeChild(link);\n }\n };\n newLink.setAttribute('href',\n // $FlowFixMe\n href.split('?')[0] + '?' + Date.now());\n // $FlowFixMe\n link.parentNode.insertBefore(newLink, link.nextSibling);\n}\nvar cssTimeout = null;\nfunction reloadCSS() {\n if (cssTimeout) {\n return;\n }\n cssTimeout = setTimeout(function () {\n var links = document.querySelectorAll('link[rel=\"stylesheet\"]');\n for (var i = 0; i < links.length; i++) {\n // $FlowFixMe[incompatible-type]\n var href /*: string */ = links[i].getAttribute('href');\n var hostname = getHostname();\n var servedFromHMRServer = hostname === 'localhost' ? new RegExp('^(https?:\\\\/\\\\/(0.0.0.0|127.0.0.1)|localhost):' + getPort()).test(href) : href.indexOf(hostname + ':' + getPort());\n var absolute = /^https?:\\/\\//i.test(href) && href.indexOf(location.origin) !== 0 && !servedFromHMRServer;\n if (!absolute) {\n updateLink(links[i]);\n }\n }\n cssTimeout = null;\n }, 50);\n}\nfunction hmrDownload(asset) {\n if (asset.type === 'js') {\n if (typeof document !== 'undefined') {\n let script = document.createElement('script');\n script.src = asset.url + '?t=' + Date.now();\n if (asset.outputFormat === 'esmodule') {\n script.type = 'module';\n }\n return new Promise((resolve, reject) => {\n var _document$head;\n script.onload = () => resolve(script);\n script.onerror = reject;\n (_document$head = document.head) === null || _document$head === void 0 || _document$head.appendChild(script);\n });\n } else if (typeof importScripts === 'function') {\n // Worker scripts\n if (asset.outputFormat === 'esmodule') {\n return __parcel__import__(asset.url + '?t=' + Date.now());\n } else {\n return new Promise((resolve, reject) => {\n try {\n __parcel__importScripts__(asset.url + '?t=' + Date.now());\n resolve();\n } catch (err) {\n reject(err);\n }\n });\n }\n }\n }\n}\nasync function hmrApplyUpdates(assets) {\n global.parcelHotUpdate = Object.create(null);\n let scriptsToRemove;\n try {\n // If sourceURL comments aren't supported in eval, we need to load\n // the update from the dev server over HTTP so that stack traces\n // are correct in errors/logs. This is much slower than eval, so\n // we only do it if needed (currently just Safari).\n // https://bugs.webkit.org/show_bug.cgi?id=137297\n // This path is also taken if a CSP disallows eval.\n if (!supportsSourceURL) {\n let promises = assets.map(asset => {\n var _hmrDownload;\n return (_hmrDownload = hmrDownload(asset)) === null || _hmrDownload === void 0 ? void 0 : _hmrDownload.catch(err => {\n // Web extension fix\n if (extCtx && extCtx.runtime && extCtx.runtime.getManifest().manifest_version == 3 && typeof ServiceWorkerGlobalScope != 'undefined' && global instanceof ServiceWorkerGlobalScope) {\n extCtx.runtime.reload();\n return;\n }\n throw err;\n });\n });\n scriptsToRemove = await Promise.all(promises);\n }\n assets.forEach(function (asset) {\n hmrApply(module.bundle.root, asset);\n });\n } finally {\n delete global.parcelHotUpdate;\n if (scriptsToRemove) {\n scriptsToRemove.forEach(script => {\n if (script) {\n var _document$head2;\n (_document$head2 = document.head) === null || _document$head2 === void 0 || _document$head2.removeChild(script);\n }\n });\n }\n }\n}\nfunction hmrApply(bundle /*: ParcelRequire */, asset /*: HMRAsset */) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (asset.type === 'css') {\n reloadCSS();\n } else if (asset.type === 'js') {\n let deps = asset.depsByBundle[bundle.HMR_BUNDLE_ID];\n if (deps) {\n if (modules[asset.id]) {\n // Remove dependencies that are removed and will become orphaned.\n // This is necessary so that if the asset is added back again, the cache is gone, and we prevent a full page reload.\n let oldDeps = modules[asset.id][1];\n for (let dep in oldDeps) {\n if (!deps[dep] || deps[dep] !== oldDeps[dep]) {\n let id = oldDeps[dep];\n let parents = getParents(module.bundle.root, id);\n if (parents.length === 1) {\n hmrDelete(module.bundle.root, id);\n }\n }\n }\n }\n if (supportsSourceURL) {\n // Global eval. We would use `new Function` here but browser\n // support for source maps is better with eval.\n (0, eval)(asset.output);\n }\n\n // $FlowFixMe\n let fn = global.parcelHotUpdate[asset.id];\n modules[asset.id] = [fn, deps];\n }\n\n // Always traverse to the parent bundle, even if we already replaced the asset in this bundle.\n // This is required in case modules are duplicated. We need to ensure all instances have the updated code.\n if (bundle.parent) {\n hmrApply(bundle.parent, asset);\n }\n }\n}\nfunction hmrDelete(bundle, id) {\n let modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (modules[id]) {\n // Collect dependencies that will become orphaned when this module is deleted.\n let deps = modules[id][1];\n let orphans = [];\n for (let dep in deps) {\n let parents = getParents(module.bundle.root, deps[dep]);\n if (parents.length === 1) {\n orphans.push(deps[dep]);\n }\n }\n\n // Delete the module. This must be done before deleting dependencies in case of circular dependencies.\n delete modules[id];\n delete bundle.cache[id];\n\n // Now delete the orphans.\n orphans.forEach(id => {\n hmrDelete(module.bundle.root, id);\n });\n } else if (bundle.parent) {\n hmrDelete(bundle.parent, id);\n }\n}\nfunction hmrAcceptCheck(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n if (hmrAcceptCheckOne(bundle, id, depsByBundle)) {\n return true;\n }\n\n // Traverse parents breadth first. All possible ancestries must accept the HMR update, or we'll reload.\n let parents = getParents(module.bundle.root, id);\n let accepted = false;\n while (parents.length > 0) {\n let v = parents.shift();\n let a = hmrAcceptCheckOne(v[0], v[1], null);\n if (a) {\n // If this parent accepts, stop traversing upward, but still consider siblings.\n accepted = true;\n } else {\n // Otherwise, queue the parents in the next level upward.\n let p = getParents(module.bundle.root, v[1]);\n if (p.length === 0) {\n // If there are no parents, then we've reached an entry without accepting. Reload.\n accepted = false;\n break;\n }\n parents.push(...p);\n }\n }\n return accepted;\n}\nfunction hmrAcceptCheckOne(bundle /*: ParcelRequire */, id /*: string */, depsByBundle /*: ?{ [string]: { [string]: string } }*/) {\n var modules = bundle.modules;\n if (!modules) {\n return;\n }\n if (depsByBundle && !depsByBundle[bundle.HMR_BUNDLE_ID]) {\n // If we reached the root bundle without finding where the asset should go,\n // there's nothing to do. Mark as \"accepted\" so we don't reload the page.\n if (!bundle.parent) {\n return true;\n }\n return hmrAcceptCheck(bundle.parent, id, depsByBundle);\n }\n if (checkedAssets[id]) {\n return true;\n }\n checkedAssets[id] = true;\n var cached = bundle.cache[id];\n assetsToDispose.push([bundle, id]);\n if (!cached || cached.hot && cached.hot._acceptCallbacks.length) {\n assetsToAccept.push([bundle, id]);\n return true;\n }\n}\nfunction hmrDisposeQueue() {\n // Dispose all old assets.\n for (let i = 0; i < assetsToDispose.length; i++) {\n let id = assetsToDispose[i][1];\n if (!disposedAssets[id]) {\n hmrDispose(assetsToDispose[i][0], id);\n disposedAssets[id] = true;\n }\n }\n assetsToDispose = [];\n}\nfunction hmrDispose(bundle /*: ParcelRequire */, id /*: string */) {\n var cached = bundle.cache[id];\n bundle.hotData[id] = {};\n if (cached && cached.hot) {\n cached.hot.data = bundle.hotData[id];\n }\n if (cached && cached.hot && cached.hot._disposeCallbacks.length) {\n cached.hot._disposeCallbacks.forEach(function (cb) {\n cb(bundle.hotData[id]);\n });\n }\n delete bundle.cache[id];\n}\nfunction hmrAccept(bundle /*: ParcelRequire */, id /*: string */) {\n // Execute the module.\n bundle(id);\n\n // Run the accept callbacks in the new version of the module.\n var cached = bundle.cache[id];\n if (cached && cached.hot && cached.hot._acceptCallbacks.length) {\n let assetsToAlsoAccept = [];\n cached.hot._acceptCallbacks.forEach(function (cb) {\n let additionalAssets = cb(function () {\n return getParents(module.bundle.root, id);\n });\n if (Array.isArray(additionalAssets) && additionalAssets.length) {\n assetsToAlsoAccept.push(...additionalAssets);\n }\n });\n if (assetsToAlsoAccept.length) {\n let handled = assetsToAlsoAccept.every(function (a) {\n return hmrAcceptCheck(a[0], a[1]);\n });\n if (!handled) {\n return fullReload();\n }\n hmrDisposeQueue();\n }\n }\n}","require(\"./helpers/browser/js-loader\")( require('./helpers/bundle-url').getBundleURL('izxdV') + \"index.497c99a1.js\")","\"use strict\";\n\nvar cacheLoader = require('../cacheLoader');\nmodule.exports = cacheLoader(function (bundle) {\n return new Promise(function (resolve, reject) {\n // Don't insert the same script twice (e.g. if it was already in the HTML)\n var existingScripts = document.getElementsByTagName('script');\n if ([].concat(existingScripts).some(function (script) {\n return script.src === bundle;\n })) {\n resolve();\n return;\n }\n var preloadLink = document.createElement('link');\n preloadLink.href = bundle;\n preloadLink.rel = 'preload';\n preloadLink.as = 'script';\n document.head.appendChild(preloadLink);\n var script = document.createElement('script');\n script.async = true;\n script.type = 'text/javascript';\n script.src = bundle;\n script.onerror = function (e) {\n var error = new TypeError(\"Failed to fetch dynamically imported module: \".concat(bundle, \". Error: \").concat(e.message));\n script.onerror = script.onload = null;\n script.remove();\n reject(error);\n };\n script.onload = function () {\n script.onerror = script.onload = null;\n resolve();\n };\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n});","\"use strict\";\n\nvar cachedBundles = {};\nvar cachedPreloads = {};\nvar cachedPrefetches = {};\nfunction getCache(type) {\n switch (type) {\n case 'preload':\n return cachedPreloads;\n case 'prefetch':\n return cachedPrefetches;\n default:\n return cachedBundles;\n }\n}\nmodule.exports = function (loader, type) {\n return function (bundle) {\n var cache = getCache(type);\n if (cache[bundle]) {\n return cache[bundle];\n }\n return cache[bundle] = loader.apply(null, arguments).catch(function (e) {\n delete cache[bundle];\n throw e;\n });\n };\n};","\"use strict\";\n\nvar bundleURL = {};\nfunction getBundleURLCached(id) {\n var value = bundleURL[id];\n if (!value) {\n value = getBundleURL();\n bundleURL[id] = value;\n }\n return value;\n}\nfunction getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return getBaseURL(matches[2]);\n }\n }\n return '/';\n}\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction getOrigin(url) {\n var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) {\n throw new Error('Origin not found');\n }\n return matches[0];\n}\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\nexports.getOrigin = getOrigin;","import {Palette, RawLevel} from \"./types\";\nimport _backgrounds from './backgrounds.json'\nconst backgrounds=_backgrounds as string[];\nimport _palette from './palette.json'\nconst palette=_palette as Palette;\nimport _allLevels from './levels.json'\nlet allLevels = _allLevels as RawLevel[];\n\n\n\nlet currentCode = '_'\n\nconst paletteEl = document.getElementById('palette') as HTMLDivElement;\n\nObject.entries(palette).forEach(([code, color]) => {\n const btn = document.createElement('button')\n Object.assign(btn.style, {\n background: color || 'linear-gradient(45deg,black,white)',\n display: 'inline-block',\n width: '40px',\n height: '40px',\n border: '1px solid black'\n })\n if (code === currentCode) {\n btn.className = 'active'\n }\n paletteEl.appendChild(btn)\n btn.addEventListener('click', (e) => {\n currentCode = code\n e.preventDefault()\n document.querySelector('#palette button.active')?.classList.remove('active');\n btn.classList.add('active')\n })\n})\n\nfunction renderAllLevels() {\n allLevels.forEach((level, levelIndex) => {\n addLevelEditorToList(level, levelIndex)\n })\n}\nconst levelsListEl = document?.getElementById('levels') as HTMLDivElement\nfunction addLevelEditorToList(level:RawLevel, levelIndex:number) {\n const {name, bricks, size, svg, color} = level\n let div = document.createElement('div')\n\n\n div.innerHTML = ` \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n `;\n\n\n levelsListEl.appendChild(div)\n\n renderLevelBricks(levelIndex)\n updateLevelBackground(levelIndex)\n\n}\n\nfunction updateLevelBackground(levelIndex:number) {\n const div = document.getElementById(\"bricks-of-\" + levelIndex) as HTMLDivElement\n const level = allLevels[levelIndex]\n const {svg, color} = level\n if (color) {\n Object.assign(div.style, {backgroundImage: 'none', backgroundColor: color})\n } else {\n const index = svg || (hashCode(level.name) % backgrounds.length)\n const svgSource=backgrounds[index]\n console.log(index)\n div.setAttribute('data-svg',svgSource)\n Object.assign(div.style, {\n backgroundImage: `url(\"data:image/svg+xml;UTF8,${encodeURIComponent(svgSource)}\")`,\n backgroundColor: 'transparent'\n })\n }\n\n}\n\nfunction renderLevelBricks(levelIndex:number) {\n const {size, bricks} = allLevels[levelIndex]\n\n const buttons = []\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n const index = y * size + x\n buttons.push(``)\n }\n }\n const div = document.getElementById(\"bricks-of-\" + levelIndex) as HTMLDivElement\n div.innerHTML = buttons.join('')\n Object.assign(div.style, {\n width: size * 40 + 'px',\n height: size * 40 + 'px'\n })\n}\n\n\nlevelsListEl.addEventListener('change', e => {\n const target= e.target as HTMLInputElement\n const levelIndexStr = target.getAttribute('data-level')\n if (levelIndexStr) {\n const levelIndex = parseInt(levelIndexStr)\n const level = allLevels[levelIndex]\n if (target.getAttribute('type') === 'color') {\n level.color = target.value\n level.svg = null\n updateLevelBackground(levelIndex)\n }\n save()\n }\n\n})\nlevelsListEl.addEventListener('click', e => {\n const target= e.target as HTMLButtonElement\n if (target.tagName !== 'BUTTON') return\n\n const resize = target.getAttribute('data-offset-level-size')\n const moveX = target.getAttribute('data-offset-x')\n const moveY = target.getAttribute('data-offset-y')\n const levelIndexStr = target.getAttribute('data-level')\n if (!levelIndexStr) return\n\n const levelIndex = parseInt(levelIndexStr)\n const level = allLevels[levelIndex]\n const {bricks, size} = level;\n\n if (resize) {\n const newSize = size + parseInt(resize)\n const newBricks = new Array(newSize * newSize).fill('_')\n for (let x = 0; x < Math.min(size, newSize); x++) {\n for (let y = 0; y < Math.min(size, newSize); y++) {\n newBricks[y * newSize + x] = bricks.split('')[y * size + x] || '_'\n }\n }\n level.size = newSize;\n level.bricks = newBricks.map(b => b || '_').join('');\n } else if (moveX && moveY) {\n const dx = parseInt(moveX), dy = parseInt(moveY)\n const newBricks = new Array(size * size).fill('_')\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n newBricks[(y + dy) * size + (x + dx)] = bricks.split('')[y * size + x] || '_'\n }\n }\n level.bricks = newBricks.map(b => b || '_').join('');\n } else if (target.getAttribute('data-rename')) {\n const newName = prompt('Name ? ', level.name)\n if (newName) {\n level.name = newName\n target.textContent = newName\n }\n } else if (target.getAttribute('data-delete')) {\n if (confirm('Delete level')) {\n allLevels = allLevels.filter((l, i) => i !== levelIndex)\n save().then(() => window.location.reload())\n }\n }\n renderLevelBricks(levelIndex)\n save()\n\n\n}, true)\n\nlet applying = ''\n\nfunction colorPixel(e:Event) {\n const target= e.target as HTMLButtonElement\n if (applying === '') return\n console.log('colorPixel', applying)\n const index = target.getAttribute('data-set-color-of')\n const level = target.getAttribute('data-level')\n if (index && level) {\n const levelIndex = parseInt(level)\n target.style.background = palette[applying] || 'transparent'\n setBrick(levelIndex, parseInt(index), applying)\n }\n}\n\nfunction setBrick(levelIndex:number, index:number, chr:string) {\n const bricks = allLevels[levelIndex].bricks\n allLevels[levelIndex].bricks = bricks.substring(0, index) + chr + bricks.substring(index + 1);\n}\n\nlet changed=0\nlevelsListEl.addEventListener('mousedown', e => {\n const target= e.target as HTMLButtonElement\n const index = target.getAttribute('data-set-color-of')\n const level = target.getAttribute('data-level')\n if ( index && level) {\n changed=0\n const before = allLevels[parseInt(level)].bricks[parseInt(index)] || ''\n applying = before === currentCode ? '_' : currentCode\n console.log({before, applying, currentCode})\n colorPixel(e)\n }\n})\n\nlevelsListEl.addEventListener('mouseenter', e => {\n if (applying !== '') {\n colorPixel(e)\n changed++\n }\n}, true);\n\ndocument.addEventListener('mouseup', (e:Event) => {\n applying = '';\n if(changed) {\n save()\n };\n});\n\n\n(document.getElementById('new-level') as HTMLButtonElement).addEventListener('click', (e:Event) => {\n\n const name = prompt(\"Name ? \")\n if (!name) return;\n\n allLevels.push({\n name,\n size: 8,\n bricks: '________________________________________________________________',\n svg: null,\n color:''\n })\n const levelIndex = allLevels.length - 1\n addLevelEditorToList(allLevels[levelIndex], levelIndex)\n save()\n}, true)\n\nrenderAllLevels()\n\nfunction save() {\n return fetch('http://localhost:4400/src/levels.json', {\n method: 'POST',\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: JSON.stringify(allLevels, null, 2)\n })\n}\n\nfunction hashCode(string:string) {\n let hash = 0;\n for (let i = 0; i < string.length; i++) {\n let code = string.charCodeAt(i);\n hash = ((hash << 5) - hash) + code;\n hash = hash & hash; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n"],"names":[],"version":3,"file":"levels_editor.227fd609.js.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file +{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,QAAQ,oBAAgC,QAAQ,oBAAwB,YAAY,CAAC,WAAW;;;ACAhG;AAEA,IAAI,cAAc,QAAQ;AAC1B,OAAO,OAAO,GAAG,YAAY,SAAU,MAAM;IAC3C,OAAO,IAAI,QAAQ,SAAU,OAAO,EAAE,MAAM;QAC1C,0EAA0E;QAC1E,IAAI,kBAAkB,SAAS,oBAAoB,CAAC;QACpD,IAAI,EAAE,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,SAAU,MAAM;YAClD,OAAO,OAAO,GAAG,KAAK;QACxB,IAAI;YACF;YACA;QACF;QACA,IAAI,cAAc,SAAS,aAAa,CAAC;QACzC,YAAY,IAAI,GAAG;QACnB,YAAY,GAAG,GAAG;QAClB,YAAY,EAAE,GAAG;QACjB,SAAS,IAAI,CAAC,WAAW,CAAC;QAC1B,IAAI,SAAS,SAAS,aAAa,CAAC;QACpC,OAAO,KAAK,GAAG;QACf,OAAO,IAAI,GAAG;QACd,OAAO,GAAG,GAAG;QACb,OAAO,OAAO,GAAG,SAAU,CAAC;YAC1B,IAAI,QAAQ,IAAI,UAAU,gDAAgD,MAAM,CAAC,QAAQ,aAAa,MAAM,CAAC,EAAE,OAAO;YACtH,OAAO,OAAO,GAAG,OAAO,MAAM,GAAG;YACjC,OAAO,MAAM;YACb,OAAO;QACT;QACA,OAAO,MAAM,GAAG;YACd,OAAO,OAAO,GAAG,OAAO,MAAM,GAAG;YACjC;QACF;QACA,SAAS,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC;IACvD;AACF;;;AClCA;AAEA,IAAI,gBAAgB,CAAC;AACrB,IAAI,iBAAiB,CAAC;AACtB,IAAI,mBAAmB,CAAC;AACxB,SAAS,SAAS,IAAI;IACpB,OAAQ;QACN,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE,OAAO;IACX;AACF;AACA,OAAO,OAAO,GAAG,SAAU,MAAM,EAAE,IAAI;IACrC,OAAO,SAAU,MAAM;QACrB,IAAI,QAAQ,SAAS;QACrB,IAAI,KAAK,CAAC,OAAO,EACf,OAAO,KAAK,CAAC,OAAO;QAEtB,OAAO,KAAK,CAAC,OAAO,GAAG,OAAO,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,SAAU,CAAC;YACpE,OAAO,KAAK,CAAC,OAAO;YACpB,MAAM;QACR;IACF;AACF;;;AC1BA;AAEA,IAAI,YAAY,CAAC;AACjB,SAAS,mBAAmB,EAAE;IAC5B,IAAI,QAAQ,SAAS,CAAC,GAAG;IACzB,IAAI,CAAC,OAAO;QACV,QAAQ;QACR,SAAS,CAAC,GAAG,GAAG;IAClB;IACA,OAAO;AACT;AACA,SAAS;IACP,IAAI;QACF,MAAM,IAAI;IACZ,EAAE,OAAO,KAAK;QACZ,IAAI,UAAU,AAAC,CAAA,KAAK,IAAI,KAAK,AAAD,EAAG,KAAK,CAAC;QACrC,IAAI,SACF,2EAA2E;QAC3E,mEAAmE;QACnE,OAAO,WAAW,OAAO,CAAC,EAAE;IAEhC;IACA,OAAO;AACT;AACA,SAAS,WAAW,GAAG;IACrB,OAAO,AAAC,CAAA,KAAK,GAAE,EAAG,OAAO,CAAC,2EAA2E,QAAQ;AAC/G;AAEA,kFAAkF;AAClF,SAAS,UAAU,GAAG;IACpB,IAAI,UAAU,AAAC,CAAA,KAAK,GAAE,EAAG,KAAK,CAAC;IAC/B,IAAI,CAAC,SACH,MAAM,IAAI,MAAM;IAElB,OAAO,OAAO,CAAC,EAAE;AACnB;AACA,QAAQ,YAAY,GAAG;AACvB,QAAQ,UAAU,GAAG;AACrB,QAAQ,SAAS,GAAG;;;;ACrCpB;;AAGA;;AAGA;;AACA;AALA,MAAM,cAAc,CAAA,GAAA,+BAAY,AAAD;AAG/B,MAAM,UAAU,CAAA,GAAA,2BAAQ,AAAD;AAIvB,IAAI,YAAY,CAAA,GAAA,0BAAU,AAAD;AAGzB,IAAI,cAAc;AAElB,MAAM,YAAY,SAAS,cAAc,CAAC;AAE1C,OAAO,OAAO,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM;IAC1C,MAAM,MAAM,SAAS,aAAa,CAAC;IACnC,OAAO,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,YAAY,SAAS;QACrB,SAAS;QACT,OAAO;QACP,QAAQ;QACR,QAAQ;IACZ;IACA,IAAI,SAAS,aACT,IAAI,SAAS,GAAG;IAEpB,UAAU,WAAW,CAAC;IACtB,IAAI,gBAAgB,CAAC,SAAS,CAAC;QAC3B,cAAc;QACd,EAAE,cAAc;QAChB,SAAS,aAAa,CAAC,2BAA2B,UAAU,OAAO;QACnE,IAAI,SAAS,CAAC,GAAG,CAAC;IACtB;AACJ;AAEA,SAAS;IACL,UAAU,OAAO,CAAC,CAAC,OAAO;QACtB,qBAAqB,OAAO;IAChC;AACJ;AAEA,MAAM,eAAe,UAAU,eAAe;AAE9C,SAAS,qBAAqB,KAAe,EAAE,UAAkB;IAC7D,MAAM,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAC,GAAG;IACzC,IAAI,MAAM,SAAS,aAAa,CAAC;IAGjC,IAAI,SAAS,GAAG,CAAC;sCACiB,EAAE,MAAM,IAAI,IAAI,GAAG,cAAc,EAAE,WAAW;;gCAEpD,EAAE,WAAW;4DACe,EAAE,WAAW;2DACd,EAAE,WAAW;sEACF,EAAE,WAAW;qEACd,EAAE,WAAW;sEACZ,EAAE,WAAW;qEACd,EAAE,WAAW;uCAC3C,EAAE,MAAM,KAAK,IAAI,GAAG,cAAc,EAAE,WAAW;wCAC9C,EAAE,MAAM,GAAG,IAAK,CAAA,GAAA,4BAAQ,AAAD,EAAE,MAAM,IAAI,IAAI,YAAY,MAAM,CAAE,cAAc,EAAE,WAAW;;;;;;4DAMlE,EAAE,WAAW;;OAElE,CAAC;IAGJ,aAAa,WAAW,CAAC;IAEzB,kBAAkB;IAClB,sBAAsB;AAE1B;AAEA,SAAS,sBAAsB,UAAkB;IAC7C,MAAM,MAAM,SAAS,cAAc,CAAC,eAAe;IACnD,MAAM,QAAQ,SAAS,CAAC,WAAW;IACnC,MAAM,EAAC,GAAG,EAAE,KAAK,EAAC,GAAG;IACrB,IAAI,OACA,OAAO,MAAM,CAAC,IAAI,KAAK,EAAE;QAAC,iBAAiB;QAAQ,iBAAiB;IAAK;SACtE;QACH,MAAM,YAAY,CAAA,GAAA,sCAAkB,AAAD,EAAE;QAErC,IAAI,YAAY,CAAC,YAAY;QAC7B,OAAO,MAAM,CAAC,IAAI,KAAK,EAAE;YACrB,iBAAiB,CAAC,6BAA6B,EAAE,mBAAmB,WAAW,EAAE,CAAC;YAClF,iBAAiB;QACrB;IACJ;AAEJ;AAEA,SAAS,kBAAkB,UAAkB;IACzC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,SAAS,CAAC,WAAW;IAE5C,MAAM,UAAU,EAAE;IAClB,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACtB,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IAAK;QAC3B,MAAM,QAAQ,IAAI,OAAO;QACzB,QAAQ,IAAI,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,cAAc,OAAO,EAAE,IAAI,GAAG,OAAO,EAAE,IAAI,GAC/G,mEAAmE,EAAE,MAAM,cAAc,EAAE,WAAW,WAAW,CAAC;IACvH;IAEJ,MAAM,MAAM,SAAS,cAAc,CAAC,eAAe;IACnD,IAAI,SAAS,GAAG,QAAQ,IAAI,CAAC;IAC7B,OAAO,MAAM,CAAC,IAAI,KAAK,EAAE;QACrB,OAAO,OAAO,KAAK;QACnB,QAAQ,OAAO,KAAK;IACxB;AACJ;AAGA,aAAa,gBAAgB,CAAC,UAAU,CAAA;IACpC,MAAM,SAAS,EAAE,MAAM;IAEvB,MAAM,gBAAgB,OAAO,YAAY,CAAC;IAC1C,IAAI,CAAC,eAAe;IAEpB,MAAM,aAAa,SAAS;IAC5B,MAAM,QAAQ,SAAS,CAAC,WAAW;IAEnC,IAAI,OAAO,YAAY,CAAC,oBAAoB,QACxC,MAAM,IAAI,GAAG,OAAO,KAAK;IAE7B,IAAI,OAAO,YAAY,CAAC,oBAAoB,SAAS;QACjD,MAAM,KAAK,GAAG,OAAO,KAAK;QAC1B,MAAM,GAAG,GAAG;IAChB;IACA,IAAI,OAAO,YAAY,CAAC,mBAAmB,OAAO;QAC9C,MAAM,KAAK,GAAG;QACd,MAAM,GAAG,GAAG,WAAW,OAAO,KAAK;IACvC;IACA,sBAAsB;IACtB;AACJ;AACA,aAAa,gBAAgB,CAAC,SAAS,CAAA;IACnC,MAAM,SAAS,EAAE,MAAM;IACvB,IAAI,OAAO,OAAO,KAAK,UAAU;IAEjC,MAAM,SAAS,OAAO,YAAY,CAAC;IACnC,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,MAAM,gBAAgB,OAAO,YAAY,CAAC;IAC1C,IAAI,CAAC,eAAe;IAEpB,MAAM,aAAa,SAAS;IAC5B,MAAM,QAAQ,SAAS,CAAC,WAAW;IACnC,MAAM,EAAC,MAAM,EAAE,IAAI,EAAC,GAAG;IAEvB,IAAI,QAAQ;QACR,MAAM,UAAU,OAAO,SAAS;QAChC,MAAM,YAAY,IAAI,MAAM,UAAU,SAAS,IAAI,CAAC;QACpD,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,MAAM,UAAU,IACzC,IAAK,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,CAAC,MAAM,UAAU,IACzC,SAAS,CAAC,IAAI,UAAU,EAAE,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,IAAI;QAGvE,MAAM,IAAI,GAAG;QACb,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAA,IAAK,KAAK,KAAK,IAAI,CAAC;IACrD,OAAO,IAAI,SAAS,OAAO;QACvB,MAAM,KAAK,SAAS,QAAQ,KAAK,SAAS;QAC1C,MAAM,YAAY,IAAI,MAAM,OAAO,MAAM,IAAI,CAAC;QAC9C,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACtB,IAAK,IAAI,IAAI,GAAG,IAAI,MAAM,IACtB,SAAS,CAAC,AAAC,CAAA,IAAI,EAAC,IAAK,OAAQ,CAAA,IAAI,EAAC,EAAG,GAAG,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,IAAI;QAGlF,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAA,IAAK,KAAK,KAAK,IAAI,CAAC;IACrD,OAAO,IAAI,OAAO,YAAY,CAAC,gBAAgB;QAC3C,MAAM,UAAU,OAAO,WAAW,MAAM,IAAI;QAC5C,IAAI,SAAS;YACT,MAAM,IAAI,GAAG;YACb,OAAO,WAAW,GAAG;QACzB;IACJ,OAAO,IAAI,OAAO,YAAY,CAAC,gBAC3B;QAAA,IAAI,QAAQ,iBAAiB;YACzB,YAAY,UAAU,MAAM,CAAC,CAAC,GAAG,IAAM,MAAM;YAC7C,OAAO,IAAI,CAAC,IAAM,OAAO,QAAQ,CAAC,MAAM;QAC5C;IAAA;IAEJ,kBAAkB;IAClB;AAGJ,GAAG;AAEH,IAAI,WAAW;AAEf,SAAS,WAAW,CAAQ;IACxB,MAAM,SAAS,EAAE,MAAM;IACvB,IAAI,aAAa,IAAI;IACrB,QAAQ,GAAG,CAAC,cAAc;IAC1B,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,IAAI,SAAS,OAAO;QAChB,MAAM,aAAa,SAAS;QAC5B,OAAO,KAAK,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,IAAI;QAC/C,SAAS,YAAY,SAAS,QAAQ;IAC1C;AACJ;AAEA,SAAS,SAAS,UAAkB,EAAE,KAAa,EAAE,GAAW;IAC5D,MAAM,SAAS,SAAS,CAAC,WAAW,CAAC,MAAM;IAC3C,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,SAAS,CAAC,GAAG,SAAS,MAAM,OAAO,SAAS,CAAC,QAAQ;AAC/F;AAEA,IAAI,UAAU;AACd,aAAa,gBAAgB,CAAC,aAAa,CAAA;IACvC,MAAM,SAAS,EAAE,MAAM;IACvB,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,MAAM,QAAQ,OAAO,YAAY,CAAC;IAClC,IAAI,SAAS,OAAO;QAChB,UAAU;QACV,MAAM,SAAS,SAAS,CAAC,SAAS,OAAO,CAAC,MAAM,CAAC,SAAS,OAAO,IAAI;QACrE,WAAW,WAAW,cAAc,MAAM;QAC1C,QAAQ,GAAG,CAAC;YAAC;YAAQ;YAAU;QAAW;QAC1C,WAAW;IACf;AACJ;AAEA,aAAa,gBAAgB,CAAC,cAAc,CAAA;IACxC,IAAI,aAAa,IAAI;QACjB,WAAW;QACX;IACJ;AACJ,GAAG;AAEH,SAAS,gBAAgB,CAAC,WAAW,CAAC;IAClC,WAAW;IACX,IAAI,SACA;AAGR;AAGC,SAAS,cAAc,CAAC,aAAmC,gBAAgB,CAAC,SAAS,CAAC;IAEnF,MAAM,OAAO,OAAO;IACpB,IAAI,CAAC,MAAM;IAEX,UAAU,IAAI,CAAC;QACX;QACA,MAAM;QACN,QAAQ;QACR,KAAK;QACL,OAAO;IACX;IACA,MAAM,aAAa,UAAU,MAAM,GAAG;IACtC,qBAAqB,SAAS,CAAC,WAAW,EAAE;IAC5C;AACJ,GAAG;AAEH;AAEA,SAAS;IACL,OAAO,MAAM,yCAAyC;QAClD,QAAQ;QACR,SAAS;YACL,gBAAgB;QACpB;QACA,MAAM,KAAK,SAAS,CAAC,WAAW,MAAM;IAC1C;AACJ","sources":["node_modules/@parcel/runtime-js/lib/runtime-357eca6ce1112f01.js","node_modules/@parcel/runtime-js/lib/helpers/browser/js-loader.js","node_modules/@parcel/runtime-js/lib/helpers/cacheLoader.js","node_modules/@parcel/runtime-js/lib/helpers/bundle-url.js","src/levels_editor.ts"],"sourcesContent":["require(\"./helpers/browser/js-loader\")( require('./helpers/bundle-url').getBundleURL('izxdV') + \"index.c0fd3053.js\")","\"use strict\";\n\nvar cacheLoader = require('../cacheLoader');\nmodule.exports = cacheLoader(function (bundle) {\n return new Promise(function (resolve, reject) {\n // Don't insert the same script twice (e.g. if it was already in the HTML)\n var existingScripts = document.getElementsByTagName('script');\n if ([].concat(existingScripts).some(function (script) {\n return script.src === bundle;\n })) {\n resolve();\n return;\n }\n var preloadLink = document.createElement('link');\n preloadLink.href = bundle;\n preloadLink.rel = 'preload';\n preloadLink.as = 'script';\n document.head.appendChild(preloadLink);\n var script = document.createElement('script');\n script.async = true;\n script.type = 'text/javascript';\n script.src = bundle;\n script.onerror = function (e) {\n var error = new TypeError(\"Failed to fetch dynamically imported module: \".concat(bundle, \". Error: \").concat(e.message));\n script.onerror = script.onload = null;\n script.remove();\n reject(error);\n };\n script.onload = function () {\n script.onerror = script.onload = null;\n resolve();\n };\n document.getElementsByTagName('head')[0].appendChild(script);\n });\n});","\"use strict\";\n\nvar cachedBundles = {};\nvar cachedPreloads = {};\nvar cachedPrefetches = {};\nfunction getCache(type) {\n switch (type) {\n case 'preload':\n return cachedPreloads;\n case 'prefetch':\n return cachedPrefetches;\n default:\n return cachedBundles;\n }\n}\nmodule.exports = function (loader, type) {\n return function (bundle) {\n var cache = getCache(type);\n if (cache[bundle]) {\n return cache[bundle];\n }\n return cache[bundle] = loader.apply(null, arguments).catch(function (e) {\n delete cache[bundle];\n throw e;\n });\n };\n};","\"use strict\";\n\nvar bundleURL = {};\nfunction getBundleURLCached(id) {\n var value = bundleURL[id];\n if (!value) {\n value = getBundleURL();\n bundleURL[id] = value;\n }\n return value;\n}\nfunction getBundleURL() {\n try {\n throw new Error();\n } catch (err) {\n var matches = ('' + err.stack).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^)\\n]+/g);\n if (matches) {\n // The first two stack frames will be this function and getBundleURLCached.\n // Use the 3rd one, which will be a runtime in the original bundle.\n return getBaseURL(matches[2]);\n }\n }\n return '/';\n}\nfunction getBaseURL(url) {\n return ('' + url).replace(/^((?:https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/.+)\\/[^/]+$/, '$1') + '/';\n}\n\n// TODO: Replace uses with `new URL(url).origin` when ie11 is no longer supported.\nfunction getOrigin(url) {\n var matches = ('' + url).match(/(https?|file|ftp|(chrome|moz|safari-web)-extension):\\/\\/[^/]+/);\n if (!matches) {\n throw new Error('Origin not found');\n }\n return matches[0];\n}\nexports.getBundleURL = getBundleURLCached;\nexports.getBaseURL = getBaseURL;\nexports.getOrigin = getOrigin;","import {Palette, RawLevel} from \"./types\";\nimport _backgrounds from './backgrounds.json'\n\nconst backgrounds = _backgrounds as string[];\nimport _palette from './palette.json'\n\nconst palette = _palette as Palette;\nimport _allLevels from './levels.json'\nimport {getLevelBackground, hashCode} from \"./getLevelBackground\";\n\nlet allLevels = _allLevels as RawLevel[];\n\n\nlet currentCode = '_'\n\nconst paletteEl = document.getElementById('palette') as HTMLDivElement;\n\nObject.entries(palette).forEach(([code, color]) => {\n const btn = document.createElement('button')\n Object.assign(btn.style, {\n background: color || 'linear-gradient(45deg,black,white)',\n display: 'inline-block',\n width: '40px',\n height: '40px',\n border: '1px solid black'\n })\n if (code === currentCode) {\n btn.className = 'active'\n }\n paletteEl.appendChild(btn)\n btn.addEventListener('click', (e) => {\n currentCode = code\n e.preventDefault()\n document.querySelector('#palette button.active')?.classList.remove('active');\n btn.classList.add('active')\n })\n})\n\nfunction renderAllLevels() {\n allLevels.forEach((level, levelIndex) => {\n addLevelEditorToList(level, levelIndex)\n })\n}\n\nconst levelsListEl = document?.getElementById('levels') as HTMLDivElement\n\nfunction addLevelEditorToList(level: RawLevel, levelIndex: number) {\n const {name, bricks, size, svg, color} = level\n let div = document.createElement('div')\n\n\n div.innerHTML = ` \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n `;\n\n\n levelsListEl.appendChild(div)\n\n renderLevelBricks(levelIndex)\n updateLevelBackground(levelIndex)\n\n}\n\nfunction updateLevelBackground(levelIndex: number) {\n const div = document.getElementById(\"bricks-of-\" + levelIndex) as HTMLDivElement\n const level = allLevels[levelIndex]\n const {svg, color} = level\n if (color) {\n Object.assign(div.style, {backgroundImage: 'none', backgroundColor: color})\n } else {\n const svgSource = getLevelBackground(level) as string\n\n div.setAttribute('data-svg', svgSource)\n Object.assign(div.style, {\n backgroundImage: `url(\"data:image/svg+xml;UTF8,${encodeURIComponent(svgSource)}\")`,\n backgroundColor: 'transparent'\n })\n }\n\n}\n\nfunction renderLevelBricks(levelIndex: number) {\n const {size, bricks} = allLevels[levelIndex]\n\n const buttons = []\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n const index = y * size + x\n buttons.push(``)\n }\n }\n const div = document.getElementById(\"bricks-of-\" + levelIndex) as HTMLDivElement\n div.innerHTML = buttons.join('')\n Object.assign(div.style, {\n width: size * 40 + 'px',\n height: size * 40 + 'px'\n })\n}\n\n\nlevelsListEl.addEventListener('change', e => {\n const target = e.target as HTMLInputElement\n\n const levelIndexStr = target.getAttribute('data-level')\n if (!levelIndexStr) return\n\n const levelIndex = parseInt(levelIndexStr)\n const level = allLevels[levelIndex]\n\n if (target.getAttribute('data-text-val') == 'name') {\n level.name = target.value\n }\n if (target.getAttribute('data-text-val') == 'color') {\n level.color = target.value\n level.svg = null\n }\n if (target.getAttribute('data-num-val') == 'svg') {\n level.color = ''\n level.svg = parseFloat(target.value)\n }\n updateLevelBackground(levelIndex)\n save()\n})\nlevelsListEl.addEventListener('click', e => {\n const target = e.target as HTMLButtonElement\n if (target.tagName !== 'BUTTON') return\n\n const resize = target.getAttribute('data-offset-level-size')\n const moveX = target.getAttribute('data-offset-x')\n const moveY = target.getAttribute('data-offset-y')\n const levelIndexStr = target.getAttribute('data-level')\n if (!levelIndexStr) return\n\n const levelIndex = parseInt(levelIndexStr)\n const level = allLevels[levelIndex]\n const {bricks, size} = level;\n\n if (resize) {\n const newSize = size + parseInt(resize)\n const newBricks = new Array(newSize * newSize).fill('_')\n for (let x = 0; x < Math.min(size, newSize); x++) {\n for (let y = 0; y < Math.min(size, newSize); y++) {\n newBricks[y * newSize + x] = bricks.split('')[y * size + x] || '_'\n }\n }\n level.size = newSize;\n level.bricks = newBricks.map(b => b || '_').join('');\n } else if (moveX && moveY) {\n const dx = parseInt(moveX), dy = parseInt(moveY)\n const newBricks = new Array(size * size).fill('_')\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n newBricks[(y + dy) * size + (x + dx)] = bricks.split('')[y * size + x] || '_'\n }\n }\n level.bricks = newBricks.map(b => b || '_').join('');\n } else if (target.getAttribute('data-rename')) {\n const newName = prompt('Name ? ', level.name)\n if (newName) {\n level.name = newName\n target.textContent = newName\n }\n } else if (target.getAttribute('data-delete')) {\n if (confirm('Delete level')) {\n allLevels = allLevels.filter((l, i) => i !== levelIndex)\n save().then(() => window.location.reload())\n }\n }\n renderLevelBricks(levelIndex)\n save()\n\n\n}, true)\n\nlet applying = ''\n\nfunction colorPixel(e: Event) {\n const target = e.target as HTMLButtonElement\n if (applying === '') return\n console.log('colorPixel', applying)\n const index = target.getAttribute('data-set-color-of')\n const level = target.getAttribute('data-level')\n if (index && level) {\n const levelIndex = parseInt(level)\n target.style.background = palette[applying] || 'transparent'\n setBrick(levelIndex, parseInt(index), applying)\n }\n}\n\nfunction setBrick(levelIndex: number, index: number, chr: string) {\n const bricks = allLevels[levelIndex].bricks\n allLevels[levelIndex].bricks = bricks.substring(0, index) + chr + bricks.substring(index + 1);\n}\n\nlet changed = 0\nlevelsListEl.addEventListener('mousedown', e => {\n const target = e.target as HTMLButtonElement\n const index = target.getAttribute('data-set-color-of')\n const level = target.getAttribute('data-level')\n if (index && level) {\n changed = 0\n const before = allLevels[parseInt(level)].bricks[parseInt(index)] || ''\n applying = before === currentCode ? '_' : currentCode\n console.log({before, applying, currentCode})\n colorPixel(e)\n }\n})\n\nlevelsListEl.addEventListener('mouseenter', e => {\n if (applying !== '') {\n colorPixel(e)\n changed++\n }\n}, true);\n\ndocument.addEventListener('mouseup', (e: Event) => {\n applying = '';\n if (changed) {\n save()\n }\n ;\n});\n\n\n(document.getElementById('new-level') as HTMLButtonElement).addEventListener('click', (e: Event) => {\n\n const name = prompt(\"Name ? \")\n if (!name) return;\n\n allLevels.push({\n name,\n size: 8,\n bricks: '________________________________________________________________',\n svg: null,\n color: ''\n })\n const levelIndex = allLevels.length - 1\n addLevelEditorToList(allLevels[levelIndex], levelIndex)\n save()\n}, true)\n\nrenderAllLevels()\n\nfunction save() {\n return fetch('http://localhost:4400/src/levels.json', {\n method: 'POST',\n headers: {\n 'Content-Type': 'text/plain'\n },\n body: JSON.stringify(allLevels, null, 2)\n })\n}\n"],"names":[],"version":3,"file":"levels_editor.227fd609.js.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file diff --git a/dist/levels_editor.de5e7f9b.css b/dist/levels_editor.de5e7f9b.css index 2400286..42cc04f 100644 --- a/dist/levels_editor.de5e7f9b.css +++ b/dist/levels_editor.de5e7f9b.css @@ -28,6 +28,10 @@ body { position: relative; } +#levels input[type="number"] { + width: 50px; +} + #levels > div { grid-template-columns: auto auto; grid-template-areas: ". name" diff --git a/dist/levels_editor.de5e7f9b.css.map b/dist/levels_editor.de5e7f9b.css.map index 090e311..ee3354d 100644 --- a/dist/levels_editor.de5e7f9b.css.map +++ b/dist/levels_editor.de5e7f9b.css.map @@ -1 +1 @@ -{"mappings":"AACA;;;;;AAKA;;;;;;;;;AAAA;;;;AAcA;;;;;;;;AAAA;;;;AAWE;;;;;;;AAKE;;;;AAIA;;;;;;;AAOA","sources":["src/levels_editor.less"],"sourcesContent":["\nbody {\n background: black;\n color: white;\n}\n\n#palette {\n position: fixed;\n top: 0;\n right: 0;\n width: 80px;\n bottom: 0;\n overflow: auto;\n\n button.active {\n transform: scale(1.2);\n }\n\n}\n\n#levels {\n display: flex;\n gap: 40px;\n align-items: flex-start;\n flex-wrap: wrap;\n margin-right: 80px;\n\n .level-bricks-preview {\n position: relative;\n }\n\n & > div {\n display: grid;\n grid-template-columns: auto auto;\n grid-template-areas: \". name\" \"buttons bricks\";\n\n & > *:nth-child(1) {\n grid-area: name;\n }\n\n & > div:nth-child(2) {\n grid-area: buttons;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n & > div:nth-child(3) {\n grid-area: bricks;\n }\n\n }\n\n}\n\n"],"names":[],"version":3,"file":"levels_editor.de5e7f9b.css.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file +{"mappings":"AACA;;;;;AAKA;;;;;;;;;AAAA;;;;AAcA;;;;;;;;AAAA;;;;AAAA;;;;AAcE;;;;;;;AAKE;;;;AAIA;;;;;;;AAOA","sources":["src/levels_editor.less"],"sourcesContent":["\nbody {\n background: black;\n color: white;\n}\n\n#palette {\n position: fixed;\n top: 0;\n right: 0;\n width: 80px;\n bottom: 0;\n overflow: auto;\n\n button.active {\n transform: scale(1.2);\n }\n\n}\n\n#levels {\n display: flex;\n gap: 40px;\n align-items: flex-start;\n flex-wrap: wrap;\n margin-right: 80px;\n\n .level-bricks-preview {\n position: relative;\n }\n input[type=\"number\"]{\n width: 50px;\n }\n\n & > div {\n display: grid;\n grid-template-columns: auto auto;\n grid-template-areas: \". name\" \"buttons bricks\";\n\n & > *:nth-child(1) {\n grid-area: name;\n }\n\n & > div:nth-child(2) {\n grid-area: buttons;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n }\n\n & > div:nth-child(3) {\n grid-area: bricks;\n }\n\n }\n\n}\n\n"],"names":[],"version":3,"file":"levels_editor.de5e7f9b.css.map","sourceRoot":"/__parcel_source_root/"} \ No newline at end of file diff --git a/dist/levels_editor.html b/dist/levels_editor.html index f7d4b13..0f51cdc 100644 --- a/dist/levels_editor.html +++ b/dist/levels_editor.html @@ -1,6 +1,6 @@ - + Level editor diff --git a/package.json b/package.json index dd37bbe..d446ac4 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "A roguelite take on the breakout genre, optimised for short runs and replayability.", "scripts": { "start": "rm -rf .parcel-cache && run-p dev:*", - "dev:game-fe": "parcel src/*.html --lazy", + "dev:game-fe": "parcel src/*.html --lazy --no-hmr", "dev:editor-be": "nodemon editserver.js --watch editserver.js", "build": "rm -f dist/* && parcel build src/index.html" }, diff --git a/src/game.ts b/src/game.ts index 5437012..0e27a96 100644 --- a/src/game.ts +++ b/src/game.ts @@ -117,7 +117,9 @@ let running = false, function play() { if (running) return; running = true; - getAudioContext()?.resume().then(); + + startRecordingGame(); + getAudioContext()?.resume(); resumeRecording(); document.body.className = running ? " running " : " paused "; } @@ -132,7 +134,7 @@ function pause(playerAskedForPause: boolean) { needsRender = true; setTimeout(() => { - if (!running) getAudioContext()?.suspend().then(); + if (!running) getAudioContext()?.suspend(); }, 1000); pauseRecording(); @@ -446,9 +448,10 @@ async function openUpgradesPicker() { } function setLevel(l: number) { + stopRecording(); pause(false); if (l > 0) { - openUpgradesPicker().then(); + openUpgradesPicker(); } currentLevel = l; @@ -476,8 +479,6 @@ function setLevel(l: number) { // This caused problems with accented characters like the Γ΄ of cΓ΄te d'ivoire for odd reasons // background.src = 'data:image/svg+xml;base64,' + btoa(lvl.svg) background.src = "data:image/svg+xml;UTF8," + lvl.svg; - stopRecording(); - startRecordingGame(); } function currentLevelInfo() { @@ -625,7 +626,7 @@ gameCanvas.addEventListener("mouseup", (e) => { } else { play(); if (isSettingOn("pointerLock")) { - gameCanvas.requestPointerLock().then(); + gameCanvas.requestPointerLock(); } } }); @@ -2516,7 +2517,7 @@ export function toggleSetting(key: OptionId) { scoreDisplay.addEventListener("click", (e) => { e.preventDefault(); - openScorePanel().then(); + openScorePanel(); }); async function openScorePanel() { @@ -2551,7 +2552,7 @@ async function openScorePanel() { document.getElementById("menu")?.addEventListener("click", (e) => { e.preventDefault(); - openSettingsPanel().then(); + openSettingsPanel(); }); async function openSettingsPanel() { @@ -2941,6 +2942,7 @@ function startRecordingGame() { if (!isSettingOn("record")) { return; } + if(mediaRecorder) return; if (!recordCanvas) { // Smaller canvas with fewer details recordCanvas = document.createElement("canvas"); @@ -3058,14 +3060,14 @@ function toggleFullScreen() { try { if (document.fullscreenElement !== null) { if (document.exitFullscreen) { - document.exitFullscreen().then(); + document.exitFullscreen(); } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen(); } } else { const docel = document.documentElement; if (docel.requestFullscreen) { - docel.requestFullscreen().then(); + docel.requestFullscreen(); } else if (docel.webkitRequestFullscreen) { docel.webkitRequestFullscreen(); } @@ -3127,9 +3129,9 @@ document.addEventListener("keyup", (e) => { } else if (e.key === "Escape" && running) { pause(true); } else if (e.key.toLowerCase() === "m" && !alertsOpen) { - openSettingsPanel().then(); + openSettingsPanel(); } else if (e.key.toLowerCase() === "s" && !alertsOpen) { - openScorePanel().then(); + openScorePanel(); } else { return; } diff --git a/src/getLevelBackground.ts b/src/getLevelBackground.ts new file mode 100644 index 0000000..05cfd4d --- /dev/null +++ b/src/getLevelBackground.ts @@ -0,0 +1,24 @@ +import {RawLevel} from "./types"; + +export function hashCode(string: string) { + let hash = 0; + for (let i = 0; i < string.length; i++) { + let code = string.charCodeAt(i); + hash = (hash << 5) - hash + code; + hash = hash & hash; // Convert to 32bit integer + } + return Math.abs(hash); +} + +import _backgrounds from "./backgrounds.json"; +const backgrounds = _backgrounds as string[]; + +export function getLevelBackground(level:RawLevel){ + + let svg = level.svg !== null && backgrounds[level.svg % backgrounds.length]; + + if (!level.color && !svg) { + svg = backgrounds[hashCode(level.name) % backgrounds.length]; + } + return svg +} \ No newline at end of file diff --git a/src/levels.json b/src/levels.json index ddf7d7e..c5345e7 100644 --- a/src/levels.json +++ b/src/levels.json @@ -116,7 +116,7 @@ "name": "We come in peace", "size": 13, "bricks": "________________a_____a_______a___a_______aaaaaaa_____aaBaaaBaa___aaaaaaaaaaa__aaaaaaaaaaa__a_aaaaaaa_a__a_a_____a_a_____aa_aa_____________________________", - "svg": 24, + "svg": 29, "color": "" }, { @@ -151,8 +151,8 @@ "name": "Enderman", "size": 10, "bricks": "___________gggggggg__gggggggg__gggggggg__gggggggg__vvvggvvv__gggggggg__gggggggg__gggggggg_____________________", - "svg": "", - "color": "#26a269" + "svg": null, + "color": "#154b07" }, { "name": "Mushroom", @@ -165,7 +165,7 @@ "name": "Tulip", "size": 11, "bricks": "______________R_R_R______RRRRR______RRRRR______RRRRR_______RRR_________k________k_k_k______k_k_k_______kkk_________k________________", - "svg": 29, + "svg": 17, "color": "" }, { @@ -179,7 +179,7 @@ "name": "Marion", "size": 9, "bricks": "rr_____rr_rr___rr__rrr_rrr__rrrrrrr__rr_r_rr__rr___rr__rr___rr__rr___rr_rrr___rrr", - "svg": null, + "svg": 27, "color": "" }, { @@ -835,4 +835,4 @@ "bricks": "_W__W_WW__WW____________WW__WW_W__W_", "svg": null } -] +] \ No newline at end of file diff --git a/src/levels_editor.less b/src/levels_editor.less index bd6b9c3..72f5283 100644 --- a/src/levels_editor.less +++ b/src/levels_editor.less @@ -28,6 +28,9 @@ body { .level-bricks-preview { position: relative; } + input[type="number"]{ + width: 50px; + } & > div { display: grid; diff --git a/src/levels_editor.ts b/src/levels_editor.ts index b3cb93c..6c9c70b 100644 --- a/src/levels_editor.ts +++ b/src/levels_editor.ts @@ -1,11 +1,14 @@ import {Palette, RawLevel} from "./types"; -import _backgrounds from './backgrounds.json' -const backgrounds=_backgrounds as string[]; -import _palette from './palette.json' -const palette=_palette as Palette; -import _allLevels from './levels.json' -let allLevels = _allLevels as RawLevel[]; +import _backgrounds from './backgrounds.json' +const backgrounds = _backgrounds as string[]; +import _palette from './palette.json' + +const palette = _palette as Palette; +import _allLevels from './levels.json' +import {getLevelBackground, hashCode} from "./getLevelBackground"; + +let allLevels = _allLevels as RawLevel[]; let currentCode = '_' @@ -38,14 +41,16 @@ function renderAllLevels() { addLevelEditorToList(level, levelIndex) }) } + const levelsListEl = document?.getElementById('levels') as HTMLDivElement -function addLevelEditorToList(level:RawLevel, levelIndex:number) { + +function addLevelEditorToList(level: RawLevel, levelIndex: number) { const {name, bricks, size, svg, color} = level let div = document.createElement('div') div.innerHTML = ` - +
@@ -54,10 +59,9 @@ function addLevelEditorToList(level:RawLevel, levelIndex:number) { - + - - +
@@ -74,17 +78,16 @@ function addLevelEditorToList(level:RawLevel, levelIndex:number) { } -function updateLevelBackground(levelIndex:number) { +function updateLevelBackground(levelIndex: number) { const div = document.getElementById("bricks-of-" + levelIndex) as HTMLDivElement const level = allLevels[levelIndex] const {svg, color} = level if (color) { Object.assign(div.style, {backgroundImage: 'none', backgroundColor: color}) } else { - const index = svg || (hashCode(level.name) % backgrounds.length) - const svgSource=backgrounds[index] - console.log(index) - div.setAttribute('data-svg',svgSource) + const svgSource = getLevelBackground(level) as string + + div.setAttribute('data-svg', svgSource) Object.assign(div.style, { backgroundImage: `url("data:image/svg+xml;UTF8,${encodeURIComponent(svgSource)}")`, backgroundColor: 'transparent' @@ -93,7 +96,7 @@ function updateLevelBackground(levelIndex:number) { } -function renderLevelBricks(levelIndex:number) { +function renderLevelBricks(levelIndex: number) { const {size, bricks} = allLevels[levelIndex] const buttons = [] @@ -114,22 +117,30 @@ function renderLevelBricks(levelIndex:number) { levelsListEl.addEventListener('change', e => { - const target= e.target as HTMLInputElement - const levelIndexStr = target.getAttribute('data-level') - if (levelIndexStr) { - const levelIndex = parseInt(levelIndexStr) - const level = allLevels[levelIndex] - if (target.getAttribute('type') === 'color') { - level.color = target.value - level.svg = null - updateLevelBackground(levelIndex) - } - save() - } + const target = e.target as HTMLInputElement + const levelIndexStr = target.getAttribute('data-level') + if (!levelIndexStr) return + + const levelIndex = parseInt(levelIndexStr) + const level = allLevels[levelIndex] + + if (target.getAttribute('data-text-val') == 'name') { + level.name = target.value + } + if (target.getAttribute('data-text-val') == 'color') { + level.color = target.value + level.svg = null + } + if (target.getAttribute('data-num-val') == 'svg') { + level.color = '' + level.svg = parseFloat(target.value) + } + updateLevelBackground(levelIndex) + save() }) levelsListEl.addEventListener('click', e => { - const target= e.target as HTMLButtonElement + const target = e.target as HTMLButtonElement if (target.tagName !== 'BUTTON') return const resize = target.getAttribute('data-offset-level-size') @@ -181,8 +192,8 @@ levelsListEl.addEventListener('click', e => { let applying = '' -function colorPixel(e:Event) { - const target= e.target as HTMLButtonElement +function colorPixel(e: Event) { + const target = e.target as HTMLButtonElement if (applying === '') return console.log('colorPixel', applying) const index = target.getAttribute('data-set-color-of') @@ -194,18 +205,18 @@ function colorPixel(e:Event) { } } -function setBrick(levelIndex:number, index:number, chr:string) { +function setBrick(levelIndex: number, index: number, chr: string) { const bricks = allLevels[levelIndex].bricks allLevels[levelIndex].bricks = bricks.substring(0, index) + chr + bricks.substring(index + 1); } -let changed=0 +let changed = 0 levelsListEl.addEventListener('mousedown', e => { - const target= e.target as HTMLButtonElement - const index = target.getAttribute('data-set-color-of') + const target = e.target as HTMLButtonElement + const index = target.getAttribute('data-set-color-of') const level = target.getAttribute('data-level') - if ( index && level) { - changed=0 + if (index && level) { + changed = 0 const before = allLevels[parseInt(level)].bricks[parseInt(index)] || '' applying = before === currentCode ? '_' : currentCode console.log({before, applying, currentCode}) @@ -220,15 +231,16 @@ levelsListEl.addEventListener('mouseenter', e => { } }, true); -document.addEventListener('mouseup', (e:Event) => { +document.addEventListener('mouseup', (e: Event) => { applying = ''; - if(changed) { + if (changed) { save() - }; + } + ; }); -(document.getElementById('new-level') as HTMLButtonElement).addEventListener('click', (e:Event) => { +(document.getElementById('new-level') as HTMLButtonElement).addEventListener('click', (e: Event) => { const name = prompt("Name ? ") if (!name) return; @@ -238,7 +250,7 @@ document.addEventListener('mouseup', (e:Event) => { size: 8, bricks: '________________________________________________________________', svg: null, - color:'' + color: '' }) const levelIndex = allLevels.length - 1 addLevelEditorToList(allLevels[levelIndex], levelIndex) @@ -256,13 +268,3 @@ function save() { body: JSON.stringify(allLevels, null, 2) }) } - -function hashCode(string:string) { - let hash = 0; - for (let i = 0; i < string.length; i++) { - let code = string.charCodeAt(i); - hash = ((hash << 5) - hash) + code; - hash = hash & hash; // Convert to 32bit integer - } - return Math.abs(hash); -} diff --git a/src/loadGameData.ts b/src/loadGameData.ts index 7da8195..fea34ac 100644 --- a/src/loadGameData.ts +++ b/src/loadGameData.ts @@ -3,8 +3,7 @@ import _palette from "./palette.json"; import _rawLevelsList from "./levels.json"; import _appVersion from "./version.json"; import { rawUpgrades } from "./rawUpgrades"; -import _backgrounds from "./backgrounds.json"; -const backgrounds = _backgrounds as string[]; +import {getLevelBackground} from "./getLevelBackground"; const palette = _palette as Palette; const rawLevelsList = _rawLevelsList as RawLevel[]; @@ -50,7 +49,7 @@ function levelIconHTML( } } } - // I don't think many blind people will benefit for this but it's nice to have something to put in "alt" + // I don't think many blind people will benefit for this, but it's nice to have something to put in "alt" return `${levelName}`; } @@ -64,16 +63,11 @@ export const allLevels = rawLevelsList .slice(0, level.size * level.size); const icon = levelIconHTML(bricks, level.size, level.name, level.color); icons[level.name] = icon; - let svg = level.svg !== null && backgrounds[level.svg]; - - if (!level.color && !svg) { - svg = backgrounds[hashCode(level.name) % backgrounds.length]; - } return { ...level, bricks, icon, - svg, + svg:getLevelBackground(level), }; }) .filter((l) => !l.name.startsWith("icon:")) @@ -92,13 +86,3 @@ export const upgrades = rawUpgrades.map((u) => ({ ...u, icon: icons["icon:" + u.id], })) as Upgrade[]; - -function hashCode(string: string) { - let hash = 0; - for (let i = 0; i < string.length; i++) { - let code = string.charCodeAt(i); - hash = (hash << 5) - hash + code; - hash = hash & hash; // Convert to 32bit integer - } - return Math.abs(hash); -}