LogoSkills

coui-chip

Activate when creating chips, tags, filter options, selectable labels, or removable/dismissible tag elements using the Chip widget with CoreChipColor (custom, neutral, primary, secondary, tertiary)...

CoUI Chip#

ํ•œ๋งˆ๋””๋กœ (๋น„๊ฐœ๋ฐœ์ž์šฉ)#

์นฉ(Chip)์€ ์ด๋ฉ”์ผ ๋ฐ›๋Š” ์‚ฌ๋žŒ ์นธ์— ๋œจ๋Š” ์ž‘๊ณ  ๋™๊ทธ๋ž€ ์ด๋ฆ„ํ‘œ๋‚˜, ์‡ผํ•‘๋ชฐ์—์„œ "์ƒ‰์ƒ", "์‚ฌ์ด์ฆˆ"์ฒ˜๋Ÿผ ๋ˆŒ๋Ÿฌ์„œ ๊ณ ๋ฅด๋Š” ์ž‘์€ ๋ฒ„ํŠผํ‘œ๋ฅผ ๋– ์˜ฌ๋ฆฌ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด ์Šคํ‚ฌ์€ ๊ทธ๋Ÿฐ ์ž‘์€ ๋ผ๋ฒจ/ํƒœ๊ทธ/ํ•„ํ„ฐ ๋‹จ์ถ”๋ฅผ ํ™”๋ฉด์— ๋งŒ๋“ค ๋•Œ ์ผ๊ด€๋œ ๋ชจ์–‘๊ณผ ๋™์ž‘์œผ๋กœ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด ์ฃผ๋Š” ์•ˆ๋‚ด์„œ์ž…๋‹ˆ๋‹ค. ๊ธ€์ž๋งŒ ๋ณด์—ฌ์ฃผ๋Š” ์ •์ ์ธ ํƒœ๊ทธ๋ถ€ํ„ฐ, ๋ˆŒ๋Ÿฌ์„œ ์„ ํƒํ•˜๋Š” ํ•„ํ„ฐ, X ๋ฒ„ํŠผ์œผ๋กœ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ํƒœ๊ทธ๊นŒ์ง€ ๊ฐ™์€ ๋ถ€ํ’ˆ ํ•˜๋‚˜๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋ฌด์—‡์„ยท์–ธ์ œ (๋น„๊ฐœ๋ฐœ์ž์šฉ)#

  • ๋ฌด์—‡์„ ํ•ด์ฃผ๋‚˜์š”: ํ™”๋ฉด์— ๋“ค์–ด๊ฐˆ ์ž‘์€ ๋ผ๋ฒจ/ํƒœ๊ทธ/ํ•„ํ„ฐ/์„ ํƒ ๋‹จ์ถ”๋ฅผ ๋””์ž์ธ ๊ทœ์น™์— ๋งž๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค. ์ƒ‰์ƒ, ํฌ๊ธฐ, ์„ ํƒ ์—ฌ๋ถ€, ์‚ญ์ œ(X) ๋ฒ„ํŠผ ๊ฐ™์€ ์˜ต์…˜์„ ์†์‰ฝ๊ฒŒ ๋ถ™์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์–ธ์ œ ์ž‘๋™ํ•˜๋‚˜์š”:
    • ํƒœ๊ทธ ๋ชฉ๋ก์ด๋‚˜ ๋ถ„๋ฅ˜ ๋ผ๋ฒจ์„ ๋ณด์—ฌ์ค„ ๋•Œ (์˜ˆ: "Flutter", "๋””์ž์ธ" ๊ฐ™์€ ํ‘œ์‹œ)
    • ๋ˆŒ๋Ÿฌ์„œ ์ผœ๊ณ  ๋„๋Š” ํ•„ํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ (์˜ˆ: ๊ฒ€์ƒ‰ ํ•„ํ„ฐ ๋ง‰๋Œ€)
    • ๋ฐ›๋Š” ์‚ฌ๋žŒ, ์—ฐ๋ฝ์ฒ˜, ์ด๋ฉ”์ผ์ฒ˜๋Ÿผ X ๋ฒ„ํŠผ์œผ๋กœ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ํ•ญ๋ชฉ์„ ๋ณด์—ฌ์ค„ ๋•Œ
    • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด๋‚˜ ์ž…๋ ฅํ•œ ๋‹จ์–ด๋ฅผ ์ง€์šธ ์ˆ˜ ์žˆ๋Š” ์นฉ์œผ๋กœ ํ‘œ์‹œํ•  ๋•Œ
  • ์–ด๋””์„œ ์“ฐ๋‚˜์š”: ๋ชจ๋ฐ”์ผ/๋ฐ์Šคํฌํ†ฑ ์•ฑ(Flutter)๊ณผ ์›น(Web) ์–‘์ชฝ์—์„œ ๊ฑฐ์˜ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์šฉ์–ด (๋น„๊ฐœ๋ฐœ์ž์šฉ)#

์šฉ์–ด์‰ฌ์šด ์„ค๋ช…
Chip(์นฉ)ํ™”๋ฉด์— ๋œจ๋Š” ์ž‘์€ ๋ผ๋ฒจ/ํƒœ๊ทธ/๋‹จ์ถ”. ์ด๋ฆ„ํ‘œ๋‚˜ ์ž‘์€ ๋ฒ„ํŠผํ‘œ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
chipColor (์ƒ‰์ƒ ๋ณ€ํ˜•)์นฉ์˜ ์ƒ‰ ํ…Œ๋งˆ(๊ธฐ๋ณธ ํšŒ์ƒ‰/์ฃผ์š”/๋ณด์กฐ/์ œ3/์ง์ ‘ ์ง€์ •)๋ฅผ ๊ณ ๋ฅด๋Š” ์„ค์ •.
size (ํฌ๊ธฐ)์นฉ์˜ ํฌ๊ธฐ(์•„์ฃผ ์ž‘์Œ xs ~ ์•„์ฃผ ํผ xl)๋ฅผ ๊ณ ๋ฅด๋Š” ์„ค์ •.
selected (์„ ํƒ๋จ)์นฉ์ด ๋ˆŒ๋ ค์„œ ์ผœ์ง„ ์ƒํƒœ์ธ์ง€ ํ‘œ์‹œํ•˜๋Š” ๊ฐ’.
onTap (ํƒญ/๋ˆ„๋ฅด๊ธฐ)์นฉ์„ ๋ˆŒ๋ €์„ ๋•Œ ์ผ์–ด๋‚  ๋™์ž‘.
onRemove (์‚ญ์ œ)X ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์นฉ์„ ์ง€์šธ ๋•Œ ์ผ์–ด๋‚  ๋™์ž‘. ์ด ๊ฐ’์ด ์žˆ์œผ๋ฉด X ๋ฒ„ํŠผ์ด ๋ณด์ž…๋‹ˆ๋‹ค.
leading / trailing (์•ž/๋’ค ์Šฌ๋กฏ)๊ธ€์ž ์•ž์ด๋‚˜ ๋’ค์— ์•„์ด์ฝ˜ ๊ฐ™์€ ๊ฑธ ๋„ฃ๋Š” ์ž๋ฆฌ.
seedColor (์”จ์•— ์ƒ‰)์ง์ ‘ ์ง€์ •(custom) ์ƒ‰์ƒ ์นฉ์˜ ๋ฐ”ํƒ•์ด ๋˜๋Š” ์ƒ‰.
chipStyle (์Šคํƒ€์ผ)๋ชจ์„œ๋ฆฌ ๋‘ฅ๊ธ€๊ธฐ, ์—ฌ๋ฐฑ ๋“ฑ ์„ธ๋ถ€ ์™ธํ˜•์„ ๋”ฐ๋กœ ๋ฐ”๊พธ๋Š” ์„ค์ •.
Legacy / Deprecated์˜›๋‚  ๋ฐฉ์‹์ด๋ผ ์ƒˆ ์ฝ”๋“œ์—์„œ๋Š” ์“ฐ์ง€ ๋ง์•„์•ผ ํ•˜๋Š”, ๊ณง ์‚ฌ๋ผ์งˆ ํ•ญ๋ชฉ.

Overview#

Chip is the unified cross-platform chip โ€” a compact element for tags, labels, filters, and selectable items. The same widget covers static tags, selectable filter chips, and removable/dismissible chips. Visual variation is driven by the chipColor (CoreChipColor) and size (CoreComponentSize) enums; all chrome / dimensional / slot overrides flow through the single chipStyle slot (CoreChipStyle).

  • Color: CoreChipColor โ€” custom, neutral, primary, secondary, tertiary (default CoreChipColor.defaultColor = neutral).
  • Size: CoreComponentSize โ€” xs, sm, md, lg, xl (widget default md on both platforms).
  • Style slot: chipStyle: CoreChipStyle(...) for per-instance chrome micro-tweaks. Semantic enums (chipColor / size / selected) are not part of the style โ€” pass them as widget params; the theme cannot override them either.
  • Both platforms implement the shared CoreChipContract (<Widget> on Flutter, <Component> on Web), so parameter names and defaults are identical.

For multi-chip selection groups (single/multi select with min/max constraints), a separate ChipGroup<T> component exists โ€” this skill covers the single Chip.

Flutter (coui_flutter)#

Import#

import 'package:coui_flutter/coui_flutter.dart';

The barrel is the only supported import โ€” never import src/ paths. Note: if a file also imports package:flutter/material.dart directly, hide Material's own chip widget to avoid the name clash:

import 'package:flutter/material.dart' hide Chip;

Basic Usage#

Chip(label: 'Flutter')

Parameters#

ParameterTypeDefaultDescription
label String? null Text label displayed on the chip
child Widget? null Custom child widget (alternative to label; wins when both set)
chipColor CoreChipColor CoreChipColor.defaultColor (= neutral) Color variant
size CoreComponentSize CoreComponentSize.md Chip size
selected bool false Whether the chip is selected
enabled bool true Whether the chip is interactive
onTap VoidCallback? null Tap callback (only fires when enabled)
onRemove VoidCallback? null Remove callback โ€” shows the close (X) button when non-null and enabled
leading Widget? null Widget displayed before the label
trailing Widget? null Widget displayed after the label
seedColor CoreColor? null Seed color (used when chipColor is custom)
maxLength int? null Max character length for the label (truncates with ...)
chipStyle CoreChipStyle? null Per-instance chrome / dimensional / slot style

Color Variants โ€” CoreChipColor#

Chip(label: 'Default')                                  // neutral (default)
Chip(label: 'Primary', chipColor: CoreChipColor.primary)
Chip(label: 'Secondary', chipColor: CoreChipColor.secondary)
Chip(label: 'Tertiary', chipColor: CoreChipColor.tertiary)
Chip(
  label: 'Custom',
  chipColor: CoreChipColor.custom,
  seedColor: CoreColor.token(CoreColors.primary),
)

CoreChipColor values (full set): custom, neutral, primary, secondary, tertiary. The widget default is CoreChipColor.defaultColor = neutral. custom derives its colours from the supplied seedColor (raw values like CoreColor(0xFF6750A4) also work).

Enum-shorthand (inferred type) is idiomatic in real code:

Chip(label: '๋””์ž์ธ', chipColor: .primary)

Sizes โ€” CoreComponentSize#

Chip(label: 'XS', size: CoreComponentSize.xs)
Chip(label: 'SM', size: CoreComponentSize.sm)
Chip(label: 'MD', size: CoreComponentSize.md)   // default
Chip(label: 'LG', size: CoreComponentSize.lg)
Chip(label: 'XL', size: CoreComponentSize.xl)

CoreComponentSize values: xs, sm, md, lg, xl.

Selectable Chip#

Chip(
  label: '๋””์ž์ธ',
  chipColor: CoreChipColor.primary,
  selected: isSelected,
  onTap: () => toggleSelection(),
)

Selection state is driven by selected; toggling happens in onTap. The resolver picks distinct selected / unselected / disabled colours per chipColor; the selected border mirrors the selected background. State colour changes animate via AnimatedContainer with transitionDuration (default 100ms).

Removable Chip#

onRemove renders an internal close (X) button โ€” but only while enabled is true. The X is built from the unified Button(variant: .ghost, size: .sm) wrapping Icon(LucideIcons.x), so hover / focus / disabled states are handled by the design system.

Chip(
  label: 'user@example.com',
  onRemove: () => removeItem(),
)

Leading / Trailing Slots#

Chip(
  label: 'Verified',
  leading: Icon(LucideIcons.check),
  chipColor: CoreChipColor.primary,
)

leading / trailing are arbitrary widgets. Their icon size and colour are driven by the resolved per-size / per-state chip values (an IconTheme is applied around each slot), so you do not set them manually. The slotโ†”label spacers are Gap widgets driven by the size-aware iconLabelGapStyle slot.

Label Truncation#

Chip(label: 'A very long tag name', maxLength: 10)   // renders 'A very lon...'

The label is also rendered with maxLines: 1 + ellipsis overflow.

Disabled Chip#

Chip(label: 'Unavailable', enabled: false)

Disabled chips ignore onTap, hide the close button, show the forbidden cursor, and swap to the disabled colour set.

Per-instance Style โ€” chipStyle: CoreChipStyle(...)#

Every chrome / dimensional / slot tweak flows through the single chipStyle slot. Semantic enums (chipColor / size / selected) stay as widget parameters โ€” do not pack them into the style.

Chip(
  label: 'Custom radius',
  chipStyle: const CoreChipStyle(
    borderRadius: CoreBorderRadius.all(CoreRadius.radius8),
    borderWidth: CoreStrokeWidth.stroke1,
    padding: CoreEdgeInsets.symmetric(
      horizontal: CoreSpace.space12,
      vertical: CoreSpace.space4,
    ),
    labelStyle: CoreTextStyle(fontSize: CoreFontSize.s14),
    leadingIconStyle: CoreIconStyle(size: CoreSize.size16),
    iconLabelGapStyle: CoreGapStyle(size: CoreSpace.space4),
  ),
)

CoreChipStyle fields:

FieldTypeDescription
backgroundColor CoreColor? Panel background fill override (wins across every state)
foregroundColor CoreColor? Foreground (label) colour override
borderColorCoreColor?Border stroke colour
borderWidth double? Border stroke width (logical px; default CoreStrokeWidth.stroke1)
borderRadius CoreBorderRadius? Corner radius (default: pill radius9999)
paddingCoreEdgeInsets?Padding
iconLabelGapStyle CoreGapStyle? Gap between leading / label / trailing / close slots
closeIconStyle CoreIconStyle? Close (X) icon style
transitionDuration Duration? Hover / focus / state colour transition (default 100ms)
labelStyle CoreTextStyle? Label text style override (role default: bodySmall token)
leadingIconStyle CoreIconStyle? Leading icon style override
trailingIconStyle CoreIconStyle? Trailing icon style override (does not affect the close button)
closeButtonStyle CoreButtonStyle? Close-button chrome (padding / iconStyle) forwarded to the internal ghost Button

It also exposes merge, copyWith, and the shared design-system defaults as statics: defaultBorderRadius (pill, radius9999), defaultBorderWidth (stroke1), defaultLabelStyle (bodySmall token), defaultTransitionDuration (100ms), defaultDisabledOpacity, defaultHoverOpacity, defaultCustomDisabledBackgroundColor / defaultCustomDisabledForegroundColor / defaultCustomDisabledBorderColor, defaultCustomSelectedForegroundColor (white), defaultsBySize, and defaultsByVariant (a Map<CoreChipColor, CoreChipColorStyle>).

Chip Group Pattern#

Wrap(
  spacing: 8,
  runSpacing: 8,
  children: [
    for (final tag in tags)
      Chip(
        label: tag,
        onRemove: () => removeTag(tag),
      ),
  ],
)

For managed single/multi selection over a list of items, prefer the dedicated ChipGroup<T> component (items + chipBuilder + onChanged).

Web (coui_web / Jaspr)#

Import#

import 'package:coui_web/coui_web.dart';

The barrel re-exports Jaspr (Component, Styles, dom helpers like div / span / text) and coui_core, so no separate Jaspr import is needed.

Basic Usage#

The Web Chip has the same params and defaults; child / leading / trailing are Jaspr Component, callbacks are CoreVoidCallback?. It renders as a <div> pill with Tailwind classes plus inline styles synthesized by the resolver.

Chip(label: 'Flutter')

Removable Chip#

Chip(
  label: 'user@example.com',
  onRemove: () => removeItem(),
)

Same rule as Flutter: the close button renders only when onRemove != null && enabled, via the unified Button(variant: .ghost, size: .sm) + Icon(LucideIcons.x).

Selectable Chip#

Chip(
  label: '๋””์ž์ธ',
  chipColor: CoreChipColor.primary,
  selected: isSelected,
  onTap: () => toggleSelection(),
)

onTap registers a DOM click event (only when enabled). Cursor classes follow state: cursor-not-allowed when disabled, cursor-pointer when interactive. State colours fade with an inline transition rule mirroring Flutter's AnimatedContainer.

Leading Slot (Component)#

Chip(
  label: 'Verified',
  leading: const Icon(LucideIcons.check),
  chipColor: CoreChipColor.primary,
)

Leading / trailing slots are wrapped in inline-flex <span>s; the slotโ†”label spacers render as Gap components (same iconLabelGapStyle slot as Flutter).

Custom Child#

When using child instead of label, supply a Component (child wins when both are set):

Chip(
  child: span([text('Custom')]),
  onRemove: () => removeItem(),
)

Disabled / Accessibility#

Chip(label: 'Unavailable', enabled: false)

A disabled Web chip gets aria-disabled="true", drops the click handler, and hides the close button.

Web-only extras#

The Web constructor additionally accepts id. The component also provides a copyWith(...) method covering every chip parameter.

Parameters (both platforms)#

ParameterType (Flutter)Type (Web)DefaultNotes
label String? String? null Plain-text label
child Widget? Component? null Custom content; wins over label
chipColor CoreChipColor CoreChipColor defaultColor (= neutral) custom / neutral / primary / secondary / tertiary
size CoreComponentSize CoreComponentSize md xs / sm / md / lg / xl
selected bool bool false Selected state
enabled bool bool true Gates onTap and the close button
onTap VoidCallback? CoreVoidCallback? null Tap / click
onRemove VoidCallback? CoreVoidCallback? null Shows close (X) button when non-null and enabled
leading Widget? Component? null Before the label
trailing Widget? Component? null After the label
seedColor CoreColor? CoreColor? null For chipColor: custom
maxLength int? int? null Label truncation with ...
chipStyle CoreChipStyle? CoreChipStyle? null Per-instance chrome/slot style

Web-only: id, plus copyWith(...).

Color / Size token tables#

Both platforms resolve from the same single source of truth in coui_core (CoreChipStyle.defaultsByVariant / CoreChipStyle.defaultsBySize).

Colors (CoreChipColor โ€” full set; each entry is a CoreChipColorStyle):

chipColor Unselected (bg / fg / border) Selected (bg / fg / border) Disabled (bg / fg / border)
neutral transparent / onSurface / outline surfaceContainerHigh / onSurface / surfaceContainerHigh surfaceContainer / surfaceContainerHigh / surfaceContainer
primary transparent / primary / primary primary / onPrimary / primary surfaceContainer / surfaceContainerHigh / surfaceContainer
secondary transparent / secondary / secondary secondary / onSecondary / secondary surfaceContainer / surfaceContainerHigh / surfaceContainer
tertiary transparent / tertiary / tertiary tertiary / onTertiary / tertiary surfaceContainer / surfaceContainerHigh / surfaceContainer
custom transparent / seed / seed seed / white / seed surfaceContainer / surfaceContainerHigh / surfaceContainer

The selected border always mirrors the selected background. custom has no table entry โ€” its colours derive from seedColor at use-site (white selected label via defaultCustomSelectedForegroundColor).

Sizes (CoreComponentSize โ€” full set; token values, pre-scaling):

Size Padding (H ร— V) Label font size Leading/Trailing icon Close icon Iconโ†”label gap
xs space6 ร— 0 s10 size12 size12 space2
sm space8 ร— space2 s12 size14 size14 space4
md space12 ร— space4 s14 size16 size16 space4
lg space14 ร— space6 s16 size18 size18 space6
xl space16 ร— space8 s18 size20 size20 space8

Label typography role is bodySmall (CoreChipStyle.defaultLabelStyle) across every size โ€” only the per-size font size varies. Shape default: pill (radius9999); border width default CoreStrokeWidth.stroke1.

Project-level theming โ€” CoreChipTheme#

CoreChipTheme has exactly two slots โ€” style and variantStyles (keyed by CoreChipColor). Semantic identifiers (chipColor / size) are widget-only; the theme cannot set them. Resolve chain:

design-system default (CoreChipStyle.defaultsBySize[size])
  โ†’ CoreChipTheme.style                         // ํ”„๋กœ์ ํŠธ ๊ณตํ†ต
  โ†’ CoreChipTheme.variantStyles[widget.chipColor]
  โ†’ parent component slot override
  โ†’ widget.chipStyle                            // ์ธ์Šคํ„ด์Šค๋ณ„
const CoreChipTheme(
  style: CoreChipStyle(
    borderRadius: CoreBorderRadius.all(CoreRadius.radius8),
  ),
  variantStyles: {
    CoreChipColor.primary: CoreChipStyle(
      borderWidth: CoreStrokeWidth.stroke1,
    ),
  },
)

Register it on the app theme's coreComponentTheme.chip slot โ€” both platform resolvers read theme.coreComponentTheme?.chip.

Flutter โ†” Web Differences#

These are the only behavioural differences confirmed in source โ€” everything else (enums, parameter names, defaults, the chipStyle slot) is identical.

AspectFlutterWeb
Widget class Chip (StatelessWidget, CoreChipContract<Widget>) Chip (UiComponent, CoreChipContract<Component>)
child / leading / trailing type Widget? Component?
Callback typeVoidCallback?CoreVoidCallback?
Label render Text(label) with ellipsis, maxLines: 1 <span class="truncate"> inside the pill <div>
Tap wiring GestureDetector(onTap: ...) when enabled DOM click event when enabled
Disabled affordance MouseRegion forbidden cursor aria-disabled="true" + cursor-not-allowed class
State transition AnimatedContainer(duration: transitionDuration) inline CSS transition (background / color / border)
Extra ctor paramsโ€”id; also copyWith(...)

Both platforms render the close (X) button via the unified Button(variant: .ghost, size: .sm) wrapping Icon(LucideIcons.x), and both insert Gap(gapStyle: ...) spacers between adjacent slots.

When to Use#

  • Tag lists and category labels (static Chip(label: ...))
  • Filter selection bars (selected + onTap)
  • User / contact / email selection chips with removal (onRemove)
  • Removable search criteria / token input chips
  • Managed selection over a whole set โ†’ ChipGroup<T> instead

v0.127 Migration (Legacy)#

v0.127 is a de-prefix hard break: the widget class was renamed and no Co-prefixed alias remains. Core* contract names (CoreChipColor, CoreChipStyle, CoreChipColorStyle, CoreChipTheme, CoreChipContract, CoreComponentSize) are unchanged.

โŒ Legacy (pre-0.127, removed)โœ… v0.127
โŒ CoChip(label: โ€ฆ)Chip(label: โ€ฆ)
โŒ CoChip(chipColor: CoreChipColor.primary, selected: โ€ฆ) Chip(chipColor: CoreChipColor.primary, selected: โ€ฆ)
โŒ CoIcon(CoLucideIcons.check)Icon(LucideIcons.check)
โŒ CoLucideIcons.x (close icon internals)LucideIcons.x
โŒ CoButton(variant: ghost) (close-button internals) Button(variant: .ghost)
โŒ CoGap(โ€ฆ) (slot spacer internals)Gap(โ€ฆ)
โŒ CoChipGroup(โ€ฆ)ChipGroup(โ€ฆ)

Additional migration notes:

  • โŒ The old deprecated legacy surface (Chip.button(...) factory, standalone ChipStyle / ChipTheme / ChipCloseButton classes, CoreChipSelectedStyle / CoreChipUnselectedStyle enums) was removed entirely โ€” v0.127 chip source carries no deprecated members. Use Chip + chipColor / size / chipStyle (CoreChipStyle) / CoreChipTheme only.
  • Import stays the single barrel (package:coui_flutter/coui_flutter.dart / package:coui_web/coui_web.dart); with the bare Chip name, hide Material's chip when importing material.dart directly (import 'package:flutter/material.dart' hide Chip;).