Merge branch 'cz/mergeAll' of https://github.com/langflow-ai/langflow into cz/mergeAll
This commit is contained in:
commit
eee3475451
9 changed files with 109 additions and 52 deletions
|
|
@ -39,7 +39,11 @@ import {
|
||||||
scapedJSONStringfy,
|
scapedJSONStringfy,
|
||||||
} from "../../../../utils/reactflowUtils";
|
} from "../../../../utils/reactflowUtils";
|
||||||
import { nodeColors } from "../../../../utils/styleUtils";
|
import { nodeColors } from "../../../../utils/styleUtils";
|
||||||
import { classNames, groupByFamily } from "../../../../utils/utils";
|
import {
|
||||||
|
classNames,
|
||||||
|
groupByFamily,
|
||||||
|
isThereModal,
|
||||||
|
} from "../../../../utils/utils";
|
||||||
import useFetchDataOnMount from "../../../hooks/use-fetch-data-on-mount";
|
import useFetchDataOnMount from "../../../hooks/use-fetch-data-on-mount";
|
||||||
import useHandleOnNewValue from "../../../hooks/use-handle-new-value";
|
import useHandleOnNewValue from "../../../hooks/use-handle-new-value";
|
||||||
import useHandleNodeClass from "../../../hooks/use-handle-node-class";
|
import useHandleNodeClass from "../../../hooks/use-handle-node-class";
|
||||||
|
|
@ -47,6 +51,8 @@ import useHandleRefreshButtonPress from "../../../hooks/use-handle-refresh-butto
|
||||||
import OutputModal from "../outputModal";
|
import OutputModal from "../outputModal";
|
||||||
import TooltipRenderComponent from "../tooltipRenderComponent";
|
import TooltipRenderComponent from "../tooltipRenderComponent";
|
||||||
import { TEXT_FIELD_TYPES } from "./constants";
|
import { TEXT_FIELD_TYPES } from "./constants";
|
||||||
|
import { useShortcutsStore } from "../../../../stores/shortcuts";
|
||||||
|
import { useHotkeys } from "react-hotkeys-hook";
|
||||||
|
|
||||||
export default function ParameterComponent({
|
export default function ParameterComponent({
|
||||||
left,
|
left,
|
||||||
|
|
@ -63,6 +69,7 @@ export default function ParameterComponent({
|
||||||
proxy,
|
proxy,
|
||||||
showNode,
|
showNode,
|
||||||
index = "",
|
index = "",
|
||||||
|
selected,
|
||||||
}: ParameterComponentType): JSX.Element {
|
}: ParameterComponentType): JSX.Element {
|
||||||
const ref = useRef<HTMLDivElement>(null);
|
const ref = useRef<HTMLDivElement>(null);
|
||||||
const refHtml = useRef<HTMLDivElement & ReactNode>(null);
|
const refHtml = useRef<HTMLDivElement & ReactNode>(null);
|
||||||
|
|
@ -90,6 +97,19 @@ export default function ParameterComponent({
|
||||||
"unknown"
|
"unknown"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const preventDefault = true;
|
||||||
|
|
||||||
|
function handleOutputWShortcut() {
|
||||||
|
if (!displayOutputPreview || unknownOutput) return;
|
||||||
|
if (isThereModal() && !openOutputModal) return;
|
||||||
|
if (selected && !left) {
|
||||||
|
setOpenOutputModal((state) => !state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const output = useShortcutsStore((state) => state.output);
|
||||||
|
useHotkeys(output, handleOutputWShortcut, { preventDefault });
|
||||||
|
|
||||||
const { handleOnNewValue: handleOnNewValueHook } = useHandleOnNewValue(
|
const { handleOnNewValue: handleOnNewValueHook } = useHandleOnNewValue(
|
||||||
data,
|
data,
|
||||||
name,
|
name,
|
||||||
|
|
@ -98,7 +118,7 @@ export default function ParameterComponent({
|
||||||
debouncedHandleUpdateValues,
|
debouncedHandleUpdateValues,
|
||||||
setNode,
|
setNode,
|
||||||
renderTooltips,
|
renderTooltips,
|
||||||
setIsLoading
|
setIsLoading,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { handleNodeClass: handleNodeClassHook } = useHandleNodeClass(
|
const { handleNodeClass: handleNodeClassHook } = useHandleNodeClass(
|
||||||
|
|
@ -107,7 +127,7 @@ export default function ParameterComponent({
|
||||||
takeSnapshot,
|
takeSnapshot,
|
||||||
setNode,
|
setNode,
|
||||||
updateNodeInternals,
|
updateNodeInternals,
|
||||||
renderTooltips
|
renderTooltips,
|
||||||
);
|
);
|
||||||
|
|
||||||
const { handleRefreshButtonPress: handleRefreshButtonPressHook } =
|
const { handleRefreshButtonPress: handleRefreshButtonPressHook } =
|
||||||
|
|
@ -116,7 +136,7 @@ export default function ParameterComponent({
|
||||||
let disabled =
|
let disabled =
|
||||||
edges.some(
|
edges.some(
|
||||||
(edge) =>
|
(edge) =>
|
||||||
edge.targetHandle === scapedJSONStringfy(proxy ? { ...id, proxy } : id)
|
edge.targetHandle === scapedJSONStringfy(proxy ? { ...id, proxy } : id),
|
||||||
) ?? false;
|
) ?? false;
|
||||||
|
|
||||||
const handleRefreshButtonPress = async (name, data) => {
|
const handleRefreshButtonPress = async (name, data) => {
|
||||||
|
|
@ -129,12 +149,12 @@ export default function ParameterComponent({
|
||||||
handleUpdateValues,
|
handleUpdateValues,
|
||||||
setNode,
|
setNode,
|
||||||
renderTooltips,
|
renderTooltips,
|
||||||
setIsLoading
|
setIsLoading,
|
||||||
);
|
);
|
||||||
|
|
||||||
const handleOnNewValue = async (
|
const handleOnNewValue = async (
|
||||||
newValue: string | string[] | boolean | Object[],
|
newValue: string | string[] | boolean | Object[],
|
||||||
skipSnapshot: boolean | undefined = false
|
skipSnapshot: boolean | undefined = false,
|
||||||
): Promise<void> => {
|
): Promise<void> => {
|
||||||
handleOnNewValueHook(newValue, skipSnapshot);
|
handleOnNewValueHook(newValue, skipSnapshot);
|
||||||
};
|
};
|
||||||
|
|
@ -216,7 +236,7 @@ export default function ParameterComponent({
|
||||||
className={classNames(
|
className={classNames(
|
||||||
left ? "my-12 -ml-0.5 " : " my-12 -mr-0.5 ",
|
left ? "my-12 -ml-0.5 " : " my-12 -mr-0.5 ",
|
||||||
"h-3 w-3 rounded-full border-2 bg-background",
|
"h-3 w-3 rounded-full border-2 bg-background",
|
||||||
!showNode ? "mt-0" : ""
|
!showNode ? "mt-0" : "",
|
||||||
)}
|
)}
|
||||||
style={{
|
style={{
|
||||||
borderColor: color ?? nodeColors.unknown,
|
borderColor: color ?? nodeColors.unknown,
|
||||||
|
|
@ -286,7 +306,7 @@ export default function ParameterComponent({
|
||||||
"h-5 w-5 rounded-md",
|
"h-5 w-5 rounded-md",
|
||||||
displayOutputPreview && !unknownOutput
|
displayOutputPreview && !unknownOutput
|
||||||
? " hover:bg-secondary-foreground/5 hover:text-medium-indigo"
|
? " hover:bg-secondary-foreground/5 hover:text-medium-indigo"
|
||||||
: " cursor-not-allowed text-muted-foreground"
|
: " cursor-not-allowed text-muted-foreground",
|
||||||
)}
|
)}
|
||||||
name={"ScanEye"}
|
name={"ScanEye"}
|
||||||
/>
|
/>
|
||||||
|
|
@ -336,7 +356,7 @@ export default function ParameterComponent({
|
||||||
}
|
}
|
||||||
className={classNames(
|
className={classNames(
|
||||||
left ? "-ml-0.5" : "-mr-0.5",
|
left ? "-ml-0.5" : "-mr-0.5",
|
||||||
"h-3 w-3 rounded-full border-2 bg-background"
|
"h-3 w-3 rounded-full border-2 bg-background",
|
||||||
)}
|
)}
|
||||||
style={{ borderColor: color ?? nodeColors.unknown }}
|
style={{ borderColor: color ?? nodeColors.unknown }}
|
||||||
onClick={() => setFilterEdge(groupedEdge.current)}
|
onClick={() => setFilterEdge(groupedEdge.current)}
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ import useValidationStatusString from "../hooks/use-validation-status-string";
|
||||||
import getFieldTitle from "../utils/get-field-title";
|
import getFieldTitle from "../utils/get-field-title";
|
||||||
import sortFields from "../utils/sort-fields";
|
import sortFields from "../utils/sort-fields";
|
||||||
import ParameterComponent from "./components/parameterComponent";
|
import ParameterComponent from "./components/parameterComponent";
|
||||||
|
import { useHotkeys } from "react-hotkeys-hook";
|
||||||
|
|
||||||
export default function GenericNode({
|
export default function GenericNode({
|
||||||
data,
|
data,
|
||||||
|
|
@ -48,6 +49,7 @@ export default function GenericNode({
|
||||||
xPos?: number;
|
xPos?: number;
|
||||||
yPos?: number;
|
yPos?: number;
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
|
const preventDefault = true;
|
||||||
const types = useTypesStore((state) => state.types);
|
const types = useTypesStore((state) => state.types);
|
||||||
const templates = useTypesStore((state) => state.templates);
|
const templates = useTypesStore((state) => state.templates);
|
||||||
const deleteNode = useFlowStore((state) => state.deleteNode);
|
const deleteNode = useFlowStore((state) => state.deleteNode);
|
||||||
|
|
@ -58,10 +60,10 @@ export default function GenericNode({
|
||||||
const setErrorData = useAlertStore((state) => state.setErrorData);
|
const setErrorData = useAlertStore((state) => state.setErrorData);
|
||||||
const isDark = useDarkStore((state) => state.dark);
|
const isDark = useDarkStore((state) => state.dark);
|
||||||
const buildStatus = useFlowStore(
|
const buildStatus = useFlowStore(
|
||||||
(state) => state.flowBuildStatus[data.id]?.status
|
(state) => state.flowBuildStatus[data.id]?.status,
|
||||||
);
|
);
|
||||||
const lastRunTime = useFlowStore(
|
const lastRunTime = useFlowStore(
|
||||||
(state) => state.flowBuildStatus[data.id]?.timestamp
|
(state) => state.flowBuildStatus[data.id]?.timestamp,
|
||||||
);
|
);
|
||||||
const takeSnapshot = useFlowsManagerStore((state) => state.takeSnapshot);
|
const takeSnapshot = useFlowsManagerStore((state) => state.takeSnapshot);
|
||||||
|
|
||||||
|
|
@ -69,7 +71,7 @@ export default function GenericNode({
|
||||||
const [nodeName, setNodeName] = useState(data.node!.display_name);
|
const [nodeName, setNodeName] = useState(data.node!.display_name);
|
||||||
const [inputDescription, setInputDescription] = useState(false);
|
const [inputDescription, setInputDescription] = useState(false);
|
||||||
const [nodeDescription, setNodeDescription] = useState(
|
const [nodeDescription, setNodeDescription] = useState(
|
||||||
data.node?.description!
|
data.node?.description!,
|
||||||
);
|
);
|
||||||
const [isOutdated, setIsOutdated] = useState(false);
|
const [isOutdated, setIsOutdated] = useState(false);
|
||||||
const [validationStatus, setValidationStatus] =
|
const [validationStatus, setValidationStatus] =
|
||||||
|
|
@ -87,7 +89,7 @@ export default function GenericNode({
|
||||||
data.node!,
|
data.node!,
|
||||||
setNode,
|
setNode,
|
||||||
setIsOutdated,
|
setIsOutdated,
|
||||||
updateNodeInternals
|
updateNodeInternals,
|
||||||
);
|
);
|
||||||
|
|
||||||
const name = nodeIconsLucide[data.type] ? data.type : types[data.type];
|
const name = nodeIconsLucide[data.type] ? data.type : types[data.type];
|
||||||
|
|
@ -118,12 +120,12 @@ export default function GenericNode({
|
||||||
selected: boolean,
|
selected: boolean,
|
||||||
showNode: boolean,
|
showNode: boolean,
|
||||||
buildStatus: BuildStatus | undefined,
|
buildStatus: BuildStatus | undefined,
|
||||||
validationStatus: VertexBuildTypeAPI | null
|
validationStatus: VertexBuildTypeAPI | null,
|
||||||
) => {
|
) => {
|
||||||
const specificClassFromBuildStatus = getSpecificClassFromBuildStatus(
|
const specificClassFromBuildStatus = getSpecificClassFromBuildStatus(
|
||||||
buildStatus,
|
buildStatus,
|
||||||
validationStatus,
|
validationStatus,
|
||||||
isDark
|
isDark,
|
||||||
);
|
);
|
||||||
|
|
||||||
const baseBorderClass = getBaseBorderClass(selected);
|
const baseBorderClass = getBaseBorderClass(selected);
|
||||||
|
|
@ -132,7 +134,7 @@ export default function GenericNode({
|
||||||
baseBorderClass,
|
baseBorderClass,
|
||||||
nodeSizeClass,
|
nodeSizeClass,
|
||||||
"generic-node-div group/node",
|
"generic-node-div group/node",
|
||||||
specificClassFromBuildStatus
|
specificClassFromBuildStatus,
|
||||||
);
|
);
|
||||||
return names;
|
return names;
|
||||||
};
|
};
|
||||||
|
|
@ -175,7 +177,7 @@ export default function GenericNode({
|
||||||
showNode,
|
showNode,
|
||||||
isEmoji,
|
isEmoji,
|
||||||
nodeIconFragment,
|
nodeIconFragment,
|
||||||
checkNodeIconFragment
|
checkNodeIconFragment,
|
||||||
);
|
);
|
||||||
|
|
||||||
function countHandles(): void {
|
function countHandles(): void {
|
||||||
|
|
@ -233,6 +235,25 @@ export default function GenericNode({
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function handleUpdateCodeWShortcut() {
|
||||||
|
if (isOutdated && selected) {
|
||||||
|
handleUpdateCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function handlePlayWShortcut() {
|
||||||
|
if (buildStatus === BuildStatus.BUILDING || isBuilding || !selected) return;
|
||||||
|
setValidationStatus(null);
|
||||||
|
console.log(data.node?.display_name);
|
||||||
|
buildFlow({ stopNodeId: data.id });
|
||||||
|
}
|
||||||
|
|
||||||
|
const update = useShortcutsStore((state) => state.update);
|
||||||
|
const play = useShortcutsStore((state) => state.play);
|
||||||
|
|
||||||
|
useHotkeys(update, handleUpdateCodeWShortcut, { preventDefault });
|
||||||
|
useHotkeys(play, handlePlayWShortcut, { preventDefault });
|
||||||
|
|
||||||
const shortcuts = useShortcutsStore((state) => state.shortcuts);
|
const shortcuts = useShortcutsStore((state) => state.shortcuts);
|
||||||
|
|
||||||
const memoizedNodeToolbarComponent = useMemo(() => {
|
const memoizedNodeToolbarComponent = useMemo(() => {
|
||||||
|
|
@ -288,7 +309,7 @@ export default function GenericNode({
|
||||||
selected,
|
selected,
|
||||||
showNode,
|
showNode,
|
||||||
buildStatus,
|
buildStatus,
|
||||||
validationStatus
|
validationStatus,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{data.node?.beta && showNode && (
|
{data.node?.beta && showNode && (
|
||||||
|
|
@ -377,6 +398,7 @@ export default function GenericNode({
|
||||||
data.node!.template[templateField].show &&
|
data.node!.template[templateField].show &&
|
||||||
!data.node!.template[templateField].advanced && (
|
!data.node!.template[templateField].advanced && (
|
||||||
<ParameterComponent
|
<ParameterComponent
|
||||||
|
selected={selected}
|
||||||
index={idx.toString()}
|
index={idx.toString()}
|
||||||
key={scapedJSONStringfy({
|
key={scapedJSONStringfy({
|
||||||
inputTypes:
|
inputTypes:
|
||||||
|
|
@ -419,7 +441,7 @@ export default function GenericNode({
|
||||||
}
|
}
|
||||||
title={getFieldTitle(
|
title={getFieldTitle(
|
||||||
data.node?.template!,
|
data.node?.template!,
|
||||||
templateField
|
templateField,
|
||||||
)}
|
)}
|
||||||
info={data.node?.template[templateField].info}
|
info={data.node?.template[templateField].info}
|
||||||
name={templateField}
|
name={templateField}
|
||||||
|
|
@ -447,9 +469,10 @@ export default function GenericNode({
|
||||||
proxy={data.node?.template[templateField].proxy}
|
proxy={data.node?.template[templateField].proxy}
|
||||||
showNode={showNode}
|
showNode={showNode}
|
||||||
/>
|
/>
|
||||||
)
|
),
|
||||||
)}
|
)}
|
||||||
<ParameterComponent
|
<ParameterComponent
|
||||||
|
selected={selected}
|
||||||
key={scapedJSONStringfy({
|
key={scapedJSONStringfy({
|
||||||
baseClasses: data.node!.base_classes,
|
baseClasses: data.node!.base_classes,
|
||||||
id: data.id,
|
id: data.id,
|
||||||
|
|
@ -610,7 +633,7 @@ export default function GenericNode({
|
||||||
!data.node?.description) &&
|
!data.node?.description) &&
|
||||||
nameEditable
|
nameEditable
|
||||||
? "font-light italic"
|
? "font-light italic"
|
||||||
: ""
|
: "",
|
||||||
)}
|
)}
|
||||||
onClick={(e) => {
|
onClick={(e) => {
|
||||||
setInputDescription(true);
|
setInputDescription(true);
|
||||||
|
|
@ -633,6 +656,7 @@ export default function GenericNode({
|
||||||
{data.node!.template[templateField].show &&
|
{data.node!.template[templateField].show &&
|
||||||
!data.node!.template[templateField].advanced ? (
|
!data.node!.template[templateField].advanced ? (
|
||||||
<ParameterComponent
|
<ParameterComponent
|
||||||
|
selected={selected}
|
||||||
index={idx.toString()}
|
index={idx.toString()}
|
||||||
key={scapedJSONStringfy({
|
key={scapedJSONStringfy({
|
||||||
inputTypes:
|
inputTypes:
|
||||||
|
|
@ -672,13 +696,13 @@ export default function GenericNode({
|
||||||
}
|
}
|
||||||
title={getFieldTitle(
|
title={getFieldTitle(
|
||||||
data.node?.template!,
|
data.node?.template!,
|
||||||
templateField
|
templateField,
|
||||||
)}
|
)}
|
||||||
info={data.node?.template[templateField].info}
|
info={data.node?.template[templateField].info}
|
||||||
name={templateField}
|
name={templateField}
|
||||||
tooltipTitle={
|
tooltipTitle={
|
||||||
data.node?.template[templateField].input_types?.join(
|
data.node?.template[templateField].input_types?.join(
|
||||||
"\n"
|
"\n",
|
||||||
) ?? data.node?.template[templateField].type
|
) ?? data.node?.template[templateField].type
|
||||||
}
|
}
|
||||||
required={data.node!.template[templateField].required}
|
required={data.node!.template[templateField].required}
|
||||||
|
|
@ -705,13 +729,14 @@ export default function GenericNode({
|
||||||
<div
|
<div
|
||||||
className={classNames(
|
className={classNames(
|
||||||
Object.keys(data.node!.template).length < 1 ? "hidden" : "",
|
Object.keys(data.node!.template).length < 1 ? "hidden" : "",
|
||||||
"flex-max-width justify-center"
|
"flex-max-width justify-center",
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
{" "}
|
{" "}
|
||||||
</div>
|
</div>
|
||||||
{data.node!.base_classes.length > 0 && (
|
{data.node!.base_classes.length > 0 && (
|
||||||
<ParameterComponent
|
<ParameterComponent
|
||||||
|
selected={selected}
|
||||||
key={scapedJSONStringfy({
|
key={scapedJSONStringfy({
|
||||||
baseClasses: data.node!.base_classes,
|
baseClasses: data.node!.base_classes,
|
||||||
id: data.id,
|
id: data.id,
|
||||||
|
|
|
||||||
|
|
@ -12,35 +12,35 @@ export default function RenderIcons({
|
||||||
shortcutWPlus: string[];
|
shortcutWPlus: string[];
|
||||||
}): JSX.Element {
|
}): JSX.Element {
|
||||||
return hasShift ? (
|
return hasShift ? (
|
||||||
<>
|
<span className="flex gap-0.5 text-xs">
|
||||||
{isMac ? (
|
{isMac ? (
|
||||||
<ForwardedIconComponent name="Command" className="h-4 w-4" />
|
<ForwardedIconComponent name="Command" className="h-3 w-3" />
|
||||||
) : (
|
) : (
|
||||||
filteredShortcut[0]
|
filteredShortcut[0]
|
||||||
)}
|
)}
|
||||||
<ForwardedIconComponent name="ArrowBigUp" className="ml-1 h-5 w-5" />
|
<ForwardedIconComponent name="ArrowBigUp" className=" h-4 w-4" />
|
||||||
{filteredShortcut.map((key, idx) => {
|
{filteredShortcut.map((key, idx) => {
|
||||||
if (idx > 0) {
|
if (idx > 0) {
|
||||||
return <span className="ml-1"> {key.toUpperCase()} </span>;
|
return <span className=""> {key.toUpperCase()} </span>;
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</>
|
</span>
|
||||||
) : (
|
) : (
|
||||||
<>
|
<span className="flex gap-1 text-xs">
|
||||||
{shortcutWPlus[0].toLowerCase() === "space" ? (
|
{shortcutWPlus[0].toLowerCase() === "space" ? (
|
||||||
"Space"
|
"Space"
|
||||||
) : shortcutWPlus[0].length <= 1 ? (
|
) : shortcutWPlus[0].length <= 1 ? (
|
||||||
shortcutWPlus[0]
|
shortcutWPlus[0]
|
||||||
) : isMac ? (
|
) : isMac ? (
|
||||||
<ForwardedIconComponent name="Command" className="h-4 w-4" />
|
<ForwardedIconComponent name="Command" className="h-3 w-3" />
|
||||||
) : (
|
) : (
|
||||||
shortcutWPlus[0]
|
shortcutWPlus[0]
|
||||||
)}
|
)}
|
||||||
{shortcutWPlus.map((key, idx) => {
|
{shortcutWPlus.map((key, idx) => {
|
||||||
if (idx > 0) {
|
if (idx > 0) {
|
||||||
return <span className="ml-0.5"> {key.toUpperCase()} </span>;
|
return <span className=""> {key.toUpperCase()} </span>;
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</>
|
</span>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -758,7 +758,7 @@ export const defaultShortcuts = [
|
||||||
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + D`,
|
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + D`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Share",
|
name: "Component Share",
|
||||||
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + Shift + S`,
|
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + Shift + S`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|
@ -799,7 +799,7 @@ export const defaultShortcuts = [
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "API",
|
name: "API",
|
||||||
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + R`,
|
shortcut: `R`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Download",
|
name: "Download",
|
||||||
|
|
@ -817,6 +817,14 @@ export const defaultShortcuts = [
|
||||||
name: "Flow Share",
|
name: "Flow Share",
|
||||||
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + B`,
|
shortcut: `${IS_MAC ? "Cmd" : "Ctrl"} + B`,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Play",
|
||||||
|
shortcut: `P`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Output Inspection",
|
||||||
|
shortcut: `O`,
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
export const DEFAULT_TABLE_ALERT_MSG = `Oops! It seems there's no data to display right now. Please check back later.`;
|
export const DEFAULT_TABLE_ALERT_MSG = `Oops! It seems there's no data to display right now. Please check back later.`;
|
||||||
|
|
|
||||||
|
|
@ -170,19 +170,17 @@ export default function NodeToolbarComponent({
|
||||||
|
|
||||||
const advanced = useShortcutsStore((state) => state.advanced);
|
const advanced = useShortcutsStore((state) => state.advanced);
|
||||||
const minimize = useShortcutsStore((state) => state.minimize);
|
const minimize = useShortcutsStore((state) => state.minimize);
|
||||||
const share = useShortcutsStore((state) => state.share);
|
const component = useShortcutsStore((state) => state.component);
|
||||||
const save = useShortcutsStore((state) => state.save);
|
const save = useShortcutsStore((state) => state.save);
|
||||||
const docs = useShortcutsStore((state) => state.docs);
|
const docs = useShortcutsStore((state) => state.docs);
|
||||||
const code = useShortcutsStore((state) => state.code);
|
const code = useShortcutsStore((state) => state.code);
|
||||||
const group = useShortcutsStore((state) => state.group);
|
const group = useShortcutsStore((state) => state.group);
|
||||||
const update = useShortcutsStore((state) => state.update);
|
|
||||||
const download = useShortcutsStore((state) => state.download);
|
const download = useShortcutsStore((state) => state.download);
|
||||||
const freeze = useShortcutsStore((state) => state.freeze);
|
const freeze = useShortcutsStore((state) => state.freeze);
|
||||||
|
|
||||||
useHotkeys(minimize, handleMinimizeWShortcut, { preventDefault });
|
useHotkeys(minimize, handleMinimizeWShortcut, { preventDefault });
|
||||||
useHotkeys(update, handleUpdateWShortcut, { preventDefault });
|
|
||||||
useHotkeys(group, handleGroupWShortcut, { preventDefault });
|
useHotkeys(group, handleGroupWShortcut, { preventDefault });
|
||||||
useHotkeys(share, handleShareWShortcut, { preventDefault });
|
useHotkeys(component, handleShareWShortcut, { preventDefault });
|
||||||
useHotkeys(code, handleCodeWShortcut, { preventDefault });
|
useHotkeys(code, handleCodeWShortcut, { preventDefault });
|
||||||
useHotkeys(advanced, handleAdvancedWShortcut, { preventDefault });
|
useHotkeys(advanced, handleAdvancedWShortcut, { preventDefault });
|
||||||
useHotkeys(save, handleSaveWShortcut, { preventDefault });
|
useHotkeys(save, handleSaveWShortcut, { preventDefault });
|
||||||
|
|
@ -352,7 +350,7 @@ export default function NodeToolbarComponent({
|
||||||
<div className="flex justify-center">
|
<div className="flex justify-center">
|
||||||
<span> {name} </span>
|
<span> {name} </span>
|
||||||
<span
|
<span
|
||||||
className={`ml-3 flex items-center rounded-sm bg-muted px-1 py-[0.2] text-muted-foreground`}
|
className={`ml-3 flex items-center rounded-sm bg-muted px-1.5 py-[0.1em] text-lg text-muted-foreground`}
|
||||||
>
|
>
|
||||||
<RenderIcons
|
<RenderIcons
|
||||||
isMac={isMac}
|
isMac={isMac}
|
||||||
|
|
@ -614,7 +612,8 @@ export default function NodeToolbarComponent({
|
||||||
>
|
>
|
||||||
<ToolbarSelectItem
|
<ToolbarSelectItem
|
||||||
shortcut={
|
shortcut={
|
||||||
shortcuts.find((obj) => obj.name === "Share")?.shortcut!
|
shortcuts.find((obj) => obj.name === "Component Share")
|
||||||
|
?.shortcut!
|
||||||
}
|
}
|
||||||
value={"Share"}
|
value={"Share"}
|
||||||
icon={"Share3"}
|
icon={"Share3"}
|
||||||
|
|
@ -707,7 +706,7 @@ export default function NodeToolbarComponent({
|
||||||
/>{" "}
|
/>{" "}
|
||||||
<span className="">Delete</span>{" "}
|
<span className="">Delete</span>{" "}
|
||||||
<span
|
<span
|
||||||
className={`justify absolute right-2 top-2 flex items-center rounded-sm px-1 py-[0.2] ${deleteIsFocus ? " " : "bg-muted"}`}
|
className={` absolute right-2 top-2 flex items-center justify-center rounded-sm px-1 py-[0.2] ${deleteIsFocus ? " " : "bg-muted"}`}
|
||||||
>
|
>
|
||||||
<IconComponent
|
<IconComponent
|
||||||
name="Delete"
|
name="Delete"
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ export default function ToolbarSelectItem({
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const filteredShortcut = fixedShortcut.filter(
|
const filteredShortcut = fixedShortcut.filter(
|
||||||
(key) => !key.toLowerCase().includes("shift")
|
(key) => !key.toLowerCase().includes("shift"),
|
||||||
);
|
);
|
||||||
let shortcutWPlus: string[] = [];
|
let shortcutWPlus: string[] = [];
|
||||||
if (!hasShift) shortcutWPlus = filteredShortcut.join("+").split(" ");
|
if (!hasShift) shortcutWPlus = filteredShortcut.join("+").split(" ");
|
||||||
|
|
@ -38,7 +38,7 @@ export default function ToolbarSelectItem({
|
||||||
{value}
|
{value}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<span
|
||||||
className={`absolute right-2 top-[0.43em] flex items-center rounded-sm bg-muted px-1 py-[0.2] text-muted-foreground `}
|
className={`absolute right-2 top-[0.43em] flex items-center rounded-sm bg-muted px-1.5 py-[0.1em] text-muted-foreground `}
|
||||||
>
|
>
|
||||||
<RenderIcons
|
<RenderIcons
|
||||||
isMac={isMac}
|
isMac={isMac}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@ export const useShortcutsStore = create<shortcutsStoreType>((set, get) => ({
|
||||||
setShortcuts: (newShortcuts) => {
|
setShortcuts: (newShortcuts) => {
|
||||||
set({ shortcuts: newShortcuts });
|
set({ shortcuts: newShortcuts });
|
||||||
},
|
},
|
||||||
|
output: "o",
|
||||||
|
play: "p",
|
||||||
flow: "mod+b",
|
flow: "mod+b",
|
||||||
undo: "mod+z",
|
undo: "mod+z",
|
||||||
redo: "mod+y",
|
redo: "mod+y",
|
||||||
|
|
@ -16,14 +18,14 @@ export const useShortcutsStore = create<shortcutsStoreType>((set, get) => ({
|
||||||
code: "space",
|
code: "space",
|
||||||
copy: "mod+c",
|
copy: "mod+c",
|
||||||
duplicate: "mod+d",
|
duplicate: "mod+d",
|
||||||
share: "mod+shift+s",
|
component: "mod+shift+s",
|
||||||
docs: "mod+shift+d",
|
docs: "mod+shift+d",
|
||||||
save: "mod+s",
|
save: "mod+s",
|
||||||
delete: "backspace",
|
delete: "backspace",
|
||||||
group: "mod+g",
|
group: "mod+g",
|
||||||
cut: "mod+x",
|
cut: "mod+x",
|
||||||
paste: "mod+v",
|
paste: "mod+v",
|
||||||
api: "mod+shift+r",
|
api: "r",
|
||||||
update: "mod+u",
|
update: "mod+u",
|
||||||
download: "mod+j",
|
download: "mod+j",
|
||||||
freeze: "mod+f",
|
freeze: "mod+f",
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ export type DropDownComponentType = {
|
||||||
children?: ReactNode;
|
children?: ReactNode;
|
||||||
};
|
};
|
||||||
export type ParameterComponentType = {
|
export type ParameterComponentType = {
|
||||||
|
selected: boolean;
|
||||||
data: NodeDataType;
|
data: NodeDataType;
|
||||||
title: string;
|
title: string;
|
||||||
id: sourceHandleType | targetHandleType;
|
id: sourceHandleType | targetHandleType;
|
||||||
|
|
@ -491,7 +492,7 @@ export type ChatInputType = {
|
||||||
isDragging: boolean;
|
isDragging: boolean;
|
||||||
files: FilePreviewType[];
|
files: FilePreviewType[];
|
||||||
setFiles: (
|
setFiles: (
|
||||||
files: FilePreviewType[] | ((prev: FilePreviewType[]) => FilePreviewType[])
|
files: FilePreviewType[] | ((prev: FilePreviewType[]) => FilePreviewType[]),
|
||||||
) => void;
|
) => void;
|
||||||
chatValue: string;
|
chatValue: string;
|
||||||
inputRef: {
|
inputRef: {
|
||||||
|
|
@ -593,7 +594,7 @@ export type chatMessagePropsType = {
|
||||||
updateChat: (
|
updateChat: (
|
||||||
chat: ChatMessageType,
|
chat: ChatMessageType,
|
||||||
message: string,
|
message: string,
|
||||||
stream_url?: string
|
stream_url?: string,
|
||||||
) => void;
|
) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -685,12 +686,12 @@ export type codeTabsPropsType = {
|
||||||
value: string,
|
value: string,
|
||||||
node: NodeType,
|
node: NodeType,
|
||||||
template: TemplateVariableType,
|
template: TemplateVariableType,
|
||||||
tweak: tweakType
|
tweak: tweakType,
|
||||||
) => string;
|
) => string;
|
||||||
buildTweakObject?: (
|
buildTweakObject?: (
|
||||||
tw: string,
|
tw: string,
|
||||||
changes: string | string[] | boolean | number | Object[] | Object,
|
changes: string | string[] | boolean | number | Object[] | Object,
|
||||||
template: TemplateVariableType
|
template: TemplateVariableType,
|
||||||
) => Promise<string | void>;
|
) => Promise<string | void>;
|
||||||
};
|
};
|
||||||
activeTweaks?: boolean;
|
activeTweaks?: boolean;
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,8 @@ export type StoreComponentResponse = {
|
||||||
|
|
||||||
export type shortcutsStoreType = {
|
export type shortcutsStoreType = {
|
||||||
updateUniqueShortcut: (name: string, combination: string) => void;
|
updateUniqueShortcut: (name: string, combination: string) => void;
|
||||||
|
output: string;
|
||||||
|
play: string;
|
||||||
flow: string;
|
flow: string;
|
||||||
group: string;
|
group: string;
|
||||||
cut: string;
|
cut: string;
|
||||||
|
|
@ -34,7 +36,7 @@ export type shortcutsStoreType = {
|
||||||
code: string;
|
code: string;
|
||||||
copy: string;
|
copy: string;
|
||||||
duplicate: string;
|
duplicate: string;
|
||||||
share: string;
|
component: string;
|
||||||
docs: string;
|
docs: string;
|
||||||
save: string;
|
save: string;
|
||||||
delete: string;
|
delete: string;
|
||||||
|
|
@ -46,7 +48,7 @@ export type shortcutsStoreType = {
|
||||||
shortcut: string;
|
shortcut: string;
|
||||||
}>;
|
}>;
|
||||||
setShortcuts: (
|
setShortcuts: (
|
||||||
newShortcuts: Array<{ name: string; shortcut: string }>
|
newShortcuts: Array<{ name: string; shortcut: string }>,
|
||||||
) => void;
|
) => void;
|
||||||
getShortcutsFromStorage: () => void;
|
getShortcutsFromStorage: () => void;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue