Skip to content

GC Combo-box component (WET-631)#2719

Open
BrahimMahadi wants to merge 1 commit intowet-boew:masterfrom
BrahimMahadi:gc-combobox
Open

GC Combo-box component (WET-631)#2719
BrahimMahadi wants to merge 1 commit intowet-boew:masterfrom
BrahimMahadi:gc-combobox

Conversation

@BrahimMahadi
Copy link
Copy Markdown
Contributor

@BrahimMahadi BrahimMahadi commented Jan 27, 2026

An accessible combo-box component that provides a modern, user-friendly interface for selecting multiple items. Reference JIRA ticket WET-631.

  • Complete feature implementation and implement/remove any additional features after review
  • Complete documentation
  • Refactor code
  • Perform accessibility assessment

@duboisp duboisp marked this pull request as draft February 16, 2026 15:18
@BrahimMahadi BrahimMahadi marked this pull request as ready for review March 31, 2026 19:19
@BrahimMahadi BrahimMahadi requested a review from a team March 31, 2026 19:19
@Ricokola Ricokola requested review from Garneauma and duboisp April 2, 2026 11:51
Copy link
Copy Markdown
Collaborator

@Garneauma Garneauma left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just a quick partial review.

Comment thread components/combo-box/combo-box.js Outdated
}

// Register the custom element
customElements.define( "combo-box-component", ComboBoxComponent );
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's go with "gc-combobox" for now.

Comment thread components/combo-box/combo-box.js Outdated
}

// Returns the encapsulated styles for the Shadow DOM
getStyles() {
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you find a way to get styles from a CSS file instead? This would be easier to test using our linting tools.

Comment thread components/combo-box/combo-box.js Outdated
Comment on lines +62 to +63
const label = this.getAttribute( "label" ) || "Select items";
const placeholder = this.getAttribute( "placeholder" ) || "Type to search or add items...";
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those default values would need to use i18n strings.

Copy link
Copy Markdown
Member

@duboisp duboisp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few comment after your presentation.

  • Use/allow the slot for label
  • Use named slot for options instead of JSON array in an attribute
  • Use series of hidden input for an integration into form API
  • Use "is" ex: . (But this will require functional + compatibility testing in safari + safari mobile)
  • Allow an option where we manually add my own custom tag. vs using datalist (for more info, check the HTML5 specification around it)
  • Allow the customization of colour used for tags (background+colour) by using the part attribute

Authoring code sample example

<label for="mycbx">Label</label>
<input id="mycbx" is="combo-box-component" multiple name="cbx" list="function-types">
<datalist id="function-types">
  <option value="function">function</option>
  <option value="async function">async function</option>
  <option value="function*">generator function</option>
  <option value="=>">arrow function</option>
  <option value="async =>">async arrow function</option>
  <option value="async function*">async generator function</option>
</datalist>

Or alternatively

<combo-box-component
	id="demo"
	placeholder="Select technologies...">

<div slot="label">Select<sup>sup</sup> Technologies label</div>

<datalist slot="options">
  <option>JavaScript</option>
  <option>TypeScript</option>
  <option>React</option>
  <option>Vue</option>
  <option>Angular</option>
  <option>Node.js</option>
</datalist>


</combo-box-component>

Other ref.

And regardless of my above comment, we know that eventually this component, after our immediate need satisfied, we are going to transform / re-code it as a GCDS component, so feel free to take decision that will be aligned with how GCDS component will be develop.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants