diff --git a/src/frontend/src/constants/constants.ts b/src/frontend/src/constants/constants.ts index ddbee8ddb..760050be9 100644 --- a/src/frontend/src/constants/constants.ts +++ b/src/frontend/src/constants/constants.ts @@ -107,7 +107,7 @@ export const CODE_DIALOG_SUBTITLE = * @constant */ export const CHAT_FORM_DIALOG_SUBTITLE = - "Adjust or overwrite input values, inspect outputs or interact through the chat console."; + "Set up the input variables defined in prompt templates. Interact with agents and chains."; /** * The base text for subtitle of Edit Node Dialog @@ -732,12 +732,13 @@ export const PRIORITY_SIDEBAR_ORDER = [ "saved_components", "inputs", "outputs", + "prompts", "data", "prompt", "models", + "helpers", "vectorstores", "vectorsearch", - "helpers", ]; export const NATIVE_CATEGORIES = [ "inputs", diff --git a/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx index d2ff0eee8..0bd016322 100644 --- a/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/DisclosureComponent/index.tsx @@ -4,6 +4,7 @@ import { DisclosureComponentType } from "../../../../types/components"; export default function DisclosureComponent({ button: { title, Icon, buttons = [] }, + isChild = true, children, openDisc, }: DisclosureComponentType): JSX.Element { @@ -12,8 +13,14 @@ export default function DisclosureComponent({ {({ open }) => ( <>
- -
+ +
{/* BUG ON THIS ICON */} {title} diff --git a/src/frontend/src/pages/FlowPage/components/ParentDisclosureComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/ParentDisclosureComponent/index.tsx new file mode 100644 index 000000000..4de84a439 --- /dev/null +++ b/src/frontend/src/pages/FlowPage/components/ParentDisclosureComponent/index.tsx @@ -0,0 +1,41 @@ +import { Disclosure } from "@headlessui/react"; +import IconComponent from "../../../../components/genericIconComponent"; +import { DisclosureComponentType } from "../../../../types/components"; + +export default function ParentDisclosureComponent({ + button: { title, Icon, buttons = [] }, + children, + openDisc, +}: DisclosureComponentType): JSX.Element { + return ( + + {({ open }) => ( + <> +
+ +
+ {title} +
+
+ {buttons.map((btn, index) => ( + + ))} +
+ +
+
+
+
+ {children} + + )} +
+ ); +} diff --git a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx index 9e8e7a03b..7643e66c9 100644 --- a/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/extraSidebarComponent/index.tsx @@ -5,6 +5,7 @@ import ShadTooltip from "../../../../components/ShadTooltipComponent"; import IconComponent from "../../../../components/genericIconComponent"; import { Input } from "../../../../components/ui/input"; import { Separator } from "../../../../components/ui/separator"; +import { PRIORITY_SIDEBAR_ORDER } from "../../../../constants/constants"; import ExportModal from "../../../../modals/exportModal"; import ShareModal from "../../../../modals/shareModal"; import useAlertStore from "../../../../stores/alertStore"; @@ -24,6 +25,7 @@ import { sensitiveSort, } from "../../../../utils/utils"; import DisclosureComponent from "../DisclosureComponent"; +import ParentDisclosureComponent from "../ParentDisclosureComponent"; import SidebarDraggableComponent from "./sideBarDraggableComponent"; import { sortKeys } from "./utils"; @@ -271,23 +273,17 @@ export default function ExtraSidebar(): JSX.Element {
{Object.keys(dataFilter) .sort(sortKeys) + .filter((x) => PRIORITY_SIDEBAR_ORDER.includes(x)) .map((SBSectionName: keyof APIObjectType, index) => Object.keys(dataFilter[SBSectionName]).length > 0 ? ( <> - {index === 0 && ( -
-
- Native Components -
-
- )} - - {index === Object.keys(dataFilter).length - 1 && ( - <> - -
- {/* BUG ON THIS ICON */} - - - - Discover More - -
-
-
- -
-
-
- - )} ) : (
) - )} + )}{" "} + + {Object.keys(dataFilter) + .sort(sortKeys) + .filter((x) => !PRIORITY_SIDEBAR_ORDER.includes(x)) + .map((SBSectionName: keyof APIObjectType, index) => + Object.keys(dataFilter[SBSectionName]).length > 0 ? ( + <> + +
+ {Object.keys(dataFilter[SBSectionName]) + .sort((a, b) => + sensitiveSort( + dataFilter[SBSectionName][a].display_name, + dataFilter[SBSectionName][b].display_name + ) + ) + .map((SBItemName: string, index) => ( + + + onDragStart(event, { + //split type to remove type in nodes saved with same name removing it's + type: removeCountFromString(SBItemName), + node: dataFilter[SBSectionName][SBItemName], + }) + } + color={nodeColors[SBSectionName]} + itemName={SBItemName} + //convert error to boolean + error={ + !!dataFilter[SBSectionName][SBItemName].error + } + display_name={ + dataFilter[SBSectionName][SBItemName] + .display_name + } + official={ + dataFilter[SBSectionName][SBItemName] + .official === false + ? false + : true + } + /> + + ))} +
+
+ {index === + Object.keys(dataFilter).length - + PRIORITY_SIDEBAR_ORDER.length + + 1 && ( + <> + +
+ {/* BUG ON THIS ICON */} + + + + Discover More + +
+
+
+ +
+
+
+ + )} + + ) : ( +
+ ) + )} +
); diff --git a/src/frontend/src/style/applies.css b/src/frontend/src/style/applies.css index a71a3e606..5b1928e76 100644 --- a/src/frontend/src/style/applies.css +++ b/src/frontend/src/style/applies.css @@ -117,7 +117,7 @@ @apply relative inline-flex w-full items-center justify-center rounded-md bg-background px-2 py-2 text-foreground transition-all duration-500 ease-in-out; } .header-menubar-item { - @apply relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 cursor-pointer; + @apply relative flex cursor-default cursor-pointer select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none transition-colors hover:bg-accent hover:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50; } .extra-side-bar-buttons:hover { @apply hover:bg-muted; @@ -183,9 +183,19 @@ .disabled-message-button-icon { @apply fill-chat-trigger-disabled stroke-chat-trigger-disabled stroke-1; } + .parent-disclosure-arrangement { + @apply flex w-full select-none items-center justify-between border-y border-y-input bg-background px-3 py-2; + } .components-disclosure-arrangement { @apply -mt-px flex w-full select-none items-center justify-between border-y border-y-input bg-muted px-3 py-2; } + .components-disclosure-arrangement-child { + /* different color than the non child */ + @apply -mt-px flex w-full select-none items-center justify-between border-y border-y-input bg-muted px-3 py-2; + } + .parent-disclosure-title { + @apply p-2 px-2 text-sm font-semibold; + } .components-disclosure-title { @apply flex items-center text-sm text-primary; } diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts index d33b908c2..c3e9ab499 100644 --- a/src/frontend/src/types/components/index.ts +++ b/src/frontend/src/types/components/index.ts @@ -148,6 +148,7 @@ export type FileComponentType = { export type DisclosureComponentType = { children: ReactNode; openDisc: boolean; + isChild?: boolean; button: { title: string; Icon: React.ElementType;