@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 +28 -0
- package/addon/components/pix-filter-banner.hbs +1 -3
- package/addon/components/pix-input-password.hbs +0 -1
- package/addon/components/pix-input-password.js +0 -5
- package/addon/components/pix-input.hbs +1 -7
- package/addon/components/pix-input.js +0 -8
- package/addon/components/pix-modal.hbs +28 -0
- package/addon/components/pix-modal.js +11 -0
- package/addon/components/pix-select.hbs +1 -0
- package/addon/styles/_colors.scss +1 -0
- package/addon/styles/_pix-filter-banner.scss +63 -33
- package/addon/styles/_pix-input.scss +1 -3
- package/addon/styles/_pix-modal.scss +95 -0
- package/addon/styles/_pix-selectable-tag.scss +4 -0
- package/addon/styles/_pix-tag.scss +9 -0
- package/addon/styles/addon.scss +1 -0
- package/app/components/pix-modal-content.js +1 -0
- package/app/components/pix-modal-footer.js +1 -0
- package/app/components/pix-modal.js +1 -0
- package/app/stories/pix-input-password.stories.mdx +0 -1
- package/app/stories/pix-input.stories.mdx +1 -2
- package/app/stories/pix-modal.stories.js +40 -0
- package/app/stories/pix-modal.stories.mdx +59 -0
- package/app/stories/pix-tag.stories.js +6 -4
- package/docs/test-component-without-release.stories.mdx +19 -0
- package/package.json +1 -1
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
|
|
|
@@ -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
|
+
}
|
|
@@ -3,9 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
position: relative;
|
|
5
5
|
display: flex;
|
|
6
|
-
flex-direction:
|
|
7
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:
|
|
56
|
-
|
|
57
|
-
|
|
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
|
+
}
|
|
@@ -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
|
+
}
|
|
@@ -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;
|
package/addon/styles/addon.scss
CHANGED
|
@@ -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';
|
|
@@ -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.
|