Skip to content

Commit

Permalink
add dropdown primitive ctd
Browse files Browse the repository at this point in the history
  • Loading branch information
amk221 committed Dec 10, 2024
1 parent 4e08ba9 commit d3a7ab3
Show file tree
Hide file tree
Showing 40 changed files with 675 additions and 509 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,17 +52,17 @@ This addon intentionally...

```handlebars
<SelectBox @value='Foo' @onChange={{this.handleChange}} as |sb|>
<sb.Dropdown as |dd|>
<sb.Dropdown>
<sb.Trigger>
{{sb.value}}
</sb.Trigger>
<dd.Content>
<sb.Content>
<sb.Options>
<sb.Option @value='Foo'>
Foo
</sb.Option>
</sb.Options>
</dd.Content>
</sb.Content>
</sb.Dropdown>
</SelectBox>
```
Expand Down
2 changes: 2 additions & 0 deletions addon/components/dropdown/content.gjs
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import lifecycle from '@zestia/ember-select-box/modifiers/lifecycle';

<template>
{{! template-lint-disable no-positive-tabindex }}
<div
class="dropdown__content"
tabindex={{@tabindex}}
{{lifecycle onInsert=@onInsert onDestroy=@onDestroy}}
...attributes
>
Expand Down
10 changes: 7 additions & 3 deletions addon/components/select-box/index.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,11 @@ export default class SelectBox extends Component {
}

get optionsTabIndex() {
return this.isListBox ? '0' : '-1';
return this.isListBox ? '0' : null;
}

get dropdownTabIndex() {
return this.dropdown ? '-1' : null;
}

get triggerTabIndex() {
Expand Down Expand Up @@ -584,6 +588,7 @@ export default class SelectBox extends Component {
Option: this.Option,
Options: this.Options,
Trigger: this.Trigger,
Content: this.Content,
// Properties
element: this.element,
isBusy: this.isBusy,
Expand Down Expand Up @@ -642,15 +647,13 @@ export default class SelectBox extends Component {
)
Dropdown=(component
Dropdown
class="select-box__dropdown"
onReady=this.registerDropdown
onOpenClosure=this.handleOpenDropdown
onCloseClosure=this.handleCloseDropdown
onDestroy=this.handleDestroyDropdown
)
Trigger=(component
this.dropdown.Trigger
class="select-box__trigger"
role=this.triggerRole
aria-busy=this.isBusy
aria-disabled=this.isDisabled
Expand All @@ -661,6 +664,7 @@ export default class SelectBox extends Component {
onDestroy=this.handleDestroyTrigger
onKeyDown=this.handleKeyDownTrigger
)
Content=(component this.dropdown.Content tabindex="-1")
)
~}}
<div
Expand Down
2 changes: 1 addition & 1 deletion tests/acceptance/performance-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ module('Acceptance | performance', function (hooks) {

this.startTimer();

await click('.select-box__trigger');
await click('.select-box .dropdown__trigger');

this.stopTimer();

Expand Down
6 changes: 3 additions & 3 deletions tests/dummy/app/components/example3.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ import SelectBox from '@zestia/ember-select-box/components/select-box';
...attributes
as |sb|
>
<sb.Dropdown as |dd|>
<sb.Dropdown>
<sb.Trigger>
{{yield sb.value to="trigger"}}
</sb.Trigger>
<dd.Content>
<sb.Content>
<sb.Options>
{{#each @options as |value|}}
<sb.Option @value={{value}}>
{{yield value to="option"}}
</sb.Option>
{{/each}}
</sb.Options>
</dd.Content>
</sb.Content>
</sb.Dropdown>
</SelectBox>
</template>
6 changes: 3 additions & 3 deletions tests/dummy/app/components/example4.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@ export default class extends Component {
...attributes
as |sb|
>
<sb.Dropdown as |dd|>
<sb.Dropdown>
<sb.Trigger>
{{yield sb.value to="trigger"}}
</sb.Trigger>
<dd.Content>
<sb.Content>
<sb.Options>
{{#each @options as |value|}}
<sb.Option @value={{value}} as |option|>
Expand All @@ -38,7 +38,7 @@ export default class extends Component {
</sb.Option>
{{/each}}
</sb.Options>
</dd.Content>
</sb.Content>
</sb.Dropdown>
</SelectBox>
</template>
Expand Down
4 changes: 2 additions & 2 deletions tests/dummy/app/components/example6.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import { fn } from '@ember/helper';
</sb.Trigger>

{{#if dd.isOpen}}
<dd.Content>
<sb.Content>
<sb.Input />
<sb.Options>
{{#each sb.options as |value|}}
Expand All @@ -29,7 +29,7 @@ import { fn } from '@ember/helper';
</sb.Option>
{{/each}}
</sb.Options>
</dd.Content>
</sb.Content>
{{/if}}
</sb.Dropdown>
</SelectBox>
Expand Down
4 changes: 2 additions & 2 deletions tests/dummy/app/components/example7.gjs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export default class extends Component {
</div>

{{#if dd.isOpen}}
<dd.Content>
<sb.Content>
<sb.Options>
{{#if sb.isBusy}}
<sb.Option @disabled={{true}}>
Expand All @@ -56,7 +56,7 @@ export default class extends Component {
</sb.Option>
{{/if}}
</sb.Options>
</dd.Content>
</sb.Content>
{{/if}}
</sb.Dropdown>
</SelectBox>
Expand Down
28 changes: 16 additions & 12 deletions tests/dummy/app/styles/example.scss
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,30 @@
border-color: var(--dark-grey);
}

@mixin option {
@mixin trigger {
cursor: pointer;
padding: var(--space-l);
padding: var(--space-m);
outline: none;
user-select: none;
border: 2px solid transparent;
}

@mixin options {
outline: none;
@mixin dropdown-content {
display: flex;
flex-direction: column;
overflow: auto;
}

@mixin options {
outline: none;
overflow: auto;
}

@mixin option {
cursor: pointer;
padding: var(--space-l);
}

@mixin option-current {
box-shadow:
inset 0 0 0 2px var(--white),
Expand All @@ -50,14 +62,6 @@
font-weight: bold;
}

@mixin trigger {
cursor: pointer;
padding: var(--space-m);
outline: none;
user-select: none;
border: 2px solid transparent;
}

@mixin trigger-focused {
border-color: var(--blue);
}
Expand Down
4 changes: 0 additions & 4 deletions tests/dummy/app/styles/example1.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,6 @@
@include example.box-focused;
}

.select-box__options {
@include example.options;
}

.select-box__option {
@include example.option;
}
Expand Down
18 changes: 9 additions & 9 deletions tests/dummy/app/styles/example3.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@
@include example.box-focused;
}

.select-box__dropdown[data-open='false'] .select-box__options {
.dropdown[data-open='false'] .dropdown__content {
@include example.screen-reader-only;
}

.select-box__trigger {
.dropdown__trigger {
@include example.trigger;

width: 200px;
}

.select-box__trigger:focus {
.dropdown__trigger:focus {
@include example.trigger-focused;
}

.select-box__option {
@include example.option;
}

.select-box__options {
@include example.options;
.dropdown__content {
@include example.dropdown-content;

height: 240px;
}

.select-box__option {
@include example.option;
}

.select-box__option[aria-current='true'] {
@include example.option-current;
}
Expand Down
18 changes: 9 additions & 9 deletions tests/dummy/app/styles/example4.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,30 @@
@include example.box-focused;
}

.select-box__dropdown[data-open='false'] .select-box__options {
.dropdown[data-open='false'] .dropdown__content {
@include example.screen-reader-only;
}

.select-box__trigger {
.dropdown__trigger {
@include example.trigger;

width: 200px;
}

.select-box__trigger:focus {
.dropdown__trigger:focus {
@include example.trigger-focused;
}

.select-box__option {
@include example.option;
}

.select-box__options {
@include example.options;
.dropdown__content {
@include example.dropdown-content;

height: 282px;
}

.select-box__option {
@include example.option;
}

.select-box__option[aria-current='true'] {
@include example.option-current;
}
Expand Down
15 changes: 5 additions & 10 deletions tests/dummy/app/styles/example6.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,16 @@
@include example.box-focused;
}

.dropdown__content {
display: flex;
flex-direction: column;
}

.select-box__trigger {
.dropdown__trigger {
@include example.trigger;

width: 200px;
}

.dropdown__content {
@include example.dropdown-content;
}

.select-box__input {
@include example.input;
}
Expand All @@ -30,10 +29,6 @@
@include example.option;
}

.select-box__options {
@include example.options;
}

.select-box__option[aria-current='true'] {
@include example.option-current;
}
Expand Down
10 changes: 5 additions & 5 deletions tests/dummy/app/styles/example7.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,17 @@
@include example.box-focused;
}

.select-box__trigger {
.dropdown__trigger {
@include example.trigger;

width: 20px;
text-align: center;
}

.dropdown__content {
@include example.dropdown-content;
}

.select-box__input {
@include example.input;
}
Expand All @@ -26,10 +30,6 @@
@include example.option;
}

.select-box__options {
@include example.options;
}

.select-box__option[aria-current='true'] {
@include example.option-current;
}
Expand Down
4 changes: 2 additions & 2 deletions tests/dummy/app/templates/performance.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
{{if sb.value sb.value.name "None"}}
</sb.Trigger>
{{#if dd.isOpen}}
<dd.Content>
<sb.Content>
<sb.Options>
{{#each this.data as |value|}}
<sb.Option @value={{value}}>
{{value.name}}
</sb.Option>
{{/each}}
</sb.Options>
</dd.Content>
</sb.Content>
{{/if}}
</sb.Dropdown>
</SelectBox>
Loading

0 comments on commit d3a7ab3

Please sign in to comment.