Add computers and modal for obra info

master
Ian Mancini 4 years ago
parent cb3645a0ea
commit 51df2bd827

@ -2982,6 +2982,14 @@
"@types/lodash": "*" "@types/lodash": "*"
} }
}, },
"@types/mdast": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz",
"integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==",
"requires": {
"@types/unist": "*"
}
},
"@types/minimatch": { "@types/minimatch": {
"version": "3.0.3", "version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@ -3104,6 +3112,11 @@
"source-map": "^0.6.1" "source-map": "^0.6.1"
} }
}, },
"@types/unist": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
"integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
},
"@types/warning": { "@types/warning": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/warning/-/warning-3.0.0.tgz",
@ -4159,6 +4172,11 @@
"resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz",
"integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc=" "integrity": "sha1-MasayLEpNjRj41s+u2n038+6eUc="
}, },
"bail": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
"integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ=="
},
"balanced-match": { "balanced-match": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@ -4646,6 +4664,21 @@
"resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz",
"integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==" "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw=="
}, },
"character-entities": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
"integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw=="
},
"character-entities-legacy": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
"integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA=="
},
"character-reference-invalid": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
"integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg=="
},
"chardet": { "chardet": {
"version": "0.7.0", "version": "0.7.0",
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
@ -8191,6 +8224,83 @@
"terser": "^4.6.3" "terser": "^4.6.3"
} }
}, },
"html-to-react": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.4.5.tgz",
"integrity": "sha512-KONZUDFPg5OodWaQu2ymfkDmU0JA7zB1iPfvyHehTmMUZnk0DS7/TyCMTzsLH6b4BvxX15g88qZCXFhJWktsmA==",
"requires": {
"domhandler": "^3.3.0",
"htmlparser2": "^5.0",
"lodash.camelcase": "^4.3.0",
"ramda": "^0.27.1"
},
"dependencies": {
"dom-serializer": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.2.0.tgz",
"integrity": "sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.0.0",
"entities": "^2.0.0"
},
"dependencies": {
"domhandler": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
"integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
"requires": {
"domelementtype": "^2.1.0"
}
}
}
},
"domelementtype": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz",
"integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w=="
},
"domhandler": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
"integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
"requires": {
"domelementtype": "^2.0.1"
}
},
"domutils": {
"version": "2.4.4",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.4.4.tgz",
"integrity": "sha512-jBC0vOsECI4OMdD0GC9mGn7NXPLb+Qt6KW1YDQzeQYRUFKmNG8lh7mO5HiELfr+lLQE7loDVI4QcAxV80HS+RA==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.0.1",
"domhandler": "^4.0.0"
},
"dependencies": {
"domhandler": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.0.0.tgz",
"integrity": "sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA==",
"requires": {
"domelementtype": "^2.1.0"
}
}
}
},
"htmlparser2": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz",
"integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^3.3.0",
"domutils": "^2.4.2",
"entities": "^2.0.0"
}
}
}
},
"html-webpack-plugin": { "html-webpack-plugin": {
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz",
@ -8587,6 +8697,20 @@
"kind-of": "^3.0.2" "kind-of": "^3.0.2"
} }
}, },
"is-alphabetical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
"integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg=="
},
"is-alphanumerical": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
"integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
"requires": {
"is-alphabetical": "^1.0.0",
"is-decimal": "^1.0.0"
}
},
"is-arguments": { "is-arguments": {
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
@ -8658,6 +8782,11 @@
"resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
"integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g=="
}, },
"is-decimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
"integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw=="
},
"is-descriptor": { "is-descriptor": {
"version": "0.1.6", "version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
@ -8713,6 +8842,11 @@
"is-extglob": "^2.1.1" "is-extglob": "^2.1.1"
} }
}, },
"is-hexadecimal": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
},
"is-module": { "is-module": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
@ -10091,6 +10225,11 @@
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
}, },
"lodash.camelcase": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
"integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
},
"lodash.memoize": { "lodash.memoize": {
"version": "4.1.2", "version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@ -10227,6 +10366,31 @@
"safe-buffer": "^5.1.2" "safe-buffer": "^5.1.2"
} }
}, },
"mdast-add-list-metadata": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz",
"integrity": "sha512-fB/VP4MJ0LaRsog7hGPxgOrSL3gE/2uEdZyDuSEnKCv/8IkYHiDkIQSbChiJoHyxZZXZ9bzckyRk+vNxFzh8rA==",
"requires": {
"unist-util-visit-parents": "1.1.2"
}
},
"mdast-util-from-markdown": {
"version": "0.8.4",
"resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.4.tgz",
"integrity": "sha512-jj891B5pV2r63n2kBTFh8cRI2uR9LQHsXG1zSDqfhXkIlDzrTcIlbB5+5aaYEkl8vOPIOPLf8VT7Ere1wWTMdw==",
"requires": {
"@types/mdast": "^3.0.0",
"mdast-util-to-string": "^2.0.0",
"micromark": "~2.11.0",
"parse-entities": "^2.0.0",
"unist-util-stringify-position": "^2.0.0"
}
},
"mdast-util-to-string": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz",
"integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w=="
},
"mdn-data": { "mdn-data": {
"version": "2.0.4", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz",
@ -10305,6 +10469,15 @@
"resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
"integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g=="
}, },
"micromark": {
"version": "2.11.2",
"resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.2.tgz",
"integrity": "sha512-IXuP76p2uj8uMg4FQc1cRE7lPCLsfAXuEfdjtdO55VRiFO1asrCSQ5g43NmPqFtRwzEnEhafRVzn2jg0UiKArQ==",
"requires": {
"debug": "^4.0.0",
"parse-entities": "^2.0.0"
}
},
"micromatch": { "micromatch": {
"version": "4.0.2", "version": "4.0.2",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz",
@ -14316,6 +14489,19 @@
"safe-buffer": "^5.1.1" "safe-buffer": "^5.1.1"
} }
}, },
"parse-entities": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
"integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
"requires": {
"character-entities": "^1.0.0",
"character-entities-legacy": "^1.0.0",
"character-reference-invalid": "^1.0.0",
"is-alphanumerical": "^1.0.0",
"is-decimal": "^1.0.0",
"is-hexadecimal": "^1.0.0"
}
},
"parse-json": { "parse-json": {
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz",
@ -15837,6 +16023,11 @@
"performance-now": "^2.1.0" "performance-now": "^2.1.0"
} }
}, },
"ramda": {
"version": "0.27.1",
"resolved": "https://registry.npmjs.org/ramda/-/ramda-0.27.1.tgz",
"integrity": "sha512-PgIdVpn5y5Yns8vqb8FzBUEYn98V3xcPgawAkkgj0YJ0qDsnHCiNmZYfOGMgOvoB0eWFLpYbhxUR3mxfDIMvpw=="
},
"randombytes": { "randombytes": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
@ -16101,6 +16292,30 @@
"resolved": "https://registry.npmjs.org/react-layout-effect/-/react-layout-effect-1.0.5.tgz", "resolved": "https://registry.npmjs.org/react-layout-effect/-/react-layout-effect-1.0.5.tgz",
"integrity": "sha512-zdRXHuch+OBHU6bvjTelOGUCM+UDr/iCY+c0wXLEAc+G4/FlcJruD/hUOzlKH5XgO90Y/BUJPNhI/g9kl+VAsA==" "integrity": "sha512-zdRXHuch+OBHU6bvjTelOGUCM+UDr/iCY+c0wXLEAc+G4/FlcJruD/hUOzlKH5XgO90Y/BUJPNhI/g9kl+VAsA=="
}, },
"react-markdown": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-5.0.3.tgz",
"integrity": "sha512-jDWOc1AvWn0WahpjW6NK64mtx6cwjM4iSsLHJPNBqoAgGOVoIdJMqaKX4++plhOtdd4JksdqzlDibgPx6B/M2w==",
"requires": {
"@types/mdast": "^3.0.3",
"@types/unist": "^2.0.3",
"html-to-react": "^1.3.4",
"mdast-add-list-metadata": "1.0.1",
"prop-types": "^15.7.2",
"react-is": "^16.8.6",
"remark-parse": "^9.0.0",
"unified": "^9.0.0",
"unist-util-visit": "^2.0.0",
"xtend": "^4.0.1"
},
"dependencies": {
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
}
}
},
"react-merge-refs": { "react-merge-refs": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz", "resolved": "https://registry.npmjs.org/react-merge-refs/-/react-merge-refs-1.1.0.tgz",
@ -16520,6 +16735,14 @@
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
"integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk="
}, },
"remark-parse": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-9.0.0.tgz",
"integrity": "sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==",
"requires": {
"mdast-util-from-markdown": "^0.8.0"
}
},
"remove-trailing-separator": { "remove-trailing-separator": {
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@ -18752,6 +18975,11 @@
"resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.34.1.tgz", "resolved": "https://registry.npmjs.org/troika-worker-utils/-/troika-worker-utils-0.34.1.tgz",
"integrity": "sha512-zLTSB6ISd/dpBMG6PFR2v7sqU2bqVwOUd45iWzcgcRE9+w/5YJN8h0+H5EmgRPIVe5xus0UZQKUgVH6FRA+YdQ==" "integrity": "sha512-zLTSB6ISd/dpBMG6PFR2v7sqU2bqVwOUd45iWzcgcRE9+w/5YJN8h0+H5EmgRPIVe5xus0UZQKUgVH6FRA+YdQ=="
}, },
"trough": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
"integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA=="
},
"tryer": { "tryer": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz",
@ -18888,6 +19116,31 @@
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
}, },
"unified": {
"version": "9.2.0",
"resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
"integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
"requires": {
"bail": "^1.0.0",
"extend": "^3.0.0",
"is-buffer": "^2.0.0",
"is-plain-obj": "^2.0.0",
"trough": "^1.0.0",
"vfile": "^4.0.0"
},
"dependencies": {
"is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
},
"is-plain-obj": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
"integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA=="
}
}
},
"union-value": { "union-value": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
@ -18933,6 +19186,45 @@
"crypto-random-string": "^1.0.0" "crypto-random-string": "^1.0.0"
} }
}, },
"unist-util-is": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.4.tgz",
"integrity": "sha512-3dF39j/u423v4BBQrk1AQ2Ve1FxY5W3JKwXxVFzBODQ6WEvccguhgp802qQLKSnxPODE6WuRZtV+ohlUg4meBA=="
},
"unist-util-stringify-position": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
"integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
"requires": {
"@types/unist": "^2.0.2"
}
},
"unist-util-visit": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
"integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==",
"requires": {
"@types/unist": "^2.0.0",
"unist-util-is": "^4.0.0",
"unist-util-visit-parents": "^3.0.0"
},
"dependencies": {
"unist-util-visit-parents": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz",
"integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==",
"requires": {
"@types/unist": "^2.0.0",
"unist-util-is": "^4.0.0"
}
}
}
},
"unist-util-visit-parents": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz",
"integrity": "sha512-yvo+MMLjEwdc3RhhPYSximset7rwjMrdt9E41Smmvg25UQIenzrN83cRnF1JMzoMi9zZOQeYXHSDf7p+IQkW3Q=="
},
"universalify": { "universalify": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
@ -19209,6 +19501,33 @@
"extsprintf": "^1.2.0" "extsprintf": "^1.2.0"
} }
}, },
"vfile": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
"integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
"requires": {
"@types/unist": "^2.0.0",
"is-buffer": "^2.0.0",
"unist-util-stringify-position": "^2.0.0",
"vfile-message": "^2.0.0"
},
"dependencies": {
"is-buffer": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
"integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ=="
}
}
},
"vfile-message": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
"integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
"requires": {
"@types/unist": "^2.0.0",
"unist-util-stringify-position": "^2.0.0"
}
},
"vm-browserify": { "vm-browserify": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",

@ -24,6 +24,7 @@
"react": "^17.0.1", "react": "^17.0.1",
"react-dom": "^17.0.1", "react-dom": "^17.0.1",
"react-icons": "^3.11.0", "react-icons": "^3.11.0",
"react-markdown": "^5.0.3",
"react-router-dom": "^5.2.0", "react-router-dom": "^5.2.0",
"react-scripts": "4.0.0", "react-scripts": "4.0.0",
"react-three-fiber": "^5.2.1", "react-three-fiber": "^5.2.1",

@ -1,63 +0,0 @@
/*
Auto-generated by: https://github.com/pmndrs/gltfjsx
*/
import * as THREE from 'three'
import React, { useMemo, useRef, useState } from 'react'
import { useGLTF } from '@react-three/drei/useGLTF'
import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader'
import { Color, FrontSide, MeshLambertMaterial } from 'three'
type GLTFResult = GLTF & {
nodes: {
computer_mesh: THREE.Mesh
computer_mesh_1: THREE.Mesh
computer_mesh_2: THREE.Mesh
}
materials: {
keyboard: THREE.MeshStandardMaterial
marble: THREE.MeshStandardMaterial
computer_screen: THREE.MeshStandardMaterial
}
}
export default function Model(props: JSX.IntrinsicElements['group']) {
const group = useRef<THREE.Group>()
const [currentMaterial, setCurrentMaterial] = useState(false)
const { nodes, materials } = useGLTF('/computer.glb') as GLTFResult
const onMaterial = useMemo(() => {
const m = new MeshLambertMaterial({
color: new Color('#57bc78'),
emissive: new Color('#97ffbd'),
side: FrontSide,
flatShading: false,
})
return m
}, [])
const mat = currentMaterial ? onMaterial : materials.computer_screen
return (
<group ref={group} {...props} dispose={null} onClick={(e) => console.log('click')}>
<mesh
onClick={(e) => console.log('click')}
geometry={nodes.computer_mesh.geometry}
/>
<mesh
onClick={(e) => console.log('click')}
material={materials.marble}
geometry={nodes.computer_mesh_1.geometry}
/>
<mesh
onClick={(e) => console.log('click')}
material={mat}
geometry={nodes.computer_mesh_2.geometry}
/>
</group>
)
}
useGLTF.preload('/computer.glb')

@ -2,15 +2,6 @@ import React from 'react'
import { Text } from '@react-three/drei' import { Text } from '@react-three/drei'
import Computer from './models/Computer' import Computer from './models/Computer'
interface IObraData {
full_name: string
alumne_url: string
obra_url: string
guest: boolean
obra_titulo: string
obra_descripcion: string
}
type ArtworkProps = { type ArtworkProps = {
position: number[] position: number[]
rotation: number[] rotation: number[]
@ -25,6 +16,7 @@ const Artwork: React.FC<ArtworkProps & JSX.IntrinsicElements['group']> = ({
obraData, obraData,
...rest ...rest
}) => { }) => {
if (!obraData) return null
return ( return (
<group rotation={rotation}> <group rotation={rotation}>
<group position={position} {...rest}> <group position={position} {...rest}>
@ -39,6 +31,7 @@ const Artwork: React.FC<ArtworkProps & JSX.IntrinsicElements['group']> = ({
{obraData.obra_titulo} {obraData.obra_titulo}
</Text> </Text>
<Computer <Computer
obraId={obraData.id}
position={[-6.0, 0, -2.8]} position={[-6.0, 0, -2.8]}
scale={[1.1, 1.1, 1.1]} scale={[1.1, 1.1, 1.1]}
rotation={[0, Math.PI, 0]} rotation={[0, Math.PI, 0]}

@ -12,7 +12,10 @@ const Controls: React.FC = () => {
setPointerLockControls(ref.current) setPointerLockControls(ref.current)
const onLock = () => setPointerLockStatus(true) const onLock = () => setPointerLockStatus(true)
const onUnlock = () => setPointerLockStatus(false) const onUnlock = () => {
setPointerLockStatus(false)
console.log('unlock')
}
ref.current.addEventListener?.('lock', onLock) ref.current.addEventListener?.('lock', onLock)
ref.current.addEventListener?.('unlock', onUnlock) ref.current.addEventListener?.('unlock', onUnlock)

@ -29,10 +29,10 @@ const keys: Record<string, string> = {
KeyS: 'right', KeyS: 'right',
KeyA: 'backward', KeyA: 'backward',
KeyD: 'forward', KeyD: 'forward',
ArrowUp: 'forward', ArrowUp: 'left',
ArrowDown: 'backward', ArrowDown: 'right',
ArrowLeft: 'left', ArrowLeft: 'backward',
ArrowRight: 'right', ArrowRight: 'forward',
ShiftLeft: 'run', ShiftLeft: 'run',
Space: 'jump', Space: 'jump',
} }

@ -8,6 +8,7 @@ import { useGLTF } from '@react-three/drei/useGLTF'
import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader' import { GLTF } from 'three/examples/jsm/loaders/GLTFLoader'
import { Color, FrontSide, MeshLambertMaterial } from 'three' import { Color, FrontSide, MeshLambertMaterial } from 'three'
import useStore from '../../store'
type GLTFResult = GLTF & { type GLTFResult = GLTF & {
nodes: { nodes: {
@ -22,7 +23,15 @@ type GLTFResult = GLTF & {
} }
} }
export default function Model(props: JSX.IntrinsicElements['group']) { type ComputerProps = {
obraId: number
}
export default function Model(props: ComputerProps & JSX.IntrinsicElements['group']) {
const pointerLockControls = useStore((state) => state.pointerLockControls)
const setPointerLockStatus = useStore((state) => state.setPointerLockStatus)
const setModalObra = useStore((state) => state.setModalObra)
const group = useRef<THREE.Group>() const group = useRef<THREE.Group>()
const [currentMaterial, setCurrentMaterial] = useState(false) const [currentMaterial, setCurrentMaterial] = useState(false)
const { nodes, materials } = useGLTF('/model/computer.glb') as GLTFResult const { nodes, materials } = useGLTF('/model/computer.glb') as GLTFResult
@ -46,11 +55,15 @@ export default function Model(props: JSX.IntrinsicElements['group']) {
{...props} {...props}
dispose={null} dispose={null}
onPointerOver={(e) => { onPointerOver={(e) => {
console.log(e.distance)
setCurrentMaterial(true) setCurrentMaterial(true)
}} }}
onPointerOut={() => setCurrentMaterial(false)} onPointerOut={() => setCurrentMaterial(false)}
onClick={() => console.log('click')} onClick={() => {
setModalObra(props.obraId)
setTimeout(() => {
pointerLockControls.unlock()
}, 500)
}}
> >
<mesh material={materials.keyboard} geometry={nodes.computer_mesh.geometry} /> <mesh material={materials.keyboard} geometry={nodes.computer_mesh.geometry} />
<mesh material={materials.marble} geometry={nodes.computer_mesh_1.geometry} /> <mesh material={materials.marble} geometry={nodes.computer_mesh_1.geometry} />

@ -21,7 +21,7 @@ type GLTFResult = GLTF & {
} }
} }
export default function Model(props: JSX.IntrinsicElements['group']) { function Model(props: JSX.IntrinsicElements['group']) {
const group = useRef<THREE.Group>() const group = useRef<THREE.Group>()
const { scene } = useGLTF('/model/street.glb') as GLTFResult const { scene } = useGLTF('/model/street.glb') as GLTFResult
return ( return (
@ -32,3 +32,5 @@ export default function Model(props: JSX.IntrinsicElements['group']) {
} }
useGLTF.preload('/model/street.glb') useGLTF.preload('/model/street.glb')
export default Model

@ -21,7 +21,7 @@ type GLTFResult = GLTF & {
export default function Model(props: JSX.IntrinsicElements['group']) { export default function Model(props: JSX.IntrinsicElements['group']) {
const group = useRef<THREE.Group>() const group = useRef<THREE.Group>()
const { scene, materials } = useGLTF('/model/terrain.glb') as GLTFResult const { scene } = useGLTF('/model/terrain.glb') as GLTFResult
return ( return (
<group ref={group} {...props} dispose={null}> <group ref={group} {...props} dispose={null}>
<primitive object={scene} dispose={null} matrixAutoUpdate={false} /> <primitive object={scene} dispose={null} matrixAutoUpdate={false} />

@ -1,4 +1,4 @@
import React, { useEffect, useState } from 'react' import React, { useEffect, useRef, useState } from 'react'
import { import {
Modal, Modal,
ModalOverlay, ModalOverlay,
@ -14,13 +14,17 @@ import {
} from '@chakra-ui/react' } from '@chakra-ui/react'
import DisconnectButton from './DisconnectButton' import DisconnectButton from './DisconnectButton'
import ObraModalContent from './ObraModalContent'
import useStore from '../store' import useStore from '../store'
const MenuOverlay: React.FC = () => { const MenuOverlay: React.FC = () => {
const continueButton = useRef<HTMLButtonElement>(null)
const [helpToastShown, setHelpToastShown] = useState<boolean>(false) const [helpToastShown, setHelpToastShown] = useState<boolean>(false)
const pointerLockControls = useStore((state) => state.pointerLockControls) const pointerLockControls = useStore((state) => state.pointerLockControls)
const pointerLocked = useStore((state) => state.pointerLocked) const pointerLocked = useStore((state) => state.pointerLocked)
const modalObra = useStore((state) => state.modalObra)
const setModalObra = useStore((state) => state.setModalObra)
const toast = useToast() const toast = useToast()
useEffect(() => { useEffect(() => {
@ -36,24 +40,44 @@ const MenuOverlay: React.FC = () => {
const lockControls = () => { const lockControls = () => {
if (pointerLockControls && !pointerLocked) { if (pointerLockControls && !pointerLocked) {
if (modalObra) {
setModalObra(null)
}
pointerLockControls.lock?.() pointerLockControls.lock?.()
} }
} }
console.log(modalObra)
return ( return (
<> <>
<Modal isOpen={!pointerLocked} onClose={() => undefined} size="xl"> <Modal
isOpen={!pointerLocked}
onClose={() => undefined}
size="xl"
initialFocusRef={continueButton}
>
<ModalOverlay /> <ModalOverlay />
<ModalContent> <ModalContent>
<ModalHeader>museo.red</ModalHeader> {modalObra ? (
<ModalBody mb="2rem" mx="2rem" textAlign="center"> <ObraModalContent id={modalObra} />
Usa las teclas <Kbd>W</Kbd>, <Kbd>A</Kbd>, <Kbd>S</Kbd> y <Kbd>D</Kbd> para ) : (
moverte. Usá el mouse para mirar alrededor <>
</ModalBody> <ModalHeader>museo.red</ModalHeader>
<ModalBody mb="2rem" mx="2rem" textAlign="center">
Usa las teclas <Kbd>W</Kbd>, <Kbd>A</Kbd>, <Kbd>S</Kbd> y <Kbd>D</Kbd>{' '}
para moverte. Usá el mouse para mirar alrededor
</ModalBody>
</>
)}
<ModalFooter as={Flex}> <ModalFooter as={Flex}>
<DisconnectButton colorScheme="gray" /> {!modalObra ? <DisconnectButton colorScheme="gray" /> : null}
<Spacer /> <Spacer />
<Button colorScheme="blue" onClick={lockControls} size="lg"> <Button
colorScheme="blue"
onClick={lockControls}
size="lg"
ref={continueButton}
>
Continuar Continuar
</Button> </Button>
</ModalFooter> </ModalFooter>

@ -0,0 +1,35 @@
import React from 'react'
import { ModalHeader, ModalBody, Link, Text } from '@chakra-ui/react'
import ReactMarkdown from 'react-markdown'
import data from '../data/obras.json'
const basePath = 'https://taller5.ludic.cc/artimanias/2020'
const ObraModalContent: React.FC<{ id: number }> = ({ id }) => {
const obra: IObraData = data.find((o) => o.id === id)
if (!obra) return null
return (
<>
<ModalHeader>{obra.obra_titulo}</ModalHeader>
<ModalBody mb="2rem" mx="2rem" textAlign="center">
<Text pb="2rem">
por{' '}
<Link href={`${basePath}${obra.alumne_url}`} isExternal>
{obra.full_name}
</Link>
</Text>
<Text as={ReactMarkdown} sx={{ p: { pb: '2rem' } }}>
{obra.obra_descripcion}
</Text>
<Link href={`${basePath}${obra.obra_url}`} isExternal>
Ver obra en sitio de Artimañas 2020
</Link>
</ModalBody>
</>
)
}
export default ObraModalContent

@ -1,6 +1,6 @@
[ [
{ {
"id": 2, "id": 1,
"full_name": "Daniela Bravo Almonacid", "full_name": "Daniela Bravo Almonacid",
"alumne_url": "/alumnes?alumne=bravo_almonacid", "alumne_url": "/alumnes?alumne=bravo_almonacid",
"obra_url": "/obras?obra=empat.ia", "obra_url": "/obras?obra=empat.ia",
@ -9,7 +9,7 @@
"obra_descripcion": "EMPAT.IA se encuentra rota, y por lo tanto, pide ayuda al usuario para encontrar partes de su código, estas pistas lleva al usuario a indagar por la muestra web y en obras ajenas, buscando el código que le permita poco a poco reparar su imagen.\n" "obra_descripcion": "EMPAT.IA se encuentra rota, y por lo tanto, pide ayuda al usuario para encontrar partes de su código, estas pistas lleva al usuario a indagar por la muestra web y en obras ajenas, buscando el código que le permita poco a poco reparar su imagen.\n"
}, },
{ {
"id": 3, "id": 2,
"full_name": "Juan Cruz Hernández Cvetic", "full_name": "Juan Cruz Hernández Cvetic",
"alumne_url": "/alumnes?alumne=hernández_cvetic", "alumne_url": "/alumnes?alumne=hernández_cvetic",
"guest": false, "guest": false,
@ -18,7 +18,7 @@
"obra_descripcion": "El siguiente trabajo-obra trata la lucha de los cuerpos gordos, dentro y en contra de un sistema que invisibiliza a las disidencias, y los modos, desde la subversión, que estas encuentran para hacerse visibles. Durante años la sociedad ha replicado y perseguido un modelo hegemónico e ideal de cuerpo no-gordo, y hoy entendemos más que nunca que la definición de ideal está en la cultura. \n\nTratando la visibilidad, la obra que acompaña al trabajo de investigación pone al usuario en el lugar de un encuestado que debe decidir entre dos opciones, mediante una interfaz simple. A medida que el usuario vaya respondiendo, las opciones irán virando hacia cuestiones tratadas en un estudio realizado en el año 2006 en Estados Unidos de forma online, relacionado a la influencia del propio peso en sesgos (explícitos o implícitos) anti-gordura.\n\nLa obra busca generar en el usuario cierta molestia (apoyada en las preguntas, que pueden ser consideradas como fuertes o muy directas) como disparadora de un espacio de reflexión, una puesta en común de lo que hemos sido, lo que somos y lo que podemos ser, buscando la comparación entre lo contestado en el 2006 y lo contestado en la actualidad mas inmediata, para evidenciar realmente si algo ha cambiado. Y si no cambió, ¿que mejor momento que ahora?.\n" "obra_descripcion": "El siguiente trabajo-obra trata la lucha de los cuerpos gordos, dentro y en contra de un sistema que invisibiliza a las disidencias, y los modos, desde la subversión, que estas encuentran para hacerse visibles. Durante años la sociedad ha replicado y perseguido un modelo hegemónico e ideal de cuerpo no-gordo, y hoy entendemos más que nunca que la definición de ideal está en la cultura. \n\nTratando la visibilidad, la obra que acompaña al trabajo de investigación pone al usuario en el lugar de un encuestado que debe decidir entre dos opciones, mediante una interfaz simple. A medida que el usuario vaya respondiendo, las opciones irán virando hacia cuestiones tratadas en un estudio realizado en el año 2006 en Estados Unidos de forma online, relacionado a la influencia del propio peso en sesgos (explícitos o implícitos) anti-gordura.\n\nLa obra busca generar en el usuario cierta molestia (apoyada en las preguntas, que pueden ser consideradas como fuertes o muy directas) como disparadora de un espacio de reflexión, una puesta en común de lo que hemos sido, lo que somos y lo que podemos ser, buscando la comparación entre lo contestado en el 2006 y lo contestado en la actualidad mas inmediata, para evidenciar realmente si algo ha cambiado. Y si no cambió, ¿que mejor momento que ahora?.\n"
}, },
{ {
"id": 4, "id": 3,
"full_name": "Lucía Cordoba", "full_name": "Lucía Cordoba",
"alumne_url": "/alumnes?alumne=cordoba", "alumne_url": "/alumnes?alumne=cordoba",
"obra_url": "/obras?obra=multiversos_del_arte", "obra_url": "/obras?obra=multiversos_del_arte",
@ -27,7 +27,7 @@
"obra_descripcion": "La idea de los multiversos ha sido objeto de estudio y de interés de muchos científicos a través de los años, y gracias a recientes descubrimientos físicos estamos muy cerca de asegurar que la multiplicidad de universos y realidades conviviendo paralelamente a nuestra cotidianidad es un hecho. Los \"universos hijos\" son aquellos que se crean por cada decisión que nosotros tomamos o dejamos en la vida. Los \"universos paralelos\" son aquellos, que vibran en una sintonía diferente a la nuestra, pero conviven en cercania a nuestra propia realidad sin entrar en conflicto.\nEl arte, debido a su capacidad de soportorar multiplicidad de percepciones y procesos creativos, \nconstruye continuamente universos de sentidos que conviven entre si." "obra_descripcion": "La idea de los multiversos ha sido objeto de estudio y de interés de muchos científicos a través de los años, y gracias a recientes descubrimientos físicos estamos muy cerca de asegurar que la multiplicidad de universos y realidades conviviendo paralelamente a nuestra cotidianidad es un hecho. Los \"universos hijos\" son aquellos que se crean por cada decisión que nosotros tomamos o dejamos en la vida. Los \"universos paralelos\" son aquellos, que vibran en una sintonía diferente a la nuestra, pero conviven en cercania a nuestra propia realidad sin entrar en conflicto.\nEl arte, debido a su capacidad de soportorar multiplicidad de percepciones y procesos creativos, \nconstruye continuamente universos de sentidos que conviven entre si."
}, },
{ {
"id": 5, "id": 4,
"full_name": "Camila Florencia González", "full_name": "Camila Florencia González",
"alumne_url": "/alumnes?alumne=gonzález", "alumne_url": "/alumnes?alumne=gonzález",
"obra_url": "/obras?obra=realidades_extendidas", "obra_url": "/obras?obra=realidades_extendidas",
@ -36,7 +36,7 @@
"obra_descripcion": "En los últimos años el desarrollo tecnológico se infiltró en diversos ámbitos de la vida cotidiana y como consecuencia, la forma que tenemos de interactuar con ella se convirtió en uno de los principales focos a investigar. \n\nEste trabajo aborda el estudio de la interacción entre humano y máquina, para ello se toma en consideración dos variables: el conjunto de operaciones y dígitos binarios, y la presencia de humanos. Lo que permite que se de esta comunicación entre ambas partes, es la interfaz. \n\nTeniendo en cuenta esto, la pregunta a la que se apunta es: ¿de qué forma nos afecta la interacción con las diferentes interfaces en la construcción de nuestra realidad?\n\nA raíz de esto surge “Realidades extendidas”, una instalación robótica interactiva que plantea demostrar la posibilidad de configurar una situación fuera del espacio cercano al usuario, a través de la interacción, en este caso, con una interfaz gráfica.\n" "obra_descripcion": "En los últimos años el desarrollo tecnológico se infiltró en diversos ámbitos de la vida cotidiana y como consecuencia, la forma que tenemos de interactuar con ella se convirtió en uno de los principales focos a investigar. \n\nEste trabajo aborda el estudio de la interacción entre humano y máquina, para ello se toma en consideración dos variables: el conjunto de operaciones y dígitos binarios, y la presencia de humanos. Lo que permite que se de esta comunicación entre ambas partes, es la interfaz. \n\nTeniendo en cuenta esto, la pregunta a la que se apunta es: ¿de qué forma nos afecta la interacción con las diferentes interfaces en la construcción de nuestra realidad?\n\nA raíz de esto surge “Realidades extendidas”, una instalación robótica interactiva que plantea demostrar la posibilidad de configurar una situación fuera del espacio cercano al usuario, a través de la interacción, en este caso, con una interfaz gráfica.\n"
}, },
{ {
"id": 6, "id": 5,
"full_name": "Julieta Iglesias Santandreu", "full_name": "Julieta Iglesias Santandreu",
"alumne_url": "/alumnes?alumne=iglesias_santandreu", "alumne_url": "/alumnes?alumne=iglesias_santandreu",
"obra_url": "/obras?obra=alguien_sujeto_y_alguien_objeto", "obra_url": "/obras?obra=alguien_sujeto_y_alguien_objeto",
@ -45,7 +45,7 @@
"obra_descripcion": "El presente proyecto de investigación tiene como objetivo generar conocimiento sobre los **modelos de dominación, subordinación y resistencia que dan forma a lo sexual.** A través de una *performance sonora e interactiva*, se busca visibilizar el abuso diario que se ejerce hacia las mujeres: refleja al acoso callejero como uno de los pilares de la violencia de género que, a su vez, está socialmente aceptado. \n\n\nEse abuso que ejercen los hombres de manera cotidiana en los espacios públicos, implica la imposición de su deseo en un ámbito que no es consentido. Por este motivo, afecta la integridad física y moral de las víctimas, lo que desencadena en daños psicológicos, ya que los actos son denigrantes, objetivantes, humillantes y amenazadores para quien los recibe. \n\n\nEsas acciones se dan en un espacio donde lo público es por y para una masculinidad normativa que no considera de igual manera a la mujer como actor social, segregándola al espacio privado. En este contexto, se desarrolla la cultura de la violación donde se toleran las agresiones sexuales, se responsabiliza a las violentadas y se mantienen impunes los perpetradores.\n\n\nEl acoso sexual callejero comienza a nombrarse recién en los últimos años gracias a los colectivos de mujeres que reconocieron esa violencia como tal. Es por eso que se considera como un hábito tanto para quienes lo observan como para quienes lo reciben. Entonces, sin intenciones de generar toma de conciencia, sino de experimentar las agresiones, la **performance busca expresar esas emociones cotidianas a través de la interacción del usuarix**, que vendría a tomar el rol de acosador. Y a su vez, todxs aquellxs que deseen ver la perfomance en vivo, sin interactuar, pasan a ocupar un rol de espectador, que aunque no acosan a la víctima, tampoco impiden que se realice la acción.\n" "obra_descripcion": "El presente proyecto de investigación tiene como objetivo generar conocimiento sobre los **modelos de dominación, subordinación y resistencia que dan forma a lo sexual.** A través de una *performance sonora e interactiva*, se busca visibilizar el abuso diario que se ejerce hacia las mujeres: refleja al acoso callejero como uno de los pilares de la violencia de género que, a su vez, está socialmente aceptado. \n\n\nEse abuso que ejercen los hombres de manera cotidiana en los espacios públicos, implica la imposición de su deseo en un ámbito que no es consentido. Por este motivo, afecta la integridad física y moral de las víctimas, lo que desencadena en daños psicológicos, ya que los actos son denigrantes, objetivantes, humillantes y amenazadores para quien los recibe. \n\n\nEsas acciones se dan en un espacio donde lo público es por y para una masculinidad normativa que no considera de igual manera a la mujer como actor social, segregándola al espacio privado. En este contexto, se desarrolla la cultura de la violación donde se toleran las agresiones sexuales, se responsabiliza a las violentadas y se mantienen impunes los perpetradores.\n\n\nEl acoso sexual callejero comienza a nombrarse recién en los últimos años gracias a los colectivos de mujeres que reconocieron esa violencia como tal. Es por eso que se considera como un hábito tanto para quienes lo observan como para quienes lo reciben. Entonces, sin intenciones de generar toma de conciencia, sino de experimentar las agresiones, la **performance busca expresar esas emociones cotidianas a través de la interacción del usuarix**, que vendría a tomar el rol de acosador. Y a su vez, todxs aquellxs que deseen ver la perfomance en vivo, sin interactuar, pasan a ocupar un rol de espectador, que aunque no acosan a la víctima, tampoco impiden que se realice la acción.\n"
}, },
{ {
"id": 7, "id": 6,
"full_name": "Lucía Belén Novello", "full_name": "Lucía Belén Novello",
"alumne_url": "/alumnes?alumne=novello", "alumne_url": "/alumnes?alumne=novello",
"obra_url": "/obras?obra=el_género_y_su_contrucción_social.", "obra_url": "/obras?obra=el_género_y_su_contrucción_social.",
@ -54,7 +54,7 @@
"obra_descripcion": "El tema principal de investigación de la tesis es la Identidad de Género, debido a que en el año 2012 en Argentina fue aprobada la Ley de Identidad de Género 26.743. Esta ley plantea que cada persona puede modificar el nombre y/o sexo que se encuentra en su partida de nacimiento o su documento de identidad como la persona se auto perciba o se sienta. \nOtro eje de investigación es el binarismo de género. Cuando hablamos de esto nos referimos a personas que no se sienten identificados con ninguno de los géneros binarios femenino/masculino. \n\nCon este trabajo final, la idea es dejarle un mensaje a las personas debido a la desinformación existente en los temas relacionados con la identidad de género, siendo esto un proceso que lleva bastante tiempo para que en las sociedades se puedan aceptar estos nuevos términos sin que haya diferencias. Es importante que se pueda reflexionar para comenzar a entender en profundidad las dificultades por las que las personas transgénero y personas no binarias luchan todos los días. \n\nLa instalación en si consta de un escenario negro en el que se encuentran arriba seis plataformas circulares, estas plataformas son transparentes y a medida que las personas que interactuan se paran sobre las mismas se encienden unas luces led de un color determinado. El color de las plataformas está dado por la bandera de la colectividad LGBTQ. \nAsí mismo, cada vez que se interactúa con la obra la proyección que se encuentra en el centro del escenario va a cambiando. El cambio se da desde palabras sueltas, a frases, preguntas hasta audios y videos para que los diferentes usuarios puedan reflexionar sobre el tema. \n\n \n" "obra_descripcion": "El tema principal de investigación de la tesis es la Identidad de Género, debido a que en el año 2012 en Argentina fue aprobada la Ley de Identidad de Género 26.743. Esta ley plantea que cada persona puede modificar el nombre y/o sexo que se encuentra en su partida de nacimiento o su documento de identidad como la persona se auto perciba o se sienta. \nOtro eje de investigación es el binarismo de género. Cuando hablamos de esto nos referimos a personas que no se sienten identificados con ninguno de los géneros binarios femenino/masculino. \n\nCon este trabajo final, la idea es dejarle un mensaje a las personas debido a la desinformación existente en los temas relacionados con la identidad de género, siendo esto un proceso que lleva bastante tiempo para que en las sociedades se puedan aceptar estos nuevos términos sin que haya diferencias. Es importante que se pueda reflexionar para comenzar a entender en profundidad las dificultades por las que las personas transgénero y personas no binarias luchan todos los días. \n\nLa instalación en si consta de un escenario negro en el que se encuentran arriba seis plataformas circulares, estas plataformas son transparentes y a medida que las personas que interactuan se paran sobre las mismas se encienden unas luces led de un color determinado. El color de las plataformas está dado por la bandera de la colectividad LGBTQ. \nAsí mismo, cada vez que se interactúa con la obra la proyección que se encuentra en el centro del escenario va a cambiando. El cambio se da desde palabras sueltas, a frases, preguntas hasta audios y videos para que los diferentes usuarios puedan reflexionar sobre el tema. \n\n \n"
}, },
{ {
"id": 8, "id": 7,
"full_name": "Santiago Antonio Reartes", "full_name": "Santiago Antonio Reartes",
"alumne_url": "/alumnes?alumne=reartes", "alumne_url": "/alumnes?alumne=reartes",
"obra_url": "/obras?obra=la_traición_de_la_realidad", "obra_url": "/obras?obra=la_traición_de_la_realidad",
@ -63,7 +63,7 @@
"obra_descripcion": "*La Traición de la Realidad* es una experiencia narrativa de poca duración. Conforma, junto con un trabajo de tesina, el proyecto final de mi tesis, en el marco de la materia Taller de Diseño Multimedial V, en la Facultad de Artes de la Universidad Nacional de La Plata, en Argentina (los escenarios navegables son una representación de un aula y un pasillo de una de las sedes de la misma facultad, la Sede Fonseca).\n\nBusqué abordar la relación entre lo **real** y lo **virtual**, así también como el vínculo que estos guardan con el **pensamiento simbólico** (más puntualmente, cómo éste se conforma en función de nuevos bastiones digitales de subjetivación)." "obra_descripcion": "*La Traición de la Realidad* es una experiencia narrativa de poca duración. Conforma, junto con un trabajo de tesina, el proyecto final de mi tesis, en el marco de la materia Taller de Diseño Multimedial V, en la Facultad de Artes de la Universidad Nacional de La Plata, en Argentina (los escenarios navegables son una representación de un aula y un pasillo de una de las sedes de la misma facultad, la Sede Fonseca).\n\nBusqué abordar la relación entre lo **real** y lo **virtual**, así también como el vínculo que estos guardan con el **pensamiento simbólico** (más puntualmente, cómo éste se conforma en función de nuevos bastiones digitales de subjetivación)."
}, },
{ {
"id": 9, "id": 8,
"full_name": "Carolina Erika Rodríguez Cioffi", "full_name": "Carolina Erika Rodríguez Cioffi",
"alumne_url": "/alumnes?alumne=rodríguez_cioffi", "alumne_url": "/alumnes?alumne=rodríguez_cioffi",
"obra_url": "/obras?obra=proyecto_nube", "obra_url": "/obras?obra=proyecto_nube",
@ -72,7 +72,7 @@
"obra_descripcion": "Proyecto Nube es una experiencia inmersiva que invita a explorar un espacio de transición entre el plano real y el digital donde “todos estamos vivos” y la muerte deja de existir por un momento. Donde a través de los recuerdos, sigue viva la esencia de aquellos que ya no se encuentran presentes en el plano biológico. " "obra_descripcion": "Proyecto Nube es una experiencia inmersiva que invita a explorar un espacio de transición entre el plano real y el digital donde “todos estamos vivos” y la muerte deja de existir por un momento. Donde a través de los recuerdos, sigue viva la esencia de aquellos que ya no se encuentran presentes en el plano biológico. "
}, },
{ {
"id": 10, "id": 9,
"full_name": "Eduardo Sitjar", "full_name": "Eduardo Sitjar",
"alumne_url": "/alumnes?alumne=sitjar", "alumne_url": "/alumnes?alumne=sitjar",
"obra_url": "/obras?obra=por_favor,_sonría", "obra_url": "/obras?obra=por_favor,_sonría",
@ -81,7 +81,7 @@
"obra_descripcion": "\"Por favor, sonría\" es una pieza de video interactivo que busca hacer evidente el funcionamiento de los algoritmos de reconocimiento y clasificación emocional que se utilizan en las apps digitales y sitios web. Éstos desarrollos tecnológicos que forman parte de una industria multimillonaria, se asientan en paradigmas psicológicos actualmente desacreditados, y se alimentan de los contenidos que liberamos los usuarios de las redes sociales. De una forma inesperada, éste tipo de tecnologías está comenzando a influir no solo en nuestro presente, pero también en el futuro y nuestras posibilidades de construir sociedades diversas." "obra_descripcion": "\"Por favor, sonría\" es una pieza de video interactivo que busca hacer evidente el funcionamiento de los algoritmos de reconocimiento y clasificación emocional que se utilizan en las apps digitales y sitios web. Éstos desarrollos tecnológicos que forman parte de una industria multimillonaria, se asientan en paradigmas psicológicos actualmente desacreditados, y se alimentan de los contenidos que liberamos los usuarios de las redes sociales. De una forma inesperada, éste tipo de tecnologías está comenzando a influir no solo en nuestro presente, pero también en el futuro y nuestras posibilidades de construir sociedades diversas."
}, },
{ {
"id": 11, "id": 10,
"full_name": "Julián Viggiano", "full_name": "Julián Viggiano",
"alumne_url": "/alumnes?alumne=viggiano", "alumne_url": "/alumnes?alumne=viggiano",
"obra_url": "/obras?obra=_aguyje_angirũ", "obra_url": "/obras?obra=_aguyje_angirũ",
@ -90,7 +90,7 @@
"obra_descripcion": "Aguyje Angirũ es una experiencia que te acerca a la lengua guaraní. Adentrate en un escenario nocturno inspirado en la selva misionera, con el cual vas a interactuar pronunciando las palabras del guaraní que leas y escuches en las distintas constelaciones.¡Bienvenidxs!¡Tereg̃uahẽ porãite!\n" "obra_descripcion": "Aguyje Angirũ es una experiencia que te acerca a la lengua guaraní. Adentrate en un escenario nocturno inspirado en la selva misionera, con el cual vas a interactuar pronunciando las palabras del guaraní que leas y escuches en las distintas constelaciones.¡Bienvenidxs!¡Tereg̃uahẽ porãite!\n"
}, },
{ {
"id": 12, "id": 11,
"full_name": "Mateo Demicheli", "full_name": "Mateo Demicheli",
"alumne_url": "/alumnes?alumne=demicheli", "alumne_url": "/alumnes?alumne=demicheli",
"obra_url": "/obras?obra=no_requiem", "obra_url": "/obras?obra=no_requiem",
@ -99,7 +99,7 @@
"obra_descripcion": "En un mundo donde solo **vos** podes cumplir con la profecía de sellar las puertas del infierno y derrotar a Zerok bande tu espada o desenfunda tu revolver para lograr el Ultimate Requiem y la paz entre todos los planos.\n\nNo Requiem es videojuego de disparos y acción en primera persona ambientado en una estética infernal, debajo esta el link para descargar el juego y debajo de ese link el paso a paso de como descargarlo y jugarlo." "obra_descripcion": "En un mundo donde solo **vos** podes cumplir con la profecía de sellar las puertas del infierno y derrotar a Zerok bande tu espada o desenfunda tu revolver para lograr el Ultimate Requiem y la paz entre todos los planos.\n\nNo Requiem es videojuego de disparos y acción en primera persona ambientado en una estética infernal, debajo esta el link para descargar el juego y debajo de ese link el paso a paso de como descargarlo y jugarlo."
}, },
{ {
"id": 13, "id": 12,
"full_name": "Gastón Claudio Micozzi", "full_name": "Gastón Claudio Micozzi",
"alumne_url": "/alumnes?alumne=micozzi", "alumne_url": "/alumnes?alumne=micozzi",
"obra_url": "/obras?obra=interferencia_humana", "obra_url": "/obras?obra=interferencia_humana",
@ -108,7 +108,7 @@
"obra_descripcion": "Tanto la obra como el escrito interpela el rol del usuario como pilar fundamental para que la obra interactiva se pueda llamar interactiva. El rol del usuario en esta instalación es fundamental para hacer de interferencia a la tecnología, el sonido y la atmósfera donde esta emplazada es de caracter oscuro, tenue. La búsqueda está en no bombardear con información visual para que sobresalga lo sensorial y lo auditivo. La obra invita a recorrer, a oir, a interferir. El/la usuarix es quién interviene la obra, la modifica y la altera.\nLa búsqueda comenzó trabajando el sonido de manera que sea el objeto principal de la obra, fui dandome cuenta que sin la presencia de algo visual que llame atención lo sensorial prevalecia y se atendia mas al oído." "obra_descripcion": "Tanto la obra como el escrito interpela el rol del usuario como pilar fundamental para que la obra interactiva se pueda llamar interactiva. El rol del usuario en esta instalación es fundamental para hacer de interferencia a la tecnología, el sonido y la atmósfera donde esta emplazada es de caracter oscuro, tenue. La búsqueda está en no bombardear con información visual para que sobresalga lo sensorial y lo auditivo. La obra invita a recorrer, a oir, a interferir. El/la usuarix es quién interviene la obra, la modifica y la altera.\nLa búsqueda comenzó trabajando el sonido de manera que sea el objeto principal de la obra, fui dandome cuenta que sin la presencia de algo visual que llame atención lo sensorial prevalecia y se atendia mas al oído."
}, },
{ {
"id": 14, "id": 13,
"full_name": "Pedro Iñaki Sagasti", "full_name": "Pedro Iñaki Sagasti",
"alumne_url": "/alumnes?alumne=sagasti", "alumne_url": "/alumnes?alumne=sagasti",
"obra_url": "/obras?obra=nuevas_canciones_de_bandidxs", "obra_url": "/obras?obra=nuevas_canciones_de_bandidxs",
@ -117,7 +117,7 @@
"obra_descripcion": "Canciones de bandidxs es un EP lanzado en 2019 donde se encuentran una serie de obras en las que, parte de los audios utilizados, son grabaciones de la resistencia en Chile durante ese año. Ademas se incorporaron fragmentos de el derecho a vivir en paz por Victor Jara. En esta ocasión se retoman dos de esos temas (canciones de bandidxs y vea lo que está haciendo) sumándole dos piezas nuevas compuestas de manera similar.\nLa idea central de esta obra es re ubicar los sonidos y eventos que los mismos evocan en el marco de una música electrónica bailable. Acompañando y celebrando el movimiento popular y, a su vez, re interpretando el archivo de las protestas a través del live coding. \nEsta performance utiliza Tidal Cycles para generar la música e Hydra para realizar las visuales." "obra_descripcion": "Canciones de bandidxs es un EP lanzado en 2019 donde se encuentran una serie de obras en las que, parte de los audios utilizados, son grabaciones de la resistencia en Chile durante ese año. Ademas se incorporaron fragmentos de el derecho a vivir en paz por Victor Jara. En esta ocasión se retoman dos de esos temas (canciones de bandidxs y vea lo que está haciendo) sumándole dos piezas nuevas compuestas de manera similar.\nLa idea central de esta obra es re ubicar los sonidos y eventos que los mismos evocan en el marco de una música electrónica bailable. Acompañando y celebrando el movimiento popular y, a su vez, re interpretando el archivo de las protestas a través del live coding. \nEsta performance utiliza Tidal Cycles para generar la música e Hydra para realizar las visuales."
}, },
{ {
"id": 15, "id": 14,
"full_name": "Diego Prado y Guido Dalponte", "full_name": "Diego Prado y Guido Dalponte",
"alumne_url": "/alumnes?alumne=dalponte", "alumne_url": "/alumnes?alumne=dalponte",
"obra_url": "/obras?obra=disloque", "obra_url": "/obras?obra=disloque",

@ -1 +1,13 @@
/// <reference types="react-scripts" /> /// <reference types="react-scripts" />
declare type IObraData =
| {
id: number
full_name: string
alumne_url: string
obra_url: string
guest: boolean
obra_titulo: string
obra_descripcion: string
}
| undefined

@ -24,6 +24,8 @@ export type State = {
socket: null | Socket socket: null | Socket
setSocket: (socket: Socket | null) => void setSocket: (socket: Socket | null) => void
error: Error error: Error
setModalObra: (modalObra: number | null) => void
modalObra?: number | null
setError: (error: Error) => void setError: (error: Error) => void
initialTransform: null | Transform initialTransform: null | Transform
userTransforms: UserTransforms | null userTransforms: UserTransforms | null
@ -39,11 +41,13 @@ const useStore = create<State>((set) => ({
socket: null, socket: null,
setSocket: (socket) => set(() => ({ socket })), setSocket: (socket) => set(() => ({ socket })),
error: null, error: null,
modelObra: null,
initialTransform: null, initialTransform: null,
setError: (error) => set(() => ({ error })), setError: (error) => set(() => ({ error })),
userTransforms: null, userTransforms: null,
setUserTransforms: (userTransforms) => set(() => ({ userTransforms })), setUserTransforms: (userTransforms) => set(() => ({ userTransforms })),
setInitialTransform: (initialTransform) => set(() => ({ initialTransform })), setInitialTransform: (initialTransform) => set(() => ({ initialTransform })),
setModalObra: (modalObra: number | null) => set(() => ({ modalObra })),
})) }))
export default useStore export default useStore

@ -16,5 +16,6 @@
"noEmit": true, "noEmit": true,
"jsx": "react" "jsx": "react"
}, },
"include": ["src"] "include": ["src"]
} }

Loading…
Cancel
Save