From b4ddfc4736ab8bb3c1984581bdc49226ee0222e6 Mon Sep 17 00:00:00 2001 From: Kilian Hofmann Date: Fri, 28 Aug 2026 02:17:27 +0200 Subject: [PATCH] Update to 1.1.31 --- EFB/efb-js.patch | 10 ++-- ...xkhofmann-tfdidesign-md11-load-manager.xml | 2 +- PackageSources/js-bundle/package.json | 2 +- .../js-bundle/src/assets/licenses_node.md | 22 +++---- .../js-bundle/src/components/input/Input.tsx | 60 ++++++++++++------- .../src/components/keyboard/Keyboard.tsx | 21 +++++-- PackageSources/wasm-module/package.json | 2 +- 7 files changed, 73 insertions(+), 46 deletions(-) diff --git a/EFB/efb-js.patch b/EFB/efb-js.patch index 43d17d6..1671a01 100644 --- a/EFB/efb-js.patch +++ b/EFB/efb-js.patch @@ -2,7 +2,7 @@ Index: EFB.js =================================================================== --- EFB.js +++ EFB.js -@@ -50833,11 +50833,11 @@ +@@ -50844,11 +50844,11 @@ ), /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( "button", @@ -16,12 +16,13 @@ Index: EFB.js ), /* @__PURE__ */ (0, import_jsx_runtime13.jsx)( "button", -@@ -51343,8 +51343,27 @@ +@@ -51354,9 +51354,28 @@ ] }) ] }) }) }); } -+// Exports for add. script +- // src/components/Router.tsx ++ // Exports for add. script + window.reactExports = __toESM(require_react()); + window.reactDomExports = __toESM(require_react_dom()); + window.jsxRuntimeExports = __toESM(require_jsx_runtime()); @@ -40,7 +41,8 @@ Index: EFB.js + script.src = "/Pages/VCockpit/Instruments/aircraft_efb/KH_TFDi_MD11_efb/App.js"; + document.head.appendChild(script); //or something of the likes + - // src/components/Router.tsx ++// src/components/Router.tsx init_common(); var import_jsx_runtime15 = __toESM(require_jsx_runtime()); var routes = { + "/dispatch": { diff --git a/PackageDefinitions/xkhofmann-tfdidesign-md11-load-manager.xml b/PackageDefinitions/xkhofmann-tfdidesign-md11-load-manager.xml index 35351aa..e1b509f 100644 --- a/PackageDefinitions/xkhofmann-tfdidesign-md11-load-manager.xml +++ b/PackageDefinitions/xkhofmann-tfdidesign-md11-load-manager.xml @@ -1,5 +1,5 @@ - + MISC TFDi Design MD-11 Load Manager diff --git a/PackageSources/js-bundle/package.json b/PackageSources/js-bundle/package.json index 38195c7..e5aaa03 100644 --- a/PackageSources/js-bundle/package.json +++ b/PackageSources/js-bundle/package.json @@ -1,6 +1,6 @@ { "name": "js-bundle", - "version": "0.2.41", + "version": "0.2.50", "description": "", "main": "index.js", "type": "module", diff --git a/PackageSources/js-bundle/src/assets/licenses_node.md b/PackageSources/js-bundle/src/assets/licenses_node.md index 40482ac..f1d376d 100644 --- a/PackageSources/js-bundle/src/assets/licenses_node.md +++ b/PackageSources/js-bundle/src/assets/licenses_node.md @@ -1,8 +1,8 @@ | Department | Related to | Name | License period | Material not material | License type | Link | Remote version | Installed version | Defined version | Author | | :--------- | :--------- | :------------------------------- | :------------- | :-------------------- | :------------ | :------------------------------------------------------------------------ | :------------- | :---------------- | :-------------- | :---------------------------------------------------------- | | kessler | stuff | lucide-react | perpetual | material | ISC | git+https://github.com/lucide-icons/lucide.git | 0.555.0 | 0.555.0 | ^0.555.0 | Eric Fennis | -| kessler | stuff | react | perpetual | material | MIT | git+https://github.com/facebook/react.git | 19.2.7 | 19.2.4 | ^19.1.0 | n/a | -| kessler | stuff | react-dom | perpetual | material | MIT | git+https://github.com/facebook/react.git | 19.2.7 | 19.2.4 | ^19.1.0 | n/a | +| kessler | stuff | react | perpetual | material | MIT | git+https://github.com/react/react.git | 19.2.8 | 19.2.4 | ^19.1.0 | n/a | +| kessler | stuff | react-dom | perpetual | material | MIT | git+https://github.com/react/react.git | 19.2.8 | 19.2.4 | ^19.1.0 | n/a | | kessler | stuff | uuid | perpetual | material | MIT | git+https://github.com/uuidjs/uuid.git | 11.1.1 | 11.1.0 | ^11.1.0 | n/a | | kessler | stuff | @microsoft/msfs-types | perpetual | material | MIT | git+https://github.com/microsoft/msfs-avionics-mirror.git | 1.14.6 | 1.14.6 | ^1.14.6 | Asobo Studio / Working Title Simulations | | kessler | stuff | @rollup/plugin-commonjs | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 28.0.9 | 28.0.9 | ^28.0.3 | Rich Harris | @@ -11,30 +11,30 @@ | kessler | stuff | @rollup/plugin-replace | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 6.0.3 | 6.0.3 | ^6.0.2 | Rich Harris | | kessler | stuff | @rollup/plugin-terser | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 0.4.4 | 0.4.4 | ^0.4.4 | Peter Placzek | | kessler | stuff | @rollup/plugin-typescript | perpetual | material | MIT | git+https://github.com/rollup/plugins.git | 12.3.0 | 12.3.0 | ^12.1.2 | Oskar Segersvärd | -| kessler | stuff | @types/node | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 24.13.2 | 24.12.0 | ^24.3.1 | n/a | -| kessler | stuff | @types/react | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.2.17 | 19.2.14 | ^19.1.6 | n/a | -| kessler | stuff | @types/react-dom | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.2.3 | 19.2.3 | ^19.1.6 | n/a | +| kessler | stuff | @types/node | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 24.13.3 | 24.12.0 | ^24.3.1 | n/a | +| kessler | stuff | @types/react | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.2.18 | 19.2.14 | ^19.1.6 | n/a | +| kessler | stuff | @types/react-dom | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 19.2.5 | 19.2.3 | ^19.1.6 | n/a | | kessler | stuff | @types/uuid | perpetual | material | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped.git | 10.0.0 | 10.0.0 | ^10.0.0 | n/a | | kessler | stuff | @typescript-eslint/eslint-plugin | perpetual | material | MIT | git+https://github.com/typescript-eslint/typescript-eslint.git | 6.21.0 | 6.21.0 | ^6.21.0 | n/a | | kessler | stuff | @typescript-eslint/parser | perpetual | material | BSD-2-Clause | git+https://github.com/typescript-eslint/typescript-eslint.git | 6.21.0 | 6.21.0 | ^6.21.0 | n/a | -| kessler | stuff | autoprefixer | perpetual | material | MIT | git+https://github.com/postcss/autoprefixer.git | 10.5.2 | 10.4.27 | ^10.4.21 | Andrey Sitnik | +| kessler | stuff | autoprefixer | perpetual | material | MIT | git+https://github.com/postcss/autoprefixer.git | 10.5.4 | 10.4.27 | ^10.4.21 | Andrey Sitnik | | kessler | stuff | cross-env | perpetual | material | MIT | git+https://github.com/kentcdodds/cross-env.git | 7.0.3 | 7.0.3 | ^7.0.3 | Kent C. Dodds (https://kentcdodds.com) | | kessler | stuff | eslint | perpetual | material | MIT | git+https://github.com/eslint/eslint.git | 8.57.1 | 8.57.1 | ^8.57.1 | Nicholas C. Zakas | | kessler | stuff | eslint-plugin-import | perpetual | material | MIT | git+https://github.com/import-js/eslint-plugin-import.git | 2.32.0 | 2.32.0 | ^2.31.0 | Ben Mosher | | kessler | stuff | eslint-plugin-react | perpetual | material | MIT | git+https://github.com/jsx-eslint/eslint-plugin-react.git | 7.37.5 | 7.37.5 | ^7.37.5 | Yannick Croissant | | kessler | stuff | eslint-plugin-react-hooks | perpetual | material | MIT | git+https://github.com/facebook/react.git | 4.6.2 | 4.6.2 | ^4.6.2 | n/a | | kessler | stuff | license-report | perpetual | material | MIT | git+https://github.com/bepo65/license-report.git | 6.8.5 | 6.8.2 | ^6.7.2 | Yaniv Kessler | -| kessler | stuff | postcss | perpetual | material | MIT | git+https://github.com/postcss/postcss.git | 8.5.16 | 8.5.8 | ^8.5.4 | Andrey Sitnik | -| kessler | stuff | postcss-import | perpetual | material | MIT | git+https://github.com/postcss/postcss-import.git | 16.1.1 | 16.1.1 | ^16.1.0 | Maxime Thirouin | -| kessler | stuff | prettier | perpetual | material | MIT | git+https://github.com/prettier/prettier.git | 3.9.3 | 3.8.1 | ^3.5.3 | James Long | +| kessler | stuff | postcss | perpetual | material | MIT | git+https://github.com/postcss/postcss.git | 8.5.26 | 8.5.8 | ^8.5.4 | Andrey Sitnik | +| kessler | stuff | postcss-import | perpetual | material | MIT | git+https://github.com/postcss/postcss-import.git | 16.2.0 | 16.1.1 | ^16.1.0 | Maxime Thirouin | +| kessler | stuff | prettier | perpetual | material | MIT | git+https://github.com/prettier/prettier.git | 3.9.6 | 3.8.1 | ^3.5.3 | James Long | | kessler | stuff | prettier-plugin-organize-imports | perpetual | material | MIT | git+https://github.com/simonhaenisch/prettier-plugin-organize-imports.git | 4.3.0 | 4.3.0 | ^4.1.0 | Simon Haenisch (https://github.com/simonhaenisch) | | kessler | stuff | rimraf | perpetual | material | BlueOak-1.0.0 | git+ssh://git@github.com/isaacs/rimraf.git | 6.1.3 | 6.1.3 | ^6.0.1 | Isaac Z. Schlueter (http://blog.izs.me/) | -| kessler | stuff | rollup | perpetual | material | MIT | git+https://github.com/rollup/rollup.git | 4.62.2 | 4.60.0 | ^4.42.0 | Rich Harris | +| kessler | stuff | rollup | perpetual | material | MIT | git+https://github.com/rollup/rollup.git | 4.63.0 | 4.60.0 | ^4.42.0 | Rich Harris | | kessler | stuff | rollup-plugin-copy | perpetual | material | MIT | git+https://github.com/vladshcherbin/rollup-plugin-copy.git | 3.5.0 | 3.5.0 | ^3.5.0 | Vlad Shcherbin | | kessler | stuff | rollup-plugin-postcss | perpetual | material | MIT | git+https://github.com/egoist/rollup-plugin-postcss.git | 4.0.2 | 4.0.2 | ^4.0.2 | EGOIST <0x142857@gmail.com> | | kessler | stuff | rollup-plugin-react-svg | perpetual | material | MIT | git+https://github.com/boopathi/react-svg-loader.git | 3.0.3 | 3.0.3 | ^3.0.3 | boopathi | | kessler | stuff | rollup-plugin-version-injector | perpetual | material | ISC | git+https://github.com/djhouseknecht/rollup-plugin-version-injector.git | 1.3.3 | 1.3.3 | ^1.3.3 | David Houseknecht | -| kessler | stuff | sass | perpetual | material | MIT | git+https://github.com/sass/dart-sass.git | 1.101.0 | 1.98.0 | ^1.89.1 | Natalie Weizenbaum nweiz@google.com https://github.com/nex3 | +| kessler | stuff | sass | perpetual | material | MIT | git+https://github.com/sass/dart-sass.git | 1.103.1 | 1.98.0 | ^1.89.1 | Natalie Weizenbaum nweiz@google.com https://github.com/nex3 | | kessler | stuff | tslib | perpetual | material | 0BSD | git+https://github.com/Microsoft/tslib.git | 2.8.1 | 2.8.1 | ^2.8.1 | Microsoft Corp. | | kessler | stuff | typed-scss-modules | perpetual | material | MIT | git+https://github.com/skovy/typed-scss-modules.git | 8.1.1 | 8.1.1 | ^8.1.1 | Spencer Miskoviak | | kessler | stuff | typescript | perpetual | material | Apache-2.0 | git+https://github.com/microsoft/TypeScript.git | 5.8.3 | 5.8.3 | 5.8.3 | Microsoft Corp. | diff --git a/PackageSources/js-bundle/src/components/input/Input.tsx b/PackageSources/js-bundle/src/components/input/Input.tsx index 437d862..8c1e8ef 100644 --- a/PackageSources/js-bundle/src/components/input/Input.tsx +++ b/PackageSources/js-bundle/src/components/input/Input.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useCallback, useEffect, useRef, useState } from 'react'; import { v4 } from 'uuid'; import Keyboard from '../keyboard/Keyboard'; @@ -21,33 +21,42 @@ export default function Input(props: { const blurRef = useRef(false); const [isFocused, setFocused] = useState(false); const [showKeyboard, setShowKeyboard] = useState(false); - const [unfocusTimer, setUnfocusTimer] = useState(null); + const unfocusTimerRef = useRef(null); + + const clearUnfocusTimer = useCallback(() => { + if (unfocusTimerRef.current !== null) { + clearTimeout(unfocusTimerRef.current); + unfocusTimerRef.current = null; + } + }, []); + + const scheduleUnfocus = useCallback(() => { + clearUnfocusTimer(); + + unfocusTimerRef.current = setTimeout(() => { + blurRef.current = false; + ref.current?.blur(); + }, 5e3); + }, [clearUnfocusTimer]); useEffect(() => { - if (unfocusTimer) { - clearTimeout(unfocusTimer); - setUnfocusTimer(null); - } - if (isFocused) { - setUnfocusTimer(setTimeout(() => ref.current?.blur(), 5e3)); + scheduleUnfocus(); Coherent.trigger('FOCUS_INPUT_FIELD', guid, '', '', '', false); } else { - console.log('UNFOCUS_INPUT_FIELD'); + clearUnfocusTimer(); Coherent.trigger('UNFOCUS_INPUT_FIELD', guid); } return () => { - if (unfocusTimer) { - clearTimeout(unfocusTimer); - setUnfocusTimer(null); - } + clearUnfocusTimer(); }; - }, [isFocused, guid]); + }, [isFocused, guid, scheduleUnfocus, clearUnfocusTimer]); return ( <> { - if (blurRef.current && isFocused) ref.current?.focus(); - else { + if (blurRef.current && isFocused) { + ref.current?.focus(); + } else { props.onBlur?.(e.target.value); setShowKeyboard(false); setFocused(false); @@ -73,12 +83,12 @@ export default function Input(props: { blurRef.current = false; }} onChange={(e) => { - if (props.onChange) props.onChange(e.target.value); - if (unfocusTimer) { - clearTimeout(unfocusTimer); - setUnfocusTimer(null); + if (props.onChange) { + props.onChange(e.target.value); + } + if (isFocused) { + scheduleUnfocus(); } - if (isFocused) setUnfocusTimer(setTimeout(() => ref.current?.blur(), 5e3)); }} value={props.value} className={props.className} @@ -89,7 +99,13 @@ export default function Input(props: { top={props.topKeyboard} value={String(props.value)} blurRef={blurRef} - onInput={(value) => props.onChange && props.onChange(value)} + onInput={(value) => { + props.onChange && props.onChange(value); + + if (isFocused) { + scheduleUnfocus(); + } + }} onClose={() => { setShowKeyboard(false); setFocused(false); diff --git a/PackageSources/js-bundle/src/components/keyboard/Keyboard.tsx b/PackageSources/js-bundle/src/components/keyboard/Keyboard.tsx index c342f42..02c9115 100644 --- a/PackageSources/js-bundle/src/components/keyboard/Keyboard.tsx +++ b/PackageSources/js-bundle/src/components/keyboard/Keyboard.tsx @@ -1,5 +1,5 @@ import { ArrowBigUp, Delete, Space, X } from 'lucide-react'; -import { forwardRef, RefObject, useState } from 'react'; +import { forwardRef, RefObject, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; const defaultLayout = { @@ -18,6 +18,7 @@ const defaultLayout = { '{space} {close}', ], }; +const KEY_DEBOUNCE_MS = 150; const Keyboard = forwardRef< HTMLDivElement, @@ -30,11 +31,15 @@ const Keyboard = forwardRef< } >(({ value, top, blurRef, onInput, onClose }, ref) => { const [shift, setShift] = useState(false); - + const lastPressAtRef = useRef(0); const layout = shift ? defaultLayout.shift : defaultLayout.default; const handleKeyPress = (key: string) => { - console.log('KEY PRESSED', key); + const now = Date.now(); + if (now - lastPressAtRef.current < KEY_DEBOUNCE_MS) { + return; + } + lastPressAtRef.current = now; if (key === '{close}') { onClose(); @@ -91,9 +96,13 @@ const Keyboard = forwardRef< className={`flex justify-center rounded-md p-4 ${ key === '{close}' ? 'bg-zinc-700 px-12 focus:bg-zinc-600' : 'flex-1 bg-zinc-600' }`} - onMouseDown={() => handleKeyPress(key)} + onMouseDown={(e) => { + e.preventDefault(); + e.stopPropagation(); + handleKeyPress(key); + }} > - {keyIdent} + {keyIdent} ); })} @@ -103,6 +112,6 @@ const Keyboard = forwardRef< document.body ); }); -Keyboard.displayName = "Keyboard" +Keyboard.displayName = 'Keyboard'; export default Keyboard; diff --git a/PackageSources/wasm-module/package.json b/PackageSources/wasm-module/package.json index 6fd3170..63d4e26 100644 --- a/PackageSources/wasm-module/package.json +++ b/PackageSources/wasm-module/package.json @@ -1,6 +1,6 @@ { "name": "wasm-module", - "version": "0.0.23", + "version": "0.0.32", "description": "Load Manager WASM module", "scripts": { "clean": "rimraf ../SimObjects/Airplanes/TFDi_Design_MD-11/panel/load-manager.wasm && rimraf MSFS",