Icon

One box, one size, one accessible name. The glyph is passed in as a value, so a page that uses two icons ships two.

import { Icon } from "@dede-style/ui/icon" and the glyph from @dede-style/ui/icons, then <Icon glyph={iconStar} />. There is no name string and no registry to populate — see /icons for the set.

PropDescriptionDefaultControl
glyphthe icon. In code, import it by its full name: icon plus this (Star is iconStar)AlertAlertFillArrowDownArrowLeftArrowRightArrowUpBagBell+90 moreStar
  • Alert
  • AlertFill
  • ArrowDown
  • ArrowLeft
  • ArrowRight
  • ArrowUp
  • Bag
  • Bell
  • BellRing
  • BellSlash
  • Bluetooth
  • Bookmark
  • BookmarkFill
  • Calendar
  • Camera
  • Cart
  • Check
  • CheckBold
  • Checkbox
  • CheckboxChecked
  • CheckboxMixed
  • ChevronDown
  • ChevronLeft
  • ChevronRight
  • ChevronUp
  • ChevronsDownUp
  • ChevronsLeft
  • ChevronsRight
  • ChevronsUpDown
  • Clock
  • Close
  • Code
  • CodeAlt
  • Cookie
  • Copy
  • CreditCard
  • DataChart
  • DataColumns
  • DataGrid
  • DataRows
  • Delete
  • Download
  • DragHandle
  • Edit
  • Email
  • Error
  • ErrorFill
  • ExternalLink
  • Eye
  • EyeSlash
  • File
  • Filter
  • Folder
  • Github
  • Heart
  • HeartFill
  • Help
  • HelpFill
  • Home
  • Image
  • Info
  • InfoFill
  • Link
  • Lock
  • LockOpen
  • LogOut
  • Menu
  • Minus
  • MinusBold
  • Moon
  • MoreHorizontal
  • MoreVertical
  • Pause
  • Placeholder
  • Play
  • Plus
  • Radio
  • RadioChecked
  • Refresh
  • Search
  • Settings
  • Share
  • Shield
  • Star
  • StarFill
  • Stop
  • Success
  • SuccessFill
  • Sun
  • SwapVertical
  • Tag
  • TagFill
  • Upload
  • User
  • Warning
  • WarningFill
  • Wifi
  • WifiSlash
sizea size step (16, 20, 24px…), or text to match the surrounding type, or fill to fill the container345681012textfill6
  • 3
  • 4
  • 5
  • 6
  • 8
  • 10
  • 12
  • text
  • fill
labelleave empty for a decorative icon. Set it only when the icon is the content; an icon button takes its name on the button

Tokens

What a theme can move, where the props above are what an instance can move.

Icon has none, and that is a decision rather than an omission. Every value it renders already resolves through a foundation token or a role, so a theme moves it by moving those. A component token earns its place only when a theme needs to change one component without changing the role beneath it.

These are public and overridable — there is no private custom property, because anything on :root is reachable by any stylesheet. What replaces privacy is a stability contract: primitives may move, roles are the guarantee, and these are the per-component escape from both.