Skip to content

Commit

Permalink
✨(react) add Select component
Browse files Browse the repository at this point in the history
Finally our powerful Select component is available to make great forms!
  • Loading branch information
NathanVss committed May 12, 2023
1 parent 270484c commit 2ff5fc5
Show file tree
Hide file tree
Showing 21 changed files with 2,441 additions and 158 deletions.
5 changes: 5 additions & 0 deletions .changeset/good-coins-divide.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openfun/cunningham-react": minor
---

add Select component
5 changes: 5 additions & 0 deletions .changeset/lazy-crews-press.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openfun/cunningham-react": patch
---

add forwardRef to Button
5 changes: 5 additions & 0 deletions .changeset/moody-glasses-fly.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@openfun/cunningham-react": patch
---

create a generic LabelledBox
3 changes: 2 additions & 1 deletion packages/react/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"@openfun/cunningham-tokens": "*",
"@tanstack/react-table": "8.8.4",
"classnames": "2.3.2",
"downshift": "7.6.0",
"react": "18.2.0",
"react-dom": "18.2.0"
},
Expand All @@ -51,9 +52,9 @@
},
"devDependencies": {
"@babel/core": "7.21.3",
"@babel/preset-typescript": "7.21.4",
"@babel/plugin-proposal-decorators": "7.21.0",
"@babel/plugin-proposal-export-default-from": "7.18.10",
"@babel/preset-typescript": "7.21.4",
"@faker-js/faker": "7.6.0",
"@openfun/cunningham-tokens": "*",
"@openfun/typescript-configs": "*",
Expand Down
183 changes: 183 additions & 0 deletions packages/react/src/components/Forms/Select/index.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
.c__select {
position: relative;

&__wrapper {
border-radius: var(--c--components--forms-select--border-radius);
border-width: var(--c--components--forms-select--border-width);
border-color: var(--c--components--forms-select--border-color);
border-style: var(--c--components--forms-select--border-style);
display: flex;
align-items: center;
transition: border var(--c--theme--transitions--duration) var(--c--theme--transitions--ease-out);
padding: 0 0.75rem;
gap: 1rem;
color: var(--c--components--forms-select--color);
box-sizing: border-box;
height: var(--c--components--forms-select--height);
cursor: pointer;
background-color: var(--c--components--forms-select--background-color);
position: relative;
overflow: hidden;

label {
cursor: pointer;
}

&:hover {
border-radius: var(--c--components--forms-select--border-radius--hover);
border-color: var(--c--components--forms-select--border-color--hover);
}

&:focus-within {
border-radius: var(--c--components--forms-select--border-radius--focus);
border-color: var(--c--components--forms-select--border-color--focus);
}
}

&__inner {
flex-grow: 1;
display: flex;
justify-content: space-between;
user-select: none;
min-width: 0;

&__value {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
flex-grow: 1;
font-size: var(--c--components--forms-select--font-size);

input {
outline: 0;
border: 0;
padding: 0;
margin: 0;
color: var(--c--components--forms-select--color);
font-size: var(--c--components--forms-select--font-size);
}
}

&__actions {
position: relative;
top: -14px;
display: flex;
align-items: center;

span {
font-size: 1.25rem;
transition: all var(--c--theme--transitions--duration) var(--c--theme--transitions--ease-out);
&.opened {
transform: rotate(180deg);
}
}

&__clear {
color: var(--c--theme--colors--greyscale-500);
}
&__separator {
background-color: var(--c--theme--colors--greyscale-400);
height: 24px;
width: 1px;
}
&__open {
color: var(--c--theme--colors--greyscale-900);
}
}
}

&__menu {
position: absolute;
overflow: auto;
width: calc(100% - 4px);
max-height: 10rem;
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);
background-color: var(--c--components--forms-select--menu-background-color);
transform: translate(2px, 0);
display: none;
z-index: 1;

&--opened {
display: block;
}

ul {
list-style-type: none;
padding: 0;
margin: 0;
padding-top: 3px;
}

&__item {
padding: 0.75rem;
font-size: var(--c--components--forms-select--item-font-size);
color: var(--c--components--forms-select--item-color);
cursor: pointer;

&--highlight {
background-color: var(--c--components--forms-select--item-background-color--hover);
}

&--selected {
background-color: var(--c--components--forms-select--item-background-color--selected);
}
}
}

/** Modifiers */

&--disabled {

.c__select__wrapper {
color: var(--c--theme--colors--greyscale-600);
border-color: var(--c--theme--colors--greyscale-200);
cursor: default;

label {
cursor: default;
}

input {
color: var(--c--theme--colors--greyscale-600);
background-color: white;
}
}


.c__input__inner {
.c__input, label {
color: var(--c--theme--colors--greyscale-600);
}
}

&:hover {
border-color: var(--c--theme--colors--greyscale-200);
}
}

&--error {

.c__select__wrapper {
border-color: var(--c--theme--colors--danger-600);
}

&:not(.c__select__wrapper--disabled) {
.c__select__wrapper:hover {
border-color: var(--c--theme--colors--danger-200);
}
}
}

&--success {

.c__select__wrapper {
border-color: var(--c--theme--colors--success-600);
}

&:not(.c__select__wrapper--disabled) {
.c__select__wrapper:hover {
border-color: var(--c--theme--colors--success-400);
}
}
}
}
Loading

0 comments on commit 2ff5fc5

Please sign in to comment.