diff --git a/src/main/frontend/app/components/file-structure/editor-file-structure.tsx b/src/main/frontend/app/components/file-structure/editor-file-structure.tsx
index 5ba101f3..dc44985d 100644
--- a/src/main/frontend/app/components/file-structure/editor-file-structure.tsx
+++ b/src/main/frontend/app/components/file-structure/editor-file-structure.tsx
@@ -30,6 +30,7 @@ import { useTreeStore } from '~/stores/tree-store'
import EditorFilesDataProvider, { type FileNode } from './editor-data-provider'
import { useFileTreeContextMenu } from './use-file-tree-context-menu'
import FileTreeDialogs from './file-tree-dialogs'
+import TreeActionButton from './tree-action-button'
const TREE_ID = 'editor-files-tree'
@@ -366,8 +367,6 @@ export default function EditorFileStructure() {
const isHighlighted = highlightedItemId === item.index
- const actionBtnClass = 'cursor-pointer rounded p-0.5 hover:bg-hover flex-shrink-0'
-
return (
{item.isFolder && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, editorContextMenu.handleNewFile)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, editorContextMenu.handleNewFile)
- }
+ onAction={() => triggerItemAction(item.index, editorContextMenu.handleNewFile)}
>
-
+
)}
{item.isFolder && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, editorContextMenu.handleNewFolder)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, editorContextMenu.handleNewFolder)
- }
+ onAction={() => triggerItemAction(item.index, editorContextMenu.handleNewFolder)}
>
-
+
)}
{!isRoot && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, editorContextMenu.handleRename)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, editorContextMenu.handleRename)
- }
+ onAction={() => triggerItemAction(item.index, editorContextMenu.handleRename)}
>
-
-
+
+
)}
{!isRoot && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, editorContextMenu.handleDelete)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, editorContextMenu.handleDelete)
- }
+ onAction={() => triggerItemAction(item.index, editorContextMenu.handleDelete)}
>
-
+
)}
diff --git a/src/main/frontend/app/components/file-structure/inline-rename-input.tsx b/src/main/frontend/app/components/file-structure/inline-rename-input.tsx
index 3493140c..5dd1458f 100644
--- a/src/main/frontend/app/components/file-structure/inline-rename-input.tsx
+++ b/src/main/frontend/app/components/file-structure/inline-rename-input.tsx
@@ -1,4 +1,5 @@
import type { TreeItemIndex } from 'react-complex-tree'
+import Input from '~/components/inputs/input'
interface InlineRenameInputProps {
icon: React.ComponentType<{ className?: string }>
@@ -20,9 +21,10 @@ export default function InlineRenameInput({
return (
e.preventDefault()}>
-
onChange(e.target.value)}
onKeyDown={(e) => {
diff --git a/src/main/frontend/app/components/file-structure/studio-file-structure.tsx b/src/main/frontend/app/components/file-structure/studio-file-structure.tsx
index 16676ca7..3242d9cd 100644
--- a/src/main/frontend/app/components/file-structure/studio-file-structure.tsx
+++ b/src/main/frontend/app/components/file-structure/studio-file-structure.tsx
@@ -33,6 +33,7 @@ import { useProjectStore } from '~/stores/project-store'
import { useTreeStore } from '~/stores/tree-store'
import { useStudioContextMenu, detectItemType, getItemName, resolveItemPaths } from './use-studio-context-menu'
import StudioFileTreeDialogs from './studio-file-tree-dialogs'
+import TreeActionButton from './tree-action-button'
const TREE_ID = 'studio-files-tree'
@@ -410,7 +411,6 @@ export default function StudioFileStructure() {
}
const isHighlighted = highlightedItemId == item.index
- const actionBtnClass = 'cursor-pointer rounded p-0.5 hover:bg-hover flex-shrink-0'
return (
{(isRoot || isPlainFolder) && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, studioContextMenu.handleNewConfiguration)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, studioContextMenu.handleNewConfiguration)
- }
+ onAction={() => triggerItemAction(item.index, studioContextMenu.handleNewConfiguration)}
>
-
+
)}
{(isRoot || isPlainFolder) && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, studioContextMenu.handleNewFolder)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, studioContextMenu.handleNewFolder)
- }
+ onAction={() => triggerItemAction(item.index, studioContextMenu.handleNewFolder)}
>
-
+
)}
{isConfigFile && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, studioContextMenu.handleNewAdapter)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, studioContextMenu.handleNewAdapter)
- }
+ onAction={() => triggerItemAction(item.index, studioContextMenu.handleNewAdapter)}
>
-
+
)}
{!isRoot && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, studioContextMenu.handleRename)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, studioContextMenu.handleRename)
- }
+ onAction={() => triggerItemAction(item.index, studioContextMenu.handleRename)}
>
-
+
)}
{!isRoot && (
-
{
- mouseEvent.stopPropagation()
- triggerItemAction(item.index, studioContextMenu.handleDelete)
- }}
- onKeyDown={(keyboardEvent) =>
- keyboardEvent.key === 'Enter' && triggerItemAction(item.index, studioContextMenu.handleDelete)
- }
+ onAction={() => triggerItemAction(item.index, studioContextMenu.handleDelete)}
>
-
+
)}
)
}
- if (!project) return
No Project Selected
+ if (!project) return
No Project Selected
if (providerLoading) return
if (!dataProvider)
- return
No configurations found in src/main/configurations
+ return
No configurations found in src/main/configurations
const toolbarBtnClass = 'cursor-pointer rounded p-1 hover:bg-hover text-foreground'
diff --git a/src/main/frontend/app/components/file-structure/tree-action-button.tsx b/src/main/frontend/app/components/file-structure/tree-action-button.tsx
new file mode 100644
index 00000000..5615bed8
--- /dev/null
+++ b/src/main/frontend/app/components/file-structure/tree-action-button.tsx
@@ -0,0 +1,25 @@
+import React from 'react'
+
+interface TreeActionButtonProps {
+ title: string
+ onAction: () => void
+ children: React.ReactNode
+}
+
+export default function TreeActionButton({ title, onAction, children }: TreeActionButtonProps) {
+ return (
+
{
+ mouseEvent.stopPropagation()
+ onAction()
+ }}
+ onKeyDown={(keyboardEvent) => keyboardEvent.key === 'Enter' && onAction()}
+ >
+ {children}
+
+ )
+}
diff --git a/src/main/frontend/app/components/flow/add-subcomponent-modal.tsx b/src/main/frontend/app/components/flow/add-subcomponent-modal.tsx
index 4d10574a..5c96b1ed 100644
--- a/src/main/frontend/app/components/flow/add-subcomponent-modal.tsx
+++ b/src/main/frontend/app/components/flow/add-subcomponent-modal.tsx
@@ -1,5 +1,6 @@
import { createPortal } from 'react-dom'
import Button from '../inputs/button'
+import Search from '~/components/search/search'
import type { ElementDetails } from '@frankframework/doc-library-core'
import { useMemo, useState, type ChangeEvent } from 'react'
@@ -80,13 +81,7 @@ export default function AddSubcomponentModal({
Add Subcomponent
{/* Paragraph / content */}
-
+
{filteredChildren.length > 0 ? (
@@ -99,7 +94,7 @@ export default function AddSubcomponentModal({
onClick={() => setSelectedElement(child)}
onDoubleClick={handleAddChild}
className={`cursor-pointer px-3 py-2 ${
- isSelected ? 'bg-foreground-active text-background' : 'hover:bg-foreground-active/10'
+ isSelected ? 'bg-foreground-active text-background' : 'hover:bg-hover'
}`}
>
{child.name}
@@ -107,7 +102,7 @@ export default function AddSubcomponentModal({
)
})
) : (
- - No results found
+ - No results found
)}
diff --git a/src/main/frontend/app/components/flow/canvas-context-menu.tsx b/src/main/frontend/app/components/flow/canvas-context-menu.tsx
index 0892cd54..312c0a6c 100644
--- a/src/main/frontend/app/components/flow/canvas-context-menu.tsx
+++ b/src/main/frontend/app/components/flow/canvas-context-menu.tsx
@@ -46,7 +46,7 @@ export default function CanvasContextMenu({
const itemClass = 'flex items-center justify-between gap-6 px-3 py-1.5 text-sm whitespace-nowrap'
const enabledClass = `${itemClass} cursor-pointer hover:bg-hover text-foreground`
- const disabledClass = `${itemClass} cursor-default text-muted-foreground opacity-50`
+ const disabledClass = `${itemClass} cursor-default text-foreground-muted opacity-50`
function menuItem(label: string, onClick: () => void, enabled: boolean, shortcutId?: string) {
return (
@@ -62,7 +62,7 @@ export default function CanvasContextMenu({
}
>
{label}
- {shortcutId &&
{formatShortcut(shortcutId)}}
+ {shortcutId &&
{formatShortcut(shortcutId)}}
)
}
diff --git a/src/main/frontend/app/components/flow/create-node-modal.tsx b/src/main/frontend/app/components/flow/create-node-modal.tsx
index 9ffe6de0..fd69de47 100644
--- a/src/main/frontend/app/components/flow/create-node-modal.tsx
+++ b/src/main/frontend/app/components/flow/create-node-modal.tsx
@@ -3,6 +3,8 @@ import useFlowStore from '~/stores/flow-store'
import useNodeContextStore from '~/stores/node-context-store'
import { useFFDoc } from '@frankframework/doc-library-react'
import Button from '../inputs/button'
+import CloseButton from '../inputs/close-button'
+import Search from '~/components/search/search'
import type { Elements, FFDocJson } from '@frankframework/doc-library-core'
interface CreateNodeModalProperties {
@@ -120,13 +122,7 @@ function CreateNodeModal({
Add Node
Select the element to be added from the list below.
-
handleOnChange(event)}
- className="border-border focus:ring-foreground-active mb-3 w-full rounded border px-3 py-2 focus:ring focus:outline-none"
- />
+
handleOnChange(event)} />
{filteredElements.length > 0 ? (
@@ -139,7 +135,7 @@ function CreateNodeModal({
onClick={() => setSelectedElement(element.name)}
onDoubleClick={handleCreateNode}
className={`cursor-pointer px-3 py-2 ${
- isSelected ? 'bg-foreground-active text-background' : 'hover:bg-foreground-active/10'
+ isSelected ? 'bg-foreground-active text-background' : 'hover:bg-hover'
}`}
>
{element.name}
@@ -147,14 +143,12 @@ function CreateNodeModal({
)
})
) : (
- - No results found
+ - No results found
)}
-
+
diff --git a/src/main/frontend/app/components/git/git-changes.tsx b/src/main/frontend/app/components/git/git-changes.tsx
index 67d13752..55cea6fa 100644
--- a/src/main/frontend/app/components/git/git-changes.tsx
+++ b/src/main/frontend/app/components/git/git-changes.tsx
@@ -80,7 +80,7 @@ function FileSection({
>