Skip to content

Icons

Drizzle Cube provides a centralized, configurable icon system that allows you to customize every icon used in the client components. The icon system uses Iconify as the rendering engine, giving you access to 100,000+ icons from popular icon sets.

All icons in Drizzle Cube are managed through a central registry. This approach allows you to:

  • Use any icon from the Iconify ecosystem (HeroIcons, Tabler, Material Design, etc.)
  • Override any icon with your own choice
  • Maintain consistent icon usage across all components
  • Reduce bundle size through tree-shaking

Get an icon component from the registry:

import { getIcon } from 'drizzle-cube/client'
const CloseIcon = getIcon('close')
const AddIcon = getIcon('add')
function MyComponent() {
return (
<div>
<button>
<AddIcon className="w-4 h-4" />
Add Item
</button>
<button>
<CloseIcon className="w-4 h-4" />
</button>
</div>
)
}

Override icons at application initialization:

import { registerIcons } from 'drizzle-cube/client'
import myCloseIcon from '@iconify-icons/mdi/close'
import myAddIcon from '@iconify-icons/mdi/plus'
// Override specific icons with your preferred icons
registerIcons({
close: myCloseIcon,
add: myAddIcon
})

Icons are organized by category for easy discovery.

Icons for user interactions and actions:

NameDescriptionDefault
closeClose/dismiss actionsHeroIcons x-mark
addAdd/create actionsHeroIcons plus
editEdit/modify actionsHeroIcons pencil
deleteDelete/remove actionsHeroIcons trash
refreshRefresh/reload actionsHeroIcons arrow-path
copyCopy to clipboardHeroIcons clipboard-document
duplicateDuplicate itemHeroIcons document-duplicate
settingsSettings/configurationHeroIcons cog
filterFilter actionsHeroIcons funnel
shareShare actionsHeroIcons share
searchSearch actionsHeroIcons magnifying-glass
menuMenu/hamburgerHeroIcons bars-3
runExecute/playHeroIcons play (solid)
checkConfirm/checkHeroIcons check (solid)
linkLink/connectHeroIcons link
eyeShow/visibleHeroIcons eye
eyeOffHide/invisibleHeroIcons eye-slash
adjustmentsAdjustmentsHeroIcons adjustments-horizontal
desktopDesktop/displayHeroIcons computer-desktop
tableTable/gridHeroIcons table-cells

Icons for semantic field types in the Query Builder:

NameDescriptionDefault
measureMeasure fieldsHeroIcons chart-bar (solid)
dimensionDimension fieldsHeroIcons tag (solid)
timeDimensionTime dimension fieldsHeroIcons calendar (solid)
segmentSegment fieldsHeroIcons rectangle-group (solid)

Icons for chart type selection:

NameDescriptionDefault
chartBarBar chartTabler chart-bar
chartLineLine chartTabler chart-line
chartAreaArea chartTabler chart-area-line
chartPiePie chartTabler chart-pie
chartScatterScatter plotTabler chart-dots-2
chartBubbleBubble chartTabler chart-bubble
chartRadarRadar chartTabler chart-radar
chartRadialBarRadial bar chartTabler radar-2
chartTreemapTreemapTabler chart-treemap
chartTableData tableTabler table
chartActivityGridActivity gridTabler calendar-stats
chartKpiNumberKPI numberTabler number
chartKpiDeltaKPI delta/trendTabler trending-up
chartKpiTextKPI textTabler typography
chartMarkdownMarkdownTabler file-text

Icons for different measure aggregation types:

NameDescriptionDefault
measureCountCount aggregationHeroIcons bars-3-bottom-left (solid)
measureCountDistinctCount distinctHeroIcons finger-print (solid)
measureCountDistinctApproxApproximate count distinctHeroIcons chart-bar-square (solid)
measureSumSum aggregationHeroIcons plus-circle (solid)
measureAvgAverage aggregationHeroIcons scale (solid)
measureMinMinimum valueHeroIcons arrow-down-circle (solid)
measureMaxMaximum valueHeroIcons arrow-up-circle (solid)
measureRunningTotalRunning totalHeroIcons arrow-trending-up (solid)
measureCalculatedCalculated measureHeroIcons beaker (solid)
measureNumberNumeric valueHeroIcons hashtag (solid)

Icons for status and state indicators:

NameDescriptionDefault
successSuccess stateHeroIcons check-circle
warningWarning stateHeroIcons exclamation-triangle
errorError stateHeroIcons exclamation-circle
infoInformationTabler info-circle
loadingLoading stateHeroIcons arrow-path
sparklesAI/special featureHeroIcons sparkles

Icons for navigation and direction:

NameDescriptionDefault
chevronUpCollapse/upHeroIcons chevron-up
chevronDownExpand/downHeroIcons chevron-down
chevronLeftPrevious/leftHeroIcons chevron-left
chevronRightNext/rightHeroIcons chevron-right
chevronUpDownSort/reorderTabler selector
arrowUpArrow upHeroIcons arrow-up-circle (solid)
arrowDownArrow downHeroIcons arrow-down-circle (solid)
arrowRightArrow rightHeroIcons arrow-right
arrowPathCircular pathHeroIcons arrow-path
import { setIcon } from 'drizzle-cube/client'
import myCustomIcon from '@iconify-icons/mdi/account'
// Override a single icon
setIcon('close', myCustomIcon)
import { registerIcons } from 'drizzle-cube/client'
import closeIcon from '@iconify-icons/mdi/close'
import addIcon from '@iconify-icons/mdi/plus'
import editIcon from '@iconify-icons/mdi/pencil'
// Override multiple icons at once
registerIcons({
close: closeIcon,
add: addIcon,
edit: editIcon
})

Drizzle Cube uses Iconify, which provides access to many icon libraries. Here are examples using different libraries:

import { registerIcons } from 'drizzle-cube/client'
// Material Design Icons
import mdiClose from '@iconify-icons/mdi/close'
import mdiPlus from '@iconify-icons/mdi/plus'
// Feather Icons
import featherX from '@iconify-icons/feather/x'
import featherPlus from '@iconify-icons/feather/plus'
// Lucide Icons
import lucideX from '@iconify-icons/lucide/x'
import lucidePlus from '@iconify-icons/lucide/plus'
// Carbon Icons
import carbonClose from '@iconify-icons/carbon/close'
import carbonAdd from '@iconify-icons/carbon/add'
// Use whichever library matches your design system
registerIcons({
close: mdiClose,
add: mdiPlus
})
import { resetIcons } from 'drizzle-cube/client'
// Reset all icons to their defaults
resetIcons()
import { getIconsByCategory } from 'drizzle-cube/client'
// Get all action icons
const actionIcons = getIconsByCategory('action')
// Returns: { close: Component, add: Component, edit: Component, ... }
// Get all chart icons
const chartIcons = getIconsByCategory('chart')
// Returns: { chartBar: Component, chartLine: Component, ... }

A convenience function for getting measure type icons:

import { getMeasureTypeIcon } from 'drizzle-cube/client'
// Get icon for a measure type
const CountIcon = getMeasureTypeIcon('count')
const AvgIcon = getMeasureTypeIcon('avg')
const SumIcon = getMeasureTypeIcon('sum')
function MeasureLabel({ type, label }) {
const Icon = getMeasureTypeIcon(type)
return (
<span>
<Icon className="w-4 h-4 inline" />
{label}
</span>
)
}

A convenience function for getting chart type icons:

import { getChartTypeIcon } from 'drizzle-cube/client'
// Get icon for a chart type
const BarIcon = getChartTypeIcon('bar')
const LineIcon = getChartTypeIcon('line')
const PieIcon = getChartTypeIcon('pie')
function ChartSelector({ types }) {
return (
<div>
{types.map(type => {
const Icon = getChartTypeIcon(type)
return (
<button key={type}>
<Icon className="w-5 h-5" />
{type}
</button>
)
})}
</div>
)
}

A convenience function for getting field type icons:

import { getFieldTypeIcon } from 'drizzle-cube/client'
// Get icon for a field type
const MeasureIcon = getFieldTypeIcon('measure')
const DimensionIcon = getFieldTypeIcon('dimension')
const TimeIcon = getFieldTypeIcon('timeDimension')

All icon functions and types are fully typed:

import type {
IconName,
IconCategory,
IconRegistry,
IconProps
} from 'drizzle-cube/client'
// IconName is a union of all valid icon names
const iconName: IconName = 'close' // ✓ Valid
const invalidName: IconName = 'invalid' // ✗ Type error
// IconCategory for filtering
const category: IconCategory = 'action' // ✓ Valid
// IconProps for custom icon components
interface MyIconProps extends IconProps {
size?: 'sm' | 'md' | 'lg'
}

getIcon(name: IconName): ComponentType<IconProps>

Section titled “getIcon(name: IconName): ComponentType<IconProps>”

Returns a React component for the specified icon.

const CloseIcon = getIcon('close')
<CloseIcon className="w-4 h-4" aria-hidden="true" />

Returns the raw Iconify icon data for use with the Iconify Icon component directly.

import { Icon } from '@iconify/react'
import { getIconData } from 'drizzle-cube/client'
const closeData = getIconData('close')
<Icon icon={closeData} className="w-4 h-4" />

setIcon(name: IconName, icon: IconifyIcon): void

Section titled “setIcon(name: IconName, icon: IconifyIcon): void”

Override a single icon in the registry.

import myIcon from '@iconify-icons/mdi/close'
setIcon('close', myIcon)

registerIcons(overrides: PartialIconRegistry): void

Section titled “registerIcons(overrides: PartialIconRegistry): void”

Override multiple icons at once.

registerIcons({
close: myCloseIcon,
add: myAddIcon
})

Reset all icons to their default values.

Get the complete icon registry object.

getIconsByCategory(category: IconCategory): Record<string, ComponentType>

Section titled “getIconsByCategory(category: IconCategory): Record<string, ComponentType>”

Get all icons in a specific category.

getMeasureTypeIcon(measureType: string): ComponentType<IconProps>

Section titled “getMeasureTypeIcon(measureType: string): ComponentType<IconProps>”

Get the icon for a measure aggregation type.

getChartTypeIcon(chartType: string): ComponentType<IconProps>

Section titled “getChartTypeIcon(chartType: string): ComponentType<IconProps>”

Get the icon for a chart type.

getFieldTypeIcon(fieldType: string): ComponentType<IconProps>

Section titled “getFieldTypeIcon(fieldType: string): ComponentType<IconProps>”

Get the icon for a field type (measure, dimension, timeDimension).

Icons work seamlessly with the Drizzle Cube theming system. Icon colors are controlled by the text color of their container:

// Icons inherit text color from their container
<div className="text-dc-text">
<CloseIcon className="w-4 h-4" /> {/* Uses --dc-text color */}
</div>
<div className="text-dc-primary">
<AddIcon className="w-4 h-4" /> {/* Uses --dc-primary color */}
</div>
<div className="text-dc-success">
<CheckIcon className="w-4 h-4" /> {/* Uses --dc-success color */}
</div>

Override icons before rendering components to avoid visual inconsistency:

// In your app's entry point
import { registerIcons } from 'drizzle-cube/client'
import { myIcons } from './icons'
// Register before rendering
registerIcons(myIcons)
// Then render your app
ReactDOM.render(<App />, root)

When creating a custom icon set, map icons by their semantic meaning rather than their visual appearance:

// Good - semantic mapping
registerIcons({
success: checkCircleIcon, // What it represents
error: alertCircleIcon
})
// Avoid - visual mapping
registerIcons({
greenCircle: checkCircleIcon, // What it looks like
redCircle: alertCircleIcon
})

Use icons from a single icon library for visual consistency:

// Good - consistent library
import deleteIcon from '@iconify-icons/mdi/delete'
import editIcon from '@iconify-icons/mdi/pencil'
import addIcon from '@iconify-icons/mdi/plus'
// Avoid - mixed libraries
import deleteIcon from '@iconify-icons/mdi/delete'
import editIcon from '@iconify-icons/feather/edit'
import addIcon from '@iconify-icons/lucide/plus'

Always provide appropriate ARIA attributes:

// Decorative icons (accompanying text)
<button>
<AddIcon className="w-4 h-4" aria-hidden="true" />
Add Item
</button>
// Icon-only buttons (needs label)
<button aria-label="Close">
<CloseIcon className="w-4 h-4" />
</button>

To use icons from a specific library, install the corresponding Iconify package:

Terminal window
# Material Design Icons
npm install @iconify-icons/mdi
# Feather Icons
npm install @iconify-icons/feather
# Lucide Icons
npm install @iconify-icons/lucide
# Carbon Icons
npm install @iconify-icons/carbon
# Tabler Icons (already included)
npm install @iconify-icons/tabler
# Font Awesome
npm install @iconify-icons/fa-solid @iconify-icons/fa-regular

Browse available icons at icon-sets.iconify.design.

Here’s a complete example overriding all action icons with Material Design Icons:

import { registerIcons } from 'drizzle-cube/client'
// Import MDI icons
import mdiClose from '@iconify-icons/mdi/close'
import mdiPlus from '@iconify-icons/mdi/plus'
import mdiPencil from '@iconify-icons/mdi/pencil'
import mdiDelete from '@iconify-icons/mdi/delete'
import mdiRefresh from '@iconify-icons/mdi/refresh'
import mdiContentCopy from '@iconify-icons/mdi/content-copy'
import mdiContentDuplicate from '@iconify-icons/mdi/content-duplicate'
import mdiCog from '@iconify-icons/mdi/cog'
import mdiFilter from '@iconify-icons/mdi/filter'
import mdiShare from '@iconify-icons/mdi/share'
import mdiMagnify from '@iconify-icons/mdi/magnify'
import mdiMenu from '@iconify-icons/mdi/menu'
// Register all overrides
registerIcons({
close: mdiClose,
add: mdiPlus,
edit: mdiPencil,
delete: mdiDelete,
refresh: mdiRefresh,
copy: mdiContentCopy,
duplicate: mdiContentDuplicate,
settings: mdiCog,
filter: mdiFilter,
share: mdiShare,
search: mdiMagnify,
menu: mdiMenu
})

This icon system gives you complete control over the visual appearance of Drizzle Cube components while maintaining consistency and accessibility.