[icons] Add opt-in next-gen static icon components#8065
Draft
[icons] Add opt-in next-gen static icon components#8065
Conversation
Generate changelog in
|
Add storiesBuild artifact links for this commit: documentation | landing | table | demo | storybookThis is an automated comment from the deploy-preview CircleCI job. |
3598263 to
dcb5414
Compare
fix(tag-input): apply icon spacing and color to static icon elementsBuild artifact links for this commit: documentation | landing | table | demo | storybookThis is an automated comment from the deploy-preview CircleCI job. |
dcb5414 to
33625a3
Compare
fix(tag-input): apply icon spacing and color to static icon elementsBuild artifact links for this commit: documentation | landing | table | demo | storybookThis is an automated comment from the deploy-preview CircleCI job. |
33625a3 to
3e099de
Compare
fix(tag-input): apply icon spacing and color to static icon elementsBuild artifact links for this commit: documentation | landing | table | demo | storybookThis is an automated comment from the deploy-preview CircleCI job. |
This was referenced Apr 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Warning
🚧 This content is WIP 🏗️
Summary
Adds a new, opt-in icon system at
@blueprintjs/icons/next. Icons use a unified 16x16 viewBox, support outlined and filled variants, and work as both static imports and dynamic string-based lookups. The existing@blueprintjs/iconsentrypoint is unchanged.What's included
New static icon entrypoint (
@blueprintjs/icons/next)<DownloadIcon />) and filled variants where available (<PlayFilledIcon />)generate-next-icon-components.mjs) reads SVGs fromresources/icons/next/and emits components + path modules + manifestsSvgIconContainerNextwith fixedviewBox="0 0 16 16"icons-next.jsonmanifestnext/package.jsonformoduleResolution: "node"compatibilityDynamic loading (
IconsNext+<IconNext>)IconsNextloader with outlined/filled variant supportpaths/*.tsmodules for dynamicimport()loading<IconNext>component in@blueprintjs/corewithvariantprop and automatic filled-to-outlined fallbackStorybook + docs
IconNextdemo storiesnext-icons.mdx) with searchable icon galleryDesign decisions
No
exportsfield. Addingexportstopackage.jsonbroke Vitest's async icon loading in core (thesplitPathsBySizeLoaderdynamic import stopped resolving withinact()). A proxynext/package.jsonprovides the same subpath import without side effects.Reuse
IconNametype. The next icon set is a strict subset of the current set (differing only by"blank"). Sharing the type avoids friction when migrating<Icon>to<IconNext>.Filled fallback.
variant="filled"silently falls back to outlined when unavailable, with a dev-mode console warning.No
fillRule="evenodd"on paths. New icons use thenonzerofill rule (SVG default). Color is inherited via.bp6-icon > svg:not([fill]) { fill: currentColor }.Consumer-specified size for some components. Alert, NonIdealState, and TagInput (large) render icons at non-default sizes internally. We can't inject
sizeinto an opaque JSX element withoutcloneElement, so the consumer passessizeon their icon element.Internal icon usages (future work)
8 core components use current static icons internally (not via props). Not addressed here:
Dialog (
SmallCross), Drawer (SmallCross), MenuItem (CaretRight,SmallTick), NumericInput (ChevronDown/Up), Section (ChevronDown/Up), Tag (SmallCross), Toast (Cross), TreeNode (ChevronRight), Breadcrumbs (chevron-rightvia CSSsvg-icon())Auxiliary: component fixes for static icon elements
When a component receives a JSX element for its
iconprop, the element passes through<Icon>unchanged, dropping anyclassName,intent, orsizethe component would normally apply. Fixes for 7 components:<span class="bp6-tab-icon"><span class="bp6-tree-node-icon"><span class="bp6-text-muted"><span class="bp6-text-muted"><span class="bp6-icon bp6-intent-*">, CSS> .bp6-icon<span class="bp6-icon bp6-icon-muted"><span class="bp6-tag-input-icon">,display: flexAll backwards compatible. String icons hit the same code paths as before.