The Khan Academy Wonder Blocks design system. This is work-in-progress and a lot of things are still in motion. More information:
Repo: Khan/wonder-blocks
What's inside
The Khan Academy Wonder Blocks design system. This is work-in-progress and a lot of things are still in motion.
More information: https://khan.github.io/wonder-blocks/
To install Wonder Blocks, you need to run the following commands:
pnpm installInstalls project dependencies
pnpm devBuilds all the packages and watches for changes
pnpm startRuns the docs in dev mode
Now you can open http://localhost:6061 to view the docs. This page will automatically update as you make changes to components.
AI agents / Storybook MCP: To use the Wonder Blocks MCP from another project (e.g. Cursor), clone this repo, run pnpm install and pnpm start, then add http://localhost:6061/mcp to your MCP client config (e.g. mcp.json). See AGENTS.md for full install steps and agentic workflows.
Note for external contributors: We are not accepting external contributions at this time. We are working to make this happen in the future, and we will let you know when this is possible!
For a more detailed explanation about how to develop Wonder Blocks components, please refer to the internal documentation
Please note โ before contributing ensure that any design changes you are wanting to make are reflected in the Wonder Blocks project in Figma.
Thanks to Chromatic for providing the visual testing platform that helps us catch unexpected changes on time.
__docs__/
_gallery_.mdx
_get-started_.mdx
_overview_.mdx
best-practices/
dark-mode.mdx
examples/
assets/
background-image-example.svg
background-pattern.svg
hero-asterisk.svg
hero-polygon.svg
hero.svg
logo-icon.svg
multi-colored-icon.svg
dark-mode-examples.stories.tsx
catalog/
catalog-component-info.tsx
catalog.stories.tsx
components-config.tsx
components/
all-variants.tsx
code.tsx
color-swatch.tsx
color.tsx
component-info.tsx
copy-button.tsx
gallery/
component-gallery.tsx
component-tile.tsx
groups.ts
styles.ts
tiles/
accordion-section-tile.tsx
accordion-tile.tsx
action-menu-tile.tsx
banner-tile.tsx
birthday-picker-tile.tsx
breadcrumbs-tile.tsx
button-tile.tsx
checkbox-group-tile.tsx
checkbox-tile.tsx
circular-spinner-tile.tsx
combobox-tile.tsx
compact-cell-tile.tsx
detail-cell-tile.tsx
icon-button-tile.tsx
labeled-text-field-tile.tsx
link-tile.tsx
listbox-tile.tsx
multi-select-tile.tsx
one-pane-dialog-tile.tsx
phosphor-icon-tile.tsx
pill-tile.tsx
popover-tile.tsx
radio-group-tile.tsx
search-field-tile.tsx
single-select-tile.tsx
switch-tile.tsx
text-area-tile.tsx
text-field-tile.tsx
toolbar-tile.tsx
tooltip-tile.tsx
types.ts
icons-for-testing.tsx
placeholder.tsx
scenarios-layout.tsx
single-colored-icon.svg
state-sheet.tsx
text-for-testing.ts
token-table.tsx
tokens-util.ts
foundations-color.mdx
tools/
eslint-plugin-wonder-blocks/
eslint-plugin-wonder-blocks.mdx
no-custom-tab-role.mdx
no-excessive-bodytext-children.mdx
no-hardcoded-color.mdx
no-invalid-bodytext-children.mdx
no-invalid-bodytext-parent.mdx
no-raw-button.mdx
require-logical-properties-for-rtl.mdx
types
wonder-blocks-accordion/
accessibility.mdx
accordion-section.argtypes.tsx
accordion-section.stories.tsx
accordion-testing-snapshots.stories.tsx
accordion.argtypes.tsx
accordion.stories.tsx
wonder-blocks-announcer/
announcer.stories.tsx
wonder-blocks-badge/
_overview_.mdx
badge-testing-snapshots.stories.tsx
badge.argtypes.ts
badge.stories.tsx
due-badge.stories.tsx
gem-badge.stories.tsx
neutral-badge.stories.tsx
status-badge.stories.tsx
streak-badge.stories.tsx
wonder-blocks-banner/
banner-testing-snapshots.stories.tsx
banner.argtypes.ts
banner.stories.tsx
wonder-blocks-birthday-picker/
birthday-picker-testing-snapshots.stories.tsx
birthday-picker.argtypes.ts
birthday-picker.stories.tsx
wonder-blocks-breadcrumbs/
accessibility.mdx
breadcrumbs-testing-snapshots.stories.tsx
breadcrumbs.argtypes.ts
breadcrumbs.stories.tsx
wonder-blocks-button/
_overview_.mdx
accessibility.mdx
accessibility.stories.tsx
activity-button-testing-snapshots.stories.tsx
activity-button.argtypes.ts
activity-button.stories.tsx
best-practices.mdx
best-practices.stories.tsx
button-shared.argtypes.ts
button-testing-snapshots.stories.tsx
button.argtypes.ts
button.stories.tsx
navigation-callbacks.mdx
navigation-callbacks.stories.tsx
wonder-blocks-card/
accessibility.mdx
card-testing-snapshots.stories.tsx
card.argtypes.tsx
card.stories.tsx
wonder-blocks-cell/
compact-cell-testing-snapshots.stories.tsx
compact-cell.argtypes.tsx
compact-cell.stories.tsx
detail-cell-testing-snapshots.stories.tsx
detail-cell.argtypes.ts
detail-cell.stories.tsx
wonder-blocks-clickable/
accessibility.mdx
accessibility.stories.tsx
clickable-behavior.argtypes.ts
clickable-behavior.stories.tsx
clickable.argtypes.ts
clickable.stories.tsx
wonder-blocks-core/
_overview_.mdx
add-style.mdx
add-style.stories.tsx
aria.argtypes.ts
event-handlers.argtypes.ts
exports.use-force-update.mdx
exports.use-is-mounted.mdx
exports.use-latest-ref.mdx
exports.use-on-mount-effect.mdx
exports.use-online.mdx
exports.use-pre-hydration-effect.mdx
exports.use-render-state.mdx
id.mdx
id.stories.tsx
initial-fallback.stories.tsx
server.mdx
view.argtypes.ts
view.stories.tsx
wonder-blocks-data/
_overview_.mdx
_overview_graphql.mdx
_overview_ssr_.mdx
_overview_testing_.mdx
exports.abort-inflight-requests.mdx
exports.data-error.mdx
exports.data-errors.mdx
exports.data.mdx
exports.fetch-tracked-requests.mdx
exports.get-gql-request-id.mdx
exports.gql-error.mdx
exports.gql-errors.mdx
exports.gql-router.mdx
exports.has-tracked-requests-to-be-fetched.mdx
exports.intercept-requests.mdx
exports.intialize-hydration-cache.mdx
exports.purge-caches.mdx
exports.purge-hydration-cache.mdx
exports.scoped-in-memory-cache.mdx
exports.serializable-in-memory-cache.mdx
exports.shared-cache.mdx
exports.status.mdx
exports.track-data.mdx
exports.use-cached-effect.mdx
exports.use-gql.mdx
exports.use-hydratable-effect.mdx
exports.use-server-effect.mdx
exports.use-shared-cache.mdx
exports.when-client-side.mdx
types.cached-response.mdx
types.error-options.mdx
types.fetch-policy.mdx
types.gql-context.mdx
types.gql-fetch-fn.mdx
types.gql-fetch-options.mdx
types.gql-operation-type.mdx
types.gql-operation.mdx
types.raw-scoped-cache.mdx
types.response-cache.mdx
types.result.mdx
types.scoped-cache.mdx
types.valid-cache-data.mdx
wonder-blocks-date-picker/
_overview_.mdx
date-picker-testing-snapshots.stories.tsx
date-picker.argtypes.tsx
date-picker.stories.tsx
temporal-api.mdx
wonder-blocks-dropdown/
_overview_.mdx
action-item-testing-snapshots.stories.tsx
action-item.argtypes.tsx
action-item.stories.tsx
action-menu-testing-snapshots.stories.tsx
action-menu.accessibility.mdx
action-menu.argtypes.ts
action-menu.stories.tsx
base-select.argtypes.ts
combobox-accessibility.mdx
combobox-testing-snapshots.stories.tsx
combobox.argtypes.ts
combobox.stories.tsx
custom-opener-testing-snapshots.stories.tsx
custom-opener.argtypes.ts
custom-opener.stories.tsx
listbox.stories.tsx
multi-select-testing-snapshots.stories.tsx
multi-select.accessibility.mdx
multi-select.accessibility.stories.tsx
multi-select.argtypes.ts
multi-select.stories.tsx
option-item-examples.tsx
option-item-testing-snapshots.stories.tsx
option-item.argtypes.tsx
option-item.stories.tsx
separator-item-testing-snapshots.stories.tsx
single-select-testing-snapshots.stories.tsx
single-select.accessibility.mdx
single-select.accessibility.stories.tsx
single-select.argtypes.ts
single-select.stories.tsx
wonder-blocks-form/
_overview_.mdx
accessibility.stories.tsx
checkbox-accessibility.mdx
checkbox-accessibility.stories.tsx
checkbox-group-testing-snapshots.stories.tsx
checkbox-group.stories.tsx
checkbox-testing-snapshots.stories.tsx
checkbox.stories.tsx
choice.stories.tsx
deprecated-labeled-text-field.stories.tsx
form-utilities.ts
labeled-text-field.argtypes.ts
radio-group-testing-snapshots.stories.tsx
radio-group.stories.tsx
radio-testing-snapshots.stories.tsx
radio.stories.tsx
text-area-testing-snapshots.stories.tsx
text-area.accessibility.mdx
text-area.argtypes.ts
text-area.stories.tsx
text-field-testing-snapshots.stories.tsx
text-field.argtypes.ts
text-field.stories.tsx
wonder-blocks-icon/
wonder-blocks-icon-button/
_overview_.mdx
activity-icon-button-testing-snapshots.stories.tsx
activity-icon-button.stories.tsx
conversation-icon-button-testing-snapshots.stories.tsx
conversation-icon-button.stories.tsx
icon-button-shared.argtypes.ts
icon-button-testing-snapshots.stories.tsx
icon-button.argtypes.ts
icon-button.stories.tsx
images/
assignment-practice.svg
mini-khanmigo.svg
node-icon-button-testing-snapshots.stories.tsx
node-icon-button.stories.tsx
accessibility.mdx
accessibility.stories.tsx
custom-icon-components-testing-snapshots.stories.tsx
custom-icon-components.stories.tsx
icon-testing-snapshots.stories.tsx
icon-utilities.mdx
icon-utilities.stories.tsx
icon.stories.tsx
icons/
article.svg
course.svg
crown.svg
mastery-course-bold.svg
mastery-course.svg
phosphor-icon-testing-snapshots.stories.tsx
phosphor-icon.argtypes.ts
phosphor-icon.stories.tsx
wonder-blocks-labeled-field/
accessibility.mdx
labeled-field-testing-snapshots.stories.tsx
labeled-field.argtypes.ts
labeled-field.stories.tsx
wonder-blocks-layout/
deprecated-media-layout.stories.tsx
deprecated-spring.stories.tsx
deprecated-strut.stories.tsx
wonder-blocks-link/
link-testing-snapshots.stories.tsx
link.argtypes.tsx
link.stories.tsx
wonder-blocks-modal/
_overview_.mdx
drawer-dialog.argtypes.ts
drawer-dialog.stories.tsx
drawer-launcher-testing-snapshots.stories.tsx
drawer-launcher.argtypes.ts
drawer-launcher.stories.tsx
flexible-dialog.argtypes.ts
flexible-dialog.stories.tsx
modal-dialog.argtypes.tsx
modal-dialog.stories.tsx
modal-footer.stories.tsx
modal-header.argtypes.tsx
modal-header.stories.tsx
modal-launcher-testing-snapshots.stories.tsx
modal-launcher.argtypes.ts
modal-launcher.stories.tsx
modal-panel.argtypes.tsx
modal-panel.stories.tsx
modal-story-utils.ts
one-pane-dialog.argtypes.ts
one-pane-dialog.stories.tsx
wonder-blocks-pill/
deprecated-pill.stories.tsx
pill-testing-snapshots.stories.tsx
pill.argtypes.tsx
wonder-blocks-popover/
popover-content-core.argtypes.ts
popover-content-core.stories.tsx
popover-content-testing-snapshots.stories.tsx
popover-content.argtypes.tsx
popover-content.stories.tsx
popover-testing-snapshots.stories.tsx
popover.accessibility.mdx
popover.argtypes.tsx
popover.stories.tsx
wonder-blocks-progress-spinner/
circular-spinner-testing-snapshots.stories.tsx
circular-spinner.stories.tsx
wonder-blocks-search-field/
search-field-testing-snapshots.stories.tsx
search-field.argtypes.ts
search-field.stories.tsx
wonder-blocks-styles/
__overview__.mdx
action-styles-testing-snapshots.stories.tsx
action-styles.stories.tsx
focus-styles.stories.tsx
wonder-blocks-switch/
switch-best-practices.mdx
switch-best-practices.stories.tsx
switch-testing-snapshots.stories.tsx
switch.argtypes.tsx
switch.stories.tsx
wonder-blocks-tabs/
_overview_.mdx
navigation-tab-item-testing-snapshots.stories.tsx
navigation-tab-item.argtypes.tsx
navigation-tab-item.stories.tsx
navigation-tabs-dropdown-testing-snapshots.stories.tsx
navigation-tabs-dropdown.argtypes.ts
navigation-tabs-dropdown.stories.tsx
navigation-tabs-testing-snapshots.stories.tsx
navigation-tabs-utils.tsx
navigation-tabs.accessibility.mdx
navigation-tabs.argtypes.tsx
navigation-tabs.stories.tsx
responsive-navigation-tabs-testing-playtesting.stories.tsx
responsive-navigation-tabs-testing-snapshots.stories.tsx
responsive-navigation-tabs.argtypes.ts
responsive-navigation-tabs.stories.tsx
responsive-tabs-testing-playtesting.stories.tsx
responsive-tabs-testing-snapshots.stories.tsx
responsive-tabs.argtypes.ts
responsive-tabs.stories.tsx
shared.argtypes.ts
tab-testing-snapshots.stories.tsx
tabs-dropdown-testing-snapshots.stories.tsx
tabs-dropdown.accessibility.mdx
... 1485 moreFAQ
wonder-blocks is a Claude Code plugin with hand-picked skills for design work, indexed on Flowy. Install it with the command on its page. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.