@hipay/hipay-material-ui 1.0.0-beta.13 → 1.0.0-beta.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. package/HiBreadcrumb/HiBreadcrumb.js +28 -22
  2. package/HiBreadcrumb/HiStep.js +96 -60
  3. package/HiBreadcrumb/HiStepConnector.js +91 -26
  4. package/HiBreadcrumb/HiStepContent.js +122 -0
  5. package/HiBreadcrumb/HiStepIcon.js +86 -29
  6. package/HiBreadcrumb/HiStepLabel.js +128 -62
  7. package/HiBreadcrumb/HiStepper.js +5 -24
  8. package/HiDatePicker/HiDateRangePicker.js +69 -28
  9. package/HiDatePicker/HiDateRangeSelector.js +14 -6
  10. package/HiDatePicker/Overlays/CustomOverlayLayout.js +3 -1
  11. package/HiDatePicker/Overlays/Overlay.js +22 -4
  12. package/HiDatePicker/stylesheet.js +7 -0
  13. package/HiForm/HiInput.js +24 -11
  14. package/HiForm/HiSlider.js +399 -0
  15. package/HiForm/index.js +9 -0
  16. package/HiSelect/HiSelect.js +1 -1
  17. package/HiTable/BodyCellBuilder.js +3 -0
  18. package/HiTable/BodyCells/CellIcon.js +26 -19
  19. package/HiTable/BodyCells/CellImage.js +17 -13
  20. package/HiTable/BodyCells/CellNumeric.js +7 -2
  21. package/HiTable/BodyCells/CellSentinel.js +14 -13
  22. package/HiTable/BodyCells/CellThirdPartySecurity.js +43 -19
  23. package/HiTable/HeaderCell.js +3 -2
  24. package/es/HiBreadcrumb/HiBreadcrumb.js +27 -19
  25. package/es/HiBreadcrumb/HiStep.js +55 -54
  26. package/es/HiBreadcrumb/HiStepConnector.js +86 -26
  27. package/es/HiBreadcrumb/HiStepContent.js +63 -0
  28. package/es/HiBreadcrumb/HiStepIcon.js +103 -35
  29. package/es/HiBreadcrumb/HiStepLabel.js +106 -63
  30. package/es/HiBreadcrumb/HiStepper.js +5 -21
  31. package/es/HiDatePicker/HiDateRangePicker.js +65 -27
  32. package/es/HiDatePicker/HiDateRangeSelector.js +15 -7
  33. package/es/HiDatePicker/Overlays/CustomOverlayLayout.js +3 -1
  34. package/es/HiDatePicker/Overlays/Overlay.js +18 -4
  35. package/es/HiDatePicker/stylesheet.js +7 -0
  36. package/es/HiForm/HiInput.js +19 -10
  37. package/es/HiForm/HiSlider.js +309 -0
  38. package/es/HiForm/index.js +1 -0
  39. package/es/HiSelect/HiSelect.js +1 -1
  40. package/es/HiTable/BodyCellBuilder.js +3 -0
  41. package/es/HiTable/BodyCells/CellIcon.js +15 -8
  42. package/es/HiTable/BodyCells/CellImage.js +16 -14
  43. package/es/HiTable/BodyCells/CellNumeric.js +6 -2
  44. package/es/HiTable/BodyCells/CellSentinel.js +8 -5
  45. package/es/HiTable/BodyCells/CellThirdPartySecurity.js +40 -15
  46. package/es/HiTable/HeaderCell.js +3 -2
  47. package/es/utils/hiHelpers.js +4 -3
  48. package/index.es.js +1 -1
  49. package/index.js +1 -1
  50. package/package.json +43 -43
  51. package/umd/hipay-material-ui.development.js +7680 -7171
  52. package/umd/hipay-material-ui.production.min.js +5 -5
  53. package/utils/hiHelpers.js +4 -2
@@ -6,6 +6,8 @@ import React from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import { formatDate, parseDate } from 'react-day-picker/moment';
8
8
  import DayPickerInput from 'react-day-picker/DayPickerInput';
9
+ import classNames from 'classnames';
10
+
9
11
  import withStyles from '../styles/withStyles';
10
12
  import { capitalizeFirstLetter } from '../utils/helpers';
11
13
  import Caption from './Caption';
@@ -23,11 +25,14 @@ class HiDateRangePicker extends React.Component {
23
25
  constructor(props) {
24
26
  super();
25
27
 
28
+ this.handleDayPickerFocus = name => () => {
29
+ this.setState({ focusedInput: name });
30
+ };
31
+
26
32
  this.state = {
27
- fromOpenedPanel: 'calendar',
28
33
  fromCurrentMonth: props.from ? props.from : new Date(),
29
- toOpenedPanel: 'calendar',
30
- toCurrentMonth: props.to ? props.to : new Date()
34
+ toCurrentMonth: props.to ? props.to : new Date(),
35
+ focusedInput: ''
31
36
  };
32
37
 
33
38
  this.handleReset = this.handleReset.bind(this);
@@ -51,6 +56,8 @@ class HiDateRangePicker extends React.Component {
51
56
  this.handleYearClick = this.handleYearClick.bind(this);
52
57
  this.handleYearClickFrom = this.handleYearClickFrom.bind(this);
53
58
  this.handleYearClickTo = this.handleYearClickTo.bind(this);
59
+ this.handleDayPickerFocus = this.handleDayPickerFocus.bind(this);
60
+ this.handleDayPickerBlur = this.handleDayPickerBlur.bind(this);
54
61
 
55
62
  this.openPanel = this.openPanel.bind(this);
56
63
 
@@ -207,6 +214,10 @@ class HiDateRangePicker extends React.Component {
207
214
  }
208
215
  }
209
216
 
217
+ handleDayPickerBlur() {
218
+ this.setState({ focusedInput: '' });
219
+ }
220
+
210
221
  openPanel(name, panel) {
211
222
  this.setState({
212
223
  [`${name}OpenedPanel`]: panel
@@ -239,9 +250,10 @@ class HiDateRangePicker extends React.Component {
239
250
  return this.renderNavbar('to', propsNavbar);
240
251
  }
241
252
 
242
- renderOverlay(name, propsOverlay) {
253
+ renderOverlay(name, propsOverlay, staticPosition) {
243
254
  const rangeOverlayProps = _extends({}, propsOverlay, {
244
- side: name
255
+ side: name,
256
+ staticPosition
245
257
  });
246
258
 
247
259
  switch (this.state[`${name}OpenedPanel`]) {
@@ -257,10 +269,10 @@ class HiDateRangePicker extends React.Component {
257
269
  }
258
270
  }
259
271
  renderOverlayFrom(propsOverlay) {
260
- return this.renderOverlay('from', propsOverlay);
272
+ return this.renderOverlay('from', propsOverlay, this.props.staticPosition);
261
273
  }
262
274
  renderOverlayTo(propsOverlay) {
263
- return this.renderOverlay('to', propsOverlay);
275
+ return this.renderOverlay('to', propsOverlay, this.props.staticPosition);
264
276
  }
265
277
 
266
278
  renderMonthPickerOverlay(name, propsOverlay) {
@@ -315,9 +327,10 @@ class HiDateRangePicker extends React.Component {
315
327
  onReset,
316
328
  to,
317
329
  translations,
318
- id
330
+ id,
331
+ staticPosition
319
332
  } = _props,
320
- props = _objectWithoutProperties(_props, ['classes', 'disabledDays', 'disablePastDays', 'disableFutureDays', 'enableTime', 'labelFrom', 'labelTo', 'locale', 'format', 'from', 'minimumDate', 'onReset', 'to', 'translations', 'id']);
333
+ props = _objectWithoutProperties(_props, ['classes', 'disabledDays', 'disablePastDays', 'disableFutureDays', 'enableTime', 'labelFrom', 'labelTo', 'locale', 'format', 'from', 'minimumDate', 'onReset', 'to', 'translations', 'id', 'staticPosition']);
321
334
 
322
335
  const { fromCurrentMonth, toCurrentMonth } = this.state;
323
336
 
@@ -429,32 +442,52 @@ class HiDateRangePicker extends React.Component {
429
442
  id: `${id}-to`
430
443
  });
431
444
 
445
+ let fromClass = classNames({
446
+ [classes.absolute]: staticPosition === true && this.state.focusedInput === 'to',
447
+ [classes.dayPickerMargin]: staticPosition === true && this.state.focusedInput === 'to'
448
+ });
449
+ let toClass = classNames(classes.toInput, {
450
+ [classes.absolute]: staticPosition === true && this.state.focusedInput === 'from'
451
+ });
452
+
432
453
  return React.createElement(
433
454
  'div',
434
455
  { className: classes.root },
435
456
  React.createElement(
436
457
  'div',
437
- { className: classes.fromInput },
438
- React.createElement(DayPickerInput, {
439
- ref: el => {
440
- this.fromInput = el;
441
- },
442
- value: from,
443
- hideOnDayClick: false,
444
- overlayComponent: this.renderOverlayFrom,
445
- dayPickerProps: fromDayPickerProps,
446
- component: HiTextField,
447
- inputProps: fromInputProps,
448
- format: enableTime ? `${format} HH:mm` : format,
449
- formatDate: formatDate,
450
- parseDate: parseDate,
451
- onDayChange: this.handleDayChangeFrom,
452
- placeholder: ''
453
- })
458
+ {
459
+ className: classes.fromInput,
460
+ onFocus: this.handleDayPickerFocus('from'),
461
+ onBlur: this.handleDayPickerBlur
462
+ },
463
+ React.createElement(
464
+ 'div',
465
+ { className: fromClass },
466
+ React.createElement(DayPickerInput, {
467
+ ref: el => {
468
+ this.fromInput = el;
469
+ },
470
+ value: from,
471
+ hideOnDayClick: false,
472
+ overlayComponent: this.renderOverlayFrom,
473
+ dayPickerProps: fromDayPickerProps,
474
+ component: HiTextField,
475
+ inputProps: fromInputProps,
476
+ format: enableTime ? `${format} HH:mm` : format,
477
+ formatDate: formatDate,
478
+ parseDate: parseDate,
479
+ onDayChange: this.handleDayChangeFrom,
480
+ placeholder: ''
481
+ })
482
+ )
454
483
  ),
455
484
  React.createElement(
456
485
  'div',
457
- { className: classes.toInput },
486
+ {
487
+ className: toClass,
488
+ onFocus: this.handleDayPickerFocus('to'),
489
+ onBlur: this.handleDayPickerBlur
490
+ },
458
491
  React.createElement(DayPickerInput, {
459
492
  ref: el => {
460
493
  this.toInput = el;
@@ -480,6 +513,7 @@ HiDateRangePicker.defaultProps = {
480
513
  disabledDays: [],
481
514
  disablePastDays: false,
482
515
  disableFutureDays: false,
516
+ staticPosition: false,
483
517
  enableTime: false,
484
518
  format: 'YYYY-DD-MM',
485
519
  labelFrom: 'Start',
@@ -555,6 +589,10 @@ HiDateRangePicker.propTypes = process.env.NODE_ENV !== "production" ? {
555
589
  * Callback au reset de l'input
556
590
  */
557
591
  onReset: PropTypes.func,
592
+ /**
593
+ * Si true, le calendrier sera dans une div static plutot que dans une popper absolute
594
+ */
595
+ staticPosition: PropTypes.bool,
558
596
  /**
559
597
  * Date de fin sélectionnée
560
598
  */
@@ -127,11 +127,11 @@ class HiDateRangeSelector extends React.Component {
127
127
  if (selectedOption) {
128
128
  this.props.onChange('from', selectedOption.from.toDate());
129
129
  this.props.onChange('to', selectedOption.to.toDate());
130
- if (this.props.returnSelectValue === true) {
131
- this.props.onChange('period', value);
132
- }
133
130
  }
134
131
  }
132
+ if (this.props.returnSelectValue === true) {
133
+ this.props.onChange('period', value);
134
+ }
135
135
  };
136
136
 
137
137
  this.state = {
@@ -177,9 +177,10 @@ class HiDateRangeSelector extends React.Component {
177
177
  to,
178
178
  translations,
179
179
  classes,
180
- selectProps
180
+ selectProps,
181
+ staticPosition
181
182
  } = _props,
182
- props = _objectWithoutProperties(_props, ['disabled', 'enableTime', 'error', 'errorText', 'helperIcon', 'helperText', 'idRange', 'idSelect', 'label', 'from', 'onChange', 'required', 'to', 'translations', 'classes', 'selectProps']);
183
+ props = _objectWithoutProperties(_props, ['disabled', 'enableTime', 'error', 'errorText', 'helperIcon', 'helperText', 'idRange', 'idSelect', 'label', 'from', 'onChange', 'required', 'to', 'translations', 'classes', 'selectProps', 'staticPosition']);
183
184
 
184
185
  const { selectedPreset } = this.state;
185
186
 
@@ -209,7 +210,8 @@ class HiDateRangeSelector extends React.Component {
209
210
  translations: translations,
210
211
  value: selectedPreset,
211
212
  containerWidth: this.state.containerWidth,
212
- classes: { root: classes.dateSelect }
213
+ classes: { root: classes.dateSelect },
214
+ staticPosition: staticPosition
213
215
  }, selectProps))
214
216
  ),
215
217
  React.createElement(
@@ -224,7 +226,8 @@ class HiDateRangeSelector extends React.Component {
224
226
  onChange: onChange,
225
227
  onReset: this.handleReset,
226
228
  disabled: disabled || selectedPreset !== 'custom',
227
- translations: translations
229
+ translations: translations,
230
+ staticPosition: staticPosition
228
231
  }, props))
229
232
  )
230
233
  );
@@ -236,6 +239,7 @@ HiDateRangeSelector.defaultProps = {
236
239
  defaultPreset: 'cd',
237
240
  enableTime: false,
238
241
  returnSelectValue: false,
242
+ staticPosition: false,
239
243
  locale: 'fr-FR',
240
244
  format: 'YYYY-DD-MM',
241
245
  translations: {
@@ -337,6 +341,10 @@ HiDateRangeSelector.propTypes = process.env.NODE_ENV !== "production" ? {
337
341
  * Props passées au HiSelectField
338
342
  */
339
343
  selectProps: PropTypes.object,
344
+ /**
345
+ * Si true, le calendrier sera dans une div static plutot que dans une popper absolute
346
+ */
347
+ staticPosition: PropTypes.bool,
340
348
  /**
341
349
  * Date de fin sélectionnée
342
350
  */
@@ -70,9 +70,11 @@ const CustomOverlayLayout = (_ref) => {
70
70
  [classes.right]: side === 'to'
71
71
  });
72
72
 
73
+ let paperProps = _extends({}, props);
74
+
73
75
  return React.createElement(
74
76
  Paper,
75
- { className: paperClass },
77
+ { className: paperClass, onBlur: paperProps.onBlur, onFocus: paperProps.onFocus },
76
78
  React.createElement(
77
79
  'div',
78
80
  { className: classes.overlay },
@@ -1,3 +1,5 @@
1
+ import _extends from 'babel-runtime/helpers/extends';
2
+ import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
1
3
  // weak
2
4
 
3
5
  import React from 'react';
@@ -9,10 +11,15 @@ import withStyles from '../../styles/withStyles';
9
11
 
10
12
  export const styles = () => ({
11
13
  paper: {
12
- position: 'absolute',
13
14
  width: '100%',
14
15
  zIndex: 10
15
16
  },
17
+ absolute: {
18
+ position: 'absolute'
19
+ },
20
+ relative: {
21
+ position: 'relative'
22
+ },
16
23
  left: {
17
24
  width: '200%',
18
25
  left: 0
@@ -26,15 +33,22 @@ export const styles = () => ({
26
33
  }
27
34
  });
28
35
 
29
- const Overlay = ({ classes, children, side }) => {
36
+ const Overlay = (_ref) => {
37
+ let { classes, children, side, staticPosition } = _ref,
38
+ props = _objectWithoutProperties(_ref, ['classes', 'children', 'side', 'staticPosition']);
39
+
30
40
  const paperClass = classNames(classes.paper, {
31
41
  [classes.left]: side === 'from',
32
- [classes.right]: side === 'to'
42
+ [classes.right]: side === 'to',
43
+ [classes.absolute]: staticPosition !== true,
44
+ [classes.relative]: staticPosition === true
33
45
  });
34
46
 
47
+ let paperProps = _extends({}, props);
48
+
35
49
  return React.createElement(
36
50
  Paper,
37
- { className: paperClass },
51
+ { onBlur: paperProps.onBlur, onFocus: paperProps.onFocus, className: paperClass },
38
52
  React.createElement(
39
53
  'div',
40
54
  { className: classes.overlay },
@@ -19,6 +19,13 @@ export default (theme => ({
19
19
  width: 'calc(50% - 4px)',
20
20
  marginLeft: 4
21
21
  },
22
+ absolute: {
23
+ position: 'absolute'
24
+ },
25
+ dayPickerMargin: {
26
+ top: -337,
27
+ width: 'calc(100% - 4px)'
28
+ },
22
29
  // The container element
23
30
  container: {
24
31
  width: '100%',
@@ -170,19 +170,28 @@ class HiInput extends React.PureComponent {
170
170
  }
171
171
 
172
172
  handleFocus(event) {
173
- if (!this.state.focused) {
174
- this.setState({ focused: true });
175
- }
176
- if (this.props.onFocus) {
177
- this.props.onFocus(event);
173
+ if (this.endAdornmentNode && this.endAdornmentNode.contains(event.target)) {
174
+ event.stopPropagation();
175
+ } else {
176
+ if (!this.state.focused) {
177
+ this.setState({ focused: true });
178
+ }
179
+ if (this.props.onFocus) {
180
+ this.props.onFocus(event);
181
+ }
182
+ this.inputElement.focus();
178
183
  }
179
184
  }
180
185
 
181
- handleDivClick() {
182
- if (!this.state.focused) {
183
- this.setState({ focused: true });
186
+ handleDivClick(event) {
187
+ if (this.endAdornmentNode && this.endAdornmentNode.contains(event.target)) {
188
+ event.stopPropagation();
189
+ } else {
190
+ if (!this.state.focused) {
191
+ this.setState({ focused: true });
192
+ }
193
+ this.inputElement.focus();
184
194
  }
185
- this.inputElement.focus();
186
195
  }
187
196
 
188
197
  handleMouseEnter() {
@@ -305,7 +314,7 @@ class HiInput extends React.PureComponent {
305
314
  startAdornment: leftIcon,
306
315
  endAdornment: React.createElement(
307
316
  'div',
308
- { className: classes.endAdornment },
317
+ { className: classes.endAdornment, ref: el => this.endAdornmentNode = el },
309
318
  eraseIcon,
310
319
  endAdornment
311
320
  ),
@@ -0,0 +1,309 @@
1
+ import _extends from 'babel-runtime/helpers/extends';
2
+ import React from 'react';
3
+ import PropTypes from 'prop-types';
4
+ import classNames from 'classnames';
5
+ import withStyles from '../styles/withStyles';
6
+ import HiIconBuilder from '../utils/HiIconBuilder';
7
+ import HiFormControl from '../HiForm/HiFormControl';
8
+
9
+ export const styles = theme => ({
10
+ barContainer: {
11
+ width: '100%',
12
+ position: 'relative',
13
+ margin: '0 7px'
14
+ },
15
+ barHidden: {
16
+ width: '100%',
17
+ opacity: 0,
18
+ position: 'absolute',
19
+ top: '7px',
20
+ zIndex: '2'
21
+ },
22
+ mainContainer: _extends({}, theme.typography.body1, {
23
+ display: 'flex',
24
+ flexWrap: 'nowrap',
25
+ alignItems: 'center'
26
+ }),
27
+ topContainer: {
28
+ display: 'flex',
29
+ flexWrap: 'nowrap',
30
+ height: '18px'
31
+ },
32
+ bottomContainer: {
33
+ display: 'flex',
34
+ flexWrap: 'nowrap',
35
+ height: '18px'
36
+ },
37
+ barValue: {
38
+ display: 'flex',
39
+ width: '100%',
40
+ height: '4px',
41
+ borderRadius: '2px',
42
+ backgroundColor: theme.palette.business.primary.normal,
43
+ position: 'absolute',
44
+ zIndex: '2'
45
+ },
46
+ arrow: {
47
+ position: 'absolute',
48
+ zIndex: '1',
49
+ color: theme.palette.business.primary.normal,
50
+ transform: 'translate(-50%,-25%)',
51
+ transition: 'transform 300ms cubic-bezier(0.4, 0, 0.2, 1)',
52
+ transitionProperty: 'transform color'
53
+ },
54
+ focused: {
55
+ transform: 'scale(1.7) translate(-29%, -11%)',
56
+ color: theme.palette.business.primary.dark
57
+ },
58
+ leftLabel: {
59
+ color: theme.palette.business.primary.normal,
60
+ left: '0px',
61
+ position: 'absolute',
62
+ fontSize: '11px',
63
+ alignSelf: 'flex-end'
64
+ },
65
+ rightLabel: {
66
+ color: '#737373',
67
+ right: '0px',
68
+ position: 'absolute',
69
+ fontSize: '11px',
70
+ alignSelf: 'flex-end'
71
+ },
72
+ textValue: {
73
+ position: 'absolute',
74
+ zIndex: '2'
75
+ }
76
+ });
77
+
78
+ /**
79
+ * HiSlider component
80
+ */
81
+ class HiSlider extends React.Component {
82
+
83
+ constructor(props) {
84
+ super(props);
85
+ this.leftLabelWidth = 0;
86
+ this.rightLabelWidth = 0;
87
+ this.textValueWidth = 0;
88
+ this.barContainerWidth = 0;
89
+
90
+ this.handleFocus = isFocused => () => {
91
+ this.setState({ focused: isFocused });
92
+ };
93
+
94
+ this.state = {
95
+ focused: false
96
+ };
97
+
98
+ this.leftLabel;
99
+ this.rightLabel;
100
+ this.textValue;
101
+ this.barContainer;
102
+
103
+ this.handleChange = this.handleChange.bind(this);
104
+ this.handleFocus = this.handleFocus.bind(this);
105
+ }
106
+
107
+ /**
108
+ * Measures several components once they are mounted.
109
+ * If the value and a label (left or right) are hovered,
110
+ * we hide this label.
111
+ */
112
+ componentDidMount() {
113
+ this.leftLabelWidth = this.leftLabel.offsetWidth;
114
+ this.rightLabelWidth = this.rightLabel.offsetWidth;
115
+ this.textValueWidth = this.textValue.offsetWidth;
116
+ this.barContainerWidth = this.barContainer.offsetWidth;
117
+ let { hoveringLeft, hoveringRight } = this.getHovering();
118
+ if (hoveringLeft || hoveringRight) {
119
+ this.forceUpdate();
120
+ }
121
+ }
122
+
123
+ handleChange(event) {
124
+ this.props.onChange(parseFloat(event.target.value));
125
+ this.textValueWidth = this.textValue.offsetWidth;
126
+ }
127
+
128
+ /**
129
+ * Calculates if the labels are hovered.
130
+ */
131
+ getHovering() {
132
+ const ratio = (this.props.value - this.props.min) / (this.props.max - this.props.min);
133
+ const hoveringLeft = this.leftLabelWidth - (ratio * this.barContainerWidth - ratio * this.textValueWidth) > 0;
134
+ const hoveringRight = this.barContainerWidth - ratio * this.barContainerWidth - this.rightLabelWidth - (1 - ratio) * this.textValueWidth < 0;
135
+ return { hoveringLeft, hoveringRight };
136
+ }
137
+
138
+ render() {
139
+ const {
140
+ classes,
141
+ className,
142
+ min,
143
+ max,
144
+ leftLabel,
145
+ rightLabel,
146
+ step,
147
+ suffix,
148
+ id,
149
+ label,
150
+ theme,
151
+ value
152
+ } = this.props;
153
+ const { focused } = this.state;
154
+ const ratio = (value - min) / (max - min);
155
+ const percentage = ratio * 100;
156
+ const { hoveringLeft, hoveringRight } = this.getHovering();
157
+ const barColor = focused ? theme.palette.business.primary.dark : theme.palette.business.primary.normal;
158
+ return (
159
+ // HiFormControl pour l'affichage du label
160
+ React.createElement(
161
+ HiFormControl,
162
+ {
163
+ id: id,
164
+ label: label,
165
+ className: className,
166
+ onFocus: this.handleFocus(true),
167
+ onBlur: this.handleFocus(false)
168
+ },
169
+ React.createElement(
170
+ 'div',
171
+ { className: classes.mainContainer },
172
+ React.createElement(
173
+ 'div',
174
+ null,
175
+ min,
176
+ suffix
177
+ ),
178
+ React.createElement(
179
+ 'div',
180
+ { className: classes.barContainer, ref: div => this.barContainer = div },
181
+ React.createElement(
182
+ 'div',
183
+ { className: classes.topContainer },
184
+ !hoveringLeft && React.createElement(
185
+ 'div',
186
+ {
187
+ className: classes.leftLabel,
188
+ ref: div => this.leftLabel = div
189
+ },
190
+ leftLabel
191
+ ),
192
+ React.createElement(
193
+ 'div',
194
+ {
195
+ className: classes.textValue,
196
+ style: {
197
+ left: `${percentage}%`,
198
+ transform: `translate(-${percentage}%)`
199
+ },
200
+ ref: div => this.textValue = div
201
+ },
202
+ value,
203
+ suffix
204
+ ),
205
+ !hoveringRight && React.createElement(
206
+ 'div',
207
+ {
208
+ className: classes.rightLabel,
209
+ ref: div => this.rightLabel = div
210
+ },
211
+ rightLabel
212
+ )
213
+ ),
214
+ React.createElement('div', {
215
+ className: classes.barValue,
216
+ style: {
217
+ background: `linear-gradient(to right, ${barColor}, ${barColor} ${percentage}%, #E0E0E0 ${percentage}%, #E0E0E0)`
218
+ }
219
+ }),
220
+ React.createElement('input', {
221
+ type: 'range',
222
+ min: min,
223
+ max: max,
224
+ value: value,
225
+ onChange: this.handleChange,
226
+ className: classes.barHidden,
227
+ step: step
228
+ }),
229
+ React.createElement(
230
+ 'div',
231
+ { className: classes.bottomContainer },
232
+ React.createElement(HiIconBuilder, {
233
+ className: classNames(classes.arrow, {
234
+ [classes.focused]: focused
235
+ }),
236
+ icon: 'menu_up',
237
+ size: 24,
238
+ style: { left: `${percentage}%` }
239
+ })
240
+ )
241
+ ),
242
+ React.createElement(
243
+ 'div',
244
+ null,
245
+ max,
246
+ suffix
247
+ )
248
+ )
249
+ )
250
+ );
251
+ }
252
+ }
253
+
254
+ HiSlider.propTypes = process.env.NODE_ENV !== "production" ? {
255
+ /**
256
+ * Useful to extend the style applied to components.
257
+ */
258
+ classes: PropTypes.object,
259
+ /**
260
+ * Classes CSS appliquées.
261
+ */
262
+ className: PropTypes.string,
263
+ /**
264
+ * Id de l'élément input
265
+ */
266
+ id: PropTypes.string.isRequired,
267
+ /**
268
+ * Label du champ
269
+ */
270
+ label: PropTypes.string,
271
+ /**
272
+ * The label to show on the left.
273
+ */
274
+ leftLabel: PropTypes.string,
275
+ /**
276
+ * The Maximum value for the slider.
277
+ */
278
+ max: PropTypes.number.isRequired,
279
+ /**
280
+ * The Minimum value for the slider.
281
+ */
282
+ min: PropTypes.number.isRequired,
283
+ /**
284
+ * Fonction de callback appelée lorsqu'on change la valeur du slider.
285
+ */
286
+ onChange: PropTypes.func,
287
+ /**
288
+ * The label to show on the right
289
+ */
290
+ rightLabel: PropTypes.string,
291
+ /**
292
+ * The step between two selectable values.
293
+ */
294
+ step: PropTypes.number,
295
+ /**
296
+ * The suffix to show after each number.
297
+ */
298
+ suffix: PropTypes.string,
299
+ /**
300
+ * @ignore
301
+ */
302
+ theme: PropTypes.object,
303
+ /**
304
+ * The
305
+ * value of the input.
306
+ */
307
+ value: PropTypes.number
308
+ } : {};
309
+ export default withStyles(styles, { name: 'HmuiHiSlider', withTheme: true })(HiSlider);
@@ -5,4 +5,5 @@ export { default as HiInput } from './HiInput';
5
5
  export { default as HiPasswordField } from './HiPasswordField';
6
6
  export { default as HiTextField } from './HiTextField';
7
7
  export { default as HiSearchField } from './HiSearchField';
8
+ export { default as HiSlider } from './HiSlider';
8
9
  export { default as HiAddressField } from './HiAddressField';
@@ -390,7 +390,7 @@ HiSelect.defaultProps = {
390
390
  };
391
391
 
392
392
  var _initialiseProps = function () {
393
- this.handleClick = event => {
393
+ this.handleClick = () => {
394
394
  if (this.state.open) {
395
395
  this.handleClose();
396
396
  } else {