@jeremyckahn/farmhand 1.24.2 → 1.24.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/assets/index-DLWjlzPN.js +413 -0
  2. package/dist/assets/{index-C9kG86vs.js.map → index-DLWjlzPN.js.map} +1 -1
  3. package/dist/assets/workbox-window.prod.es5-Bd17z0YL.js.map +1 -1
  4. package/dist/index.html +2 -13
  5. package/dist/service-worker.js +1 -1
  6. package/dist/service-worker.js.map +1 -1
  7. package/package.json +3 -3
  8. package/src/components/CowPen/Cow.tsx +50 -6
  9. package/src/game-logic/reducers/changeCowAutomaticHugState.test.ts +18 -0
  10. package/src/img/animals/cows/cow-variation-1-blinking.piskel +1 -0
  11. package/src/img/animals/cows/cow-variation-1-blinking.png +0 -0
  12. package/src/img/animals/cows/cow-variation-2-blinking.piskel +1 -0
  13. package/src/img/animals/cows/cow-variation-2-blinking.png +0 -0
  14. package/src/img/animals/cows/cow-variation-3-blinking.piskel +1 -0
  15. package/src/img/animals/cows/cow-variation-3-blinking.png +0 -0
  16. package/src/img/animals/cows/cow-variation-4-blinking.piskel +1 -0
  17. package/src/img/animals/cows/cow-variation-4-blinking.png +0 -0
  18. package/src/img/animals/cows/cow-variation-5-blinking.piskel +1 -0
  19. package/src/img/animals/cows/cow-variation-5-blinking.png +0 -0
  20. package/src/img/animals/cows/cow-variation-6-blinking.piskel +1 -0
  21. package/src/img/animals/cows/cow-variation-6-blinking.png +0 -0
  22. package/src/img/animals/cows/cow-variation-7-blinking.piskel +1 -0
  23. package/src/img/animals/cows/cow-variation-7-blinking.png +0 -0
  24. package/src/img/animals/cows/rainbow-cow-blinking.piskel +1 -0
  25. package/src/img/animals/cows/rainbow-cow-blinking.png +0 -0
  26. package/src/img/index.ts +21 -0
  27. package/src/utils/__snapshots__/getCowImage.test.ts.snap +2 -0
  28. package/src/utils/findCowById.ts +4 -6
  29. package/src/utils/getCowImage.test.ts +14 -0
  30. package/src/utils/getCowImage.ts +20 -6
  31. package/dist/assets/index-C9kG86vs.js +0 -413
@@ -1 +1 @@
1
- {"version":3,"file":"workbox-window.prod.es5-Bd17z0YL.js","names":[],"sources":["../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.4.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function r(n,t,r){return t&&function(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,o(e.key),e)}}(n.prototype,t),Object.defineProperty(n,\"prototype\",{writable:!1}),n}function e(n,r){var e=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if(\"string\"==typeof n)return t(n,r);var e={}.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?t(n,r):void 0}}(n))||r){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(n,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},i(n,t)}function o(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t);if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}try{self[\"workbox:core:7.4.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function e(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=e).prototype=Object.create(s.prototype),o.prototype.constructor=o,i(o,s);var l=e.prototype;return l.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},l.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},l.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},l.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},l.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},l.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},l.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},r(e,[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"workbox-window.prod.es5-Bd17z0YL.js","names":["n","e","r","o","u","a","f","s","v","h","l"],"sources":["../../node_modules/workbox-window/build/workbox-window.prod.es5.mjs"],"sourcesContent":["try{self[\"workbox:window:7.4.0\"]&&_()}catch(n){}function n(n,t){return new Promise((function(r){var e=new MessageChannel;e.port1.onmessage=function(n){r(n.data)},n.postMessage(t,[e.port2])}))}function t(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function r(n,t,r){return t&&function(n,t){for(var r=0;r<t.length;r++){var e=t[r];e.enumerable=e.enumerable||!1,e.configurable=!0,\"value\"in e&&(e.writable=!0),Object.defineProperty(n,o(e.key),e)}}(n.prototype,t),Object.defineProperty(n,\"prototype\",{writable:!1}),n}function e(n,r){var e=\"undefined\"!=typeof Symbol&&n[Symbol.iterator]||n[\"@@iterator\"];if(e)return(e=e.call(n)).next.bind(e);if(Array.isArray(n)||(e=function(n,r){if(n){if(\"string\"==typeof n)return t(n,r);var e={}.toString.call(n).slice(8,-1);return\"Object\"===e&&n.constructor&&(e=n.constructor.name),\"Map\"===e||\"Set\"===e?Array.from(n):\"Arguments\"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?t(n,r):void 0}}(n))||r){e&&(n=e);var i=0;return function(){return i>=n.length?{done:!0}:{done:!1,value:n[i++]}}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}function i(n,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(n,t){return n.__proto__=t,n},i(n,t)}function o(n){var t=function(n,t){if(\"object\"!=typeof n||!n)return n;var r=n[Symbol.toPrimitive];if(void 0!==r){var e=r.call(n,t);if(\"object\"!=typeof e)return e;throw new TypeError(\"@@toPrimitive must return a primitive value.\")}return String(n)}(n,\"string\");return\"symbol\"==typeof t?t:t+\"\"}try{self[\"workbox:core:7.4.0\"]&&_()}catch(n){}var u=function(){var n=this;this.promise=new Promise((function(t,r){n.resolve=t,n.reject=r}))};function a(n,t){var r=location.href;return new URL(n,r).href===new URL(t,r).href}var c=function(n,t){this.type=n,Object.assign(this,t)};function f(n,t,r){return n&&n.then||(n=Promise.resolve(n)),t?n.then(t):n}function s(){}var v={type:\"SKIP_WAITING\"};function h(n,t){return n&&n.then?n.then(s):Promise.resolve()}var l=function(t){function e(n,r){var e,i;return void 0===r&&(r={}),(e=t.call(this)||this).nn={},e.tn=0,e.rn=new u,e.en=new u,e.on=new u,e.un=0,e.an=new Set,e.cn=function(){var n=e.fn,t=n.installing;e.tn>0||!a(t.scriptURL,e.sn.toString())||performance.now()>e.un+6e4?(e.vn=t,n.removeEventListener(\"updatefound\",e.cn)):(e.hn=t,e.an.add(t),e.rn.resolve(t)),++e.tn,t.addEventListener(\"statechange\",e.ln)},e.ln=function(n){var t=e.fn,r=n.target,i=r.state,o=r===e.vn,u={sw:r,isExternal:o,originalEvent:n};!o&&e.mn&&(u.isUpdate=!0),e.dispatchEvent(new c(i,u)),\"installed\"===i?e.wn=self.setTimeout((function(){\"installed\"===i&&t.waiting===r&&e.dispatchEvent(new c(\"waiting\",u))}),200):\"activating\"===i&&(clearTimeout(e.wn),o||e.en.resolve(r))},e.yn=function(n){var t=e.hn,r=t!==navigator.serviceWorker.controller;e.dispatchEvent(new c(\"controlling\",{isExternal:r,originalEvent:n,sw:t,isUpdate:e.mn})),r||e.on.resolve(t)},e.gn=(i=function(n){var t=n.data,r=n.ports,i=n.source;return f(e.getSW(),(function(){e.an.has(i)&&e.dispatchEvent(new c(\"message\",{data:t,originalEvent:n,ports:r,sw:i}))}))},function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];try{return Promise.resolve(i.apply(this,n))}catch(n){return Promise.reject(n)}}),e.sn=n,e.nn=r,navigator.serviceWorker.addEventListener(\"message\",e.gn),e}var o,s;s=t,(o=e).prototype=Object.create(s.prototype),o.prototype.constructor=o,i(o,s);var l=e.prototype;return l.register=function(n){var t=(void 0===n?{}:n).immediate,r=void 0!==t&&t;try{var e=this;return f(function(n,t){var r=n();if(r&&r.then)return r.then(t);return t(r)}((function(){if(!r&&\"complete\"!==document.readyState)return h(new Promise((function(n){return window.addEventListener(\"load\",n)})))}),(function(){return e.mn=Boolean(navigator.serviceWorker.controller),e.dn=e.pn(),f(e.bn(),(function(n){e.fn=n,e.dn&&(e.hn=e.dn,e.en.resolve(e.dn),e.on.resolve(e.dn),e.dn.addEventListener(\"statechange\",e.ln,{once:!0}));var t=e.fn.waiting;return t&&a(t.scriptURL,e.sn.toString())&&(e.hn=t,Promise.resolve().then((function(){e.dispatchEvent(new c(\"waiting\",{sw:t,wasWaitingBeforeRegister:!0}))})).then((function(){}))),e.hn&&(e.rn.resolve(e.hn),e.an.add(e.hn)),e.fn.addEventListener(\"updatefound\",e.cn),navigator.serviceWorker.addEventListener(\"controllerchange\",e.yn),e.fn}))})))}catch(n){return Promise.reject(n)}},l.update=function(){try{return this.fn?f(h(this.fn.update())):f()}catch(n){return Promise.reject(n)}},l.getSW=function(){return void 0!==this.hn?Promise.resolve(this.hn):this.rn.promise},l.messageSW=function(t){try{return f(this.getSW(),(function(r){return n(r,t)}))}catch(n){return Promise.reject(n)}},l.messageSkipWaiting=function(){this.fn&&this.fn.waiting&&n(this.fn.waiting,v)},l.pn=function(){var n=navigator.serviceWorker.controller;return n&&a(n.scriptURL,this.sn.toString())?n:void 0},l.bn=function(){try{var n=this;return f(function(n,t){try{var r=n()}catch(n){return t(n)}if(r&&r.then)return r.then(void 0,t);return r}((function(){return f(navigator.serviceWorker.register(n.sn,n.nn),(function(t){return n.un=performance.now(),t}))}),(function(n){throw n})))}catch(n){return Promise.reject(n)}},r(e,[{key:\"active\",get:function(){return this.en.promise}},{key:\"controlling\",get:function(){return this.on.promise}}])}(function(){function n(){this.Pn=new Map}var t=n.prototype;return t.addEventListener=function(n,t){this.jn(n).add(t)},t.removeEventListener=function(n,t){this.jn(n).delete(t)},t.dispatchEvent=function(n){n.target=this;for(var t,r=e(this.jn(n.type));!(t=r()).done;){(0,t.value)(n)}},t.jn=function(n){return this.Pn.has(n)||this.Pn.set(n,new Set),this.Pn.get(n)},n}());export{l as Workbox,c as WorkboxEvent,n as messageSW};\n//# sourceMappingURL=workbox-window.prod.es5.mjs.map\n"],"ignoreList":[0],"mappings":"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"}
package/dist/index.html CHANGED
@@ -33,18 +33,7 @@
33
33
  href="./app-icons/ios-appicon-180-180.png"
34
34
  />
35
35
  <title>Farmhand</title>
36
- <style>
37
- html {
38
- background-color: #666;
39
- /* This is the data URI for the Rainbow Cow. 🌈🐮 */
40
- background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACNUlEQVRoge2YPW7CMBTH/w+hIgTXQB1yCy6R3oA5GwzpwsIWqVtvUE7QjVtk4B4smV6HxE7i70BIK9U/yRLE9vuwn99zAkQikUgkEolEIr8FTaCDR9BplfGoA6rgUIRe33zyjKGhDvSE7XmnDTjhoxG98Au7bQEAh9VGnx8mg2ZeLY0u3L/aZoGN8U5yv0qfA1bDgwywCS0S0PoimwYt6nYklxMEAHOXnrstBACuWmO6j4sElJVgbsUTURuOtND6kHPtjOHM2nbAafyg1edKriIXSa+LHEfQ1dfF5MB4xk+A6sAkxnORyBXuhQ8AcNXr8x3k7hkYx3g19Ymz4JB30DqbOe8vXnXCAYalaKhx6+JEn/rDgHrwCNYsNMRwwGL8BGiHmItksPGhUFaOLjO0Ev9ZXIVsMvrh1/ktMpCliAG6A0RZyc8KIaAOIyFfXCP4fDaPTf3FbA6A+bYFrS8iEz2XnEEZAVkpDac0BQDvfxMzAKDV98N2ma7WPXLuFSXbqptoxhrrVB1CtPC9OASx5119n1dzv6eaqs4McW6GNmy08KGsvC/1cdVvHkwh4gqbLt4sxOdzLSwrx7vI5QxKSa601KHoFTR9QVnIiFCgvnzseWOZYeHY2rDEFZS+SvmmsOk4NSi5MBcJc5GItzHZOs/k2IFNzlviyktcQ8dbCdkBaoy39Y0BAeCvxuY32AuXyv+5SjzjIqbydseGmmaYvoKN8XXtKTpCd2CKT5BT6IhEIpGR+QG4Bej6ikQYYQAAAABJRU5ErkJggg==');
41
- background-position: center;
42
- background-repeat: no-repeat;
43
- background-size: 200px;
44
- height: 100vh;
45
- image-rendering: pixelated;
46
- }
47
- </style>
36
+ <style>html{height:100vh;image-rendering:pixelated;background-color:#666;background-image:url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACNUlEQVRoge2YPW7CMBTH/w+hIgTXQB1yCy6R3oA5GwzpwsIWqVtvUE7QjVtk4B4smV6HxE7i70BIK9U/yRLE9vuwn99zAkQikUgkEolEIr8FTaCDR9BplfGoA6rgUIRe33zyjKGhDvSE7XmnDTjhoxG98Au7bQEAh9VGnx8mg2ZeLY0u3L/aZoGN8U5yv0qfA1bDgwywCS0S0PoimwYt6nYklxMEAHOXnrstBACuWmO6j4sElJVgbsUTURuOtND6kHPtjOHM2nbAafyg1edKriIXSa+LHEfQ1dfF5MB4xk+A6sAkxnORyBXuhQ8AcNXr8x3k7hkYx3g19Ymz4JB30DqbOe8vXnXCAYalaKhx6+JEn/rDgHrwCNYsNMRwwGL8BGiHmItksPGhUFaOLjO0Ev9ZXIVsMvrh1/ktMpCliAG6A0RZyc8KIaAOIyFfXCP4fDaPTf3FbA6A+bYFrS8iEz2XnEEZAVkpDac0BQDvfxMzAKDV98N2ma7WPXLuFSXbqptoxhrrVB1CtPC9OASx5119n1dzv6eaqs4McW6GNmy08KGsvC/1cdVvHkwh4gqbLt4sxOdzLSwrx7vI5QxKSa601KHoFTR9QVnIiFCgvnzseWOZYeHY2rDEFZS+SvmmsOk4NSi5MBcJc5GItzHZOs/k2IFNzlviyktcQ8dbCdkBaoy39Y0BAeCvxuY32AuXyv+5SjzjIqbydseGmmaYvoKN8XXtKTpCd2CKT5BT6IhEIpGR+QG4Bej6ikQYYQAAAABJRU5ErkJggg==);background-position:50%;background-repeat:no-repeat;background-size:200px}</style>
48
37
  <script>
49
38
  ;(function() {
50
39
  const analyticsID = {
@@ -75,7 +64,7 @@
75
64
  gtag('config', analyticsID)
76
65
  })()
77
66
  </script>
78
- <script type="module" crossorigin src="./assets/index-C9kG86vs.js"></script>
67
+ <script type="module" crossorigin src="./assets/index-DLWjlzPN.js"></script>
79
68
  <link rel="stylesheet" crossorigin href="./assets/index-CaYdR-lC.css">
80
69
  <link rel="manifest" href="./manifest.webmanifest"></head>
81
70
  <body>
@@ -1,3 +1,3 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const l=e=>i(e,r),t={module:{uri:r},exports:d,require:l};s[r]=Promise.all(n.map(e=>t[e]||l(e))).then(e=>(o(...e),d))}}define(["./workbox-2fbc6a65"],function(e){"use strict";self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.precacheAndRoute([{url:"index.html",revision:"f5ce8c2d4c7358bc1ce3bb4838506540"},{url:"electron.js",revision:"b0456826f47539f6c1957c3add5eb959"},{url:"assets/workbox-window.prod.es5-Bd17z0YL.js",revision:null},{url:"assets/index-CaYdR-lC.css",revision:null},{url:"assets/index-C9kG86vs.js",revision:null},{url:"favicon.ico",revision:"445bb19d4a8fd46eb433dd43cbdce691"},{url:"logo192.png",revision:"70746d790b8990639d1390337d77d81a"},{url:"logo512.png",revision:"b044ab46b3f33f0e2d313d961bf1f654"},{url:"logoMaskable.png",revision:"23be58ccf16df9f43658aad3da30056d"},{url:"manifest.webmanifest",revision:"3ad071a00582451c9cdeb827b37b9ebe"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,o)=>{const r=e||("document"in self?document.currentScript.src:"")||location.href;if(s[r])return;let d={};const l=e=>i(e,r),t={module:{uri:r},exports:d,require:l};s[r]=Promise.all(n.map(e=>t[e]||l(e))).then(e=>(o(...e),d))}}define(["./workbox-2fbc6a65"],function(e){"use strict";self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.precacheAndRoute([{url:"index.html",revision:"8f8d236a8c18f5f3cbcebcd2e52fdb65"},{url:"electron.js",revision:"b0456826f47539f6c1957c3add5eb959"},{url:"assets/workbox-window.prod.es5-Bd17z0YL.js",revision:null},{url:"assets/index-DLWjlzPN.js",revision:null},{url:"assets/index-CaYdR-lC.css",revision:null},{url:"favicon.ico",revision:"445bb19d4a8fd46eb433dd43cbdce691"},{url:"logo192.png",revision:"70746d790b8990639d1390337d77d81a"},{url:"logo512.png",revision:"b044ab46b3f33f0e2d313d961bf1f654"},{url:"logoMaskable.png",revision:"23be58ccf16df9f43658aad3da30056d"},{url:"manifest.webmanifest",revision:"3ad071a00582451c9cdeb827b37b9ebe"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});
2
2
  //# sourceMappingURL=service-worker.js.map
3
3
  //# sourceMappingURL=service-worker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"service-worker.js","sources":["../../../../../tmp/5a47feca681fd14fa867c579d860224e/service-worker.js"],"sourcesContent":["import {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"index.html\",\n \"revision\": \"f5ce8c2d4c7358bc1ce3bb4838506540\"\n },\n {\n \"url\": \"electron.js\",\n \"revision\": \"b0456826f47539f6c1957c3add5eb959\"\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-Bd17z0YL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-CaYdR-lC.css\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-C9kG86vs.js\",\n \"revision\": null\n },\n {\n \"url\": \"favicon.ico\",\n \"revision\": \"445bb19d4a8fd46eb433dd43cbdce691\"\n },\n {\n \"url\": \"logo192.png\",\n \"revision\": \"70746d790b8990639d1390337d77d81a\"\n },\n {\n \"url\": \"logo512.png\",\n \"revision\": \"b044ab46b3f33f0e2d313d961bf1f654\"\n },\n {\n \"url\": \"logoMaskable.png\",\n \"revision\": \"23be58ccf16df9f43658aad3da30056d\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"3ad071a00582451c9cdeb827b37b9ebe\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();workbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"index.html\")));\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL"],"mappings":"inBAmBAA,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBASTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAA,GACHC,EAAAA,wBAA2CC,EAAAA,cAA8B,IAAIC,EAAAA,gBAAgCC,0BAA2C"}
1
+ {"version":3,"file":"service-worker.js","sources":["../../../../../tmp/c8ceb96e3c65b37c7cfbac7807becba4/service-worker.js"],"sourcesContent":["import {precacheAndRoute as workbox_precaching_precacheAndRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/precacheAndRoute.mjs';\nimport {cleanupOutdatedCaches as workbox_precaching_cleanupOutdatedCaches} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/cleanupOutdatedCaches.mjs';\nimport {registerRoute as workbox_routing_registerRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-routing/registerRoute.mjs';\nimport {NavigationRoute as workbox_routing_NavigationRoute} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-routing/NavigationRoute.mjs';\nimport {createHandlerBoundToURL as workbox_precaching_createHandlerBoundToURL} from '/home/runner/work/farmhand/farmhand/node_modules/workbox-precaching/createHandlerBoundToURL.mjs';/**\n * Welcome to your Workbox-powered service worker!\n *\n * You'll need to register this file in your web app.\n * See https://goo.gl/nhQhGp\n *\n * The rest of the code is auto-generated. Please don't update this file\n * directly; instead, make changes to your Workbox build configuration\n * and re-run your build process.\n * See https://goo.gl/2aRDsh\n */\n\n\n\n\nself.addEventListener('message', (event) => {\n if (event.data && event.data.type === 'SKIP_WAITING') {\n self.skipWaiting();\n }\n});\n\n/**\n * The precacheAndRoute() method efficiently caches and responds to\n * requests for URLs in the manifest.\n * See https://goo.gl/S9QRab\n */\nworkbox_precaching_precacheAndRoute([\n {\n \"url\": \"index.html\",\n \"revision\": \"8f8d236a8c18f5f3cbcebcd2e52fdb65\"\n },\n {\n \"url\": \"electron.js\",\n \"revision\": \"b0456826f47539f6c1957c3add5eb959\"\n },\n {\n \"url\": \"assets/workbox-window.prod.es5-Bd17z0YL.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-DLWjlzPN.js\",\n \"revision\": null\n },\n {\n \"url\": \"assets/index-CaYdR-lC.css\",\n \"revision\": null\n },\n {\n \"url\": \"favicon.ico\",\n \"revision\": \"445bb19d4a8fd46eb433dd43cbdce691\"\n },\n {\n \"url\": \"logo192.png\",\n \"revision\": \"70746d790b8990639d1390337d77d81a\"\n },\n {\n \"url\": \"logo512.png\",\n \"revision\": \"b044ab46b3f33f0e2d313d961bf1f654\"\n },\n {\n \"url\": \"logoMaskable.png\",\n \"revision\": \"23be58ccf16df9f43658aad3da30056d\"\n },\n {\n \"url\": \"manifest.webmanifest\",\n \"revision\": \"3ad071a00582451c9cdeb827b37b9ebe\"\n }\n], {});\nworkbox_precaching_cleanupOutdatedCaches();workbox_routing_registerRoute(new workbox_routing_NavigationRoute(workbox_precaching_createHandlerBoundToURL(\"index.html\")));\n\n\n"],"names":["self","addEventListener","event","data","type","skipWaiting","workbox_precaching_precacheAndRoute","url","revision","workbox_precaching_cleanupOutdatedCaches","workbox_routing_registerRoute","workbox_routing_NavigationRoute","workbox_precaching_createHandlerBoundToURL"],"mappings":"inBAmBAA,KAAKC,iBAAiB,UAAYC,IAC5BA,EAAMC,MAA4B,iBAApBD,EAAMC,KAAKC,MAC3BJ,KAAKK,gBASTC,EAAAA,iBAAoC,CAClC,CACEC,IAAO,aACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,6CACPC,SAAY,MAEd,CACED,IAAO,2BACPC,SAAY,MAEd,CACED,IAAO,4BACPC,SAAY,MAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,cACPC,SAAY,oCAEd,CACED,IAAO,mBACPC,SAAY,oCAEd,CACED,IAAO,uBACPC,SAAY,qCAEb,CAAA,GACHC,EAAAA,wBAA2CC,EAAAA,cAA8B,IAAIC,EAAAA,gBAAgCC,0BAA2C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jeremyckahn/farmhand",
3
- "version": "1.24.2",
3
+ "version": "1.24.4",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -69,7 +69,7 @@
69
69
  "browserslist": "^4.21.9",
70
70
  "cheerio": "^1.0.0-rc.3",
71
71
  "cross-env": "^7.0.2",
72
- "electron": "^41.10.6",
72
+ "electron": "^42.11.3",
73
73
  "electron-builder": "^26.0.12",
74
74
  "esbuild": "^0.28.1",
75
75
  "eslint": "^8.57.1",
@@ -93,7 +93,7 @@
93
93
  "serve": "^14.2.0",
94
94
  "typescript": "^6.0.2",
95
95
  "vercel": "^59.11.7",
96
- "vite": "8.1.5",
96
+ "vite": "8.3.4",
97
97
  "vite-node": "^6.0.0",
98
98
  "vite-plugin-pwa": "^1.3.0",
99
99
  "vitest": "^4.0.18",
@@ -18,6 +18,10 @@ const randomPosition = () => 10 + random() * 80
18
18
  const flipAnimationDuration = 1000
19
19
  const transitionAnimationDuration = 3000
20
20
 
21
+ const blinkAnimationDuration = 200
22
+ const minBlinkAnimationInterval = 2000
23
+ const blinkAnimationIntervalVariance = 4000
24
+
21
25
  // This MUST be kept in sync with the `animationDuration` of the `.is-animating`
22
26
  // rule in CowPen.tsx.
23
27
  const hugAnimationDuration = 750
@@ -43,7 +47,11 @@ export const Cow = ({
43
47
  playerId,
44
48
  isSelected,
45
49
  }: CowProps) => {
46
- const [cowImage, setCowImage] = useState(pixel)
50
+ const [cowImages, setCowImages] = useState({
51
+ normal: pixel,
52
+ blinking: pixel,
53
+ })
54
+ const [isBlinking, setIsBlinking] = useState(false)
47
55
  const [isTransitioning, setIsTransitioning] = useState(false)
48
56
  const [moveDirection, setMoveDirection] = useState<CowMoveDirection>(RIGHT)
49
57
  const [rotate, setRotate] = useState(0)
@@ -143,14 +151,20 @@ export const Cow = ({
143
151
  [tweenable]
144
152
  )
145
153
 
146
- // Loads the cow's image on mount.
154
+ // Loads the cow's image and blinking image on mount.
147
155
  useEffect(() => {
148
156
  ;(async () => {
149
- const loadedCowImage = await getCowImage(cow)
157
+ const [loadedCowImage, loadedBlinkingCowImage] = await Promise.all([
158
+ getCowImage(cow),
159
+ getCowImage(cow, { isBlinking: true }),
160
+ ])
150
161
 
151
162
  if (isMounted() === false) return
152
163
 
153
- setCowImage(loadedCowImage)
164
+ setCowImages({
165
+ normal: loadedCowImage,
166
+ blinking: loadedBlinkingCowImage,
167
+ })
154
168
  })()
155
169
  // Mount-only effect (the function-component equivalent of
156
170
  // `componentDidMount`): it must run exactly once, so `cow` is
@@ -158,6 +172,33 @@ export const Cow = ({
158
172
  // eslint-disable-next-line react-hooks/exhaustive-deps
159
173
  }, [])
160
174
 
175
+ // Repeatedly blinks the cow: closes its eyes for `blinkAnimationDuration`, then
176
+ // waits a randomized interval before blinking again.
177
+ useEffect(() => {
178
+ let blinkAnimationTimeoutId: ReturnType<typeof setTimeout>
179
+
180
+ const scheduleNextBlink = () => {
181
+ blinkAnimationTimeoutId = setTimeout(() => {
182
+ if (isMounted() === false) return
183
+
184
+ setIsBlinking(true)
185
+
186
+ blinkAnimationTimeoutId = setTimeout(() => {
187
+ if (isMounted() === false) return
188
+
189
+ setIsBlinking(false)
190
+ scheduleNextBlink()
191
+ }, blinkAnimationDuration)
192
+ }, minBlinkAnimationInterval + random() * blinkAnimationIntervalVariance)
193
+ }
194
+
195
+ scheduleNextBlink()
196
+
197
+ return () => {
198
+ clearTimeout(blinkAnimationTimeoutId)
199
+ }
200
+ }, [isMounted])
201
+
161
202
  // Cancels any in-flight tween on unmount; `move` handles the resulting
162
203
  // rejection in its `catch` blocks.
163
204
  useEffect(() => {
@@ -235,7 +276,7 @@ export const Cow = ({
235
276
  className={classNames('cow', {
236
277
  'is-transitioning': isTransitioning,
237
278
  'is-selected': isSelected,
238
- 'is-loaded': cowImage !== pixel,
279
+ 'is-loaded': cowImages.normal !== pixel,
239
280
  })}
240
281
  onClick={() => handleCowClick(cow)}
241
282
  style={{
@@ -259,7 +300,10 @@ export const Cow = ({
259
300
  <div {...{ style: { transform: `rotateY(${rotate}deg)` } }}>
260
301
  <img
261
302
  {...{
262
- src: cowImage,
303
+ src:
304
+ isBlinking && cowImages.blinking !== pixel
305
+ ? cowImages.blinking
306
+ : cowImages.normal,
263
307
  }}
264
308
  alt={cowDisplayName}
265
309
  />
@@ -70,4 +70,22 @@ describe('changeCowAutomaticHugState', () => {
70
70
  expect(inventory).toEqual([{ id: huggingMachine.id, quantity: 1 }])
71
71
  })
72
72
  })
73
+
74
+ describe('re-applying a hugging machine after removing it', () => {
75
+ test('applies the hugging machine again', () => {
76
+ const cow = generateCow()
77
+ let state = saveDataStubFactory({
78
+ cowInventory: [cow],
79
+ inventory: [{ id: huggingMachine.id, quantity: 2 }],
80
+ inventoryLimit: INFINITE_STORAGE_LIMIT,
81
+ })
82
+
83
+ state = changeCowAutomaticHugState(state, state.cowInventory[0], true)
84
+ state = changeCowAutomaticHugState(state, state.cowInventory[0], false)
85
+ state = changeCowAutomaticHugState(state, state.cowInventory[0], true)
86
+
87
+ expect(state.cowInventory[0].isUsingHuggingMachine).toEqual(true)
88
+ expect(state.inventory).toEqual([{ id: huggingMachine.id, quantity: 1 }])
89
+ })
90
+ })
73
91
  })
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-1-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC4klEQVR4AeyXDXLqMAyEnXfJ3gDOBDfoKfP0ZbxUceTYSaCUmXSy6F/W2g5T/qUP/zsJvPsAzxM4T+DgDpxX6OAGHi4/T+DwFh5scJ7AwQ08XM4JjLmLZDY/Q0AgXS6XjxyeLZ4IoLwQbI7HnqV8PfqjBwSG+/2OY+BjI2jWQtmSfPnQ10AecaQHPpAg4AMtnaIH7Opx/UI0Gk09VD+OY/KQ33qQZ6L+9BKg0ajGkvW27Qg9Wlk9OS0Cs8FbC/bGy8Gu1+uj1Os4y1x8GdOVXyPw2PFcsEmwMCiL5MvvXRme2cpRjQUZWjAzVd+Bafgp4+AHiwPaSErXgNgliPn8Mi7bnwDXBX9leELPAwPSTdJfHfkkyatBBIac8CvDsxa7K2B7yI/0/kgXAWIigf7ruN1uu9b0BHY1UNHeAVSP9NcIuwdPI7Bn8Z4BWzmrBLSrSNBqthbnPq+9lHs3YEGAQQUNRHOAHx8SSEcK8st+tVwQiBYsh4IMIFdSOd6WjzyvY3twMhGUQ8z08EumJDDYn+X+PFpYkoh0JMCnwdHxYQPZyPIaMRgYv79TBGKA2hpKAmEegwCCGg6JDaQjgXIVwwbERILBNPTw9ZUA+QAdKI6vhi4CLAzKJgyFD+nj6ALxCAwX+SNfztV/CrOULgKzCjMYzkTyEhL4kEA6EigXvQQDAvnRgew1uUqA9wGsNSDGwAwoiQ/g87LUsQHXBekR+Xxc+ioBktgJSADsCOWgsqNcfPz68gNOa+T3AD/ARy7ANtn1LWR5y0fNIOGxzGx7VC8SebjFtxCdiAHTw+HNX/09QGwCDQAGiyINNLRZhmQfm5BrTaTpdzAK/SNYbMgwET/NK2RlNHksZrZ/iG2Fr5dOj2mNYpMUr8oeAtXivxDoJqCr8sqh96wREtjTaCuxZ60REgiG4Y56BCmHXb4/elfDiADFHl2NZkltw/dHb1dUMiICldS/6T4JvPtczhN49wn8BwAA//82HUsEAAAABklEQVQDAG3UeHBCTVueAAAAAElFTkSuQmCC\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-2-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC5ElEQVR4AeyXC3LbMAxEtb1kbmCfyb5BTunysYIGhkFKjOS6nVFGG/xBLEk58a/pP/85CXz6AM8TOE9g5w6cV2jnBu4uP09g9xbubHCewM4N3F1+nsDuLdzZ4G+cwKPM6FHM4cfXoy8N9hKg2RqWxWaF/Fmd0HsgjzjSAx+YRglQtOByuUwt+NUSvfZ4PB5TD6WOvCLaz1YCNHrEYdtt1yP0ul6vE4jZ+AA5MRbtNQJPg8fin9pbBrPenVyR0yOw7DiJo2Bhrkesw4/vfr8jurAcqynJDG0o5tR8B+rwNeOHv263W70ekLABTNIS3QbEjiBGTvRHOzuBxvCxtG9zh8kwie7BgNgm0Q3mM2n+TEYChwzP7meLeR+7a/B+dPMjsXvwBHhh01wGAmkwOLfmhbInc6SHEWB4PXWZjZFmc0m9+6a/WxqBd68z3H/rxjUJ8AIBScuO9poSA61Juc/0i/FeTS9mfYwA14drNLEIIIFFATafJgC/B4uA6PN2S491Wd5ajhGgFhLL/zY4GBxAAttAU4P5RiX1ViNpkl5hcWYougpeHk+AoObkhUgcniROwgNfhB/QYvSy/vgk1cEf399TBulPnNwWIoFWXtcPmSyhR0LSMrS+viZgPdCBkTJ/Jg8hkDVe8zHcWo7F59z6jprP5GEERk7BFjfJgKBlmz+TXQLcV5AVZr4eCa6TIdZyXbb4Yg52lwAJ7AwkAPYR4D9UPzRrYHvgs7XwF10FL09KgJ3ymdYMEh4+Z4suqX7qSOUFLl8nGQxQyxoe+IiBoqsgfVICPpMGAB8fg8gCGtaPXE8IXdIypPSsW12R9eEkUOifocQ0o4j8aRJwp0CT+nfB+awbsRFYXZT0WL7gz8Hqm/WmaBKIFcnwMeUj9mYCkurVeOeU0vgaKQFpvNEoMemYNVICyTAqPo9iHv74/uibFsgIUOyxqdFT0rrh+6OvVzQyMgKN1H/TfRL49LmcJ/DpE/gNAAD//3r5kyQAAAAGSURBVAMAr+1rcNRc4p4AAAAASUVORK5CYIIA\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-3-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAChUlEQVR4AeyXjXEqMQyEjzSZDiiKDlIl0eewN8LIf/gSyIzf3CJZWsla+2BePrZ//m8JePUFrhtYNzB5AusVmjzA6fJ1A9NHONlg3cDkAU6XrxuYPsLJBn9xA1eb0cOWw4+vx98bzAqgWQv7ZjcH/s3d8GuARx7rQQxsowIo2nE+n7cS/G6Bn3qUahW3Onhmyk+vABpd1Vi23LadoUeL1cNpCbgbvLVhb75nMPWqcE9wagL2E4c4CjYGeV0Uyzn52tUwtJBoJQFp+MSwj8vlsgm2HHrYHFAki38UIgEPw/9sdtynDgMbdSUuRHkfywXcDe+JR/rcBKAng2IFrckDxUvWC+ALW+KleN6QzSIkcscH/YCnsgY+VvMlgOH5cjxwaSY8JN8gIAFDo+jUh4p+iTwsgOFrs3BbUZ54qzaqa8WGBbQa/nX+LQRwMxF0GOTMD7+juYDTjWz845/8NWIvcP362iKQA7VJEKDffn6JatxmjgE9ic2Bj8EhBjT06fNzA+LhA+UVjywCongxxgBRMo8zoHj4QGssw2F7cOOGB5wEWPPw/So1Z9gcJW5PnAGBuPhA65pFgIaX3fkmLP0nbg8MOAgcoCcqr42QAh0fCKjSOIlnhXgRuc+gfmPW7CXkOVs/HLDF+v6kpClkCZEl1gKDA3iqwxJjaEBOe+AL5ICtw+Et3hZAAwCZTbEGGqafXIbpherMpkf96B/BSGkfs8Wn+QpZJU3SH+/m5w+5EeT1WtMj7SFRlkgxs9WnR0C1wauT3QL0mvzmwM/sEQp4ptGosKP2CAUEw/A+egSU6ZDvj9/VMBJAsUdXoztSe+H747crCoxIQIH6nuEl4NX3sm7g1TfwDQAA//9EngZ8AAAABklEQVQDAPmFUXBZV/YBAAAAAElFTkSuQmCC\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-4-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAADCklEQVR4AeyXi3HjMAxExWsyHdg12R2kSh0ew9VBFEhJw3OczCijDcDFhwtSzsR/pl/+cw3w7gu8buC6gcETuF6hwQMcLr9uYPgIBxtcNzB4gMPl1w0MH+Fgg++4gdk0etjy9OPr8ZcGowPQbA/LZsUhv7gTfg/kEcd6wIHp7AAULZjneWrB7xb4ucftdgvr4YHVkWem/RwdgEZgtaFve7/f/XLXLwKnXp1yes32BkA0WITXzRAA4LEC6xaOCFNtJzeR0xsgC6cBrwnJER6PR0RP1IE6GHF1Tr12NYgWclprgEV8zrJfnKyZ5WEtLGTgMLwEyD6fz1VmSmj6olL658PUuXAe0QAb8RQ8Hl8nfUQ0+QL58l9h6wFC8f97Y26CkxW4Je2BLx5LrmKR9QPsio9Os/UZiDbzHMIEz+OLx7LuQQMgfv3ylaqewF6slL/caIDNRogDm0BFRLdSpbx0uRkA0aDeVUKJCeR4nzWIOF4H3mnie6B+L0fxzQAKRPZM46g+4lo9W3zd4/AAdUNuRKCp4rLE4IE4fA/xKaUppS0ULzeXfK38eoBkP4qFVsJoDkjynF/je/jXiFr2AvPn5xSBWBHv26x8BphpbCx/icz0HzauM2qOtYfPZy9EIU6i08fHBJSHDxQXH1kGiPgNxymDOoBQcYpjgfjIIi7iI67khgecB7ATCd8v3wyhAK4ljngvRm0EBALF8IHWPcsAEi+75HPNYCGKg1BcL9b7xM6A16XOj7g6hzUDYJvgJBgC1EkaxPNwAjyDAXzxfA68wLxH+RzAAzhqAGuzmwM27thXSjVjCA8aCIiT7y08gFOtvbL5+wLCADH28IAjBswPxRu/PwANAMn8p4g10ND0pPDvtwVCXnVm88NN4NA/gsVSgZn42X2FrIwm+Sul+fVD7Azqeq3pkW9FQ1kgc2a7z5EBug3eHTw8gF6LVwrmswHO7BEO8FPFRoOFAwSJvI8eQcow5fvjH2oYDUCxx6FGq6T9he+Pv1/RyIgGaKT+TPoa4N33ct3Au2/gLwAAAP//wOsxRAAAAAZJREFUAwCUT5Bw3sIsRgAAAABJRU5ErkJgggAA\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-5-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACz0lEQVR4AeyXCXLCMAxFrV6yN4AzwQ16yjTPRCA78kZSoDNh+GiX9W2H0q/wz18HgXcf4HECxwls3IHjCm3cwM3lxwls3sKNDY4TGNzAac4Hs+h+k69YFb3yBBhiNUDD0ayBgCapbPTcJfzsWqs6CITT6bQK7DLmo8mf9Y8EHusMawzWg1LjVm2p7u6HgFyvVxzCRwPJgvPJcXpFTNMUQKHnpPXkWKi/UJe4IZA4CkYcXBurLOTe3efzOeoMFxXzQQ9juqqTs9rkFoE4OAMAd5WGU0nYNGcwG070Vm6NQDxiO/jlckmaP2PYgZarGyxJ1TXGGrYG26JEIA5vE/fQ80Gw7aC6Bj5iatekRyAZXnckhJDsVK1pT4whAbkqrY4P4KshJ5AMXyvsjZWuHTtsof24sp5f47lUAjzdPLB5PLFLwyRJLzaUAMtCArkbXkHYEtht8NFGOdHcrvVrEsibYStqjYnZLwDudc9DSd0ImgRKzexwpRz1j+RqTa8sEvB2mUEULEAO0iL3kW/jni4iQSSFPa1FF682JxB/2OVDeIWao9LLyX35NWIwMP38BA/EQN7H2jkBG4u67qDK6Mw+IKHIQitTSTCYDi3f3wFoMjrQuPo9WSVQGpphvWYjPobrzV9y3b9TVQJ2AYZWWL+nax7Si+c+BgTqRwdq12SVAMcMag32jHFtwEjPKgEasRMiEr8lsEfBKVhQz3OQD2ptq5O/2IKeo0mAAkggRSQSEblJfCMQkcCJAiWxDBe/hbTXfb3Hwy0ay2WTAAsACvmliJxBQ5lfCaGWrXWzjG9IoNAfoAN0MOtxnVkW300CcyVNSv+cExvB3O721mt1swI94hrZJi3hsughUK7+gEg3Ab0efznzM2u4BJ5pNEpsrzVcAs4w3FELJ2Wzy/ZH72roEaDYoqtRktQ2bH/0dkUhwyNQSP1M90Hg3edynMC7T+AXAAD//zgj3voAAAAGSURBVAMA67xIcBP9HhIAAAAASUVORK5CYIIA\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-6-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACjUlEQVR4AeyXC1LDMAxEUy7JDXqo3oBTFj/TzWw88id1S2AmTBbL0molxW4ZPpZ//nMOcPQBnidwnsDkGziv0OQLnE4/T2D6FU4KnCcw+QKn088TmH6FkwK/cQL31KMjbXc/no+9CswOgFgPa7GHAf9hLtgtwCPO6sAHlr0DkORw0dW+Xq+rXTGyBrwWUi68tNSf0QEQAnWlnREa76WMcHoD0DTo1VrjI0VHOBJscC9wWgPsahwxB4WB+15g07SQ5WoD3CkOMmviFxrAJW6321JC8dLPXrFojQbIzYtM8R90P5hKGV6ly6okbEG+1loOsGm+TES49Pm+F3cuNm8XYDvwAffVbB9g+s7XirzTrwFong9Ht5a/ZWyhm/gmggbYJf/KptEqi0e+kqP9UwMo2VfubAt7mkIXPsBuoTqAN9MSEK/FiWI0B6KY+3ocDcD953Owfj+TKNCki8qu+RWvreh6DJ0Izkk2PaZl+2gAvBDAQgEXZA9hFqWOaty/vpYIirfq+gAbHsWETeDJDc2QiiY2UNOXz88FEAfYQHF8NVQHqCW8yk9zo1oPbr7iZc5hA3gjNAjkwwbat9bmABwzqAlwHWqx0t/icl1KfuQrOeybA0DgTTAEYF+CxgSPyae1jHmD1GDvwKcc/MnOXzBp3TzdAWBLjCEcxBxqltX9sj0XDo0B4tRw4CMGkh02n/z9/4kRAJApypqA4MUbGrGVl9b8SA/9CImU66S1+oycACL5b0OgQmwPAonsQiPX0FDJm31pbT4jAzQFjg4OD6Ar8s6Gn6kRDvCM0N7BXlUjHCBohvvoCCjTLtfHHhKMBiDZMSS0IfU3ro/dz6gwogEq1L/pPgc4+lzOEzj6BL4BAAD//9HdgZsAAAAGSURBVAMAlBRicJihbigAAAAASUVORK5CYIIA\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"cow-variation-7-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAACsklEQVR4AeyXAXLrIAxE4V+yN0jOlNygp/TXY7wehYANJk3aGTreSohl0YKbtv/CH/+aBj59gfMG5g0MnsB8hQYPcHj5vIHhIxwUmDcweIDDy+cNDB/hoMA7bmCxHj1s2P349eSbwKgBxI6wbbYm8Nc0kO8BHvNED2og9BpgkYcX3fLL5bLllSRpwAPLsgQPasDWwrNQf1oNILQgKtQl22bQEfN6vSp9iJ7zMOEGRwZS4/BzMcaAuVcBI8Dr7ewR4e0ZoHk4Cff7PcWWb3DZGOR8aiCv5437ecenaSFRagYemk/Mzm+YAGwOWK5InbHgxz5nPh9T8ygZqDQfQi6Wj72w8haOuGdibqDa/Bnx2hpuAmMCY7i32y2Qq05kzFwN3sBh80ditU1KdbQE5mmeCFQnMt6DDNA8PxxVbi7G6VTJnRO+eZ+3yMjAxqVRsBUsycdW+jXPkwF1RtOCaiMRrVfemnqpGhChFmmoNtdb53cA6F0H/7QBFmMCkJfAHCjN+Ro3A2KMIcaYPq4Zi7PmUWMfcwNxJXvOYV5qslbz+uRg+f4OJTAH9hrAQPojzUh8Elk49/iGfZ6rMUdTQE3Hr68AxCUHmle9FDFQqp+q0RxoWUxzLTw4K7d4wMmAnUbx/WLxO0CDQHuRA433IgbUvOLGN2PpB2orvDHhFWrZDgO7PE7i1UZ4zfIGGXuwrxqjbvnTAVut7V9KicmIIgI90DqiTKzNPX0KocscsLzYvNWPDSAAILMp0YBg+silmVZoncX0SA/9EoyU9rFYfQ5fIVuJSPoz1/L8Ya4H+XqN0Uh7yJRNpJrF3afFwK7ApyebDeg1+cmGz+xRNHBGqNfYq/YoGig0w/voUaAMl7w+eZNgyQCLPZqEHkjHA69PfryiwigZqFB/Z3ka+PS9zBv49A38BwAA//+PREyqAAAABklEQVQDAJH+TnAyO6DCAAAAAElFTkSuQmCC\"}]}"]}}
@@ -0,0 +1 @@
1
+ {"modelVersion":2,"piskel":{"name":"rainbow-cow-blinking","description":"","fps":12,"height":48,"width":48,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAC50lEQVR4AeyYPZLUMBCF2yQUBfcg4BZcYrkBMRkJEQkZMTdgT0DGLQi4B1UUkdEnqz1tqzWSV96Z2SpP+Y1aLXXrPf15d57JE/8cAq69gMcKHCvQOQPHFuqcwO7wYwW6p7AzwbECnRPYHX6sQPcUdia4xAqMgaNFqG5+bDz2nKBXAMlqmAdLBv2TKdjnQD/aKS3wAdkqgKAZH8f3soaM/yTCDpfbMcf4560AmyPGnnLQL482nlYBJAImtM+EeDXDp/qQNQFkANlYTQSyqMkxfn0zGS3fZRED4ecEuMQJasJpGyy6W/LDq5+LtkVleH6qnkRAWhHbSwLOkt80+whJBCx5RiePKwLyxNGpAk9AgfyUiUEnq+8b4oAsX4ZvFBMgj0X5mcmmUsZawEXIQ4eJUHAL4Ytg5hVp5aK/8GUF7EOembMoDLyXWwVA3l0v9i1oGXCxFTQAMQ1bQbtvLVVAFgdpkDUUHC75Qt893ZkASIM9B9Fcw4dfau5WZgJ2y3yhRDchgO2nEM6MQidhOkPuGV0LGB5jmZUHpc3PewCM9/fiQSAOCCwAASP3cWjnJgrFIz/hbkeEJT7c3QnQkbGBilK/VyJAhpc/vLZNvsXLyIsMxAWkNsgls1qkvu4ERwFh37n7q5p51SGK4C268lvi6ybqEATYABtg14AAJa/lHBOX+iFXHyIs5oy+wXZZt3i+dR/qCKAsgpmIQs796VuMLjSErWQJxjHSOcAP8Gk09WBnExx8bf9SajIOngUJNoEbJeGF/I4HN5HLbiHy0gaC7ZIP/roAEgA6mzc0CQe9u20ZzpNkSKRFJMZJ+iACk/weQtuif6hnT3ULhQiSiCEfXPND2xbMgSuDHPI9/EgBUlv0JbtYtAgoBt9CQ7OAeJAfciNtUPku7DCwIcQ/A5cg+1deC9hC1uvbugLsRwsvV6/P5sduyucJINiiKdGiU71i82PXIwo9PAGFrrfpPgRce12OFbj2CvwHAAD//7rOgnEAAAAGSURBVAMAF6QgcGBcpGoAAAAASUVORK5CYIIA\"}]}"]}}
package/src/img/index.ts CHANGED
@@ -269,6 +269,15 @@ import cowVariation5 from './animals/cows/cow-variation-5.png?dataUri'
269
269
  import cowVariation6 from './animals/cows/cow-variation-6.png?dataUri'
270
270
  import cowVariation7 from './animals/cows/cow-variation-7.png?dataUri'
271
271
 
272
+ import cowVariation1Blinking from './animals/cows/cow-variation-1-blinking.png?dataUri'
273
+ import cowVariation2Blinking from './animals/cows/cow-variation-2-blinking.png?dataUri'
274
+ import cowVariation3Blinking from './animals/cows/cow-variation-3-blinking.png?dataUri'
275
+ import cowVariation4Blinking from './animals/cows/cow-variation-4-blinking.png?dataUri'
276
+ import cowVariation5Blinking from './animals/cows/cow-variation-5-blinking.png?dataUri'
277
+ import cowVariation6Blinking from './animals/cows/cow-variation-6-blinking.png?dataUri'
278
+ import cowVariation7Blinking from './animals/cows/cow-variation-7-blinking.png?dataUri'
279
+ import rainbowCowBlinking from './animals/cows/rainbow-cow-blinking.png'
280
+
272
281
  export { default as pixel } from './pixel.png?dataUri'
273
282
 
274
283
  export const plotStates = {
@@ -581,6 +590,8 @@ export const tools = {
581
590
  export const animals = {
582
591
  cow: {
583
592
  rainbow: rainbowCow,
593
+ rainbowBlinking: rainbowCowBlinking,
594
+
584
595
  variations: [
585
596
  cowVariation1,
586
597
  cowVariation2,
@@ -590,5 +601,15 @@ export const animals = {
590
601
  cowVariation6,
591
602
  cowVariation7,
592
603
  ],
604
+
605
+ blinkingVariations: [
606
+ cowVariation1Blinking,
607
+ cowVariation2Blinking,
608
+ cowVariation3Blinking,
609
+ cowVariation4Blinking,
610
+ cowVariation5Blinking,
611
+ cowVariation6Blinking,
612
+ cowVariation7Blinking,
613
+ ],
593
614
  },
594
615
  }
@@ -1,3 +1,5 @@
1
1
  // Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
2
2
 
3
+ exports[`getCowImage > colors a blinking cow template image 1`] = `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4goFDRc7VmYGWwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAALSURBVAjXY2AAAgAABQAB4iYFmwAAAABJRU5ErkJggg=="`;
4
+
3
5
  exports[`getCowImage > colors a cow template image 1`] = `"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4goFDRc7VmYGWwAAABl0RVh0Q29tbWVudABDcmVhdGVkIHdpdGggR0lNUFeBDhcAAAALSURBVAjXY2AAAgAABQAB4iYFmwAAAABJRU5ErkJggg=="`;
@@ -1,6 +1,4 @@
1
- import { memoize } from './memoize.js'
2
-
3
- export const findCowById = memoize(
4
- (cowInventory: Array<farmhand.cow>, id: string): farmhand.cow | undefined =>
5
- cowInventory.find(cow => id === cow.id)
6
- )
1
+ export const findCowById = (
2
+ cowInventory: Array<farmhand.cow>,
3
+ id: string
4
+ ): farmhand.cow | undefined => cowInventory.find(cow => id === cow.id)
@@ -13,10 +13,24 @@ describe('getCowImage', () => {
13
13
  expect(image).toMatchSnapshot()
14
14
  })
15
15
 
16
+ test('colors a blinking cow template image', async () => {
17
+ const cow = generateCow({ color: cowColors.GREEN, id: '1' })
18
+ const image = await getCowImage(cow, { isBlinking: true })
19
+
20
+ expect(image).toMatchSnapshot()
21
+ })
22
+
16
23
  test('does not modify rainbow cow image', async () => {
17
24
  const cow = generateCow({ color: cowColors.RAINBOW })
18
25
  const image = await getCowImage(cow)
19
26
 
20
27
  expect(image).toEqual(animals.cow.rainbow)
21
28
  })
29
+
30
+ test('does not modify blinking rainbow cow image', async () => {
31
+ const cow = generateCow({ color: cowColors.RAINBOW })
32
+ const image = await getCowImage(cow, { isBlinking: true })
33
+
34
+ expect(image).toEqual(animals.cow.rainbowBlinking)
35
+ })
22
36
  })
@@ -37,8 +37,13 @@ const colorizeCowTemplate = (() => {
37
37
  * @param color
38
38
  * @returns Base64 representation of an image
39
39
  */
40
- return async (cowTemplate: string, color: cowColors) => {
41
- if (color === cowColors.RAINBOW) return animals.cow.rainbow
40
+ return async (
41
+ cowTemplate: string,
42
+ color: cowColors,
43
+ { isBlinking = false }: { isBlinking?: boolean } = {}
44
+ ) => {
45
+ if (color === cowColors.RAINBOW)
46
+ return isBlinking ? animals.cow.rainbowBlinking : animals.cow.rainbow
42
47
 
43
48
  const imageKey = `${color}_${cowTemplate}`
44
49
 
@@ -93,10 +98,19 @@ const colorizeCowTemplate = (() => {
93
98
  }
94
99
  })()
95
100
 
96
- export const getCowImage = async (cow: farmhand.cow): Promise<string> => {
101
+ export const getCowImage = async (
102
+ cow: farmhand.cow,
103
+ { isBlinking = false }: { isBlinking?: boolean } = {}
104
+ ): Promise<string> => {
97
105
  const cowIdNumber = convertStringToInteger(cow.id)
98
- const { variations } = animals.cow
99
- const cowTemplate = variations[cowIdNumber % variations.length]
100
106
 
101
- return await colorizeCowTemplate(cowTemplate, cow.color as cowColors)
107
+ const { variations, blinkingVariations } = animals.cow
108
+
109
+ const cowVariations = isBlinking ? blinkingVariations : variations
110
+
111
+ const cowTemplate = cowVariations[cowIdNumber % cowVariations.length]
112
+
113
+ return await colorizeCowTemplate(cowTemplate, cow.color as cowColors, {
114
+ isBlinking,
115
+ })
102
116
  }