Skip to content

Commit

Permalink
Merge pull request #158 from Cycling74/fde/tooltips
Browse files Browse the repository at this point in the history
More tooltips
  • Loading branch information
fde31 authored Jun 25, 2024
2 parents 2e5f609 + d37cca9 commit 3f35ed2
Show file tree
Hide file tree
Showing 27 changed files with 197 additions and 92 deletions.
24 changes: 19 additions & 5 deletions src/components/datafile/item.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { ActionIcon, Group, Table, Text } from "@mantine/core";
import { ActionIcon, Group, Table, Text, Tooltip } from "@mantine/core";
import { DataFileRecord } from "../../models/datafile";
import { FC, memo, useCallback } from "react";
import { IconElement } from "../elements/icon";
import { mdiTrashCan } from "@mdi/js";
import { modals } from "@mantine/modals";

export type DataFileListItemProps = {
dataFile: DataFileRecord;
Expand All @@ -15,7 +16,18 @@ export const DataFileListItem: FC<DataFileListItemProps> = memo(function Wrapped
}) {

const onTriggerDelete = useCallback(() => {
onDelete(dataFile);
modals.openConfirmModal({
title: "Delete Audio File",
centered: true,
children: (
<Text size="sm">
Are you sure you want to delete the audio file { `"${dataFile.fileName}"` } from the runner?
</Text>
),
labels: { confirm: "Delete", cancel: "Cancel" },
confirmProps: { color: "red" },
onConfirm: () => onDelete(dataFile)
});
}, [onDelete, dataFile]);

return (
Expand All @@ -27,9 +39,11 @@ export const DataFileListItem: FC<DataFileListItemProps> = memo(function Wrapped
</Table.Td>
<Table.Td>
<Group justify="flex-end">
<ActionIcon color="red" variant="outline" onClick={ onTriggerDelete } >
<IconElement path={ mdiTrashCan } />
</ActionIcon>
<Tooltip label="Delete File">
<ActionIcon color="red" variant="outline" onClick={ onTriggerDelete } >
<IconElement path={ mdiTrashCan } />
</ActionIcon>
</Tooltip>
</Group>
</Table.Td>
</Table.Tr>
Expand Down
2 changes: 1 addition & 1 deletion src/components/datafile/uploadModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ export const DataFileUploadModal: FC<DataFileUploadModalProps> = memo(function W
{
step === UploadStep.Confirm || step === UploadStep.Uploading || step === UploadStep.Error ? (
<>
<Table verticalSpacing="sm">
<Table verticalSpacing="sm" highlightOnHover>
<Table.Thead>
<Table.Tr>
<Table.Th>Filename</Table.Th>
Expand Down
14 changes: 8 additions & 6 deletions src/components/dataref/item.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { FormEvent, FunctionComponent, MouseEvent, memo, useCallback, useEffect, useState } from "react";
import { DataRefRecord } from "../../models/dataref";
import classes from "./datarefs.module.css";
import { ActionIcon, Group, Menu, Select, Table, Text, TextInput } from "@mantine/core";
import { ActionIcon, Group, Menu, Select, Table, Text, TextInput, Tooltip } from "@mantine/core";
import { Seq } from "immutable";
import { DataFileRecord } from "../../models/datafile";
import { IconElement } from "../elements/icon";
Expand Down Expand Up @@ -109,17 +109,19 @@ const DataRefEntry: FunctionComponent<DataRefEntryProps> = memo(function Wrapped
<Group justify="flex-end">
<Menu position="bottom-end">
<Menu.Target>
<ActionIcon variant="subtle" color="gray" >
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
<Tooltip label="Open Buffer Action Menu">
<ActionIcon variant="subtle" color="gray" >
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
</Tooltip>
</Menu.Target>
<Menu.Dropdown>
<Menu.Label>Actions</Menu.Label>
<Menu.Label>Buffer Actions</Menu.Label>
<Menu.Item onClick={ toggleEditing } leftSection={ <IconElement path={ mdiPencil } /> } >
Change Source
</Menu.Item>
<Menu.Item color="red" leftSection={ <IconElement path={ mdiEraser } /> } onClick={ onClearDataRef } disabled={ !dataFile } >
Clear Buffer
Clear Buffer Content
</Menu.Item>
</Menu.Dropdown>
</Menu>
Expand Down
2 changes: 1 addition & 1 deletion src/components/dataref/list.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const DataRefList: FunctionComponent<DataRefListProps> = memo(function WrappedDa
options
}) {
return (
<Table layout="fixed" className={ classes.dataRefTable } verticalSpacing="sm" maw="100%">
<Table layout="fixed" className={ classes.dataRefTable } verticalSpacing="sm" maw="100%" highlightOnHover>
<Table.Thead>
<Table.Tr>
<Table.Th>Buffer</Table.Th>
Expand Down
10 changes: 6 additions & 4 deletions src/components/editor/edge.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import React, { FunctionComponent, useCallback } from "react";
import { getBezierPath, EdgeLabelRenderer, BaseEdge } from "reactflow";
import classes from "./editor.module.css";
import { ActionIcon, CloseIcon } from "@mantine/core";
import { ActionIcon, CloseIcon, Tooltip } from "@mantine/core";
import { EditorEdgeProps } from "./util";

export const RNBOGraphEdgeType = "rnbo-edge";
Expand Down Expand Up @@ -40,9 +40,11 @@ const GraphEdge: FunctionComponent<EditorEdgeProps> = ({
transform: `translate(-50%, -50%) translate(${labelX}px,${labelY}px)`
}}
>
<ActionIcon onClick={ onTriggerDelete } >
<CloseIcon />
</ActionIcon>
<Tooltip label="Delete Connection">
<ActionIcon onClick={ onTriggerDelete } >
<CloseIcon />
</ActionIcon>
</Tooltip>
</div>
</EdgeLabelRenderer>
</>
Expand Down
20 changes: 11 additions & 9 deletions src/components/editor/patcherNode.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { EditorNodeProps, calcPortOffset } from "./util";
import { GraphPatcherNodeRecord, GraphPortRecord, PortDirection } from "../../models/graph";
import EditorPort from "./port";
import classes from "./editor.module.css";
import { ActionIcon, Paper } from "@mantine/core";
import { ActionIcon, Paper, Tooltip } from "@mantine/core";
import Link from "next/link";
import { useRouter } from "next/router";
import { IconElement } from "../elements/icon";
Expand All @@ -28,14 +28,16 @@ const EditorPatcherNode: FunctionComponent<EditorNodeProps> = memo(function Wrap
{ (node as GraphPatcherNodeRecord).index }: { (node as GraphPatcherNodeRecord).patcher }
</div>
<div>
<ActionIcon
component={ Link }
href={{ pathname: "/instances/[index]", query: { ...query, index: (node as GraphPatcherNodeRecord).index } }}
size="md"
variant="transparent"
>
<IconElement path={ mdiCogs } />
</ActionIcon>
<Tooltip label="Open Patcher Instance Control">
<ActionIcon
component={ Link }
href={{ pathname: "/instances/[index]", query: { ...query, index: (node as GraphPatcherNodeRecord).index } }}
size="md"
variant="transparent"
>
<IconElement path={ mdiCogs } />
</ActionIcon>
</Tooltip>
</div>
</div>
<div className={ classes.nodeContent } style={{ height: `${node.contentHeight}px` }} >
Expand Down
37 changes: 37 additions & 0 deletions src/components/elements/responsiveButton.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { ActionIcon, Button, ButtonProps, Tooltip } from "@mantine/core";
import { FC, MouseEvent } from "react";
import { IconElement } from "./icon";

export type ResponsiveButtonProps = {
color?: ButtonProps["color"];
variant?: ButtonProps["variant"];
label: string;
icon: string;
onClick: (e: MouseEvent<HTMLButtonElement>) => any;
tooltip?: string;
}

export const ResponsiveButton: FC<ResponsiveButtonProps> = ({
color,
variant = "default",
label,
icon,
onClick,
tooltip
}) => {

return (
<>
<Tooltip label={ tooltip || "" } disabled={ !tooltip?.length }>
<Button visibleFrom="sm" variant={ variant } color={ color } leftSection={ <IconElement path={ icon } /> } onClick={ onClick } >
{ label }
</Button>
</Tooltip>
<Tooltip label={ tooltip || "" } disabled={ !tooltip?.length }>
<ActionIcon hiddenFrom="sm" variant={ variant } color={ color } onClick={ onClick } size="lg">
<IconElement path={ icon } />
</ActionIcon>
</Tooltip>
</>
);
};
4 changes: 2 additions & 2 deletions src/components/header/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,12 +49,12 @@ export const Header: FunctionComponent<HeaderProps> = memo(function WrappedHeade
<img src={ scheme === "light" ? "/c74-dark.svg" : "/c74-light.svg" } alt="Cycling '74 Logo" />
</Group>
<Group justify="end" align="center" gap="md">
<Tooltip label="Transport Control" >
<Tooltip label="Open Transport Control" >
<ActionIcon variant="transparent" color={ isRolling ? undefined : "gray" } onClick={ onToggleTransportControl } >
<IconElement path={ mdiMetronome } />
</ActionIcon>
</Tooltip>
<Tooltip label="Runner Info" >
<Tooltip label="Open Runner Info" >
<ActionIcon variant="transparent" color="gray" onClick={ onToggleEndpointInfo } >
<IconElement path={ mdiSatelliteUplink } />
</ActionIcon>
Expand Down
4 changes: 1 addition & 3 deletions src/components/instance/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import { InstanceTab } from "../../lib/constants";
import InstanceParameterTab from "./paramTab";
import InstanceMessagesTab from "./messageTab";
import InstanceDataRefsTab from "./datarefTab";
import { useIsMobileDevice } from "../../hooks/useIsMobileDevice";
import { InstanceStateRecord } from "../../models/instance";
import { AppSettingRecord } from "../../models/settings";
import { DataFileRecord } from "../../models/datafile";
Expand Down Expand Up @@ -36,7 +35,6 @@ const Instance: FunctionComponent<InstanceProps> = memo(function WrappedInstance
}) {

const [activeTab, setActiveTab] = useState<InstanceTab>(InstanceTab.Parameters);
const isMobile = useIsMobileDevice();

useEffect(() => {
if (document.activeElement && document.activeElement instanceof HTMLElement) {
Expand All @@ -51,7 +49,7 @@ const Instance: FunctionComponent<InstanceProps> = memo(function WrappedInstance
onChange={ t => setActiveTab(t as InstanceTab) }
keepMounted={ false }
>
<Tabs.List grow={ isMobile } >
<Tabs.List grow>
{
tabs.map(({ icon, label, value }) => (
<Tabs.Tab key={ value } value={ value } leftSection={ <IconElement path={ icon } /> } >
Expand Down
2 changes: 1 addition & 1 deletion src/components/instance/instance.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
display: none;
}

@media (min-width: $mantine-breakpoint-sm) {
@media (min-width: $mantine-breakpoint-xs) {
.tabLabel {
display: block;
}
Expand Down
10 changes: 6 additions & 4 deletions src/components/messages/inport.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -72,12 +72,14 @@ const MessageInportEntry: FunctionComponent<MessageInportEntryProps> = memo(func
</Tooltip>
<Menu position="bottom-end">
<Menu.Target>
<ActionIcon variant="subtle" color="gray" size="md">
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
<Tooltip label="Open Inport Action Menu">
<ActionIcon variant="subtle" color="gray" size="md">
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
</Tooltip>
</Menu.Target>
<Menu.Dropdown>
<Menu.Label>Actions</Menu.Label>
<Menu.Label>Inport Actions</Menu.Label>
<Menu.Item leftSection={ <IconElement path={ mdiCodeBraces } /> } onClick={ toggleMetaEditor }>
Edit Metadata
</Menu.Item>
Expand Down
12 changes: 7 additions & 5 deletions src/components/messages/outport.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { FunctionComponent, memo, useCallback } from "react";
import classes from "./ports.module.css";
import { ActionIcon, Group, Menu, TextInput } from "@mantine/core";
import { ActionIcon, Group, Menu, TextInput, Tooltip } from "@mantine/core";
import { useDisclosure } from "@mantine/hooks";
import { MessagePortRecord } from "../../models/messageport";
import { MetaEditorModal } from "../meta/metaEditorModal";
Expand Down Expand Up @@ -61,12 +61,14 @@ const MessageOutportEntry: FunctionComponent<MessageOutportEntryProps> = memo(fu
/>
<Menu position="bottom-end">
<Menu.Target>
<ActionIcon variant="subtle" color="gray" size="md">
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
<Tooltip label="Open Outport Action Menu">
<ActionIcon variant="subtle" color="gray" size="md">
<IconElement path={ mdiDotsVertical } />
</ActionIcon>
</Tooltip>
</Menu.Target>
<Menu.Dropdown>
<Menu.Label>Actions</Menu.Label>
<Menu.Label>Outport Actions</Menu.Label>
<Menu.Item leftSection={ <IconElement path={ mdiCodeBraces } /> } onClick={ toggleMetaEditor }>
Edit Metadata
</Menu.Item>
Expand Down
2 changes: 1 addition & 1 deletion src/components/meta/metaEditorModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ export const MetaEditorModal: FC<MetaEditorModalProps> = memo(function WrappedPa
<TextInput size="xs" readOnly label={ uiLabels.nameField.label } name={ uiLabels.nameField.name } value={ name } flex={ 1 } />
{
onRestore ? (
<Tooltip label={ uiLabels.restoreTooltip } openDelay={ 500 } >
<Tooltip label={ uiLabels.restoreTooltip } >
<Button onClick={ onTriggerRestore } size="xs" variant="default">
Restore Default
</Button>
Expand Down
8 changes: 4 additions & 4 deletions src/components/nav/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,16 +47,16 @@ const AppNav: FunctionComponent = memo(function WrappedNav() {
/>
<NavLink
icon={ mdiFileMusic }
label="Sample Dependencies"
href={{ pathname: "/dependencies", query: restQuery }}
isActive={ pathname === "/dependencies" }
label="Audio Files"
href={{ pathname: "/files", query: restQuery }}
isActive={ pathname === "/files" }
/>
</Stack>
<Stack className={ classes.navMenu } >
<ExternalNavLink
icon={ mdiHelpCircle }
label="Help & Documentation"
href="https://rnbo.cycling74.com/learn/raspberry-pi-target-overview"
href="https://rnbo.cycling74.com/learn/raspberry-pi-web-interface-guide"
/>
<NavButton onClick={ onToggleSettings } label="Settings" icon={ mdiCog } isActive={ settingsAreShown } />
</Stack>
Expand Down
2 changes: 1 addition & 1 deletion src/components/page/endpoint.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ const EndpointInfo: FunctionComponent = memo(function WrappedSettings() {
>
<Stack gap="xl">
<form onSubmit={ onSubmit } ref={ formRef } >
<Fieldset legend="Connection Endpoint">
<Fieldset legend="Runner Connection Endpoint">
<Stack gap="md">
<TextInput
onChange={ onChangeConfig }
Expand Down
Loading

0 comments on commit 3f35ed2

Please sign in to comment.