@1024pix/pix-ui 11.1.0 → 13.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,33 @@
1
1
  # Pix-UI Changelog
2
2
 
3
+ ## v13.0.0 (27/01/2022)
4
+
5
+
6
+ ### :coffee: Various
7
+ - [#188](https://github.com/1024pix/pix-ui/pull/188) [BREAKING_CHANGES] Input / InputPassword missing event on onChange (PIX-4243)
8
+
9
+ ## v12.0.0 (24/01/2022)
10
+
11
+
12
+ ### :rocket: Enhancement
13
+ - [#94](https://github.com/1024pix/pix-ui/pull/94) [FEATURE] Ajout du composant PixModal
14
+
15
+ ### :bug: Bug fix
16
+ - [#186](https://github.com/1024pix/pix-ui/pull/186) [BUGFIX] Désactiver l'autocomplete sur le composant Pix Select (PIX-4158)
17
+ - [#187](https://github.com/1024pix/pix-ui/pull/187) [BUGFIX] Rendre tout le tag sélectionnable (PIX-4179)
18
+
19
+ ## v11.2.0 (14/01/2022)
20
+
21
+
22
+ ### :coffee: Various
23
+ - [#185](https://github.com/1024pix/pix-ui/pull/185) [A11Y] Ajouter une nouvelle couleur dans la palette de PixTag (PIX-4109)
24
+
25
+ ## v11.1.1 (17/12/2021)
26
+
27
+
28
+ ### :building_construction: Tech
29
+ - [#182](https://github.com/1024pix/pix-ui/pull/182) [TECH] Rendre responsive la PixFilterBanner
30
+
3
31
  ## v11.1.0 (16/12/2021)
4
32
 
5
33
 
@@ -3,9 +3,7 @@
3
3
  {{#if this.displayTitle}}
4
4
  <p class="pix-filter-banner__title">{{@title}}</p>
5
5
  {{/if}}
6
- <div class="pix-filter-banner__content">
7
- {{yield}}
8
- </div>
6
+ {{yield}}
9
7
  </div>
10
8
  <div class="pix-filter-banner__container-right">
11
9
  {{#if this.displayDetails}}
@@ -20,7 +20,6 @@
20
20
  type={{if this.isPasswordVisible "text" "password"}}
21
21
  value={{@value}}
22
22
  aria-label={{this.ariaLabel}}
23
- {{on "change" this.onChange}}
24
23
  ...attributes
25
24
  />
26
25
 
@@ -26,9 +26,4 @@ export default class PixInputPassword extends PixInput {
26
26
  togglePasswordVisibility() {
27
27
  this.isPasswordVisible = !this.isPasswordVisible;
28
28
  }
29
-
30
- @action
31
- onChange() {
32
- if (typeof this.args.onChange === 'function') this.args.onChange();
33
- }
34
29
  }
@@ -7,13 +7,7 @@
7
7
  {{/if}}
8
8
 
9
9
  <div class="pix-input__container">
10
- <input
11
- id={{this.id}}
12
- class={{this.className}}
13
- value={{@value}}
14
- {{on "change" this.onChange}}
15
- ...attributes
16
- />
10
+ <input id={{this.id}} class={{this.className}} value={{@value}} ...attributes />
17
11
 
18
12
  {{#if @errorMessage}}
19
13
  <FaIcon @icon="times" class="pix-input__error-icon" />
@@ -1,9 +1,6 @@
1
1
  import Component from '@glimmer/component';
2
2
 
3
- import { action } from '@ember/object';
4
3
  export default class PixInput extends Component {
5
- text = 'pix-input';
6
-
7
4
  get id() {
8
5
  if (!this.args.id || !this.args.id.toString().trim()) {
9
6
  throw new Error('ERROR in PixInput component, @id param is not provided');
@@ -18,9 +15,4 @@ export default class PixInput extends Component {
18
15
  this.args.isIconLeft && classNames.push('pix-input__input--icon-left');
19
16
  return classNames.join(' ');
20
17
  }
21
-
22
- @action
23
- onChange() {
24
- if (typeof this.args.onChange === 'function') this.args.onChange();
25
- }
26
18
  }
@@ -0,0 +1,28 @@
1
+ <div class="pix-modal__overlay">
2
+ <div
3
+ class="pix-modal"
4
+ role="dialog"
5
+ aria-labelledby="modal-title"
6
+ aria-describedby="modal-content"
7
+ aria-modal="true"
8
+ ...attributes
9
+ >
10
+ <header class="pix-modal__header">
11
+ <h1 id="modal-title" class="pix-modal__title">{{@title}}</h1>
12
+ <PixIconButton
13
+ @icon="times"
14
+ @triggerAction={{@onCloseButtonClick}}
15
+ @ariaLabel="Fermer"
16
+ @size="small"
17
+ @withBackground={{true}}
18
+ class="pix-modal__close-button"
19
+ />
20
+ </header>
21
+ <main id="modal-content" class="pix-modal__content">
22
+ {{yield to="content"}}
23
+ </main>
24
+ <footer class="pix-modal__footer">
25
+ {{yield to="footer"}}
26
+ </footer>
27
+ </div>
28
+ </div>
@@ -0,0 +1,11 @@
1
+ import Component from '@glimmer/component';
2
+
3
+ export default class PixModal extends Component {
4
+ constructor(...args) {
5
+ super(...args);
6
+
7
+ if (!this.args.title) {
8
+ throw new Error('ERROR in PixModal component: @title argument is required.');
9
+ }
10
+ }
11
+ }
@@ -12,6 +12,7 @@
12
12
  {{on "input" this.onChange}}
13
13
  class="{{if this.isValid "pix-select--is-valid"}} {{if this.isBig "pix-select--big"}}"
14
14
  ...attributes
15
+ autocomplete="off"
15
16
  />
16
17
 
17
18
  <datalist id={{this.datalistId}}>
@@ -3,6 +3,7 @@
3
3
  // primary
4
4
  $blue: #3D68FF;
5
5
  $yellow: #FFBE00;
6
+ $orange: #DA7601;
6
7
  $red: #D63F00;
7
8
  $blue-zodiac: #505F79;
8
9
  $black: #07142E;
@@ -3,9 +3,8 @@
3
3
 
4
4
  position: relative;
5
5
  display: flex;
6
- flex-direction: row;
7
- justify-content: space-between;
8
- align-items: center;
6
+ flex-direction: column;
7
+ gap: 6px;
9
8
  width: 100%;
10
9
 
11
10
  background-color: $white;
@@ -15,53 +14,34 @@
15
14
 
16
15
  &__container-left {
17
16
  display: flex;
18
- align-items: center;
19
- height: 36px;
17
+ flex-direction: column;
18
+ gap: 12px;
19
+
20
+ > * > * {
21
+ width: 100%;
22
+ }
20
23
  }
21
24
 
22
25
  &__container-right {
23
26
  display: flex;
24
- align-items: center;
25
- justify-content: flex-end;
26
- height: 36px;
27
+ flex-direction: column;
27
28
  }
28
29
 
29
30
  &__title {
30
31
  color: $grey-60;
31
32
  font-family: $font-roboto;
32
33
  font-size: 0.875rem;
33
- padding-right: 24px;
34
34
  margin: 0;
35
35
  }
36
36
 
37
- &__content {
38
- display: flex;
39
-
40
- > * {
41
- margin-right: 16px;
42
- }
43
-
44
- > *:last-child {
45
- margin-right: 0;
46
- }
47
- }
48
-
49
- &__details {
37
+ p.pix-filter-banner__details {
50
38
  color: $grey-60;
51
39
  font-family: $font-roboto;
52
40
  font-weight: $font-medium;
53
- padding-left: 16px;
54
41
  font-size: 0.875rem;
55
- margin: 0;
56
- margin-right: 16px;
57
- height: 18px;
58
- padding-top: 4px;
59
- text-align: center;
60
- }
61
-
62
- &__button-container {
63
- border-left: 1px solid $grey-15;
64
- padding-left: 16px;
42
+ margin-top: 10px;
43
+ padding-top: 10px;
44
+ border-top: 1px solid $grey-15;
65
45
  }
66
46
 
67
47
  &__button {
@@ -72,3 +52,53 @@
72
52
  .pix-filter-banner-button__icon {
73
53
  padding-right: 4px;
74
54
  }
55
+
56
+ @include device-is('tablet') {
57
+ .pix-filter-banner {
58
+ flex-direction: row;
59
+ justify-content: space-between;
60
+ align-items: center;
61
+
62
+ &__container-left {
63
+ flex-direction: row;
64
+ height: 36px;
65
+ align-items: center;
66
+ }
67
+
68
+ &__container-right {
69
+ flex-direction: row;
70
+ height: 36px;
71
+ align-items: center;
72
+ justify-content: flex-end;
73
+ }
74
+
75
+ &__content {
76
+ > * {
77
+ margin-right: 16px;
78
+ }
79
+
80
+ > *:last-child {
81
+ margin-right: 0;
82
+ }
83
+ }
84
+
85
+ &__title {
86
+ padding-right: 24px;
87
+ margin: 0;
88
+ }
89
+
90
+ p.pix-filter-banner__details {
91
+ margin: 0;
92
+ margin-right: 16px;
93
+ padding-left: 16px;
94
+ padding-top: 4px;
95
+ text-align: center;
96
+ border: none;
97
+ }
98
+
99
+ &__button-container {
100
+ border-left: 1px solid $grey-15;
101
+ padding-left: 16px;
102
+ }
103
+ }
104
+ }
@@ -59,10 +59,8 @@
59
59
  }
60
60
 
61
61
  input {
62
- display: flex;
62
+ width: 100%;
63
63
  height: 36px;
64
- flex-direction: column;
65
- justify-content: center;
66
64
  border: 1px solid $grey-40;
67
65
 
68
66
  @include input();
@@ -0,0 +1,95 @@
1
+ .pix-modal__overlay {
2
+ background-color: rgba(52, 69, 99, .7);
3
+ bottom: 0;
4
+ left: 0;
5
+ overflow-y: scroll;
6
+ position: fixed;
7
+ right: 0;
8
+ top: 0;
9
+ }
10
+
11
+ $modal-padding: 24px;
12
+ $mobile-close-button-size: 32px;
13
+ $tablet-close-button-size: 40px;
14
+ $space-between-title-and-close-button: 8px;
15
+ $button-margin: 16px;
16
+
17
+ .pix-modal {
18
+ @import "reset-css";
19
+ box-shadow: 1px 1px 5px rgba(0,0,0,.1);
20
+ margin: 20vw auto;
21
+ max-width: 512px;
22
+ width: calc(100% - 24px);
23
+
24
+ &__header {
25
+ background: $white;
26
+ border-bottom: 1px solid $grey-20;
27
+ border-top-left-radius: 4px;
28
+ border-top-right-radius: 4px;
29
+ padding: $modal-padding;
30
+ position: relative;
31
+ }
32
+
33
+ &__close-button {
34
+ flex-shrink: 0;
35
+ right: $modal-padding;
36
+ position: absolute;
37
+ top: $modal-padding;
38
+
39
+ @include device-is('tablet') {
40
+ height: $tablet-close-button-size;
41
+ width: $tablet-close-button-size;
42
+ }
43
+ }
44
+
45
+ &__title {
46
+ margin-bottom: 0;
47
+ font-family: $font-open-sans;
48
+ color: $grey-90;
49
+ font-size: 1.25rem;
50
+ line-height: 1.875rem;
51
+ font-weight: $font-normal;
52
+ padding-right: $mobile-close-button-size + $space-between-title-and-close-button;
53
+
54
+ @include device-is('tablet') {
55
+ padding-right: $tablet-close-button-size + $space-between-title-and-close-button;
56
+ }
57
+ }
58
+
59
+ &__content {
60
+ background-color: $grey-10;
61
+ padding: $modal-padding;
62
+ font-size: 0.875rem;
63
+ color: $grey-90;
64
+ line-height: 1.375rem;
65
+ font-family: $font-roboto;
66
+ font-weight: $font-normal;
67
+
68
+ p:last-child {
69
+ margin-bottom: 0;
70
+ }
71
+ }
72
+
73
+ &__footer {
74
+ background-color: $grey-10;
75
+ padding: 0 $modal-padding $modal-padding - $button-margin;
76
+ border-bottom-left-radius: 4px;
77
+ border-bottom-right-radius: 4px;
78
+
79
+ @include device-is('tablet') {
80
+ display: flex;
81
+ justify-content: flex-end;
82
+ flex-wrap: wrap;
83
+ }
84
+
85
+ .pix-button {
86
+ margin-bottom: $button-margin;
87
+ width: 100%;
88
+
89
+ @include device-is('tablet') {
90
+ margin: 0 0 $button-margin $button-margin;
91
+ width: auto;
92
+ }
93
+ }
94
+ }
95
+ }
@@ -37,6 +37,10 @@ $checkmark-width-with-space: $checkmark-width + 0.438rem;
37
37
  position: absolute;
38
38
  opacity: 0;
39
39
  cursor: pointer;
40
+ width: 100%;
41
+ height: 100%;
42
+ left: 0;
43
+ top: 0;
40
44
  }
41
45
 
42
46
  label {
@@ -50,6 +50,15 @@
50
50
  background-color: lighten($yellow, 35%);
51
51
  }
52
52
 
53
+ &--orange {
54
+ background-color: $orange;
55
+ }
56
+
57
+ &--orange-light {
58
+ color: darken($orange, 25%);
59
+ background-color: lighten($orange, 35%);
60
+ }
61
+
53
62
  &--grey {
54
63
  color: $grey-15;
55
64
  background-color: $grey-60;
@@ -25,6 +25,7 @@
25
25
  @import 'pix-input';
26
26
  @import 'pix-input-password';
27
27
  @import 'pix-radio-button';
28
+ @import 'pix-modal';
28
29
  @import 'pix-input-code';
29
30
  @import 'pix-selectable-tag';
30
31
 
@@ -0,0 +1 @@
1
+ export { default } from '@1024pix/pix-ui/components/pix-modal-content';
@@ -0,0 +1 @@
1
+ export { default } from '@1024pix/pix-ui/components/pix-modal-footer';
@@ -0,0 +1 @@
1
+ export { default } from '@1024pix/pix-ui/components/pix-modal';
@@ -60,7 +60,6 @@ Si vous utilisez le `PixInputPassword` sans label alors il faut renseigner le pa
60
60
  @value='{{value}}'
61
61
  @errorMessage='{{errorMessage}}'
62
62
  @prefix='{{prefix}}'
63
- @onChange='{{onChange}}'
64
63
  />
65
64
  ```
66
65
 
@@ -48,8 +48,7 @@ Le PixInput permet de créer un champ de texte.
48
48
  @information='Complément du label'
49
49
  @errorMessage="Un message d'erreur"
50
50
  @icon="eye"
51
- @isIconLeft={{false}}
52
- @onChange={{onChange}} />
51
+ @isIconLeft={{false}} />
53
52
  ```
54
53
 
55
54
  ## Arguments
@@ -0,0 +1,40 @@
1
+ import { hbs } from 'ember-cli-htmlbars';
2
+
3
+ export const modal = (args) => {
4
+ return {
5
+ template: hbs`
6
+ <PixModal @title={{this.title}}>
7
+ <:content>
8
+ <p>
9
+ Une fenêtre modale est, dans une interface graphique, une fenêtre qui prend le contrôle total du clavier et
10
+ de l'écran. Elle est en général associée à une question à laquelle il est impératif que l'utilisateur
11
+ réponde avant de poursuivre, ou de modifier quoi que ce soit. La fenêtre modale a pour propos : d'obtenir
12
+ des informations de l'utilisateur (ces informations sont nécessaires pour réaliser une opération) ; de
13
+ fournir une information à l'utilisateur (ce dernier doit en prendre connaissance avant de pouvoir continuer
14
+ à utiliser l'application).
15
+ </p>
16
+ </:content>
17
+ <:footer>
18
+ <PixButton @backgroundColor="transparent-light" @isBorderVisible="true">Annuler</PixButton>
19
+ <PixButton>Valider</PixButton>
20
+ </:footer>
21
+ </PixModal>
22
+ `,
23
+ context: args,
24
+ };
25
+ };
26
+
27
+ export const argTypes = {
28
+ title: {
29
+ name: 'title',
30
+ description: 'Titre de la modale',
31
+ type: { name: 'string', required: false },
32
+ defaultValue: "Qu'est-ce qu'une modale ?",
33
+ },
34
+ onCloseButtonClick: {
35
+ name: 'onCloseButtonClick',
36
+ description: 'Fonction à executer lors du clic sur le bouton de fermeture de la modale',
37
+ type: { name: 'function', required: true },
38
+ defaultValue: null,
39
+ },
40
+ };
@@ -0,0 +1,59 @@
1
+ import { Meta, Story, Canvas, ArgsTable } from '@storybook/addon-docs/blocks';
2
+ import centered from '@storybook/addon-centered/ember';
3
+
4
+ import * as stories from './pix-modal.stories.js';
5
+
6
+ <Meta
7
+ title='Basics/Modal'
8
+ component='PixModal'
9
+ decorators={[centered]}
10
+ argTypes={stories.argTypes}
11
+ />
12
+
13
+ # PixModal
14
+
15
+ Une fenêtre modale responsive et scrollable avec un overlay.
16
+
17
+ Ce composant possède deux `yield` :
18
+ - `:content` est destiné à accueillir le contenu principal de la fenêtre modale. Il peut accueillir tout type de
19
+ contenu HTML (simple texte, image, formulaire, etc.)
20
+ - `:footer` peut également accueillir tout type de contenu HTML, mais est destiné aux boutons permettant d'interagir
21
+ avec la modale, ce qui permettra de les positionner correctement dans tous les cas de figure.
22
+
23
+ <Canvas>
24
+ <Story name='PixModal' story={stories.modal} height={500} />
25
+ </Canvas>
26
+
27
+ ## Usage
28
+
29
+ ```html
30
+ <PixModal
31
+ @title="Qu'est-ce qu'une modale ?"
32
+ @onCloseButtonClick={{this.closeModal}}
33
+ >
34
+ <:content>
35
+ <p>
36
+ Une fenêtre modale est, dans une interface graphique, une fenêtre qui prend le contrôle total du clavier et
37
+ de l'écran. Elle est en général associée à une question à laquelle il est impératif que l'utilisateur
38
+ réponde avant de poursuivre, ou de modifier quoi que ce soit. La fenêtre modale a pour propos : d'obtenir
39
+ des informations de l'utilisateur (ces informations sont nécessaires pour réaliser une opération) ; de
40
+ fournir une information à l'utilisateur (ce dernier doit en prendre connaissance avant de pouvoir continuer
41
+ à utiliser l'application).
42
+ </p>
43
+ </:content>
44
+ <:footer>
45
+ <PixButton
46
+ @backgroundColor="transparent-light"
47
+ @isBorderVisible={{true}}
48
+ @triggerAction={{this.closeModal}}
49
+ >
50
+ Annuler
51
+ </PixButton>
52
+ <PixButton>Valider</PixButton>
53
+ </:footer>
54
+ </PixModal>
55
+ ```
56
+
57
+ ## Arguments
58
+
59
+ <ArgsTable story="PixModal" />
@@ -36,14 +36,16 @@ export const argTypes = {
36
36
  options: [
37
37
  'blue',
38
38
  'blue-light',
39
- 'purple',
40
- 'purple-light',
41
39
  'green',
42
40
  'green-light',
43
- 'yellow',
44
- 'yellow-light',
45
41
  'grey',
46
42
  'grey-light',
43
+ 'purple',
44
+ 'purple-light',
45
+ 'orange',
46
+ 'orange-light',
47
+ 'yellow',
48
+ 'yellow-light',
47
49
  ],
48
50
  },
49
51
  },
@@ -0,0 +1,19 @@
1
+ import { Meta } from '@storybook/addon-docs/blocks';
2
+
3
+ <Meta title="Développement/Tester un composant en developpement dans une app" />
4
+
5
+ # Tester un composant en developpement dans une app
6
+
7
+ Il est possible de tester l'intégration d'un composant dans une application
8
+ Ember sans nécessairement créer une nouvelle release.
9
+
10
+ Pour cela, dans le repertoire de l'application Ember, installer Pix UI
11
+ en utilisant l'adresse du dépôt Github et le nom de la branche.
12
+ Par exemple :
13
+
14
+ ```shell
15
+ npm install "git://github.com/1024pix/pix-ui#add-modal-component" --save-dev
16
+ ```
17
+
18
+ Une fois l'application Ember redémarrée, il sera possible d'accéder aux
19
+ composants Pix UI tels qu'ils sont dans la branche en cours de développement.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1024pix/pix-ui",
3
- "version": "11.1.0",
3
+ "version": "13.0.0",
4
4
  "description": "Pix-UI is the implementation of Pix design principles and guidelines for its products.",
5
5
  "keywords": [
6
6
  "ember-addon"