Skip to content

Icons

Every glyph is a string of SVG. No runtime, no component, no framework — assign it and you are done.

import { searchIcon } from '@aparte/core/icons';
const button = document.createElement('button');
button.innerHTML = searchIcon;

Each one carries class="aparte-icon", so --aparte-icon-size sizes it wherever it lands. Set that variable on any ancestor and every glyph below follows:

.my-toolbar { --aparte-icon-size: 18px; }

These are the ones aparté draws itself, so each is also a provider key: give setIconProvider a function under that name and yours is used instead.

import { aparteGlobalConfig } from '@aparte/core';
import { historyIcon } from '@aparte/core/icons';
aparteGlobalConfig.setIconProvider({ retry: () => historyIcon });
ExportProvider keyMeaning
copyIconcopyCopy button icon — two sheets, the front one over the back one’s corner.
checkIconcheckSuccess/check icon
sendIconsendSend message icon — a paper plane with its fold line.
loadingIconloadingLoading/spinner indicator
errorIconerrorError indicator — a ring with an exclamation.
expandIconexpandExpand/show more icon
collapseIconcollapseCollapse/show less icon
terminalIconterminalTerminal/command prompt icon — a prompt chevron and a cursor line.
paperclipIconpaperclipFile attachment / paperclip icon
imageIconimageImage file icon — a frame, a sun, a hill.
fileIconfileGeneric file icon — a sheet with a folded corner.
scrollDownIconscrollDownScroll to bottom button icon
retryIconretryRetry / regenerate icon — an arc back onto itself.
editIconeditEdit / pencil icon
thumbUpIconthumbUpThumbs up / positive feedback icon
thumbDownIconthumbDownThumbs down / negative feedback icon
prevBranchIconprevBranchPrevious branch arrow
nextBranchIconnextBranchNext branch arrow
toolIcontoolTool call indicator (wrench)
closeIconcloseClose / failed / rejected / remove (✕)
stopIconstopStop / halt streaming (■)
pauseIconpausePaused — two bars, filled like the stop square it sits beside in the tool row’s vocabulary
infoIconinfoInformational notice (ⓘ)
archiveIconarchiveArchive a conversation
unarchiveIconunarchiveRestore an archived conversation
downloadIcondownloadDownload / save to disk
moreIconmoreOverflow menu of a row (⋯) — the conversation list’s actions button.
pinIconpinPin a conversation to the top of the list — a pushpin: head, body, needle.
trashIcontrashDelete — a bin with its lid and two slats.
menuIconmenuOpen a navigation drawer (☰)
alertTriangleIconalertTriangleA warning (triangle)

Glyphs aparté never draws, for the toolbar, drawer or settings panel around your chat.

They live behind their own entry point on purpose. The built-in set above is read by a computed key, so a bundler has to keep all of it; anything added there would ship to every consumer, used or not. These are individual exports instead — import three, pay for three, and pay nothing at all if you never open the module.

plusIcon
minusIcon
searchIcon
filterIcon
moreHorizontalIcon
moreVerticalIcon
chevronLeftIcon
chevronRightIcon
arrowUpIcon
arrowRightIcon
externalLinkIcon
linkIcon
folderIcon
codeIcon
clipboardIcon
saveIcon
uploadIcon
settingsIcon
userIcon
botIcon
sparklesIcon
cpuIcon
databaseIcon
globeIcon
keyIcon
micIcon
micOffIcon
eyeIcon
eyeOffIcon
clockIcon
historyIcon
starIcon
shareIcon
checkCircleIcon
xCircleIcon
messageSquareIcon
sunIcon
moonIcon

Nothing here is required. An icon provider takes any HTML string, so a font-icon set or another library works just as well:

import { aparteGlobalConfig } from '@aparte/core';
aparteGlobalConfig.setIconProvider({
copy: () => '<i class="fas fa-copy"></i>',
check: () => '',
});

Every key is optional — anything you leave out falls back to the built-in drawing.

The shapes are drawn on the grid most icon sets share (24×24, currentColor, round caps, a 2-unit stroke), and the names are the plain words for what each one shows — so swapping in a set of your own changes the import and nothing else. Nothing is imported from anywhere: @aparte/core has zero third-party dependencies, and the drawings are its own.