packages/anvil2-ai-kit/CHANGELOG.md.
0.11.11
Patch Changes
-
#3027
60f130aThanks @ericag1985! - [CartoTheme] Render bold body text at the semibold weight -
#3027
60f130aThanks @ericag1985! - [GuidanceCard] Update the reason label to use the semibold weight token -
Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.10
0.11.10
Patch Changes
- Updated dependencies [
60a7a12]:- @servicetitan/anvil2-icons@0.1.9
0.11.9
Patch Changes
-
#2932
5a21d98Thanks @pbuckingham-st! - [DiffValue, Text, TruncatedText] Change the suggested-change highlight fill to a blue-to-cyan gradient -
Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.8
0.11.8
Minor Changes
- #2886
71fbcd1Thanks @arnold-dad-st! - [ChatHistory] Add a tooltip revealing the full chat title on hover when it is truncated
Patch Changes
- Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.7
0.11.7
Patch Changes
- Updated dependencies [
6e236a2]:- @servicetitan/anvil2-icons@0.1.6
0.11.6
Minor Changes
- #2827
165ba0dThanks @ericag1985! - [AppShell] Add drag resizing for the rail with responsive width restoration and drawer sizing
Patch Changes
- Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.5
0.11.5
Patch Changes
- Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.4
0.11.4
Minor Changes
- #2761
c7ad37dThanks @ericag1985! - [Markdown] Add chat-styled GFM tables with overflow
0.11.3
Patch Changes
- #2757
74b671fThanks @AdamLantz! - [ChatLayout] Fix the “scroll to latest” button letting transcript content show through its translucent secondary fill
0.11.2
Patch Changes
-
#2729
84ff49aThanks @jpex! - [Suggestion] Fix bordered suggestion chips to keep a consistent 40px tap target -
#2729
84ff49aThanks @jpex! - [Suggestion] Restyle the chip surface to match Card — standard fill, 1px standard border, and hover-only ambient elevation -
#2755
018477eThanks @arnold-dad-st! - [TabbedLayout] Fix panel content losing its state and scroll position when switching tabs or changing layout mode -
#2741
51b4408Thanks @ericag1985! - [ButtonToggle] Fix toggles rendering 4px larger than the equivalentButton -
Updated dependencies []:
- @servicetitan/anvil2-icons@0.1.3
0.11.1
Patch Changes
- Updated dependencies [
2ef0653]:- @servicetitan/anvil2-icons@0.1.2
0.11.0
Major Changes
-
#2691
4ff7ce9Thanks @ericag1985! - [Exports] Rename public DOM data attributes fromdata-carto*todata-ai-kit*(including theme, scroll-lock, and handle attributes). Update any selectors, tests, or overrides that targeted the old attribute names. -
#2711
4b85324Thanks @ericag1985! - [Icons] Remove@servicetitan/anvil2-ai-kit/icons. Import from@servicetitan/anvil2-iconsinstead. -
#2691
4ff7ce9Thanks @ericag1985! - [AiKitIntlProvider] Rename i18n public surface from Carto to AI Kit:CartoIntlProvider→AiKitIntlProvider,CartoIntlProviderProps→AiKitIntlProviderProps, and message idscarto.*→ai-kit.*. Update imports and anymessagesoverrides keyed by the old ids.
Patch Changes
0.10.0
Major Changes
-
#2669
21efe99Thanks @w-a-t-s-o-n! - Publish Carto’s web AI kit from the Hammer monorepo as@servicetitan/anvil2-ai-kit. Formerly@servicetitan/carto-react-kit.
0.9.0
Major Changes
-
#288
aa78524Thanks @w-a-t-s-o-n! - Do not use the previous version in this package’s changelog. For packages versioned in #287, that entry was merged tomainbut never successfully published (@servicetitan/anvil2-charts-kit@0.0.2,@servicetitan/anvil2-rn-charts-kit@0.1.0,@servicetitan/anvil2-ai-kit@0.8.4,@servicetitan/anvil2-rn@0.0.10). Several of those numbers (and other unpublished builds) are permanently reserved after a security-related npm unpublish and cannot be republished. Bump package versions past the reserved numbers. Upgrade to the versions from this release; do not pin to the removed or unpublished ones.
Minor Changes
- #283
debb29fThanks @ericag1985! - [TooltipSurface] Add the tooltip pill and caret as a standalone visual, for cases where the caller already knows what to explain and where — a chart overlay labelling the point under the cursor, say. Also exports theTooltipCaretDirectionandTooltipSurfacePropstypes
Patch Changes
-
#254
81c808aThanks @AdamLantz! - [Window] Freeze chat scroll while popover/dialog overlays are open (excluding tooltips and details) so top-layer UI stays within the Window chrome -
#284
f8fae3cThanks @jessparis! - [PromptBar] Update the default disclaimer copy to “Atlas is AI and can make mistakes.” -
#283
debb29fThanks @ericag1985! - [Tooltip] Restyle to the new Carto design — a blue surface with an 8px radius, and a caret that is now a rounded-tip vector rather than a sharp triangle. The caret’s hook is nowdata-carto="tooltip-caret"
0.8.4
Minor Changes
- #274
fc7eefdThanks @ericag1985! - [CartoTheme, useCartoTheme] AdduseCartoThemefor reading the resolved"light"/"dark"appearance from the nearestCartoTheme, plus theCartoThemeContextValuetype
0.8.3
Patch Changes
- #262
9cea437Thanks @w-a-t-s-o-n! - [PromptBar] Fix auto-grow when the composer is nested inWindowso wrapped multi-line drafts expand the bar instead of clipping to one row
0.8.2
Patch Changes
- #231
faa01a6Thanks @AdamLantz! - [ChatLayout] Fix short conversations not filling the available conversation region height
0.8.1
Minor Changes
- #239
dfa0b94Thanks @AdamLantz! - [AgentMediaCard, UserMediaMessage] Fix video previews resizing when playback starts — the poster no longer renders at a different size than the video it represents. The frame is now pinned to the video’s real aspect ratio (read from metadata) with the poster filling it. Adds an optionalVideoMediaAttachment.aspectRatio(a CSSaspect-ratiovalue, e.g."16 / 9") to reserve the correct frame size before the video loads for a fully shift-free preview.
Patch Changes
- #239
dfa0b94Thanks @AdamLantz! - [AgentMessage, UserMediaMessage, UserMessage] Pull the action toolbar up by 4px so it sits closer to the message content. The toolbar’s ghost buttons reserve hit-area padding above their glyphs, which made the gap read taller than intended; a negative top offset trims that reserved space back to the intended rhythm.
0.8.0
Major Changes
- #246
ced2173Thanks @ericag1985! - [Card] Removehighlightedprop; the gradient-glow highlight treatment is retired with no replacement. All cards now render with a 1px solid border instead of a resting-state box-shadow (hover lift is unchanged).
Minor Changes
- #246
ced2173Thanks @ericag1985! - [Icons] AddIconNewChatto@servicetitan/anvil2-ai-kit/icons
Patch Changes
-
#246
ced2173Thanks @ericag1985! - [ActionLog] Render each step title inbody/regular(Inter) as plain text instead of aheadline(Sofia Pro) heading -
#246
ced2173Thanks @ericag1985! - [AgentThinking] Render the label inbody/regular(Inter) instead ofheadline(Sofia Pro) -
#246
ced2173Thanks @ericag1985! - [ButtonToggle] Compose Button’ssecondaryrecipe class for the unselected state instead of a parallel one, and remove its lingering box-shadow/border excess -
#246
ced2173Thanks @ericag1985! - [DecorativeIcon] Updateaiorigin’s gradient background to a blue.700 → blue.600 diagonal gradient with white icon color for improved contrast -
#246
ced2173Thanks @ericag1985! - [Text] Updatehighlightedtreatment to a flatblue-50background using the newcomponent.text.highlight.backgroundtoken -
#246
ced2173Thanks @ericag1985! - [ArtifactCard] Fix trailing icon to render a rotated arrow instead of a chevron -
#246
ced2173Thanks @ericag1985! - [AgentMediaCard] ComposeCardfor its surface instead of re-deriving it from raw tokens, picking up the same shadow-removed/bordered visual treatment asCard. The file name now renders as an accessible heading (matchingArtifactCard), with a newtitleLevelprop (default4) to set its level -
#246
ced2173Thanks @ericag1985! - [Button] Updatesecondaryvariant to a borderless, no-elevation treatment; remove the resting/hover/pressed box-shadow from every variant (primary,dangerincluded) and from the shared disabled state -
#246
ced2173Thanks @ericag1985! - [Text] Replace the Fontshare-hosted Satoshi typeface with a self-hosted Sofia Pro Bold@font-face(bundled from@servicetitan/anvil-fonts); theheadlinevariant, and anything usingtypography.fontFamily.expressive, now renders in Sofia Pro Bold -
#246
ced2173Thanks @ericag1985! - [ChatHistory] Restyle the rail to a white surface with a trailing border, add an inset “Recents” label above the list, switch the “New Chat” button to a left-alignedghosttreatment withIconNewChat, and give the selected chat item aninformative-subduedbackground with a rounded accent bar -
#246
ced2173Thanks @ericag1985! - [Suggestion] Update background to the same subtle wash asButton’s secondary variant -
#246
ced2173Thanks @ericag1985! - [ChatLayout] Update background toblue-grey.10and reduce accent borders to1pxfor visual consistency. [TabbedLayout] Reduce accent borders to1px; the inactive tab background now uses the same subtle wash asButton’s secondary variant instead ofblue-grey.10
0.7.0
Major Changes
- #244
eb1344bThanks @ericag1985! - [DecorativeIcon] RenameIconAvatartoDecorativeIconand replacevariant(gradient/plain) withorigin(user/system/ai)
Minor Changes
-
#236
15a46a4Thanks @ericag1985! - [ButtonToggle] Add new component to toggle a button between active and inactive state -
#245
c5715dbThanks @AdamLantz! - [PromptBar] AddisSendingandonStopprops for stop-while-generating response cancellation
Patch Changes
- #238
83d1042Thanks @AdamLantz! - [Link] Fix external-link icon vertical alignment
0.6.0
Major Changes
-
#224
ecd33baThanks @ericag1985! - [ActionLog] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [AgentMediaCard] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [AppHeader] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [AppShell] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Button] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Card] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [CartoTheme] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [ChatLayout] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Checkbox] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [DiffValue] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [GuidanceCard] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Icons] Removestyleprop from the locked icon prop surface; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Link] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Markdown] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [UserMessage, UserMediaMessage, AgentMessage] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [PromptBar] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Suggestion, SuggestionList] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [TabbedLayout] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Text] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [TruncatedText] Removestyleprop; useclassNameinstead -
#224
ecd33baThanks @ericag1985! - [Window] Removestyleprop; useclassNameinstead
Minor Changes
- #237
3e60ca5Thanks @ericag1985! - [Icons] AddIconList,IconGrid,IconLock,IconKey,IconClockFading,IconCalendarCheck,IconTruck,IconFileText,IconRocket,IconLandmark,IconHandCoins,IconGitFork,IconTarget, andIconSquareto@servicetitan/anvil2-ai-kit/icons
0.5.1
Minor Changes
- #225
026560fThanks @AdamLantz! - [AppShell, Window] AdddefaultRailCollapsedanddefaultArtifactCollapsedprops so regions can start hidden on first paint without a post-mount close animation
0.5.0
Major Changes
- #216
fd1ad53Thanks @ericag1985! - [Citation] ReplaceopenInNewprop withtarget/relpassthrough, matchingLink’s convention. Settarget="_blank"to open in a new tab (the external-link icon andrel="noopener noreferrer"follow automatically unless arelis supplied); omittargetfor same-page citations.
Minor Changes
- #217
cab0394Thanks @AdamLantz! - [AgentMediaCard, IconAvatar, UserMediaMessage, Icons] AddAgentMediaCardandUserMediaMessagefor chat media attachments withshowPreview, expanded image/video previews, inline audio playback, andIconAvatarplainvariant plusIconVideo
0.4.1
Minor Changes
-
#211
aa1a67bThanks @AdamLantz! - [AgentMessage] Add agent chat message component with assistant toolbar actions -
#211
aa1a67bThanks @AdamLantz! - [AgentThinking] Export inline agent thinking indicator component
Patch Changes
-
#204
9c07804Thanks @jpex! - [Button] Scalesmall/xsmalllabel type to 14px/12px, shrink labelled prefix/suffix icons to 16px, and lock a 24px content row so heights stay 48/40/32 -
#215
be1fb46Thanks @ericag1985! - [AppHeader] Start-align the title instead of centering it when docked in a non-fullscreenWindow
0.4.0
Major Changes
-
#194
38a13c0Thanks @ericag1985! - [ChatHistory]ChatHistoryItemnow takes a requiredsubtitle(a secondary line, e.g. a timestamp) and an optionalunreadmark —subtitleis a breaking addition for existing items. -
#198
96b404fThanks @ericag1985! - [Icons] AddIconAboveGoal,IconBelowGoal,IconCircleCheck,IconDownload,IconOnTrack,IconPause, andIconPlay, and removeIconArrowRight,IconCheckedSelection, andIconCompletedStepfrom@servicetitan/anvil2-ai-kit/icons— replaceIconArrowRightwithIconArrowUp(rotated),IconCheckedSelectionwithIconCircleCheck, andIconCompletedStepwithIconCircleCheck.
Minor Changes
-
#174
78d6ae5Thanks @w-a-t-s-o-n! - [Checkbox] Add optionalisIndeterminateprop with a minus indicator for mixed select-all states -
#174
78d6ae5Thanks @w-a-t-s-o-n! - [GuidanceCard] Add composite component for Atlas suggested-change visuals with four lifecycle states, selectable change rows, diff display, line-item slots, and responsive action footer -
#174
78d6ae5Thanks @w-a-t-s-o-n! - [Icons] AddIconMinusto@servicetitan/anvil2-ai-kit/icons
Patch Changes
- #198
96b404fThanks @ericag1985! - [ActionLog] Update thesuccessstatus icon toIconCircleCheck.
0.3.5
Minor Changes
-
#180
4ef1ee7Thanks @w-a-t-s-o-n! - [Checkbox] Add Checkbox component. -
#182
bcaeffeThanks @AdamLantz! - [ChatLayout] Add component for an application shell’schatregion — a centered, measure-capped column that stacks an optionalconversationtranscript above an optional bottom-pinnedpromptcomposer. The transcript sticks to the bottom as messages arrive, stops auto-scrolling when the user scrolls up to read history, and shows a “scroll to latest” button while scrolled up; force a scroll to the latest after the user sends viacontrolRef’sscrollToBottom(). The transcript is arole="log"live region for screen-reader announcements. -
#181
49af511Thanks @w-a-t-s-o-n! - [DiffValue] Add before/after diff component for suggested-change UIs. -
#193
34449a0Thanks @AdamLantz! - [Suggestion, SuggestionList] Add Suggestion and SuggestionList components — tappable AI/agent suggestion chips and a wrapping group container that reports the selected suggestion viaonSelect. -
#179
6a85b82Thanks @w-a-t-s-o-n! - [Text] Addhighlightedsurface flag for suggested-change styling. -
#179
6a85b82Thanks @w-a-t-s-o-n! - [TruncatedText] Add plain-string truncation with Show more / Show less. -
#173
a665ddaThanks @ericag1985! - [ActionLog] Add component for rendering a collapsible vertical timeline of agent steps from a configuration-firststepsarray
Patch Changes
-
#195
e7beb96Thanks @AdamLantz! - [ChatLayout, ChatHistory, TabbedLayout, AppShell] Background color corrections across chat and layout surfaces. Tab chips gain a continuous 3px left border from the first tab through the panel content. Resize handles across AppShell and TabbedLayout now show a dynamic blue pill indicator that follows the cursor along the cross axis instead of a static background tint. TabbedLayout split panes meet at a flush 0px seam with an out-of-flow handle. -
#178
b1a54ffThanks @w-a-t-s-o-n! - [Icons] Fix custom Icon SVG sizing via CSS instead of width/height attributes. -
#170
106b7d3Thanks @AdamLantz! - [TabbedLayout] Fix the horizontal-split resize divider. It now tracks the cursor as you drag instead of drifting out of sync, and it responds reliably when the split opens inside aWindow. Split-pane headings no longer show the active-tab underline, which only conveys meaning in the stacked tab strip. -
#191
6fee6ceThanks @ericag1985! - [Menu] Fix the scrolling option list overflowing the popover’s rounded corners -
#145
4fc2468Thanks @tounsoo! - [AppShell, BottomSheet, Button, Card, Citation, Dialog, Link, Menu, PromptBar, TabbedLayout, UserMessage, Window] Drive motion from semantic motion tokens instead of inlined curves. Hover/press/focus acknowledgments now use the fasterfeedbackduration (100ms, down from 200ms), panel and overlay transitions use theemphasisduration with directionalenter/exiteasing, and easing curves shift to the semantic motion values. Animation timings and curves change as a result. [Tokens] Retarget thebottom-sheetanddialogfocus-ringtransition.durationfrommotion.duration.transitiontomotion.duration.feedback(200ms to 100ms). -
#190
ab27e8cThanks @ericag1985! - [Button] Button label text now renders in medium weight (Inter Medium). -
#188
520d9dcThanks @AdamLantz! - [Window] Smooth out the docked↔fullscreen morph. Maximizing then restoring a docked panel that has been dragged now animates back to where the panel actually sits instead of snapping to its default corner at the end.
0.3.4
Minor Changes
- #160
8d837f1Thanks @tounsoo! - Citation now renders a 1px solid white hairline border. Adds a newcitation.border.colorcomponent token that aliases primitive neutral 0 (white) directly, so the border stays white in both light and dark appearances.
Patch Changes
-
#168
95f9c55Thanks @w-a-t-s-o-n! - [Card] Fixhighlightedgradient pulse glow extending unevenly on non-square cards -
#162
d6044e5Thanks @tounsoo! - Tokenize PromptInput and the AgentPrompt header foreground.- carto-tokens — adds
agentPrompt.header.foreground(aliasesforeground.color.standard) and a newprompt-input.tokens.jsonwithpromptInput.font(composite typography),promptInput.foreground,promptInput.placeholder.foreground, andpromptInput.disabled.foreground. - carto-react-kit — wires the AgentPrompt question heading to the new header token, and routes PromptInput’s text, placeholder, disabled, and typography through the new component tokens (previously raw
primitive.font.*and directsemantic.*references). All values are unchanged, so there is no visual change.
- carto-tokens — adds
-
#167
ece80f9Thanks @tounsoo! - [PromptBar] Fix inline padding layout and usesemantic.opacity.disabledtoken
0.3.3
Minor Changes
-
#149
48247a2Thanks @w-a-t-s-o-n! - [Exports] Add@servicetitan/anvil2-ai-kit/tokenssubpath re-exporting the Carto token proxies (primitive/semantic/component/cartoThemeClass), so consumers reference the kit’s single compiled theme instead of recompiling@servicetitan/carto-tokens. -
#132
f8ef3daThanks @w-a-t-s-o-n! - [Dialog] MakeprimaryActionoptional to support footerless dialogs
Patch Changes
-
#153
35243f8Thanks @tounsoo! - [BottomSheet] Fix scrollable body padding so the scrollbar sits at the sheet edge and prevent the header close button from squishing -
#154
2c4029fThanks @tounsoo! - [Dialog] Fix scroll shadows spanning inset content width by splitting block and inline padding -
#155
fd93c63Thanks @tounsoo! - [TabbedLayout] Unify panel shell and body internal layout classes
0.3.2
Minor Changes
-
#146
175ac52Thanks @AdamLantz! - [Window] Add drag-to-move for the docked panel. The control surface now exposesdragHandleProps(viacontrolRef/useAppSurface()); spread it onto a leadingAppHeaderaction to turn that action into a grip that drags the panel anywhere in the viewport, with arrow keys nudging it for keyboard users (clamped inside the viewport). The dragged position survives a maximize→restore round-trip (restore returns the panel to where it was dragged) and resets to the default corner only on close. [AppHeader]AppHeaderActiongains an optionaldragHandlePropsfield. When set, that action renders as a drag handle (carrying the move handlers and grab cursor) instead of a press button — for use with theWindowdrag handle above. Inert when there’s no docked window to move, so it’s safe to pass unconditionally. [Window] Open and size state are now controllable. Passopen/state(withonOpenChange/onStateChange) to let an external owner be the single source of truth; omit them to keep the existing uncontrolled behavior seeded bydefaultOpen/defaultState. The change callbacks fire on every transition — including ones the window triggers itself (a header close/maximize button, or a region intent that auto-opens) — so a controlling store hears user-driven changes and can run its own side effects. Fully backward-compatible: all new props are optional.
Patch Changes
-
#146
175ac52Thanks @AdamLantz! - Fix broken type declarations on the main entry. Several public declarations re-exported types fromsrc/internal/, which the build excludes from.d.tsemit — so the shipped declarations referenced../../internal/…modules that aren’t in the package, and consumers hit “Cannot find module”. The fix moves those types to public locations rather than shippinginternal/:- The
appSurfacemodule (useAppSurface,AppSurfaceHandle,ShowArtifactOptions,WindowDragHandleProps,ArtifactPresentation) moved frominternal/appSurface/tocomponents/AppShell/appSurface/. Consumed byAppShell,Window,AppHeader, andTabbedLayout; the public re-export path (@servicetitan/anvil2-ai-kit) is unchanged. - The public Waveform types (
WaveformPreset,WaveformSource) now live inPromptBar’s publictypes.ts(where they were already re-exported);WaveformPropsstays internal.
./iconssubpath entry has the same defect (dist/icons/*.d.tsreference../internal/components/Icon/*); tracked for a separate fix. - The
0.3.1
Minor Changes
-
#115
fbc44d8Thanks @pbuckingham-st! - [AgentPrompt] Add component for the agent’s inline clarifying-question prompt —singleormultiselect with an optional free-text “Something else…” row (shown whenonOtherChangeis wired), an optional multi-step Back/Next/Send stepper, an overridable questionheadingLevel, an always-present close button, and a resolved answer passed toonSend/onNext -
#104
11a4c84Thanks @AdamLantz! - AppShell: the artifact is now presented as a modal drawer only when the shell is narrow. At/above a measured shell width of 720px the artifact is always inline — drag-detach, the imperativeshowArtifact/toggleArtifact, and fit-fallout are all gated, and an artifact drawer opened below 720px re-attaches inline when the shell widens past it. To keep the artifact inline when it can’t fit alongside the rail (720–960px), the rail yields to a drawer (it’s the lowest-priority region and collapses first); the rail may still be a drawer at ≥ 720px. Below 720px, the artifact behaves exactly as before. This also affects the read-onlyartifactPresentationonuseAppSurface()— it never reports"drawer"for the artifact at ≥ 720px. -
#104
11a4c84Thanks @AdamLantz! - AppShell: when the shell widens, extra space now goes to the artifact first — up to the width it was opened at (itsregular/largepreset, or the user’s last dragged width) — and only then to chat. Previously all extra space went to chat and the artifact stayed at its shrunken width. The artifact now tracks a desired width (set by an imperative open or a user drag) that’s clamped at render rather than overwritten on resize, so shrinking the shell clamps the artifact down without losing its target and re-widening restores it. Chat still absorbs any space beyond the artifact’s desired width. -
#119
04e0174Thanks @ericag1985! - [Icons] AddIconAtlasLogo— the Atlas brand mark, a fixed full-color gradient icon (it ignores thecoloroverride, like the Load spinner). -
#121
acb1ed5Thanks @ericag1985! - [ChatHistory] Add component for the conversation navigation rail — a “New Chat” button (onNewChat) above a single-select list of past chats (items,selectedKeys/onSelectionChange), with a history-less state whenitemsis empty -
#117
629bf5dThanks @pbuckingham-st! - [Citation] Add component for rendering inline source citations as a pill-shaped link. Takes a requiredhrefandtext;openInNew(defaulttrue) setstarget="_blank"+rel="noopener noreferrer"and renders a trailing external-link icon, or setfalsefor on-page anchors. The recipe consumes the newcitationcomponent-token tier (aliasing the semantic tier for light/dark). -
#110
71b7210Thanks @tounsoo! - [Tokens] Add a globalfocussemantic category —focus.width({size.75}, the new 3px primitive rung),focus.offset({size.50}, 2px), andfocus.color({border.color.accent}) — so every focus ring shares one system-wide treatment.button.focus.ring.{color,width,offset}now aliasfocus.*(no visual change: still#0265dc, 3px, 2px offset), and the newsize.75= 3px primitive backs the ring width. [React Kit]Dialog(body scroll region) andPromptBar(disclaimer link) now consume the globalsemantic.focus.*tokens instead of inline outline literals. The Dialog ring is unchanged (3px / 2px / accent); the PromptBar disclaimer-link ring grows from 2px to the global 3px width so it matches every other focus ring. -
#118
e88586eThanks @ericag1985! - [ArtifactCard] Add a button-surface card for AI artifacts, with a title, optional description, configurable heading level, and anartifactTypethat selects its decorative gradient-avatar icon. -
#118
e88586eThanks @ericag1985! - [IconAvatar] Add a gradient-avatar component that frames a Carto icon at a fixed size and color, for use in cards and other surfaces. -
#116
0399b0aThanks @ericag1985! - [Menu] Add component for action and selection menus, with a configureditemslist,triggerbutton,placement, andselectionMode -
#114
59ddeb9Thanks @ericag1985! - [Card] Add component for static, link, and button surfaces withpaddingscale andhighlightedtreatment -
#103
53f4704Thanks @ericag1985! - [BottomSheet] Add bottom-anchored, full-width modal overlay with a drag- and keyboard-resizable handle (3 detents), a title/subheader/close-button header, and a scrollable body. -
#118
e88586eThanks @ericag1985! - [Icons] AddIconFile,IconInvoice, andIconMessageSquareTextto@servicetitan/anvil2-ai-kit/icons -
#104
11a4c84Thanks @AdamLantz! - Add AppShell — a fully-fluidrail/chat/artifactapplication layout (no breakpoints). A side region that can’t fit inline becomes a modal drawer rather than disappearing; the artifact is one persistent panel that morphs between its inline track and the drawer (it also drag-resizes and drag-detaches). Region state is internal, driven imperatively via theAppSurfaceHandle(show/hide/toggleper region;showArtifact({ width })opens"regular"560px or"large"720px-floor) from thecontrolRefprop or theuseAppSurface()hook. The same handle works in a bare shell or inside aWindow, so a control anywhere — including a card in the chat — drives the layout the same way. ExportsAppShell,useAppSurface, and theAppShellProps/AppSurfaceHandle/ArtifactWidth/ShowArtifactOptionstypes. -
#104
11a4c84Thanks @AdamLantz! - Add AppHeader — a horizontal header bar:leadingActions/trailingActions(generic{ icon, label, onPress }descriptors rendered as ghost icon-only CartoButtons) around a centeredtitle(substantial-headline scale,<h1>semantics, ellipsis-truncated). Renders a semantic<header>; drops intoAppShell’sheaderslot (wiring its toggles viauseAppSurface) but works standalone. ExportsAppHeaderand theAppHeaderProps/AppHeaderActiontypes. -
#120
3e3ccc1Thanks @AdamLantz! - Add TabbedLayout — a multi-pane layout for the artifact region. It shows one or more tabs as a tab strip (stacked) or two side-by-side / stacked panes (vertical-split / horizontal-split, drag-resizable); a single tab renders just its label heading and content. The mode picker appears at ≥ 720px and the layout falls back to stacked below that. In an artifact drawer it surfaces a close button. ExportsTabbedLayoutand theTabbedLayoutProps/TabbedLayoutMode/TabbedLayoutTabtypes. -
#104
11a4c84Thanks @AdamLantz! - Add Window — chrome that hosts anAppShellas a fixed-position chat window (docked, bottom-right) that grows into a fullscreen modal and shrinks back (shared-element animation). Theheaderandchatnodes are preserved across the transition (relocated, not remounted), so conversation state survives expand/restore. Window + shell share one control surface — theAppSurfaceHandleviacontrolReforuseAppSurface():open/close/toggle,maximize/restore/toggleSize, plus the shell’s region intents. Region intents auto-compose with the window, soshowArtifact()from a docked chat maximizes and opens the artifact in one call — no docked/fullscreen branching for consumers. Esc / scrim-click restores to docked. ExportsWindowand theWindowProps/WindowStatetypes.
Patch Changes
-
#123
c8b8b28Thanks @tounsoo! - [Tokens] AddagentPrompt.*component tokens for the AgentPrompt surface — the card (background,border.color,radius,elevation,padding,gap), region spacing (header.gap,options.gap,actions.gap), the option rows (option.background.{resting,hover,pressed},option.foreground,option.padding,option.radius,option.selected.border.color), the multi-select checkbox indicator (checkbox.border.color,checkbox.foreground,checkbox.selected.background), the step counter (stepCount.foreground), and the empty-answer error (error.foreground,error.gap), each aliasing the semantic tier. Also adds a semanticopacity.disabled(0.6) token.AgentPromptnow consumes these via thecomponent.agentPrompt.*proxy instead of reaching intosemantic.*directly. As part of this:- Option rows are now proper interactive surfaces: their background uses
background.color.subtle.{resting,hover,pressed}(replacing the prior translucentrgba(4,4,4,…)fills) with the pairedforeground.color.on.subtletext color. - The disabled-dim opacity is now the shared
opacity.disabledtoken; the option rows shift from0.5to the system0.6. - The focus ring adopts the semantic focus tier (
focus.width/focus.color/focus.offset), shifting the ring thickness from a hard-coded 2px to the system 3px.
- Option rows are now proper interactive surfaces: their background uses
-
#139
ca506f0Thanks @tounsoo! - [Tokens] AddartifactCard.*component tokens for the ArtifactCard surface —foreground(the title/description/arrow color, aliasingforeground.color.standard),gap(the horizontal rhythm between the lead cluster and the trailing arrow, and between the icon and text, aliasingspacing.base), andtext.gap(the title↔description lockup, aliasingspacing.micro).ArtifactCardnow consumes these via thecomponent.artifactCard.*proxy instead of reaching intosemantic.*/primitive.*directly. No visual change: the title↔description gap was already 4px (primitive.size["100"]), now expressed as the matchingspacing.microintent. -
#126
d5c6c81Thanks @tounsoo! - [Tokens] Add thebottomSheetcomponent token set, aliasing the semantic tier:surface.{background,foreground,radius,elevation},padding.{inline,block.end},gap,header.{gap,padding.inline},subheader.foreground,handle.padding.block.{start,end},handle.grip.{width,height,radius,background},focus.ring.{color,width,offset}, andfocus.ring.transition.{duration,easing}(aliasingmotion.duration.transition/motion.easing.transition— the everyday color-shift motion intent;excludePlatforms: figma).handle.grip.backgroundis a provisional gap (primitive{color.neutral.400}— no foreground/handle intent matches it yet);handle.grip.{width,height}are intentional primitives ({size.900}/{size.100}). [React Kit]BottomSheetnow consumes itscomponent.bottomSheet.*tokens instead of inline semantic/primitive literals. Visual changes adopted from the token mappings: top corners use the large-containerradius.generous(24px, up from 12px); the surface elevation and text pair with the standard surface; the drag-handle focus-ring offset normalizes to the system 2px (was 4px); and the now-shippedfocus.*tokens back both the grip and body focus rings. The vestigial 1px top hairline (not in the Figma spec) is removed — the drop shadow alone separates the sheet from the backdrop. The shared modal backdrop now consumessemantic.scrim.color(no visual change). The body focus-ring fade now consumesfocus.ring.transition.{duration,easing}(200ms/cubic-bezier(0.4, 0, 0.2, 1)); its easing adopts themotion.easing.transitioncurve, shifting from the kit’s inline[0,0,0.4,1]— making BottomSheet the first consumer of the motion tokens. -
#108
011c6eaThanks @tounsoo! - [Tokens] Add per-variantbutton.<variant>.border.widthtokens (secondary→size.25/ 1px,primary/ghost/danger→size.0) so the borderless variants gain border capability without changing their current footprint.Button’ssecondaryvariant now consumes its width token directly — replacing the prior hard-coded1pxliteral — and subtracts it from the padding so the bordered variant keeps the same outer size as the borderless ones (which stay atborder-width: 0). -
#135
c00c7d5Thanks @tounsoo! - [Tokens] Add thecardcomponent token set, aliasing the semantic tier:card.background.{resting,hover}({background.color.standard.*}),card.radius({radius.moderate}),card.elevation.{resting,hover}({shadow.ambient.resting}/{shadow.ambient.hover}),card.padding.{snug,base,relaxed}({spacing.*}), andcard.focus.ring.{color,width,offset}({focus.*}). No visual change — these formalize the valuesCardalready uses (resting + hover elevation now route through theshadow.ambientfamily). [React Kit]Card.css.tsnow consumescomponent.card.*instead of reaching intosemantic.*directly. The disabled state consumessemantic.opacity.disabled, and the in-place transition consumessemantic.motion.duration.transition+semantic.motion.easing.transition— adopting the semantic ease-in-out curve (cubic-bezier(0.4, 0, 0.2, 1)) in place of the prior inlinedcubic-bezier(0, 0, 0.4, 1)(duration unchanged at 200ms). Only the highlight gradient remains inline as a flagged gap (gradients have no DTCG representation). -
#137
ec0c239Thanks @tounsoo! - [Tokens] Add thedialogcomponent token set, aliasing the semantic tier:overlay.padding,surface.{background,foreground,border.color,border.width,radius,elevation},padding,gap,header.gap,footer.gap,focus.ring.{color,width,offset}, andfocus.ring.transition.{duration,easing}(aliasingmotion.duration.transition/motion.easing.transition— the everyday color-shift motion intent;excludePlatforms: figma). Values cross-checked against Figma (Carto Web Components, node 787:3308): width 360px, padding/gap 24px, header gap 8px, footer gap 12px, background white all match. Adopted value shifts (semantic intent over the Figma literal):surface.border.coloraliases{border.color.subtle}(neutral.30, #f6f6f6, from Figma’s #e6e6e6);surface.radiusaliases{radius.generous}(24px, from Figma’s 12px) to match BottomSheet’s panel radius.surface.elevationaliases{shadow.floating.resting}(the shared transient-surface intent; blur follows the semantic token).surface.border.widthis{size.25}(1px). [React Kit]Dialognow consumes itscomponent.dialog.*tokens instead of inline semantic/primitive literals. The surface foreground pairs with the standard surface (foreground.color.on.standard, same neutral.800 value — no visual change). The body focus-ring fade now consumesfocus.ring.transition.{duration,easing}(200ms/cubic-bezier(0.4, 0, 0.2, 1)); its easing adopts themotion.easing.transitioncurve, shifting from the prior inline[0,0,0.4,1]to match BottomSheet + Button. The fixed360pxsurface width stays an intentional raw literal (no semantic intent, no matching size primitive);zIndex: 1000is kept raw on purpose (Carto has no layering token scale yet); the shared modal backdrop continues to consumesemantic.scrim.color. -
#133
0454f19Thanks @w-a-t-s-o-n! - [Dependencies] Move React Aria (react-aria,react-aria-components,react-stately) frompeerDependenciestodependenciesand externalize all runtime deps in the build (onlyreact/react-domstay peers);carto-tokensstays a devDependency so consumers don’t need vanilla-extract. -
#116
0399b0aThanks @ericag1985! - Ghost buttons now raise to the shared elevation on hover, active, and focus-visible (matching Figma), instead of staying flush. -
#129
b1a78a4Thanks @tounsoo! - [Tokens] Addlinkcomponent tokens that alias the semantic tier:link.foreground.resting({foreground.color.standard}) andlink.foreground.hover({foreground.color.informative}) for the link’s text color,link.radius({radius.trim}) for the focus-ring corner, andlink.icon.gap({spacing.micro}) for the trailing external-link icon’s lockup.Link’s recipe now consumes these tokens in place of the rawsemantic.*/primitive.*references it used before — all value-preserving, no rendered change. The shared focus-ring (component.button.focus.ring.*) and the inline transition curve are unchanged: the ring is still the kit’s single button-owned definition consumed directly, and motion adoption stays deferred pending the curve-shift decision (matchingButton). -
#134
c083c3cThanks @tounsoo! - [Tokens] Addmenu.*component tokens for the Menu surface and options — the popover (surface.background,surface.radius,surface.elevation), the option list (list.gap,list.padding), the option rows (option.background.{resting,hover,pressed},option.foreground.resting,option.gap,option.radius,option.padding.{inline,block},option.opacity.disabled), the selected option (option.selected.background.{resting,hover,pressed},option.selected.foreground.{resting,hover,pressed}), and the focus ring (focus.ring.color,focus.ring.width), each aliasing the semantic tier. [Tokens] Extend the semantic tier so the Menu’s selected states alias real intents instead of raw primitives:background.color.informative-subduedis promoted from a scalar to a stateful group —resting(blue.50),hover(blue.100),pressed(blue.200).foreground.color.on.informative-subduedis added —resting(blue.600),hover(blue.700),pressed(blue.800) — the on-color paired with the informative-subdued surface.
Citation’s hover surface moves to the.restingleaf with no value change (background.color.informative-subdued→.resting).Menunow consumes these via thecomponent.menu.*proxy instead of reaching intosemantic.*/primitive.*directly. As part of this:- The popover surface uses
radius.moderate(16px) and the option rows useradius.trim(12px), matching the Figma bindings (semantic/radius/moderateon the container,semantic/radius/trimon the options). - The disabled-dim opacity is now the shared
opacity.disabledtoken (replacing a hard-coded0.6). - The selected option surfaces/text alias
background.color.informative-subdued.{resting,hover,pressed}andforeground.color.on.informative-subdued.{resting,hover,pressed}(no morecolor.blue.*primitive interims). - The unselected option uses the
ghostsurface intent —background.color.ghost.{resting,hover,pressed}— paired withforeground.color.on.ghosttext (neutral.800, a deliberate shift from Figma’sforeground/color/default#040404, which has no carto equivalent).
43:290): popover background/elevation/radius, option spacing/typography, the selected-state surfaces/text, and the 180/360px width mechanics all match. The newinformative-subdued/on.informative-subduedhover values (blue.100 #cce3ff, blue.700 #1d4ca3) equal Figma’sprimary-subdued-hover/primary-hover. The unselected option’s hover/press tints intentionally use the translucentghostintent (neutral.400 @ 0.08/0.16) rather than Figma’s opaquestandard.hover(#f9f9f9). The option pressed/active states are kept from the RAC/anvil2 interaction model but are beyond the Figma spec, which defines only default/hover/disabled. Remaining gap: the popover min/max width (180/360px) stay raw literals in the recipe as no width scale exists at any tier. -
#136
5bf6962Thanks @tounsoo! - [Tokens] Addshadow.ambient— a new low rung on the elevation scale for a subtle interactive affordance. Unlike the directionalraised/floatingshadows,ambientis a soft, diffuse shadow that sits flush to the surface with no offset (neutral.800 @ 4% resting / 8% hover, blur{size.400}), signalling an element is interactive without pronounced elevation. New ladder:flush (0) → ambient (4%) → raised (12%) → floating (24%).flush,raised, andfloatingare unchanged (same values and Figma variable IDs), so existing consumers are unaffected. [React Kit]Cardnow consumessemantic.shadow.ambient.{resting,hover}for its resting and hover elevation, replacing the inline custom ambient shadow (the resting value is identical, resolving the long-standingTODO(carto-tokens)) and the priorraised.restinghover (12% → ambient 8%, a softer hover lift). -
#104
11a4c84Thanks @AdamLantz! - AppShell / Window accessibility and RTL fixes from review:- AppShell: dismissing the artifact drawer with Escape now stops propagation, so it no longer also collapses a surrounding fullscreen
Window; on close it moves focus to the chat region (a programmatic focus target) instead of letting focus fall to<body>. The artifact scrim is markedaria-hidden. The resize separator no longer emits an undefinedaria-valuemaxbefore the shell is measured (it falls back to the artifact min). Positional styles use logical properties (inset-inline-*) for RTL. - Window: the docked panel is now a named
region(using the same accessible name as the fullscreen dialog, overridable viaaria-label) so assistive tech can locate it.
- AppShell: dismissing the artifact drawer with Escape now stops propagation, so it no longer also collapses a surrounding fullscreen
0.3.0
Major Changes
- #90
7a412a2Thanks @ericag1985! - [Icons] RemoveIconCirclefrom@servicetitan/anvil2-ai-kit/icons. It is no longer part of the design. For the Status Old state, useIconCircleSmall.
Minor Changes
-
#90
7a412a2Thanks @ericag1985! - [Icons] AddIconArrowRightto@servicetitan/anvil2-ai-kit/icons. -
#80
085fa1fThanks @AdamLantz! - [CartoIntlProvider] Add component for localizing Carto’s built-in strings. It renders the kit’s own scopedreact-intlcontext so Carto strings never collide with a consuming app’s setup. The provider is optional — components render English with no provider mounted. Passlocaleto switch language and keep React Aria date/time formatting in sync, ormessagesto override individual built-in strings by Carto message ID. -
#75
c7bf5c0Thanks @ericag1985! - [Button] Add adangervariant for destructive actions — a filled, raised button on the critical/red surface, composing with all existing sizes and icon configurations. -
#100
7c5244bThanks @ericag1985! - [Link] Add component for rendering accessible inline and standalone links. -
#86
a451448Thanks @ericag1985! - [Dialog] Add component for modal confirmation dialogs, withtrigger, controlled open state, and footerprimaryAction/secondaryActionButtons (including adangerconfirm variant) -
#90
7a412a2Thanks @ericag1985! - [Icons] AddIconMenuto@servicetitan/anvil2-ai-kit/icons. -
#80
085fa1fThanks @AdamLantz! - [PromptBar] Localize the component’s built-in strings through the kit’s i18n layer — the placeholder, attachment add/remove, voice, send/done/dismiss/cancel actions, and the disclaimer now resolve viauseCartoIntl. They render in English by default (unchanged copy) and respond toCartoIntlProvider’slocale/messages. Theplaceholderprop still overrides as before; the attachment remove label interpolates the attachment name via ICU. Thedisclaimerprop now takes a singlemessagestring with a<link>…</link>placeholder marking the linked text, replacing the separatetext+linkLabelfields. This keeps the wording and the link’s position in the sentence as one translatable unit — a translator (or consumer) can place the link mid-sentence — rather than assuming text-then-link concatenation.linkHrefis unchanged. -
#69
75fc760Thanks @AdamLantz! - [PromptBar] Add component for composing AI prompts with text, attachments, and voice transcription.
Patch Changes
-
#100
7c5244bThanks @ericag1985! - [Markdown] Restyle links to reuse theLinktreatment: underlined near-black at rest, informative blue on hover, and a focus ring (replacing the flat blue style). -
#59
2b25a96Thanks @tounsoo! - [Tokens] Addbuttoncomponent tokens (primary/secondary/ghostbackgrounds, foregrounds, elevation;font,gap,padding,radius, andfocus) and wireButtonto consume them via thecomponentproxy instead of hard-coded primitives. The button’s icon size consumes the existingicon.size.largetoken directly (no redundantbutton.iconalias) -
#85
69c049cThanks @tounsoo! - [Tokens] Addbutton.dangercomponent tokens (background,foreground,elevation) aliasing the critical semantic surface, and wire theButtondangervariant to consume them via thecomponentproxy instead of readingsemantic.*critical tokens directly -
#77
987b206Thanks @tounsoo! - [Tokens] Add theborder.color.accentsemantic intent (brand-interactive outline for focus rings, active navigation, and selected controls) and restructure the button’s focus tokens into abutton.focus.ringgroup (color→border.color.accent, pluswidthandoffset).Buttonnow consumesbutton.focus.ring.{color,width,offset}for its focus ring instead of a primitive color alias and an inline outline width. No visual change — the ring stays#0265dc, 3px thick, 2px offset. -
#83
fdcc420Thanks @tounsoo! - [PromptBar] AddpromptBarcomponent tokens and wire the recipe to consume them New semantic-aliasing component tokens (promptBar.*) cover the bar surface (background, border, radius, elevation, gap, padding), the attachment tile, the disclaimer, and the error foreground. The PromptBar recipe now consumescomponent.promptBar.*instead of referencingsemantic/primitivedirectly. Values map 1:1 from the prior references except the attachment-tile background, which adoptsbackground.color.subtle.resting(neutral.30 → neutral.50) and now follows light/dark. -
#90
7a412a2Thanks @ericag1985! - [Icons] UpdateIconGripto render LucideGripVertical, the six-dot vertical drag-handle glyph. -
#90
7a412a2Thanks @ericag1985! - [Icons] UpdateIconStatusNewto render incurrentColorinstead of a hardcoded blue, so it inherits text color like other icons. -
#65
1dd0874Thanks @tounsoo! - [Tokens] Addtooltip.radius,tooltip.padding.inline,tooltip.padding.block, and atooltip.fonttypography composite, and repointtooltip.foreground/tooltip.backgroundto theprominentsemantic intents (foreground.color.on.prominentandbackground.color.prominent.resting) in place of rawcolor.neutralprimitives.Tooltipnow sources its surface (color, radius, padding) and typography from these tokens via thecomponentproxy instead of hard-coded primitives, and renders its content in a plain<span>carryingtooltip.fontrather than a nested<Text>. -
#74
3935c98Thanks @tounsoo! - [UserMessage] Style againstuserMessageandmessageToolbarcomponent tokens instead of raw primitives -
Updated dependencies [
2b25a96,69c049c,987b206,fdcc420,3bcff52,8cad2e0,9c85f60,7d8d6b3,57c6646,9b3dfa8,36c2afe,03a0e99,1dd0874,3935c98,2b25a96]:- @servicetitan/carto-tokens@0.1.2
0.2.0
Major Changes
-
#37
ed3dec3Thanks @ericag1985! - [VisuallyHidden] Remove component; usearia-labelon the interactive parent with decorativeIconinstead -
#49
45c4c42Thanks @ericag1985! - [UserMessage] Add an action toolbar and new props:timestamp(required) renders the copy action and formatted send timeonRetryadds a retry action whenerroris setrevealToolbarOnHoverhides the toolbar until the message is hovered or focused
Minor Changes
-
#37
ed3dec3Thanks @ericag1985! - [Button] Add component (primary / secondary / ghost; medium / small / xsmall) with requiredlabel, optionalicon, and touch promotion forxsmall -
#37
ed3dec3Thanks @ericag1985! - [Icons, Types] ExportIconElementtype alias for factory-created Carto icons -
#31
69ef424Thanks @tounsoo! - [Text, Tokens] Convert text tokens to DTCG typography composites; fix broken font-family in Swift build;Textnow spreads composite values for font-family, weight, and line-height
Patch Changes
0.1.0
Minor Changes
- a3b08e5: [Icons] Add per-icon components under the
./iconssubpath (25 Lucide-backed, 13 custom ServiceTitan icons) - a8863c6: [Markdown] Add component for rendering GFM markdown via a required
sourceprop - 16bc697: [Text] Add component (headline / body / eyebrow variants) and
components.text.*tokens - a3b08e5: [CartoTheme] Add container component with
appearance="auto" | "light" | "dark" - b6292cc: [Tooltip] Add internal component with tooltip color tokens and MFE shadow-DOM support
- 17b11d2: [UserMessage] Add chat bubble component for end-user-authored messages
Patch Changes
- b6292cc: [CartoTheme] Swap font loading to direct
rel="stylesheet"withfont-display: optional - 1c2ea19: [Tokens] Singularize vanilla-extract tier names (
primitives/components→primitive/component; deprecated aliases remain for one release) - Updated dependencies [2578aea]
- Updated dependencies [a3b08e5]
- Updated dependencies [16bc697]
- Updated dependencies [b6292cc]
- Updated dependencies [5aa7870]
- Updated dependencies [04c22a3]
- Updated dependencies [d0ec6be]
- Updated dependencies [0638cef]
- Updated dependencies [c676116]
- Updated dependencies [b6292cc]
- Updated dependencies [2e9073b]
- Updated dependencies [48de98e]
- Updated dependencies [8178a7d]
- Updated dependencies [1c2ea19]
- Updated dependencies [128f12e]
- Updated dependencies [974616f]
- @servicetitan/carto-tokens@0.1.0