Dev Toolbar App API
The Astro Dev Toolbar App API allows you to create apps that can be used to extend the Astro Dev Toolbar. This allows you to add new features and integrations with third-party services.
Adding apps
Section titled Adding appsAstro Integrations can add apps in the astro:config:setup
hook using the addDevToolbarApp
method.
Structure of a Dev Toolbar App
Section titled Structure of a Dev Toolbar AppA Dev Toolbar App is a .js
or .ts
file that default exports an object with the following required properties:
id: string
Section titled id: stringA unique identifier for the app. This will be used to uniquely identify the app in hooks and events.
name: string
Section titled name: stringThe name of the app. This will be shown to users whenever the app needs to be referenced using a human-readable name.
icon: Icon
Section titled icon: IconThe icon of the app. This will be used to display the app in the UI. This can either be an icon from the icon list, or a string containing the SVG markup of the icon.
init: (canvas: ShadowRoot, eventTarget: EventTarget) => void
Section titled init: (canvas: ShadowRoot, eventTarget: EventTarget) => voidThis is the core part of the app. This function will be called when the app is loaded, which will either be when the browser is idle or when the user clicks on the app in the UI.
The function receives two arguments:
canvas
Section titled canvasA ShadowRoot that the app can use to render its UI. Every app receive its own dedicated ShadowRoot for rendering its UI. Additionally, the parent element is positioned using position: absolute;
and as such, the app UI automatically won’t affect the layout of the page.
eventTarget
Section titled eventTargetAn EventTarget
that can be used to send and receive events from the Dev Toolbar.
beforeTogglingOff
Section titled beforeTogglingOffThis optional function will be called when the user clicks on the app icon in the UI to toggle off the app. This function can be used, for example, to perform cleanup operations, do an animation, or to ask the user for confirmation before toggling off the app.
If a falsy value is returned, the toggling off will be cancelled and the app will stay enabled.
canvas
Section titled canvasThe ShadowRoot of the app, can be used to render any UI needed.
Client-side Events
Section titled Client-side EventsUsing the eventTarget
argument on the init
hook, apps can send and receive events from the Dev Toolbar. The following events are available:
app-toggled
Section titled app-toggledThis event is fired when the user clicks on the app icon in the Dev Toolbar.
state: boolean
Section titled state: booleanIndicates whether or not the app is enabled after the user’s click.
toggle-notification
Section titled toggle-notificationThis event can be sent to inform the user that the app requires attention.
state: boolean
Section titled state: booleanIndicates whether or not the app has a notification for the user. When true
, the app icon will be highlighted using a red dot. Conversely, when false
, the highlight will be removed. If this property is not specified, true
will be assumed.
toggle-app
Section titled toggle-appThis event can be sent from your app to change the state of your app. This can be useful, for instance, to implement a “Close” button in your app’s UI.
state: boolean
Section titled state: booleanIndicates whether or not the app should be enabled. When true
, the app will be enabled. Conversely, when false
, the app will be disabled. If this property is not specified, true
will be assumed.
Client-Server Communication
Section titled Client-Server CommunicationUsing Vite’s methods for client-server communication, Dev Toolbar Apps can communicate with the server.
In addition to being able to send and receive custom messages, the Dev Toolbar also sends the following messages, where APP_ID
is the app’s ID:
astro-dev-toolbar:APP_ID:initialized
Section titled astro-dev-toolbar:APP_ID:initializedThis message is sent when the app is initialized. The data for this message is empty.
astro-dev-toolbar:APP_ID:toggled
Section titled astro-dev-toolbar:APP_ID:toggledThis message is sent when the user clicks on the app icon in the UI. The data for this message is a boolean indicating whether the app is enabled or not.
UI Toolkit
Section titled UI ToolkitThe Dev Toolbar includes a set of web components that can be used to build apps with a consistent look and feel.
astro-dev-toolbar-window
Section titled astro-dev-toolbar-windowShows a window with optionally a title and an icon.
window-title
is a string that will be shown at the top of the toolbar window. window-icon
can either be a string of a SVG file or an icon from the icon list.
The slot of the component will be used as the content of the window.
astro-dev-toolbar-card
Section titled astro-dev-toolbar-cardShows a card with optionally an icon
. Optionally, if a link
is passed, the card will be clickable and will open the link in a new tab.
The slot of the component will be used as the content of the card.
astro-dev-toolbar-toggle
Section titled astro-dev-toolbar-toggleShows a toggle element, acting as a checkbox. This element internally is a simple wrapper around a native <input type="checkbox">
element. The checkbox element can be accessed using the input
property.
astro-dev-toolbar-highlight
Section titled astro-dev-toolbar-highlightCan be used to highlight an element on the page. In most cases, you’ll want to position and resize this element using the top
, left
, width
and height
CSS properties to match the element you want to highlight. An icon can also be specified using the icon
attribute and will be shown in the top right corner of the highlight.
astro-dev-toolbar-tooltip
Section titled astro-dev-toolbar-tooltipShows a tooltip with different sections. This component is set to display: none;
by default and can be made visible using a data-show="true"
attribute.
Sections are defined using the sections
property. This property is an array of objects with the following shape:
This component is often combined with the astro-dev-toolbar-highlight
component to show a tooltip when hovering a highlighted element:
Icons
Section titled IconsCurrently, the following icons are available and can be used in any component that accepts an icon:
astro:logo
warning
arrow-down
bug
file-search
check-circle
gear
In addition to these included icons, you can also pass a string containing the SVG markup of the icon you want to use.