diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 4181a41c..84503665 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -74,6 +74,7 @@ module.exports = { "@typescript-eslint/no-use-before-define": "off", "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_", ignoreRestSiblings: true }], "@typescript-eslint/explicit-function-return-type": ["error"], + "@typescript-eslint/consistent-type-imports": "error", // Import plugin config (used to intelligently validate module import statements) "import/prefer-default-export": "off", diff --git a/frontend/src/App.vue b/frontend/src/App.vue index c2f5316e..311ee730 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -224,14 +224,14 @@ import { createInputManager } from "@/io-managers/input"; import { createLocalizationManager } from "@/io-managers/localization"; import { createPanicManager } from "@/io-managers/panic"; import { createPersistenceManager } from "@/io-managers/persistence"; -import { createDialogState, DialogState } from "@/state-providers/dialog"; -import { createFontsState, FontsState } from "@/state-providers/fonts"; -import { createFullscreenState, FullscreenState } from "@/state-providers/fullscreen"; -import { createPanelsState, PanelsState } from "@/state-providers/panels"; -import { createPortfolioState, PortfolioState } from "@/state-providers/portfolio"; -import { createWorkspaceState, WorkspaceState } from "@/state-providers/workspace"; +import { createDialogState, type DialogState } from "@/state-providers/dialog"; +import { createFontsState, type FontsState } from "@/state-providers/fonts"; +import { createFullscreenState, type FullscreenState } from "@/state-providers/fullscreen"; +import { createPanelsState, type PanelsState } from "@/state-providers/panels"; +import { createPortfolioState, type PortfolioState } from "@/state-providers/portfolio"; +import { createWorkspaceState, type WorkspaceState } from "@/state-providers/workspace"; import { operatingSystem } from "@/utility-functions/platform"; -import { createEditor, Editor } from "@/wasm-communication/editor"; +import { createEditor, type Editor } from "@/wasm-communication/editor"; import MainWindow from "@/components/window/MainWindow.vue"; diff --git a/frontend/src/components/floating-menus/ColorPicker.vue b/frontend/src/components/floating-menus/ColorPicker.vue index 898baa41..17db19d7 100644 --- a/frontend/src/components/floating-menus/ColorPicker.vue +++ b/frontend/src/components/floating-menus/ColorPicker.vue @@ -116,11 +116,11 @@ diff --git a/frontend/src/components/floating-menus/DialogModal.vue b/frontend/src/components/floating-menus/DialogModal.vue index 3fc8c72d..81786983 100644 --- a/frontend/src/components/floating-menus/DialogModal.vue +++ b/frontend/src/components/floating-menus/DialogModal.vue @@ -77,14 +77,6 @@ import WidgetLayout from "@/components/widgets/WidgetLayout.vue"; export default defineComponent({ inject: ["dialog"], - components: { - LayoutRow, - LayoutCol, - FloatingMenu, - IconLabel, - TextButton, - WidgetLayout, - }, methods: { dismiss() { this.dialog.dismissDialog(); @@ -96,5 +88,13 @@ export default defineComponent({ const emphasizedOrFirstButton = (element?.querySelector("[data-emphasized]") as HTMLButtonElement | null) || element?.querySelector("[data-text-button]"); emphasizedOrFirstButton?.focus(); }, + components: { + FloatingMenu, + IconLabel, + LayoutCol, + LayoutRow, + TextButton, + WidgetLayout, + }, }); diff --git a/frontend/src/components/floating-menus/FloatingMenu.vue b/frontend/src/components/floating-menus/FloatingMenu.vue index 9fab5007..385e1fd5 100644 --- a/frontend/src/components/floating-menus/FloatingMenu.vue +++ b/frontend/src/components/floating-menus/FloatingMenu.vue @@ -175,7 +175,7 @@ diff --git a/frontend/src/components/panels/NodeGraph.vue b/frontend/src/components/panels/NodeGraph.vue index 643a8ecd..f456d3f3 100644 --- a/frontend/src/components/panels/NodeGraph.vue +++ b/frontend/src/components/panels/NodeGraph.vue @@ -476,9 +476,9 @@ export default defineComponent({ this.createWirePath(outputPort2, inputPort2, true, false); }, components: { - LayoutRow, - LayoutCol, IconLabel, + LayoutCol, + LayoutRow, TextLabel, }, }); diff --git a/frontend/src/components/panels/Properties.vue b/frontend/src/components/panels/Properties.vue index 98874388..b2687ba5 100644 --- a/frontend/src/components/panels/Properties.vue +++ b/frontend/src/components/panels/Properties.vue @@ -46,7 +46,6 @@ import { defaultWidgetLayout, UpdatePropertyPanelOptionsLayout, UpdatePropertyPa import LayoutCol from "@/components/layout/LayoutCol.vue"; import LayoutRow from "@/components/layout/LayoutRow.vue"; - import WidgetLayout from "@/components/widgets/WidgetLayout.vue"; export default defineComponent({ @@ -67,9 +66,9 @@ export default defineComponent({ }); }, components: { - WidgetLayout, - LayoutRow, LayoutCol, + LayoutRow, + WidgetLayout, }, }); diff --git a/frontend/src/components/widgets/WidgetLayout.vue b/frontend/src/components/widgets/WidgetLayout.vue index 5719e189..1ec5a576 100644 --- a/frontend/src/components/widgets/WidgetLayout.vue +++ b/frontend/src/components/widgets/WidgetLayout.vue @@ -16,9 +16,9 @@ diff --git a/frontend/src/components/widgets/buttons/TextButton.vue b/frontend/src/components/widgets/buttons/TextButton.vue index 368c84a7..b686ec8a 100644 --- a/frontend/src/components/widgets/buttons/TextButton.vue +++ b/frontend/src/components/widgets/buttons/TextButton.vue @@ -63,9 +63,9 @@ diff --git a/frontend/src/components/widgets/inputs/DropdownInput.vue b/frontend/src/components/widgets/inputs/DropdownInput.vue index ec9fb207..f3df211f 100644 --- a/frontend/src/components/widgets/inputs/DropdownInput.vue +++ b/frontend/src/components/widgets/inputs/DropdownInput.vue @@ -97,9 +97,9 @@ diff --git a/frontend/src/components/widgets/inputs/FieldInput.vue b/frontend/src/components/widgets/inputs/FieldInput.vue index 0f514600..35f2b375 100644 --- a/frontend/src/components/widgets/inputs/FieldInput.vue +++ b/frontend/src/components/widgets/inputs/FieldInput.vue @@ -115,7 +115,7 @@ diff --git a/frontend/src/components/widgets/inputs/SwatchPairInput.vue b/frontend/src/components/widgets/inputs/SwatchPairInput.vue index 2895defd..88bebf1e 100644 --- a/frontend/src/components/widgets/inputs/SwatchPairInput.vue +++ b/frontend/src/components/widgets/inputs/SwatchPairInput.vue @@ -66,10 +66,10 @@ diff --git a/frontend/src/components/widgets/inputs/TextAreaInput.vue b/frontend/src/components/widgets/inputs/TextAreaInput.vue index df346374..b7ceec81 100644 --- a/frontend/src/components/widgets/inputs/TextAreaInput.vue +++ b/frontend/src/components/widgets/inputs/TextAreaInput.vue @@ -17,7 +17,7 @@ diff --git a/frontend/src/components/widgets/labels/Separator.vue b/frontend/src/components/widgets/labels/Separator.vue index c1b03303..0a01270b 100644 --- a/frontend/src/components/widgets/labels/Separator.vue +++ b/frontend/src/components/widgets/labels/Separator.vue @@ -73,9 +73,9 @@ diff --git a/frontend/src/components/window/status-bar/StatusBar.vue b/frontend/src/components/window/status-bar/StatusBar.vue index e2fc8fe0..56588382 100644 --- a/frontend/src/components/window/status-bar/StatusBar.vue +++ b/frontend/src/components/window/status-bar/StatusBar.vue @@ -49,7 +49,7 @@ import { defineComponent } from "vue"; import { platformIsMac } from "@/utility-functions/platform"; -import { HintData, HintInfo, KeysGroup, UpdateInputHints } from "@/wasm-communication/messages"; +import { type HintData, type HintInfo, type KeysGroup, UpdateInputHints } from "@/wasm-communication/messages"; import LayoutRow from "@/components/layout/LayoutRow.vue"; import Separator from "@/components/widgets/labels/Separator.vue"; @@ -74,9 +74,9 @@ export default defineComponent({ }); }, components: { - UserInputLabel, - Separator, LayoutRow, + Separator, + UserInputLabel, }, }); diff --git a/frontend/src/components/window/title-bar/TitleBar.vue b/frontend/src/components/window/title-bar/TitleBar.vue index 5a872af9..bb7dc886 100644 --- a/frontend/src/components/window/title-bar/TitleBar.vue +++ b/frontend/src/components/window/title-bar/TitleBar.vue @@ -38,7 +38,7 @@ diff --git a/frontend/src/components/window/title-bar/WindowButtonsMac.vue b/frontend/src/components/window/title-bar/WindowButtonsMac.vue index fb03c0a4..7762b993 100644 --- a/frontend/src/components/window/title-bar/WindowButtonsMac.vue +++ b/frontend/src/components/window/title-bar/WindowButtonsMac.vue @@ -39,7 +39,7 @@ diff --git a/frontend/src/components/window/title-bar/WindowButtonsWindows.vue b/frontend/src/components/window/title-bar/WindowButtonsWindows.vue index 8679573f..04e0e600 100644 --- a/frontend/src/components/window/title-bar/WindowButtonsWindows.vue +++ b/frontend/src/components/window/title-bar/WindowButtonsWindows.vue @@ -38,18 +38,18 @@ diff --git a/frontend/src/components/window/title-bar/WindowTitle.vue b/frontend/src/components/window/title-bar/WindowTitle.vue index 68130a18..13467876 100644 --- a/frontend/src/components/window/title-bar/WindowTitle.vue +++ b/frontend/src/components/window/title-bar/WindowTitle.vue @@ -14,7 +14,7 @@ diff --git a/frontend/src/components/window/workspace/Workspace.vue b/frontend/src/components/window/workspace/Workspace.vue index 2121be33..ee77d07e 100644 --- a/frontend/src/components/window/workspace/Workspace.vue +++ b/frontend/src/components/window/workspace/Workspace.vue @@ -75,12 +75,6 @@ const MIN_PANEL_SIZE = 100; export default defineComponent({ inject: ["workspace", "portfolio", "dialog", "editor"], - components: { - LayoutRow, - LayoutCol, - Panel, - DialogModal, - }, computed: { activeDocumentIndex() { return this.portfolio.state.activeDocumentIndex; @@ -142,5 +136,11 @@ export default defineComponent({ newActiveTab.scrollIntoView(); }, }, + components: { + DialogModal, + LayoutCol, + LayoutRow, + Panel, + }, }); diff --git a/frontend/src/io-managers/blob.ts b/frontend/src/io-managers/blob.ts index b8b2d7a2..83ae598b 100644 --- a/frontend/src/io-managers/blob.ts +++ b/frontend/src/io-managers/blob.ts @@ -1,4 +1,4 @@ -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { UpdateImageData } from "@/wasm-communication/messages"; export function createBlobManager(editor: Editor): void { diff --git a/frontend/src/io-managers/clipboard.ts b/frontend/src/io-managers/clipboard.ts index e9408497..10fdd609 100644 --- a/frontend/src/io-managers/clipboard.ts +++ b/frontend/src/io-managers/clipboard.ts @@ -1,4 +1,4 @@ -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerTextCopy } from "@/wasm-communication/messages"; export function createClipboardManager(editor: Editor): void { diff --git a/frontend/src/io-managers/hyperlinks.ts b/frontend/src/io-managers/hyperlinks.ts index 4f5fe0e0..9f8a8de5 100644 --- a/frontend/src/io-managers/hyperlinks.ts +++ b/frontend/src/io-managers/hyperlinks.ts @@ -1,4 +1,4 @@ -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerVisitLink } from "@/wasm-communication/messages"; export function createHyperlinkManager(editor: Editor): void { diff --git a/frontend/src/io-managers/input.ts b/frontend/src/io-managers/input.ts index 9276a8cf..04075301 100644 --- a/frontend/src/io-managers/input.ts +++ b/frontend/src/io-managers/input.ts @@ -1,10 +1,10 @@ -import { DialogState } from "@/state-providers/dialog"; -import { FullscreenState } from "@/state-providers/fullscreen"; -import { PortfolioState } from "@/state-providers/portfolio"; +import { type DialogState } from "@/state-providers/dialog"; +import { type FullscreenState } from "@/state-providers/fullscreen"; +import { type PortfolioState } from "@/state-providers/portfolio"; import { makeKeyboardModifiersBitfield, textInputCleanup, getLocalizedScanCode } from "@/utility-functions/keyboard-entry"; import { platformIsMac } from "@/utility-functions/platform"; import { stripIndents } from "@/utility-functions/strip-indents"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerPaste } from "@/wasm-communication/messages"; type EventName = keyof HTMLElementEventMap | keyof WindowEventHandlersEventMap | "modifyinputfield"; diff --git a/frontend/src/io-managers/localization.ts b/frontend/src/io-managers/localization.ts index 3c40dc62..300675be 100644 --- a/frontend/src/io-managers/localization.ts +++ b/frontend/src/io-managers/localization.ts @@ -1,4 +1,4 @@ -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerAboutGraphiteLocalizedCommitDate } from "@/wasm-communication/messages"; export function createLocalizationManager(editor: Editor): void { diff --git a/frontend/src/io-managers/panic.ts b/frontend/src/io-managers/panic.ts index a79cf139..956a9821 100644 --- a/frontend/src/io-managers/panic.ts +++ b/frontend/src/io-managers/panic.ts @@ -1,10 +1,10 @@ -import { TextButtonWidget } from "@/components/widgets/buttons/TextButton"; -import { DialogState } from "@/state-providers/dialog"; -import { IconName } from "@/utility-functions/icons"; +import { type TextButtonWidget } from "@/components/widgets/buttons/TextButton"; +import { type DialogState } from "@/state-providers/dialog"; +import { type IconName } from "@/utility-functions/icons"; import { browserVersion, operatingSystem } from "@/utility-functions/platform"; import { stripIndents } from "@/utility-functions/strip-indents"; -import { Editor } from "@/wasm-communication/editor"; -import { DisplayDialogPanic, Widget, WidgetLayout } from "@/wasm-communication/messages"; +import { type Editor } from "@/wasm-communication/editor"; +import { type WidgetLayout, Widget, DisplayDialogPanic } from "@/wasm-communication/messages"; export function createPanicManager(editor: Editor, dialogState: DialogState): void { // Code panic dialog and console error diff --git a/frontend/src/io-managers/persistence.ts b/frontend/src/io-managers/persistence.ts index 9fe11740..34bb09cf 100644 --- a/frontend/src/io-managers/persistence.ts +++ b/frontend/src/io-managers/persistence.ts @@ -1,6 +1,6 @@ -import { PortfolioState } from "@/state-providers/portfolio"; +import { type PortfolioState } from "@/state-providers/portfolio"; import { stripIndents } from "@/utility-functions/strip-indents"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerIndexedDbWriteDocument, TriggerIndexedDbRemoveDocument } from "@/wasm-communication/messages"; const GRAPHITE_INDEXED_DB_VERSION = 2; diff --git a/frontend/src/state-providers/dialog.ts b/frontend/src/state-providers/dialog.ts index 0f6b0c60..2aff09eb 100644 --- a/frontend/src/state-providers/dialog.ts +++ b/frontend/src/state-providers/dialog.ts @@ -1,9 +1,9 @@ import { reactive, readonly } from "vue"; -import { TextButtonWidget } from "@/components/widgets/buttons/TextButton"; -import { IconName } from "@/utility-functions/icons"; -import { Editor } from "@/wasm-communication/editor"; -import { defaultWidgetLayout, DisplayDialog, DisplayDialogDismiss, UpdateDialogDetails, WidgetLayout } from "@/wasm-communication/messages"; +import { type TextButtonWidget } from "@/components/widgets/buttons/TextButton"; +import { type IconName } from "@/utility-functions/icons"; +import { type Editor } from "@/wasm-communication/editor"; +import { defaultWidgetLayout, DisplayDialog, DisplayDialogDismiss, UpdateDialogDetails, type WidgetLayout } from "@/wasm-communication/messages"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function createDialogState(editor: Editor) { diff --git a/frontend/src/state-providers/fonts.ts b/frontend/src/state-providers/fonts.ts index ea7ae0b6..0ae2b4a1 100644 --- a/frontend/src/state-providers/fonts.ts +++ b/frontend/src/state-providers/fonts.ts @@ -1,6 +1,6 @@ import { reactive } from "vue"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { TriggerFontLoad } from "@/wasm-communication/messages"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type diff --git a/frontend/src/state-providers/fullscreen.ts b/frontend/src/state-providers/fullscreen.ts index c7f44a29..53a18838 100644 --- a/frontend/src/state-providers/fullscreen.ts +++ b/frontend/src/state-providers/fullscreen.ts @@ -1,6 +1,6 @@ import { reactive, readonly } from "vue"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function createFullscreenState(_: Editor) { diff --git a/frontend/src/state-providers/panels.ts b/frontend/src/state-providers/panels.ts index 612e7a88..466a5acf 100644 --- a/frontend/src/state-providers/panels.ts +++ b/frontend/src/state-providers/panels.ts @@ -1,6 +1,6 @@ import { nextTick, reactive, readonly } from "vue"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { DisplayEditableTextbox, DisplayRemoveEditableTextbox, diff --git a/frontend/src/state-providers/portfolio.ts b/frontend/src/state-providers/portfolio.ts index aab72318..17b25c24 100644 --- a/frontend/src/state-providers/portfolio.ts +++ b/frontend/src/state-providers/portfolio.ts @@ -2,8 +2,16 @@ import { reactive, readonly } from "vue"; import { download, downloadBlob, upload } from "@/utility-functions/files"; -import { Editor } from "@/wasm-communication/editor"; -import { TriggerFileDownload, TriggerRasterDownload, FrontendDocumentDetails, TriggerOpenDocument, TriggerImport, UpdateActiveDocument, UpdateOpenDocumentsList } from "@/wasm-communication/messages"; +import { type Editor } from "@/wasm-communication/editor"; +import { + type FrontendDocumentDetails, + TriggerFileDownload, + TriggerImport, + TriggerOpenDocument, + TriggerRasterDownload, + UpdateActiveDocument, + UpdateOpenDocumentsList, +} from "@/wasm-communication/messages"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function createPortfolioState(editor: Editor) { diff --git a/frontend/src/state-providers/workspace.ts b/frontend/src/state-providers/workspace.ts index 97f53bb6..284d9fd9 100644 --- a/frontend/src/state-providers/workspace.ts +++ b/frontend/src/state-providers/workspace.ts @@ -1,7 +1,7 @@ /* eslint-disable max-classes-per-file */ import { reactive, readonly } from "vue"; -import { Editor } from "@/wasm-communication/editor"; +import { type Editor } from "@/wasm-communication/editor"; import { UpdateNodeGraphVisibility } from "@/wasm-communication/messages"; // eslint-disable-next-line @typescript-eslint/explicit-function-return-type diff --git a/frontend/src/utility-functions/color.ts b/frontend/src/utility-functions/color.ts index fe035932..a8564187 100644 --- a/frontend/src/utility-functions/color.ts +++ b/frontend/src/utility-functions/color.ts @@ -1,4 +1,4 @@ -import { HSVA, RGBA } from "@/wasm-communication/messages"; +import { type HSVA, type RGBA } from "@/wasm-communication/messages"; export function hsvaToRgba(hsva: HSVA): RGBA { const { h, s, v, a } = hsva; diff --git a/frontend/src/utility-functions/icons.ts b/frontend/src/utility-functions/icons.ts index e4fc089d..eb861227 100644 --- a/frontend/src/utility-functions/icons.ts +++ b/frontend/src/utility-functions/icons.ts @@ -251,10 +251,10 @@ const ICON_LIST = { } as const; // Exported icons and types -export const icons: IconDefinitionType = ICON_LIST; -export const iconComponents = Object.fromEntries(Object.entries(icons).map(([name, data]) => [name, data.component])); +export const ICONS: IconDefinitionType = ICON_LIST; +export const ICON_COMPONENTS = Object.fromEntries(Object.entries(ICONS).map(([name, data]) => [name, data.component])); -export type IconName = keyof typeof icons; +export type IconName = keyof typeof ICONS; export type IconSize = null | 12 | 16 | 24 | 32; export type IconStyle = "Normal" | "Node"; diff --git a/frontend/src/wasm-communication/editor.ts b/frontend/src/wasm-communication/editor.ts index dec09025..175c2602 100644 --- a/frontend/src/wasm-communication/editor.ts +++ b/frontend/src/wasm-communication/editor.ts @@ -1,8 +1,9 @@ +import type WasmBindgenPackage from "@/../wasm/pkg"; import { panicProxy } from "@/utility-functions/panic-proxy"; -import { JsMessageType } from "@/wasm-communication/messages"; -import { createSubscriptionRouter, SubscriptionRouter } from "@/wasm-communication/subscription-router"; +import { type JsMessageType } from "@/wasm-communication/messages"; +import { createSubscriptionRouter, type SubscriptionRouter } from "@/wasm-communication/subscription-router"; -export type WasmRawInstance = typeof import("@/../wasm/pkg"); +export type WasmRawInstance = typeof WasmBindgenPackage; export type WasmEditorInstance = InstanceType; export type Editor = Readonly>; diff --git a/frontend/src/wasm-communication/messages.ts b/frontend/src/wasm-communication/messages.ts index f8aa377c..5cd695b9 100644 --- a/frontend/src/wasm-communication/messages.ts +++ b/frontend/src/wasm-communication/messages.ts @@ -2,8 +2,8 @@ import { Transform, Type, plainToClass } from "class-transformer"; -import type { IconName, IconSize, IconStyle } from "@/utility-functions/icons"; -import type { WasmEditorInstance, WasmRawInstance } from "@/wasm-communication/editor"; +import { type IconName, type IconSize, type IconStyle } from "@/utility-functions/icons"; +import { type WasmEditorInstance, type WasmRawInstance } from "@/wasm-communication/editor"; import type MenuList from "@/components/floating-menus/MenuList.vue"; diff --git a/frontend/src/wasm-communication/subscription-router.ts b/frontend/src/wasm-communication/subscription-router.ts index dd6d8f58..d995716b 100644 --- a/frontend/src/wasm-communication/subscription-router.ts +++ b/frontend/src/wasm-communication/subscription-router.ts @@ -1,7 +1,7 @@ import { plainToInstance } from "class-transformer"; -import type { WasmEditorInstance, WasmRawInstance } from "@/wasm-communication/editor"; -import { JsMessageType, messageMakers, JsMessage } from "@/wasm-communication/messages"; +import { type WasmEditorInstance, type WasmRawInstance } from "@/wasm-communication/editor"; +import { type JsMessageType, messageMakers, type JsMessage } from "@/wasm-communication/messages"; type JsMessageCallback = (messageData: T) => void; type JsMessageCallbackMap = {