diff --git a/README.md b/README.md index 75b9234..620e103 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,18 @@ -# Next.js + Tailwind CSS Example - -This example shows how to use [Tailwind CSS](https://tailwindcss.com/) (v2.1) with Next.js. It follows the steps outlined in the official [Tailwind docs](https://tailwindcss.com/docs/guides/nextjs). - -It uses the new [`Just-in-Time Mode`](https://tailwindcss.com/docs/just-in-time-mode) for Tailwind CSS. - -## Deploy your own - -Deploy the example using [Vercel](https://vercel.com?utm_source=github&utm_medium=readme&utm_campaign=next-example): - -[![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new/git/external?repository-url=https://github.com/vercel/next.js/tree/canary/examples/with-tailwindcss&project-name=with-tailwindcss&repository-name=with-tailwindcss) - -## How to use - -Execute [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app) with [npm](https://docs.npmjs.com/cli/init) or [Yarn](https://yarnpkg.com/lang/en/docs/cli/create/) to bootstrap the example: - -```bash -npx create-next-app --example with-tailwindcss with-tailwindcss-app -# or -yarn create next-app --example with-tailwindcss with-tailwindcss-app +## Object structure +The core structure is json array of objects. Only the "name" attribute is necessary; the id is also internally necessary but it's created on the fly if it doesn't exist. The reason that ids are needed is that comparing objects is annoying. ``` - -Deploy it to the cloud with [Vercel](https://vercel.com/new?utm_source=github&utm_medium=readme&utm_campaign=next-example) ([Documentation](https://nextjs.org/docs/deployment)). +[ + { + "id": 1, + "name": "Peter Parker", + "someOptionalKey": "...", + "anotherMoreOptionalKey": "..." + }, + { + "id": 2, + "name": "Spiderman", + "someOptionalKey": "...", + "anotherMoreOptionalKey": "..." + } +] +``` \ No newline at end of file diff --git a/lib/displayAsMarkdown.js b/lib/displayAsMarkdown.js index f8136a4..a744346 100644 --- a/lib/displayAsMarkdown.js +++ b/lib/displayAsMarkdown.js @@ -22,7 +22,6 @@ export function DisplayAsMarkdown({markdowntext}){ return( ) } \ No newline at end of file diff --git a/lib/displayElement.js b/lib/displayElement.js index 112cf61..ae6f3b5 100644 --- a/lib/displayElement.js +++ b/lib/displayElement.js @@ -1,14 +1,18 @@ import React from "react"; +let capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1) + export function DisplayElement({element}){ + let otherkeys = Object.keys(element).filter(key => key!="name" && key!="url" && key != "id") + let othervalues = otherkeys.map(key => element[key]) + let otherpairs = otherkeys.map((key,i) => ({key: capitalizeFirstLetter(key), value: othervalues[i]})) + return(
-

{`${element.name}`}

+

{`${element.name}`}

-

{`Author: ${element.author}`}

-

{`Karma: ${element.karma}`}

- + {otherpairs.map(pair =>

{`${pair.key}: ${pair.value}`}

)}
) } \ No newline at end of file diff --git a/lib/findPaths.js b/lib/findPaths.js new file mode 100644 index 0000000..933b4f9 --- /dev/null +++ b/lib/findPaths.js @@ -0,0 +1,167 @@ +/* Imports*/ +import React from "react"; + +/* Utilities */ +let avg = arr => arr.reduce((a,b) => (a+b)) / arr.length + +/* Main function */ + +function findPathsInner({sourceElementId, targetElementId, pathSoFar, links, listOfElements, maxLengthOfPath}){ + let paths = [] + + if(maxLengthOfPath > 0){ + for(let link of links){ + if( + ((link.source == sourceElementId) && (link.target == targetElementId)) || + ((link.source == targetElementId) && (link.target == sourceElementId)) + ){ + paths.push(pathSoFar.concat(link).flat()) + //console.log(`Final path found at recursion level: ${maxLengthOfPath}. Source: ${sourceElementId}, target=${targetElementId}`) + //console.log(link) + } else if((link.source == sourceElementId)){ + let newPaths = findPathsInner({sourceElementId:link.target, targetElementId, pathSoFar: pathSoFar.concat(link).flat(), links, listOfElements, maxLengthOfPath: (maxLengthOfPath-1)}) + if(newPaths.length != 0){ + //console.log(`New link, at recursion level: ${maxLengthOfPath}. Source: ${sourceElementId}, target=${targetElementId}. PathSoFar: ${pathSoFar}`) + //console.log(link) + //console.log(newPaths) + paths.push(...newPaths) + } + }else if((link.target == sourceElementId)){ + let newPaths = findPathsInner({sourceElementId:link.source, targetElementId, pathSoFar: pathSoFar.concat(link).flat(), links, listOfElements, maxLengthOfPath: (maxLengthOfPath-1)}) + if(newPaths.length != 0){ + //console.log(`New link, at recursion level: ${maxLengthOfPath}. Source: ${sourceElementId}, target=${targetElementId}. PathSoFar: ${pathSoFar}`) + //console.log(link) + //console.log(newPaths) + paths.push(...newPaths) + } + } + + } + } + + return paths +} + +function findPaths({sourceElementId, targetElementId, links, listOfElements}){ + let positionSourceElement = listOfElements.map((element, i) => (element.id)).indexOf(sourceElementId) + let positionTargetElement = listOfElements.map((element, i) => (element.id)).indexOf(targetElementId) + let maxLengthOfPath = Math.abs(positionSourceElement - positionTargetElement) + console.log(maxLengthOfPath) + + return findPathsInner({sourceElementId, targetElementId, pathSoFar: [], links, listOfElements, maxLengthOfPath}) +} + +function findDistance({sourceElementId, targetElementId, links, listOfElements}){ + let paths = findPaths({sourceElementId, targetElementId, links, listOfElements}) + // console.log(paths) + let weights = [] + for(let path of paths){ + let currentSource = sourceElementId + let weight = 1 + // console.log(path) + for(let element of path){ + // console.log(element) + // console.log(element.source) + // console.log(element.target) + let distance = 0 + if(element.source == currentSource){ + // console.log("A") + distance = element.distance + currentSource = element.target + }else if(element.target == currentSource){ + // console.log("B") + distance = 1/Number(element.distance) + currentSource = element.source + } + weight = weight*distance + // console.log(weight) + + } + weights.push(weight) + } + //let sum = JSON.stringify(weights)//weights.length > 0 ? weights.reduce((a,b) => (a+b)) / weights.length : "Not found" + //return sum + return weights.map(weight => Math.round(weight*100)/100) +} + +function findDistancesForAllElements({links, listOfElements}){ + let referenceElement = listOfElements.filter(x => x.isReferenceValue)[0] + console.log(referenceElement.id) + let distances = listOfElements.map(element =>{ + if(element.isReferenceValue){ + return [1] + }else{ + // console.log({sourceElementId: referenceElement.id, targetElementId: element.id, links, listOfElements}) + return findDistance({sourceElementId: Number(referenceElement.id), targetElementId: Number(element.id), links, listOfElements}) + } + }) + return distances +} + +export function CreateTableWithDistances({isListOrdered, quantitativeComparisons, listOfElements, referenceValueId}){ + if(!isListOrdered){ // listOfElements + console.log + console.log("List of Elements: ") + console.log(listOfElements) + return (
) + } else { + console.log(`isListOrdered: ${isListOrdered}`) + console.log("List Of Elements:") + console.log(listOfElements) + let links = quantitativeComparisons.map(([element1, element2, distance]) => ({source: element1, target: element2, distance: distance})) + + let distances = findDistancesForAllElements({links, listOfElements}) + + let rows = listOfElements.map((element, i) => ({id: element.id, name: element.name, distances: distances[i]})) + + return(
+ + + + + + + + + + + + + + {rows.map(row => + + + + + + + + + )} + +
Id   Element    Possible relative values    Average relative value
{row.id}   {row.name}   {JSON.stringify(row.distances, null, 2)}   {avg(row.distances).toFixed(2)}
+
+) + } + +} + +/* Testing */ +//import fs from 'fs'; +//import path from 'path'; +/* +const directory = path.join(process.cwd(),"pages") +let links = JSON.parse(fs.readFileSync(path.join(directory, 'distancesExample.json'), 'utf8')); +let listOfElements = JSON.parse(fs.readFileSync(path.join(directory, 'listOfPosts.json'), 'utf8')); + +let paths = findPathsInner({sourceElementId:2, targetElementId:0, pathSoFar: [], links, listOfElements, maxLengthOfPath: 2}) +console.log(JSON.stringify(paths, null, 2)) +*/ +/* +let paths = findPaths({sourceElementId:2, targetElementId:0, links, listOfElements}) +console.log(JSON.stringify(paths, null, 2)) +*/ +/* +let distances = findDistance({sourceElementId:2, targetElementId:4, links, listOfElements}) +console.log(distances) +*/ \ No newline at end of file diff --git a/lib/slider.js b/lib/slider.js index 14b0f24..4d74700 100644 --- a/lib/slider.js +++ b/lib/slider.js @@ -84,6 +84,7 @@ export function SliderElement({ onChange, value, displayFunction }) { domain={[-3,3]} values={[value]} onChange={onChange} + reversed={true} > {({ getRailProps }) => ( diff --git a/package-lock.json b/package-lock.json index dfa8ded..bcedcda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,7 +20,7 @@ "devDependencies": { "autoprefixer": "^10.0.4", "postcss": "^8.1.10", - "tailwindcss": "^2.1.1" + "tailwindcss": "^2.0.4" } }, "node_modules/@babel/code-frame": { @@ -205,41 +205,6 @@ } } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@opentelemetry/api": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz", @@ -1365,12 +1330,6 @@ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, - "node_modules/dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "node_modules/domain-browser": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", @@ -1526,32 +1485,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "node_modules/fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1681,49 +1614,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "dependencies": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "dependencies": { - "is-glob": "^2.0.0" - } - }, - "node_modules/glob-base/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-base/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2047,15 +1937,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -2314,12 +2195,6 @@ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", "dev": true }, - "node_modules/lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", - "dev": true - }, "node_modules/longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", @@ -2551,15 +2426,6 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -2674,19 +2540,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - }, - "engines": { - "node": ">=8.6" - } - }, "node_modules/miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -3222,42 +3075,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "dependencies": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parse-glob/node_modules/is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "dependencies": { - "is-extglob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -3572,38 +3389,6 @@ "node": ">=0.4.x" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -3833,16 +3618,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -3852,29 +3627,6 @@ "inherits": "^2.0.1" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", @@ -4139,36 +3891,29 @@ } }, "node_modules/tailwindcss": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.4.tgz", - "integrity": "sha512-fh1KImDLg6se/Suaelju/5oFbqq1b0ntagmGLu0aG9LlnNPGHgO1n/4E57CbKcCtyz/VYnvVXUiWmfyfBBZQ6g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.0.4.tgz", + "integrity": "sha512-WhgR0oiBxGOZ9jY0yVfaJCHnckR7U74Fs/BMsYxGdwGJQ5Hd/HlaKD26bEJFZOvYScJo0QcUj2ImldzedsG7Bw==", "dev": true, "dependencies": { "@fullhuman/postcss-purgecss": "^3.1.3", "bytes": "^3.0.0", "chalk": "^4.1.0", - "chokidar": "^3.5.1", "color": "^3.1.3", "detective": "^5.2.0", "didyoumean": "^1.2.1", - "dlv": "^1.1.3", - "fast-glob": "^3.2.5", "fs-extra": "^9.1.0", "html-tags": "^3.1.0", "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", "modern-normalize": "^1.0.0", "node-emoji": "^1.8.1", - "normalize-path": "^3.0.0", "object-hash": "^2.1.1", - "parse-glob": "^3.0.4", "postcss-functions": "^3", "postcss-js": "^3.0.3", - "postcss-nested": "5.0.5", + "postcss-nested": "^5.0.5", "postcss-selector-parser": "^6.0.4", "postcss-value-parser": "^4.1.0", "pretty-hrtime": "^1.0.3", - "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0" }, @@ -4812,32 +4557,6 @@ "integrity": "sha512-qtBF56vPC6d6a8p7LYd0iRjW89fhY80kAIzmj+VonvIGjK/nymBjcFUhbKiMFqlhsarCksnhwX+Zmn95Dw9qvA==", "requires": {} }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true - }, - "@nodelib/fs.walk": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz", - "integrity": "sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, "@opentelemetry/api": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-0.14.0.tgz", @@ -5796,12 +5515,6 @@ } } }, - "dlv": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true - }, "domain-browser": { "version": "4.19.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.19.0.tgz", @@ -5923,29 +5636,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, - "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" - } - }, - "fastq": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", - "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } - }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6044,42 +5734,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -6294,12 +5948,6 @@ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6473,12 +6121,6 @@ "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=", "dev": true }, - "lodash.topath": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", - "dev": true - }, "longest-streak": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", @@ -6645,12 +6287,6 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true - }, "micromark": { "version": "2.11.4", "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", @@ -6725,16 +6361,6 @@ "micromark": "~2.11.0" } }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "dev": true, - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, "miller-rabin": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", @@ -7169,35 +6795,6 @@ "is-hexadecimal": "^1.0.0" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", @@ -7445,18 +7042,6 @@ "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7642,12 +7227,6 @@ "path-parse": "^1.0.6" } }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, "ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -7657,15 +7236,6 @@ "inherits": "^2.0.1" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, "rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", @@ -7876,36 +7446,29 @@ } }, "tailwindcss": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.4.tgz", - "integrity": "sha512-fh1KImDLg6se/Suaelju/5oFbqq1b0ntagmGLu0aG9LlnNPGHgO1n/4E57CbKcCtyz/VYnvVXUiWmfyfBBZQ6g==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.0.4.tgz", + "integrity": "sha512-WhgR0oiBxGOZ9jY0yVfaJCHnckR7U74Fs/BMsYxGdwGJQ5Hd/HlaKD26bEJFZOvYScJo0QcUj2ImldzedsG7Bw==", "dev": true, "requires": { "@fullhuman/postcss-purgecss": "^3.1.3", "bytes": "^3.0.0", "chalk": "^4.1.0", - "chokidar": "^3.5.1", "color": "^3.1.3", "detective": "^5.2.0", "didyoumean": "^1.2.1", - "dlv": "^1.1.3", - "fast-glob": "^3.2.5", "fs-extra": "^9.1.0", "html-tags": "^3.1.0", "lodash": "^4.17.21", - "lodash.topath": "^4.5.2", "modern-normalize": "^1.0.0", "node-emoji": "^1.8.1", - "normalize-path": "^3.0.0", "object-hash": "^2.1.1", - "parse-glob": "^3.0.4", "postcss-functions": "^3", "postcss-js": "^3.0.3", - "postcss-nested": "5.0.5", + "postcss-nested": "^5.0.5", "postcss-selector-parser": "^6.0.4", "postcss-value-parser": "^4.1.0", "pretty-hrtime": "^1.0.3", - "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", "resolve": "^1.20.0" }, diff --git a/package.json b/package.json index 743b471..53ab02a 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,6 @@ "devDependencies": { "autoprefixer": "^10.0.4", "postcss": "^8.1.10", - "tailwindcss": "^2.1.1" + "tailwindcss": "^2.0.4" } } diff --git a/pages/distancesExample.json b/pages/distancesExample.json new file mode 100644 index 0000000..5a700eb --- /dev/null +++ b/pages/distancesExample.json @@ -0,0 +1,53 @@ +[ + + { + + "source": 3, + + "target": 4, + + "distance": 5 + + }, + + { + + "source": 2, + + "target": 3, + + "distance": 4 + + }, + + { + + "source": 0, + + "target": 1, + + "distance": 4 + + }, + + { + + "source": 0, + + "target": 2, + + "distance": 5 + + }, + + { + + "source": 1, + + "target": 2, + + "distance": 5 + + } + + ] \ No newline at end of file diff --git a/pages/index.js b/pages/index.js index 11e12dc..3482590 100644 --- a/pages/index.js +++ b/pages/index.js @@ -3,9 +3,10 @@ import React, { useState } from "react"; import fs from 'fs'; import path from 'path'; import {DrawGraph} from '../lib/labeledgraph'; -import { SliderElement } from "../lib/slider.js"; +import { SliderElement } from "../lib/slider"; import {DisplayElement} from '../lib/displayElement' import {DisplayAsMarkdown} from '../lib/displayAsMarkdown' +import {CreateTableWithDistances} from '../lib/findPaths' // Utilities @@ -19,7 +20,7 @@ Array.prototype.containsArray = function(val) { return hash.hasOwnProperty(val); } -let checkIfListIsOrdered = (arr, binaryComparisons) => { +let checkIfListIsOrdered = (arr, binaryComparisons) => { // list of ids let l = arr.length let isOrdered = true for(let i=0; i element.id)// + let referenceValueId = 1//listOfPosts.filter(post => post.isReferenceValue || false)[0].id const [toComparePair, setToComparePair] = useState([list[list.length-2], list[list.length-1]]) const [binaryComparisons, setBinaryComparisons] = useState([]) @@ -185,19 +186,19 @@ export default function Home({listOfPosts}) { className="flex m-auto border-gray-300 border-4 h-72 w-72" //onClick={() => nextStep(binaryComparisons, toComparePair[0], toComparePair[1])} > -

+

-

+
nextStep(binaryComparisons, toComparePair[1], toComparePair[0])} > -

+

-

+
@@ -220,7 +221,15 @@ export default function Home({listOfPosts}) { list={orderedList} quantitativeComparisons={quantitativeComparisons}> - +
+ listOfPosts[i])} + referenceValueId={referenceValueId} + > + +
@@ -232,9 +241,7 @@ export default function Home({listOfPosts}) {

{`Quantitative comparisons: ${JSON.stringify(quantitativeComparisons, null, 4)}`}

*/} - -
- + ) } diff --git a/pages/listOfPosts.json b/pages/listOfPosts.json index ef92b70..edb2538 100644 --- a/pages/listOfPosts.json +++ b/pages/listOfPosts.json @@ -1,72 +1,38 @@ [ { - "id": "0", + "id": 0, "name": "Relative Impact of the First 10 EA Forum Prize Winners", "url": "https://forum.effectivealtruism.org/posts/pqphZhx2nJocGCpwc/relative-impact-of-the-first-10-ea-forum-prize-winners", "author": "Nuño Sempere", "karma": 80 }, { - "id": "1", + "id": 1, "name": "Introducing Metaforecast: A Forecast Aggregator and Search Tool", "url": "https://forum.effectivealtruism.org/posts/tEo5oXeSNcB3sYr8m/introducing-metaforecast-a-forecast-aggregator-and-search", "author": "Nuño Sempere", "karma": 115 }, { - "id": "2", + "id": 2, "name": "Forecasting Prize Results", "url": "https://forum.effectivealtruism.org/posts/8QFWHzmur4roAcnCf/forecasting-prize-results", "author": "Nuño Sempere", - "karma": 44 + "karma": 44, + "isReferenceValue": true }, { - "id": "3", + "id": 3, "name": "A Funnel for Cause Candidates", "url": "https://forum.effectivealtruism.org/posts/iRA4Dd2bfX9nukSo3/a-funnel-for-cause-candidates", "author": "Nuño Sempere", "karma": 34 }, { - "id": "4", + "id": 4, "name": "2020: Forecasting in Review", "url": "https://forum.effectivealtruism.org/posts/8shCj2eoQygQvtoZP/2020-forecasting-in-review", "author": "Nuño Sempere", "karma": 35 - }, - { - "id": "5", - "name": "Big List of Cause Candidates", - "url": "https://forum.effectivealtruism.org/posts/SCqRu6shoa8ySvRAa/big-list-of-cause-candidates", - "author": "Nuño Sempere", - "karma": 182 - }, - { - "id": "6", - "name": "An experiment to evaluate the value of one researcher's work", - "url": "https://forum.effectivealtruism.org/posts/udGBF8YWshCKwRKTp/an-experiment-to-evaluate-the-value-of-one-researcher-s-work", - "author": "Nuño Sempere", - "karma": 55 - }, - { - "id": "7", - "name": "Predicting the Value of Small Altruistic Projects: A Proof of Concept Experiment", - "url": "https://forum.effectivealtruism.org/posts/qb56nicbnj9asSemx/predicting-the-value-of-small-altruistic-projects-a-proof-of", - "author": "Nuño Sempere", - "karma": 51 - }, - { - "id": "8", - "name": "Incentive Problems With Current Forecasting Competitions", - "url": "https://forum.effectivealtruism.org/posts/ztmBA8v6KvGChxw92/incentive-problems-with-current-forecasting-competitions", - "author": "Nuño Sempere", - "karma": 54 - }, - { - "id": "9", - "name": "Shapley Values: Better Than Counterfactuals", - "url": "https://forum.effectivealtruism.org/posts/XHZJ9i7QBtAJZ6byW/shapley-values-better-than-counterfactuals", - "author": "Nuño Sempere", - "karma": 92 } ] diff --git a/pages/listOfPosts_full.json b/pages/listOfPosts_full.json new file mode 100644 index 0000000..ef92b70 --- /dev/null +++ b/pages/listOfPosts_full.json @@ -0,0 +1,72 @@ +[ + { + "id": "0", + "name": "Relative Impact of the First 10 EA Forum Prize Winners", + "url": "https://forum.effectivealtruism.org/posts/pqphZhx2nJocGCpwc/relative-impact-of-the-first-10-ea-forum-prize-winners", + "author": "Nuño Sempere", + "karma": 80 + }, + { + "id": "1", + "name": "Introducing Metaforecast: A Forecast Aggregator and Search Tool", + "url": "https://forum.effectivealtruism.org/posts/tEo5oXeSNcB3sYr8m/introducing-metaforecast-a-forecast-aggregator-and-search", + "author": "Nuño Sempere", + "karma": 115 + }, + { + "id": "2", + "name": "Forecasting Prize Results", + "url": "https://forum.effectivealtruism.org/posts/8QFWHzmur4roAcnCf/forecasting-prize-results", + "author": "Nuño Sempere", + "karma": 44 + }, + { + "id": "3", + "name": "A Funnel for Cause Candidates", + "url": "https://forum.effectivealtruism.org/posts/iRA4Dd2bfX9nukSo3/a-funnel-for-cause-candidates", + "author": "Nuño Sempere", + "karma": 34 + }, + { + "id": "4", + "name": "2020: Forecasting in Review", + "url": "https://forum.effectivealtruism.org/posts/8shCj2eoQygQvtoZP/2020-forecasting-in-review", + "author": "Nuño Sempere", + "karma": 35 + }, + { + "id": "5", + "name": "Big List of Cause Candidates", + "url": "https://forum.effectivealtruism.org/posts/SCqRu6shoa8ySvRAa/big-list-of-cause-candidates", + "author": "Nuño Sempere", + "karma": 182 + }, + { + "id": "6", + "name": "An experiment to evaluate the value of one researcher's work", + "url": "https://forum.effectivealtruism.org/posts/udGBF8YWshCKwRKTp/an-experiment-to-evaluate-the-value-of-one-researcher-s-work", + "author": "Nuño Sempere", + "karma": 55 + }, + { + "id": "7", + "name": "Predicting the Value of Small Altruistic Projects: A Proof of Concept Experiment", + "url": "https://forum.effectivealtruism.org/posts/qb56nicbnj9asSemx/predicting-the-value-of-small-altruistic-projects-a-proof-of", + "author": "Nuño Sempere", + "karma": 51 + }, + { + "id": "8", + "name": "Incentive Problems With Current Forecasting Competitions", + "url": "https://forum.effectivealtruism.org/posts/ztmBA8v6KvGChxw92/incentive-problems-with-current-forecasting-competitions", + "author": "Nuño Sempere", + "karma": 54 + }, + { + "id": "9", + "name": "Shapley Values: Better Than Counterfactuals", + "url": "https://forum.effectivealtruism.org/posts/XHZJ9i7QBtAJZ6byW/shapley-values-better-than-counterfactuals", + "author": "Nuño Sempere", + "karma": 92 + } +] diff --git a/styles/globals.css b/styles/globals.css index edffb33..8d864a7 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -45,4 +45,8 @@ p, ul { ul { list-style-type: square; margin-left: 20px; +} + +th, td { + font-size: 17px; } \ No newline at end of file