> For the complete documentation index, see [llms.txt](https://docs.trustlesswork.com/trustless-work/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.trustlesswork.com/trustless-work/v1-pt/dapps-oss/escrow-lab/componentes-de-ui/abas.md).

# Abas

## Abas Principais

O componente de abas principais que contém as três seções.

```typescript
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import { useTabsContext } from "@/providers/tabs.provider";
import { DeployEndpoints } from "../endpoints/DeployEndpoints";
import { EscrowEndpoints } from "../endpoints/EscrowEndpoints";
import { HelperEndpoints } from "../endpoints/HelperEndpoints";

export const MainTabs = () => {
  const { activeTab, setActiveTab } = useTabsContext();

  return (
    <Tabs
      key={activeTab}
      value={activeTab}
      onValueChange={(val) =>
        setActiveTab(val as "deploy" | "escrow" | "helper")
      }
      className="w-full"
    >
      <TabsList className="grid w-full grid-cols-3">
        <TabsTrigger value="deploy">Implantar</TabsTrigger>
        <TabsTrigger value="escrow">Escrows</TabsTrigger>
        <TabsTrigger value="helper">Helpers</TabsTrigger>
      </TabsList>
      <div className="p-6">
        <TabsContent value="deploy" className="mt-0">
          <DeployEndpoints />
        </TabsContent>
        <TabsContent value="escrow" className="mt-0">
          <EscrowEndpoints />
        </TabsContent>
        <TabsContent value="helper" className="mt-0">
          <HelperEndpoints />
        </TabsContent>
      </div>
    </Tabs>
  );
};

```

## Endpoints de Deploy

Inicializar endpoint de escrow.

```typescript
"use client";

import { Button } from "@/components/ui/button";
import { InitializeEscrowForm } from "../forms/InitializeEscrowForm";
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { useInitializeEscrow } from "../../hooks/initialize-escrow-form.hook";

export function DeployEndpoints() {
  const {
    form,
    loading,
    response,
    trustlinesOptions,
    currentStep,
    addMilestone,
    removeMilestone,
    loadTemplate,
    onSubmit,
    nextStep,
    prevStep,
  } = useInitializeEscrow();

  const handleLoadTemplate = () => {
    loadTemplate();
  };

  return (
    <Card className="border shadow-sm">
      <CardHeader className="pb-3 flex justify-between gap-4">
        <div className="flex gap-2 flex-col">
          <CardTitle className="text-xl">Endpoints de Deploy</CardTitle>
          <CardDescription>
            Implantar e inicializar contratos escrow na blockchain Stellar
          </CardDescription>
        </div>

        <Button
          type="button"
          variant="outline"
          onClick={handleLoadTemplate}
          className="mb-4"
        >
          Usar Modelo
        </Button>
      </CardHeader>
      <CardContent className="p-6">
        <InitializeEscrowForm
          form={form}
          onSubmit={onSubmit}
          addMilestone={addMilestone}
          removeMilestone={removeMilestone}
          loading={loading}
          response={response}
          trustlinesOptions={trustlinesOptions.map((option) => ({
            value: option.value,
            label: option.label || option.value,
          }))}
          currentStep={currentStep}
          nextStep={nextStep}
          prevStep={prevStep}
        />
      </CardContent>
    </Card>
  );
}

```

## Endpoints de Escrow

Todos os endpoints de escrow divididos por abas.

```typescript
"use client";

import { useState } from "react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { StartDisputeForm } from "../forms/StartDisputeForm";
import { GetEscrowForm } from "../forms/GetEscrowForm";
import { FundEscrowForm } from "../forms/FundEscrowForm";
import { ChangeMilestoneStatusForm } from "../forms/ChangeMilestoneStatusForm";
import { ChangeMilestoneFlagForm } from "../forms/ChangeMilestoneFlagForm";
import { ReleaseFundsForm } from "../forms/ReleaseFundsForm";
import { ResolveDisputeForm } from "../forms/ResolveDisputeForm";
import { UpdateEscrowForm } from "../forms/UpdateEscrowForm";
import { EscrowCreatedSection } from "../sections/EscrowCreatedSection";
import { useEscrowContext } from "@/providers/escrow.provider";
import { useTabsContext } from "@/providers/tabs.provider";
import { Button } from "@/components/ui/button";

export function EscrowEndpoints() {
  const [activeTabEscrow, setActiveTabEscrow] = useState("get-escrow");
  const { resetEscrow } = useEscrowContext();
  const { setActiveTab } = useTabsContext();
  const { escrow } = useEscrowContext();

  return (
    <Card className="border shadow-sm">
      <CardHeader className="pb-3 flex justify-between gap-4">
        <div className="flex gap-2 flex-col">
          <CardTitle className="text-xl">Endpoints de Escrow</CardTitle>
          <CardDescription>
            Gerenciar contratos escrow, marcos e fundos
          </CardDescription>
        </div>

        {escrow && (
          <Button
            type="button"
            variant="destructive"
            onClick={() => {
              resetEscrow();
              setActiveTab("deploy");
            }}
            className="mb-4"
          >
            Redefinir Escrow
          </Button>
        )}
      </CardHeader>
      <CardContent className="p-6">
        <Tabs
          value={activeTabEscrow}
          onValueChange={setActiveTabEscrow}
          className="w-full"
        >
          <TabsList className="w-full flex flex-wrap mb-32 md:mb-4 gap-1">
            <TabsTrigger value="get-escrow" className="flex-1">
              Obter Escrow
            </TabsTrigger>
            <TabsTrigger value="fund-escrow" className="flex-1">
              Financiar Escrow
            </TabsTrigger>
            <TabsTrigger value="change-milestone-status" className="flex-1">
              Alterar Status
            </TabsTrigger>
            <TabsTrigger value="change-milestone-flag" className="flex-1">
              Aprovar Marco
            </TabsTrigger>
            <TabsTrigger value="change-dispute-flag" className="flex-1">
              Iniciar Disputa
            </TabsTrigger>
            <TabsTrigger value="resolve-dispute" className="flex-1">
              Resolver Disputa
            </TabsTrigger>
            <TabsTrigger value="release-funds" className="flex-1">
              Liberar Fundos
            </TabsTrigger>
            <TabsTrigger value="update-escrow" className="flex-1">
              Atualizar Escrow
            </TabsTrigger>
          </TabsList>
          <div className="flex flex-col md:flex-row gap-10 w-full">
            <div className="w-full md:w-3/4">
              <div className="mt-2 pt-4 border-t">
                <TabsContent value="get-escrow" className="mt-0">
                  <GetEscrowForm />
                </TabsContent>
                <TabsContent value="fund-escrow" className="mt-0">
                  <FundEscrowForm />
                </TabsContent>
                <TabsContent value="change-milestone-status" className="mt-0">
                  <ChangeMilestoneStatusForm />
                </TabsContent>
                <TabsContent value="change-milestone-flag" className="mt-0">
                  <ChangeMilestoneFlagForm />
                </TabsContent>
                <TabsContent value="change-dispute-flag" className="mt-0">
                  <StartDisputeForm />
                </TabsContent>
                <TabsContent value="resolve-dispute" className="mt-0">
                  <ResolveDisputeForm />
                </TabsContent>
                <TabsContent value="release-funds" className="mt-0">
                  <ReleaseFundsForm />
                </TabsContent>
                <TabsContent value="update-escrow" className="mt-0">
                  <UpdateEscrowForm />
                </TabsContent>
              </div>
            </div>

            <EscrowCreatedSection />
          </div>
        </Tabs>
      </CardContent>
    </Card>
  );
}

```

## Endpoints Auxiliares

Endpoint para obter saldos.

```typescript
"use client";

import { useState } from "react";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
  Card,
  CardContent,
  CardDescription,
  CardHeader,
  CardTitle,
} from "@/components/ui/card";
import { GetMultipleEscrowBalanceForm } from "../forms/GetMultipleEscrowBalanceForm";

export function HelperEndpoints() {
  const [activeTab, setActiveTab] = useState("get-multiple-escrow-balance");

  return (
    <Card className="border shadow-sm">
      <CardHeader className="pb-3">
        <CardTitle className="text-xl">Endpoints Auxiliares</CardTitle>
        <CardDescription>
          Endpoints utilitários para interações com a blockchain
        </CardDescription>
      </CardHeader>
      <CardContent className="p-6">
        <Tabs value={activeTab} onValueChange={setActiveTab} className="w-full">
          <TabsList className="w-full mb-4">
            <TabsTrigger value="get-multiple-escrow-balance" className="flex-1">
              Obter Saldos
            </TabsTrigger>
          </TabsList>
          <div className="mt-2 pt-4 border-t">
            <TabsContent
              value="get-multiple-escrow-balance"
              className="flex justify-center mt-0"
            >
              <GetMultipleEscrowBalanceForm />
            </TabsContent>
          </div>
        </Tabs>
      </CardContent>
    </Card>
  );
}

```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.trustlesswork.com/trustless-work/v1-pt/dapps-oss/escrow-lab/componentes-de-ui/abas.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
