From b681ce13cea1cdc456a14d6e5a0120929c656130 Mon Sep 17 00:00:00 2001 From: Andrii Fedyk Date: Mon, 25 Nov 2024 14:48:16 +0100 Subject: [PATCH] Use smaller preact instead of react --- .eslintrc.json | 18 ++-------- .github/workflows/deploy.yml | 11 +++--- bun.lockb | Bin 90679 -> 45450 bytes index.html | 10 +++--- package.json | 11 +++--- src/app/Flash.js | 64 +++++++++++++++++------------------ src/main.js | 15 ++++---- src/utils/flash.js | 2 +- src/utils/image.js | 2 +- 9 files changed, 59 insertions(+), 74 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index dc9027b..8405abb 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,10 +6,7 @@ "node": true }, "extends": [ - "eslint:recommended", - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:react-hooks/recommended" + "eslint:recommended" ], "ignorePatterns": [ "node_modules", @@ -25,9 +22,6 @@ "version": "detect" } }, - "plugins": [ - "react-refresh" - ], "rules": { "no-constant-condition": [ "error", @@ -35,14 +29,6 @@ "checkLoops": false } ], - "no-inner-declarations": "off", - "react/jsx-no-target-blank": "off", - "react/prop-types": "off", - "react-refresh/only-export-components": [ - "warn", - { - "allowConstantExport": true - } - ] + "no-inner-declarations": "off" } } diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2787f82..ccddba3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -20,12 +20,11 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Configure Pages - uses: actions/configure-pages@v3 - - name: Upload Pages Artifact - uses: actions/upload-pages-artifact@v3 + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 + - run: bun install + - uses: actions/configure-pages@v3 + - uses: actions/upload-pages-artifact@v3 with: path: '.' - name: Deploy to GitHub Pages diff --git a/bun.lockb b/bun.lockb index 5a38d44bc84c94c38bf9272afe2021ba16e5a4c1..7123a835ef90efb10a4b7a240b351a1fc8f20be6 100755 GIT binary patch delta 8382 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

SUw!XPUmkY;G3ZQ?=*ih`?uadZuh$T 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 B{C)rc diff --git a/index.html b/index.html index 32b1225..cadd9b1 100644 --- a/index.html +++ b/index.html @@ -149,7 +149,7 @@

Other questions

-

Loading...

+
Loading...
@@ -160,8 +160,8 @@

Other questions

- - + + diff --git a/package.json b/package.json index 16735ec..7a6178c 100644 --- a/package.json +++ b/package.json @@ -6,17 +6,16 @@ "scripts": { "dev": "vite", "start": "python3 -m http.server 5173", - "lint": "eslint . --ext js,jsx --report-unused-disable-directives", + "lint": "eslint . --ext js --report-unused-disable-directives", "test": "vitest" }, "engines": { "node": ">=20.11.0" }, - "dependencies": {}, + "dependencies": { + "preact": "^10.25.0" + }, "devDependencies": { - "eslint": "^8.57.0", - "eslint-plugin-react": "^7.34.2", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-react-refresh": "^0.4.7" + "eslint": "^8.57.0" } } diff --git a/src/app/Flash.js b/src/app/Flash.js index d9b7b8e..4568af1 100644 --- a/src/app/Flash.js +++ b/src/app/Flash.js @@ -1,4 +1,5 @@ -import React, { useCallback, useState } from 'react' +import { createElement, Fragment } from 'preact' +import { useCallback, useState } from 'preact/hooks' import { Step, Error, useQdl } from '../utils/flash.js' @@ -111,8 +112,8 @@ const isLinux = navigator.userAgent.toLowerCase().includes('linux'); function LinearProgress({ value, barColor }) { if (value === -1 || value > 100) value = 100; - return React.createElement("div", { className: "relative w-full h-2 bg-gray-200 rounded-full overflow-hidden" }, - React.createElement("div", { + return createElement("div", { className: "relative w-full h-2 bg-gray-200 rounded-full overflow-hidden" }, + createElement("div", { className: `absolute top-0 bottom-0 left-0 w-full transition-all ${barColor}`, style: { transform: `translateX(${value - 100}%)` }, }) @@ -121,39 +122,39 @@ function LinearProgress({ value, barColor }) { function USBIndicator() { - return React.createElement("div", { className: "flex flex-row gap-2" }, - React.createElement("svg", { + return createElement("div", { className: "flex flex-row gap-2" }, + createElement("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 96 960 960", className: "text-green-500 dark:text-[#51ff00]", height: "24", width: "24", }, - React.createElement("path", { + createElement("path", { fill: "currentColor", d: "M480 976q-32 0-52-20t-20-52q0-22 11-40t31-29V724H302q-24 0-42-18t-18-42V555q-20-9-31-26.609-11-17.608-11-40.108Q200 456 220 436t52-20q32 0 52 20t20 52.411Q344 511 333 528.5T302 555v109h148V324h-80l110-149 110 149h-80v340h148V560h-42V416h144v144h-42v104q0 24-18 42t-42 18H510v111q19.95 10.652 30.975 29.826Q552 884 552 904q0 32-20 52t-52 20Z", }) ), - React.createElement("span", null, "Device connected") + createElement("span", null, "Device connected") ); } function SerialIndicator({ serial }) { - return React.createElement("div", { className: "flex flex-row gap-2" }, - React.createElement("span", null, "Serial:", React.createElement("span", { className: "ml-2 font-mono" }, serial || "unknown")) + return createElement("div", { className: "flex flex-row gap-2" }, + createElement("span", null, "Serial:", createElement("span", { className: "ml-2 font-mono" }, serial || "unknown")) ); } function DeviceState({ serial }) { - return React.createElement("div", { + return createElement("div", { className: "absolute bottom-0 m-0 lg:m-4 p-4 w-full sm:w-auto sm:min-w-[350px] sm:border sm:border-gray-200 dark:sm:border-gray-600 bg-white dark:bg-gray-700 text-black dark:text-white rounded-md flex flex-row gap-2", style: { left: "50%", transform: "translate(-50%, -50%)" }, }, - React.createElement(USBIndicator), - React.createElement("span", { className: "text-gray-400" }, "|"), - React.createElement(SerialIndicator, { serial }) + createElement(USBIndicator), + createElement("span", { className: "text-gray-400" }, "|"), + createElement(SerialIndicator, { serial }) ); } @@ -218,14 +219,13 @@ export default function Flash() { }, 1000); }; - - return React.createElement("div", { id: "flash", className: "relative flex flex-col gap-8 justify-center items-center h-full" }, - React.createElement("div", { + return createElement("div", { id: "flash", className: "relative flex flex-col gap-8 justify-center items-center h-full" }, + createElement("div", { className: `p-8 rounded-full ${bgColor}`, style: { cursor: onContinue ? "pointer" : "default" }, onClick: handleContinue, }, - React.createElement("img", { + createElement("img", { src: icon, alt: "cable", width: 128, @@ -233,30 +233,30 @@ export default function Flash() { className: `${iconStyle} ${!error && step !== Step.DONE ? "animate-pulse" : ""}`, }) ), - React.createElement("div", { + createElement("div", { className: "w-full max-w-3xl px-8 transition-opacity duration-300", style: { opacity: progress === -1 ? 0 : 1 }, }, - React.createElement(LinearProgress, { value: progress * 100, barColor: bgColor }) + createElement(LinearProgress, { value: progress * 100, barColor: bgColor }) ), - React.createElement("span", { className: "text-3xl dark:text-white font-mono font-light" }, title), - React.createElement("span", { className: "text-xl dark:text-white px-8 max-w-xl" }, description), + createElement("span", { className: "text-3xl dark:text-white font-mono font-light" }, title), + createElement("span", { className: "text-xl dark:text-white px-8 max-w-xl" }, description), (title === "Lost connection" || title === "Ready") && isLinux && ( - React.createElement(React.Fragment, null, - React.createElement("span", + createElement(Fragment, null, + createElement("span", { className: "text-l dark:text-white px-2 max-w-xl" }, "It seems that you're on Linux, make sure to run the script below in your terminal after plugging in your device." ), - React.createElement("div", { className: "relative mt-2 max-w-3xl" }, - React.createElement("div", { className: "bg-gray-200 dark:bg-gray-800 rounded-md overflow-x-auto" }, - React.createElement("div", { className: "relative" }, - React.createElement("pre", { className: "font-mono text-sm text-gray-800 dark:text-gray-200 bg-gray-300 dark:bg-gray-700 rounded-md p-6 flex-grow max-w-m text-wrap" }, + createElement("div", { className: "relative mt-2 max-w-3xl" }, + createElement("div", { className: "bg-gray-200 dark:bg-gray-800 rounded-md overflow-x-auto" }, + createElement("div", { className: "relative" }, + createElement("pre", { className: "font-mono text-sm text-gray-800 dark:text-gray-200 bg-gray-300 dark:bg-gray-700 rounded-md p-6 flex-grow max-w-m text-wrap" }, detachScript.map((line, index) => - React.createElement("span", { key: index, className: "block" }, line) + createElement("span", { key: index, className: "block" }, line) ) ), - React.createElement("div", { className: "absolute top-2 right-2" }, - React.createElement("button", { + createElement("div", { className: "absolute top-2 right-2" }, + createElement("button", { onClick: () => { navigator.clipboard.writeText(detachScript.join("\n")); handleCopy(); @@ -270,12 +270,12 @@ export default function Flash() { ) ), error && ( - React.createElement("button", { + createElement("button", { className: "px-4 py-2 rounded-md bg-gray-200 hover:bg-gray-300 dark:bg-gray-700 dark:hover:bg-gray-600 text-gray-800 dark:text-gray-200 transition-colors", onClick: handleRetry, }, "Retry") ) || false, - connected && React.createElement(DeviceState, { connected, serial }) + connected && createElement(DeviceState, { connected, serial }) ) } diff --git a/src/main.js b/src/main.js index ef1ffbf..713a545 100644 --- a/src/main.js +++ b/src/main.js @@ -1,9 +1,10 @@ -import React from 'react' -import ReactDOM from 'react-dom' +import { h, render } from 'preact' import Flash from './app/Flash.js' -ReactDOM.createRoot(document.getElementById('root')).render( - React.createElement(React.StrictMode, null, - React.createElement(Flash, null) - ) -) \ No newline at end of file +render(h(Flash, null), document.getElementById('root')) + +// ReactDOM.createRoot(document.getElementById('root')).render( +// React.createElement(React.StrictMode, null, +// React.createElement(Flash, null) +// ) +// ) \ No newline at end of file diff --git a/src/utils/flash.js b/src/utils/flash.js index 405df98..7bb4155 100644 --- a/src/utils/flash.js +++ b/src/utils/flash.js @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react' +import { useEffect, useRef, useState } from 'preact/hooks' import { concatUint8Array } from '../QDL/utils.js' import { qdlDevice } from '../QDL/qdl.js' diff --git a/src/utils/image.js b/src/utils/image.js index fd0951d..53674b0 100644 --- a/src/utils/image.js +++ b/src/utils/image.js @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react' +import { useEffect, useRef } from 'preact/hooks' import * as Comlink from 'comlink'