> ## Documentation Index
> Fetch the complete documentation index at: https://anvil.servicetitan.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Iconography

export const IconographyTable = ({icons}) => {
  const [copiedPath, setCopiedPath] = useState(null);
  const handleCopy = path => {
    navigator.clipboard.writeText(path).then(() => {
      setCopiedPath(path);
      setTimeout(() => {
        setCopiedPath(null);
      }, 2000);
    }).catch(err => {
      console.error("Failed to copy path: ", err);
    });
  };
  if (!icons || !Array.isArray(icons)) {
    return <p className="text-red-500">
        Error: No icon data provided to IconographyTable component.
      </p>;
  }
  return <div className="overflow-x-auto my-6 w-full">
      <table className="min-w-full max-w-full border-collapse m-0">
        <thead className="bg-gray-50 dark:bg-neutral-900/50">
          <tr className="border-b border-gray-200 dark:border-neutral-800">
            <th className="w-20 p-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase tracking-wider">
              Icon
            </th>
            <th className="w-40 p-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase tracking-wider">
              Name
            </th>
            <th className="p-4 text-left text-xs font-semibold text-gray-600 dark:text-gray-400 uppercase tracking-wider">
              Import Path
            </th>
          </tr>
        </thead>
        <tbody className="bg-white dark:bg-neutral-900">
          {icons.map(icon => <tr key={icon.name} className="border-b border-gray-200 dark:border-neutral-800">
              <td className="p-4 align-middle">
                <div className="w-8 h-8 text-gray-700 dark:text-gray-300">
                  {React.cloneElement(icon.svg, {
    className: "w-full h-full",
    fill: "currentColor"
  })}
                </div>
              </td>
              <td className="p-4 align-middle text-sm text-gray-800 dark:text-gray-200">
                {icon.name}
              </td>
              <td className="p-4 align-middle">
                <div className="flex items-center gap-2 p-2 rounded-md bg-gray-100 dark:bg-neutral-800 cursor-pointer group w-full min-w-0" onClick={() => handleCopy(icon.importPath)} onKeyDown={e => {
    if (e.key === "Enter" || e.key === " ") {
      e.preventDefault();
      handleCopy(icon.importPath);
    }
  }} role="button" tabIndex={0} title="Click to copy">
                  <span className={`text-xs transition-colors duration-200 truncate flex-1 ${copiedPath === icon.importPath ? "text-green-800 dark:text-green-500" : "text-gray-700 dark:text-gray-300"}`}>
                    {copiedPath === icon.importPath ? "Copied to clipboard!" : icon.importPath}
                  </span>
                  <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" className="text-gray-400 group-hover:text-gray-700 dark:group-hover:text-gray-200 transition-opacity flex-shrink-0" viewBox="0 0 24 24">
                    <path d="M15 20H5V7c0-.55-.45-1-1-1s-1 .45-1 1v13c0 1.1.9 2 2 2h10c.55 0 1-.45 1-1s-.45-1-1-1m5-4V4c0-1.1-.9-2-2-2H9c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h9c1.1 0 2-.9 2-2m-2 0H9V4h9z"></path>
                  </svg>
                </div>
              </td>
            </tr>)}
        </tbody>
      </table>
    </div>;
};

export const LiveCode = ({children, customHeight, clickToLoad, example, fullWidth, fullHeight, hideCodeInLiveCode, screenshot, screenshotOnly, showCode: showCodeProp}) => {
  const SCREENSHOTS_BASE = "https://servicetitan.github.io/anvil2-docs-live-code/screenshots";
  const STACKBLITZ_BASE = "https://stackblitz.com/github/servicetitan/anvil2-docs-live-code/tree/main/examples";
  const [showCodeBlock, setShowCodeBlock] = useState(showCodeProp ?? false);
  const [isLocalOverride, setIsLocalOverride] = useState(false);
  useEffect(() => {
    const examplePath = `/images/live-code-screenshots-tmp/${example}.png`;
    fetch(examplePath, {
      method: "HEAD"
    }).then(r => {
      if (r.ok) setIsLocalOverride(true);
    }).catch(() => {});
  }, [example]);
  const screenshotBase = isLocalOverride ? "/images/live-code-screenshots-tmp" : SCREENSHOTS_BASE;
  if (screenshotOnly) {
    return <Frame className="flex flex-col">
        <div className="flex dark:hidden" style={{
      justifyContent: "center",
      alignItems: "center",
      width: fullWidth ? "100%" : "50%",
      minHeight: fullHeight ? "284px" : undefined,
      background: "#FFFFFF"
    }}>
          <img srcset={`${screenshotBase}/${example}.png, ${screenshotBase}/${example}-2x.png 2x`} src={`${screenshotBase}/${example}.png`} alt={example} noZoom />
        </div>
        <div className="hidden dark:flex" style={{
      justifyContent: "center",
      alignItems: "center",
      width: fullWidth ? "100%" : "50%",
      minHeight: fullHeight ? "284px" : undefined,
      background: "#141414"
    }}>
          <img srcset={`${screenshotBase}/${example}-dark.png, ${screenshotBase}/${example}-dark-2x.png 2x`} src={`${screenshotBase}/${example}-dark.png`} alt={example} noZoom />
        </div>
      </Frame>;
  }
  if (screenshot) {
    return <Frame className="flex flex-col -mb-2">
        <div className="flex dark:hidden bg-white dark:bg-codeblock border border-gray-950/10 dark:border-white/10 dark:twoslash-dark rounded-2xl overflow-hidden" style={{
      justifyContent: "center",
      alignItems: "center",
      width: fullWidth ? "100%" : "50%",
      minHeight: fullHeight ? "284px" : undefined
    }}>
          <img srcset={`${screenshotBase}/${example}.png, ${screenshotBase}/${example}-2x.png 2x`} src={`${screenshotBase}/${example}.png`} alt={example} noZoom />
        </div>

        <div className="hidden dark:flex bg-white dark:bg-codeblock border border-gray-950/10 dark:border-white/10 dark:twoslash-dark rounded-2xl overflow-hidden" style={{
      background: "#141414",
      justifyContent: "center",
      alignItems: "center",
      width: fullWidth ? "100%" : "50%",
      minHeight: fullHeight ? "284px" : undefined
    }}>
          <img srcset={`${screenshotBase}/${example}-dark.png, ${screenshotBase}/${example}-dark-2x.png 2x`} src={`${screenshotBase}/${example}-dark.png`} alt={example} noZoom />
        </div>

        <div className="flex justify-end items-center text-xs py-2 px-1 gap-4">
          {!showCodeProp ? <button className="inline-flex justify-end items-center text-gray-700 dark:text-gray-50 hover:text-blue-500 dark:hover:text-blue-300 transition-colors group self-end gap-1 cursor-pointer" onClick={() => setShowCodeBlock(!showCodeBlock)} style={{
      appearance: "none"
    }}>
              <Icon icon="code" size="12px" className="group-hover:bg-blue-500 dark:group-hover:bg-blue-300" />
              <span>{showCodeBlock ? "Hide code" : "Show code"}</span>
            </button> : null}

          <a className="inline-flex justify-end items-center hover:text-blue-500 dark:hover:text-blue-300 transition-colors group self-end gap-1" href={`${STACKBLITZ_BASE}/${example}?file=src/App.tsx`} target="_blank" rel="noreferrer">
            <Icon icon="bolt" size="12px" className="group-hover:bg-blue-500 dark:group-hover:bg-blue-300" />
            <span>StackBlitz demo</span>
          </a>
        </div>

        <div className="grid transition-[grid-template-rows] duration-300 ease-in-out overflow-auto overflow-y-hidden overflow-x-auto" style={showCodeBlock ? {
      gridTemplateRows: "1fr"
    } : {
      gridTemplateRows: "0fr"
    }}>
          <div style={{
      minHeight: 0,
      overflowX: "auto",
      overflowY: "hidden",
      marginBlockStart: "-1.25rem",
      marginBlockEnd: "-1.5rem"
    }}>
            {children}
          </div>
        </div>
      </Frame>;
  } else {
    return <div style={{
      display: "flex",
      width: fullWidth ? "100%" : "50%",
      minHeight: customHeight ? customHeight : "316px",
      resize: "vertical",
      overflow: "auto"
    }}>
        <iframe title={example} style={{
      flex: 1,
      width: fullWidth ? "100%" : "50%",
      minHeight: customHeight ? customHeight : "316px"
    }} src={`${STACKBLITZ_BASE}/${example}?embed=1&hideNavigation=1&hideExplorer=1&terminalHeight=0&file=src/App.tsx${clickToLoad ? "&ctl=1" : ""}${hideCodeInLiveCode ? "&view=preview" : ""}`} allow="accelerometer; ambient-light-sensor; camera; encrypted-media; geolocation; gyroscope; hid; microphone; midi; payment; usb; vr; xr-spatial-tracking" sandbox="allow-forms allow-modals allow-popups allow-presentation allow-same-origin allow-scripts" />
      </div>;
  }
};

Icons act as visual aids to help users complete tasks. They should be used purposefully.

<Frame>
  <div className="w-full h-full bg-[#FFFFFF] p-2 rounded flex items-center justify-center">
    <img
      src="https://mintcdn.com/servicetitan/KE7wVYXA9MgEh_Ye/images/docs/web/foundations/shared/iconography-overview.png?fit=max&auto=format&n=KE7wVYXA9MgEh_Ye&q=85&s=5acfd011718a801dbc000a13570b039f"
      alt="Iconography
overview"
      width="640"
      height="360"
      data-path="images/docs/web/foundations/shared/iconography-overview.png"
    />
  </div>
</Frame>

## Using Anvil Icons

Detailed design spec, usage guidelines, and implementation guidelines for the Icon component can be found [here](/docs/web/components/icon/design).

Internal employees can learn about contributing an icon to Anvil [here](https://servicetitan.atlassian.net/wiki/spaces/ADS/pages/2062909453/Add+an+Icon+to+Anvil).

#### Material & Anvil

Anvil uses Material icons throughout the product so we’ve kept our grid relatively simple and familiar.

#### Sizing

Icon sizing in Anvil follows the typical use case as Material. In general, it's best practice to design in 16x and 24x sizes.

<Frame>
  <div className="w-full h-full bg-[#FFFFFF] p-2 rounded flex items-center justify-center">
    <img
      src="https://mintcdn.com/servicetitan/KE7wVYXA9MgEh_Ye/images/docs/web/foundations/iconography/icon-sizing-example.png?fit=max&auto=format&n=KE7wVYXA9MgEh_Ye&q=85&s=80f308da7cbd455bc84a7d796847d4d0"
      alt="Icon sizing
example"
      width="458"
      height="104"
      data-path="images/docs/web/foundations/iconography/icon-sizing-example.png"
    />
  </div>
</Frame>

### Actions with Icons

When giving a user the ability to perform an action through an Icon, such as opening a menu or editing an item, you can use the [Button with an icon](/docs/web/components/button/design). This ensures consistent styling and functionality of icon-only actions across the application.

<LiveCode example="iconography-button" screenshot fullWidth>
  ```tsx lines theme={null}
  import { Button, Flex, Tooltip } from "@servicetitan/anvil2";
  import Add from "@servicetitan/anvil2/assets/icons/material/round/add.svg";
  import Edit from "@servicetitan/anvil2/assets/icons/material/round/edit.svg";
  import Pause from "@servicetitan/anvil2/assets/icons/material/round/pause.svg";

  function App() {
    return (
      <Flex
        gap="2"
        style={{ paddingBlockStart: "2.5rem", paddingInline: "0.5rem" }}
      >
        <Tooltip>
          <Tooltip.Trigger>
            <Button icon={Add} aria-label="add" />
          </Tooltip.Trigger>
          <Tooltip.Content>Add</Tooltip.Content>
        </Tooltip>
        <Tooltip>
          <Tooltip.Trigger>
            <Button icon={Edit} aria-label="edit" />
          </Tooltip.Trigger>
          <Tooltip.Content>Edit</Tooltip.Content>
        </Tooltip>
        <Tooltip defaultOpen>
          <Tooltip.Trigger>
            <Button icon={Pause} aria-label="pause" />
          </Tooltip.Trigger>
          <Tooltip.Content>Pause</Tooltip.Content>
        </Tooltip>
      </Flex>
    );
  }

  export default App;
  ```
</LiveCode>

### Tooltips

In general, icons that stand on their own should have a [tooltip](/docs/web/components/tooltip/design). This provides important context to what the icon represents when a user hovers.

<LiveCode example="iconography-tooltip" screenshot fullWidth>
  ```tsx lines theme={null}
  import { Button, Flex, Tooltip } from "@servicetitan/anvil2";
  import Edit from "@servicetitan/anvil2/assets/icons/material/round/edit.svg";
  import Info from "@servicetitan/anvil2/assets/icons/material/round/info.svg";

  function App() {
    return (
      <Flex
        gap="2"
        style={{ paddingBlockStart: "3.5rem", paddingInline: "7.5rem" }}
      >
        <Tooltip>
          <Tooltip.Trigger>
            <Button icon={Edit} appearance="ghost" />
          </Tooltip.Trigger>
          <Tooltip.Content>Edit</Tooltip.Content>
        </Tooltip>
        <Tooltip defaultOpen>
          <Tooltip.Trigger>
            <Button appearance="ghost" icon={Info} />
          </Tooltip.Trigger>
          <Tooltip.Content>
            Fill out all the fields in the form to proceed
          </Tooltip.Content>
        </Tooltip>
      </Flex>
    );
  }

  export default App;
  ```
</LiveCode>

### Color

Icon colors can reflect their use case. In general, icons are black (Neutral-400), with other color uses to denote a status or a link. Icons should generally meet the WCAG AA color contrast guidelines, but can be lighter on larger icons with some form of label.

For additional guidance on using color with icons, see our [spec guidelines](/docs/web/components/icon/design#color).

### Best Practices

* Icons without a text label should have a [tooltip](/docs/web/components/tooltip/design) component.
* Icon colors should meet at least WCAG AA color contrast.
  * Example: On a pure white background, icons should not be brighter than Neutral 90.

## Standardized Icons

export const standardizedIcons = [{
  name: "Batch",
  importPath: "@servicetitan/anvil2/assets/icons/st/batch.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="M12.6 18.06c-.36.28-.87.28-1.23 0l-6.15-4.78a.99.99 0 0 0-1.22 0 .997.997 0 0 0 0 1.57l6.76 5.26c.72.56 1.73.56 2.46 0l6.76-5.26c.51-.4.51-1.17 0-1.57l-.01-.01a.99.99 0 0 0-1.22 0zm.63-3.02 6.76-5.26c.51-.4.51-1.18 0-1.58l-6.76-5.26c-.72-.56-1.73-.56-2.46 0L4.01 8.21c-.51.4-.51 1.18 0 1.58l6.76 5.26c.72.56 1.74.56 2.46-.01"></path>
        </g>
        <defs>
          <clipPath id="a">
            <path d="M0 0h24v24H0z"></path>
          </clipPath>
        </defs>
      </svg>
}, {
  name: "Call",
  importPath: "@servicetitan/anvil2/assets/icons/st/call.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="m19.23 15.26-2.54-.29a1.99 1.99 0 0 0-1.64.57l-1.84 1.84a15.05 15.05 0 0 1-6.59-6.59l1.85-1.85c.43-.43.64-1.03.57-1.64l-.29-2.52a2 2 0 0 0-1.99-1.77H5.03c-1.13 0-2.07.94-2 2.07.53 8.54 7.36 15.36 15.89 15.89 1.13.07 2.07-.87 2.07-2v-1.73c.01-1.01-.75-1.86-1.76-1.98"></path>
        </g>
      </svg>
}, {
  name: "Call Inbound",
  importPath: "@servicetitan/anvil2/assets/icons/st/call_inbound.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="m19.23 15.26-2.54-.29a1.99 1.99 0 0 0-1.64.57l-1.84 1.84a15.05 15.05 0 0 1-6.59-6.59l1.85-1.85c.43-.43.64-1.03.57-1.64l-.29-2.52a2 2 0 0 0-1.99-1.77H5.03c-1.13 0-2.07.94-2 2.07.53 8.54 7.36 15.36 15.89 15.89 1.13.07 2.07-.87 2.07-2v-1.73c.01-1.01-.75-1.86-1.76-1.98M13 11h4c.55 0 1-.45 1-1s-.45-1-1-1h-1.59l4.31-4.31a.996.996 0 1 0-1.41-1.41L14 7.59V6c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1"></path>
      </svg>
}, {
  name: "Call Outbound",
  importPath: "@servicetitan/anvil2/assets/icons/st/call_outbound.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="m19.23 15.26-2.54-.29a1.99 1.99 0 0 0-1.64.57l-1.84 1.84a15.05 15.05 0 0 1-6.59-6.59l1.85-1.85c.43-.43.64-1.03.57-1.64l-.29-2.52a2 2 0 0 0-1.99-1.77H5.03c-1.13 0-2.07.94-2 2.07.53 8.54 7.36 15.36 15.89 15.89 1.13.07 2.07-.87 2.07-2v-1.73c.01-1.01-.75-1.86-1.76-1.98"></path>
        <path d="M19.013 2.988h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-4.31 4.31a.996.996 0 1 0 1.41 1.41l4.31-4.31v1.59c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1"></path>
      </svg>
}, {
  name: "Customer",
  importPath: "@servicetitan/anvil2/assets/icons/st/customer.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4m0 2c-2.67 0-8 1.34-8 4v1c0 .55.45 1 1 1h14c.55 0 1-.45 1-1v-1c0-2.66-5.33-4-8-4"></path>
        </g>
      </svg>
}, {
  name: "Equipment",
  importPath: "@servicetitan/anvil2/assets/icons/st/equipment.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="M17 16c-.55 0-1-.45-1-1H8c0 .55-.45 1-1 1s-1-.45-1-1H2v3c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-3h-4c0 .55-.45 1-1 1m3-8h-3V6c0-1.1-.9-2-2-2H9c-1.1 0-2 .9-2 2v2H4c-1.1 0-2 .9-2 2v4h4v-1c0-.55.45-1 1-1s1 .45 1 1v1h8v-1c0-.55.45-1 1-1s1 .45 1 1v1h4v-4c0-1.1-.9-2-2-2m-5 0H9V6h6z"></path>
        </g>
      </svg>
}, {
  name: "Estimate",
  importPath: "@servicetitan/anvil2/assets/icons/st/estimate.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="m21.41 11.58-8.995-8.995A2 2 0 0 0 11 2H4a2 2 0 0 0-2 2v7c0 .555.225 1.055.59 1.415l9 9c.36.36.86.585 1.41.585s1.055-.225 1.415-.585l7-7c.36-.365.585-.865.585-1.415 0-.555-.225-1.055-.59-1.42M5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7"></path>
        </g>
      </svg>
}, {
  name: "Form",
  importPath: "@servicetitan/anvil2/assets/icons/st/form.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M14 1H5.2a2.19 2.19 0 0 0-2.189 2.2L3 20.8c0 1.215.974 2.2 2.189 2.2H18.4a2.2 2.2 0 0 0 2.2-2.2V7.6zm2.2 17.6H7.4v-2.2h8.8zm0-4.4H7.4V12h8.8zm-3.3-5.5V2.65l6.05 6.05z"></path>
      </svg>
}, {
  name: "Invoice",
  importPath: "@servicetitan/anvil2/assets/icons/st/invoice.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M14 1H5.2c-1.21 0-2.189.99-2.189 2.2L3 20.8c0 1.21.979 2.2 2.189 2.2H18.4c1.21 0 2.2-.99 2.2-2.2V7.6zm1.1 11h-4.4v1.1H14c.605 0 1.1.495 1.1 1.1v3.3c0 .605-.495 1.1-1.1 1.1h-1.1v1.1h-2.2v-1.1H8.5v-2.2h4.4v-1.1H9.6c-.605 0-1.1-.495-1.1-1.1v-3.3c0-.605.495-1.1 1.1-1.1h1.1V8.7h2.2v1.1h2.2zm-2.2-4.4V2.65l4.95 4.95z"></path>
      </svg>
}, {
  name: "Job",
  importPath: "@servicetitan/anvil2/assets/icons/st/job.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="M12.09 2.91C10.08.9 7.07.49 4.65 1.67L8.28 5.3c.39.39.39 1.02 0 1.41L6.69 8.3c-.39.4-1.02.4-1.41 0L1.65 4.67C.48 7.1.89 10.09 2.9 12.1a6.51 6.51 0 0 0 6.89 1.48l7.96 7.96a2.613 2.613 0 0 0 3.71 0 2.613 2.613 0 0 0 0-3.71L13.54 9.9c.92-2.34.44-5.1-1.45-6.99"></path>
        </g>
      </svg>
}, {
  name: "Location",
  importPath: "@servicetitan/anvil2/assets/icons/st/location.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M11.7 1A7.7 7.7 0 0 0 4 8.7C4 14.475 11.7 23 11.7 23s7.7-8.525 7.7-14.3c0-4.251-3.448-7.7-7.7-7.7m0 10.45a2.751 2.751 0 0 1 0-5.5 2.751 2.751 0 0 1 0 5.5"></path>
      </svg>
}, {
  name: "Memberships",
  importPath: "@servicetitan/anvil2/assets/icons/st/memberships.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M11.8 11.525 10.125 12.8q-.124.1-.262 0t-.088-.25l.65-2.075L8.7 9.125q-.125-.1-.075-.25t.225-.15h2.075l.65-2.05q.05-.15.225-.15t.225.15l.65 2.05h2.075q.175 0 .225.15t-.075.25l-1.725 1.35.65 2.075q.05.15-.087.25-.138.1-.263 0zm0 9.675-4.325.95a.84.84 0 0 1-.762-.175.86.86 0 0 1-.338-.7V15.4Q5.3 14.475 4.65 12.925A8 8 0 0 1 4 9.8q0-3.25 2.275-5.525T11.8 2t5.525 2.275T19.6 9.8q0 1.6-.6 3.137-.6 1.539-1.8 2.488v5.85a.86.86 0 0 1-.337.7.84.84 0 0 1-.763.175zm0-5.4q2.5 0 4.25-1.75T17.8 9.8t-1.75-4.25T11.8 3.8 7.55 5.55 5.8 9.8t1.75 4.25 4.25 1.75"></path>
      </svg>
}, {
  name: "Payment",
  importPath: "@servicetitan/anvil2/assets/icons/st/payment.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M12 1C5.923 1 1 5.923 1 12c0 6.078 4.923 11 11 11 6.078 0 11-4.922 11-11 0-6.077-4.922-11-11-11m1.556 17.699V20.8h-2.931v-2.123c-1.876-.401-3.481-1.606-3.597-3.745h2.15c.11 1.155.902 2.051 2.915 2.051 2.162 0 2.64-1.078 2.64-1.749 0-.908-.489-1.771-2.931-2.354-2.728-.655-4.598-1.782-4.598-4.037 0-1.886 1.523-3.118 3.421-3.531V3.2h2.932v2.14c2.045.5 3.068 2.046 3.14 3.723H14.53c-.06-1.221-.704-2.052-2.442-2.052-1.65 0-2.64.743-2.64 1.81 0 .93.715 1.524 2.932 2.101 2.221.577 4.597 1.523 4.597 4.301 0 2.007-1.517 3.113-3.42 3.476"></path>
      </svg>
}, {
  name: "Proposal",
  importPath: "@servicetitan/anvil2/assets/icons/st/proposal.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <g clip-path="url(#a)">
          <path d="M3 12.04c-1.1 0-2 .9-2 2v7c0 1.1.9 2 2 2s2-.9 2-2v-7c0-1.1-.9-2-2-2m19.02 8-7.39 2.77c-.4.15-.84.17-1.25.05L7 21.06v-9.02h1.61c.24 0 .47.04.7.13l6.92 2.59c.46.17.77.61.77 1.11 0 .06 0 .11-.01.17-.08.57-.58 1.01-1.17 1.01h-2.63c-.12 0-.24-.02-.36-.07l-1.12-.43c-.26-.1-.55.04-.64.3-.09.25.04.53.3.62l1.48.51c.1.04.22.06.32.06H20c1.12 0 2 .89 2.02 2"></path>
          <path fill-rule="evenodd" d="M21 16.04V5.02L17 1H9c-1.1 0-2 .9-2 2v7.04h1.61c.25 0 .51.05.74.14l3.983 1.59h4.417a.75.75 0 0 1 0 1.5h-.66l.05.02c1.13.46 1.86 1.54 1.86 2.75zM15.95 2.08v3.86h3.86zm-5.7 6.69h7.5a.75.75 0 0 1 0 1.5h-7.5a.75.75 0 1 1 0-1.5" clip-rule="evenodd"></path>
        </g>
      </svg>
}, {
  name: "Project",
  importPath: "@servicetitan/anvil2/assets/icons/st/project.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M4 20q-.824 0-1.412-.587A1.93 1.93 0 0 1 2 18V6q0-.824.587-1.412A1.93 1.93 0 0 1 4 4h6l2 2h8q.824 0 1.413.588Q22 7.175 22 8H4v10l2.4-8h17.1l-2.575 8.575a1.95 1.95 0 0 1-.738 1.038A2 2 0 0 1 19 20z"></path>
      </svg>
}, {
  name: "Purchase Order",
  importPath: "@servicetitan/anvil2/assets/icons/st/purchase_order.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M6 22q-.824 0-1.412-.587A1.93 1.93 0 0 1 4 20V8q0-.824.588-1.412A1.93 1.93 0 0 1 6 6h2q0-1.65 1.175-2.825T12 2t2.825 1.175T16 6h2q.824 0 1.413.588Q20 7.175 20 8v12q0 .824-.587 1.413A1.93 1.93 0 0 1 18 22zm4-16h4q0-.824-.588-1.412A1.93 1.93 0 0 0 12 4q-.825 0-1.412.588A1.93 1.93 0 0 0 10 6m5 5q.424 0 .713-.287A.97.97 0 0 0 16 10V8h-2v2q0 .424.287.713.288.287.713.287m-6 0q.424 0 .713-.287A.97.97 0 0 0 10 10V8H8v2q0 .424.287.713Q8.576 11 9 11"></path>
      </svg>
}, {
  name: "Sms",
  importPath: "@servicetitan/anvil2/assets/icons/st/sms.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M8 11q.424 0 .713-.287A.97.97 0 0 0 9 10a.97.97 0 0 0-.287-.713A.97.97 0 0 0 8 9a.97.97 0 0 0-.713.287A.97.97 0 0 0 7 10q0 .424.287.713Q7.576 11 8 11m4 0q.424 0 .713-.287A.97.97 0 0 0 13 10a.97.97 0 0 0-.287-.713A.97.97 0 0 0 12 9a.97.97 0 0 0-.713.287A.97.97 0 0 0 11 10q0 .424.287.713.288.287.713.287m4 0q.424 0 .712-.287A.97.97 0 0 0 17 10a.97.97 0 0 0-.288-.713A.97.97 0 0 0 16 9a.97.97 0 0 0-.713.287A.97.97 0 0 0 15 10q0 .424.287.713.288.287.713.287M2 22V4q0-.824.587-1.412A1.93 1.93 0 0 1 4 2h16q.824 0 1.413.587Q22 3.176 22 4v12q0 .824-.587 1.413A1.93 1.93 0 0 1 20 18H6z"></path>
      </svg>
}, {
  name: "Service Agreements",
  importPath: "@servicetitan/anvil2/assets/icons/st/service_agreements.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M21.616 8.28a3.6 3.6 0 0 0-.768-1.152l-3.084-3.084A3.54 3.54 0 0 0 15.244 3q-.846 0-1.584.36c-.468.228-.876.54-1.224.948a4.9 4.9 0 0 0-1.428-.912A4.9 4.9 0 0 0 9.064 3c-.684 0-1.32.132-1.932.396-.6.252-1.14.612-1.608 1.08l-1.56 1.56A4.6 4.6 0 0 0 2.86 7.68c-.24.612-.36 1.26-.36 1.92s.132 1.32.384 1.932c.252.6.624 1.152 1.08 1.608l.672.672s-.012.072-.012.108c0 .276.084.492.264.684.192.18.42.276.684.276.132 0 .264-.036.384-.084a.9.9 0 0 0 .312-.192l4.524-4.56.696.708L6.94 15.3a.9.9 0 0 0-.192.3.8.8 0 0 0-.084.372c0 .264.096.492.276.672a.9.9 0 0 0 .684.276 1 1 0 0 0 .372-.072.9.9 0 0 0 .3-.204l4.548-4.548.672.684-4.524 4.548c-.084.084-.156.18-.216.3a.9.9 0 0 0-.084.372.94.94 0 0 0 .276.696c.18.192.42.276.696.276a.8.8 0 0 0 .384-.084c.108-.06.216-.132.3-.216l4.548-4.524.672.672-4.548 4.56a.94.94 0 0 0-.276.672c0 .264.096.492.276.672s.408.276.672.276a.94.94 0 0 0 .672-.276l8.484-8.52c.324-.336.588-.72.768-1.164.192-.444.276-.912.276-1.392s-.084-.936-.276-1.368m-17.4 2.688A3.3 3.3 0 0 1 3.94 9.6c0-.48.084-.948.264-1.392a3.16 3.16 0 0 1 .78-1.164l1.56-1.548a3.8 3.8 0 0 1 1.152-.78c.432-.18.888-.276 1.368-.276s.948.096 1.38.276a4 4 0 0 1 1.176.78l5.328 5.304c.072.072.144.18.192.312.048.12.072.252.072.384a.9.9 0 0 1-.288.672.95.95 0 0 1-.684.276 1 1 0 0 1-.372-.072.9.9 0 0 1-.3-.204l-4.8-4.824-5.28 5.28-.504-.504a3.5 3.5 0 0 1-.768-1.152"></path>
      </svg>
}, {
  name: "Text Inbound",
  importPath: "@servicetitan/anvil2/assets/icons/st/text_inbound.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path fill-rule="evenodd" d="M8.713 10.713A.97.97 0 0 1 8 11a.97.97 0 0 1-.713-.287A.97.97 0 0 1 7 10q0-.424.287-.713A.97.97 0 0 1 8 9q.424 0 .713.287Q9 9.576 9 10t-.287.713m4 0A.97.97 0 0 1 12 11a.97.97 0 0 1-.713-.287A.97.97 0 0 1 11 10q0-.424.287-.713A.97.97 0 0 1 12 9q.424 0 .713.287Q13 9.576 13 10t-.287.713m4.246-.41q.04-.143.041-.303a.97.97 0 0 0-.288-.713A.97.97 0 0 0 16 9a.97.97 0 0 0-.713.287A.97.97 0 0 0 15 10q0 .424.287.713.122.12.269.192A7 7 0 0 0 12.07 18H6l-4 4V4q0-.824.587-1.412A1.93 1.93 0 0 1 4 2h16q.824 0 1.413.587Q22 3.176 22 4v6.674A7 7 0 0 0 19 10c-.71 0-1.395.106-2.041.302" clip-rule="evenodd"></path>
        <path d="M15 21.013h4c.55 0 1-.45 1-1s-.45-1-1-1h-1.59l4.31-4.31a.996.996 0 1 0-1.41-1.41L16 17.603v-1.59c0-.55-.45-1-1-1s-1 .45-1 1v4c0 .55.45 1 1 1"></path>
      </svg>
}, {
  name: "Text Outbound",
  importPath: "@servicetitan/anvil2/assets/icons/st/text_outbound.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path fill-rule="evenodd" d="M8.713 10.713A.97.97 0 0 1 8 11a.97.97 0 0 1-.713-.287A.97.97 0 0 1 7 10q0-.424.287-.713A.97.97 0 0 1 8 9q.424 0 .713.287Q9 9.576 9 10t-.287.713m4 0A.97.97 0 0 1 12 11a.97.97 0 0 1-.713-.287A.97.97 0 0 1 11 10q0-.424.287-.713A.97.97 0 0 1 12 9q.424 0 .713.287Q13 9.576 13 10t-.287.713m4.246-.41q.04-.143.041-.303a.97.97 0 0 0-.288-.713A.97.97 0 0 0 16 9a.97.97 0 0 0-.713.287A.97.97 0 0 0 15 10q0 .424.287.713.122.12.269.192A7 7 0 0 0 12.07 18H6l-4 4V4q0-.824.587-1.412A1.93 1.93 0 0 1 4 2h16q.824 0 1.413.587Q22 3.176 22 4v6.674A7 7 0 0 0 19 10c-.71 0-1.395.106-2.041.302" clip-rule="evenodd"></path>
        <path d="M21.013 13h-4c-.55 0-1 .45-1 1s.45 1 1 1h1.59l-4.31 4.31a.996.996 0 1 0 1.41 1.41l4.31-4.31V18c0 .55.45 1 1 1s1-.45 1-1v-4c0-.55-.45-1-1-1"></path>
      </svg>
}, {
  name: "Upsell",
  importPath: "@servicetitan/anvil2/assets/icons/st/upsell.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path d="M10.888 21.25 2.454 9.072h3.379zm6.234-12.177-5.154 12.404L6.807 9.073zm4.498 0L13.055 21.25l5.047-12.176zm-.05-1.068h-3.018l1.276-3.066zm-2.51-3.561-1.25 3.007-1.555-3.007zm-1.996 3.561h-3.927l2.503-2.75zm-1.979-3.561L12 7.837 8.85 4.444zm-4.229 3.561H6.887l1.424-2.75zM7.698 4.444 6.135 7.451 4.892 4.444zM5.4 8.005H2.38L4.09 4.88z"></path>
      </svg>
}, {
  name: "Web Chat",
  importPath: "@servicetitan/anvil2/assets/icons/st/web_chat.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path fill-rule="evenodd" d="M5 4H4c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2H1c-.55 0-1 .45-1 1s.45 1 1 1h22c.55 0 1-.45 1-1s-.45-1-1-1h-3c1.1 0 1.99-.9 1.99-2L22 6c0-1.1-.9-2-2-2h-1v2c.55 0 1 .45 1 1v8c0 .55-.45 1-1 1H5c-.55 0-1-.45-1-1V7c0-.55.45-1 1-1z" clip-rule="evenodd"></path>
        <path d="M9.8 5.95a.53.53 0 0 0 .392-.158.53.53 0 0 0 .158-.392.53.53 0 0 0-.158-.392.53.53 0 0 0-.392-.158.53.53 0 0 0-.392.158.53.53 0 0 0-.158.392q0 .233.158.392a.53.53 0 0 0 .392.158m2.2 0a.53.53 0 0 0 .392-.158.53.53 0 0 0 .158-.392.53.53 0 0 0-.158-.392A.53.53 0 0 0 12 4.85a.53.53 0 0 0-.392.158.53.53 0 0 0-.158.392q0 .233.158.392A.53.53 0 0 0 12 5.95m2.2 0a.53.53 0 0 0 .392-.158.53.53 0 0 0 .158-.392.53.53 0 0 0-.158-.392.53.53 0 0 0-.392-.158.53.53 0 0 0-.392.158.53.53 0 0 0-.158.392q0 .233.158.392a.53.53 0 0 0 .392.158M6.5 12V2.1q0-.453.323-.777A1.06 1.06 0 0 1 7.6 1h8.8q.454 0 .777.323.323.324.323.777v6.6q0 .454-.323.777a1.06 1.06 0 0 1-.777.323H8.7z"></path>
      </svg>
}, {
  name: "Virtual Agent",
  importPath: "@servicetitan/anvil2/assets/icons/st/virtual_agent.svg",
  svg: <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
        <path fill-rule="evenodd" d="M4 16v5h16v-5q0-.825-.587-1.412A1.93 1.93 0 0 0 18 14H6q-.824 0-1.412.588A1.93 1.93 0 0 0 4 16m1.463-4.462Q6.925 13 9 13h6q2.075 0 3.538-1.463T20 8t-1.462-3.537Q17.074 3 15 3H9Q6.925 3 5.463 4.463 4 5.925 4 8t1.463 3.537M15 11H9a2.9 2.9 0 0 1-2.125-.875A2.9 2.9 0 0 1 6 8q0-1.25.875-2.125A2.9 2.9 0 0 1 9 5h6q1.25 0 2.125.875T18 8t-.875 2.125A2.9 2.9 0 0 1 15 11M9.713 8.713A.97.97 0 0 1 9 9a.97.97 0 0 1-.713-.287A.97.97 0 0 1 7 8q0-.424.287-.713A.97.97 0 0 1 9 7q.424 0 .713.287Q10 7.576 10 8t-.287.713m6 0A.97.97 0 0 1 15 9a.97.97 0 0 1-.713-.287A.97.97 0 0 1 14 8q0-.424.287-.713A.97.97 0 0 1 15 7q.424 0 .713.287Q16 7.576 16 8t-.287.713" clip-rule="evenodd"></path>
      </svg>
}];

<IconographyTable icons={standardizedIcons} />
