1
0
Fork 0

setup workflows

This commit is contained in:
iTNTPiston 2022-07-06 20:36:57 -07:00
parent dbcb7aef8d
commit 2d82168e1d
55 changed files with 241 additions and 179 deletions

43
.github/workflows/main_deploy.yml vendored Normal file
View file

@ -0,0 +1,43 @@
name: Deploy
on:
push:
tags:
- "v*.*.*"
jobs:
work:
name: Lint, Test, Build, Deploy
#
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout
uses: actions/checkout@v2
- name: Setup | just
uses: extractions/setup-just@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup | Python 3.10
uses: actions/setup-python@v3.0.0
with:
python-version: '3.10'
- name: Setup | toml, pyyaml, pylint, pylint-quotes
uses: BSFishy/pip-action@v1
with:
packages: |
pylint
pylint-quotes
- name: Setup | Node Install
run: npm ci
- name: Lint
run: just lint
- name: Test (WIP)
run: echo "No tests ran"
- name: Build
run: npm run build
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.2.5
with:
branch: prod
folder: build

47
.github/workflows/main_push.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: Push, Pull Request
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
work:
name: Lint, Test, Build
#
runs-on: ubuntu-latest
steps:
- name: Setup | Checkout
uses: actions/checkout@v2
- name: Setup | just
uses: extractions/setup-just@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup | Python 3.10
uses: actions/setup-python@v3.0.0
with:
python-version: '3.10'
- name: Setup | toml, pyyaml, pylint, pylint-quotes
uses: BSFishy/pip-action@v1
with:
packages: |
pylint
pylint-quotes
- name: Setup | Node Install
run: npm ci
- name: Lint
run: just lint
- name: Test (WIP)
run: echo "No tests ran"
- name: Build
run: npm run build

View file

@ -5,3 +5,8 @@ deploy:
git add .
git commit -m "Local Build Deployment"
git push
lint VERBOSE="":
pylint scripts
python3 scripts/lint.py {{VERBOSE}}
npm run lint

View file

@ -1 +0,0 @@
dupl.itntpiston.app

View file

@ -1,44 +0,0 @@
{
"files": {
"main.css": "/static/css/main.820e0273.css",
"main.js": "/static/js/main.4124a2d4.js",
"static/js/787.ada1a5f8.chunk.js": "/static/js/787.ada1a5f8.chunk.js",
"static/media/PotLid.png": "/static/media/PotLid.baf78a40199753b3af39.png",
"static/media/Calamity-Regular.otf": "/static/media/Calamity-Regular.cbeefc650e6ac39335b6.otf",
"static/media/SpiritOrb.png": "/static/media/SpiritOrb.66f25f8bbb0f27f0f568.png",
"static/media/AncientArrow.png": "/static/media/AncientArrow.9a1a41d05b09babd770d.png",
"static/media/IceArrow.png": "/static/media/IceArrow.c227e7fda67cfc094e27.png",
"static/media/FaroshHorn.png": "/static/media/FaroshHorn.ea7e3cbc262af3c30e1d.png",
"static/media/Rushroom.png": "/static/media/Rushroom.ab3824a1f76fa5347021.png",
"static/media/SpeedFood.png": "/static/media/SpeedFood.1bde9cae9ffc0c3906ea.png",
"static/media/HeartyBass.png": "/static/media/HeartyBass.4e0f8e06034479e163fe.png",
"static/media/SilentPrincess.png": "/static/media/SilentPrincess.6b9283141fbc5993b481.png",
"static/media/FaroshScale.png": "/static/media/FaroshScale.cc674ca9ac3cb63f99a3.png",
"static/media/Honey.png": "/static/media/Honey.dbf6fd6eae2e33fc3d6c.png",
"static/media/Tail.png": "/static/media/Tail.a43cfa310e2c86532247.png",
"static/media/Wood.png": "/static/media/Wood.8105d493814e4ecd145f.png",
"static/media/Diamond.png": "/static/media/Diamond.df6931b37a1f47165e37.png",
"static/media/NormalArrow.png": "/static/media/NormalArrow.1c54890bf60a08914a20.png",
"static/media/BombArrow.png": "/static/media/BombArrow.6b5994846aa06c8a8e92.png",
"static/media/Opal.png": "/static/media/Opal.2e20b71d79a80f905a80.png",
"static/media/BigHeartyRadish.png": "/static/media/BigHeartyRadish.f4234222deeb380ad3f2.png",
"static/media/HylianShroom.png": "/static/media/HylianShroom.0f05ef4a95089fb84ba0.png",
"static/media/Spring.png": "/static/media/Spring.bb7dcfa111b7b56ab25a.png",
"static/media/ShockArrow.png": "/static/media/ShockArrow.823f535857deb6e461ab.png",
"static/media/Shaft.png": "/static/media/Shaft.328e8aa17c1e5f9f0058.png",
"static/media/ForestDwellerBow.png": "/static/media/ForestDwellerBow.d2a6ab2d3f59bcc67b4b.png",
"static/media/FaroshClaw.png": "/static/media/FaroshClaw.4da7a445c986e0279916.png",
"static/media/HyruleBass.png": "/static/media/HyruleBass.82ea677144fd38b4665a.png",
"static/media/Fairy.png": "/static/media/Fairy.02985afe57816235258e.png",
"static/media/FireArrow.png": "/static/media/FireArrow.103898dc3f492d3293bd.png",
"static/media/Lotus.png": "/static/media/Lotus.6006e27a51c66a0b9d3b.png",
"index.html": "/index.html",
"main.820e0273.css.map": "/static/css/main.820e0273.css.map",
"main.4124a2d4.js.map": "/static/js/main.4124a2d4.js.map",
"787.ada1a5f8.chunk.js.map": "/static/js/787.ada1a5f8.chunk.js.map"
},
"entrypoints": [
"static/css/main.820e0273.css",
"static/js/main.4124a2d4.js"
]
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

View file

@ -1 +0,0 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="for Breath of the Wild"/><meta property="og:site_name" content="itntpiston.app"/><meta property="og:title" content="Inventory Slot Transfer Simulator"><meta property="og:type" content="website"><meta property="og:url" content="https://dupl.itntpiston.app/#/"><meta property="og:description" content="for Breath of the Wild"><link rel="manifest" href="/manifest.json"/><title>IST Sim</title><script defer="defer" src="/static/js/main.4124a2d4.js"></script><link href="/static/css/main.820e0273.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

View file

@ -1,25 +0,0 @@
{
"short_name": "HDS",
"name": "Hundo Duplication Simulator",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
},
{
"src": "logo192.png",
"type": "image/png",
"sizes": "192x192"
},
{
"src": "logo512.png",
"type": "image/png",
"sizes": "512x512"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

View file

@ -1,3 +0,0 @@
# https://www.robotstxt.org/robotstxt.html
User-agent: *
Disallow:

View file

@ -1,2 +0,0 @@
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}h1{margin:0}@font-face{font-family:CalamitySans;src:url(/static/media/Calamity-Regular.cbeefc650e6ac39335b6.otf) format("opentype")}.Calamity{font-family:CalamitySans}.CommandItemSelected{background-color:#eee}.CommandItemContextSelected{background-color:#eaa}.CommandItemComment{color:green;font-size:10pt}.CommandItem{cursor:pointer;padding:2px 2px 2px 10px}.CommandItem:hover{background-color:#eee}.InputError{background-color:#eaa}.ItemSlot{background-color:#333;box-sizing:content-box;display:inline-block;height:64px;margin:4px;width:64px}.ItemSlotBroken{background-color:#600}.ItemSlotSave{background-color:#030}.ItemSlotEquipped{background-color:#08f}.ItemImage{border:1px solid #999;box-sizing:border-box;display:inline-block;height:62px;margin:1px;width:62px}.ItemCount{color:#eee;float:left;font-size:10pt;left:8px;position:relative;top:-22px}
/*# sourceMappingURL=main.820e0273.css.map*/

View file

@ -1 +0,0 @@
{"version":3,"file":"static/css/main.820e0273.css","mappings":"AAAA,KAKE,kCAAmC,CACnC,iCAAkC,CAJlC,mIAEY,CAHZ,QAMF,CAEA,KACE,uEAEF,CCZA,GACE,QACF,CAEA,WACE,wBAAyB,CACzB,mFACF,CAEA,UACE,wBACF,CAEA,qBACE,qBACF,CAEA,4BACE,qBACF,CAEA,oBACE,WAAY,CACZ,cACF,CAEA,aAEE,cAAe,CADf,wBAEF,CAEA,mBACE,qBACF,CAEA,YACE,qBACF,CAEA,UAKE,qBAAyB,CACzB,sBAAuB,CACvB,oBAAqB,CAJrB,WAAY,CAFZ,UAAW,CACX,UAMF,CAEA,gBACE,qBACF,CAEA,cACE,qBACF,CAEA,kBACE,qBACF,CAEA,WACE,qBAAyB,CACzB,qBAAsB,CAItB,oBAAoB,CADpB,WAAW,CAFX,UAAU,CACV,UAGF,CAEA,WAKE,UAAa,CACb,UAAW,CALX,cAAe,CAGf,QAAQ,CAFR,iBAAiB,CACjB,SAIF","sources":["index.css","App.css"],"sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n monospace;\n}\n","h1 {\n margin: 0\n}\n\n@font-face {\n font-family: CalamitySans;\n src: url(\"assets/Calamity-Regular.otf\") format(\"opentype\");\n}\n\n.Calamity {\n font-family: CalamitySans;\n}\n\n.CommandItemSelected {\n background-color: #eeeeee;\n}\n\n.CommandItemContextSelected {\n background-color: #eeaaaa;\n}\n\n.CommandItemComment{\n color: green;\n font-size: 10pt;\n}\n\n.CommandItem {\n padding: 2px 2px 2px 10px;\n cursor: pointer;\n}\n\n.CommandItem:hover {\n background-color: #eeeeee;\n}\n\n.InputError {\n background-color: #eeaaaa;\n}\n\n.ItemSlot {\n margin: 4px;\n width: 64px;\n height: 64px;\n \n background-color: #333333;\n box-sizing: content-box;\n display: inline-block;\n}\n\n.ItemSlotBroken {\n background-color: #660000;\n}\n\n.ItemSlotSave {\n background-color: #003300;\n}\n\n.ItemSlotEquipped {\n background-color: #0088ff;\n}\n\n.ItemImage {\n border: 1px solid #999999;\n box-sizing: border-box;\n margin:1px;\n width:62px;\n height:62px;\n display:inline-block;\n}\n\n.ItemCount {\n font-size: 10pt;\n position:relative;\n top:-22px;\n left:8px;\n color:#eeeeee;\n float: left;\n}\n"],"names":[],"sourceRoot":""}

View file

@ -1,2 +0,0 @@
"use strict";(self.webpackChunkbotw_hundo_dupl=self.webpackChunkbotw_hundo_dupl||[]).push([[787],{787:function(e,t,n){n.r(t),n.d(t,{getCLS:function(){return y},getFCP:function(){return h},getFID:function(){return C},getLCP:function(){return P},getTTFB:function(){return D}});var i,r,a,o,u=function(e,t){return{name:e,value:void 0===t?-1:t,delta:0,entries:[],id:"v2-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},c=function(e,t){try{if(PerformanceObserver.supportedEntryTypes.includes(e)){if("first-input"===e&&!("PerformanceEventTiming"in self))return;var n=new PerformanceObserver((function(e){return e.getEntries().map(t)}));return n.observe({type:e,buffered:!0}),n}}catch(e){}},f=function(e,t){var n=function n(i){"pagehide"!==i.type&&"hidden"!==document.visibilityState||(e(i),t&&(removeEventListener("visibilitychange",n,!0),removeEventListener("pagehide",n,!0)))};addEventListener("visibilitychange",n,!0),addEventListener("pagehide",n,!0)},s=function(e){addEventListener("pageshow",(function(t){t.persisted&&e(t)}),!0)},m=function(e,t,n){var i;return function(r){t.value>=0&&(r||n)&&(t.delta=t.value-(i||0),(t.delta||void 0===i)&&(i=t.value,e(t)))}},v=-1,d=function(){return"hidden"===document.visibilityState?0:1/0},p=function(){f((function(e){var t=e.timeStamp;v=t}),!0)},l=function(){return v<0&&(v=d(),p(),s((function(){setTimeout((function(){v=d(),p()}),0)}))),{get firstHiddenTime(){return v}}},h=function(e,t){var n,i=l(),r=u("FCP"),a=function(e){"first-contentful-paint"===e.name&&(f&&f.disconnect(),e.startTime<i.firstHiddenTime&&(r.value=e.startTime,r.entries.push(e),n(!0)))},o=window.performance&&performance.getEntriesByName&&performance.getEntriesByName("first-contentful-paint")[0],f=o?null:c("paint",a);(o||f)&&(n=m(e,r,t),o&&a(o),s((function(i){r=u("FCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,n(!0)}))}))})))},g=!1,T=-1,y=function(e,t){g||(h((function(e){T=e.value})),g=!0);var n,i=function(t){T>-1&&e(t)},r=u("CLS",0),a=0,o=[],v=function(e){if(!e.hadRecentInput){var t=o[0],i=o[o.length-1];a&&e.startTime-i.startTime<1e3&&e.startTime-t.startTime<5e3?(a+=e.value,o.push(e)):(a=e.value,o=[e]),a>r.value&&(r.value=a,r.entries=o,n())}},d=c("layout-shift",v);d&&(n=m(i,r,t),f((function(){d.takeRecords().map(v),n(!0)})),s((function(){a=0,T=-1,r=u("CLS",0),n=m(i,r,t)})))},E={passive:!0,capture:!0},w=new Date,L=function(e,t){i||(i=t,r=e,a=new Date,F(removeEventListener),S())},S=function(){if(r>=0&&r<a-w){var e={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+r};o.forEach((function(t){t(e)})),o=[]}},b=function(e){if(e.cancelable){var t=(e.timeStamp>1e12?new Date:performance.now())-e.timeStamp;"pointerdown"==e.type?function(e,t){var n=function(){L(e,t),r()},i=function(){r()},r=function(){removeEventListener("pointerup",n,E),removeEventListener("pointercancel",i,E)};addEventListener("pointerup",n,E),addEventListener("pointercancel",i,E)}(t,e):L(t,e)}},F=function(e){["mousedown","keydown","touchstart","pointerdown"].forEach((function(t){return e(t,b,E)}))},C=function(e,t){var n,a=l(),v=u("FID"),d=function(e){e.startTime<a.firstHiddenTime&&(v.value=e.processingStart-e.startTime,v.entries.push(e),n(!0))},p=c("first-input",d);n=m(e,v,t),p&&f((function(){p.takeRecords().map(d),p.disconnect()}),!0),p&&s((function(){var a;v=u("FID"),n=m(e,v,t),o=[],r=-1,i=null,F(addEventListener),a=d,o.push(a),S()}))},k={},P=function(e,t){var n,i=l(),r=u("LCP"),a=function(e){var t=e.startTime;t<i.firstHiddenTime&&(r.value=t,r.entries.push(e),n())},o=c("largest-contentful-paint",a);if(o){n=m(e,r,t);var v=function(){k[r.id]||(o.takeRecords().map(a),o.disconnect(),k[r.id]=!0,n(!0))};["keydown","click"].forEach((function(e){addEventListener(e,v,{once:!0,capture:!0})})),f(v,!0),s((function(i){r=u("LCP"),n=m(e,r,t),requestAnimationFrame((function(){requestAnimationFrame((function(){r.value=performance.now()-i.timeStamp,k[r.id]=!0,n(!0)}))}))}))}},D=function(e){var t,n=u("TTFB");t=function(){try{var t=performance.getEntriesByType("navigation")[0]||function(){var e=performance.timing,t={entryType:"navigation",startTime:0};for(var n in e)"navigationStart"!==n&&"toJSON"!==n&&(t[n]=Math.max(e[n]-e.navigationStart,0));return t}();if(n.value=n.delta=t.responseStart,n.value<0||n.value>performance.now())return;n.entries=[t],e(n)}catch(e){}},"complete"===document.readyState?setTimeout(t,0):addEventListener("load",(function(){return setTimeout(t,0)}))}}}]);
//# sourceMappingURL=787.ada1a5f8.chunk.js.map

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,39 +0,0 @@
/**
* @license React
* react-dom.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react-jsx-runtime.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* react.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
/**
* @license React
* scheduler.production.min.js
*
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1,6 +1,6 @@
{
"name": "botw-hundo-dupl",
"version": "0.1.0",
"version": "1.0.0",
"homepage": "https://dupl.itntpiston.app/",
"private": true,
"dependencies": {

92
scripts/lint.py Normal file
View file

@ -0,0 +1,92 @@
#!/usr/bin/python3
"""Check LF line ending and empty new line in the end"""
from os import listdir
from os.path import isfile, isdir, join
import sys
ignore = [
"build",
"release",
"node_modules",
".git",
"__pycache__",
".vscode",
"target",
"binaryen-version_105",
"pkg",
"wasmlib",
"docs"
]
ignore_exts = [
"CNAME",
".png",
".gif",
".vsix",
".celer",
".ico",
".ps1",
".wasm",
".tar.gz",
".otf",
".svg"
]
ROOT = "."
if len(sys.argv) > 1:
VERBOSE = sys.argv[1] == "--verbose"
else:
VERBOSE = False
def lint_path(rel_path):
"""Lint path (file or directory)"""
if isfile(rel_path):
lint_file(rel_path)
elif isdir(rel_path):
for subpath in listdir(rel_path):
if should_lint_subpath(subpath):
lint_path(join(rel_path, subpath))
def should_lint_subpath(subpath):
"""Check if a subpath should be processed or ignored"""
if subpath in ignore:
return False
for ignore_ext in ignore_exts:
if subpath.endswith(ignore_ext):
return False
return True
bad_files = []
def lint_file(file_path):
"""Lint file"""
if VERBOSE:
print(f"Checking {file_path}")
with open(file_path, 'r', encoding="utf-8", newline="") as file:
last_line = None
while True:
line = file.readline()
if not line:
break
if line.find("\r") != -1:
bad_files.append(("Line Ending", file_path))
return
last_line = line
if last_line is not None:
if last_line[-1] != "\n":
if VERBOSE:
print(f"lastline={last_line} length={len(last_line)}")
bad_files.append(("Needs trailing new line", file_path))
elif last_line[0] == "\n":
bad_files.append(("Too many trailing new lines", file_path))
lint_path(ROOT)
if len(bad_files) > 0:
for reason, path in bad_files:
print(f"{path}: {reason}")
sys.exit(1)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

View file

@ -27,4 +27,3 @@ export const CommandItem: React.FC<CommandItemProps> = ({isSelected, isContextSe
}}
>{children}&nbsp;</li>;
};

View file

@ -14,4 +14,3 @@ export const ItemList: React.FC<ItemListProps> = ({slots}) => {
}
</>;
};

View file

@ -1,25 +1,25 @@
import { PropsWithChildren } from "react"
type TitledListProps = PropsWithChildren<{
title: string
}>
export const TitledList: React.FC<TitledListProps> = ({title, children}) => {
return (
<>
<h3 className="ListHeader" style={{
height: 40,
borderBottom: "2px solid",
boxSizing: "border-box",
}}>
{title}
</h3>
<div style={{
height: "calc( 100% - 40px )",
overflowY: "auto"}}
>
{children}
</div>
</>
);
}
import { PropsWithChildren } from "react"
type TitledListProps = PropsWithChildren<{
title: string
}>
export const TitledList: React.FC<TitledListProps> = ({title, children}) => {
return (
<>
<h3 className="ListHeader" style={{
height: 40,
borderBottom: "2px solid",
boxSizing: "border-box",
}}>
{title}
</h3>
<div style={{
height: "calc( 100% - 40px )",
overflowY: "auto"}}
>
{children}
</div>
</>
);
}

View file

@ -68,4 +68,4 @@ declare module '*.module.scss' {
declare module '*.module.sass' {
const classes: { readonly [key: string]: string };
export default classes;
}
}

View file

@ -1,27 +1,27 @@
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"baseUrl": "src",
},
"include": [
"src"
]
}
{
"compilerOptions": {
"target": "es5",
"lib": [
"dom",
"dom.iterable",
"esnext"
],
"allowJs": true,
"skipLibCheck": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",
"baseUrl": "src",
},
"include": [
"src"
]
}