Auto-generated by
scripts/__inventory_gen_tmp.mjs. Scans every*.contract.tsunderpackages/ui/src/components/, extracts theflutter:hint from eachBc<Name>AdapterMappinginterface, and cross-referencesdocs/components-progress.mdfor tier assignments pluspackages/ui-flutter/lib/src/components/for Dart implementation status. The generator script (scripts/generate-flutter-stubs.mjs) defines the canonical 32-componentWIDGET_MAPof flutter-hinted contracts.
- Total contracts: 130
- With flutter hints: 32 (P0: 24 hand-written/implemented, P1: 8 generated stubs pending implementation)
- Without flutter hints: 98 (P0: 18, P1: 47, P2: 30, Special/other: 3)
Detection rules (per task spec):
- Hand-written P0: Dart file exists and does NOT contain the
Auto-generated by generate-flutter-stubs.mjsheader. The stub generator protects these files from ever being overwritten. - Generated stub: Dart file exists and DOES contain the
auto-generated header, with a
TODO(<Component>):still present inbuild(). Needs hand implementation per the flutter hint. - Without flutter hint: contract has no
flutter:entry in itsBc<Name>AdapterMappinginterface. The stub generator skips these (no Dart target). They need a flutter hint added, then a stub, then a hand implementation.
These Dart widgets are fully implemented and protected from the stub
generator. Each maps to a flutter_platform_widgets (Material +
Cupertino) or Material-native primitive per its flutter hint.
| Component | Flutter Hint | File |
|---|---|---|
BcAccordion |
ExpansionPanelList-contract-parity |
lib/src/components/bc_accordion.dart |
BcAlertDialog |
AlertDialog-contract-parity |
lib/src/components/bc_alert_dialog.dart |
BcCheckbox |
Checkbox-onChanged-contract-parity |
lib/src/components/bc_checkbox.dart |
BcCombobox |
Autocomplete-contract-parity |
lib/src/components/bc_combobox.dart |
BcCommand |
search-delegate-contract-parity |
lib/src/components/bc_command.dart |
BcContextMenu |
showMenu-contract-parity |
lib/src/components/bc_context_menu.dart |
BcDataTable |
DataTable-contract-parity |
lib/src/components/bc_data_table.dart |
BcDateField |
TextFormField-date-contract-parity |
lib/src/components/bc_date_field.dart |
BcDialog |
Dialog-contract-parity |
lib/src/components/bc_dialog.dart |
BcDrawer |
showModalBottomSheet-contract-parity |
lib/src/components/bc_drawer.dart |
BcDropdown |
PopupMenuButton-contract-parity |
lib/src/components/bc_dropdown.dart |
BcForm |
Form-GlobalKey-contract-parity |
lib/src/components/bc_form.dart |
BcInput |
TextField-onChanged-contract-parity |
lib/src/components/bc_input.dart |
BcList |
ListView.builder-contract-parity |
lib/src/components/bc_list.dart |
BcMultiSelect |
FilterChip-list-contract-parity |
lib/src/components/bc_multi_select.dart |
BcNumberField |
TextFormField-number-contract-parity |
lib/src/components/bc_number_field.dart |
BcPopover |
PopoverRoute-contract-parity |
lib/src/components/bc_popover.dart |
BcSegmented |
SegmentedButton-contract-parity |
lib/src/components/bc_segmented.dart |
BcSelect |
DropdownMenu-contract-parity |
lib/src/components/bc_select.dart |
BcSplitter |
ResizableSplitView-contract-parity |
lib/src/components/bc_splitter.dart |
BcTabs |
TabBar-TabBarView-contract-parity |
lib/src/components/bc_tabs.dart |
BcTimeField |
TextFormField-time-contract-parity |
lib/src/components/bc_time_field.dart |
BcToggle |
Switch-onChanged-contract-parity |
lib/src/components/bc_toggle.dart |
BcTooltip |
Tooltip-contract-parity |
lib/src/components/bc_tooltip.dart |
These Dart files were scaffolded by generate-flutter-stubs.mjs. The
build() method returns a placeholder SizedBox with a TODO citing the
recommended Flutter primitive. Implement each per its flutter hint.
| Component | Flutter Hint | Stub File |
|---|---|---|
BcDisclosure |
ExpansionTile-contract-parity |
lib/src/components/bc_disclosure.dart |
BcFieldDuration |
TextFormField-duration-contract-parity |
lib/src/components/bc_field_duration.dart |
BcFieldDynLink |
Row-dropdown-autocomplete-parity |
lib/src/components/bc_field_dyn_link.dart |
BcFieldMorph |
Row-dropdown-textfield-parity |
lib/src/components/bc_field_morph.dart |
BcFieldTableSelect |
DataTable-selectable-parity |
lib/src/components/bc_field_table_select.dart |
BcLookupModal |
Dialog-DataTable-contract-parity |
lib/src/components/bc_lookup_modal.dart |
BcPortal |
Overlay-portal-contract-parity |
lib/src/components/bc_portal.dart |
BcViewGantt |
CustomPainter (ports SVG primitives to Canvas) |
lib/src/components/bc_view_gantt.dart |
ERP-critical components from the P0 tier that lack a flutter: hint.
These should be prioritized for hint authoring since they are
foundational to the ERP UI.
| Component | Tier | Contract Path |
|---|---|---|
BcBackdrop |
P0 | src/components/feedback/backdrop/BcBackdrop.contract.ts |
BcBox |
P0 | src/components/primitives/box/BcBox.contract.ts |
BcCascader |
P0 | src/components/forms/cascader/BcCascader.contract.ts |
BcDescriptions |
P0 | src/components/data-display/descriptions/BcDescriptions.contract.ts |
BcEmpty |
P0 | src/components/feedback/empty/BcEmpty.contract.ts |
BcLoadingOverlay |
P0 | src/components/feedback/loading-overlay/BcLoadingOverlay.contract.ts |
BcOtp |
P0 | src/components/forms/otp/BcOtp.contract.ts |
BcResult |
P0 | src/components/feedback/result/BcResult.contract.ts |
BcSlot |
P0 | src/components/primitives/slot/BcSlot.contract.ts |
BcStack |
P0 | src/components/layout/stack/BcStack.contract.ts |
BcStatistic |
P0 | src/components/data-display/statistic/BcStatistic.contract.ts |
BcSteps |
P0 | src/components/navigation/steps/BcSteps.contract.ts |
BcToastQueue |
P0 | src/components/overlays/toast-queue/BcToastQueue.contract.ts |
BcTransfer |
P0 | src/components/forms/transfer/BcTransfer.contract.ts |
BcTreeSelect |
P0 | src/components/forms/treeselect/BcTreeSelect.contract.ts |
BcVisuallyHidden |
P0 | src/components/primitives/visually-hidden/BcVisuallyHidden.contract.ts |
BcXStack |
P0 | src/components/primitives/xstack/BcXStack.contract.ts |
BcYStack |
P0 | src/components/primitives/ystack/BcYStack.contract.ts |
High-value components from the P1 tier that lack a flutter: hint.
| Component | Tier | Contract Path |
|---|---|---|
BcActionsheet |
P1 | src/components/overlays/actionsheet/BcActionsheet.contract.ts |
BcActivity |
P1 | src/components/social/activity/BcActivity.contract.ts |
BcAffix |
P1 | src/components/navigation/affix/BcAffix.contract.ts |
BcAnchor |
P1 | src/components/navigation/anchor/BcAnchor.contract.ts |
BcAspectRatio |
P1 | src/components/primitives/aspectratio/BcAspectRatio.contract.ts |
BcBackTop |
P1 | src/components/navigation/backtop/BcBackTop.contract.ts |
BcBarcode |
P1 | src/components/forms/barcode/BcBarcode.contract.ts |
BcBreadcrumb |
P1 | src/components/navigation/breadcrumb/BcBreadcrumb.contract.ts |
BcCarousel |
P1 | src/components/data-display/carousel/BcCarousel.contract.ts |
BcChatter |
P1 | src/components/social/chatter/BcChatter.contract.ts |
BcCode |
P1 | src/components/forms/code/BcCode.contract.ts |
BcColorPicker |
P1 | src/components/forms/colorpicker/BcColorPicker.contract.ts |
BcDropZone |
P1 | src/components/forms/dropzone/BcDropZone.contract.ts |
BcFile |
P1 | src/components/forms/file/BcFile.contract.ts |
BcFlex |
P1 | src/components/layout/flex/BcFlex.contract.ts |
BcGeo |
P1 | src/components/forms/geo/BcGeo.contract.ts |
BcHoverCard |
P1 | src/components/overlays/hovercard/BcHoverCard.contract.ts |
BcInplace |
P1 | src/components/data-display/inplace/BcInplace.contract.ts |
BcJson |
P1 | src/components/forms/json/BcJson.contract.ts |
BcMegaMenu |
P1 | src/components/navigation/megamenu/BcMegaMenu.contract.ts |
BcMentions |
P1 | src/components/forms/mentions/BcMentions.contract.ts |
BcMenubar |
P1 | src/components/navigation/menubar/BcMenubar.contract.ts |
BcNavigationMenu |
P1 | src/components/navigation/navigationmenu/BcNavigationMenu.contract.ts |
BcNotification |
P1 | src/components/feedback/notification/BcNotification.contract.ts |
BcOrgChart |
P1 | src/components/data-display/orgchart/BcOrgChart.contract.ts |
BcPagination |
P1 | src/components/navigation/pagination/BcPagination.contract.ts |
BcPrompt |
P1 | src/components/overlays/prompt/BcPrompt.contract.ts |
BcRangeSlider |
P1 | src/components/forms/rangeslider/BcRangeSlider.contract.ts |
BcRate |
P1 | src/components/forms/rate/BcRate.contract.ts |
BcRichText |
P1 | src/components/forms/richtext/BcRichText.contract.ts |
BcSignature |
P1 | src/components/forms/signature/BcSignature.contract.ts |
BcSlider |
P1 | src/components/forms/slider/BcSlider.contract.ts |
BcSparkline |
P1 | src/components/charts/sparkline/BcSparkline.contract.ts |
BcTagGroup |
P1 | src/components/data-display/taggroup/BcTagGroup.contract.ts |
BcTagsInput |
P1 | src/components/forms/tagsinput/BcTagsInput.contract.ts |
BcTimelineSocial |
P1 | src/components/social/timeline/BcTimelineSocial.contract.ts |
BcToggleGroup |
P1 | src/components/forms/togglegroup/BcToggleGroup.contract.ts |
BcTour |
P1 | src/components/feedback/tour/BcTour.contract.ts |
BcViewerAudio |
P1 | src/components/media/viewer-audio/BcViewerAudio.contract.ts |
BcViewerDocument |
P1 | src/components/media/viewer-document/BcViewerDocument.contract.ts |
BcViewerImage |
P1 | src/components/media/viewer-image/BcViewerImage.contract.ts |
BcViewerInstagram |
P1 | src/components/media/viewer-instagram/BcViewerInstagram.contract.ts |
BcViewerPdf |
P1 | src/components/media/viewer-pdf/BcViewerPdf.contract.ts |
BcViewerTiktok |
P1 | src/components/media/viewer-tiktok/BcViewerTiktok.contract.ts |
BcViewerVideo |
P1 | src/components/media/viewer-video/BcViewerVideo.contract.ts |
BcViewerYoutube |
P1 | src/components/media/viewer-youtube/BcViewerYoutube.contract.ts |
BcWizard |
P1 | src/components/overlays/wizard/BcWizard.contract.ts |
Polish-tier components that lack a flutter: hint.
| Component | Tier | Contract Path |
|---|---|---|
BcCenter |
P2 | src/components/primitives/center/BcCenter.contract.ts |
BcCircle |
P2 | src/components/primitives/circle/BcCircle.contract.ts |
BcColorArea |
P2 | src/components/forms/color-area/BcColorArea.contract.ts |
BcColorSlider |
P2 | src/components/forms/color-slider/BcColorSlider.contract.ts |
BcColorSwatch |
P2 | src/components/forms/color-swatch/BcColorSwatch.contract.ts |
BcColorWheel |
P2 | src/components/forms/color-wheel/BcColorWheel.contract.ts |
BcDock |
P2 | src/components/navigation/dock/BcDock.contract.ts |
BcExport |
P2 | src/components/print/export/BcExport.contract.ts |
BcFavorites |
P2 | src/components/navigation/favorites/BcFavorites.contract.ts |
BcGalleria |
P2 | src/components/media/galleria/BcGalleria.contract.ts |
BcImage |
P2 | src/components/data-display/image/BcImage.contract.ts |
BcKbd |
P2 | src/components/primitives/kbd/BcKbd.contract.ts |
BcKnob |
P2 | src/components/forms/knob/BcKnob.contract.ts |
BcMeterGroup |
P2 | src/components/feedback/meter-group/BcMeterGroup.contract.ts |
BcPanelMenu |
P2 | src/components/navigation/panel-menu/BcPanelMenu.contract.ts |
BcPrint |
P2 | src/components/print/print/BcPrint.contract.ts |
BcQRCode |
P2 | src/components/data-display/qrcode/BcQRCode.contract.ts |
BcReportLink |
P2 | src/components/print/report-link/BcReportLink.contract.ts |
BcSearch |
P2 | src/components/navigation/search/BcSearch.contract.ts |
BcSidebar |
P2 | src/components/layout/sidebar/BcSidebar.contract.ts |
BcSlideMenu |
P2 | src/components/navigation/slide-menu/BcSlideMenu.contract.ts |
BcSpeedDial |
P2 | src/components/overlays/speeddial/BcSpeedDial.contract.ts |
BcSquare |
P2 | src/components/primitives/square/BcSquare.contract.ts |
BcTieredMenu |
P2 | src/components/navigation/tiered-menu/BcTieredMenu.contract.ts |
BcViewActivity |
P2 | src/components/views/activity/BcViewActivity.contract.ts |
BcViewEditor |
P2 | src/components/views/editor/BcViewEditor.contract.ts |
BcViewMap |
P2 | src/components/views/map/BcViewMap.contract.ts |
BcViewReport |
P2 | src/components/views/report/BcViewReport.contract.ts |
BcVirtualScroller |
P2 | src/components/views/virtual-scroller/BcVirtualScroller.contract.ts |
BcWatermark |
P2 | src/components/data-display/watermark/BcWatermark.contract.ts |
Components not assigned to P0/P1/P2 in docs/components-progress.md.
These include the unified BcChart (own "Charts" category),
BcKanbanBoard (enterprise data view present in the Stencil parity
matrix but absent from the tier tables), and the adapt-poc
BcPopover Phase-0 proof-of-concept duplicate (the production
BcPopover lives at overlays/popover/ and already has a flutter
hint + hand-written Dart widget).
| Component | Tier | Contract Path |
|---|---|---|
BcChart |
Special | src/components/charts/chart/BcChart.contract.ts |
BcKanbanBoard |
Special | src/components/data/kanban-board/BcKanbanBoard.contract.ts |
BcPopover |
Unknown | src/components/adapt-poc/popover/BcPopover.contract.ts Phase 0 PoC duplicate (production BcPopover is at overlays/popover/) |
- Tier source: P0/P1/P2 assignments are read from
docs/components-progress.md(P0 — ERP-Critical,P1 — High Value,P2 — Polishtables). BcChart is tracked in a separate "Charts" section; BcKanbanBoard appears indocs/stencil-parity-matrix.mdanddocs/codebase.mdbut not in the tier tables, so it is listed under "Special". - Duplicate BcPopover: the
adapt-poc/popover/BcPopover.contract.tsfile is a Phase 0 proof-of-concept with a minimal prop surface and no flutter hint. The productionoverlays/popover/BcPopover.contract.tshas the flutter hintPopoverRoute-contract-parityand a hand-written Dart widget. The PoC contract is retained for the resolver-spike test fixtures and should not be ported independently. - Stub generator:
packages/ui/scripts/generate-flutter-stubs.mjsdefines aWIDGET_MAPof exactly 32 flutter-hinted components. It skips contracts without a flutter hint and refuses to overwrite hand-written Dart files (detected by the absence of theAuto-generated by generate-flutter-stubs.mjsheader). - BcAdapt: marked "NEW Tier 3" in the progress doc (a responsive contract primitive). It is grouped under P1 here because the P1 Feedback/Overlays table lists it; its tier status is provisional.
- BcChart Flutter contract (ADR-015): The
BcChartcontract is ported to Dart atlib/src/core/chart/(not via the stub generator). The port mirrorspackages/ui/src/contracts/chart-option/(the extracted TS contract from ADR-015 F1). The FlutterBcChartwidget (lib/src/components/bc_chart.dart) usesflutter_echartsto render all 26 chart types via the sharedbuildChartOption()factory. Seedoc/chart-migration.mdfor the migration guide anddocs/adr/015-flutter-echarts-chart-strategy.mdfor the full ADR.
ADR-013 completes the cross-tier infrastructure (AppProvider, Hooks,
Animation, Adapt) so components are "truly cross-platform". The Flutter
parity surface lives in lib/src/core/ (not via the stub generator —
these are infrastructure primitives, not widgets) and is exported from
the package barrel lib/bc_ui_flutter.dart.
| TS symbol | Flutter counterpart | File |
|---|---|---|
AppConfigSnapshot |
AppConfigSnapshot |
lib/src/core/app_config_snapshot.dart |
AppConfigStore |
AppConfigStore |
lib/src/core/app_config_store.dart |
BcAppContext (Mitosis context) |
BcAppConfig (InheritedWidget) |
lib/src/core/bc_app_config.dart |
useAppContext() / useAppConfigStore() |
BcAppConfig.of(context) / BcAppConfig.of(context).store |
lib/src/core/bc_app_config.dart |
| TS hook | Flutter counterpart | File | Parity |
|---|---|---|---|
usePrevious / PreviousValue<T> |
PreviousValue<T> / usePrevious() |
lib/src/core/hooks/use_previous.dart |
Full (pure Dart) |
createInterval / IntervalController |
BcIntervalController / createInterval(...) |
lib/src/core/hooks/use_interval.dart |
Full (Timer.periodic) |
createTimeout / TimeoutController |
BcTimeoutController / createTimeout(...) |
lib/src/core/hooks/use_timeout.dart |
Full (Timer) |
createScrollLock / ScrollLock |
BcScrollLock / createScrollLock() |
lib/src/core/hooks/use_scroll_lock.dart |
Adapted (ValueNotifier<bool> → host swaps ScrollPhysics; no document.body) |
createLocalStorage / LocalStorageStore<T> |
BcLocalStorageStore<T> / createLocalStorage(...) |
lib/src/core/hooks/use_local_storage.dart |
Adapted (injectable BcStorageBackend; no browser localStorage) |
useIntersection |
— | — | Web-only: Flutter uses Visibility widget (no DOM observer). |
useClickOutside |
— | — | Web-only: Flutter uses TapRegion/GestureDetector. |
useKeyboard |
— | — | Web-only: Flutter uses Focus/KeyboardListener/KeyEvent. |
| TS symbol | Flutter counterpart | File |
|---|---|---|
AnimationKind |
BcAnimationKind (enum) |
lib/src/core/animation/animation.dart |
AnimationEasing |
BcAnimationEasing (enum) |
lib/src/core/animation/animation.dart |
AnimationProps / ANIMATION_DEFAULT |
BcAnimationProps / ANIMATION_DEFAULT |
lib/src/core/animation/animation.dart |
resolveAnimation() / ResolvedAnimation |
resolveAnimation() / BcResolvedAnimation |
lib/src/core/animation/animation.dart |
getAnimationClasses() |
getAnimationCurves() |
lib/src/core/animation/animation.dart |
prefersReducedMotion() |
host passes MediaQuery.disableAnimationsOf(context) via BcResolveAnimationOptions.reducedMotion |
— |
| TS symbol | Flutter counterpart | File |
|---|---|---|
AdaptBreakpoint / AdaptPlatform / AdaptTarget / AdaptCondition |
BcAdaptBreakpoint / BcAdaptPlatform / BcAdaptTarget / BcAdaptCondition |
lib/src/core/adapt/adapt.dart |
AdaptProps / AdaptContext / ResolvedAdapt |
BcAdaptProps / BcAdaptContext / BcResolvedAdapt |
lib/src/core/adapt/adapt.dart |
resolveAdapt() |
resolveAdapt() / BcAdaptResolver |
lib/src/core/adapt/adapt.dart |
BC_BREAKPOINTS |
bcBreakpointQueries |
lib/src/core/bc_breakpoints.dart |
breakpoint match via window.matchMedia |
host derives breakpointMatcher from MediaQuery.size |
— |
platform via platform: tag |
host derives ctx.platform from Platform.isIOS/isAndroid |
— |
See docs/adr/013-cross-tier-infrastructure-completion.md (Phase 5b
completion notes + cross-tier parity table) for the authoritative
symbol-by-symbol mapping and the web-only justifications.