diff --git a/web/src/app/browser/src/defaultBrowserRules.ts b/web/src/app/browser/src/defaultBrowserRules.ts index f0002401519..a631c1a0c21 100644 --- a/web/src/app/browser/src/defaultBrowserRules.ts +++ b/web/src/app/browser/src/defaultBrowserRules.ts @@ -8,7 +8,7 @@ import { import { ContextManager } from './contextManager.js'; -export default class DefaultBrowserRules extends DefaultRules { +export class DefaultBrowserRules extends DefaultRules { private contextManager: ContextManager; constructor(contextManager: ContextManager) { diff --git a/web/src/app/browser/src/keymanEngine.ts b/web/src/app/browser/src/keymanEngine.ts index 2695cee82c3..33172bba29f 100644 --- a/web/src/app/browser/src/keymanEngine.ts +++ b/web/src/app/browser/src/keymanEngine.ts @@ -13,7 +13,7 @@ import KeyboardObject = KeymanWebKeyboard.KeyboardObject; import * as views from './viewsAnchorpoint.js'; import { BrowserConfiguration, BrowserInitOptionDefaults, BrowserInitOptionSpec } from './configuration.js'; import { ContextManager } from './contextManager.js'; -import DefaultBrowserRules from './defaultBrowserRules.js'; +import { DefaultBrowserRules } from './defaultBrowserRules.js'; import { HardwareEventKeyboard } from './hardwareEventKeyboard.js'; import { FocusStateAPIObject } from './context/focusAssistant.js'; import { PageIntegrationHandlers } from './context/pageIntegrationHandlers.js'; diff --git a/web/src/app/webview/src/keymanEngine.ts b/web/src/app/webview/src/keymanEngine.ts index 0ea022d99c9..fb411bc2d76 100644 --- a/web/src/app/webview/src/keymanEngine.ts +++ b/web/src/app/webview/src/keymanEngine.ts @@ -6,7 +6,7 @@ import { toPrefixedKeyboardId, toUnprefixedKeyboardId } from 'keyman/engine/keyb import { WebviewConfiguration, WebviewInitOptionDefaults, WebviewInitOptionSpec } from './configuration.js'; import { ContextManager, HostTextStore } from './contextManager.js'; -import PassthroughKeyboard from './passthroughKeyboard.js'; +import { PassthroughKeyboard } from './passthroughKeyboard.js'; import { buildEmbeddedGestureConfig, setupEmbeddedListeners } from './oskConfiguration.js'; import { WorkerFactory } from '@keymanapp/lexical-model-layer'; diff --git a/web/src/app/webview/src/passthroughKeyboard.ts b/web/src/app/webview/src/passthroughKeyboard.ts index c0361195089..43e118aebc8 100644 --- a/web/src/app/webview/src/passthroughKeyboard.ts +++ b/web/src/app/webview/src/passthroughKeyboard.ts @@ -2,7 +2,7 @@ import { DeviceSpec, Keyboard, KeyEvent, ManagedPromise } from 'keyman/engine/ke import { HardKeyboardBase, processForMnemonicsAndLegacy } from 'keyman/engine/main'; -export default class PassthroughKeyboard extends HardKeyboardBase { +export class PassthroughKeyboard extends HardKeyboardBase { readonly baseDevice: DeviceSpec; public activeKeyboard: Keyboard; diff --git a/web/src/common/web-utils/src/deepCopy.ts b/web/src/common/web-utils/src/deepCopy.ts index c88f2556600..db0eb498343 100644 --- a/web/src/common/web-utils/src/deepCopy.ts +++ b/web/src/common/web-utils/src/deepCopy.ts @@ -6,7 +6,7 @@ * Description Makes an actual copy (not a reference) of an object, copying simple members, * arrays and member objects but not functions, so use with care! */ -export default function deepCopy)>(p:T): T { +export function deepCopy)>(p:T): T { // typeof undefined == 'undefined', ![] == false, !{} == false if(typeof p != 'object' || !p) { return p; diff --git a/web/src/common/web-utils/src/deviceSpec.ts b/web/src/common/web-utils/src/deviceSpec.ts index 3ab0352fc46..f993f94b82d 100644 --- a/web/src/common/web-utils/src/deviceSpec.ts +++ b/web/src/common/web-utils/src/deviceSpec.ts @@ -80,5 +80,3 @@ export namespace DeviceSpec { export function physicalKeyDeviceAlias(device: DeviceSpec) { return new DeviceSpec(device.browser, DeviceSpec.FormFactor.Desktop, device.OS, false); } - -export default DeviceSpec; \ No newline at end of file diff --git a/web/src/common/web-utils/src/globalObject.ts b/web/src/common/web-utils/src/globalObject.ts index b2686872169..c6c0af33e50 100644 --- a/web/src/common/web-utils/src/globalObject.ts +++ b/web/src/common/web-utils/src/globalObject.ts @@ -4,7 +4,7 @@ * - In WebWorkers, returns `self`. * - In Node, returns `global`. */ -export default function getGlobalObject(): typeof globalThis { +export function globalObject(): typeof globalThis { // Evergreen browsers have started defining 'globalThis'. // Refer to https://devblogs.microsoft.com/typescript/announcing-typescript-3-4/#type-checking-for-globalthis // and its referenced polyfill. Said polyfill is very complex, so we opt for this far leaner variant. diff --git a/web/src/common/web-utils/src/index.ts b/web/src/common/web-utils/src/index.ts index 343e1486e67..f471946d713 100644 --- a/web/src/common/web-utils/src/index.ts +++ b/web/src/common/web-utils/src/index.ts @@ -1,8 +1,8 @@ // References all utility includes from a single file, making import/export simple. -export { default as deepCopy } from "./deepCopy.js"; +export { deepCopy } from "./deepCopy.js"; -export { default as DeviceSpec, physicalKeyDeviceAlias } from "./deviceSpec.js"; +export { DeviceSpec, physicalKeyDeviceAlias } from "./deviceSpec.js"; /* // An example valid use, post-import: @@ -12,16 +12,16 @@ export { default as DeviceSpec, physicalKeyDeviceAlias } from "./deviceSpec.js"; true); */ -export { default as Version } from "./version.js"; +export { Version } from "./version.js"; -export { default as globalObject } from "./globalObject.js"; +export { globalObject } from "./globalObject.js"; export * as KMWString from './kmwstring.js'; -export { default as ManagedPromise } from "./managedPromise.js"; -export { default as TimeoutPromise, timedPromise } from "./timeoutPromise.js"; +export { ManagedPromise } from "./managedPromise.js"; +export { TimeoutPromise, timedPromise } from "./timeoutPromise.js"; -export { default as PriorityQueue, QueueComparator } from "./priority-queue.js" +export { PriorityQueue, QueueComparator } from "./priority-queue.js" export { isEmptyTransform } from './isEmptyTransform.js'; diff --git a/web/src/common/web-utils/src/managedPromise.ts b/web/src/common/web-utils/src/managedPromise.ts index 52885319023..4319575709e 100644 --- a/web/src/common/web-utils/src/managedPromise.ts +++ b/web/src/common/web-utils/src/managedPromise.ts @@ -1,7 +1,7 @@ type ResolveSignature = (value: Type | PromiseLike) => void; type RejectSignature = (reason?: any) => void; -export default class ManagedPromise { +export class ManagedPromise { /** * Calling this function will fulfill the Promise represented by this class. */ diff --git a/web/src/common/web-utils/src/priority-queue.ts b/web/src/common/web-utils/src/priority-queue.ts index 66867f37ad5..2d75d62a928 100644 --- a/web/src/common/web-utils/src/priority-queue.ts +++ b/web/src/common/web-utils/src/priority-queue.ts @@ -13,7 +13,7 @@ */ export type QueueComparator = (a: Type, b: Type) => number; -export default class PriorityQueue { +export class PriorityQueue { private comparator: QueueComparator; private heap: Type[]; diff --git a/web/src/common/web-utils/src/timeoutPromise.ts b/web/src/common/web-utils/src/timeoutPromise.ts index 4b6fb3a7d61..0f48d096717 100644 --- a/web/src/common/web-utils/src/timeoutPromise.ts +++ b/web/src/common/web-utils/src/timeoutPromise.ts @@ -1,4 +1,4 @@ -import ManagedPromise from "./managedPromise.js"; +import { ManagedPromise } from "./managedPromise.js"; /** * This class represents a cancelable timeout, wrapped in Promise form. @@ -7,7 +7,7 @@ import ManagedPromise from "./managedPromise.js"; * `reject` is called earlier. Call `.resolve(false)` for early cancellation * or `.resolve(true)` to cancel the timer while resolving the Promise early. */ -export default class TimeoutPromise extends ManagedPromise { +export class TimeoutPromise extends ManagedPromise { private timerHandle: number | NodeJS.Timeout; constructor(timeoutInMillis: number) { // Helps marshal the internal timer handle to its member field despite being diff --git a/web/src/common/web-utils/src/version.ts b/web/src/common/web-utils/src/version.ts index 145b3361064..61b94147b8d 100644 --- a/web/src/common/web-utils/src/version.ts +++ b/web/src/common/web-utils/src/version.ts @@ -1,7 +1,7 @@ import KEYMAN_VERSION from "@keymanapp/keyman-version"; // Dotted-decimal version -export default class Version { +export class Version { public static readonly CURRENT = new Version(KEYMAN_VERSION.VERSION_RELEASE); // Represents a default version value for keyboards compiled before this was compiled into keyboards. diff --git a/web/src/engine/predictive-text/templates/src/index.ts b/web/src/engine/predictive-text/templates/src/index.ts index 0966fb44949..18aaab78633 100644 --- a/web/src/engine/predictive-text/templates/src/index.ts +++ b/web/src/engine/predictive-text/templates/src/index.ts @@ -2,6 +2,6 @@ export { SENTINEL_CODE_UNIT, applyTransform, buildMergedTransform, isHighSurrogate, isLowSurrogate, isSentinel, transformToSuggestion, defaultApplyCasing } from "./common.js"; -export { default as QuoteBehavior } from "./quote-behavior.js"; +export { QuoteBehavior } from "./quote-behavior.js"; export { getLastPreCaretToken, Token, Tokenization, tokenize, wordbreak } from "./tokenization.js"; -export { default as TrieModel, TrieModelOptions } from "./trie-model.js"; \ No newline at end of file +export { TrieModel, TrieModelOptions } from "./trie-model.js"; \ No newline at end of file diff --git a/web/src/engine/predictive-text/templates/src/quote-behavior.ts b/web/src/engine/predictive-text/templates/src/quote-behavior.ts index 25a886feef3..686b9db67f5 100644 --- a/web/src/engine/predictive-text/templates/src/quote-behavior.ts +++ b/web/src/engine/predictive-text/templates/src/quote-behavior.ts @@ -36,5 +36,3 @@ export namespace QuoteBehavior { } } } - -export default QuoteBehavior; diff --git a/web/src/engine/predictive-text/templates/src/trie-model.ts b/web/src/engine/predictive-text/templates/src/trie-model.ts index 7a99e64ef3b..ebb99b938b7 100644 --- a/web/src/engine/predictive-text/templates/src/trie-model.ts +++ b/web/src/engine/predictive-text/templates/src/trie-model.ts @@ -269,7 +269,7 @@ export class Traversal implements LexiconTraversal { * prefix searches within words, however they are not very good * at predicting the next word. */ -export default class TrieModel implements LexicalModel { +export class TrieModel implements LexicalModel { configuration?: Configuration; private _trie: Trie; readonly breakWords: WordBreakingFunction; diff --git a/web/src/engine/predictive-text/wordbreakers/src/main/ascii.ts b/web/src/engine/predictive-text/wordbreakers/src/main/ascii.ts index 7ed05e331f4..545478abd26 100644 --- a/web/src/engine/predictive-text/wordbreakers/src/main/ascii.ts +++ b/web/src/engine/predictive-text/wordbreakers/src/main/ascii.ts @@ -5,7 +5,7 @@ import { LexicalModelTypes } from '@keymanapp/common-types'; * * @param phrase */ -export default function ascii(phrase: string): LexicalModelTypes.Span[] { +export function ascii(phrase: string): LexicalModelTypes.Span[] { let matchWord = /[A-Za-z0-9']+/g; let words: LexicalModelTypes.Span[] = []; let match: RegExpExecArray | null; diff --git a/web/src/engine/predictive-text/wordbreakers/src/main/default/index.ts b/web/src/engine/predictive-text/wordbreakers/src/main/default/index.ts index c807c4ab2a8..0f2408d8967 100644 --- a/web/src/engine/predictive-text/wordbreakers/src/main/default/index.ts +++ b/web/src/engine/predictive-text/wordbreakers/src/main/default/index.ts @@ -38,7 +38,7 @@ export interface DefaultWordBreakerOptions { * @see http://unicode.org/reports/tr29/#Word_Boundaries * @see https://github.com/eddieantonio/unicode-default-word-boundary/tree/v12.0.0 */ -export default function default_(text: string, options?: DefaultWordBreakerOptions): LexicalModelTypes.Span[] { +export function default_(text: string, options?: DefaultWordBreakerOptions): LexicalModelTypes.Span[] { let boundaries = findBoundaries(text, options); if (boundaries.length == 0) { return []; diff --git a/web/src/engine/predictive-text/wordbreakers/src/main/index.ts b/web/src/engine/predictive-text/wordbreakers/src/main/index.ts index 79cba5d83af..0b44523e47e 100644 --- a/web/src/engine/predictive-text/wordbreakers/src/main/index.ts +++ b/web/src/engine/predictive-text/wordbreakers/src/main/index.ts @@ -1,6 +1,6 @@ -import placeholder from "./placeholder.js"; -import ascii from "./ascii.js"; -import default_ from "./default/index.js"; +import { placeholder } from "./placeholder.js"; +import { ascii } from "./ascii.js"; +import { default_ } from "./default/index.js"; export { placeholder, ascii, default_ as default, default_ as defaultWordbreaker }; export { type BreakerContext } from "./default/index.js"; \ No newline at end of file diff --git a/web/src/engine/predictive-text/wordbreakers/src/main/placeholder.ts b/web/src/engine/predictive-text/wordbreakers/src/main/placeholder.ts index f1e44528b98..2a3c8807427 100644 --- a/web/src/engine/predictive-text/wordbreakers/src/main/placeholder.ts +++ b/web/src/engine/predictive-text/wordbreakers/src/main/placeholder.ts @@ -7,7 +7,7 @@ import { LexicalModelTypes } from '@keymanapp/common-types'; * @param phrase The phrase in which to break words. * @deprecated Use a word breaker tailored to your language instead! */ -export default function placeholder(phrase: string): LexicalModelTypes.Span[] { +export function placeholder(phrase: string): LexicalModelTypes.Span[] { let nextStart = 0; return phrase.split(/\s+/).map(utterance => { // XXX: The indices are NOT accurate to the original phrase! diff --git a/web/src/engine/predictive-text/worker-main/src/lmlayer.ts b/web/src/engine/predictive-text/worker-main/src/lmlayer.ts index 5727dabd945..c9660c54b2c 100644 --- a/web/src/engine/predictive-text/worker-main/src/lmlayer.ts +++ b/web/src/engine/predictive-text/worker-main/src/lmlayer.ts @@ -28,7 +28,7 @@ import Distribution = LexicalModelTypes.Distribution; import Reversion = LexicalModelTypes.Reversion; import Suggestion = LexicalModelTypes.Suggestion; import Transform = LexicalModelTypes.Transform; -import PromiseStore from "./promise-store.js"; +import { PromiseStore } from "./promise-store.js"; import { OutgoingMessage } from '@keymanapp/lm-message-types'; /// @@ -53,7 +53,7 @@ import { OutgoingMessage } from '@keymanapp/lm-message-types'; * The top-level LMLayer will automatically starts up its own Web Worker. */ -export default class LMLayer { +export class LMLayer { /** * The underlying worker instance. By default, this is the LMLayerWorker. */ diff --git a/web/src/engine/predictive-text/worker-main/src/node/index.ts b/web/src/engine/predictive-text/worker-main/src/node/index.ts index 3393c22b81b..f3b045b0c5a 100644 --- a/web/src/engine/predictive-text/worker-main/src/node/index.ts +++ b/web/src/engine/predictive-text/worker-main/src/node/index.ts @@ -1,6 +1,6 @@ -export { default as LMLayer } from '../lmlayer.js'; -export { default as Worker } from './worker.js'; -export { default as SourcemappedWorker } from './sourcemappedWorker.js'; +export { LMLayer } from '../lmlayer.js'; +export { Worker } from './worker.js'; +export { SourcemappedWorker } from './sourcemappedWorker.js'; export interface WorkerFactory { constructInstance(): Worker diff --git a/web/src/engine/predictive-text/worker-main/src/node/mappedWorker.ts b/web/src/engine/predictive-text/worker-main/src/node/mappedWorker.ts index d588a19562c..8b3d9d2b7b9 100644 --- a/web/src/engine/predictive-text/worker-main/src/node/mappedWorker.ts +++ b/web/src/engine/predictive-text/worker-main/src/node/mappedWorker.ts @@ -60,7 +60,7 @@ self.importScripts = importScripts; * cross-platform Worker support in the future, it may be wise to swap to use of * that package. */ -export default class MappedWorker extends worker.Worker implements Worker { +export class MappedWorker extends worker.Worker implements Worker { constructor(scriptStr: string) { const concatenatedScript = ` ${nodeWorkerToWebWorkerMappingSource} diff --git a/web/src/engine/predictive-text/worker-main/src/node/sourcemappedWorker.ts b/web/src/engine/predictive-text/worker-main/src/node/sourcemappedWorker.ts index aaaf79e0f6f..a8141939ce9 100644 --- a/web/src/engine/predictive-text/worker-main/src/node/sourcemappedWorker.ts +++ b/web/src/engine/predictive-text/worker-main/src/node/sourcemappedWorker.ts @@ -1,9 +1,9 @@ -import MappedWorker from "./mappedWorker.js"; -import unwrap from '../unwrap.js'; +import { MappedWorker } from "./mappedWorker.js"; +import { unwrap } from '../unwrap.js'; import { LMLayerWorkerCode, LMLayerWorkerSourcemapComment } from "@keymanapp/lm-worker/worker-main.wrapped.js"; -export default class SourcemappedWorker { +export class SourcemappedWorker { static constructInstance(): Worker { let scriptStr = unwrap(LMLayerWorkerCode); diff --git a/web/src/engine/predictive-text/worker-main/src/node/worker.ts b/web/src/engine/predictive-text/worker-main/src/node/worker.ts index aafb2c4869a..3f5ffe7d717 100644 --- a/web/src/engine/predictive-text/worker-main/src/node/worker.ts +++ b/web/src/engine/predictive-text/worker-main/src/node/worker.ts @@ -1,9 +1,9 @@ -import MappedWorker from "./mappedWorker.js"; -import unwrap from '../unwrap.js'; +import { MappedWorker } from "./mappedWorker.js"; +import { unwrap } from '../unwrap.js'; import { LMLayerWorkerCode, LMLayerWorkerSourcemapComment } from "@keymanapp/lm-worker/worker-main.wrapped.min.js"; -export default class Worker { +export class Worker { static constructInstance(): Worker { let scriptStr = unwrap(LMLayerWorkerCode); const srcMapUrlIndex = scriptStr.indexOf("//# sourceMappingURL") diff --git a/web/src/engine/predictive-text/worker-main/src/promise-store.ts b/web/src/engine/predictive-text/worker-main/src/promise-store.ts index 9548dd1c971..77021a2e940 100644 --- a/web/src/engine/predictive-text/worker-main/src/promise-store.ts +++ b/web/src/engine/predictive-text/worker-main/src/promise-store.ts @@ -42,7 +42,7 @@ interface PromiseCallbacks { * * is the type of resolved value (value yielded successfully by promise). */ -export default class PromiseStore { +export class PromiseStore { // IE11 offers partial support for new Map(). // Assume only .get(), .set(), .has(), .delete(), and .size work. // See: http://kangax.github.io/compat-table/es6/#test-Map diff --git a/web/src/engine/predictive-text/worker-main/src/unwrap.ts b/web/src/engine/predictive-text/worker-main/src/unwrap.ts index fc0769e5bd1..6cb84f4da3a 100644 --- a/web/src/engine/predictive-text/worker-main/src/unwrap.ts +++ b/web/src/engine/predictive-text/worker-main/src/unwrap.ts @@ -5,7 +5,7 @@ * * @param fn The function whose body will be returned. */ -export default function unwrap(encodedSrc: string): string { +export function unwrap(encodedSrc: string): string { // There used to be more to this, but now it's a pretty simple passthrough! return encodedSrc; } \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-main/src/web/index.ts b/web/src/engine/predictive-text/worker-main/src/web/index.ts index f133f6f2f8d..2614966ff05 100644 --- a/web/src/engine/predictive-text/worker-main/src/web/index.ts +++ b/web/src/engine/predictive-text/worker-main/src/web/index.ts @@ -1,7 +1,7 @@ -export { default as LMLayer } from '../lmlayer.js'; -export { default as Worker } from './worker.js'; -export { default as SourcemappedWorker } from './sourcemappedWorker.js'; +export { LMLayer } from '../lmlayer.js'; +export { DefaultWorker as Worker } from './worker.js'; // TODO: eliminate rename +export { SourcemappedWorker } from './sourcemappedWorker.js'; export interface WorkerFactory { constructInstance(): Worker -} \ No newline at end of file +} diff --git a/web/src/engine/predictive-text/worker-main/src/web/sourcemappedWorker.ts b/web/src/engine/predictive-text/worker-main/src/web/sourcemappedWorker.ts index 18a89ab05f5..35999f8b38a 100644 --- a/web/src/engine/predictive-text/worker-main/src/web/sourcemappedWorker.ts +++ b/web/src/engine/predictive-text/worker-main/src/web/sourcemappedWorker.ts @@ -1,7 +1,7 @@ -import unwrap from '../unwrap.js'; +import { unwrap } from '../unwrap.js'; import { LMLayerWorkerCode, LMLayerWorkerSourcemapComment } from "@keymanapp/lm-worker/worker-main.wrapped.js"; -export default class SourcemappedWorker { +export class SourcemappedWorker { // the only difference to DefaultWorker is that this class uses // the unminified LM* blobs diff --git a/web/src/engine/predictive-text/worker-main/src/web/worker.ts b/web/src/engine/predictive-text/worker-main/src/web/worker.ts index 372887fcddf..94b02dee7be 100644 --- a/web/src/engine/predictive-text/worker-main/src/web/worker.ts +++ b/web/src/engine/predictive-text/worker-main/src/web/worker.ts @@ -1,7 +1,7 @@ -import unwrap from '../unwrap.js'; +import { unwrap } from '../unwrap.js'; import { LMLayerWorkerCode, LMLayerWorkerSourcemapComment } from "@keymanapp/lm-worker/worker-main.wrapped.min.js"; -export default class DefaultWorker { +export class DefaultWorker { static constructInstance(): Worker { return new Worker(this.asBlobURI(LMLayerWorkerCode)); } @@ -28,7 +28,7 @@ export default class DefaultWorker { // if(false) { code += '\n' + LMLayerWorkerSourcemapComment; // } - let blob = new Blob([code], { type: 'text/javascript' }); + const blob = new Blob([code], { type: 'text/javascript' }); return URL.createObjectURL(blob); } } \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-main/unit_tests/headless/promise-store.tests.js b/web/src/engine/predictive-text/worker-main/unit_tests/headless/promise-store.tests.js index 0809b215ce7..8e220a51766 100644 --- a/web/src/engine/predictive-text/worker-main/unit_tests/headless/promise-store.tests.js +++ b/web/src/engine/predictive-text/worker-main/unit_tests/headless/promise-store.tests.js @@ -1,7 +1,7 @@ import { assert } from 'chai'; import sinon from 'sinon'; -import PromiseStore from '#./promise-store.js'; +import { PromiseStore } from '#./promise-store.js'; import { randomToken } from '@keymanapp/common-test-resources/model-helpers.mjs'; describe('PromiseStore', function () { diff --git a/web/src/engine/predictive-text/worker-thread/src/main/correction/context-tracker.ts b/web/src/engine/predictive-text/worker-thread/src/main/correction/context-tracker.ts index 590a9aaa12e..1ad67f40ee4 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/correction/context-tracker.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/correction/context-tracker.ts @@ -3,7 +3,7 @@ import { KMWString } from 'keyman/common/web-utils'; import { ClassicalDistanceCalculation, EditOperation } from './classical-calculation.js'; import { SearchSpace } from './distance-modeler.js'; -import TransformUtils from '../transformUtils.js'; +import { TransformUtils } from '../transformUtils.js'; import { determineModelTokenizer } from '../model-helpers.js'; import { tokenizeTransform, tokenizeTransformDistribution } from './transform-tokenization.js'; import { LexicalModelTypes } from '@keymanapp/common-types'; diff --git a/web/src/engine/predictive-text/worker-thread/src/main/correction/index.ts b/web/src/engine/predictive-text/worker-thread/src/main/correction/index.ts index 6da63b7ced6..bfad65cf9af 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/correction/index.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/correction/index.ts @@ -1,5 +1,14 @@ -export * from './classical-calculation.js'; -export * from './context-tracker.js'; -export * from './distance-modeler.js'; -export * from './execution-timer.js'; -export * from './transform-tokenization.js'; \ No newline at end of file +export { type EditOperation, ClassicalDistanceCalculation } from './classical-calculation.js'; +export { + getEditPathLastMatch, TrackedContextSuggestion, + TrackedContextToken, TrackedContextState, ContextTracker +} from './context-tracker.js'; +export { + type TraversableToken, QUEUE_NODE_COMPARATOR, PartialSearchEdge, + SearchNode, SearchResult, SearchSpace +} from './distance-modeler.js'; +export { + STANDARD_TIME_BETWEEN_DEFERS, ExecutionBucket, + ExecutionSpan, ExecutionTimer +} from './execution-timer.js'; +export { tokenizeTransform, tokenizeTransformDistribution } from './transform-tokenization.js'; \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-thread/src/main/index.ts b/web/src/engine/predictive-text/worker-thread/src/main/index.ts index 167711a9444..6842b240412 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/index.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/index.ts @@ -36,7 +36,7 @@ import * as correction from './correction/index.js'; import * as wordBreakers from '@keymanapp/models-wordbreakers'; import { KMWString } from "keyman/common/web-utils"; -import ModelCompositor from './model-compositor.js'; +import { ModelCompositor } from './model-compositor.js'; import { ImportScripts, IncomingMessage, LMLayerWorkerState, LoadMessage, ModelEval, ModelFile, ModelSourceSpec, PostMessage } from './worker-interfaces.js'; import { LexicalModelTypes } from '@keymanapp/common-types'; import Capabilities = LexicalModelTypes.Capabilities; @@ -66,7 +66,7 @@ import { OutgoingMessageKind } from '@keymanapp/lm-message-types'; * The model and the configuration are ONLY relevant in the `ready` state; * as such, they are NOT direct properties of the LMLayerWorker. */ -export default class LMLayerWorker { +export class LMLayerWorker { /** * State pattern. This object handles onMessage(). * handleMessage() can transition to a different state, if diff --git a/web/src/engine/predictive-text/worker-thread/src/main/model-compositor.ts b/web/src/engine/predictive-text/worker-thread/src/main/model-compositor.ts index fff11f05b68..62352206721 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/model-compositor.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/model-compositor.ts @@ -3,7 +3,7 @@ import { KMWString } from 'keyman/common/web-utils'; import { LexicalModelTypes } from '@keymanapp/common-types'; import * as correction from './correction/index.js' -import TransformUtils from './transformUtils.js'; +import { TransformUtils } from './transformUtils.js'; import { applySuggestionCasing, correctAndEnumerate, dedupeSuggestions, finalizeSuggestions, predictionAutoSelect, processSimilarity, toAnnotatedSuggestion, tupleDisplayOrderSort } from './predict-helpers.js'; import { detectCurrentCasing, determineModelTokenizer, determineModelWordbreaker, determinePunctuationFromModel } from './model-helpers.js'; @@ -355,5 +355,3 @@ export class ModelCompositor { } } } - -export default ModelCompositor; \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-thread/src/main/models/dummy-model.ts b/web/src/engine/predictive-text/worker-thread/src/main/models/dummy-model.ts index 40678312d30..b2de7695aee 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/models/dummy-model.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/models/dummy-model.ts @@ -119,5 +119,3 @@ export class DummyModel implements LexicalModel { } } }; - -export default DummyModel; \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-thread/src/main/models/index.ts b/web/src/engine/predictive-text/worker-thread/src/main/models/index.ts index 4a6f20da150..4489b94c62a 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/models/index.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/models/index.ts @@ -1,2 +1,2 @@ export * from '@keymanapp/models-templates'; -export { default as DummyModel, DummyOptions } from './dummy-model.js'; +export { DummyModel, DummyOptions } from './dummy-model.js'; diff --git a/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts b/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts index 34383464e86..21328bf31c4 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/predict-helpers.ts @@ -2,11 +2,11 @@ import * as models from '@keymanapp/models-templates'; import { KMWString } from 'keyman/common/web-utils'; import { LexicalModelTypes } from '@keymanapp/common-types'; -import TransformUtils from './transformUtils.js'; +import { TransformUtils } from './transformUtils.js'; import { determineModelTokenizer, determineModelWordbreaker, determinePunctuationFromModel } from './model-helpers.js'; import { ContextTracker, TrackedContextState } from './correction/context-tracker.js'; import { ExecutionTimer } from './correction/execution-timer.js'; -import ModelCompositor from './model-compositor.js'; +import { ModelCompositor } from './model-compositor.js'; import CasingForm = LexicalModelTypes.CasingForm; import Context = LexicalModelTypes.Context; import Distribution = LexicalModelTypes.Distribution; diff --git a/web/src/engine/predictive-text/worker-thread/src/main/test-index.ts b/web/src/engine/predictive-text/worker-thread/src/main/test-index.ts index 5a2b5c6c849..168216f19b2 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/test-index.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/test-index.ts @@ -1,11 +1,20 @@ export { ClassicalDistanceCalculation } from './correction/classical-calculation.js'; export { ContextTracker } from './correction/context-tracker.js'; export * as correction from './correction/index.js'; -export * from './model-helpers.js'; +export { + determinePunctuationFromModel, determineModelWordbreaker, + determineModelTokenizer, detectCurrentCasing +} from './model-helpers.js'; export * as models from './models/index.js'; export { ModelCompositor } from './model-compositor.js'; export { tokenizeTransform, tokenizeTransformDistribution } from './correction/transform-tokenization.js'; -export * from './predict-helpers.js'; -export { default as TransformUtils } from './transformUtils.js' -export { default as LMLayerWorker } from './index.js' -export * from './transform-subsets.js'; \ No newline at end of file +export { + AUTOSELECT_PROPORTION_THRESHOLD, CORRECTION_SEARCH_THRESHOLDS, + CorrectionPredictionTuple, SuggestionSimilarity, tupleDisplayOrderSort, + correctAndEnumerate, shouldStopSearchingEarly, predictFromCorrections, + applySuggestionCasing, toAnnotatedSuggestion, predictionAutoSelect, + dedupeSuggestions, finalizeSuggestions, processSimilarity +} from './predict-helpers.js'; +export { TransformUtils } from './transformUtils.js' +export { LMLayerWorker } from './index.js' +export { TransformSubset, subsetByInterval, subsetByChar, mergeSubset } from './transform-subsets.js'; \ No newline at end of file diff --git a/web/src/engine/predictive-text/worker-thread/src/main/transformUtils.ts b/web/src/engine/predictive-text/worker-thread/src/main/transformUtils.ts index 08188934c62..08991296eed 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/transformUtils.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/transformUtils.ts @@ -1,6 +1,6 @@ import { LexicalModelTypes } from '@keymanapp/common-types'; -export default class TransformUtils { +export class TransformUtils { static isWhitespace(transform: LexicalModelTypes.Transform): boolean { // Matches a string that is entirely one or more characters with Unicode general property Z* or the following: CR, LF, and Tab. const whitespaceRemover = /^[\u0009\u000A\u000D\u0020\u00a0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u202f\u205f\u3000]+$/i; diff --git a/web/src/engine/predictive-text/worker-thread/src/main/worker-interfaces.ts b/web/src/engine/predictive-text/worker-thread/src/main/worker-interfaces.ts index 9a0865094f5..0af1e74795c 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/worker-interfaces.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/worker-interfaces.ts @@ -36,7 +36,7 @@ import LexicalModel = LexicalModelTypes.LexicalModel; import Reversion = LexicalModelTypes.Reversion; import Suggestion = LexicalModelTypes.Suggestion; import Transform = LexicalModelTypes.Transform; -import type ModelCompositor from './model-compositor.js'; +import { type ModelCompositor } from './model-compositor.js'; import { Token } from '@keymanapp/models-templates'; /** diff --git a/web/src/engine/predictive-text/worker-thread/src/main/worker-main.ts b/web/src/engine/predictive-text/worker-thread/src/main/worker-main.ts index 665943f66fb..1d45a0137cb 100644 --- a/web/src/engine/predictive-text/worker-thread/src/main/worker-main.ts +++ b/web/src/engine/predictive-text/worker-thread/src/main/worker-main.ts @@ -20,7 +20,7 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -import LMLayerWorker from './index.js'; +import { LMLayerWorker } from './index.js'; // Let LMLayerWorker be available both in the browser and in Node. if (typeof self !== 'undefined' && 'postMessage' in self && 'importScripts' in self) { diff --git a/web/src/engine/src/dom-utils/cookieSerializer.ts b/web/src/engine/src/dom-utils/cookieSerializer.ts index daa6c59667e..8b6465bd482 100644 --- a/web/src/engine/src/dom-utils/cookieSerializer.ts +++ b/web/src/engine/src/dom-utils/cookieSerializer.ts @@ -3,7 +3,7 @@ type DecodedCookieFieldValue = string | number | boolean; type FilteredRecordEncoder = (value: DecodedCookieFieldValue, key: string) => string; type FilteredRecordDecoder = (value: string, key: string) => DecodedCookieFieldValue; -export default class CookieSerializer> { +export class CookieSerializer> { readonly name: string; constructor(name: string) { diff --git a/web/src/engine/src/dom-utils/createUnselectableElement.ts b/web/src/engine/src/dom-utils/createUnselectableElement.ts index fafa53ca0ee..e4b904dd3dd 100644 --- a/web/src/engine/src/dom-utils/createUnselectableElement.ts +++ b/web/src/engine/src/dom-utils/createUnselectableElement.ts @@ -1,5 +1,5 @@ // Found a bit of magic formatting that allows dynamic return typing for a specified element tag! -export default function createUnselectableElement(nodeName:E) { +export function createUnselectableElement(nodeName:E) { const e = document.createElement(nodeName); e.style.userSelect="none"; diff --git a/web/src/engine/src/dom-utils/index.ts b/web/src/engine/src/dom-utils/index.ts index ad667ea341e..ae4ddd18029 100644 --- a/web/src/engine/src/dom-utils/index.ts +++ b/web/src/engine/src/dom-utils/index.ts @@ -1,6 +1,6 @@ export { arrayFromNodeList } from './arrayFromNodeList.js'; -export { default as createUnselectableElement } from './createUnselectableElement.js'; +export { createUnselectableElement } from './createUnselectableElement.js'; export { createStyleSheet, StylesheetManager } from './stylesheets.js'; -export { default as landscapeView } from './landscapeView.js'; -export { default as CookieSerializer } from './cookieSerializer.js'; +export { landscapeView } from './landscapeView.js'; +export { CookieSerializer } from './cookieSerializer.js'; export { getAbsoluteX, getAbsoluteY } from './getAbsolute.js'; diff --git a/web/src/engine/src/dom-utils/landscapeView.ts b/web/src/engine/src/dom-utils/landscapeView.ts index 06873b3da2d..eeb02983941 100644 --- a/web/src/engine/src/dom-utils/landscapeView.ts +++ b/web/src/engine/src/dom-utils/landscapeView.ts @@ -3,7 +3,7 @@ * * @return {boolean} */ -export default function landscapeView(): boolean { // new for I3363 (Build 301) +export function landscapeView(): boolean { // new for I3363 (Build 301) let orientation: number; // Assume portrait mode if orientation undefined diff --git a/web/src/engine/src/interfaces/index.ts b/web/src/engine/src/interfaces/index.ts index fb22d0c6d93..22366e36148 100644 --- a/web/src/engine/src/interfaces/index.ts +++ b/web/src/engine/src/interfaces/index.ts @@ -1,6 +1,6 @@ -export { default as PathConfiguration } from './pathConfiguration.js'; +export { PathConfiguration } from './pathConfiguration.js'; export { PathOptionDefaults, PathOptionSpec } from './optionSpec.interface.js'; export { ModelSpec } from './modelSpec.js'; -export { default as PredictionContext } from './prediction/predictionContext.js'; +export { PredictionContext } from './prediction/predictionContext.js'; export { LanguageProcessorEventMap, StateChangeEnum, ReadySuggestions } from './prediction/languageProcessor.interface.js'; export { OSKResourcePathConfiguration } from './oskResourcePathConfiguration.interface.js'; \ No newline at end of file diff --git a/web/src/engine/src/interfaces/pathConfiguration.ts b/web/src/engine/src/interfaces/pathConfiguration.ts index 18080374e48..090dc7d4c40 100644 --- a/web/src/engine/src/interfaces/pathConfiguration.ts +++ b/web/src/engine/src/interfaces/pathConfiguration.ts @@ -10,7 +10,7 @@ const addDelimiter = (p: string) => { } } -export default class PathConfiguration implements OSKResourcePathConfiguration { +export class PathConfiguration implements OSKResourcePathConfiguration { private readonly sourcePath: string; private _root: string; private _resources: string; diff --git a/web/src/engine/src/interfaces/prediction/predictionContext.ts b/web/src/engine/src/interfaces/prediction/predictionContext.ts index e4ce9821230..09749170fd1 100644 --- a/web/src/engine/src/interfaces/prediction/predictionContext.ts +++ b/web/src/engine/src/interfaces/prediction/predictionContext.ts @@ -13,7 +13,7 @@ interface PredictionContextEventMap { /** * Maintains predictive-text state information corresponding to the current context. */ -export default class PredictionContext extends EventEmitter { +export class PredictionContext extends EventEmitter { // Historical note: before 17.0, this code was intertwined with /web/source/osk/banner.ts's // SuggestionBanner class. This class serves as the main implementation of the banner's core logic. diff --git a/web/src/engine/src/keyboard-storage/index.ts b/web/src/engine/src/keyboard-storage/index.ts index 08f44191c07..7f83893de2c 100644 --- a/web/src/engine/src/keyboard-storage/index.ts +++ b/web/src/engine/src/keyboard-storage/index.ts @@ -1,4 +1,3 @@ -// TODO-web-core: remove 'export default' to eliminate more aliases (#15292) export { ErrorStub, type KeyboardAPISpec, diff --git a/web/src/engine/src/keyboard/index.ts b/web/src/engine/src/keyboard/index.ts index 0e8fc53d3e7..3cf2aca3d30 100644 --- a/web/src/engine/src/keyboard/index.ts +++ b/web/src/engine/src/keyboard/index.ts @@ -14,13 +14,13 @@ export { KeyboardAPIPropertyMultilangSpec, KeyboardAPIPropertySpec, KeyboardInternalPropertySpec, - default as KeyboardProperties, + KeyboardProperties, KeyboardFont, MetadataObj as RawKeyboardMetadata, LanguageAPIPropertySpec } from "./keyboards/keyboardProperties.js"; export { ProcessorAction as ProcessorAction } from "./keyboards/processorAction.js"; -export { default as SpacebarText } from "./keyboards/spacebarText.js"; +export { SpacebarText } from "./keyboards/spacebarText.js"; export { StateKeyMap } from "./keyboards/stateKeyMap.js"; export { type Alternate, TextTransform } from "./keyboards/textTransform.js"; export { Transcription } from "./keyboards/transcription.js"; diff --git a/web/src/engine/src/keyboard/keyboards/keyboardLoaderBase.ts b/web/src/engine/src/keyboard/keyboards/keyboardLoaderBase.ts index 2d938e159e4..1229b585cab 100644 --- a/web/src/engine/src/keyboard/keyboards/keyboardLoaderBase.ts +++ b/web/src/engine/src/keyboard/keyboards/keyboardLoaderBase.ts @@ -2,7 +2,7 @@ import { KM_Core, KM_CORE_STATUS } from 'keyman/engine/core-adapter'; import { JSKeyboard } from "./jsKeyboard.js"; import { KMXKeyboard } from './kmxKeyboard.js'; import { KeyboardHarness } from "./keyboardHarness.js"; -import KeyboardProperties from "./keyboardProperties.js"; +import { KeyboardProperties } from "./keyboardProperties.js"; import { KeyboardLoadErrorBuilder, StubBasedErrorBuilder, UriBasedErrorBuilder } from './keyboardLoadError.js'; import { Codes } from '../codes.js'; diff --git a/web/src/engine/src/keyboard/keyboards/keyboardProperties.ts b/web/src/engine/src/keyboard/keyboards/keyboardProperties.ts index 7f1d43282e3..411271e2546 100644 --- a/web/src/engine/src/keyboard/keyboards/keyboardProperties.ts +++ b/web/src/engine/src/keyboard/keyboards/keyboardProperties.ts @@ -1,4 +1,4 @@ -import SpacebarText from './spacebarText.js'; +import { SpacebarText } from './spacebarText.js'; export interface InternalKeyboardFont { family: string; @@ -109,7 +109,7 @@ export type KeyboardAPIPropertyMultilangSpec = { export type MetadataObj = KeyboardInternalPropertySpec | KeyboardAPIPropertySpec | KeyboardAPIPropertyMultilangSpec; -export default class KeyboardProperties implements KeyboardInternalPropertySpec { +export class KeyboardProperties implements KeyboardInternalPropertySpec { KI: string; KN: string; KL: string; diff --git a/web/src/engine/src/keyboard/keyboards/spacebarText.ts b/web/src/engine/src/keyboard/keyboards/spacebarText.ts index d98e7b6462d..823c2550067 100644 --- a/web/src/engine/src/keyboard/keyboards/spacebarText.ts +++ b/web/src/engine/src/keyboard/keyboards/spacebarText.ts @@ -1,9 +1,7 @@ // Compiles completely out if `const enum`, making it unavailable in JS-based unit tests. -enum SpacebarText { +export enum SpacebarText { KEYBOARD = 'keyboard', LANGUAGE = 'language', LANGUAGE_KEYBOARD = 'languageKeyboard', BLANK = 'blank' }; - -export default SpacebarText; \ No newline at end of file diff --git a/web/src/engine/src/main/headless/contextWindow.ts b/web/src/engine/src/main/headless/contextWindow.ts index dd243d3bc06..ed4afbc8fe4 100644 --- a/web/src/engine/src/main/headless/contextWindow.ts +++ b/web/src/engine/src/main/headless/contextWindow.ts @@ -2,7 +2,7 @@ import { LexicalModelTypes } from '@keymanapp/common-types'; import { SyntheticTextStore } from "keyman/engine/keyboard"; import { KMWString } from 'keyman/common/web-utils'; -export default class ContextWindow implements LexicalModelTypes.Context { +export class ContextWindow implements LexicalModelTypes.Context { // Used to limit the range of context replicated for use of keyboard rules within // the engine, as used for fat-finger prep / `Alternate` generation. public static readonly ENGINE_RULE_WINDOW: LexicalModelTypes.Configuration = { diff --git a/web/src/engine/src/main/headless/deviceDetector.ts b/web/src/engine/src/main/headless/deviceDetector.ts index d2a694b693f..f71c6e0f4e6 100644 --- a/web/src/engine/src/main/headless/deviceDetector.ts +++ b/web/src/engine/src/main/headless/deviceDetector.ts @@ -3,7 +3,7 @@ * * Detect the user's device. */ -import StyleConstants from './utils/styleConstants.js'; +import { StyleConstants } from './utils/styleConstants.js'; import { DeviceSpec, Version } from "keyman/common/web-utils"; export class DeviceDetector { diff --git a/web/src/engine/src/main/headless/inputProcessor.ts b/web/src/engine/src/main/headless/inputProcessor.ts index 88168a54f46..c921d309808 100644 --- a/web/src/engine/src/main/headless/inputProcessor.ts +++ b/web/src/engine/src/main/headless/inputProcessor.ts @@ -1,6 +1,6 @@ // Defines a 'polyfill' of sorts for NPM's events module -import ContextWindow from "./contextWindow.js"; +import { ContextWindow } from "./contextWindow.js"; import { LanguageProcessor } from "./languageProcessor.js"; import type { ModelSpec, PathConfiguration } from "keyman/engine/interfaces"; import { globalObject, DeviceSpec, isEmptyTransform } from "keyman/common/web-utils"; @@ -172,9 +172,9 @@ export class InputProcessor { // The default OSK layout for desktop devices does not include nextlayer info, relying on // modifier detection here. // It's the OSK equivalent to doModifierPress on 'desktop' form factors. - if ((formFactor == DeviceSpec.FormFactor.Desktop || !this.activeKeyboard || - (this.activeKeyboard instanceof JSKeyboard && - this.activeKeyboard.usesDesktopLayoutOnDevice(keyEvent.device))) && + if ((formFactor == DeviceSpec.FormFactor.Desktop || !this.activeKeyboard || + (this.activeKeyboard instanceof JSKeyboard && + this.activeKeyboard.usesDesktopLayoutOnDevice(keyEvent.device))) && keyEvent.isSynthetic ) { // If it's a desktop OSK style and this triggers a layer change, diff --git a/web/src/engine/src/main/headless/languageProcessor.ts b/web/src/engine/src/main/headless/languageProcessor.ts index 589bed6b2e0..e258581514f 100644 --- a/web/src/engine/src/main/headless/languageProcessor.ts +++ b/web/src/engine/src/main/headless/languageProcessor.ts @@ -2,7 +2,7 @@ import { EventEmitter } from "eventemitter3"; import { LMLayer, WorkerFactory } from "@keymanapp/lexical-model-layer/web"; import { Transcription, TextStoreLanguageProcessorInterface, SyntheticTextStore } from 'keyman/engine/keyboard'; import { LanguageProcessorEventMap, ModelSpec, StateChangeEnum, ReadySuggestions } from 'keyman/engine/interfaces'; -import ContextWindow from "./contextWindow.js"; +import { ContextWindow } from "./contextWindow.js"; import { TranscriptionCache } from "./transcriptionCache.js"; import { LexicalModelTypes } from '@keymanapp/common-types'; import Capabilities = LexicalModelTypes.Capabilities; diff --git a/web/src/engine/src/main/headless/utils/styleConstants.ts b/web/src/engine/src/main/headless/utils/styleConstants.ts index e948957a741..4e6e0ab12e4 100644 --- a/web/src/engine/src/main/headless/utils/styleConstants.ts +++ b/web/src/engine/src/main/headless/utils/styleConstants.ts @@ -7,7 +7,7 @@ import { DeviceSpec } from "keyman/common/web-utils"; /** * Defines device-level constants used for CSS styling. */ -export default class StyleConstants { +export class StyleConstants { constructor(device: DeviceSpec) { // popupCanvasBackgroundColor if(device.OS == DeviceSpec.OperatingSystem.Android) { diff --git a/web/src/engine/src/osk/banner/bannerView.ts b/web/src/engine/src/osk/banner/bannerView.ts index 7bab35659f1..547ed8d1ebf 100644 --- a/web/src/engine/src/osk/banner/bannerView.ts +++ b/web/src/engine/src/osk/banner/bannerView.ts @@ -3,7 +3,7 @@ import { EventEmitter } from 'eventemitter3'; import { createUnselectableElement } from 'keyman/engine/dom-utils'; import { Banner } from './banner.js'; -import OSKViewComponent from '../components/oskViewComponent.interface.js'; +import { OSKViewComponent } from '../components/oskViewComponent.interface.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; import { BlankBanner } from './blankBanner.js'; diff --git a/web/src/engine/src/osk/buttonClassNames.ts b/web/src/engine/src/osk/buttonClassNames.ts index 4186a9b75c3..8028cfccbd8 100644 --- a/web/src/engine/src/osk/buttonClassNames.ts +++ b/web/src/engine/src/osk/buttonClassNames.ts @@ -2,7 +2,7 @@ /** * Maps 'sp' properties on a touch-layout spec to their corresponding CSS class names. */ -const BUTTON_CLASSES = [ +export const BUTTON_CLASSES = [ 'default', 'shift', 'shift-on', @@ -15,5 +15,3 @@ const BUTTON_CLASSES = [ 'blank', 'hidden' ]; - -export default BUTTON_CLASSES; \ No newline at end of file diff --git a/web/src/engine/src/osk/components/emptyView.ts b/web/src/engine/src/osk/components/emptyView.ts index a07c0422fe6..3cd514130b6 100644 --- a/web/src/engine/src/osk/components/emptyView.ts +++ b/web/src/engine/src/osk/components/emptyView.ts @@ -1,7 +1,7 @@ -import KeyboardView from "./keyboardView.interface.js"; +import { KeyboardView } from "./keyboardView.interface.js"; import { ParsedLengthStyle } from "../lengthStyle.js"; -export default class EmptyView implements KeyboardView { +export class EmptyView implements KeyboardView { readonly element: HTMLDivElement; constructor() { diff --git a/web/src/engine/src/osk/components/helpPageView.ts b/web/src/engine/src/osk/components/helpPageView.ts index 415a58a7f57..f34bb2df512 100644 --- a/web/src/engine/src/osk/components/helpPageView.ts +++ b/web/src/engine/src/osk/components/helpPageView.ts @@ -1,9 +1,9 @@ import { JSKeyboard } from 'keyman/engine/keyboard'; -import KeyboardView from './keyboardView.interface.js'; +import { KeyboardView } from './keyboardView.interface.js'; import { ParsedLengthStyle } from "../lengthStyle.js"; -export default class HelpPageView implements KeyboardView { +export class HelpPageView implements KeyboardView { private readonly kbd: JSKeyboard; public readonly element: HTMLDivElement; diff --git a/web/src/engine/src/osk/components/keyboardView.interface.ts b/web/src/engine/src/osk/components/keyboardView.interface.ts index af4185b6c00..d515004a441 100644 --- a/web/src/engine/src/osk/components/keyboardView.interface.ts +++ b/web/src/engine/src/osk/components/keyboardView.interface.ts @@ -1,11 +1,11 @@ -import OSKViewComponent from "./oskViewComponent.interface.js"; +import { OSKViewComponent } from "./oskViewComponent.interface.js"; /** * An abstract representation for visualizations of the active keyboard within an * OSKManager / OSKView. Most keyboards will default to use of a VisualKeyboard, * though some will use HelpPage for certain form factors. */ -export default interface KeyboardView extends OSKViewComponent { +export interface KeyboardView extends OSKViewComponent { readonly element: HTMLDivElement; /** diff --git a/web/src/engine/src/osk/components/oskViewComponent.interface.ts b/web/src/engine/src/osk/components/oskViewComponent.interface.ts index 10b2d73a32b..df1b6e15287 100644 --- a/web/src/engine/src/osk/components/oskViewComponent.interface.ts +++ b/web/src/engine/src/osk/components/oskViewComponent.interface.ts @@ -1,6 +1,6 @@ import type { ParsedLengthStyle } from "../lengthStyle.js"; -export default interface OSKViewComponent { +export interface OSKViewComponent { readonly element: HTMLElement; readonly layoutHeight: ParsedLengthStyle; refreshLayout(): void; diff --git a/web/src/engine/src/osk/components/resizeBar.ts b/web/src/engine/src/osk/components/resizeBar.ts index 7af6a8c682f..f90cae4763a 100644 --- a/web/src/engine/src/osk/components/resizeBar.ts +++ b/web/src/engine/src/osk/components/resizeBar.ts @@ -1,8 +1,8 @@ import { EventEmitter } from 'eventemitter3'; -import OSKViewComponent from './oskViewComponent.interface.js'; +import { OSKViewComponent } from './oskViewComponent.interface.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; -import MouseDragOperation from '../input/mouseDragOperation.js'; +import { MouseDragOperation } from '../input/mouseDragOperation.js'; import { createUnselectableElement } from 'keyman/engine/dom-utils'; @@ -13,7 +13,7 @@ interface EventMap { showbuild: () => void; } -export default class ResizeBar extends EventEmitter implements OSKViewComponent { +export class ResizeBar extends EventEmitter implements OSKViewComponent { private _element: HTMLDivElement; private _resizeHandle: HTMLDivElement; diff --git a/web/src/engine/src/osk/components/titleBar.ts b/web/src/engine/src/osk/components/titleBar.ts index 7f863a5a832..f7b76bf3437 100644 --- a/web/src/engine/src/osk/components/titleBar.ts +++ b/web/src/engine/src/osk/components/titleBar.ts @@ -2,9 +2,9 @@ import { EventEmitter } from 'eventemitter3'; import { JSKeyboard } from 'keyman/engine/keyboard'; -import OSKViewComponent from './oskViewComponent.interface.js'; +import { OSKViewComponent } from './oskViewComponent.interface.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; -import MouseDragOperation from '../input/mouseDragOperation.js'; +import { MouseDragOperation } from '../input/mouseDragOperation.js'; import { createUnselectableElement } from 'keyman/engine/dom-utils'; @@ -30,7 +30,7 @@ interface EventMap { unpin: () => void } -export default class TitleBar extends EventEmitter implements OSKViewComponent { +export class TitleBar extends EventEmitter implements OSKViewComponent { private _element: HTMLDivElement; private _unpinButton: HTMLDivElement; private _closeButton: HTMLDivElement; diff --git a/web/src/engine/src/osk/config/commonConfiguration.ts b/web/src/engine/src/osk/config/commonConfiguration.ts index b56f1e027b5..71d61217b95 100644 --- a/web/src/engine/src/osk/config/commonConfiguration.ts +++ b/web/src/engine/src/osk/config/commonConfiguration.ts @@ -1,10 +1,10 @@ import { DeviceSpec } from "keyman/common/web-utils"; -import EmbeddedGestureConfig from './embeddedGestureConfig.js'; +import { EmbeddedGestureConfig } from './embeddedGestureConfig.js'; import { OSKResourcePathConfiguration } from "keyman/engine/interfaces"; import { GestureParams } from "../input/gestures/specsForLayout.js"; -export default interface CommonConfiguration { +export interface CommonConfiguration { /** * Metadata for the type of device to emulate and target with the on-screen keyboard. * When not specified, the metadata specified for `hostDevice` will be used by default. diff --git a/web/src/engine/src/osk/config/embeddedGestureConfig.ts b/web/src/engine/src/osk/config/embeddedGestureConfig.ts index 774e66b7c5d..97817661e13 100644 --- a/web/src/engine/src/osk/config/embeddedGestureConfig.ts +++ b/web/src/engine/src/osk/config/embeddedGestureConfig.ts @@ -1,6 +1,6 @@ -import GlobeHint from "../globehint.interface.js"; -import VisualKeyboard from "../visualKeyboard.js"; +import { GlobeHint } from "../globehint.interface.js"; +import { VisualKeyboard } from "../visualKeyboard.js"; -export default interface EmbeddedGestureConfig { +export interface EmbeddedGestureConfig { createGlobeHint?: (vkbd: VisualKeyboard) => GlobeHint; } \ No newline at end of file diff --git a/web/src/engine/src/osk/config/viewConfiguration.ts b/web/src/engine/src/osk/config/viewConfiguration.ts index c0315709c4e..c780080f731 100644 --- a/web/src/engine/src/osk/config/viewConfiguration.ts +++ b/web/src/engine/src/osk/config/viewConfiguration.ts @@ -1,8 +1,8 @@ import { type PredictionContext } from 'keyman/engine/interfaces'; -import type Activator from "../views/activator.js"; -import CommonConfiguration from "./commonConfiguration.js"; +import { type Activator } from "../views/activator.js"; +import { CommonConfiguration } from "./commonConfiguration.js"; -export default interface Configuration extends CommonConfiguration { +export interface ViewConfiguration extends CommonConfiguration { /** * If set, the value returned by the function set here will be used instead of any automatic * width detection functionality. diff --git a/web/src/engine/src/osk/globehint.interface.ts b/web/src/engine/src/osk/globehint.interface.ts index 509ea0ae600..29600d6ca01 100644 --- a/web/src/engine/src/osk/globehint.interface.ts +++ b/web/src/engine/src/osk/globehint.interface.ts @@ -1,6 +1,6 @@ import { type KeyElement } from "./keyElement.js"; -export default interface GlobeHint { +export interface GlobeHint { text: string; state: boolean; element?: HTMLDivElement; diff --git a/web/src/engine/src/osk/index.ts b/web/src/engine/src/osk/index.ts index 447ba91cda1..8337c382a45 100644 --- a/web/src/engine/src/osk/index.ts +++ b/web/src/engine/src/osk/index.ts @@ -1,34 +1,37 @@ export { Codes, DeviceSpec, JSKeyboard, KeyboardProperties, SpacebarText } from 'keyman/engine/keyboard'; -export { default as OSKView, JSKeyboardData } from './views/oskView.js'; -export { default as FloatingOSKView, FloatingOSKViewConfiguration } from './views/floatingOskView.js'; -export { default as AnchoredOSKView } from './views/anchoredOskView.js'; -export { default as InlinedOSKView } from './views/inlinedOskView.js'; +export { OSKView, JSKeyboardData } from './views/oskView.js'; +export { FloatingOSKView, FloatingOSKViewConfiguration } from './views/floatingOskView.js'; +export { AnchoredOSKView } from './views/anchoredOskView.js'; +export { InlinedOSKView } from './views/inlinedOskView.js'; export { type KeyEventResultCallback, type KeyEventHandler, KeyEventSourceInterface } from './views/keyEventSource.interface.js'; export { BannerController } from './banner/bannerController.js'; // Is referenced by at least one desktop UI module. export { FloatingOSKCookie as FloatingOSKViewCookie } from './views/floatingOskCookie.js'; -export { default as VisualKeyboard } from './visualKeyboard.js'; -export { type default as ViewConfiguration } from './config/viewConfiguration.js'; +export { VisualKeyboard } from './visualKeyboard.js'; +export { type ViewConfiguration } from './config/viewConfiguration.js'; export { type KeyElement } from './keyElement.js'; -export { type default as OSKBaseKey } from './keyboard-layout/oskBaseKey.js'; -export { type default as GlobeHint } from './globehint.interface.js'; -export { type default as KeyTip } from './keytip.interface.js'; -export { type default as EmbeddedGestureConfig } from './config/embeddedGestureConfig.js'; +export { type OSKBaseKey } from './keyboard-layout/oskBaseKey.js'; +export { type GlobeHint } from './globehint.interface.js'; +export { type KeyTip } from './keytip.interface.js'; +export { type EmbeddedGestureConfig } from './config/embeddedGestureConfig.js'; export { getViewportScale } from './screenUtils.js'; -export { default as Activator, StaticActivator } from './views/activator.js'; -export { default as SimpleActivator } from './views/simpleActivator.js'; -export { default as TwoStateActivator } from './views/twoStateActivator.js'; +export { Activator, StaticActivator } from './views/activator.js'; +export { SimpleActivator } from './views/simpleActivator.js'; +export { TwoStateActivator } from './views/twoStateActivator.js'; export { ParsedLengthStyle } from './lengthStyle.js'; export { gestureSetForLayout, DEFAULT_GESTURE_PARAMS } from './input/gestures/specsForLayout.js' export { PredictionContext } from 'keyman/engine/interfaces'; -export * from './corrections.js'; -export * from './correctionLayout.js'; +export { keyTouchDistances, distributionFromDistanceMaps } from './corrections.js'; +export { + CorrectionLayoutEntry, CorrectionLayout, CorrectiveBaseKeyLayout, + correctionKeyFilter, buildCorrectiveLayout +} from './correctionLayout.js'; // TODO-web-core: use a unitTestEndpoints pattern here (#15292) export * as testIndex from './test-index.js'; diff --git a/web/src/engine/src/osk/input/gestures/browser/flick.ts b/web/src/engine/src/osk/input/gestures/browser/flick.ts index d0e75f5203b..c9633af46ca 100644 --- a/web/src/engine/src/osk/input/gestures/browser/flick.ts +++ b/web/src/engine/src/osk/input/gestures/browser/flick.ts @@ -1,5 +1,5 @@ import { type KeyElement } from '../../../keyElement.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { ActiveKey, ActiveKeyBase, ActiveSubKey, KeyDistribution, KeyEvent } from 'keyman/engine/keyboard'; import { ConfigChangeClosure, CumulativePathStats, GestureRecognizerConfiguration, GestureSequence, GestureSource, GestureSourceSubview, InputSample, RecognitionZoneSource } from 'keyman/engine/gesture-processor'; @@ -85,7 +85,7 @@ export const MAX_TOLERANCE_ANGLE_SKEW = Math.PI / 3; * Represents a flick gesture's implementation within KeymanWeb, including * its predictive-text correction aspects. */ -export default class Flick implements GestureHandler { +export class Flick implements GestureHandler { readonly directlyEmitsKeys = true; private readonly sequence: GestureSequence; diff --git a/web/src/engine/src/osk/input/gestures/browser/modipress.ts b/web/src/engine/src/osk/input/gestures/browser/modipress.ts index 94e86848de2..6ac6b5f7efd 100644 --- a/web/src/engine/src/osk/input/gestures/browser/modipress.ts +++ b/web/src/engine/src/osk/input/gestures/browser/modipress.ts @@ -1,5 +1,5 @@ import { type KeyElement } from '../../../keyElement.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { KeyDistribution, ActiveKeyBase } from 'keyman/engine/keyboard'; import { GestureSequence } from 'keyman/engine/gesture-processor'; @@ -11,7 +11,7 @@ import { GestureHandler } from '../gestureHandler.js'; * * This involves "locking" the current layer in place until the modipress is complete. */ -export default class Modipress implements GestureHandler { +export class Modipress implements GestureHandler { readonly directlyEmitsKeys = true; private completionCallback: () => void; diff --git a/web/src/engine/src/osk/input/gestures/browser/multitap.ts b/web/src/engine/src/osk/input/gestures/browser/multitap.ts index 9de399d3372..d790cbb6006 100644 --- a/web/src/engine/src/osk/input/gestures/browser/multitap.ts +++ b/web/src/engine/src/osk/input/gestures/browser/multitap.ts @@ -1,11 +1,11 @@ import { type KeyElement } from '../../../keyElement.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { ActiveSubKey, ActiveKey, KeyDistribution, ActiveKeyBase } from 'keyman/engine/keyboard'; import { GestureSequence, GestureStageReport } from 'keyman/engine/gesture-processor'; import { GestureHandler } from '../gestureHandler.js'; import { distributionFromDistanceMaps } from '../../../corrections.js'; -import Modipress from './modipress.js'; +import { Modipress } from './modipress.js'; import { keySupportsModipress } from '../specsForLayout.js'; import { GesturePreviewHost } from '../../../keyboard-layout/gesturePreviewHost.js'; import { correctionKeyFilter } from '../../../correctionLayout.js'; @@ -18,7 +18,7 @@ import { correctionKeyFilter } from '../../../correctionLayout.js'; * * UI feedback regarding the state of the ongoing multitap, as appropriate * * Proper selection of the appropriate multitap key for subsequent taps. */ -export default class Multitap implements GestureHandler { +export class Multitap implements GestureHandler { readonly directlyEmitsKeys = true; public readonly baseKey: KeyElement; diff --git a/web/src/engine/src/osk/input/gestures/browser/oskSubKey.ts b/web/src/engine/src/osk/input/gestures/browser/oskSubKey.ts index 13af906658d..344f51f706e 100644 --- a/web/src/engine/src/osk/input/gestures/browser/oskSubKey.ts +++ b/web/src/engine/src/osk/input/gestures/browser/oskSubKey.ts @@ -1,12 +1,12 @@ import { ActiveSubKey } from 'keyman/engine/keyboard'; -import OSKKey from '../../../keyboard-layout/oskKey.js'; +import { OSKKey } from '../../../keyboard-layout/oskKey.js'; import { KeyData, KeyElement, link } from '../../../keyElement.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; // Typing is to ensure that the keys specified below actually are on the type... // and to gain Intellisense if more need to be added. -export default class OSKSubKey extends OSKKey { +export class OSKSubKey extends OSKKey { constructor(spec: ActiveSubKey, layer: string) { if(typeof(layer) != 'string' || layer == '') { throw "The 'layer' parameter for subkey construction must be properly defined."; diff --git a/web/src/engine/src/osk/input/gestures/browser/keytip.ts b/web/src/engine/src/osk/input/gestures/browser/phoneKeytip.ts similarity index 97% rename from web/src/engine/src/osk/input/gestures/browser/keytip.ts rename to web/src/engine/src/osk/input/gestures/browser/phoneKeytip.ts index 28dd93d11f2..a92feb699a0 100644 --- a/web/src/engine/src/osk/input/gestures/browser/keytip.ts +++ b/web/src/engine/src/osk/input/gestures/browser/phoneKeytip.ts @@ -1,7 +1,7 @@ -import OSKBaseKey from '../../../keyboard-layout/oskBaseKey.js'; +import { OSKBaseKey } from '../../../keyboard-layout/oskBaseKey.js'; import { KeyElement } from '../../../keyElement.js'; -import KeyTipInterface from '../../../keytip.interface.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { KeyTip } from '../../../keytip.interface.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { GesturePreviewHost } from '../../../keyboard-layout/gesturePreviewHost.js'; import { ParsedLengthStyle } from '../../../lengthStyle.js'; @@ -10,7 +10,7 @@ const DEFAULT_TIP_ORIENTATION: PhoneKeyTipOrientation = 'top'; export type PhoneKeyTipOrientation = 'top' | 'bottom'; -export default class KeyTip implements KeyTipInterface { +export class PhoneKeyTip implements KeyTip { public readonly element: HTMLDivElement; public key: KeyElement; public state: boolean = false; diff --git a/web/src/engine/src/osk/input/gestures/browser/subkeyPopup.ts b/web/src/engine/src/osk/input/gestures/browser/subkeyPopup.ts index 4c9ae5101fc..dbeae665cf2 100644 --- a/web/src/engine/src/osk/input/gestures/browser/subkeyPopup.ts +++ b/web/src/engine/src/osk/input/gestures/browser/subkeyPopup.ts @@ -1,7 +1,7 @@ -import OSKSubKey from './oskSubKey.js'; +import { OSKSubKey } from './oskSubKey.js'; import { type KeyElement } from '../../../keyElement.js'; -import OSKBaseKey from '../../../keyboard-layout/oskBaseKey.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { OSKBaseKey } from '../../../keyboard-layout/oskBaseKey.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { DeviceSpec, ActiveSubKey, KeyDistribution, ActiveKeyBase } from 'keyman/engine/keyboard'; import { ConfigChangeClosure, GestureRecognizerConfiguration, GestureSequence, PaddedZoneSource, RecognitionZoneSource } from 'keyman/engine/gesture-processor'; @@ -51,7 +51,7 @@ const CALLOUT_BASE_HEIGHT = 6 + SUBKEY_MENU_VERT_OFFSET; * As selection of the subkey occurs after the subkey popup is * displayed, selection of the subkey is inherently asynchronous. */ -export default class SubkeyPopup implements GestureHandler { +export class SubkeyPopup implements GestureHandler { readonly directlyEmitsKeys = true; public readonly element: HTMLDivElement; diff --git a/web/src/engine/src/osk/input/gestures/browser/tabletPreview.ts b/web/src/engine/src/osk/input/gestures/browser/tabletPreview.ts index e2eb4394d9b..0438fa85f72 100644 --- a/web/src/engine/src/osk/input/gestures/browser/tabletPreview.ts +++ b/web/src/engine/src/osk/input/gestures/browser/tabletPreview.ts @@ -1,13 +1,13 @@ import { KeyElement } from '../../../keyElement.js'; -import KeyTipInterface from '../../../keytip.interface.js'; -import VisualKeyboard from '../../../visualKeyboard.js'; +import { KeyTip } from '../../../keytip.interface.js'; +import { VisualKeyboard } from '../../../visualKeyboard.js'; import { GesturePreviewHost } from '../../../keyboard-layout/gesturePreviewHost.js'; const BASE_CLASS = 'kmw-keypreview'; const OVERLAY_CLASS = 'kmw-preview-overlay'; const BASE_ID = 'kmw-keytip'; -export class TabletKeyTip implements KeyTipInterface { +export class TabletKeyTip implements KeyTip { public readonly element: HTMLDivElement; public key: KeyElement; public state: boolean = false; diff --git a/web/src/engine/src/osk/input/mouseDragOperation.ts b/web/src/engine/src/osk/input/mouseDragOperation.ts index 158fd26821f..c14f9bfa935 100644 --- a/web/src/engine/src/osk/input/mouseDragOperation.ts +++ b/web/src/engine/src/osk/input/mouseDragOperation.ts @@ -78,7 +78,7 @@ class MouseStartSnapshot { } } -export default abstract class MouseDragOperation { +export abstract class MouseDragOperation { private _enabled: boolean; private _startCoord: InputEventCoordinate; private _mouseStartSnapshot: MouseStartSnapshot; diff --git a/web/src/engine/src/osk/keyElement.ts b/web/src/engine/src/osk/keyElement.ts index e62ea436c3d..051d700e530 100644 --- a/web/src/engine/src/osk/keyElement.ts +++ b/web/src/engine/src/osk/keyElement.ts @@ -1,5 +1,5 @@ import { ActiveSubKey } from 'keyman/engine/keyboard'; -import OSKKey from "./keyboard-layout/oskKey.js"; +import { OSKKey } from "./keyboard-layout/oskKey.js"; export class KeyData { ['key']: OSKKey; diff --git a/web/src/engine/src/osk/keyboard-layout/gesturePreviewHost.ts b/web/src/engine/src/osk/keyboard-layout/gesturePreviewHost.ts index 32a30c3f5d7..a861a04d239 100644 --- a/web/src/engine/src/osk/keyboard-layout/gesturePreviewHost.ts +++ b/web/src/engine/src/osk/keyboard-layout/gesturePreviewHost.ts @@ -3,8 +3,8 @@ import { EventEmitter } from "eventemitter3"; import { KeyElement } from "../keyElement.js"; import { FlickNameCoordMap, OrderedFlickDirections } from "../input/gestures/browser/flick.js"; -import { PhoneKeyTipOrientation } from "../input/gestures/browser/keytip.js"; -import { default as VisualKeyboard } from "../visualKeyboard.js"; +import { PhoneKeyTipOrientation } from "../input/gestures/browser/phoneKeytip.js"; +import { VisualKeyboard } from "../visualKeyboard.js"; import { renameSpecialKey } from "./oskKey.js"; /**With edge lengths of 1, to keep flick-text invisible at the start, the diff --git a/web/src/engine/src/osk/keyboard-layout/oskBaseKey.ts b/web/src/engine/src/osk/keyboard-layout/oskBaseKey.ts index e0b8f794694..738703dae6b 100644 --- a/web/src/engine/src/osk/keyboard-layout/oskBaseKey.ts +++ b/web/src/engine/src/osk/keyboard-layout/oskBaseKey.ts @@ -1,13 +1,13 @@ import { ActiveKey, Codes } from 'keyman/engine/keyboard'; -import OSKKey, { KeyLayoutParams, renameSpecialKey } from './oskKey.js'; +import { OSKKey, KeyLayoutParams, renameSpecialKey } from './oskKey.js'; import { KeyData, KeyElement, link } from '../keyElement.js'; -import OSKRow from './oskRow.js'; -import VisualKeyboard from '../visualKeyboard.js'; +import { OSKRow } from './oskRow.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; import { GesturePreviewHost } from './gesturePreviewHost.js'; -export default class OSKBaseKey extends OSKKey { +export class OSKBaseKey extends OSKKey { private capLabel: HTMLDivElement; private previewHost: GesturePreviewHost; private preview: HTMLDivElement; diff --git a/web/src/engine/src/osk/keyboard-layout/oskKey.ts b/web/src/engine/src/osk/keyboard-layout/oskKey.ts index 55262f9a5fc..fab314c9749 100644 --- a/web/src/engine/src/osk/keyboard-layout/oskKey.ts +++ b/web/src/engine/src/osk/keyboard-layout/oskKey.ts @@ -1,11 +1,11 @@ import { ActiveKey, ActiveSubKey, ButtonClass, ButtonClasses, DeviceSpec } from 'keyman/engine/keyboard'; // At present, we don't use @keymanapp/keyman. Just `keyman`. (Refer to /web/package.json.) -import specialChars from '../specialCharacters.js'; -import buttonClassNames from '../buttonClassNames.js'; +import { specialCharacters as specialChars } from '../specialCharacters.js'; // TODO: eliminate 'as specialChars' +import { BUTTON_CLASSES as buttonClassNames } from '../buttonClassNames.js'; // TODO: eliminate 'as buttonClasNames' import { KeyElement } from '../keyElement.js'; -import VisualKeyboard from '../visualKeyboard.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; import { getTextMetrics } from './getTextMetrics.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; @@ -50,7 +50,7 @@ export function renameSpecialKey(oldText: string, vkbd: VisualKeyboard): string oldText; } -export default abstract class OSKKey { +export abstract class OSKKey { // Only set here to act as an alias for code built against legacy versions. static readonly specialCharacters = specialChars; diff --git a/web/src/engine/src/osk/keyboard-layout/oskLayer.ts b/web/src/engine/src/osk/keyboard-layout/oskLayer.ts index 248e9a197e0..be5692e54aa 100644 --- a/web/src/engine/src/osk/keyboard-layout/oskLayer.ts +++ b/web/src/engine/src/osk/keyboard-layout/oskLayer.ts @@ -1,8 +1,8 @@ import { ActiveLayer, ActiveLayout } from 'keyman/engine/keyboard'; -import OSKRow from './oskRow.js'; -import OSKBaseKey from './oskBaseKey.js'; -import VisualKeyboard from '../visualKeyboard.js'; +import { OSKRow } from './oskRow.js'; +import { OSKBaseKey } from './oskBaseKey.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; export interface LayerLayoutParams { @@ -14,7 +14,7 @@ export interface LayerLayoutParams { layoutFontSize: ParsedLengthStyle; spacebarText: string; } -export default class OSKLayer { +export class OSKLayer { public readonly element: HTMLDivElement; public readonly rows: OSKRow[]; public readonly spec: ActiveLayer; diff --git a/web/src/engine/src/osk/keyboard-layout/oskLayerGroup.ts b/web/src/engine/src/osk/keyboard-layout/oskLayerGroup.ts index dc97bc0cba3..55412074c2c 100644 --- a/web/src/engine/src/osk/keyboard-layout/oskLayerGroup.ts +++ b/web/src/engine/src/osk/keyboard-layout/oskLayerGroup.ts @@ -3,13 +3,13 @@ import { type DeviceSpec, JSKeyboard, ActiveLayout, ButtonClasses } from 'keyman import { InputSample } from 'keyman/engine/gesture-processor'; import { KeyElement } from '../keyElement.js'; -import OSKLayer, { LayerLayoutParams } from './oskLayer.js'; -import VisualKeyboard from '../visualKeyboard.js'; -import OSKBaseKey from './oskBaseKey.js'; +import { OSKLayer, LayerLayoutParams } from './oskLayer.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; +import { OSKBaseKey } from './oskBaseKey.js'; const NEAREST_KEY_TOUCH_MARGIN_PERCENT = 0.06; -export default class OSKLayerGroup { +export class OSKLayerGroup { public readonly element: HTMLDivElement; private readonly _layers: {[layerID: string]: OSKLayer} = {}; public readonly spec: ActiveLayout; diff --git a/web/src/engine/src/osk/keyboard-layout/oskRow.ts b/web/src/engine/src/osk/keyboard-layout/oskRow.ts index 46893f51cec..0a883432002 100644 --- a/web/src/engine/src/osk/keyboard-layout/oskRow.ts +++ b/web/src/engine/src/osk/keyboard-layout/oskRow.ts @@ -1,9 +1,9 @@ import { ActiveKey, ActiveLayer, ActiveRow } from 'keyman/engine/keyboard'; -import OSKBaseKey from './oskBaseKey.js'; +import { OSKBaseKey } from './oskBaseKey.js'; import { ParsedLengthStyle } from '../lengthStyle.js'; -import VisualKeyboard from '../visualKeyboard.js'; -import OSKKey, { KeyLayoutParams } from './oskKey.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; +import { OSKKey, KeyLayoutParams } from './oskKey.js'; import { LayerLayoutParams } from './oskLayer.js'; /* @@ -16,7 +16,7 @@ export const KEY_BTN_Y_PAD_RATIO = 0.15; /** * Models one row of one layer of the OSK (`VisualKeyboard`) for a keyboard. */ -export default class OSKRow { +export class OSKRow { public readonly element: HTMLDivElement; public readonly keys: OSKBaseKey[]; public readonly heightFraction: number; diff --git a/web/src/engine/src/osk/keytip.interface.ts b/web/src/engine/src/osk/keytip.interface.ts index 7215b89149c..fd1491eec9a 100644 --- a/web/src/engine/src/osk/keytip.interface.ts +++ b/web/src/engine/src/osk/keytip.interface.ts @@ -1,7 +1,7 @@ import { GesturePreviewHost } from "./keyboard-layout/gesturePreviewHost.js"; import { KeyElement } from "./keyElement.js"; -export default interface KeyTip { +export interface KeyTip { key: KeyElement; state: boolean; element?: HTMLDivElement; diff --git a/web/src/engine/src/osk/specialCharacters.ts b/web/src/engine/src/osk/specialCharacters.ts index c13e63715e5..d6bfaedd291 100644 --- a/web/src/engine/src/osk/specialCharacters.ts +++ b/web/src/engine/src/osk/specialCharacters.ts @@ -1,6 +1,6 @@ // Defines the PUA code mapping for the various 'special' modifier/control/non-printing keys on keyboards. // `specialCharacters` must be kept in sync with the same variable in constants.js. See also CompileKeymanWeb.pas: CSpecialText10 -const specialCharacters = { +export const specialCharacters = { '*Shift*': 8, '*Enter*': 5, '*Tab*': 6, @@ -68,5 +68,3 @@ const specialCharacters = { // TODO: Skipping size references }; - -export default specialCharacters; \ No newline at end of file diff --git a/web/src/engine/src/osk/test-index.ts b/web/src/engine/src/osk/test-index.ts index 6cdf4d7ea59..c54adc93813 100644 --- a/web/src/engine/src/osk/test-index.ts +++ b/web/src/engine/src/osk/test-index.ts @@ -1,4 +1,4 @@ -export { default as OSKBaseKey } from './keyboard-layout/oskBaseKey.js'; -export { default as OSKRow } from './keyboard-layout/oskRow.js'; -export { default as SubkeyPopup } from './input/gestures/browser/subkeyPopup.js' +export { OSKBaseKey } from './keyboard-layout/oskBaseKey.js'; +export { OSKRow } from './keyboard-layout/oskRow.js'; +export { SubkeyPopup } from './input/gestures/browser/subkeyPopup.js' export { link } from './keyElement.js' diff --git a/web/src/engine/src/osk/views/activator.ts b/web/src/engine/src/osk/views/activator.ts index d1a53e8badb..877c2c806dd 100644 --- a/web/src/engine/src/osk/views/activator.ts +++ b/web/src/engine/src/osk/views/activator.ts @@ -8,7 +8,7 @@ interface EventMap { * Used to encapsulate activation logic for the on-screen keyboadr, conditionally activating * and deactivating it based on specified conditions. */ -export default abstract class Activator extends EventEmitter { +export abstract class Activator extends EventEmitter { /** * For certain sub-types, this may be set to `false` to "turn activation off", putting * the `Activator` in a state that ignores changes to any other conditions. diff --git a/web/src/engine/src/osk/views/anchoredOskView.ts b/web/src/engine/src/osk/views/anchoredOskView.ts index 327a132f041..62989c249fd 100644 --- a/web/src/engine/src/osk/views/anchoredOskView.ts +++ b/web/src/engine/src/osk/views/anchoredOskView.ts @@ -1,18 +1,18 @@ import { DeviceSpec } from 'keyman/engine/keyboard'; import { landscapeView } from 'keyman/engine/dom-utils'; -import OSKView, { OSKPos, OSKRect } from './oskView.js'; +import { OSKView, OSKPos, OSKRect } from './oskView.js'; import { getViewportScale } from '../screenUtils.js'; -import Configuration from '../config/viewConfiguration.js'; +import { ViewConfiguration } from '../config/viewConfiguration.js'; import { StaticActivator } from './activator.js'; -import TwoStateActivator from './twoStateActivator.js'; +import { TwoStateActivator } from './twoStateActivator.js'; /*** KeymanWeb 10.0 Copyright 2017 SIL International ***/ -export default class AnchoredOSKView extends OSKView { +export class AnchoredOSKView extends OSKView { // OSK positioning fields x: number; @@ -20,7 +20,7 @@ export default class AnchoredOSKView extends OSKView { private isResizing: boolean = false; - public constructor(config: Configuration) { + public constructor(config: ViewConfiguration) { if(config.isEmbedded) { config.activator = config.activator || new StaticActivator(); } else { diff --git a/web/src/engine/src/osk/views/floatingOskView.ts b/web/src/engine/src/osk/views/floatingOskView.ts index 12b396ace17..83f1209e753 100644 --- a/web/src/engine/src/osk/views/floatingOskView.ts +++ b/web/src/engine/src/osk/views/floatingOskView.ts @@ -2,14 +2,14 @@ import { DeviceSpec, ManagedPromise, Version } from 'keyman/engine/keyboard'; import { getAbsoluteX, getAbsoluteY, landscapeView } from 'keyman/engine/dom-utils'; import { EmitterListenerSpy } from 'keyman/engine/events'; -import OSKView, { EventMap, type LegacyOSKEventMap, OSKPos, OSKRect } from './oskView.js'; -import TitleBar from '../components/titleBar.js'; -import ResizeBar from '../components/resizeBar.js'; +import { OSKView, EventMap, type LegacyOSKEventMap, OSKPos, OSKRect } from './oskView.js'; +import { TitleBar } from '../components/titleBar.js'; +import { ResizeBar } from '../components/resizeBar.js'; -import MouseDragOperation from '../input/mouseDragOperation.js'; +import { MouseDragOperation } from '../input/mouseDragOperation.js'; import { getViewportScale } from '../screenUtils.js'; -import Configuration from '../config/viewConfiguration.js'; -import TwoStateActivator from './twoStateActivator.js'; +import { ViewConfiguration } from '../config/viewConfiguration.js'; +import { TwoStateActivator } from './twoStateActivator.js'; import { FloatingOSKCookie, FloatingOSKCookieSerializer } from './floatingOskCookie.js'; /*** @@ -17,11 +17,11 @@ import { FloatingOSKCookie, FloatingOSKCookieSerializer } from './floatingOskCoo Copyright 2017 SIL International ***/ -export interface FloatingOSKViewConfiguration extends Configuration { +export interface FloatingOSKViewConfiguration extends ViewConfiguration { activator?: TwoStateActivator; } -export default class FloatingOSKView extends OSKView { +export class FloatingOSKView extends OSKView { // OSK positioning fields userPositioned: boolean = false; specifiedPosition: boolean = false; diff --git a/web/src/engine/src/osk/views/inlinedOskView.ts b/web/src/engine/src/osk/views/inlinedOskView.ts index 25eecdb4a17..aa10013b812 100644 --- a/web/src/engine/src/osk/views/inlinedOskView.ts +++ b/web/src/engine/src/osk/views/inlinedOskView.ts @@ -1,9 +1,9 @@ import { DeviceSpec } from 'keyman/engine/keyboard'; -import OSKView, { OSKPos, OSKRect } from './oskView.js'; -import VisualKeyboard from '../visualKeyboard.js'; -import Configuration from '../config/viewConfiguration.js'; -import SimpleActivator from './simpleActivator.js'; +import { OSKView, OSKPos, OSKRect } from './oskView.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; +import { ViewConfiguration } from '../config/viewConfiguration.js'; +import { SimpleActivator } from './simpleActivator.js'; /* * Keyman is copyright (c) SIL International. MIT License. @@ -14,8 +14,8 @@ import SimpleActivator from './simpleActivator.js'; * insertion into the DOM. Rather than "floating" over the page, this version is inlined * as part of the host page's layout. */ -export default class InlinedOSKView extends OSKView { - public constructor(config: Configuration) { +export class InlinedOSKView extends OSKView { + public constructor(config: ViewConfiguration) { config.activator = config.activator || new SimpleActivator(); super(config); } diff --git a/web/src/engine/src/osk/views/oskView.ts b/web/src/engine/src/osk/views/oskView.ts index 6c08892f62f..451a2854e43 100644 --- a/web/src/engine/src/osk/views/oskView.ts +++ b/web/src/engine/src/osk/views/oskView.ts @@ -2,11 +2,11 @@ import { EventEmitter } from 'eventemitter3'; import { BannerView } from '../banner/bannerView.js'; import { BannerController } from '../banner/bannerController.js'; -import OSKViewComponent from '../components/oskViewComponent.interface.js'; -import EmptyView from '../components/emptyView.js'; -import HelpPageView from '../components/helpPageView.js'; -import KeyboardView from '../components/keyboardView.interface.js'; -import VisualKeyboard from '../visualKeyboard.js'; +import { OSKViewComponent } from '../components/oskViewComponent.interface.js'; +import { EmptyView } from '../components/emptyView.js'; +import { HelpPageView } from '../components/helpPageView.js'; +import { KeyboardView } from '../components/keyboardView.interface.js'; +import { VisualKeyboard } from '../visualKeyboard.js'; import { LengthStyle, ParsedLengthStyle } from '../lengthStyle.js'; import { type KeyElement } from '../keyElement.js'; @@ -22,9 +22,9 @@ import { import { createUnselectableElement, getAbsoluteX, getAbsoluteY, StylesheetManager } from 'keyman/engine/dom-utils'; import { EventListener, LegacyEventEmitter } from 'keyman/engine/events'; -import Configuration from '../config/viewConfiguration.js'; -import Activator, { StaticActivator } from './activator.js'; -import TouchEventPromiseMap from './touchEventPromiseMap.js'; +import { ViewConfiguration } from '../config/viewConfiguration.js'; +import { Activator, StaticActivator } from './activator.js'; +import { TouchEventPromiseMap } from './touchEventPromiseMap.js'; import { KeyEventHandler, KeyEventSourceInterface } from './keyEventSource.interface.js'; import { DEFAULT_GESTURE_PARAMS, GestureParams } from '../input/gestures/specsForLayout.js'; @@ -125,7 +125,7 @@ export interface EventMap { pointerinteraction: (promise: Promise) => void; } -export function getResourcePath(config: Configuration) { +export function getResourcePath(config: ViewConfiguration) { let resourcePathExt = 'osk/'; if(config.isEmbedded) { resourcePathExt = ''; @@ -133,7 +133,7 @@ export function getResourcePath(config: Configuration) { return `${config.pathConfig.resources}/${resourcePathExt}` } -export default abstract class OSKView +export abstract class OSKView extends EventEmitter implements MinimalCodesInterface, KeyEventSourceInterface { _Box: HTMLDivElement; @@ -167,7 +167,7 @@ export default abstract class OSKView private kbdStyleSheetManager: StylesheetManager; private uiStyleSheetManager: StylesheetManager; - private config: Configuration; + private config: ViewConfiguration; private deferLayout: boolean; private _boxBaseTouchStart: (e: TouchEvent) => boolean; @@ -226,7 +226,7 @@ export default abstract class OSKView static readonly STYLESHEET_FILES = ['kmwosk.css', 'globe-hint.css']; - constructor(configuration: Configuration) { + constructor(configuration: ViewConfiguration) { super(); // Clone the config; do not allow object references to be altered later. @@ -278,7 +278,7 @@ export default abstract class OSKView this._Box.style.display = 'none'; } - protected get configuration(): Configuration { + protected get configuration(): ViewConfiguration { return this.config; } diff --git a/web/src/engine/src/osk/views/simpleActivator.ts b/web/src/engine/src/osk/views/simpleActivator.ts index 17bad3c9dbb..516b3d16d5f 100644 --- a/web/src/engine/src/osk/views/simpleActivator.ts +++ b/web/src/engine/src/osk/views/simpleActivator.ts @@ -1,6 +1,6 @@ -import Activator from './activator.js'; +import { Activator } from './activator.js'; -export default class SimpleActivator extends Activator { +export class SimpleActivator extends Activator { private flag: boolean = true; get enabled(): boolean { diff --git a/web/src/engine/src/osk/views/touchEventPromiseMap.ts b/web/src/engine/src/osk/views/touchEventPromiseMap.ts index 939f3668bb4..1763e601f40 100644 --- a/web/src/engine/src/osk/views/touchEventPromiseMap.ts +++ b/web/src/engine/src/osk/views/touchEventPromiseMap.ts @@ -1,6 +1,6 @@ import { ManagedPromise } from "keyman/common/web-utils"; -export default class TouchEventPromiseMap { +export class TouchEventPromiseMap { private map: Map> = new Map(); // Used to diff --git a/web/src/engine/src/osk/views/twoStateActivator.ts b/web/src/engine/src/osk/views/twoStateActivator.ts index b5895158ad2..786952b6688 100644 --- a/web/src/engine/src/osk/views/twoStateActivator.ts +++ b/web/src/engine/src/osk/views/twoStateActivator.ts @@ -1,10 +1,10 @@ -import Activator from './activator.js'; +import { Activator } from './activator.js'; interface TriggerEventMap { triggerchange: (trigger: Type) => void; } -export default class TwoStateActivator extends Activator> { +export class TwoStateActivator extends Activator> { private _enabled: boolean = true; private actValue: Type = null; diff --git a/web/src/engine/src/osk/visualKeyboard.ts b/web/src/engine/src/osk/visualKeyboard.ts index ebcc7127f5d..f1a055ba690 100644 --- a/web/src/engine/src/osk/visualKeyboard.ts +++ b/web/src/engine/src/osk/visualKeyboard.ts @@ -33,31 +33,31 @@ import { createStyleSheet, StylesheetManager } from 'keyman/engine/dom-utils'; import { KeyEventHandler, KeyEventResultCallback } from './views/keyEventSource.interface.js'; -import GlobeHint from './globehint.interface.js'; -import KeyboardView from './components/keyboardView.interface.js'; +import { GlobeHint } from './globehint.interface.js'; +import { KeyboardView } from './components/keyboardView.interface.js'; import { type KeyElement } from './keyElement.js'; -import KeyTip from './keytip.interface.js'; -import OSKKey from './keyboard-layout/oskKey.js'; -import OSKLayer, { LayerLayoutParams } from './keyboard-layout/oskLayer.js'; -import OSKLayerGroup from './keyboard-layout/oskLayerGroup.js'; -import OSKView from './views/oskView.js'; +import { KeyTip } from './keytip.interface.js'; +import { OSKKey } from './keyboard-layout/oskKey.js'; +import { OSKLayer, LayerLayoutParams } from './keyboard-layout/oskLayer.js'; +import { OSKLayerGroup } from './keyboard-layout/oskLayerGroup.js'; +import { OSKView } from './views/oskView.js'; import { ParsedLengthStyle } from './lengthStyle.js'; import { defaultFontSize } from './fontSizeUtils.js'; -import PhoneKeyTip from './input/gestures/browser/keytip.js'; +import { PhoneKeyTip } from './input/gestures/browser/phoneKeytip.js'; import { TabletKeyTip } from './input/gestures/browser/tabletPreview.js'; -import CommonConfiguration from './config/commonConfiguration.js'; +import { CommonConfiguration } from './config/commonConfiguration.js'; import { DEFAULT_GESTURE_PARAMS, GestureParams, gestureSetForLayout } from './input/gestures/specsForLayout.js'; import { getViewportScale } from './screenUtils.js'; import { HeldRepeater } from './input/gestures/heldRepeater.js'; -import SubkeyPopup from './input/gestures/browser/subkeyPopup.js'; -import Multitap from './input/gestures/browser/multitap.js'; +import { SubkeyPopup } from './input/gestures/browser/subkeyPopup.js'; +import { Multitap } from './input/gestures/browser/multitap.js'; import { GestureHandler } from './input/gestures/gestureHandler.js'; -import Modipress from './input/gestures/browser/modipress.js'; -import Flick from './input/gestures/browser/flick.js'; +import { Modipress } from './input/gestures/browser/modipress.js'; +import { Flick } from './input/gestures/browser/flick.js'; import { GesturePreviewHost } from './keyboard-layout/gesturePreviewHost.js'; -import OSKBaseKey from './keyboard-layout/oskBaseKey.js'; +import { OSKBaseKey } from './keyboard-layout/oskBaseKey.js'; import { OSKResourcePathConfiguration } from 'keyman/engine/interfaces'; import KEYMAN_VERSION from '@keymanapp/keyman-version'; @@ -139,7 +139,7 @@ interface EventMap { } // #region VisualKeyboard -export default class VisualKeyboard extends EventEmitter implements KeyboardView { +export class VisualKeyboard extends EventEmitter implements KeyboardView { /** * The gesture-engine used to support user interaction with this keyboard. * diff --git a/web/src/tools/testing/recorder-core/src/index.ts b/web/src/tools/testing/recorder-core/src/index.ts index c1d9c44978f..e1d3d913ce2 100644 --- a/web/src/tools/testing/recorder-core/src/index.ts +++ b/web/src/tools/testing/recorder-core/src/index.ts @@ -1,9 +1,9 @@ import { KeyDistribution, KeyEvent, type TextStore, SyntheticTextStore } from "keyman/engine/keyboard"; -import Proctor from "./proctor.js"; +import { Proctor } from "./proctor.js"; -export { default as Proctor } from "./proctor.js"; -export { default as NodeProctor } from "./nodeProctor.js"; +export { Proctor } from "./proctor.js"; +export { NodeProctor } from "./nodeProctor.js"; import * as utils from "keyman/common/web-utils"; diff --git a/web/src/tools/testing/recorder-core/src/nodeProctor.ts b/web/src/tools/testing/recorder-core/src/nodeProctor.ts index 5bb98290b22..0c8655e0494 100644 --- a/web/src/tools/testing/recorder-core/src/nodeProctor.ts +++ b/web/src/tools/testing/recorder-core/src/nodeProctor.ts @@ -1,4 +1,4 @@ -import Proctor, { AssertCallback } from "./proctor.js"; +import { Proctor, AssertCallback } from "./proctor.js"; import { KeyboardTest, TestSet, @@ -12,7 +12,7 @@ import { KeyEvent, KeyEventSpec, KeyboardHarness, SyntheticTextStore, TextStore import { DeviceSpec } from "keyman/common/web-utils"; import { JSKeyboardInterface, JSKeyboardProcessor } from 'keyman/engine/js-processor'; -export default class NodeProctor extends Proctor { +export class NodeProctor extends Proctor { private keyboardWithHarness: KeyboardHarness; public __debug = false; diff --git a/web/src/tools/testing/recorder-core/src/proctor.ts b/web/src/tools/testing/recorder-core/src/proctor.ts index 549ffe618d5..52db386818c 100644 --- a/web/src/tools/testing/recorder-core/src/proctor.ts +++ b/web/src/tools/testing/recorder-core/src/proctor.ts @@ -11,7 +11,7 @@ export type AssertCallback = (s1: any, s2: any, msg?: string) => void; * Note that DOM-aware KeymanWeb will implement a Browser-based version, while * keyboard and input-processor will use a Node-based version instead. */ -export default abstract class Proctor { +export abstract class Proctor { device: DeviceSpec; _assert: AssertCallback;