{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/App.vue?6924","webpack:///./src/App.vue","webpack:///./src/App.vue?ae2f","webpack:///./src/registerServiceWorker.ts","webpack:///./src/views/Home.vue?9962","webpack:///./src/views/Home.vue","webpack:///./src/views/Home.vue?7720","webpack:///./src/views/Tools.vue?9b39","webpack:///./src/util/log.ts","webpack:///./src/models/models.ts","webpack:///./src/models/platformFileSpecs.ts","webpack:///./src/views/Tools.vue","webpack:///./src/views/Tools.vue?f85f","webpack:///./src/router/index.ts","webpack:///./src/main.ts","webpack:///./src/assets/logo.png"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","jsonpScriptSrc","p","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","script","document","createElement","charset","timeout","nc","setAttribute","src","error","Error","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","message","name","request","undefined","setTimeout","head","appendChild","all","m","c","d","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","class","_createElementVNode","href","data-bs-toggle","data-bs-target","aria-controls","aria-expanded","aria-label","id","_hoisted_3","_hoisted_4","_createVNode","_component_router_link","active-class","to","_component_router_view","__exports__","render","register","process","ready","log","registered","cached","updatefound","updated","offline","_hoisted_1","_hoisted_2","_createStaticVNode","_imports_0","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","Home","Vue","Options","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_createTextVNode","_hoisted_24","_hoisted_25","_hoisted_26","style","_hoisted_27","_hoisted_28","_hoisted_29","_hoisted_30","_hoisted_31","_hoisted_32","_hoisted_33","for","_hoisted_34","_hoisted_35","_hoisted_36","_hoisted_37","_hoisted_38","_hoisted_39","_hoisted_40","_hoisted_41","_hoisted_42","_hoisted_43","_hoisted_44","_hoisted_45","_hoisted_46","_hoisted_47","_hoisted_48","_hoisted_49","accept","onChange","$event","selectionChanged","_normalizeStyle","sampleStyle","selectedIconFile","selectedSplashFile","isProcessing","isArchiveReady","_createCommentVNode","onClick","_withDirectives","showPreviews","_vModelCheckbox","_toDisplayString","msg","role","width","processingProgress","downloadZip","_Fragment","_renderList","allPlatforms","platform","_normalizeClass","icon","title","bundleSpecs","filter","f","category","imageSet","path","includeInBundle","instructions","bundle","prefix","placeholder","_vModelText","fileSpec","idiom","fileName","scale","height","imgData","Logger","info","warn","FileSpec","orientation","PlatformFileSpecs","Array","iOS","manifest","useAlpha","maintainAspectRatio","resizeFromCentre","ioniciOS","android","ionicAndroid","windowsStore","Tools","logger","itemsProcessed","isCropSplashFromCentreMode","totalTasks","iconSrcData","splashColourSample","g","b","a","pica","features","this","Specs","zipArchive","JSZip","imageType","files","getSourceImageForProcessing","splashImgData","samplePixelValue","imagedata","sampleX","sampleY","img","canvas","context","getContext","drawImage","getImageData","imgSrcData","Image","platSpec","bundleSpec","srcImage","fromCentre","newWidth","newHeight","maxDimension","destx","desty","srcCtx","addImageToBundle","resize","unsharpAmount","unsharpRadius","unsharpThreshold","then","destCanvas","sample","ctx","fillStyle","fillRect","imgSrcDataBase64","toDataURL","imgFolder","folder","imgDataBase64","replace","file","base64","generateAsync","content","saveAs","generatedManifest","itemSpec","images","size","filename","srcItemCategory","srcItemBlob","splashSrcData","reader","FileReader","addEventListener","srcData","iconImgData","readAsDataURL","numTasks","platformSpec","version","author","appendToManifest","JSON","stringify","srcItem","imgBundle","transformAndArchive","Math","round","$forceUpdate","alert","routes","component","router","createRouter","history","createWebHashHistory","createApp","App","use","mount"],"mappings":"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","file":"js/app.04d1741d.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"app\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"js/\" + ({\"about\":\"about\"}[chunkId]||chunkId) + \".\" + {\"about\":\"7c661913\"}[chunkId] + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","export * from \"-!../node_modules/mini-css-extract-plugin/dist/loader.js??ref--7-oneOf-1-0!../node_modules/css-loader/dist/cjs.js??ref--7-oneOf-1-1!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/stylePostLoader.js!../node_modules/postcss-loader/src/index.js??ref--7-oneOf-1-2!../node_modules/cache-loader/dist/cjs.js??ref--1-0!../node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/index.js??ref--1-1!./App.vue?vue&type=style&index=0&id=8d5697e0&lang=css\"","\n\n","import { render } from \"./App.vue?vue&type=template&id=8d5697e0\"\nconst script = {}\n\nimport \"./App.vue?vue&type=style&index=0&id=8d5697e0&lang=css\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n console.log('New content is available; please refresh.')\n },\n offline () {\n console.log('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, createStaticVNode as _createStaticVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\nimport _imports_0 from '@/assets/logo.png'\n\n\nconst _hoisted_1 = { class: \"container col-xxl-8 px-4 py-5\" }\nconst _hoisted_2 = /*#__PURE__*/_createStaticVNode(\"

Ape Tools

Don't Go Ape, Go Ape Tools.
Get apps done quicker.

Create all the required sizes of Icons and Splashscreens for your app instantly for all major platforms .

Generate Your Icons & Splashscreens

If you like this tool please share it with others: Share

\", 2)\nconst _hoisted_4 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"main\", _hoisted_1, _hoisted_4))\n}","\nimport \"bootstrap/dist/css/bootstrap.min.css\";\nimport { Options, Vue } from \"vue-class-component\";\n\n@Options({\n})\nexport default class Home extends Vue {}\n","import { render } from \"./Home.vue?vue&type=template&id=de0508a8&ts=true\"\nimport script from \"./Home.vue?vue&type=script&lang=ts\"\nexport * from \"./Home.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, normalizeStyle as _normalizeStyle, vModelCheckbox as _vModelCheckbox, withDirectives as _withDirectives, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, vModelText as _vModelText, createStaticVNode as _createStaticVNode } from \"vue\"\nimport _imports_0 from '@/assets/logo.png'\n\n\nconst _hoisted_1 = { class: \"container col-xxl-8 px-4 py-5\" }\nconst _hoisted_2 = { class: \"row\" }\nconst _hoisted_3 = { class: \"col-md-12\" }\nconst _hoisted_4 = /*#__PURE__*/_createStaticVNode(\"

Ape Tools - Image Gorilla

Tired of creating all your icons and splashscreen sizes manually? You've come to the right place.

Upload your Icons and/or Splashscreen and we'll do all the hard work to create the sizes you need for each platform:

Need to design a logo first? Try Logojoy

Want to quickly make some PNGs (or JPGs) tiny? Check out tinyPNG.App

Is it just too hard to manage your website certificates? See Certify the web

\", 7)\nconst _hoisted_11 = { class: \"row\" }\nconst _hoisted_12 = { class: \"col-md-6\" }\nconst _hoisted_13 = { class: \"panel panel-default\" }\nconst _hoisted_14 = { class: \"panel-body\" }\nconst _hoisted_15 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Step 1 - Select Your Icon\", -1)\nconst _hoisted_16 = { class: \"input-group file-upload\" }\nconst _hoisted_17 = /*#__PURE__*/_createElementVNode(\"p\", null, \" Select an Icon image in PNG format (transparency allowed) measuring 1024x1024 pixels. \", -1)\nconst _hoisted_18 = { class: \"col-md-6\" }\nconst _hoisted_19 = { class: \"panel panel-default\" }\nconst _hoisted_20 = { class: \"panel-body\" }\nconst _hoisted_21 = /*#__PURE__*/_createElementVNode(\"h3\", null, \"Step 2 - Select Your Splashscreen\", -1)\nconst _hoisted_22 = { class: \"input-group file-upload\" }\nconst _hoisted_23 = /*#__PURE__*/_createTextVNode(\" Select a Splashscreen image in PNG format (no transparency) measuring 4096*4096 pixels with the important stuff centred, we'll then resize from the centre outwards, sampling the top left corner colour as background. \")\nconst _hoisted_24 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"row\" }, [\n /*#__PURE__*/_createElementVNode(\"div\", { class: \"col-md-12\" })\n], -1)\nconst _hoisted_25 = { key: 0 }\nconst _hoisted_26 = /*#__PURE__*/_createElementVNode(\"h4\", {\n class: \"clearfix\",\n style: {\"clear\":\"left\"}\n}, \" Step 3 - Where the magic happens \", -1)\nconst _hoisted_27 = {\n key: 0,\n class: \"alert alert-info\"\n}\nconst _hoisted_28 = /*#__PURE__*/_createTextVNode(\" Ready to Punch It? \")\nconst _hoisted_29 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-thumbs-up\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_30 = /*#__PURE__*/_createTextVNode(\" Kapow! \")\nconst _hoisted_31 = [\n _hoisted_29,\n _hoisted_30\n]\nconst _hoisted_32 = [\"id\"]\nconst _hoisted_33 = /*#__PURE__*/_createElementVNode(\"label\", { for: \"checkbox\" }, \" show previews\", -1)\nconst _hoisted_34 = { key: 1 }\nconst _hoisted_35 = /*#__PURE__*/_createElementVNode(\"i\", {\n class: \"fa fa-spinner fa-spin fa-3x fa-fw\",\n \"aria-hidden\": \"true\"\n}, null, -1)\nconst _hoisted_36 = { class: \"progress\" }\nconst _hoisted_37 = { class: \"sr-only\" }\nconst _hoisted_38 = { key: 2 }\nconst _hoisted_39 = /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://apetools.webprofusion.com\",\n class: \"ms-2\"\n}, \"Try Again\", -1)\nconst _hoisted_40 = /*#__PURE__*/_createElementVNode(\"p\", null, \" We will generate an asset bundle you can download for the following platforms: \", -1)\nconst _hoisted_41 = { class: \"lead\" }\nconst _hoisted_42 = [\"id\", \"onUpdate:modelValue\"]\nconst _hoisted_43 = /*#__PURE__*/_createElementVNode(\"label\", { for: \"checkbox\" }, \" include in bundle \", -1)\nconst _hoisted_44 = { key: 0 }\nconst _hoisted_45 = { key: 0 }\nconst _hoisted_46 = [\"onUpdate:modelValue\"]\nconst _hoisted_47 = { class: \"list-group-item\" }\nconst _hoisted_48 = [\"src\"]\nconst _hoisted_49 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"well well-sm\" }, [\n /*#__PURE__*/_createElementVNode(\"p\", null, [\n /*#__PURE__*/_createTextVNode(\" We'd really appreciate it if you could tell others about this app: \"),\n /*#__PURE__*/_createElementVNode(\"a\", {\n href: \"https://twitter.com/share\",\n class: \"twitter-share-button\",\n \"data-url\": \"https://apetools.webprofusion.com\",\n \"data-text\": \"Check out Ape Tools, the quick way to generate all the icons and splash screens for your app:\",\n \"data-via\": \"webprofusion\"\n }, \"Share\")\n ])\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _hoisted_4,\n _createElementVNode(\"div\", _hoisted_11, [\n _createElementVNode(\"div\", _hoisted_12, [\n _createElementVNode(\"div\", _hoisted_13, [\n _createElementVNode(\"div\", _hoisted_14, [\n _hoisted_15,\n _createElementVNode(\"div\", _hoisted_16, [\n _createElementVNode(\"input\", {\n type: \"file\",\n accept: \"image/*\",\n id: \"fileupload-icon\",\n onChange: _cache[0] || (_cache[0] = ($event: any) => (_ctx.selectionChanged('icon', $event))),\n name: \"FileUploadIcon\"\n }, null, 32)\n ]),\n _hoisted_17\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_18, [\n _createElementVNode(\"div\", _hoisted_19, [\n _createElementVNode(\"div\", _hoisted_20, [\n _hoisted_21,\n _createElementVNode(\"div\", _hoisted_22, [\n _createElementVNode(\"input\", {\n type: \"file\",\n accept: \"image/*\",\n id: \"fileupload-splash\",\n onChange: _cache[1] || (_cache[1] = ($event: any) => (_ctx.selectionChanged('splash', $event))),\n name: \"FileUploadSplash\"\n }, null, 32)\n ]),\n _createElementVNode(\"p\", null, [\n _hoisted_23,\n _createElementVNode(\"span\", {\n class: \"sample-swatch\",\n style: _normalizeStyle(_ctx.sampleStyle)\n }, \" \", 4)\n ])\n ])\n ])\n ])\n ]),\n _hoisted_24,\n (_ctx.selectedIconFile || _ctx.selectedSplashFile)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_25, [\n _hoisted_26,\n (!_ctx.isProcessing && !_ctx.isArchiveReady)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_27, [\n _hoisted_28,\n _createElementVNode(\"button\", {\n type: \"button\",\n onClick: _cache[2] || (_cache[2] = \n//@ts-ignore\n(...args) => (_ctx.process && _ctx.process(...args))),\n class: \"btn btn-primary btn-lg\"\n }, _hoisted_31),\n _withDirectives(_createElementVNode(\"input\", {\n type: \"checkbox\",\n id: _ctx.showPreviews,\n \"onUpdate:modelValue\": _cache[3] || (_cache[3] = ($event: any) => ((_ctx.showPreviews) = $event))\n }, null, 8, _hoisted_32), [\n [_vModelCheckbox, _ctx.showPreviews]\n ]),\n _hoisted_33\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isProcessing)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_34, [\n _hoisted_35,\n _createTextVNode(\" \" + _toDisplayString(_ctx.msg) + \" \", 1),\n _createElementVNode(\"div\", _hoisted_36, [\n _createElementVNode(\"div\", {\n class: \"progress-bar\",\n role: \"progressbar\",\n \"aria-valuenow\": \"70\",\n \"aria-valuemin\": \"0\",\n \"aria-valuemax\": \"100\",\n style: _normalizeStyle({ width: _ctx.processingProgress + '%' })\n }, [\n _createElementVNode(\"span\", _hoisted_37, \"Processing \" + _toDisplayString(_ctx.processingProgress) + \"% Complete\", 1)\n ], 4)\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.isArchiveReady)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_38, [\n _createElementVNode(\"button\", {\n class: \"btn btn-success btn-lg\",\n onClick: _cache[4] || (_cache[4] = \n//@ts-ignore\n(...args) => (_ctx.downloadZip && _ctx.downloadZip(...args)))\n }, \" Download Zip \"),\n _hoisted_39\n ]))\n : _createCommentVNode(\"\", true),\n _hoisted_40,\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.allPlatforms, (platform) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: platform.id,\n style: {\"width\":\"300px\",\"min-height\":\"100px\",\"display\":\"inline-block\",\"border\":\"1px solid gainsboro\",\"box-shadow\":\"#c0c0c0 2px 2px\",\"padding\":\"1em\",\"margin\":\"1em\"}\n }, [\n _createElementVNode(\"h3\", null, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa fa-lg fa-fw\", platform.icon])\n }, null, 2),\n _createTextVNode(\" \" + _toDisplayString(platform.title), 1)\n ]),\n _createElementVNode(\"p\", _hoisted_41, _toDisplayString(platform.bundleSpecs.filter((f) => f.category == \"icon\")[0]\n .imageSet.length) + \" icon sizes, \" + _toDisplayString(platform.bundleSpecs.filter((f) => f.category == \"splash\")[0]\n .imageSet.length) + \" splashscreen sizes. \", 1),\n _withDirectives(_createElementVNode(\"input\", {\n type: \"checkbox\",\n id: platform.path,\n \"onUpdate:modelValue\": ($event: any) => ((platform.includeInBundle) = $event)\n }, null, 8, _hoisted_42), [\n [_vModelCheckbox, platform.includeInBundle]\n ]),\n _hoisted_43,\n (platform.includeInBundle)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_44, [\n _createElementVNode(\"p\", null, _toDisplayString(platform.instructions), 1),\n (_ctx.showPreviews)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_45, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(platform.bundleSpecs, (bundle) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n key: bundle.category\n }, [\n _createElementVNode(\"h2\", null, _toDisplayString(bundle.category), 1),\n _withDirectives(_createElementVNode(\"input\", {\n \"onUpdate:modelValue\": ($event: any) => ((bundle.prefix) = $event),\n placeholder: \"file name prefix\"\n }, null, 8, _hoisted_46), [\n [_vModelText, bundle.prefix]\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(bundle.imageSet, (fileSpec, i) => {\n return (_openBlock(), _createElementBlock(\"ul\", {\n class: \"list-group\",\n key: i\n }, [\n _createElementVNode(\"li\", _hoisted_47, [\n _createTextVNode(_toDisplayString(fileSpec.path) + \" \" + _toDisplayString(fileSpec.prefix) + \" \" + _toDisplayString(fileSpec.idiom) + \" \" + _toDisplayString(fileSpec.fileName) + \": \" + _toDisplayString(fileSpec.width * fileSpec.scale) + \"x\" + _toDisplayString(fileSpec.height * fileSpec.scale) + \" \", 1),\n (fileSpec.imgData)\n ? (_openBlock(), _createElementBlock(\"img\", {\n key: 0,\n src: fileSpec.imgData,\n style: {\"max-width\":\"200px\",\"max-height\":\"200px\"},\n class: \"img-thumbnail\"\n }, null, 8, _hoisted_48))\n : _createCommentVNode(\"\", true)\n ])\n ]))\n }), 128))\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]),\n _hoisted_49\n ])\n ]))\n}","export interface ILogger {\n info(msg: string): void;\n warn(msg: string): void;\n error(msg: string): void;\n}\n\nexport class Logger implements ILogger {\n\n info(msg: string): void {\n console.info(msg);\n }\n\n warn(msg: string): void {\n console.warn(msg);\n }\n\n error(msg: string): void {\n console.error(msg);\n }\n\n}\n","\nexport interface ImageSpec {\n fileName: string;\n path?: string | undefined | null;\n width: number;\n height: number;\n idiom?: string | undefined | null;\n scale: number | undefined | null;\n imgData?: string | null;\n}\n\nexport interface RGBA {\n r: number;\n g: number;\n b: number;\n a: number;\n}\n\nexport interface ImageDataSet {\n // base64 version of image\n imgSrcDataBase64: string;\n\n // img data version of image\n imgData: ImageData;\n}\n\nexport class FileSpec implements ImageSpec {\n constructor(\n public fileName: string,\n public width: number,\n public height: number,\n public path:string | undefined | null = null,\n public idiom:string | undefined | null = null,\n public scale: number | undefined | null = null,\n public orientation:string | undefined | null = null\n\n ) { }\n}\n\nexport interface BundleSpec {\n category: string;\n path: string | undefined |null;\n prefix?: string;\n imageSet: Array;\n manifest?: string | null;\n useAlpha: boolean;\n maintainAspectRatio: boolean;\n resizeFromCentre: boolean;\n}\n\nexport interface PlatformSpec {\n id: string;\n title: string;\n icon: string;\n path: string;\n instructions: string;\n bundleSpecs: Array;\n includeInBundle: boolean;\n}\n\nexport interface ExportSpec {\n platforms: Array;\n}\n","import { PlatformSpec, FileSpec } from './models';\n\nexport class PlatformFileSpecs {\n\n public static Specs(): Array {\n const allPlatforms = new Array();\n\n const iOS: PlatformSpec = {\n id: 'ios',\n path: 'iOS/',\n icon: 'fa-apple',\n title: 'iOS',\n instructions: 'Import into your Xcode project. Right-click Assets.xcassets, Show in finder. Drag and drop the contents of AppIcon.appiconset to replace the defaults. Note that launch images are no longer supported in iOS, instead you should use a Launch Screen storyboard.',\n includeInBundle: false,\n bundleSpecs:\n [\n {\n category: 'icon',\n path: 'AppIcon.appiconset',\n prefix: 'Icon',\n manifest: 'Contents.json',\n useAlpha: true,\n maintainAspectRatio: false,\n resizeFromCentre: false,\n imageSet: [\n new FileSpec('-20x20@1x.png', 20, 20, null, 'ipad', 1),\n new FileSpec('-20x20@2x.png', 20, 20, null, 'iphone', 2),\n new FileSpec('-20x20@3x.png', 20, 20, null, 'iphone', 3),\n new FileSpec('-29x29@1x.png', 29, 29, null, 'iphone', 1),\n new FileSpec('-29x29@2x.png', 29, 29, null, 'iphone', 2),\n new FileSpec('-29x29@3x.png', 29, 29, null, 'iphone', 3),\n new FileSpec('-40x40@2x.png', 40, 40, null, 'iphone', 2),\n new FileSpec('-40x40@3x.png', 40, 40, null, 'iphone', 3),\n new FileSpec('-60x60@2x.png', 60, 60, null, 'iphone', 2),\n new FileSpec('-60x60@3x.png', 60, 60, null, 'iphone', 3),\n new FileSpec('-76x76@1x.png', 76, 76, null, 'ipad', 1),\n new FileSpec('-76x76@2x.png', 76, 76, null, 'ipad', 2),\n new FileSpec('-83.5@2x.png', 167, 167, null, 'ipad', 1),\n new FileSpec('-marketing-1024x1024.png', 1024, 1024, null, 'ios-marketing', 1),\n ]\n },\n {\n category: 'splash',\n path: 'LaunchImage.launchimage',\n prefix: 'LaunchImage',\n useAlpha: false,\n maintainAspectRatio: true,\n resizeFromCentre: true,\n imageSet: [\n /* no longer supported in iOS */\n new FileSpec('~iphone-320x480.png', 320, 480, null, 'iphone', 1),\n new FileSpec('~iphone_640x960.png', 640, 960, null, 'iphone', 1),\n new FileSpec('-568h@2x~iphone_640x1136.png', 640, 1136, null, 'iphone', 1),\n new FileSpec('-Landscape~ipad_1024x748.png', 1024, 748, null, 'ipad', 1, 'landscape'),\n new FileSpec('-Landscape~ipad_1024x768.png', 1024, 768, null, 'ipad', 1, 'landscape'),\n new FileSpec('-Landscape@2x~ipad_2048x1496.png', 2048, 1496, null, 'ipad', 2, 'landscape'),\n new FileSpec('-Landscape@2x~ipad_2048x1536.png', 2048, 1536, null, 'ipad', 2, 'landscape'),\n new FileSpec('-Landscape@2x~ipad_2224x1668.png', 2224, 1668, null, 'ipad', 2, 'landscape'),\n new FileSpec('-Landscape@2x~ipad_2732x2048.png', 2732, 2048, null, 'ipad', 2, 'landscape'),\n new FileSpec('~ipad.png', 1536, 2008, null, 'ipad', 1, 'portrait'),\n new FileSpec('-Portrait@2x~ipad_1536x2048.png', 1536, 2048, null, 'ipad', 2, 'portrait'),\n new FileSpec('-Portrait@2x~ipad_1536x2008.png', 1536, 2008, null, 'ipad', 2, 'portrait'),\n new FileSpec('-Portrait@2x~ipad_1668x2224.png', 1668, 2224, null, 'ipad', 2, 'portrait'),\n new FileSpec('-Portrait@2x~ipad_2048x2732.png', 2048, 2732, null, 'ipad', 2, 'portrait'),\n new FileSpec('.png', 768, 1004, null, 'ipad', 1, 'portrait'),\n new FileSpec('-Portrait~ipad_768x1024.png', 768, 1024, null, 'ipad', 1, 'portrait'),\n new FileSpec('-750@2x~iphone6-portrait_750x1334.png', 750, 1334, null, 'iphone', 2, 'portrait'),\n new FileSpec('-750@2x~iphone6-landscape_1334x750.png', 1334, 750, null, 'iphone', 2, 'landscape'),\n new FileSpec('-1242@3x~iphone6s-portrait_1242x2208.png', 1242, 2208, null, 'iphone', 3, 'portrait'),\n new FileSpec('-1242@3x~iphone6s-landscape_2208x1242.png', 2208, 1242, null, 'iphone', 3, 'landscape'),\n new FileSpec('-1125@3x~iphoneX-portrait_1125x2436.png', 1125, 2436, null, 'iphone', 3, 'portrait'),\n new FileSpec('-2436@3x~iphoneX-landscape_2436x1125.png', 2436, 1125, null, 'iphone', 3, 'landscape'),\n new FileSpec('-1242@3x~iphoneXsMax-portrait_1242x2688.png', 1242, 2688, null, 'iphone', 3, 'portrait'),\n new FileSpec('-2688@3x~iphoneXsMax-landscape_2688x1242.png', 2688, 1242, null, 'iphone', 3, 'landscape'),\n new FileSpec('-828@2x~iphoneXr-portrait_828x1792.png', 828, 1792, null, 'iphone', 2, 'portrait'),\n new FileSpec('-1792@2x~iphoneXr-landscape_1792x828.png', 1792, 828, null, 'iphone', 2, 'landscape'),\n ]\n }\n ]\n };\n\n const ioniciOS: PlatformSpec = {\n id: 'ionic.ios',\n path: 'ionic/resources/ios/',\n icon: 'fa-apple',\n title: 'iOS (Ionic)',\n instructions: 'Copy to app root /resources/ios/',\n includeInBundle: false,\n bundleSpecs:\n [\n {\n category: 'icon',\n path: 'icon',\n prefix: 'icon',\n // manifest: 'Contents.json',\n useAlpha: true,\n maintainAspectRatio: false,\n resizeFromCentre: false,\n imageSet: [\n new FileSpec('.png', 57, 57),\n new FileSpec('@2x.png', 114, 114),\n new FileSpec('-20.png', 20, 20),\n new FileSpec('-24@2x.png', 48, 48),\n new FileSpec('-27.5@2x.png', 55, 55),\n new FileSpec('-40.png', 40, 40),\n new FileSpec('-40@2x.png', 80, 80),\n new FileSpec('-40@3x.png', 120, 120),\n new FileSpec('-44@2x.png', 88, 88),\n new FileSpec('-50.png', 50, 50),\n new FileSpec('-50@2x.png', 100, 100),\n new FileSpec('-60.png', 60, 60),\n new FileSpec('-60@2x.png', 120, 120),\n new FileSpec('-60@3x.png', 180, 180),\n new FileSpec('-72.png', 72, 72),\n new FileSpec('-72@2x.png', 144, 144),\n new FileSpec('-76.png', 76, 76),\n new FileSpec('-76@2x.png', 152, 152),\n new FileSpec('-83.5@2x.png', 167, 167),\n new FileSpec('-86@2x.png', 172, 172),\n new FileSpec('-98@2x.png', 196, 196),\n new FileSpec('-small.png', 29, 29),\n new FileSpec('-small@2x.png', 58, 58),\n new FileSpec('-small@3x.png', 87, 87),\n new FileSpec('-1024.png', 1024, 1024)\n\n ]\n },\n {\n category: 'splash',\n path: 'splash',\n prefix: 'Default',\n useAlpha: false,\n maintainAspectRatio: true,\n resizeFromCentre: true,\n imageSet: [\n new FileSpec('-568h@2x~iphone.png', 640, 1136),\n new FileSpec('-667h.png', 750, 1134),\n new FileSpec('-736h.png', 1242, 2208),\n new FileSpec('-Landscape-736h.png', 2208, 1242),\n new FileSpec('-Landscape@2x~ipad.png', 2048, 1536),\n new FileSpec('-Landscape@~ipadpro.png', 2732, 2048),\n new FileSpec('-Landscape~ipad.png', 1024, 768),\n new FileSpec('-Portrait@2x~ipad.png', 2048, 1536),\n new FileSpec('-Portrait@~ipadpro.png', 2732, 2048),\n new FileSpec('-Portrait~ipad.png', 1024, 768),\n new FileSpec('@2x~iphone.png', 960, 640),\n new FileSpec('~iphone.png', 480, 320),\n new FileSpec('@2x~universal~anyany.png', 2732, 2732),\n new FileSpec('@2x~ipad~anyany.png', 2732, 2732),\n new FileSpec('@2x~ipad~comany.png', 1278, 2732),\n new FileSpec('@2x~iphone~anyany.png', 1334, 1334),\n new FileSpec('@2x~iphone~comany.png', 750, 1334),\n new FileSpec('@2x~iphone~comcom.png', 1334, 750),\n new FileSpec('@3x~iphone~anyany.png', 2208, 2208),\n new FileSpec('@3x~iphone~anycom.png', 2208, 1242),\n new FileSpec('@3x~iphone~comany.png', 1242, 2208),\n new FileSpec('-2436h.png', 1125, 2436),\n new FileSpec('-Landscape-2436h.png', 2436, 1125),\n ]\n }\n ]\n };\n\n\n const android: PlatformSpec = {\n id: 'android',\n path: 'android',\n icon: 'fa-android',\n title: 'Android',\n instructions: 'Import into your Android Studio project',\n includeInBundle: false,\n bundleSpecs:\n [\n {\n category: 'icon',\n path: null,\n prefix: 'icon',\n useAlpha: true,\n maintainAspectRatio: false,\n resizeFromCentre: false,\n imageSet: [\n new FileSpec('.png', 96, 96, 'drawable'),\n new FileSpec('.png', 36, 36, 'drawable-ldpi'),\n new FileSpec('.png', 48, 48, 'drawable-mdpi'),\n new FileSpec('.png', 72, 72, 'drawable-hdpi'),\n new FileSpec('.png', 96, 96, 'drawable-xhdpi'),\n new FileSpec('.png', 144, 144, 'drawable-xxhdpi'),\n new FileSpec('.png', 192, 192, 'drawable-xxxhdpi')\n ]\n },\n {\n category: 'splash',\n path: null,\n prefix: 'screen',\n useAlpha: false,\n maintainAspectRatio: true,\n resizeFromCentre: true,\n imageSet: [\n new FileSpec('.png', 480, 800, 'drawable'),\n new FileSpec('.png', 800, 480, 'drawable-land'),\n new FileSpec('.png', 200, 320, 'drawable-ldpi'),\n new FileSpec('.png', 320, 200, 'drawable-land-ldpi'),\n new FileSpec('.png', 320, 480, 'drawable-mdpi'),\n new FileSpec('.png', 480, 320, 'drawable-land-mdpi'),\n new FileSpec('.png', 480, 800, 'drawable-hdpi'),\n new FileSpec('.png', 800, 480, 'drawable-land-hdpi'),\n new FileSpec('.png', 720, 1280, 'drawable-xhdpi'),\n new FileSpec('.png', 1280, 720, 'drawable-land-xhdpi'),\n new FileSpec('.png', 960, 1600, 'drawable-xxhdpi'),\n new FileSpec('.png', 1600, 960, 'drawable-land-xxhdpi'),\n new FileSpec('.png', 1280, 1920, 'drawable-xxxhdpi'),\n new FileSpec('.png', 1920, 1280, 'drawable-land-xxxhdpi'),\n ]\n }\n ]\n };\n\n\n const ionicAndroid: PlatformSpec = {\n id: 'ionic.android',\n path: 'ionic/resources/android',\n icon: 'fa-android',\n title: 'Android (Ionic)',\n instructions: 'Copy to app root /resources/android/',\n includeInBundle: false,\n bundleSpecs:\n [\n {\n category: 'icon',\n path: 'icon',\n prefix: 'drawable',\n useAlpha: true,\n maintainAspectRatio: false,\n resizeFromCentre: false,\n imageSet: [\n new FileSpec('.png', 96, 96),\n new FileSpec('-ldpi-icon.png', 36, 36),\n new FileSpec('-mdpi-icon.png', 48, 48),\n new FileSpec('-hdpi-icon.png', 72, 72),\n new FileSpec('-xhdpi-icon.png', 96, 96),\n new FileSpec('-xxhdpi-icon.png', 144, 144),\n new FileSpec('-xxxhdpi-icon.png', 192, 192)\n ]\n },\n {\n category: 'splash',\n path: 'splash',\n prefix: 'drawable',\n useAlpha: false,\n maintainAspectRatio: true,\n resizeFromCentre: true,\n imageSet: [\n new FileSpec('-port-screen.png', 480, 800),\n new FileSpec('-land-screen.png', 800, 480),\n new FileSpec('-port-ldpi-screen.png', 200, 320),\n new FileSpec('-land-ldpi-screen.png', 320, 200),\n new FileSpec('-port-mdpi-screen.png', 320, 480),\n new FileSpec('-land-mdpi-screen.png', 480, 320),\n new FileSpec('-port-hdpi-screen.png', 480, 800),\n new FileSpec('-land-hdpi-screen.png', 800, 480),\n new FileSpec('-port-xhdpi-screen.png', 720, 1280),\n new FileSpec('-land-xhdpi-screen.png', 1280, 720),\n new FileSpec('-port-xxhdpi-screen.png', 960, 1600),\n new FileSpec('-land-xxhdpi-screen.png', 1600, 960),\n new FileSpec('-port-xxxhdpi-screen.png', 1280, 1920),\n new FileSpec('-land-xxxhdpi-screen.png', 1920, 1280),\n ]\n }\n ]\n };\n\n\n const windowsStore: PlatformSpec = {\n id: 'windows',\n path: 'windows',\n icon: 'fa-windows',\n title: 'Windows Store',\n instructions: 'Import into your Visual Studio project',\n includeInBundle: false,\n bundleSpecs:\n [\n {\n category: 'icon',\n path: 'icons',\n prefix: 'icon',\n useAlpha: true,\n maintainAspectRatio: false,\n resizeFromCentre: false,\n imageSet: [\n new FileSpec('ApplicationIcon-16x16.png', 16, 16),\n new FileSpec('ApplicationIcon-24x24.png', 24, 24),\n new FileSpec('ApplicationIcon-30x30.png', 30, 30),\n new FileSpec('ApplicationIcon-32x32.png', 32, 32),\n new FileSpec('ApplicationIcon-42x42.png', 42, 42),\n new FileSpec('ApplicationIcon-48x48.png', 48, 48),\n new FileSpec('ApplicationIcon-50x50.png', 50, 50),\n new FileSpec('ApplicationIcon-54x54.png', 54, 54),\n new FileSpec('ApplicationIcon-70x70.png', 70, 70),\n new FileSpec('ApplicationIcon-90x90.png', 90, 90),\n new FileSpec('ApplicationIcon-150x150.png', 150, 150),\n new FileSpec('ApplicationIcon-120x120.png', 120, 120),\n new FileSpec('ApplicationIcon-210x210.png', 210, 210),\n new FileSpec('ApplicationIcon-256x256.png', 256, 256),\n new FileSpec('ApplicationIcon-270x270.png', 270, 270)\n ]\n },\n {\n category: 'splash',\n path: 'splashscreens',\n prefix: 'screen',\n useAlpha: false,\n maintainAspectRatio: true,\n resizeFromCentre: true,\n imageSet: [\n new FileSpec('Splashscreen-620x300.png', 620, 300),\n new FileSpec('Splashscreen-868x420.png', 868, 420),\n new FileSpec('Splashscreen-1116x540.png', 1116, 540),\n ]\n }\n ]\n };\n\n allPlatforms.push(android);\n allPlatforms.push(iOS);\n allPlatforms.push(ioniciOS);\n allPlatforms.push(ionicAndroid);\n allPlatforms.push(windowsStore);\n\n return allPlatforms;\n }\n}\n","\nimport { Options, Vue } from \"vue-class-component\";\nimport { Logger } from \"../util/log\";\nimport { saveAs } from \"file-saver\";\nimport JSZip from \"jszip\";\nimport pica from \"pica\";\nimport { setTimeout } from \"timers\";\nimport {\n PlatformSpec,\n RGBA,\n BundleSpec,\n ImageSpec,\n ImageDataSet,\n} from \"../models/models\";\n\nimport { PlatformFileSpecs } from \"./../models/platformFileSpecs\";\n\n@Options({})\nexport default class Tools extends Vue {\n protected logger: Logger = new Logger();\n\n msg = \"\";\n allPlatforms: Array = [];\n zipArchive: JSZip | undefined;\n itemsProcessed = 0;\n isArchiveReady = false;\n isProcessing = false;\n isCropSplashFromCentreMode = false;\n selectedIconFile: any = null;\n selectedSplashFile: any = null;\n processingProgress = 0;\n totalTasks = 0;\n showPreviews = false;\n\n iconSrcData: string | null = null;\n iconImgData: ImageData | undefined;\n splashSrcData: string | undefined;\n splashImgData: ImageData | undefined;\n splashColourSample: RGBA = { r: 0, g: 0, b: 0, a: 255 };\n\n pica = new pica({ features: [\"js\",\"wasm\"] });\n\n get sampleStyle(): string {\n return `background-color: rgb(${this.splashColourSample.r}, ${this.splashColourSample.g}, ${this.splashColourSample.b});`;\n }\n\n mounted() {\n if (!this.logger) this.logger = new Logger();\n\n this.allPlatforms = PlatformFileSpecs.Specs();\n\n // prepare new zip for archive\n this.zipArchive = new JSZip();\n }\n\n async selectionChanged(imageType: string, e: any) {\n // icon/splash changed\n\n if (imageType === \"splash\") {\n this.selectedSplashFile = e.target.files[0];\n\n // get image and sample it\n\n let result = await this.getSourceImageForProcessing(\n \"splash\",\n this.selectedSplashFile\n );\n this.splashImgData = result.imgData;\n\n // sample splash corner colour for canvas fill\n this.splashColourSample = this.samplePixelValue(\n this.splashImgData,\n 10,\n 10\n );\n }\n\n if (imageType === \"icon\") {\n this.selectedIconFile = e.target.files[0];\n }\n }\n\n samplePixelValue(\n imagedata: ImageData,\n sampleX: number,\n sampleY: number\n ): RGBA {\n // get pixelArray from imagedata object\n let data = imagedata.data;\n\n // image data is array of RGBA values (4 bytes). Pixel sample offset is Y value * width of image, plus X pixels across.\n let i = (sampleY * imagedata.width + sampleX) * 4;\n\n // get RGBA values\n let result: RGBA = {\n r: data[i],\n g: data[i + 1],\n b: data[i + 2],\n a: data[i + 3],\n };\n return result;\n }\n\n simpleImageResize(\n // eslint-disable-next-line no-undef\n img: CanvasImageSource,\n canvas: HTMLCanvasElement\n ): Promise {\n // resize the given image onto the destination canvas\n return new Promise((resolve, reject) => {\n let context = canvas.getContext(\"2d\");\n\n if (context != null) {\n context.drawImage(\n img,\n 0,\n 0,\n img.width as number,\n img.height as number,\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n\n setTimeout(() => {\n if (context != null) {\n let imgData = context.getImageData(\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n resolve(imgData);\n }\n }, 500);\n } else {\n reject();\n }\n });\n }\n\n getImageData(imgSrcData: string): Promise {\n return new Promise((resolve, reject) => {\n let canvas = document.createElement(\"canvas\");\n let context = canvas.getContext(\"2d\");\n\n if (canvas != null) {\n const img = new Image();\n\n img.onload = () => {\n canvas.width = img.width;\n canvas.height = img.height;\n context?.drawImage(img, 0, 0, img.width, img.height);\n setTimeout(() => {\n if (context != null) {\n let imgData = context.getImageData(\n 0,\n 0,\n canvas.width,\n canvas.height\n );\n resolve(imgData);\n }\n }, 500);\n\n return;\n };\n\n img.src = imgSrcData;\n } else {\n this.logger.warn(\"getImageData: Canvas is null\");\n reject();\n }\n });\n }\n\n transformAndArchive(\n platSpec: PlatformSpec,\n bundleSpec: BundleSpec,\n fileSpec: ImageSpec,\n srcImage: ImageDataSet,\n fromCentre: boolean\n ): Promise {\n return new Promise((resolve, reject) => {\n // create new canvas for our target image render\n let canvas = document.createElement(\"canvas\");\n\n let newWidth = fileSpec.width;\n let newHeight = fileSpec.height;\n\n if (fileSpec.scale != null) {\n newWidth = fileSpec.width * fileSpec.scale;\n newHeight = fileSpec.height * fileSpec.scale;\n }\n\n // TODO: for fixed aspect ratio, work out largest width or height\n // for resize from centre, sample corner value and fill canvas, then centre resized image in canvas\n canvas.width = newWidth;\n canvas.height = newHeight;\n\n let isPortrait = true;\n\n if (bundleSpec.maintainAspectRatio) {\n let aspectRatio = srcImage.imgData.width / srcImage.imgData.height;\n if (fileSpec.width > fileSpec.height) {\n // original height / original width * new width = new height\n // landscape aspect\n\n let maxDimension = fileSpec.height;\n canvas.width = maxDimension;\n canvas.height =\n (srcImage.imgData.height / srcImage.imgData.width) * maxDimension;\n } else {\n // portrait aspect\n // original width / original height * new height = new width\n isPortrait = true;\n let maxDimension = fileSpec.width;\n canvas.width =\n (srcImage.imgData.width / srcImage.imgData.height) * maxDimension;\n canvas.height = maxDimension;\n }\n }\n\n const img = new Image();\n\n img.onload = () => {\n // if image has no alpha, fill with background color based on sample\n this.logger.info(\n `resizing ${img.width} x ${img.height} to ${fileSpec.width} x ${fileSpec.height} canvas: ${canvas.width}x${canvas.height}`\n );\n\n // FIXME: no idea what this calculation should be (crop from center)\n if (this.isCropSplashFromCentreMode && bundleSpec.maintainAspectRatio) {\n // copy source image to a canvas, cropped from centre\n\n let destx = -(img.width / 2) + fileSpec.width / 2;\n let desty = -(img.height / 2) + fileSpec.height / 2;\n\n let srcCtx = canvas.getContext(\"2d\");\n if (srcCtx != null) {\n srcCtx.drawImage(img, destx, desty);\n\n this.logger.info(\n `crop from centre: fileSpec ${fileSpec.width}x${fileSpec.height} ': Src img: ${srcImage.imgData.width}x${srcImage.imgData.height} , Src Canvas ${canvas.width} x ${canvas.height} destX:${destx}, destY:${desty}`\n );\n\n this.addImageToBundle(canvas, fileSpec, platSpec, bundleSpec);\n\n return resolve(true);\n } else {\n reject(\"Invalid context\");\n }\n } else {\n // resize to fit\n\n this.pica\n .resize(img, canvas, {\n unsharpAmount: 160,\n unsharpRadius: 0.6,\n unsharpThreshold: 1,\n // alpha: bundleSpec.useAlpha,\n })\n\n .then(\n () => {\n if (bundleSpec.maintainAspectRatio) {\n let destCanvas = document.createElement(\"canvas\");\n destCanvas.width = fileSpec.width;\n destCanvas.height = fileSpec.height;\n\n let sample: RGBA = this.splashColourSample;\n\n let ctx = destCanvas.getContext(\"2d\");\n if (ctx != null) {\n ctx.fillStyle =\n \"rgb(\" + sample.r + \",\" + sample.g + \",\" + sample.b + \")\";\n ctx.fillRect(0, 0, destCanvas.width, destCanvas.height);\n // centre destination coord to draw image to\n let destx = (destCanvas.width - canvas.width) / 2;\n let desty = (destCanvas.height - canvas.height) / 2;\n if (destx < 0) destx = 0;\n if (desty < 0) desty = 0;\n\n this.logger.info(\n `fileSpec ${fileSpec.width}x${fileSpec.height} : Src img: ${srcImage.imgData.width}x${srcImage.imgData.height} , Src Canvas ${canvas.width} x ${canvas.height} Dest: ${destCanvas.width} x ${destCanvas.height} destX:${destx}, destY:${desty}`\n );\n ctx.drawImage(canvas, destx, desty);\n canvas = destCanvas;\n }\n }\n\n this.addImageToBundle(canvas, fileSpec, platSpec, bundleSpec);\n\n return resolve(true);\n },\n () => {\n return reject(\"Resize failed\");\n }\n );\n }\n };\n\n // trigger image load for source image, which then triggers processing onload\n img.src = srcImage.imgSrcDataBase64;\n });\n }\n\n addImageToBundle(\n canvas: HTMLCanvasElement,\n fileSpec: ImageSpec,\n platSpec: PlatformSpec,\n bundleSpec: BundleSpec\n ): void {\n \n this.logger.info(\"resize done, adding to bundle.\");\n\n // take generated image and archive it in our bundle\n let imgData = canvas.toDataURL(\"image/png\");\n\n fileSpec.imgData = imgData;\n if (this.zipArchive != null) {\n let imgFolder: JSZip | null | undefined =\n this.zipArchive.folder(\"bundle\");\n\n imgFolder = imgFolder?.folder(platSpec.path) ?? null;\n if (imgFolder != null) {\n if (bundleSpec.path) imgFolder = imgFolder.folder(bundleSpec.path);\n if (fileSpec.path) imgFolder = imgFolder?.folder(fileSpec.path);\n\n let imgDataBase64 = imgData.replace(\n /^data:image\\/(png|jpg);base64,/,\n \"\"\n );\n\n // add file to zip folder\n imgFolder?.file(bundleSpec.prefix + fileSpec.fileName, imgDataBase64, {\n base64: true,\n });\n } else {\n this.logger.warn(\"Bundle image folder is null\");\n }\n } else {\n this.logger.warn(\"Zip archive is null\");\n }\n }\n\n downloadZip() : void {\n this.zipArchive?.generateAsync({ type: \"blob\" }).then((content) => {\n // see FileSaver.js\n saveAs(content, \"ApeToolsGeneratedAssets.zip\");\n });\n }\n\n appendToManifest(\n generatedManifest: any,\n bundleSpec: BundleSpec,\n itemSpec: ImageSpec\n ) : void {\n generatedManifest.images.push({\n idiom: itemSpec.idiom,\n size: itemSpec.width + \"x\" + itemSpec.height,\n scale: itemSpec.scale + \"x\",\n filename: bundleSpec.prefix + itemSpec.fileName,\n });\n }\n\n getSourceImageForProcessing(\n srcItemCategory: string,\n srcItemBlob: any\n ): Promise {\n let promise = new Promise((resolve, reject) => {\n if (srcItemCategory === \"icon\" && this.iconSrcData != null) {\n resolve({\n imgSrcDataBase64: this.iconSrcData,\n imgData: this.iconImgData,\n });\n return;\n }\n\n if (srcItemCategory === \"splash\" && this.splashSrcData != null) {\n resolve({\n imgSrcDataBase64: this.splashSrcData,\n imgData: this.splashImgData,\n });\n return;\n }\n\n // not got cached values, read image data blob and process\n\n let reader = new FileReader();\n\n reader.addEventListener(\n \"load\",\n () => {\n let srcData = reader.result as string;\n\n // use setTimeout to allow image time to complete load, otherwise reading image data doesn't always work\n setTimeout(() => {\n return this.getImageData(srcData).then((imgData) => {\n // cache values\n if (srcItemCategory === \"icon\") {\n this.iconSrcData = srcData;\n this.iconImgData = imgData;\n }\n\n if (srcItemCategory === \"splash\") {\n this.splashSrcData = srcData;\n this.splashImgData = imgData;\n }\n\n resolve({\n imgSrcDataBase64: srcData,\n imgData: imgData,\n });\n return;\n });\n }, 500);\n },\n false\n );\n\n // fire above load event for file\n reader.readAsDataURL(srcItemBlob);\n });\n\n return promise;\n }\n\n async process() : Promise {\n this.msg = \"Processing..\";\n this.logger.info(\"Begin processing..\");\n this.isProcessing = true;\n this.isArchiveReady = false;\n let numTasks = 0;\n\n // compute total number of tasks to perform and compile manifests if required\n for (let platformSpec of this.allPlatforms) {\n if (platformSpec.includeInBundle) {\n for (let bundleSpec of platformSpec.bundleSpecs) {\n let generatedManifest: any = null;\n\n // optionally generate a manifest file\n if (bundleSpec.manifest != null && platformSpec.id === \"ios\") {\n generatedManifest = {\n images: [],\n info: { version: 1, author: \"apetools.webprofusion.com\" },\n };\n }\n\n for (let itemSpec of bundleSpec.imageSet) {\n if (\n (bundleSpec.category === \"icon\" && this.selectedIconFile) ||\n (bundleSpec.category === \"splash\" && this.selectedSplashFile)\n ) {\n if (generatedManifest)\n this.appendToManifest(generatedManifest, bundleSpec, itemSpec);\n numTasks++;\n }\n }\n\n if (bundleSpec.manifest != null) {\n bundleSpec.manifest = generatedManifest;\n this.logger.info(JSON.stringify(bundleSpec.manifest));\n }\n }\n }\n }\n\n this.totalTasks = numTasks;\n\n this.logger.info(`Generating ${this.totalTasks} assets for bundle..`);\n\n if (this.totalTasks > 0) {\n // process the images for each platform\n this.processingProgress = 0;\n\n // cache image data\n if (this.selectedIconFile)\n await this.getSourceImageForProcessing(\"icon\", this.selectedIconFile);\n if (this.selectedSplashFile) {\n await this.getSourceImageForProcessing(\n \"splash\",\n this.selectedSplashFile\n );\n\n // sample splash corner colour for canvas fill\n // this.splashColourSample = this.samplePixelValue(this.splashImgData, 0, 0);\n }\n\n for (let platformSpec of this.allPlatforms) {\n if (platformSpec.includeInBundle) {\n for (let bundleSpec of platformSpec.bundleSpecs) {\n for (let itemSpec of bundleSpec.imageSet) {\n let srcItem: any = null;\n let fromCentre = false;\n\n if (bundleSpec.category === \"icon\") {\n srcItem = this.selectedIconFile;\n }\n\n if (bundleSpec.category === \"splash\") {\n srcItem = this.selectedSplashFile;\n }\n if (srcItem != null) {\n setTimeout(async () => {\n await this.getSourceImageForProcessing(\n bundleSpec.category,\n srcItem\n ).then((imgBundle: ImageDataSet) => {\n this.transformAndArchive(\n platformSpec,\n bundleSpec,\n itemSpec,\n imgBundle,\n fromCentre\n ).then(() => {\n this.itemsProcessed++;\n\n this.processingProgress = Math.round(\n (this.itemsProcessed / this.totalTasks) * 100\n );\n this.msg = \"Processing \" + this.processingProgress + \"%\";\n this.logger.info(this.msg);\n if (this.processingProgress === 100) {\n this.isArchiveReady = true;\n this.isProcessing = false;\n }\n\n // ask vue to re-render\n this.$forceUpdate();\n });\n });\n }, 1000);\n }\n }\n\n // optionally include generated manifest in archiver\n if (bundleSpec.manifest) {\n // append manifest to archive\n let imgFolder = this.zipArchive?.folder(\"bundle\");\n if (imgFolder != null) {\n imgFolder = imgFolder.folder(platformSpec.path);\n imgFolder = imgFolder?.folder(bundleSpec.path as string);\n imgFolder?.file(\n \"Contents.json\",\n JSON.stringify(bundleSpec.manifest, null, \"\\t\")\n );\n }\n }\n }\n }\n }\n\n this.logger.info(`Bundle generation completed.`);\n } else {\n this.logger.info(\"Nothing to do..\");\n this.isProcessing = false;\n\n alert(\n \"The apes are bored, there's nothing to do. \\nMaybe set an icon or splashscreen and check a few platforms?\"\n );\n }\n }\n}\n","import { render } from \"./Tools.vue?vue&type=template&id=13ead288&ts=true\"\nimport script from \"./Tools.vue?vue&type=script&lang=ts\"\nexport * from \"./Tools.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/buildhome/repo/node_modules/@vue/cli-service/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'\nimport Home from '../views/Home.vue'\nimport Tools from '../views/Tools.vue'\n\nconst routes: Array = [\n {\n path: '/',\n name: 'Home',\n component: Home\n },\n {\n path: '/tools/imagegorilla',\n name: 'Tools',\n component: Tools\n },\n {\n path: '/about',\n name: 'About',\n // route level code-splitting\n // this generates a separate chunk (about.[hash].js) for this route\n // which is lazy-loaded when the route is visited.\n component: () => import(/* webpackChunkName: \"about\" */ '../views/About.vue')\n }\n]\n\nconst router = createRouter({\n history: createWebHashHistory(),\n routes\n})\n\nexport default router\n","import { createApp } from 'vue'\nimport App from './App.vue'\nimport './registerServiceWorker'\nimport router from './router'\n\ncreateApp(App).use(router).mount('#app')\n","module.exports = __webpack_public_path__ + \"img/logo.d891a6e7.png\";"],"sourceRoot":""}