Bump TypeScript to 5.3 with verbatimModuleSyntax
This commit upgrades TypeScript to the latest version 5.3 and introduces `verbatimModuleSyntax` in line with the official Vue guide recommendatinos (vuejs/docs#2592). By enforcing `import type` for type-only imports, this commit improves code clarity and supports tooling optimization, ensuring imports are only bundled when necessary for runtime. Changes: - Bump TypeScript to 5.3.3 across the project. - Adjust import statements to utilize `import type` where applicable, promoting cleaner and more efficient code.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import { Bootstrapper } from './Bootstrapper';
|
||||
import { RuntimeSanityValidator } from './Modules/RuntimeSanityValidator';
|
||||
import { AppInitializationLogger } from './Modules/AppInitializationLogger';
|
||||
import { DependencyBootstrapper } from './Modules/DependencyBootstrapper';
|
||||
import { MobileSafariActivePseudoClassEnabler } from './Modules/MobileSafariActivePseudoClassEnabler';
|
||||
import type { Bootstrapper } from './Bootstrapper';
|
||||
import type { App } from 'vue';
|
||||
|
||||
export class ApplicationBootstrapper implements Bootstrapper {
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
import { InjectionKey, provide, inject } from 'vue';
|
||||
import { type InjectionKey, provide, inject } from 'vue';
|
||||
import { useCollectionState } from '@/presentation/components/Shared/Hooks/UseCollectionState';
|
||||
import { useApplication } from '@/presentation/components/Shared/Hooks/UseApplication';
|
||||
import { useAutoUnsubscribedEvents } from '@/presentation/components/Shared/Hooks/UseAutoUnsubscribedEvents';
|
||||
import { useClipboard } from '@/presentation/components/Shared/Hooks/Clipboard/UseClipboard';
|
||||
import { useCurrentCode } from '@/presentation/components/Shared/Hooks/UseCurrentCode';
|
||||
import { IApplicationContext } from '@/application/Context/IApplicationContext';
|
||||
import type { IApplicationContext } from '@/application/Context/IApplicationContext';
|
||||
import {
|
||||
AnyLifetimeInjectionKey, InjectionKeySelector, InjectionKeys, SingletonKey,
|
||||
TransientKey, injectKey,
|
||||
type AnyLifetimeInjectionKey, type InjectionKeySelector, InjectionKeys, type SingletonKey,
|
||||
type TransientKey, injectKey,
|
||||
} from '@/presentation/injectionSymbols';
|
||||
import { PropertyKeys } from '@/TypeHelpers';
|
||||
import type { PropertyKeys } from '@/TypeHelpers';
|
||||
import { useUserSelectionState } from '@/presentation/components/Shared/Hooks/UseUserSelectionState';
|
||||
import { useLogger } from '@/presentation/components/Shared/Hooks/Log/UseLogger';
|
||||
import { useCodeRunner } from '@/presentation/components/Shared/Hooks/UseCodeRunner';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Logger } from '@/application/Common/Log/Logger';
|
||||
import type { Logger } from '@/application/Common/Log/Logger';
|
||||
import { ClientLoggerFactory } from '@/presentation/components/Shared/Hooks/Log/ClientLoggerFactory';
|
||||
import { Bootstrapper } from '../Bootstrapper';
|
||||
import type { Bootstrapper } from '../Bootstrapper';
|
||||
|
||||
export class AppInitializationLogger implements Bootstrapper {
|
||||
constructor(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { inject, type App } from 'vue';
|
||||
import { buildContext } from '@/application/Context/ApplicationContextFactory';
|
||||
import { provideDependencies } from '@/presentation/bootstrapping/DependencyProvider';
|
||||
import { Bootstrapper } from '../Bootstrapper';
|
||||
import type { Bootstrapper } from '../Bootstrapper';
|
||||
|
||||
export class DependencyBootstrapper implements Bootstrapper {
|
||||
constructor(
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { OperatingSystem } from '@/domain/OperatingSystem';
|
||||
import { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import type { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import { CurrentEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironmentFactory';
|
||||
import { Bootstrapper } from '../Bootstrapper';
|
||||
import type { Bootstrapper } from '../Bootstrapper';
|
||||
|
||||
export class MobileSafariActivePseudoClassEnabler implements Bootstrapper {
|
||||
constructor(
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { validateRuntimeSanity } from '@/infrastructure/RuntimeSanity/SanityChecks';
|
||||
import { Bootstrapper } from '../Bootstrapper';
|
||||
import type { Bootstrapper } from '../Bootstrapper';
|
||||
|
||||
export class RuntimeSanityValidator implements Bootstrapper {
|
||||
constructor(private readonly validator = validateRuntimeSanity) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineAsyncComponent, defineComponent, Component } from 'vue';
|
||||
import { defineAsyncComponent, defineComponent, type Component } from 'vue';
|
||||
import TheHeader from '@/presentation/components/TheHeader.vue';
|
||||
import TheFooter from '@/presentation/components/TheFooter/TheFooter.vue';
|
||||
import TheCodeButtons from '@/presentation/components/Code/CodeButtons/TheCodeButtons.vue';
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType } from 'vue';
|
||||
import { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
import { defineComponent, type PropType } from 'vue';
|
||||
import type { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -18,7 +18,7 @@ import {
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import ModalDialog from '@/presentation/components/Shared/Modal/ModalDialog.vue';
|
||||
import { ScriptingLanguage } from '@/domain/ScriptingLanguage';
|
||||
import { IScriptingDefinition } from '@/domain/IScriptingDefinition';
|
||||
import { type IScriptingDefinition } from '@/domain/IScriptingDefinition';
|
||||
import { ScriptFilename } from '@/application/CodeRunner/ScriptFilename';
|
||||
import { FileType } from '@/presentation/common/Dialog';
|
||||
import IconButton from '../IconButton.vue';
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ScriptDiagnosticData, ScriptDiagnosticsCollector } from '@/application/ScriptDiagnostics/ScriptDiagnosticsCollector';
|
||||
import type { ScriptDiagnosticData, ScriptDiagnosticsCollector } from '@/application/ScriptDiagnostics/ScriptDiagnosticsCollector';
|
||||
import { OperatingSystem } from '@/domain/OperatingSystem';
|
||||
import { Dialog } from '@/presentation/common/Dialog';
|
||||
import type { Dialog } from '@/presentation/common/Dialog';
|
||||
|
||||
export async function createScriptErrorDialog(
|
||||
information: ScriptErrorDetails,
|
||||
|
||||
@@ -17,10 +17,10 @@ import {
|
||||
defineComponent, onUnmounted, onMounted, ref,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { ICodeChangedEvent } from '@/application/Context/State/Code/Event/ICodeChangedEvent';
|
||||
import { IScript } from '@/domain/IScript';
|
||||
import type { ICodeChangedEvent } from '@/application/Context/State/Code/Event/ICodeChangedEvent';
|
||||
import type { IScript } from '@/domain/IScript';
|
||||
import { ScriptingLanguage } from '@/domain/ScriptingLanguage';
|
||||
import { IReadOnlyCategoryCollectionState } from '@/application/Context/State/ICategoryCollectionState';
|
||||
import type { IReadOnlyCategoryCollectionState } from '@/application/Context/State/ICategoryCollectionState';
|
||||
import { CodeBuilderFactory } from '@/application/Context/State/Code/Generation/CodeBuilderFactory';
|
||||
import SizeObserver from '@/presentation/components/Shared/SizeObserver.vue';
|
||||
import { NonCollapsing } from '@/presentation/components/Scripts/View/Cards/NonCollapsingDirective';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { IApplication } from '@/domain/IApplication';
|
||||
import type { IApplication } from '@/domain/IApplication';
|
||||
import { ApplicationFactory } from '@/application/ApplicationFactory';
|
||||
|
||||
export async function dumpNames(): Promise<string> {
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { PropType, defineComponent } from 'vue';
|
||||
import { type PropType, defineComponent } from 'vue';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
import CircleRating from './Rating/CircleRating.vue';
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { IScript } from '@/domain/IScript';
|
||||
import type { IScript } from '@/domain/IScript';
|
||||
import { RecommendationLevel } from '@/domain/RecommendationLevel';
|
||||
import { scrambledEqual } from '@/application/Common/Array';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { ReadonlyScriptSelection, ScriptSelection } from '@/application/Context/State/Selection/Script/ScriptSelection';
|
||||
import { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { ReadonlyScriptSelection, ScriptSelection } from '@/application/Context/State/Selection/Script/ScriptSelection';
|
||||
import type { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import { RecommendationStatusType } from './RecommendationStatusType';
|
||||
|
||||
export function setCurrentRecommendationStatus(
|
||||
|
||||
@@ -90,7 +90,7 @@ import {
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import TooltipWrapper from '@/presentation/components/Shared/TooltipWrapper.vue';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import MenuOptionList from '../MenuOptionList.vue';
|
||||
import MenuOptionListItem from '../MenuOptionListItem.vue';
|
||||
import { setCurrentRecommendationStatus, getCurrentRecommendationStatus } from './RecommendationStatusHandler';
|
||||
|
||||
@@ -25,9 +25,9 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { PropType, defineComponent } from 'vue';
|
||||
import { type PropType, defineComponent } from 'vue';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
import { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
import type { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import { ReadonlyScriptSelection, ScriptSelection } from '@/application/Context/State/Selection/Script/ScriptSelection';
|
||||
import { ScriptSelectionChange } from '@/application/Context/State/Selection/Script/ScriptSelectionChange';
|
||||
import type { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import type { ReadonlyScriptSelection, ScriptSelection } from '@/application/Context/State/Selection/Script/ScriptSelection';
|
||||
import type { ScriptSelectionChange } from '@/application/Context/State/Selection/Script/ScriptSelectionChange';
|
||||
import { RevertStatusType } from './RevertStatusType';
|
||||
|
||||
export function setCurrentRevertStatus(
|
||||
|
||||
@@ -60,7 +60,7 @@ import {
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import TooltipWrapper from '@/presentation/components/Shared/TooltipWrapper.vue';
|
||||
import { RecommendationLevel } from '@/domain/RecommendationLevel';
|
||||
import { IScript } from '@/domain/IScript';
|
||||
import type { IScript } from '@/domain/IScript';
|
||||
import MenuOptionList from '../MenuOptionList.vue';
|
||||
import MenuOptionListItem from '../MenuOptionListItem.vue';
|
||||
import RevertStatusDocumentation from './RevertStatusDocumentation.vue';
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref } from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
import type { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import type { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
import TheOsChanger from './TheOsChanger.vue';
|
||||
import TheViewChanger from './View/TheViewChanger.vue';
|
||||
import { ViewType } from './View/ViewType';
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
import { defineComponent, computed } from 'vue';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { ICategory } from '@/domain/ICategory';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { ICategory } from '@/domain/ICategory';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ObjectDirective } from 'vue';
|
||||
import type { ObjectDirective } from 'vue';
|
||||
|
||||
const attributeName = 'data-interaction-does-not-collapse';
|
||||
|
||||
|
||||
@@ -37,14 +37,14 @@
|
||||
|
||||
<script lang="ts">
|
||||
import {
|
||||
defineComponent, PropType, ref, computed,
|
||||
defineComponent, type PropType, ref, computed,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import ScriptsTree from '@/presentation/components/Scripts/View/Tree/ScriptsTree.vue';
|
||||
import CardList from '@/presentation/components/Scripts/View/Cards/CardList.vue';
|
||||
import { ViewType } from '@/presentation/components/Scripts/Menu/View/ViewType';
|
||||
import { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import type { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import type { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import FlatButton from '@/presentation/components/Shared/FlatButton.vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, PropType } from 'vue';
|
||||
import { defineComponent, ref, type PropType } from 'vue';
|
||||
import ExpandCollapseTransition from '@/presentation/components/Shared/ExpandCollapse/ExpandCollapseTransition.vue';
|
||||
import DocumentationText from './DocumentationText.vue';
|
||||
import ToggleDocumentationButton from './ToggleDocumentationButton.vue';
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType, computed } from 'vue';
|
||||
import { defineComponent, type PropType, computed } from 'vue';
|
||||
import MarkdownText from '../Markdown/MarkdownText.vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType } from 'vue';
|
||||
import { NodeMetadata } from './NodeMetadata';
|
||||
import { defineComponent, type PropType } from 'vue';
|
||||
import RevertToggle from './RevertToggle.vue';
|
||||
import DocumentableNode from './Documentation/DocumentableNode.vue';
|
||||
import NodeTitle from './NodeTitle.vue';
|
||||
import type { NodeMetadata } from './NodeMetadata';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -8,11 +8,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import {
|
||||
PropType, defineComponent, computed,
|
||||
type PropType, defineComponent, computed,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { NodeMetadata } from '@/presentation/components/Scripts/View/Tree/NodeContent/NodeMetadata';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { NodeMetadata } from '@/presentation/components/Scripts/View/Tree/NodeContent/NodeMetadata';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { getReverter } from './Reverter/ReverterFactory';
|
||||
import ToggleSwitch from './ToggleSwitch.vue';
|
||||
import type { Reverter } from './Reverter/Reverter';
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import type { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import { getCategoryId } from '../../TreeViewAdapter/CategoryNodeMetadataConverter';
|
||||
import { Reverter } from './Reverter';
|
||||
import { ScriptReverter } from './ScriptReverter';
|
||||
import type { Reverter } from './Reverter';
|
||||
|
||||
export class CategoryReverter implements Reverter {
|
||||
private readonly categoryId: number;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import type { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import type { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
|
||||
export interface Reverter {
|
||||
getState(selectedScripts: ReadonlyArray<SelectedScript>): boolean;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { NodeMetadata, NodeType } from '../NodeMetadata';
|
||||
import { Reverter } from './Reverter';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { type NodeMetadata, NodeType } from '../NodeMetadata';
|
||||
import { ScriptReverter } from './ScriptReverter';
|
||||
import { CategoryReverter } from './CategoryReverter';
|
||||
import type { Reverter } from './Reverter';
|
||||
|
||||
export function getReverter(node: NodeMetadata, collection: ICategoryCollection): Reverter {
|
||||
switch (node.type) {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import type { UserSelection } from '@/application/Context/State/Selection/UserSelection';
|
||||
import type { SelectedScript } from '@/application/Context/State/Selection/Script/SelectedScript';
|
||||
import { getScriptId } from '../../TreeViewAdapter/CategoryNodeMetadataConverter';
|
||||
import { Reverter } from './Reverter';
|
||||
import type { Reverter } from './Reverter';
|
||||
|
||||
export class ScriptReverter implements Reverter {
|
||||
private readonly scriptId: string;
|
||||
|
||||
@@ -31,8 +31,8 @@ import NodeContent from './NodeContent/NodeContent.vue';
|
||||
import { useTreeViewFilterEvent } from './TreeViewAdapter/UseTreeViewFilterEvent';
|
||||
import { useTreeViewNodeInput } from './TreeViewAdapter/UseTreeViewNodeInput';
|
||||
import { useCollectionSelectionStateUpdater } from './TreeViewAdapter/UseCollectionSelectionStateUpdater';
|
||||
import { TreeNodeStateChangedEmittedEvent } from './TreeView/Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
import { useSelectedScriptNodeIds } from './TreeViewAdapter/UseSelectedScriptNodeIds';
|
||||
import type { TreeNodeStateChangedEmittedEvent } from './TreeView/Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
|
||||
export default defineComponent({
|
||||
components: {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { TreeNodeStateDescriptor } from '../Node/State/StateDescriptor';
|
||||
import { ReadOnlyTreeNode } from '../Node/TreeNode';
|
||||
import type { TreeNodeStateDescriptor } from '../Node/State/StateDescriptor';
|
||||
import type { ReadOnlyTreeNode } from '../Node/TreeNode';
|
||||
|
||||
export interface TreeNodeStateChangedEmittedEvent {
|
||||
readonly node: ReadOnlyTreeNode;
|
||||
|
||||
@@ -51,13 +51,13 @@
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed, toRef } from 'vue';
|
||||
import ExpandCollapseTransition from '@/presentation/components/Shared/ExpandCollapse/ExpandCollapseTransition.vue';
|
||||
import { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { NodeRenderingStrategy } from '../Rendering/Scheduling/NodeRenderingStrategy';
|
||||
import { useNodeState } from './UseNodeState';
|
||||
import { TreeNode } from './TreeNode';
|
||||
import LeafTreeNode from './LeafTreeNode.vue';
|
||||
import InteractableNode from './InteractableNode.vue';
|
||||
import type { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import type { TreeNode } from './TreeNode';
|
||||
import type { NodeRenderingStrategy } from '../Rendering/Scheduling/NodeRenderingStrategy';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { TreeNode } from '../TreeNode';
|
||||
import { HierarchyAccess } from './HierarchyAccess';
|
||||
import type { TreeNode } from '../TreeNode';
|
||||
import type { HierarchyAccess } from './HierarchyAccess';
|
||||
|
||||
export class TreeNodeHierarchy implements HierarchyAccess {
|
||||
public parent: TreeNode | undefined = undefined;
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed, toRef } from 'vue';
|
||||
import { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { useNodeState } from './UseNodeState';
|
||||
import { useKeyboardInteractionState } from './UseKeyboardInteractionState';
|
||||
import { TreeNode } from './TreeNode';
|
||||
import type { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import type { TreeNode } from './TreeNode';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed, toRef } from 'vue';
|
||||
import { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { TreeNode } from './TreeNode';
|
||||
import NodeCheckbox from './NodeCheckbox.vue';
|
||||
import InteractableNode from './InteractableNode.vue';
|
||||
import type { TreeNode } from './TreeNode';
|
||||
import type { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -10,11 +10,11 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, computed, toRef } from 'vue';
|
||||
import { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { useNodeState } from './UseNodeState';
|
||||
import { TreeNode } from './TreeNode';
|
||||
import { TreeNodeCheckState } from './State/CheckState';
|
||||
import type { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import type { TreeNode } from './TreeNode';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { IEventSource } from '@/infrastructure/Events/IEventSource';
|
||||
import { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
import type { IEventSource } from '@/infrastructure/Events/IEventSource';
|
||||
import { TreeNodeCheckState } from './CheckState';
|
||||
import type { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
|
||||
export interface NodeStateChangedEvent {
|
||||
readonly oldState: TreeNodeStateDescriptor;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { EventSource } from '@/infrastructure/Events/EventSource';
|
||||
import { NodeStateChangedEvent, TreeNodeStateAccess, TreeNodeStateTransaction } from './StateAccess';
|
||||
import { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
import { TreeNodeCheckState } from './CheckState';
|
||||
import { TreeNodeStateTransactionDescriber } from './TreeNodeStateTransactionDescriber';
|
||||
import { TreeNodeCheckState } from './CheckState';
|
||||
import type { NodeStateChangedEvent, TreeNodeStateAccess, TreeNodeStateTransaction } from './StateAccess';
|
||||
import type { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
|
||||
export class TreeNodeState implements TreeNodeStateAccess {
|
||||
public current: TreeNodeStateDescriptor = {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { TreeNodeCheckState } from './CheckState';
|
||||
import { TreeNodeStateTransaction } from './StateAccess';
|
||||
import { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
import type { TreeNodeStateTransaction } from './StateAccess';
|
||||
import type { TreeNodeStateDescriptor } from './StateDescriptor';
|
||||
|
||||
export class TreeNodeStateTransactionDescriber implements TreeNodeStateTransaction {
|
||||
constructor(public updatedState: Partial<TreeNodeStateDescriptor> = {}) { }
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { TreeNode } from './TreeNode';
|
||||
import { TreeNodeStateAccess } from './State/StateAccess';
|
||||
import { TreeNodeState } from './State/TreeNodeState';
|
||||
import { HierarchyAccess } from './Hierarchy/HierarchyAccess';
|
||||
import { TreeNodeHierarchy } from './Hierarchy/TreeNodeHierarchy';
|
||||
import { TreeNodeState } from './State/TreeNodeState';
|
||||
import type { TreeNode } from './TreeNode';
|
||||
import type { TreeNodeStateAccess } from './State/StateAccess';
|
||||
import type { HierarchyAccess } from './Hierarchy/HierarchyAccess';
|
||||
|
||||
export class TreeNodeManager implements TreeNode {
|
||||
public readonly state: TreeNodeStateAccess;
|
||||
|
||||
@@ -2,8 +2,8 @@ import {
|
||||
type Ref, shallowRef, watch, shallowReadonly,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { ReadOnlyTreeNode } from './TreeNode';
|
||||
import { TreeNodeStateDescriptor } from './State/StateDescriptor';
|
||||
import type { ReadOnlyTreeNode } from './TreeNode';
|
||||
import type { TreeNodeStateDescriptor } from './State/StateDescriptor';
|
||||
|
||||
export function useNodeState(
|
||||
nodeRef: Readonly<Ref<ReadOnlyTreeNode>>,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ReadOnlyTreeNode } from '../../Node/TreeNode';
|
||||
import { RenderQueueOrderer } from './RenderQueueOrderer';
|
||||
import type { ReadOnlyTreeNode } from '../../Node/TreeNode';
|
||||
import type { RenderQueueOrderer } from './RenderQueueOrderer';
|
||||
|
||||
export class CollapsedParentOrderer implements RenderQueueOrderer {
|
||||
public orderNodes(nodes: Iterable<ReadOnlyTreeNode>): ReadOnlyTreeNode[] {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ReadOnlyTreeNode } from '../../Node/TreeNode';
|
||||
import type { ReadOnlyTreeNode } from '../../Node/TreeNode';
|
||||
|
||||
export interface RenderQueueOrderer {
|
||||
orderNodes(nodes: Iterable<ReadOnlyTreeNode>): ReadOnlyTreeNode[];
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { TreeNode } from '../../Node/TreeNode';
|
||||
import type { TreeNode } from '../../Node/TreeNode';
|
||||
|
||||
export interface NodeRenderingStrategy {
|
||||
shouldRender(node: TreeNode): boolean;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { DelayScheduler } from '../DelayScheduler';
|
||||
import type { DelayScheduler } from '../DelayScheduler';
|
||||
|
||||
export class TimeoutDelayScheduler implements DelayScheduler {
|
||||
private timeoutId: ReturnType<typeof setTimeout> | undefined = undefined;
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import {
|
||||
type Ref, shallowRef, triggerRef, watch,
|
||||
} from 'vue';
|
||||
import { ReadOnlyTreeNode } from '../Node/TreeNode';
|
||||
import { useNodeStateChangeAggregator } from '../UseNodeStateChangeAggregator';
|
||||
import { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { QueryableNodes } from '../TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import { NodeRenderingStrategy } from './Scheduling/NodeRenderingStrategy';
|
||||
import { DelayScheduler } from './DelayScheduler';
|
||||
import { TimeoutDelayScheduler } from './Scheduling/TimeoutDelayScheduler';
|
||||
import { RenderQueueOrderer } from './Ordering/RenderQueueOrderer';
|
||||
import { CollapsedParentOrderer } from './Ordering/CollapsedParentOrderer';
|
||||
import type { ReadOnlyTreeNode } from '../Node/TreeNode';
|
||||
import type { TreeRoot } from '../TreeRoot/TreeRoot';
|
||||
import type { QueryableNodes } from '../TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import type { NodeRenderingStrategy } from './Scheduling/NodeRenderingStrategy';
|
||||
import type { DelayScheduler } from './DelayScheduler';
|
||||
import type { RenderQueueOrderer } from './Ordering/RenderQueueOrderer';
|
||||
|
||||
export interface NodeRenderingControl {
|
||||
readonly renderingStrategy: NodeRenderingStrategy;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ReadOnlyTreeNode, TreeNode } from '../../Node/TreeNode';
|
||||
import { TreeNodeCollection } from '../NodeCollection/TreeNodeCollection';
|
||||
import { SingleNodeFocusManager } from './SingleNodeFocusManager';
|
||||
import type { ReadOnlyTreeNode, TreeNode } from '../../Node/TreeNode';
|
||||
import type { TreeNodeCollection } from '../NodeCollection/TreeNodeCollection';
|
||||
import type { SingleNodeFocusManager } from './SingleNodeFocusManager';
|
||||
|
||||
export class SingleNodeCollectionFocusManager implements SingleNodeFocusManager {
|
||||
public get currentSingleFocusedNode(): TreeNode | undefined {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ReadOnlyTreeNode, TreeNode } from '../../Node/TreeNode';
|
||||
import type { ReadOnlyTreeNode, TreeNode } from '../../Node/TreeNode';
|
||||
|
||||
export interface SingleNodeFocusManager {
|
||||
readonly currentSingleFocusedNode: TreeNode | undefined;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ReadOnlyTreeNode, TreeNode } from '../../../Node/TreeNode';
|
||||
import type { ReadOnlyTreeNode, TreeNode } from '../../../Node/TreeNode';
|
||||
|
||||
export interface ReadOnlyQueryableNodes {
|
||||
readonly rootNodes: readonly ReadOnlyTreeNode[];
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { TreeNode } from '../../../Node/TreeNode';
|
||||
import { QueryableNodes } from './QueryableNodes';
|
||||
import type { QueryableNodes } from './QueryableNodes';
|
||||
import type { TreeNode } from '../../../Node/TreeNode';
|
||||
|
||||
export class TreeNodeNavigator implements QueryableNodes {
|
||||
public readonly flattenedNodes: readonly TreeNode[];
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { isArray } from '@/TypeHelpers';
|
||||
import { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import { TreeNode } from '../../Node/TreeNode';
|
||||
import { TreeNodeManager } from '../../Node/TreeNodeManager';
|
||||
import type { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import type { TreeNode } from '../../Node/TreeNode';
|
||||
|
||||
export function parseTreeInput(
|
||||
input: readonly TreeInputNodeData[],
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { IEventSource } from '@/infrastructure/Events/IEventSource';
|
||||
import { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import { QueryableNodes, ReadOnlyQueryableNodes } from './Query/QueryableNodes';
|
||||
import type { IEventSource } from '@/infrastructure/Events/IEventSource';
|
||||
import type { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import type { QueryableNodes, ReadOnlyQueryableNodes } from './Query/QueryableNodes';
|
||||
|
||||
export interface ReadOnlyTreeNodeCollection {
|
||||
readonly nodes: ReadOnlyQueryableNodes;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { EventSource } from '@/infrastructure/Events/EventSource';
|
||||
import { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import { TreeNodeCollection } from './TreeNodeCollection';
|
||||
import { parseTreeInput } from './TreeInputParser';
|
||||
import { TreeNodeNavigator } from './Query/TreeNodeNavigator';
|
||||
import { QueryableNodes } from './Query/QueryableNodes';
|
||||
import { parseTreeInput } from './TreeInputParser';
|
||||
import type { TreeInputNodeData } from '../../Bindings/TreeInputNodeData';
|
||||
import type { TreeNodeCollection } from './TreeNodeCollection';
|
||||
import type { QueryableNodes } from './Query/QueryableNodes';
|
||||
|
||||
export class TreeNodeInitializerAndUpdater implements TreeNodeCollection {
|
||||
public nodes: QueryableNodes = new TreeNodeNavigator([]);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { SingleNodeFocusManager } from './Focus/SingleNodeFocusManager';
|
||||
import { TreeNodeCollection } from './NodeCollection/TreeNodeCollection';
|
||||
import type { SingleNodeFocusManager } from './Focus/SingleNodeFocusManager';
|
||||
import type { TreeNodeCollection } from './NodeCollection/TreeNodeCollection';
|
||||
|
||||
export interface TreeRoot {
|
||||
readonly collection: TreeNodeCollection;
|
||||
|
||||
@@ -22,8 +22,8 @@ import {
|
||||
} from 'vue';
|
||||
import HierarchicalTreeNode from '../Node/HierarchicalTreeNode.vue';
|
||||
import { useCurrentTreeNodes } from '../UseCurrentTreeNodes';
|
||||
import { NodeRenderingStrategy } from '../Rendering/Scheduling/NodeRenderingStrategy';
|
||||
import { TreeRoot } from './TreeRoot';
|
||||
import type { NodeRenderingStrategy } from '../Rendering/Scheduling/NodeRenderingStrategy';
|
||||
import type { TreeRoot } from './TreeRoot';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { TreeRoot } from './TreeRoot';
|
||||
import { TreeNodeInitializerAndUpdater } from './NodeCollection/TreeNodeInitializerAndUpdater';
|
||||
import { TreeNodeCollection } from './NodeCollection/TreeNodeCollection';
|
||||
import { SingleNodeFocusManager } from './Focus/SingleNodeFocusManager';
|
||||
import { SingleNodeCollectionFocusManager } from './Focus/SingleNodeCollectionFocusManager';
|
||||
import { TreeNodeInitializerAndUpdater } from './NodeCollection/TreeNodeInitializerAndUpdater';
|
||||
import type { TreeRoot } from './TreeRoot';
|
||||
import type { TreeNodeCollection } from './NodeCollection/TreeNodeCollection';
|
||||
import type { SingleNodeFocusManager } from './Focus/SingleNodeFocusManager';
|
||||
|
||||
export class TreeRootManager implements TreeRoot {
|
||||
public readonly collection: TreeNodeCollection;
|
||||
|
||||
@@ -19,16 +19,16 @@ import {
|
||||
} from 'vue';
|
||||
import { TreeRootManager } from './TreeRoot/TreeRootManager';
|
||||
import TreeRoot from './TreeRoot/TreeRoot.vue';
|
||||
import { TreeInputNodeData } from './Bindings/TreeInputNodeData';
|
||||
import { TreeViewFilterEvent } from './Bindings/TreeInputFilterEvent';
|
||||
import { useTreeQueryFilter } from './UseTreeQueryFilter';
|
||||
import { useTreeKeyboardNavigation } from './UseTreeKeyboardNavigation';
|
||||
import { useNodeStateChangeAggregator } from './UseNodeStateChangeAggregator';
|
||||
import { useLeafNodeCheckedStateUpdater } from './UseLeafNodeCheckedStateUpdater';
|
||||
import { TreeNodeStateChangedEmittedEvent } from './Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
import { useAutoUpdateParentCheckState } from './UseAutoUpdateParentCheckState';
|
||||
import { useAutoUpdateChildrenCheckState } from './UseAutoUpdateChildrenCheckState';
|
||||
import { useGradualNodeRendering, NodeRenderingControl } from './Rendering/UseGradualNodeRendering';
|
||||
import { useGradualNodeRendering, type NodeRenderingControl } from './Rendering/UseGradualNodeRendering';
|
||||
import type { TreeNodeStateChangedEmittedEvent } from './Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
import type { TreeInputNodeData } from './Bindings/TreeInputNodeData';
|
||||
import type { TreeViewFilterEvent } from './Bindings/TreeInputFilterEvent';
|
||||
import type { PropType } from 'vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { useNodeStateChangeAggregator } from './UseNodeStateChangeAggregator';
|
||||
import { HierarchyAccess } from './Node/Hierarchy/HierarchyAccess';
|
||||
import { TreeNodeCheckState } from './Node/State/CheckState';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { HierarchyAccess } from './Node/Hierarchy/HierarchyAccess';
|
||||
import type { Ref } from 'vue';
|
||||
|
||||
export function useAutoUpdateChildrenCheckState(
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { useNodeStateChangeAggregator } from './UseNodeStateChangeAggregator';
|
||||
import { HierarchyAccess } from './Node/Hierarchy/HierarchyAccess';
|
||||
import { TreeNodeCheckState } from './Node/State/CheckState';
|
||||
import { ReadOnlyTreeNode } from './Node/TreeNode';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { HierarchyAccess } from './Node/Hierarchy/HierarchyAccess';
|
||||
import type { ReadOnlyTreeNode } from './Node/TreeNode';
|
||||
import type { Ref } from 'vue';
|
||||
|
||||
export function useAutoUpdateParentCheckState(
|
||||
|
||||
@@ -2,8 +2,8 @@ import {
|
||||
watch, shallowReadonly, shallowRef, type Ref,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
|
||||
export function useCurrentTreeNodes(treeRef: Readonly<Ref<TreeRoot>>) {
|
||||
const { events } = injectKey((keys) => keys.useAutoUnsubscribedEvents);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { type Ref, watch } from 'vue';
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { TreeNode } from './Node/TreeNode';
|
||||
import { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import { useCurrentTreeNodes } from './UseCurrentTreeNodes';
|
||||
import { TreeNodeCheckState } from './Node/State/CheckState';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { TreeNode } from './Node/TreeNode';
|
||||
import type { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
|
||||
export function useLeafNodeCheckedStateUpdater(
|
||||
treeRootRef: Readonly<Ref<TreeRoot>>,
|
||||
|
||||
@@ -2,11 +2,11 @@ import {
|
||||
watch, shallowRef, type Ref,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { TreeNode } from './Node/TreeNode';
|
||||
import type { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
import { useCurrentTreeNodes } from './UseCurrentTreeNodes';
|
||||
import { TreeNodeStateDescriptor } from './Node/State/StateDescriptor';
|
||||
import type { TreeNodeStateDescriptor } from './Node/State/StateDescriptor';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { TreeNode } from './Node/TreeNode';
|
||||
|
||||
export type NodeStateChangeEventCallback = (args: NodeStateChangeEventArgs) => void;
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { onMounted, onUnmounted, Ref } from 'vue';
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { onMounted, onUnmounted, type Ref } from 'vue';
|
||||
import { TreeNodeCheckState } from './Node/State/CheckState';
|
||||
import { SingleNodeFocusManager } from './TreeRoot/Focus/SingleNodeFocusManager';
|
||||
import { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import { TreeNode } from './Node/TreeNode';
|
||||
import type { TreeNode } from './Node/TreeNode';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import type { SingleNodeFocusManager } from './TreeRoot/Focus/SingleNodeFocusManager';
|
||||
import type { QueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
|
||||
type TreeNavigationKeyCodes = 'ArrowLeft' | 'ArrowUp' | 'ArrowRight' | 'ArrowDown' | ' ' | 'Enter';
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
import { type Ref, watch } from 'vue';
|
||||
import { TreeViewFilterAction, TreeViewFilterEvent, TreeViewFilterPredicate } from './Bindings/TreeInputFilterEvent';
|
||||
import { ReadOnlyTreeNode, TreeNode } from './Node/TreeNode';
|
||||
import { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
import { TreeViewFilterAction, type TreeViewFilterEvent, type TreeViewFilterPredicate } from './Bindings/TreeInputFilterEvent';
|
||||
import { useCurrentTreeNodes } from './UseCurrentTreeNodes';
|
||||
import { QueryableNodes, ReadOnlyQueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import { TreeNodeStateTransaction } from './Node/State/StateAccess';
|
||||
import { TreeNodeStateDescriptor } from './Node/State/StateDescriptor';
|
||||
import type { QueryableNodes, ReadOnlyQueryableNodes } from './TreeRoot/NodeCollection/Query/QueryableNodes';
|
||||
import type { TreeNodeStateTransaction } from './Node/State/StateAccess';
|
||||
import type { TreeNodeStateDescriptor } from './Node/State/StateDescriptor';
|
||||
import type { ReadOnlyTreeNode, TreeNode } from './Node/TreeNode';
|
||||
import type { TreeRoot } from './TreeRoot/TreeRoot';
|
||||
|
||||
export function useTreeQueryFilter(
|
||||
latestFilterEventRef: Readonly<Ref<TreeViewFilterEvent | undefined>>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ICategory, IScript } from '@/domain/ICategory';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { NodeMetadata, NodeType } from '../NodeContent/NodeMetadata';
|
||||
import type { ICategory, IScript } from '@/domain/ICategory';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { type NodeMetadata, NodeType } from '../NodeContent/NodeMetadata';
|
||||
|
||||
export function parseAllCategories(collection: ICategoryCollection): NodeMetadata[] {
|
||||
return createCategoryNodes(collection.actions);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
import { ReadOnlyTreeNode } from '../TreeView/Node/TreeNode';
|
||||
import { TreeInputNodeData } from '../TreeView/Bindings/TreeInputNodeData';
|
||||
import type { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
import type { ReadOnlyTreeNode } from '../TreeView/Node/TreeNode';
|
||||
import type { TreeInputNodeData } from '../TreeView/Bindings/TreeInputNodeData';
|
||||
|
||||
export function getNodeMetadata(
|
||||
treeNode: ReadOnlyTreeNode,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { useUserSelectionState } from '@/presentation/components/Shared/Hooks/UseUserSelectionState';
|
||||
import { TreeNodeCheckState } from '../TreeView/Node/State/CheckState';
|
||||
import { TreeNodeStateChangedEmittedEvent } from '../TreeView/Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
import type { TreeNodeStateChangedEmittedEvent } from '../TreeView/Bindings/TreeNodeStateChangedEmittedEvent';
|
||||
|
||||
export function useCollectionSelectionStateUpdater(
|
||||
useSelectionStateHook: ReturnType<typeof useUserSelectionState>,
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import {
|
||||
Ref, shallowReadonly, shallowRef,
|
||||
type Ref, shallowReadonly, shallowRef,
|
||||
} from 'vue';
|
||||
import { IScript } from '@/domain/IScript';
|
||||
import { ICategory } from '@/domain/ICategory';
|
||||
import type { IScript } from '@/domain/IScript';
|
||||
import type { ICategory } from '@/domain/ICategory';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import { TreeViewFilterEvent, createFilterRemovedEvent, createFilterTriggeredEvent } from '../TreeView/Bindings/TreeInputFilterEvent';
|
||||
import { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
import { ReadOnlyTreeNode } from '../TreeView/Node/TreeNode';
|
||||
import type { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import type { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import { type TreeViewFilterEvent, createFilterRemovedEvent, createFilterTriggeredEvent } from '../TreeView/Bindings/TreeInputFilterEvent';
|
||||
import { getNodeMetadata } from './TreeNodeMetadataConverter';
|
||||
import { getCategoryNodeId, getScriptNodeId } from './CategoryNodeMetadataConverter';
|
||||
import type { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
import type { ReadOnlyTreeNode } from '../TreeView/Node/TreeNode';
|
||||
|
||||
type TreeNodeFilterResultPredicate = (
|
||||
node: ReadOnlyTreeNode,
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import {
|
||||
type Ref, computed, shallowReadonly,
|
||||
} from 'vue';
|
||||
import { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import type { ICategoryCollection } from '@/domain/ICategoryCollection';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { TreeInputNodeData } from '../TreeView/Bindings/TreeInputNodeData';
|
||||
import { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
import { convertToNodeInput } from './TreeNodeMetadataConverter';
|
||||
import { parseSingleCategory, parseAllCategories } from './CategoryNodeMetadataConverter';
|
||||
import { convertToNodeInput } from './TreeNodeMetadataConverter';
|
||||
import type { TreeInputNodeData } from '../TreeView/Bindings/TreeInputNodeData';
|
||||
import type { NodeMetadata } from '../NodeContent/NodeMetadata';
|
||||
|
||||
export function useTreeViewNodeInput(
|
||||
categoryIdRef: Readonly<Ref<number | undefined>>,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { PlatformTimer } from '@/application/Common/Timing/PlatformTimer';
|
||||
import { Timer } from '@/application/Common/Timing/Timer';
|
||||
import type { Timer } from '@/application/Common/Timing/Timer';
|
||||
|
||||
export type AnimationFunction = (element: Element) => Promise<void>;
|
||||
|
||||
|
||||
@@ -15,9 +15,9 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, PropType } from 'vue';
|
||||
import { defineComponent, type PropType } from 'vue';
|
||||
import { NonCollapsing } from '@/presentation/components/Scripts/View/Cards/NonCollapsingDirective';
|
||||
import { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
import type { IconName } from '@/presentation/components/Shared/Icon/IconName';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
|
||||
export default defineComponent({
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Clipboard } from './Clipboard';
|
||||
import type { Clipboard } from './Clipboard';
|
||||
|
||||
export type NavigatorClipboard = typeof globalThis.navigator.clipboard;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { FunctionKeys } from '@/TypeHelpers';
|
||||
import type { FunctionKeys } from '@/TypeHelpers';
|
||||
import { BrowserClipboard } from './BrowserClipboard';
|
||||
import { Clipboard } from './Clipboard';
|
||||
import type { Clipboard } from './Clipboard';
|
||||
|
||||
export function useClipboard(clipboard: Clipboard = new BrowserClipboard()) {
|
||||
// Bind functions for direct use from destructured assignments such as `const { .. } = ...`.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import { Dialog } from '@/presentation/common/Dialog';
|
||||
import type { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import type { Dialog } from '@/presentation/common/Dialog';
|
||||
import { BrowserDialog } from '@/infrastructure/Dialog/Browser/BrowserDialog';
|
||||
import { decorateWithLogging } from '@/infrastructure/Dialog/LoggingDialogDecorator';
|
||||
import { ClientLoggerFactory } from '../Log/ClientLoggerFactory';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Dialog } from '@/presentation/common/Dialog';
|
||||
import type { Dialog } from '@/presentation/common/Dialog';
|
||||
import { CurrentEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironmentFactory';
|
||||
import { createEnvironmentSpecificLoggedDialog } from './ClientDialogFactory';
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import type { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import { ConsoleLogger } from '@/infrastructure/Log/ConsoleLogger';
|
||||
import { Logger } from '@/application/Common/Log/Logger';
|
||||
import type { Logger } from '@/application/Common/Log/Logger';
|
||||
import { NoopLogger } from '@/infrastructure/Log/NoopLogger';
|
||||
import { WindowInjectedLogger } from '@/infrastructure/Log/WindowInjectedLogger';
|
||||
import { CurrentEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironmentFactory';
|
||||
import { LoggerFactory } from './LoggerFactory';
|
||||
import type { LoggerFactory } from './LoggerFactory';
|
||||
|
||||
export class ClientLoggerFactory implements LoggerFactory {
|
||||
public static readonly Current: LoggerFactory = new ClientLoggerFactory();
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Logger } from '@/application/Common/Log/Logger';
|
||||
import type { Logger } from '@/application/Common/Log/Logger';
|
||||
|
||||
export interface LoggerFactory {
|
||||
readonly logger: Logger;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { ClientLoggerFactory } from './ClientLoggerFactory';
|
||||
import { LoggerFactory } from './LoggerFactory';
|
||||
import type { LoggerFactory } from './LoggerFactory';
|
||||
|
||||
export function useLogger(factory: LoggerFactory = ClientLoggerFactory.Current) {
|
||||
return {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { IApplication } from '@/domain/IApplication';
|
||||
import type { IApplication } from '@/domain/IApplication';
|
||||
|
||||
export function useApplication(application: IApplication) {
|
||||
return {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { onUnmounted } from 'vue';
|
||||
import { EventSubscriptionCollection } from '@/infrastructure/Events/EventSubscriptionCollection';
|
||||
import { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
import type { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
|
||||
export function useAutoUnsubscribedEvents(
|
||||
events: IEventSubscriptionCollection = new EventSubscriptionCollection(),
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { WindowVariables } from '@/infrastructure/WindowVariables/WindowVariables';
|
||||
import type { WindowVariables } from '@/infrastructure/WindowVariables/WindowVariables';
|
||||
|
||||
export function useCodeRunner(
|
||||
window: WindowVariables = globalThis.window,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import { shallowRef, shallowReadonly } from 'vue';
|
||||
import { IApplicationContext, IReadOnlyApplicationContext } from '@/application/Context/IApplicationContext';
|
||||
import { ICategoryCollectionState, IReadOnlyCategoryCollectionState } from '@/application/Context/State/ICategoryCollectionState';
|
||||
import { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
import type { IApplicationContext, IReadOnlyApplicationContext } from '@/application/Context/IApplicationContext';
|
||||
import type { ICategoryCollectionState, IReadOnlyCategoryCollectionState } from '@/application/Context/State/ICategoryCollectionState';
|
||||
import type { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
|
||||
export function useCollectionState(
|
||||
context: IApplicationContext,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { ref } from 'vue';
|
||||
import { IApplicationCode } from '@/application/Context/State/Code/IApplicationCode';
|
||||
import { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
import type { IApplicationCode } from '@/application/Context/State/Code/IApplicationCode';
|
||||
import type { IEventSubscriptionCollection } from '@/infrastructure/Events/IEventSubscriptionCollection';
|
||||
import { useCollectionState } from './UseCollectionState';
|
||||
|
||||
export function useCurrentCode(
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
import type { RuntimeEnvironment } from '@/infrastructure/RuntimeEnvironment/RuntimeEnvironment';
|
||||
|
||||
export function useRuntimeEnvironment(environment: RuntimeEnvironment) {
|
||||
return environment;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { WindowVariables } from '@/infrastructure/WindowVariables/WindowVariables';
|
||||
import type { WindowVariables } from '@/infrastructure/WindowVariables/WindowVariables';
|
||||
|
||||
export function useScriptDiagnosticsCollector(
|
||||
window: Partial<WindowVariables> = globalThis.window,
|
||||
|
||||
@@ -11,11 +11,11 @@
|
||||
<script lang="ts">
|
||||
import {
|
||||
defineComponent,
|
||||
PropType,
|
||||
type PropType,
|
||||
inject,
|
||||
} from 'vue';
|
||||
import { useSvgLoader } from './UseSvgLoader';
|
||||
import { IconName } from './IconName';
|
||||
import type { IconName } from './IconName';
|
||||
|
||||
export default defineComponent({
|
||||
props: {
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import {
|
||||
WatchSource, shallowReadonly, ref, watch,
|
||||
type WatchSource, shallowReadonly, ref, watch,
|
||||
} from 'vue';
|
||||
import { AsyncLazy } from '@/infrastructure/Threading/AsyncLazy';
|
||||
import { IconName } from './IconName';
|
||||
import type { IconName } from './IconName';
|
||||
|
||||
export function useSvgLoader(
|
||||
iconWatcher: WatchSource<IconName>,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { Ref, onBeforeUnmount, watch } from 'vue';
|
||||
import { type Ref, onBeforeUnmount, watch } from 'vue';
|
||||
import { getWindowDomState } from './WindowScrollDomStateAccessor';
|
||||
import { ScrollDomStateAccessor } from './ScrollDomStateAccessor';
|
||||
import type { ScrollDomStateAccessor } from './ScrollDomStateAccessor';
|
||||
|
||||
export function useLockBodyBackgroundScroll(
|
||||
isActive: Ref<boolean>,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ScrollDomStateAccessor } from './ScrollDomStateAccessor';
|
||||
import type { ScrollDomStateAccessor } from './ScrollDomStateAccessor';
|
||||
|
||||
const HtmlElement = document.documentElement;
|
||||
const BodyElement = document.body;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Ref, computed, watch } from 'vue';
|
||||
import { type Ref, computed, watch } from 'vue';
|
||||
|
||||
/**
|
||||
* This function monitors a set of conditions (represented as refs) and
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Ref, watchEffect } from 'vue';
|
||||
import { type Ref, watchEffect } from 'vue';
|
||||
|
||||
/**
|
||||
* Manages focus transitions, ensuring good usability and accessibility.
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import {
|
||||
useFloating, arrow, shift, flip, Placement, offset, Side, Coords, autoUpdate,
|
||||
useFloating, arrow, shift, flip, type Placement, offset, type Side, type Coords, autoUpdate,
|
||||
} from '@floating-ui/vue';
|
||||
import { defineComponent, shallowRef, computed } from 'vue';
|
||||
import { useResizeObserverPolyfill } from '@/presentation/components/Shared/Hooks/UseResizeObserverPolyfill';
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import {
|
||||
defineComponent, PropType, computed,
|
||||
defineComponent, type PropType, computed,
|
||||
} from 'vue';
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { OperatingSystem } from '@/domain/OperatingSystem';
|
||||
|
||||
@@ -19,9 +19,9 @@ import {
|
||||
import { injectKey } from '@/presentation/injectionSymbols';
|
||||
import { NonCollapsing } from '@/presentation/components/Scripts/View/Cards/NonCollapsingDirective';
|
||||
import AppIcon from '@/presentation/components/Shared/Icon/AppIcon.vue';
|
||||
import { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
import type { ReadonlyFilterContext } from '@/application/Context/State/Filter/FilterContext';
|
||||
import type { FilterResult } from '@/application/Context/State/Filter/Result/FilterResult';
|
||||
import type { IEventSubscription } from '@/infrastructure/Events/IEventSource';
|
||||
|
||||
export default defineComponent({
|
||||
components: { AppIcon },
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import { ScriptFileCodeRunner } from '@/infrastructure/CodeRunner/ScriptFileCodeRunner';
|
||||
import { CodeRunner } from '@/application/CodeRunner/CodeRunner';
|
||||
import { Dialog } from '@/presentation/common/Dialog';
|
||||
import type { CodeRunner } from '@/application/CodeRunner/CodeRunner';
|
||||
import type { Dialog } from '@/presentation/common/Dialog';
|
||||
import { ElectronDialog } from '@/infrastructure/Dialog/Electron/ElectronDialog';
|
||||
import { IpcChannel } from '@/presentation/electron/shared/IpcBridging/IpcChannel';
|
||||
import type { IpcChannel } from '@/presentation/electron/shared/IpcBridging/IpcChannel';
|
||||
import { ScriptEnvironmentDiagnosticsCollector } from '@/infrastructure/ScriptDiagnostics/ScriptEnvironmentDiagnosticsCollector';
|
||||
import { ScriptDiagnosticsCollector } from '@/application/ScriptDiagnostics/ScriptDiagnosticsCollector';
|
||||
import type { ScriptDiagnosticsCollector } from '@/application/ScriptDiagnostics/ScriptDiagnosticsCollector';
|
||||
import { registerIpcChannel } from '../shared/IpcBridging/IpcProxy';
|
||||
import { ChannelDefinitionKey, IpcChannelDefinitions } from '../shared/IpcBridging/IpcChannelDefinitions';
|
||||
import { type ChannelDefinitionKey, IpcChannelDefinitions } from '../shared/IpcBridging/IpcChannelDefinitions';
|
||||
|
||||
export function registerAllIpcChannels(
|
||||
registrar: IpcChannelRegistrar = registerIpcChannel,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { app, dialog } from 'electron/main';
|
||||
import { autoUpdater, UpdateInfo } from 'electron-updater';
|
||||
import { ProgressInfo } from 'electron-builder';
|
||||
import { autoUpdater, type UpdateInfo } from 'electron-updater';
|
||||
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
|
||||
import { UpdateProgressBar } from './UpdateProgressBar';
|
||||
import type { ProgressInfo } from 'electron-builder';
|
||||
|
||||
export async function handleAutoUpdate() {
|
||||
if (await askDownloadAndInstall() === DownloadDialogResult.NotNow) {
|
||||
|
||||
@@ -2,10 +2,10 @@ import { existsSync, createWriteStream, type WriteStream } from 'node:fs';
|
||||
import { unlink, mkdir } from 'node:fs/promises';
|
||||
import path from 'node:path';
|
||||
import { app } from 'electron/main';
|
||||
import { UpdateInfo } from 'electron-updater';
|
||||
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
|
||||
import { UpdateProgressBar } from '../UpdateProgressBar';
|
||||
import { retryFileSystemAccess } from './RetryFileSystemAccess';
|
||||
import type { UpdateInfo } from 'electron-updater';
|
||||
import type { ReadableStream } from 'node:stream/web';
|
||||
|
||||
const MAX_PROGRESS_LOG_ENTRIES = 10;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { shell } from 'electron';
|
||||
import { UpdateInfo } from 'electron-updater';
|
||||
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
|
||||
import { GitHubProjectDetails } from '@/domain/Project/GitHubProjectDetails';
|
||||
import { Version } from '@/domain/Version';
|
||||
@@ -12,9 +11,10 @@ import {
|
||||
DownloadErrorChoice, InstallerErrorChoice, IntegrityCheckChoice,
|
||||
ManualUpdateChoice, showUnexpectedError, UnexpectedErrorChoice,
|
||||
} from './Dialogs';
|
||||
import { DownloadUpdateResult, downloadUpdate } from './Downloader';
|
||||
import { type DownloadUpdateResult, downloadUpdate } from './Downloader';
|
||||
import { checkIntegrity } from './Integrity';
|
||||
import { startInstallation } from './Installer';
|
||||
import type { UpdateInfo } from 'electron-updater';
|
||||
|
||||
export function requiresManualUpdate(): boolean {
|
||||
return process.platform === 'darwin';
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { autoUpdater, UpdateInfo } from 'electron-updater';
|
||||
import { autoUpdater, type UpdateInfo } from 'electron-updater';
|
||||
import { ElectronLogger } from '@/infrastructure/Log/ElectronLogger';
|
||||
import { requiresManualUpdate, startManualUpdateProcess } from './ManualUpdater/ManualUpdateCoordinator';
|
||||
import { handleAutoUpdate } from './AutomaticUpdateCoordinator';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user