@1024pix/pix-ui 19.0.0 → 20.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,10 +1,40 @@
1
1
  # Pix-UI Changelog
2
2
 
3
+ ## v20.0.0 (11/10/2022)
4
+
5
+
6
+ ### :building_construction: Tech
7
+ - [#259](https://github.com/1024pix/pix-ui/pull/259) [TECH] Mettre à jour la doc PixMultiSelect, pour la rendre plus lisible (PIX-5806)
8
+
9
+ ### :coffee: Autre
10
+ - [#261](https://github.com/1024pix/pix-ui/pull/261) [BREAKING CHANGES][FEATURE] Suppression du padding dans le composant `PixBlock` (PIX-5971).
11
+
12
+ ## v19.0.1 (04/10/2022)
13
+
14
+ ### :rocket: Amélioration
15
+ - [#258](https://github.com/1024pix/pix-ui/pull/258) [FEATURE] Centre la PixModal en hauteur
16
+ * ⚠️ Le scroll est géré par l'overlay, conteneur de la modale. Si vous avez fait du code spécifique pour que ce soit la modale qui contienne son scroll, cela peut entraîner du contenu non visible dans le viewport.
17
+ - [#257](https://github.com/1024pix/pix-ui/pull/257) [FEATURE] Suppression du `padding` de la Sidebar pour permettre de mieux customiser
18
+
19
+ ### :coffee: Autre
20
+ - [#256](https://github.com/1024pix/pix-ui/pull/256) [BUFGIX] Mettre à jour la page d'utilisation de la PixModal (PIX-5735)
21
+
3
22
  ## v19.0.0 (16/09/2022)
4
23
 
24
+ ### :warning: Breaking Change
25
+
26
+ **PixCheckBox** :
27
+ * L'argument `label` n'est plus disponible en tant qu'argument, est doit être instancier de cette manière `<PixCheckBox>label</PixCheckBox>`
28
+
29
+ **PixMultiSelect** :
30
+ * L'argument `title` a été supprimé et ne doit plus être utilisé. Utilisez à la place l'argument `label`, ce label est présent pour définir le champ input ou le bouton.
31
+ * L'argument `placeholder` a été remplacé. Utilisez à la place l'argument `innerText`, il fait office de placeholder pour le multiselect searchable ou de contenu pour le bouton.
32
+ * L'argument `size` a été supprimé. Ce composant a désormais une taille unique (correspondant à l'ancien small).
33
+ * L'argument `showOnInput` a été supprimé, pour un comportement non a11y compliant.
34
+ * L'argument `screenReaderOnly` a été ajouté afin de caché de manière accessible le `label` à l'écran
5
35
 
6
36
  ### :rocket: Amélioration
7
- - [#252](https://github.com/1024pix/pix-ui/pull/252) [FEATURE] Rendre accessible (a11y) le composant PixMultiSelect (PIX-5555)
37
+ - [#252](https://github.com/1024pix/pix-ui/pull/252) [FEATURE] Rendre accessible (a11y) le composant PixMultiSelect et PixCheckbox (PIX-5555)
8
38
 
9
39
  ## v18.2.0 (16/09/2022)
10
40
 
@@ -36,6 +66,10 @@
36
66
 
37
67
  ## v18.0.0 (01/09/2022)
38
68
 
69
+ ### :warning: Breaking Change
70
+
71
+ **PixModal** :
72
+ * Le composant PixModal gère maintenant lui-même son état de visibilité. Pour le contrôler, il suffit d'utiliser la propriété `@showModal` qui est un booléen obligatoire.
39
73
 
40
74
  ### :bug: Correction
41
75
  - [#246](https://github.com/1024pix/pix-ui/pull/246) [BUGFIX] Mettre le focus sur le premier élement où est utiliser le `trap-focus`.
@@ -1,7 +1,7 @@
1
1
  <div class="pix-background-header" ...attributes>
2
-
3
2
  <div class="pix-background-header__background"></div>
4
3
 
5
- {{yield}}
6
-
4
+ <div class="pix-background-header__content">
5
+ {{yield}}
6
+ </div>
7
7
  </div>
@@ -1,6 +1,4 @@
1
1
  .pix-background-header {
2
- @import 'reset-css';
3
-
4
2
  position: relative;
5
3
  display: flex;
6
4
  flex-direction: column;
@@ -18,4 +16,9 @@
18
16
  box-shadow: 0 2px 8px 0 rgba(0, 0, 0, 0.1);
19
17
  color: $pix-neutral-0;
20
18
  }
21
- }
19
+
20
+ &__content {
21
+ max-width: 980px;
22
+ margin: 0 auto;
23
+ }
24
+ }
@@ -1,29 +1,14 @@
1
1
  .pix-block {
2
2
  position: relative;
3
- width: 100%;
4
- max-width: 980px;
5
- padding: 14px 24px;
6
- margin-bottom: 32px;
7
3
  background-color: $pix-neutral-0;
8
4
  border-radius: 5px;
9
5
 
10
6
  &--shadow-light {
11
- box-shadow: 0 10px 20px 0 rgba($pix-primary, 0.06);
7
+ box-shadow: 0px 4px 8px 0px $pix-neutral-110;
12
8
  }
9
+
13
10
  &--shadow-heavy {
14
11
  box-shadow: 0 50px 54px -40px rgba($pix-neutral-110, 0.4),
15
12
  0 7px 14px 0 rgba($pix-neutral-100, 0.1);
16
13
  }
17
14
  }
18
-
19
- .pix-background-header {
20
- &__background + .pix-block {
21
- margin-top: 68px;
22
- }
23
- }
24
-
25
- @include device-is('mobile') {
26
- .pix-block {
27
- padding: 16px;
28
- }
29
- }
@@ -1,14 +1,27 @@
1
1
  .pix-modal__overlay {
2
- background-color: rgba(52, 69, 99, 0.7);
2
+ position: fixed;
3
+ z-index: 1000;
4
+ top: 0;
3
5
  bottom: 0;
4
6
  left: 0;
5
- overflow-y: scroll;
6
- position: fixed;
7
7
  right: 0;
8
- top: 0;
9
- z-index: 1000;
8
+ overflow-y: auto;
9
+ text-align: center; // Used to center horizontally the inline-block modal content
10
+ padding: $spacing-xs 0;
11
+ background-color: rgba(52, 69, 99, 0.7);
10
12
  transition: all 0.3s ease-in-out;
11
13
 
14
+ // This block is used to center vertically the modal
15
+ // if the content is less than 100vh
16
+ // Inspired by https://mui.com/material-ui/react-dialog/#scrolling-long-content
17
+ &::after {
18
+ content: "";
19
+ display: inline-block;
20
+ vertical-align: middle;
21
+ height: 100%;
22
+ width: 0px;
23
+ }
24
+
12
25
  &--hidden {
13
26
  visibility: hidden;
14
27
  opacity: 0;
@@ -23,16 +36,19 @@ $button-margin: 16px;
23
36
 
24
37
  .pix-modal {
25
38
  @import 'reset-css';
39
+ display: inline-block;
40
+ vertical-align: middle; // Centered vertically with the .pix-modal__overlay::after which is 100% height
41
+ width: 512px;
42
+ max-width: calc(100% - #{2 * $spacing-xs}); // Horizontal margin sets here to have extra space for the .pix-modal__overlay::after on mobile
43
+ text-align: initial;
44
+ background-color: $pix-neutral-10;
26
45
  box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1);
27
- margin: 20vh auto;
28
- max-width: 512px;
29
- width: calc(100% - 24px);
46
+ border-radius: 4px;
47
+ overflow: hidden;
30
48
 
31
49
  &__header {
32
50
  background: $pix-neutral-0;
33
51
  border-bottom: 1px solid $pix-neutral-20;
34
- border-top-left-radius: 4px;
35
- border-top-right-radius: 4px;
36
52
  padding: $modal-padding;
37
53
  display: flex;
38
54
  align-items: flex-start;
@@ -64,7 +80,6 @@ $button-margin: 16px;
64
80
  }
65
81
 
66
82
  &__content {
67
- background-color: $pix-neutral-10;
68
83
  padding: $modal-padding;
69
84
  font-size: 0.875rem;
70
85
  color: $pix-neutral-90;
@@ -78,10 +93,7 @@ $button-margin: 16px;
78
93
  }
79
94
 
80
95
  &__footer {
81
- background-color: $pix-neutral-10;
82
96
  padding: 0 $modal-padding $modal-padding - $button-margin;
83
- border-bottom-left-radius: 4px;
84
- border-bottom-right-radius: 4px;
85
97
 
86
98
  @include device-is('tablet') {
87
99
  display: flex;
@@ -69,10 +69,6 @@ $button-margin: 16px;
69
69
  }
70
70
  }
71
71
 
72
- &__content {
73
- padding: $sidebar-padding 0;
74
- }
75
-
76
72
  &__footer {
77
73
  padding: $sidebar-padding;
78
74
  border-top: 1px solid $pix-neutral-20;
@@ -5,9 +5,9 @@ export const backgroundHeader = (args) => {
5
5
  template: hbs`
6
6
  <PixBackgroundHeader>
7
7
 
8
- <PixBlock>Un panel avec du text</PixBlock>
8
+ <PixBlock style="margin: 68px 0 32px; padding: 14px 24px;">Un panel avec du text</PixBlock>
9
9
 
10
- <PixBlock>
10
+ <PixBlock style="padding: 14px 24px;">
11
11
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis a interdum mauris. Morbi ac diam varius, maximus massa id, venenatis lectus. Fusce interdum tincidunt mattis. Nullam porta sollicitudin lorem, sodales cursus arcu finibus in. Nam pretium congue diam sollicitudin faucibus. Aliquam nec augue massa. Pellentesque eleifend nec arcu eu tincidunt. Pellentesque at quam dignissim, lacinia sem et, pharetra magna. Etiam venenatis felis augue, id sollicitudin sapien interdum at. Cras bibendum fermentum eros, rutrum varius turpis venenatis vitae. Suspendisse aliquet iaculis sem in blandit. Mauris vitae erat lobortis est volutpat bibendum non molestie purus.
12
12
  Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed consequat porttitor metus a imperdiet. Duis quis enim fermentum, sodales massa sit amet, blandit elit. Aliquam felis purus, dictum sed pretium vel, aliquam sit amet felis. Nunc convallis pellentesque convallis. Suspendisse potenti. Aenean iaculis, nunc placerat aliquam posuere, tellus enim facilisis metus, non egestas sapien arcu et leo.
13
13
  </PixBlock>
@@ -13,8 +13,6 @@ import * as stories from './pix-block.stories.js';
13
13
 
14
14
  Un \`Block\` est un bloc de fond blanc dont les bords sont arrondis et ayant une ombre projetée.
15
15
 
16
- > Les marges intérieures du bloc sont de 14px (haut et bas) et 24px (droite et gauche), sauf pour la version mobile où c'est 16px (partout).
17
-
18
16
  > Un \`Block\` prendra toute la largeur de son parent, dans la limite maximale de 980px.
19
17
 
20
18
  > Donnez donc un parent de la taille que vous souhaitez, votre bloc prendra la même taille.
@@ -49,7 +49,7 @@ export const argTypes = {
49
49
  showModal: {
50
50
  name: 'showModal',
51
51
  description: "Gérer l'ouverture de la modale",
52
- type: { name: 'boolean', required: false },
52
+ type: { name: 'boolean', required: true },
53
53
  control: { type: 'boolean' },
54
54
  table: {
55
55
  type: { summary: 'boolean' },
@@ -30,6 +30,7 @@ Ce composant possède deux `yield` :
30
30
  ```html
31
31
  <PixModal
32
32
  @title="Qu'est-ce qu'une modale ?"
33
+ @showModal={{this.showModal}}
33
34
  @onCloseButtonClick={{this.closeModal}}
34
35
  >
35
36
  <:content>
@@ -117,16 +117,22 @@ export const argTypes = {
117
117
  innerText: {
118
118
  name: 'innerText',
119
119
  description:
120
- 'Donne un titre à sa liste de choix multiple, utilisé comme placeholder lorsque ``isSearchable`` à ``true``',
120
+ 'Rempli le contenu interne du composant, `placeholder` pour `isSearchable` `true`, sinon rawContent du `button`',
121
121
  type: { name: 'string', required: true },
122
122
  defaultValue: 'Rechercher un condiment',
123
123
  },
124
124
  label: {
125
125
  name: 'label',
126
- description: 'Donne un label au champ',
126
+ description: "Donne un label au champ qui sera celui vocalisé par le lecteur d'écran",
127
127
  type: { name: 'string', required: true },
128
128
  defaultValue: 'Label du champ',
129
129
  },
130
+ screenReaderOnly: {
131
+ name: 'screenReaderOnly',
132
+ description: "Permet de cacher à l'écran le label tout en restant vocalisable",
133
+ type: { name: 'boolean', required: false },
134
+ defaultValue: false,
135
+ },
130
136
  emptyMessage: {
131
137
  name: 'emptyMessage',
132
138
  description:
@@ -134,18 +140,11 @@ export const argTypes = {
134
140
  type: { name: 'string', required: true },
135
141
  defaultValue: 'pas de résultat',
136
142
  },
137
- loadingMessage: {
138
- name: 'loadingMessage',
139
- description:
140
- "Message qui apparaît dans les options quand celles-ci sont en train d'être chargées via onLoadOptions",
141
- type: { name: 'string', required: false },
142
- defaultValue: 'Chargement...',
143
- },
144
143
  options: {
145
144
  name: 'options',
146
145
  description:
147
146
  'Les options sont représentées par un tableau d‘objet contenant les propriétés ``value`` et ``label``. ``value`` doit être de type ``String`` pour être conforme au traitement des input value.',
148
- type: { name: 'array', required: true },
147
+ type: { name: 'array', required: false },
149
148
  defaultValue: DEFAULT_OPTIONS,
150
149
  },
151
150
  onLoadOptions: {
@@ -154,6 +153,13 @@ export const argTypes = {
154
153
  'Charge de manière asynchrone les options. Doit renvoyer une promesse avec la liste des options. Les options sont représentées par un tableau d‘objet contenant les propriétés ``value`` et ``label``. ``value`` doit être de type ``String`` pour être conforme au traitement des input value.',
155
154
  type: { required: false },
156
155
  },
156
+ loadingMessage: {
157
+ name: 'loadingMessage',
158
+ description:
159
+ "Message qui apparaît dans les options quand celles-ci sont en train d'être chargées via onLoadOptions",
160
+ type: { name: 'string', required: false },
161
+ defaultValue: 'Chargement...',
162
+ },
157
163
  onSelect: {
158
164
  name: 'onSelect',
159
165
  description: "Une fonction permettant d'effectuer une action à chaque sélection",
@@ -179,10 +185,4 @@ export const argTypes = {
179
185
  type: { name: 'boolean', required: false },
180
186
  defaultValue: false,
181
187
  },
182
- screenReaderOnly: {
183
- name: 'screenReaderOnly',
184
- description: "Permet de cacher à l'écran le label tout en restant vocalisable",
185
- type: { name: 'boolean', required: false },
186
- defaultValue: false,
187
- },
188
188
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1024pix/pix-ui",
3
- "version": "19.0.0",
3
+ "version": "20.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"