An easy-to-use platform for EEG experimentation in the classroom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

update to pass test and resolve linter issues

+47 -45
+17 -24
package-lock.json
··· 8384 8384 } 8385 8385 }, 8386 8386 "node_modules/electron": { 8387 - "version": "39.6.1", 8388 - "resolved": "https://registry.npmjs.org/electron/-/electron-39.6.1.tgz", 8389 - "integrity": "sha512-pgmTbWnT3rP+eo3EolO5EdNw5f7/x/0S7vP+eXC8Zyp2sWGjP4+kmo1RyeAYCChwIRWJFKQ2rQVl/ZkqwK6O2Q==", 8387 + "version": "39.8.2", 8388 + "resolved": "https://registry.npmjs.org/electron/-/electron-39.8.2.tgz", 8389 + "integrity": "sha512-uwNJHeqm8pzQEZf/KX4XM1fJctZpHcA0Za/MlP9mOg0FAWHbKo6yRC33QbdfLX7PeNjYZC3I3nnVhE5L2CLqxw==", 8390 8390 "dev": true, 8391 8391 "hasInstallScript": true, 8392 8392 "license": "MIT", ··· 10360 10360 "reusify": "^1.0.4" 10361 10361 } 10362 10362 }, 10363 - "node_modules/fd-slicer": { 10364 - "version": "1.1.0", 10365 - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 10366 - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 10367 - "dev": true, 10368 - "license": "MIT", 10369 - "dependencies": { 10370 - "pend": "~1.2.0" 10371 - } 10372 - }, 10373 10363 "node_modules/file-entry-cache": { 10374 10364 "version": "8.0.0", 10375 10365 "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", ··· 10463 10453 } 10464 10454 }, 10465 10455 "node_modules/flatted": { 10466 - "version": "3.3.3", 10467 - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", 10468 - "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", 10456 + "version": "3.4.1", 10457 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.1.tgz", 10458 + "integrity": "sha512-IxfVbRFVlV8V/yRaGzk0UVIcsKKHMSfYw66T/u4nTwlWteQePsxe//LjudR1AMX4tZW3WFCh3Zqa/sjlqpbURQ==", 10469 10459 "dev": true, 10470 10460 "license": "ISC" 10471 10461 }, ··· 14740 14730 "node_modules/pend": { 14741 14731 "version": "1.2.0", 14742 14732 "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 14743 - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA= sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 14733 + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 14744 14734 "dev": true, 14745 14735 "license": "MIT" 14746 14736 }, ··· 17857 17847 } 17858 17848 }, 17859 17849 "node_modules/tar": { 17860 - "version": "7.5.10", 17861 - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.10.tgz", 17862 - "integrity": "sha512-8mOPs1//5q/rlkNSPcCegA6hiHJYDmSLEI8aMH/CdSQJNWztHC9WHNam5zdQlfpTwB9Xp7IBEsHfV5LKMJGVAw==", 17850 + "version": "7.5.11", 17851 + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", 17852 + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", 17863 17853 "dev": true, 17864 17854 "license": "BlueOak-1.0.0", 17865 17855 "dependencies": { ··· 19451 19441 } 19452 19442 }, 19453 19443 "node_modules/yauzl": { 19454 - "version": "2.10.0", 19455 - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 19456 - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 19444 + "version": "3.2.1", 19445 + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-3.2.1.tgz", 19446 + "integrity": "sha512-k1isifdbpNSFEHFJ1ZY4YDewv0IH9FR61lDetaRMD3j2ae3bIXGV+7c+LHCqtQGofSd8PIyV4X6+dHMAnSr60A==", 19457 19447 "dev": true, 19458 19448 "license": "MIT", 19459 19449 "dependencies": { 19460 19450 "buffer-crc32": "~0.2.3", 19461 - "fd-slicer": "~1.1.0" 19451 + "pend": "~1.2.0" 19452 + }, 19453 + "engines": { 19454 + "node": ">=12" 19462 19455 } 19463 19456 }, 19464 19457 "node_modules/yocto-queue": {
+2 -1
package.json
··· 227 227 }, 228 228 "overrides": { 229 229 "react": "^18.x", 230 - "react-dom": "^18.x" 230 + "react-dom": "^18.x", 231 + "yauzl": "^3.2.1" 231 232 }, 232 233 "engines": { 233 234 "node": "^20.19.0 || >=22.12.0",
+6
src/renderer/components/CleanComponent/CleanSidebar.tsx
··· 61 61 <div className="flex flex-col"> 62 62 <h1 className="mb-4">What would you like to do?</h1> 63 63 <div 64 + role="button" 65 + tabIndex={0} 64 66 className="text-lg p-1 cursor-pointer hover:bg-gray-100" 65 67 onClick={this.handleStartSignal} 68 + onKeyDown={(e) => e.key === 'Enter' && this.handleStartSignal()} 66 69 > 67 70 ★ Improve the signal quality of your sensors 68 71 </div> 69 72 <div 73 + role="button" 74 + tabIndex={0} 70 75 className="text-lg p-1 cursor-pointer hover:bg-gray-100" 71 76 onClick={this.handleStartLearn} 77 + onKeyDown={(e) => e.key === 'Enter' && this.handleStartLearn()} 72 78 > 73 79 ⚠ Learn about how the subjects movements create noise 74 80 </div>
+5 -1
src/renderer/components/CollectComponent/ConnectModal.tsx
··· 94 94 95 95 renderAvailableDeviceList() { 96 96 return ( 97 - <ul className="divide-y divide-gray-200"> 97 + <ul role="listbox" className="divide-y divide-gray-200"> 98 98 {this.props.availableDevices.map((device) => ( 99 99 <li 100 100 key={device.id} 101 + role="option" 102 + aria-selected={this.state.selectedDevice === device} 103 + tabIndex={0} 101 104 className="flex items-center gap-2 py-2 cursor-pointer text-lg" 102 105 onClick={() => this.setState({ selectedDevice: device })} 106 + onKeyDown={(e) => e.key === 'Enter' && this.setState({ selectedDevice: device })} 103 107 > 104 108 <span>{this.state.selectedDevice === device ? '✓' : '○'}</span> 105 109 <span>{ConnectModal.getDeviceName(device)}</span>
+6
src/renderer/components/CollectComponent/HelpSidebar.tsx
··· 68 68 <div className="flex flex-col"> 69 69 <h1 className="mb-4">What would you like to do?</h1> 70 70 <div 71 + role="button" 72 + tabIndex={0} 71 73 className="text-lg p-1 cursor-pointer hover:bg-gray-100" 72 74 onClick={this.handleStartSignal} 75 + onKeyDown={(e) => e.key === 'Enter' && this.handleStartSignal()} 73 76 > 74 77 ★ Improve the signal quality of your sensors 75 78 </div> 76 79 <div 80 + role="button" 81 + tabIndex={0} 77 82 className="text-lg p-1 cursor-pointer hover:bg-gray-100" 78 83 onClick={this.handleStartLearn} 84 + onKeyDown={(e) => e.key === 'Enter' && this.handleStartLearn()} 79 85 > 80 86 ⚠ Learn about how the subjects movements create noise 81 87 </div>
+2 -7
src/renderer/components/DesignComponent/CustomDesignComponent.tsx
··· 231 231 </div> 232 232 <div className="grid grid-cols-3 gap-2.5 self-end justify-self-end"> 233 233 <div> 234 - <label htmlFor="trial-order" className="block text-sm mb-1"> 235 - Order 236 - </label> 234 + <label htmlFor="trial-order" className="block text-sm mb-1">Order</label> 237 235 <select 238 236 id="trial-order" 239 237 className="border border-gray-300 rounded px-2 py-1" ··· 273 271 /> 274 272 </div> 275 273 <div> 276 - <label 277 - htmlFor="nb-practice-trials" 278 - className="block text-sm mb-1" 279 - > 274 + <label htmlFor="nb-practice-trials" className="block text-sm mb-1"> 280 275 Total practice trials 281 276 </label> 282 277 <input
+6 -10
src/renderer/components/InputCollect.tsx
··· 99 99 </DialogHeader> 100 100 <div className="space-y-4"> 101 101 <div> 102 - <label htmlFor="subject" className="block text-sm mb-1"> 103 - Enter Subject ID 104 - </label> 102 + <label htmlFor="input-subject" className="block text-sm mb-1">Enter Subject ID</label> 105 103 <input 106 - id="subject" 104 + id="input-subject" 107 105 className={[ 108 106 'w-full border rounded px-3 py-2', 109 107 this.state.isSubjectError ··· 117 115 /> 118 116 </div> 119 117 <div> 120 - <label htmlFor="group" className="block text-sm mb-1"> 118 + <label htmlFor="input-group" className="block text-sm mb-1"> 121 119 Enter group name (optional) 122 120 </label> 123 121 <input 124 - id="group" 122 + id="input-group" 125 123 className="w-full border border-gray-300 rounded px-3 py-2" 126 124 onChange={(e) => this.handleTextEntry(e, 'group')} 127 125 onKeyDown={this.handleEnterSubmit} ··· 129 127 /> 130 128 </div> 131 129 <div> 132 - <label htmlFor="session" className="block text-sm mb-1"> 133 - Enter session number 134 - </label> 130 + <label htmlFor="input-session" className="block text-sm mb-1">Enter session number</label> 135 131 <input 136 - id="session" 132 + id="input-session" 137 133 className={[ 138 134 'w-full border rounded px-3 py-2', 139 135 this.state.isSessionError
+3 -2
src/renderer/components/SecondaryNavComponent/SecondaryNavSegment.tsx
··· 9 9 10 10 export default function SecondaryNavSegment(props: Props) { 11 11 return ( 12 - <a 12 + <button 13 + type="button" 13 14 onClick={props.onClick} 14 15 className={cn( 15 16 'flex items-end justify-center text-center text-sm font-bold tracking-[0.5px] border-b-4 min-w-fit px-4 pb-1 cursor-pointer', ··· 19 20 )} 20 21 > 21 22 {props.title} 22 - </a> 23 + </button> 23 24 ); 24 25 }