@coorpacademy/components 10.5.7-alpha.5 → 10.5.7-alpha.9

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.
Files changed (91) hide show
  1. package/es/atom/range/handle.css +18 -2
  2. package/es/atom/range/handle.js +7 -3
  3. package/es/atom/range/handle.js.map +1 -1
  4. package/es/atom/range/style.css +2 -2
  5. package/es/atom/select/index.js +38 -20
  6. package/es/atom/select/index.js.map +1 -1
  7. package/es/atom/select/style.css +154 -42
  8. package/es/atom/select/test/fixtures/player.js +11 -0
  9. package/es/atom/select/test/fixtures/player.js.map +1 -0
  10. package/es/atom/select/test/select.js +49 -0
  11. package/es/atom/select/test/select.js.map +1 -0
  12. package/es/molecule/cockpit-popin/test/fixtures.js +17 -0
  13. package/es/molecule/cockpit-popin/test/fixtures.js.map +1 -0
  14. package/es/molecule/questions/drop-down/index.js +1 -6
  15. package/es/molecule/questions/drop-down/index.js.map +1 -1
  16. package/es/molecule/questions/free-text/index.js +35 -15
  17. package/es/molecule/questions/free-text/index.js.map +1 -1
  18. package/es/molecule/questions/free-text/style.css +39 -15
  19. package/es/molecule/questions/free-text/test/fixtures/default.js +1 -1
  20. package/es/molecule/questions/free-text/test/fixtures/default.js.map +1 -1
  21. package/es/molecule/questions/free-text/test/fixtures/with-value-on-change.js +9 -0
  22. package/es/molecule/questions/free-text/test/fixtures/with-value-on-change.js.map +1 -0
  23. package/es/molecule/questions/free-text/test/fixtures/{with-default-value.js → with-value.js} +2 -2
  24. package/es/molecule/questions/free-text/test/fixtures/with-value.js.map +1 -0
  25. package/es/molecule/questions/free-text/test/free-text.js +106 -0
  26. package/es/molecule/questions/free-text/test/free-text.js.map +1 -0
  27. package/es/molecule/questions/qcm/style.css +4 -0
  28. package/es/molecule/questions/qcm-drag/index.js +53 -21
  29. package/es/molecule/questions/qcm-drag/index.js.map +1 -1
  30. package/es/molecule/questions/qcm-drag/style.css +72 -22
  31. package/es/molecule/questions/qcm-graphic/index.js +1 -0
  32. package/es/molecule/questions/qcm-graphic/index.js.map +1 -1
  33. package/es/molecule/questions/qcm-graphic/style.css +12 -2
  34. package/es/molecule/questions/qcm-graphic/test/fixtures/default.js +1 -1
  35. package/es/molecule/questions/qcm-graphic/test/fixtures/default.js.map +1 -1
  36. package/es/molecule/questions/qcm-graphic/test/fixtures/no-selected.js +1 -1
  37. package/es/molecule/questions/qcm-graphic/test/fixtures/no-selected.js.map +1 -1
  38. package/es/molecule/questions/qcm-graphic/test/qcm-graphic.js +1 -1
  39. package/es/molecule/questions/qcm-graphic/test/qcm-graphic.js.map +1 -1
  40. package/es/molecule/questions/question-range/style.css +9 -8
  41. package/es/molecule/questions/template/index.js +13 -10
  42. package/es/molecule/questions/template/index.js.map +1 -1
  43. package/es/molecule/search/test/fixtures.js +15 -0
  44. package/es/molecule/search/test/fixtures.js.map +1 -0
  45. package/lib/atom/range/handle.css +18 -2
  46. package/lib/atom/range/handle.js +8 -3
  47. package/lib/atom/range/handle.js.map +1 -1
  48. package/lib/atom/range/style.css +2 -2
  49. package/lib/atom/select/index.js +40 -17
  50. package/lib/atom/select/index.js.map +1 -1
  51. package/lib/atom/select/style.css +154 -42
  52. package/lib/atom/select/test/fixtures/player.js +21 -0
  53. package/lib/atom/select/test/fixtures/player.js.map +1 -0
  54. package/lib/atom/select/test/select.js +62 -0
  55. package/lib/atom/select/test/select.js.map +1 -0
  56. package/lib/molecule/cockpit-popin/test/fixtures.js +28 -0
  57. package/lib/molecule/cockpit-popin/test/fixtures.js.map +1 -0
  58. package/lib/molecule/questions/drop-down/index.js +1 -5
  59. package/lib/molecule/questions/drop-down/index.js.map +1 -1
  60. package/lib/molecule/questions/free-text/index.js +32 -14
  61. package/lib/molecule/questions/free-text/index.js.map +1 -1
  62. package/lib/molecule/questions/free-text/style.css +39 -15
  63. package/lib/molecule/questions/free-text/test/fixtures/default.js +1 -1
  64. package/lib/molecule/questions/free-text/test/fixtures/default.js.map +1 -1
  65. package/lib/molecule/questions/free-text/test/fixtures/with-value-on-change.js +14 -0
  66. package/lib/molecule/questions/free-text/test/fixtures/with-value-on-change.js.map +1 -0
  67. package/lib/molecule/questions/free-text/test/fixtures/{with-default-value.js → with-value.js} +2 -2
  68. package/lib/molecule/questions/free-text/test/fixtures/with-value.js.map +1 -0
  69. package/lib/molecule/questions/free-text/test/free-text.js +119 -0
  70. package/lib/molecule/questions/free-text/test/free-text.js.map +1 -0
  71. package/lib/molecule/questions/qcm/style.css +4 -0
  72. package/lib/molecule/questions/qcm-drag/index.js +53 -21
  73. package/lib/molecule/questions/qcm-drag/index.js.map +1 -1
  74. package/lib/molecule/questions/qcm-drag/style.css +72 -22
  75. package/lib/molecule/questions/qcm-graphic/index.js +1 -0
  76. package/lib/molecule/questions/qcm-graphic/index.js.map +1 -1
  77. package/lib/molecule/questions/qcm-graphic/style.css +12 -2
  78. package/lib/molecule/questions/qcm-graphic/test/fixtures/default.js +1 -1
  79. package/lib/molecule/questions/qcm-graphic/test/fixtures/default.js.map +1 -1
  80. package/lib/molecule/questions/qcm-graphic/test/fixtures/no-selected.js +1 -1
  81. package/lib/molecule/questions/qcm-graphic/test/fixtures/no-selected.js.map +1 -1
  82. package/lib/molecule/questions/qcm-graphic/test/qcm-graphic.js +1 -1
  83. package/lib/molecule/questions/qcm-graphic/test/qcm-graphic.js.map +1 -1
  84. package/lib/molecule/questions/question-range/style.css +9 -8
  85. package/lib/molecule/questions/template/index.js +13 -10
  86. package/lib/molecule/questions/template/index.js.map +1 -1
  87. package/lib/molecule/search/test/fixtures.js +25 -0
  88. package/lib/molecule/search/test/fixtures.js.map +1 -0
  89. package/package.json +2 -2
  90. package/es/molecule/questions/free-text/test/fixtures/with-default-value.js.map +0 -1
  91. package/lib/molecule/questions/free-text/test/fixtures/with-default-value.js.map +0 -1
@@ -1,10 +1,26 @@
1
1
  @value colors: "../../variables/colors.css";
2
- @value brand from colors;
2
+ @value white from colors;
3
+ @value cm_grey_200 from colors;
4
+ @value cm_grey_500 from colors;
5
+
6
+ .wrapper {
7
+ height: 100%;
8
+ width: 100%;
9
+ border-radius: 100%;
10
+ box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.25);
11
+ overflow: hidden;
12
+ }
13
+
14
+ .wrapper:hover {
15
+ box-shadow: none;
16
+ overflow: visible;
17
+ }
3
18
 
4
19
  .default {
5
20
  border-radius: 100%;
6
- border: 1px solid brand;
21
+ border: 4px solid white;
7
22
  box-sizing: border-box;
8
23
  height: 100%;
9
24
  width: 100%;
25
+ border-radius: 100%;
10
26
  }
@@ -6,6 +6,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
6
6
  import React from 'react';
7
7
  import PropTypes from 'prop-types';
8
8
  import Provider from '../provider';
9
+ import { getShadowBoxColorFromPrimary } from '../../util/get-shadow-box-color-from-primary';
9
10
  import style from './handle.css';
10
11
  const Hammer = // eslint-disable-next-line no-undef
11
12
  typeof window !== 'undefined' ? require('hammerjs') :
@@ -53,15 +54,18 @@ class Handle extends React.Component {
53
54
 
54
55
  const primaryColor = _getOr('#00B0FF', 'common.primary', skin);
55
56
 
56
- const borderColor = primaryColor;
57
+ const backgroundColor = primaryColor;
57
58
  return /*#__PURE__*/React.createElement("div", {
59
+ className: style.wrapper
60
+ }, /*#__PURE__*/React.createElement("div", {
58
61
  style: {
59
- borderColor
62
+ backgroundColor,
63
+ boxShadow: `0px 0px 20px ${getShadowBoxColorFromPrimary(primaryColor)}`
60
64
  },
61
65
  className: style.default,
62
66
  ref: this.setHandle,
63
67
  "data-name": 'handle'
64
- });
68
+ }));
65
69
  }
66
70
 
67
71
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/atom/range/handle.js"],"names":["React","PropTypes","Provider","style","Hammer","window","require","undefined","Handle","Component","constructor","props","context","setHandle","bind","componentDidMount","onPanStart","onPanEnd","onPan","hammer","handle","on","componentWillUnmount","stop","destroy","el","render","skin","primaryColor","borderColor","default","childContextTypes","propTypes","func"],"mappings":";;;;;AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,QAAP,MAAqB,aAArB;AACA,OAAOC,KAAP,MAAkB,cAAlB;AAEA,MAAMC,MAAM,GACV;AACA,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,OAAO,CAAC,UAAD,CAAvC;AAAsD;AAA2BC,SAFnF;;AAIA,MAAMC,MAAN,SAAqBR,KAAK,CAACS,SAA3B,CAAqC;AAWnCC,EAAAA,WAAW,CAACC,KAAD,EAAQC,OAAR,EAAiB;AAC1B,UAAMD,KAAN,EAAaC,OAAb;AAEA,SAAKC,SAAL,GAAiB,KAAKA,SAAL,CAAeC,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB;AACA,QAAIX,MAAJ,EAAY;AACV,YAAM;AAACY,QAAAA,UAAU,QAAX;AAAoBC,QAAAA,QAAQ,QAA5B;AAAqCC,QAAAA,KAAK;AAA1C,UAAqD,KAAKP,KAAhE;AAEA,WAAKQ,MAAL,GAAc,IAAIf,MAAJ,CAAW,KAAKgB,MAAhB,CAAd;AACA,WAAKD,MAAL,CAAYE,EAAZ,CAAe,UAAf,EAA2BL,UAA3B;AACA,WAAKG,MAAL,CAAYE,EAAZ,CAAe,QAAf,EAAyBJ,QAAzB;AAEA,WAAKE,MAAL,CAAYE,EAAZ,CAAe,kBAAf,EAAmCH,KAAnC;AACD;AACF;;AAEDI,EAAAA,oBAAoB,GAAG;AACrB,QAAI,KAAKH,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYI,IAAZ;AACA,WAAKJ,MAAL,CAAYK,OAAZ;AACD;;AACD,SAAKL,MAAL,GAAc,IAAd;AACD;;AAEDN,EAAAA,SAAS,CAACY,EAAD,EAAK;AACZ,SAAKL,MAAL,GAAcK,EAAd;AACD;;AAEDC,EAAAA,MAAM,GAAG;AACP,UAAM;AAACC,MAAAA;AAAD,QAAS,KAAKf,OAApB;;AACA,UAAMgB,YAAY,GAAG,OAAM,SAAN,EAAiB,gBAAjB,EAAmCD,IAAnC,CAArB;;AACA,UAAME,WAAW,GAAGD,YAApB;AAEA,wBACE;AACE,MAAA,KAAK,EAAE;AAACC,QAAAA;AAAD,OADT;AAEE,MAAA,SAAS,EAAE1B,KAAK,CAAC2B,OAFnB;AAGE,MAAA,GAAG,EAAE,KAAKjB,SAHZ;AAIE,mBAAW;AAJb,MADF;AAQD;;AAvDkC;;gBAA/BL,M,kBAOkB;AACpBmB,EAAAA,IAAI,EAAEzB,QAAQ,CAAC6B,iBAAT,CAA2BJ;AADb,C;;AAPlBnB,M,CACGwB,S,2CAAY;AACjBd,EAAAA,KAAK,EAAEjB,SAAS,CAACgC,IADA;AAEjBjB,EAAAA,UAAU,EAAEf,SAAS,CAACgC,IAFL;AAGjBhB,EAAAA,QAAQ,EAAEhB,SAAS,CAACgC;AAHH,C;AAyDrB,eAAezB,MAAf","sourcesContent":["import {noop, getOr} from 'lodash/fp';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Provider from '../provider';\nimport style from './handle.css';\n\nconst Hammer =\n // eslint-disable-next-line no-undef\n typeof window !== 'undefined' ? require('hammerjs') : /* istanbul ignore next */ undefined;\n\nclass Handle extends React.Component {\n static propTypes = {\n onPan: PropTypes.func,\n onPanStart: PropTypes.func,\n onPanEnd: PropTypes.func\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin\n };\n\n constructor(props, context) {\n super(props, context);\n\n this.setHandle = this.setHandle.bind(this);\n }\n\n componentDidMount() {\n /* istanbul ignore else */\n if (Hammer) {\n const {onPanStart = noop, onPanEnd = noop, onPan = noop} = this.props;\n\n this.hammer = new Hammer(this.handle);\n this.hammer.on('panstart', onPanStart);\n this.hammer.on('panend', onPanEnd);\n\n this.hammer.on('panleft panright', onPan);\n }\n }\n\n componentWillUnmount() {\n if (this.hammer) {\n this.hammer.stop();\n this.hammer.destroy();\n }\n this.hammer = null;\n }\n\n setHandle(el) {\n this.handle = el;\n }\n\n render() {\n const {skin} = this.context;\n const primaryColor = getOr('#00B0FF', 'common.primary', skin);\n const borderColor = primaryColor;\n\n return (\n <div\n style={{borderColor}}\n className={style.default}\n ref={this.setHandle}\n data-name={'handle'}\n />\n );\n }\n}\n\nexport default Handle;\n"],"file":"handle.js"}
1
+ {"version":3,"sources":["../../../src/atom/range/handle.js"],"names":["React","PropTypes","Provider","getShadowBoxColorFromPrimary","style","Hammer","window","require","undefined","Handle","Component","constructor","props","context","setHandle","bind","componentDidMount","onPanStart","onPanEnd","onPan","hammer","handle","on","componentWillUnmount","stop","destroy","el","render","skin","primaryColor","backgroundColor","wrapper","boxShadow","default","childContextTypes","propTypes","func"],"mappings":";;;;;AACA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,QAAP,MAAqB,aAArB;AACA,SAAQC,4BAAR,QAA2C,8CAA3C;AACA,OAAOC,KAAP,MAAkB,cAAlB;AAEA,MAAMC,MAAM,GACV;AACA,OAAOC,MAAP,KAAkB,WAAlB,GAAgCC,OAAO,CAAC,UAAD,CAAvC;AAAsD;AAA2BC,SAFnF;;AAIA,MAAMC,MAAN,SAAqBT,KAAK,CAACU,SAA3B,CAAqC;AAWnCC,EAAAA,WAAW,CAACC,KAAD,EAAQC,OAAR,EAAiB;AAC1B,UAAMD,KAAN,EAAaC,OAAb;AAEA,SAAKC,SAAL,GAAiB,KAAKA,SAAL,CAAeC,IAAf,CAAoB,IAApB,CAAjB;AACD;;AAEDC,EAAAA,iBAAiB,GAAG;AAClB;AACA,QAAIX,MAAJ,EAAY;AACV,YAAM;AAACY,QAAAA,UAAU,QAAX;AAAoBC,QAAAA,QAAQ,QAA5B;AAAqCC,QAAAA,KAAK;AAA1C,UAAqD,KAAKP,KAAhE;AAEA,WAAKQ,MAAL,GAAc,IAAIf,MAAJ,CAAW,KAAKgB,MAAhB,CAAd;AACA,WAAKD,MAAL,CAAYE,EAAZ,CAAe,UAAf,EAA2BL,UAA3B;AACA,WAAKG,MAAL,CAAYE,EAAZ,CAAe,QAAf,EAAyBJ,QAAzB;AAEA,WAAKE,MAAL,CAAYE,EAAZ,CAAe,kBAAf,EAAmCH,KAAnC;AACD;AACF;;AAEDI,EAAAA,oBAAoB,GAAG;AACrB,QAAI,KAAKH,MAAT,EAAiB;AACf,WAAKA,MAAL,CAAYI,IAAZ;AACA,WAAKJ,MAAL,CAAYK,OAAZ;AACD;;AACD,SAAKL,MAAL,GAAc,IAAd;AACD;;AAEDN,EAAAA,SAAS,CAACY,EAAD,EAAK;AACZ,SAAKL,MAAL,GAAcK,EAAd;AACD;;AAEDC,EAAAA,MAAM,GAAG;AACP,UAAM;AAACC,MAAAA;AAAD,QAAS,KAAKf,OAApB;;AACA,UAAMgB,YAAY,GAAG,OAAM,SAAN,EAAiB,gBAAjB,EAAmCD,IAAnC,CAArB;;AACA,UAAME,eAAe,GAAGD,YAAxB;AAEA,wBACE;AAAK,MAAA,SAAS,EAAEzB,KAAK,CAAC2B;AAAtB,oBACE;AACE,MAAA,KAAK,EAAE;AACLD,QAAAA,eADK;AAELE,QAAAA,SAAS,EAAG,gBAAe7B,4BAA4B,CAAC0B,YAAD,CAAe;AAFjE,OADT;AAKE,MAAA,SAAS,EAAEzB,KAAK,CAAC6B,OALnB;AAME,MAAA,GAAG,EAAE,KAAKnB,SANZ;AAOE,mBAAW;AAPb,MADF,CADF;AAaD;;AA5DkC;;gBAA/BL,M,kBAOkB;AACpBmB,EAAAA,IAAI,EAAE1B,QAAQ,CAACgC,iBAAT,CAA2BN;AADb,C;;AAPlBnB,M,CACG0B,S,2CAAY;AACjBhB,EAAAA,KAAK,EAAElB,SAAS,CAACmC,IADA;AAEjBnB,EAAAA,UAAU,EAAEhB,SAAS,CAACmC,IAFL;AAGjBlB,EAAAA,QAAQ,EAAEjB,SAAS,CAACmC;AAHH,C;AA8DrB,eAAe3B,MAAf","sourcesContent":["import {noop, getOr} from 'lodash/fp';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport Provider from '../provider';\nimport {getShadowBoxColorFromPrimary} from '../../util/get-shadow-box-color-from-primary';\nimport style from './handle.css';\n\nconst Hammer =\n // eslint-disable-next-line no-undef\n typeof window !== 'undefined' ? require('hammerjs') : /* istanbul ignore next */ undefined;\n\nclass Handle extends React.Component {\n static propTypes = {\n onPan: PropTypes.func,\n onPanStart: PropTypes.func,\n onPanEnd: PropTypes.func\n };\n\n static contextTypes = {\n skin: Provider.childContextTypes.skin\n };\n\n constructor(props, context) {\n super(props, context);\n\n this.setHandle = this.setHandle.bind(this);\n }\n\n componentDidMount() {\n /* istanbul ignore else */\n if (Hammer) {\n const {onPanStart = noop, onPanEnd = noop, onPan = noop} = this.props;\n\n this.hammer = new Hammer(this.handle);\n this.hammer.on('panstart', onPanStart);\n this.hammer.on('panend', onPanEnd);\n\n this.hammer.on('panleft panright', onPan);\n }\n }\n\n componentWillUnmount() {\n if (this.hammer) {\n this.hammer.stop();\n this.hammer.destroy();\n }\n this.hammer = null;\n }\n\n setHandle(el) {\n this.handle = el;\n }\n\n render() {\n const {skin} = this.context;\n const primaryColor = getOr('#00B0FF', 'common.primary', skin);\n const backgroundColor = primaryColor;\n\n return (\n <div className={style.wrapper}>\n <div\n style={{\n backgroundColor,\n boxShadow: `0px 0px 20px ${getShadowBoxColorFromPrimary(primaryColor)}`\n }}\n className={style.default}\n ref={this.setHandle}\n data-name={'handle'}\n />\n </div>\n );\n }\n}\n\nexport default Handle;\n"],"file":"handle.js"}
@@ -15,9 +15,9 @@
15
15
  }
16
16
 
17
17
  .track {
18
- height: 6px;
18
+ height: 10px;
19
19
  width: 100%;
20
- border-radius: 3px;
20
+ border-radius: 32px;
21
21
  background-color: light;
22
22
  transform: translate3d(0, -50%, 0);
23
23
  position: absolute;
@@ -1,8 +1,14 @@
1
+ import _size from "lodash/fp/size";
2
+ import _includes from "lodash/fp/includes";
1
3
  import _filter from "lodash/fp/filter";
4
+ import _getOr from "lodash/fp/getOr";
2
5
  import _get from "lodash/fp/get";
3
6
  import _map from "lodash/fp/map";
4
7
  import _keys from "lodash/fp/keys";
5
8
  import _find from "lodash/fp/find";
9
+
10
+ function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
11
+
6
12
  import React, { useMemo } from 'react';
7
13
  import PropTypes from 'prop-types';
8
14
  import classnames from 'classnames';
@@ -18,7 +24,9 @@ const themeStyle = {
18
24
  question: style.question,
19
25
  sort: style.sort,
20
26
  thematiques: style.thematiques,
21
- template: style.template
27
+ player: style.player,
28
+ template: style.template // we keep template in case it is used anywhere else?
29
+
22
30
  };
23
31
 
24
32
  const Select = (props, context) => {
@@ -40,52 +48,61 @@ const Select = (props, context) => {
40
48
  const {
41
49
  skin
42
50
  } = context;
43
- const title = propTitle ? `${propTitle}${required ? '*' : ''}` : null;
51
+ const title = useMemo(() => propTitle ? `${propTitle}${required ? '*' : ''}` : null, [propTitle, required]);
44
52
  const optionList = options && options.map((option, index) => {
45
53
  return /*#__PURE__*/React.createElement("option", {
46
54
  key: index,
47
- value: option.value
55
+ value: option.value,
56
+ className: style.selectOption
48
57
  }, option.name);
49
58
  });
50
59
  const titleView = title ? /*#__PURE__*/React.createElement("span", {
51
60
  className: style.title
52
61
  }, title, " ") : null;
53
- const selected = multiple ? _map(_get('value'), _filter({
62
+ const selected = useMemo(() => multiple ? _map(_get('value'), _filter({
54
63
  selected: true
55
64
  }, options)) : _get('value', _find({
56
65
  selected: true
57
- }, options));
58
- const selectedLabel = multiple ? _map(_get('name'), _filter({
66
+ }, options)), [multiple, options]);
67
+ const selectedLabel = useMemo(() => multiple ? _map(_get('name'), _filter({
59
68
  selected: true
60
69
  }, options)) : _get('name', _find({
61
70
  selected: true
62
- }, options));
71
+ }, options)), [multiple, options]);
72
+ const isSelectedInValidOption = useMemo(() => theme === 'player' && _getOr(false, 'name', _find({
73
+ validOption: false,
74
+ selected: true
75
+ }, options)), [options, theme]);
63
76
  const handleChange = useMemo(() => multiple ? e => {
64
77
  onChange(_map(_get('value'), e.target.selectedOptions));
65
78
  } : e => {
66
79
  onChange(e.target.value);
67
80
  }, [onChange, multiple]);
68
-
69
- const black = _get('common.black', skin);
70
-
71
- const color = _get('common.primary', skin);
72
-
73
- const skinColor = {
74
- color: selected && (theme === 'question' || theme === 'template') ? color : null
75
- };
81
+ const black = useMemo(() => _getOr('#14171A', 'common.black', skin), [skin]);
82
+ const color = useMemo(() => _getOr('#00B0FF', 'common.primary', skin), [skin]);
83
+ const shouldUseSkinFontColor = useMemo(() => !isSelectedInValidOption && selected && _includes(theme, ['question', 'template', 'player']), [isSelectedInValidOption, selected, theme]);
76
84
  const arrowView = !multiple ? /*#__PURE__*/React.createElement(ArrowDown, {
77
85
  color: selected && (theme === 'question' || theme === 'template') ? color : black,
78
86
  className: style.arrow
79
87
  }) : null;
80
- const behaviourClassName = getClassState(style.default, style.modified, style.error, modified, error);
81
- const composedClassName = classnames(theme ? themeStyle[theme] : behaviourClassName, selected ? style.selected : style.unselected, className);
88
+ const behaviourClassName = useMemo(() => getClassState(style.default, style.modified, style.error, modified, error), [error, modified]);
89
+ const composedClassName = useMemo(() => classnames(theme ? themeStyle[theme] : behaviourClassName, selected ? style.selected : style.unselected, className), [behaviourClassName, className, selected, theme]);
90
+ const labelSize = useMemo(() => _size(selectedLabel), [selectedLabel]);
91
+ const isLongLabel = useMemo(() => labelSize >= 65, [labelSize]);
82
92
  return /*#__PURE__*/React.createElement("div", {
83
93
  className: composedClassName
84
94
  }, /*#__PURE__*/React.createElement("label", {
85
- style: skinColor
95
+ "data-name": "select-wrapper",
96
+ style: _extends({}, shouldUseSkinFontColor && {
97
+ color
98
+ }),
99
+ className: style.selectWrapper
86
100
  }, titleView, /*#__PURE__*/React.createElement("span", {
87
- className: classnames(style.label, borderClassName)
101
+ "data-name": "select-span",
102
+ className: classnames(style.selectSpan, _includes(theme, ['player', 'invalid', 'question', 'thematiques', 'template']) ? style.noLabelCommon : null, borderClassName, isLongLabel ? style.longLabel : null)
88
103
  }, selectedLabel), arrowView, /*#__PURE__*/React.createElement("select", {
104
+ "data-name": "native-select",
105
+ className: style.selectBox,
89
106
  title: selectedLabel,
90
107
  name: name,
91
108
  onChange: handleChange,
@@ -100,7 +117,8 @@ const Select = (props, context) => {
100
117
  export const SelectOptionPropTypes = {
101
118
  name: PropTypes.string.isRequired,
102
119
  value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
103
- selected: PropTypes.bool
120
+ selected: PropTypes.bool,
121
+ validOption: PropTypes.bool
104
122
  };
105
123
  Select.contextTypes = {
106
124
  skin: Provider.childContextTypes.skin
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/atom/select/index.js"],"names":["React","useMemo","PropTypes","classnames","NovaCompositionNavigationArrowDown","ArrowDown","Provider","getClassState","style","themeStyle","filter","invalid","header","mooc","question","sort","thematiques","template","Select","props","context","name","options","className","borderClassName","onChange","multiple","disabled","required","description","theme","modified","error","title","propTitle","skin","optionList","map","option","index","value","titleView","selected","selectedLabel","handleChange","e","target","selectedOptions","black","color","skinColor","arrowView","arrow","behaviourClassName","default","composedClassName","unselected","label","SelectOptionPropTypes","string","isRequired","oneOfType","number","bool","contextTypes","childContextTypes","propTypes","func","oneOf","arrayOf","shape"],"mappings":"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","sourcesContent":["import React, {useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {find, keys, map, get, filter} from 'lodash/fp';\nimport {NovaCompositionNavigationArrowDown as ArrowDown} from '@coorpacademy/nova-icons';\nimport Provider from '../provider';\nimport getClassState from '../../util/get-class-state';\nimport style from './style.css';\n\nconst themeStyle = {\n filter: style.filter,\n invalid: style.invalid,\n header: style.header,\n mooc: style.mooc,\n question: style.question,\n sort: style.sort,\n thematiques: style.thematiques,\n template: style.template\n};\n\nconst Select = (props, context) => {\n const {\n name,\n options = [],\n className,\n borderClassName,\n onChange,\n multiple = false,\n disabled,\n required,\n description,\n theme,\n modified = false,\n error = false,\n title: propTitle\n } = props;\n\n const {skin} = context;\n\n const title = propTitle ? `${propTitle}${required ? '*' : ''}` : null;\n\n const optionList =\n options &&\n options.map((option, index) => {\n return (\n <option key={index} value={option.value}>\n {option.name}\n </option>\n );\n });\n\n const titleView = title ? <span className={style.title}>{title} </span> : null;\n\n const selected = multiple\n ? map(get('value'), filter({selected: true}, options))\n : get('value', find({selected: true}, options));\n const selectedLabel = multiple\n ? map(get('name'), filter({selected: true}, options))\n : get('name', find({selected: true}, options));\n\n const handleChange = useMemo(\n () =>\n multiple\n ? e => {\n onChange(map(get('value'), e.target.selectedOptions));\n }\n : e => {\n onChange(e.target.value);\n },\n [onChange, multiple]\n );\n\n const black = get('common.black', skin);\n const color = get('common.primary', skin);\n const skinColor = {\n color: selected && (theme === 'question' || theme === 'template') ? color : null\n };\n\n const arrowView = !multiple ? (\n <ArrowDown\n color={selected && (theme === 'question' || theme === 'template') ? color : black}\n className={style.arrow}\n />\n ) : null;\n const behaviourClassName = getClassState(\n style.default,\n style.modified,\n style.error,\n modified,\n error\n );\n const composedClassName = classnames(\n theme ? themeStyle[theme] : behaviourClassName,\n selected ? style.selected : style.unselected,\n className\n );\n\n return (\n <div className={composedClassName}>\n <label style={skinColor}>\n {titleView}\n <span className={classnames(style.label, borderClassName)}>{selectedLabel}</span>\n {arrowView}\n <select\n title={selectedLabel}\n name={name}\n onChange={handleChange}\n value={selected}\n multiple={multiple}\n disabled={disabled}\n >\n {optionList}\n </select>\n </label>\n <div className={style.description}>{description}</div>\n </div>\n );\n};\n\nexport const SelectOptionPropTypes = {\n name: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selected: PropTypes.bool\n};\n\nSelect.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nSelect.propTypes = {\n title: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n borderClassName: PropTypes.string,\n disabled: PropTypes.bool,\n multiple: PropTypes.bool,\n description: PropTypes.string,\n required: PropTypes.bool,\n onChange: PropTypes.func,\n theme: PropTypes.oneOf(keys(themeStyle)),\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes)),\n modified: PropTypes.bool,\n error: PropTypes.bool\n};\n\nexport default Select;\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../../src/atom/select/index.js"],"names":["React","useMemo","PropTypes","classnames","NovaCompositionNavigationArrowDown","ArrowDown","Provider","getClassState","style","themeStyle","filter","invalid","header","mooc","question","sort","thematiques","player","template","Select","props","context","name","options","className","borderClassName","onChange","multiple","disabled","required","description","theme","modified","error","title","propTitle","skin","optionList","map","option","index","value","selectOption","titleView","selected","selectedLabel","isSelectedInValidOption","validOption","handleChange","e","target","selectedOptions","black","color","shouldUseSkinFontColor","arrowView","arrow","behaviourClassName","default","composedClassName","unselected","labelSize","isLongLabel","selectWrapper","selectSpan","noLabelCommon","longLabel","selectBox","SelectOptionPropTypes","string","isRequired","oneOfType","number","bool","contextTypes","childContextTypes","propTypes","func","oneOf","arrayOf","shape"],"mappings":"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","sourcesContent":["import React, {useMemo} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport {find, keys, map, get, getOr, filter, includes, size} from 'lodash/fp';\nimport {NovaCompositionNavigationArrowDown as ArrowDown} from '@coorpacademy/nova-icons';\nimport Provider from '../provider';\nimport getClassState from '../../util/get-class-state';\nimport style from './style.css';\n\nconst themeStyle = {\n filter: style.filter,\n invalid: style.invalid,\n header: style.header,\n mooc: style.mooc,\n question: style.question,\n sort: style.sort,\n thematiques: style.thematiques,\n player: style.player,\n template: style.template // we keep template in case it is used anywhere else?\n};\n\nconst Select = (props, context) => {\n const {\n name,\n options = [],\n className,\n borderClassName,\n onChange,\n multiple = false,\n disabled,\n required,\n description,\n theme,\n modified = false,\n error = false,\n title: propTitle\n } = props;\n\n const {skin} = context;\n\n const title = useMemo(() => (propTitle ? `${propTitle}${required ? '*' : ''}` : null), [\n propTitle,\n required\n ]);\n\n const optionList =\n options &&\n options.map((option, index) => {\n return (\n <option key={index} value={option.value} className={style.selectOption}>\n {option.name}\n </option>\n );\n });\n\n const titleView = title ? <span className={style.title}>{title} </span> : null;\n\n const selected = useMemo(\n () =>\n multiple\n ? map(get('value'), filter({selected: true}, options))\n : get('value', find({selected: true}, options)),\n [multiple, options]\n );\n const selectedLabel = useMemo(\n () =>\n multiple\n ? map(get('name'), filter({selected: true}, options))\n : get('name', find({selected: true}, options)),\n [multiple, options]\n );\n\n const isSelectedInValidOption = useMemo(\n () =>\n theme === 'player' &&\n getOr(false, 'name', find({validOption: false, selected: true}, options)),\n [options, theme]\n );\n\n const handleChange = useMemo(\n () =>\n multiple\n ? e => {\n onChange(map(get('value'), e.target.selectedOptions));\n }\n : e => {\n onChange(e.target.value);\n },\n [onChange, multiple]\n );\n\n const black = useMemo(() => getOr('#14171A', 'common.black', skin), [skin]);\n const color = useMemo(() => getOr('#00B0FF', 'common.primary', skin), [skin]);\n const shouldUseSkinFontColor = useMemo(\n () =>\n !isSelectedInValidOption && selected && includes(theme, ['question', 'template', 'player']),\n [isSelectedInValidOption, selected, theme]\n );\n\n const arrowView = !multiple ? (\n <ArrowDown\n color={selected && (theme === 'question' || theme === 'template') ? color : black}\n className={style.arrow}\n />\n ) : null;\n const behaviourClassName = useMemo(\n () => getClassState(style.default, style.modified, style.error, modified, error),\n [error, modified]\n );\n const composedClassName = useMemo(\n () =>\n classnames(\n theme ? themeStyle[theme] : behaviourClassName,\n selected ? style.selected : style.unselected,\n className\n ),\n [behaviourClassName, className, selected, theme]\n );\n\n const labelSize = useMemo(() => size(selectedLabel), [selectedLabel]);\n\n const isLongLabel = useMemo(() => labelSize >= 65, [labelSize]);\n\n return (\n <div className={composedClassName}>\n <label\n data-name=\"select-wrapper\"\n style={{\n ...(shouldUseSkinFontColor && {\n color\n })\n }}\n className={style.selectWrapper}\n >\n {titleView}\n <span\n data-name=\"select-span\"\n className={classnames(\n style.selectSpan,\n includes(theme, ['player', 'invalid', 'question', 'thematiques', 'template'])\n ? style.noLabelCommon\n : null,\n borderClassName,\n isLongLabel ? style.longLabel : null\n )}\n >\n {selectedLabel}\n </span>\n {arrowView}\n <select\n data-name=\"native-select\"\n className={style.selectBox}\n title={selectedLabel}\n name={name}\n onChange={handleChange}\n value={selected}\n multiple={multiple}\n disabled={disabled}\n >\n {optionList}\n </select>\n </label>\n <div className={style.description}>{description}</div>\n </div>\n );\n};\n\nexport const SelectOptionPropTypes = {\n name: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n selected: PropTypes.bool,\n validOption: PropTypes.bool\n};\n\nSelect.contextTypes = {\n skin: Provider.childContextTypes.skin\n};\n\nSelect.propTypes = {\n title: PropTypes.string,\n name: PropTypes.string,\n className: PropTypes.string,\n borderClassName: PropTypes.string,\n disabled: PropTypes.bool,\n multiple: PropTypes.bool,\n description: PropTypes.string,\n required: PropTypes.bool,\n onChange: PropTypes.func,\n theme: PropTypes.oneOf(keys(themeStyle)),\n options: PropTypes.arrayOf(PropTypes.shape(SelectOptionPropTypes)),\n modified: PropTypes.bool,\n error: PropTypes.bool\n};\n\nexport default Select;\n"],"file":"index.js"}
@@ -10,6 +10,8 @@
10
10
  @value white from colors;
11
11
  @value xtraLightGrey from colors;
12
12
  @value transparent from colors;
13
+ @value box_shadow_light_dark from colors;
14
+ @value cm_blue_900 from colors;
13
15
 
14
16
  .default {
15
17
  display: flex;
@@ -23,7 +25,11 @@
23
25
  composes: default;
24
26
  }
25
27
 
26
- .default label {
28
+ .selectWrapper {
29
+ position: relative;
30
+ }
31
+
32
+ .default .selectWrapper {
27
33
  display: flex;
28
34
  align-items: center;
29
35
  height: 50px;
@@ -41,20 +47,16 @@
41
47
  width: 180px;
42
48
  }
43
49
 
44
- .label {
50
+ .selectSpan {
45
51
  display: none;
46
- position: absolute;
52
+ position: relative;
53
+ z-index: 10;
47
54
  white-space: nowrap;
48
- overflow: hidden;
49
- left: 0;
50
- right: 0;
51
- bottom: 0;
52
55
  pointer-events: none;
53
- text-overflow: ellipsis;
54
56
  height: 18px;
55
57
  }
56
58
 
57
- .default select {
59
+ .default .selectBox {
58
60
  font-family: "Gilroy";
59
61
  text-transform: none;
60
62
  padding: 0 15px;
@@ -68,6 +70,21 @@
68
70
  outline: none;
69
71
  appearance: none;
70
72
  cursor: pointer;
73
+ position: absolute;
74
+ left: 0;
75
+ right: 0;
76
+ bottom: 0;
77
+ }
78
+
79
+ .selectOption,
80
+ .no-label .selectWrapper{
81
+ min-width: min-content;
82
+ height: min-content;
83
+ }
84
+
85
+ .player .selectWrapper {
86
+ min-width: min-content;
87
+ height: min-content;
71
88
  }
72
89
 
73
90
  .modified select {
@@ -112,6 +129,7 @@
112
129
  pointer-events: none;
113
130
  width: 12px;
114
131
  height: 12px;
132
+ z-index: 11;
115
133
  }
116
134
 
117
135
  @media mobile {
@@ -121,7 +139,7 @@
121
139
  }
122
140
  }
123
141
 
124
- .default select[multiple] {
142
+ .default .selectBox[multiple] {
125
143
  padding: 0;
126
144
  height: 80px;
127
145
  }
@@ -130,7 +148,7 @@
130
148
  Filter
131
149
  */
132
150
 
133
- .filter label {
151
+ .filter .selectWrapper {
134
152
  display: flex;
135
153
  align-items: center;
136
154
  position: relative;
@@ -140,7 +158,7 @@
140
158
  margin: 0;
141
159
  }
142
160
 
143
- .filter .label {
161
+ .filter .selectSpan {
144
162
  display: block;
145
163
  padding: 15px 30px 15px 15px;
146
164
  font-size: 12px;
@@ -157,7 +175,9 @@
157
175
  margin-bottom: 10px;
158
176
  }
159
177
 
160
- .filter select {
178
+ .filter .selectBox {
179
+ position: absolute;
180
+ top: 27px;
161
181
  display: block;
162
182
  width: 100%;
163
183
  height: 50px;
@@ -186,57 +206,112 @@
186
206
  position: relative;
187
207
  }
188
208
 
189
- .no-label label {
209
+ .no-label .selectWrapper {
190
210
  display: flex;
191
211
  align-items: center;
192
- height: 44px;
212
+ min-height: 54px;
193
213
  position: relative;
194
214
  flex-grow: 0;
195
215
  }
196
216
 
197
- .no-label .label {
217
+ .noLabelCommon {
198
218
  display: block;
199
219
  padding: 0 30px 0 10px;
200
220
  font-size: 14px;
221
+ height: 54px;
222
+ line-height: 52px;
223
+ box-sizing: border-box;
224
+ }
225
+
226
+ div.default label.selectWrapper span.longLabel {
227
+ min-width: 230px;
228
+ max-width: 280px;
229
+ white-space: pre-wrap;
230
+ line-height: 22px;
231
+ padding-top: 15px;
232
+ padding-bottom: 15px;
233
+ height: auto;
234
+ border: none;
235
+ }
236
+
237
+ div:not(.player) .noLabelCommon.selectSpan {
201
238
  border: 1px solid light;
202
239
  background: white;
203
240
  border-radius: 2px;
204
- height: 44px;
205
- line-height: 42px;
206
- box-sizing: border-box;
241
+ min-width: min-content;
242
+ width: 100%;
243
+ }
244
+
245
+ div.player .noLabelCommon.selectSpan {
246
+ box-shadow: 0px 4px 16px box_shadow_light_dark;
247
+ border-radius: 8px;
248
+ min-width: min-content;
249
+ width: 100%;
207
250
  white-space: nowrap;
208
- text-overflow: ellipsis;
209
251
  }
210
252
 
211
- .no-label select {
253
+ .no-label .selectBox {
212
254
  font-family: "Gilroy";
213
255
  text-transform: none;
214
256
  padding: 0 15px;
215
- height: 44px;
257
+ height: 54px;
216
258
  border-radius: 2px;
217
- font-size: 16px;
259
+ font-size: 14px;
218
260
  color: black;
219
261
  font-weight: normal;
220
262
  margin-left: 0;
221
263
  width: 230px;
264
+ max-width: 280px;
222
265
  cursor: pointer;
223
266
  background: white;
224
267
  border: 2px solid xtraLightGrey;
225
268
  }
226
269
 
227
270
  @media mobile {
228
- .no-label select {
229
- height: 100%;
230
- width: 100%;
271
+ div.player .selectBox {
272
+ min-width: 0;
273
+ }
274
+
275
+ .no-label .selectBox {
231
276
  margin-left: 0;
232
277
  border-radius: 0;
278
+ position: absolute;
279
+ left: 0;
280
+ right: 0;
281
+ bottom: 0;
233
282
  }
234
283
 
235
- .no-label label {
284
+ .no-label .selectWrapper {
236
285
  display: block;
237
286
  margin-right: 0;
238
287
  width: 100%;
239
- height: 44px;
288
+ min-height: 44px;
289
+ height: min-content;
290
+ min-width: 250px;
291
+ max-width: 280px;
292
+ }
293
+
294
+ .player .noLabelCommon {
295
+ height: min-content;
296
+ }
297
+
298
+ div.player .noLabelCommon.selectSpan {
299
+ min-width: 250px;
300
+ max-width: 280px;
301
+ white-space: pre-wrap;
302
+ }
303
+
304
+ .noLabelCommon.longLabel {
305
+ line-height: 22px;
306
+ height: 100%;
307
+ }
308
+
309
+ .player.default .selectBox {
310
+ position: absolute;
311
+ top: 0px;
312
+ left: 0px;
313
+ width: 100%;
314
+ height: 100%;
240
315
  }
241
316
  }
242
317
 
@@ -248,12 +323,16 @@
248
323
  composes: no-label;
249
324
  }
250
325
 
251
- .invalid label {
326
+ .invalid .player {
327
+ color: cm_blue_900;
328
+ }
329
+
330
+ .invalid .selectWrapper {
252
331
  height: 54px;
253
332
  color: black;
254
333
  }
255
334
 
256
- .invalid .label {
335
+ .invalid .selectSpan {
257
336
  font-size: 15px;
258
337
  font-weight: 700;
259
338
  border: 2px solid;
@@ -271,10 +350,11 @@
271
350
  width: 150px;
272
351
  }
273
352
 
274
- .mooc label {
353
+ .mooc .selectWrapper {
275
354
  margin: 0;
276
355
  height: 35px;
277
356
  border: 0;
357
+ width: inherit;
278
358
  }
279
359
 
280
360
  .mooc select {
@@ -307,11 +387,11 @@
307
387
  composes: no-label;
308
388
  }
309
389
 
310
- .question label {
390
+ .question .selectWrapper {
311
391
  height: 54px;
312
392
  }
313
393
 
314
- .question .label {
394
+ .question .selectSpan {
315
395
  font-size: 15px;
316
396
  font-weight: 700;
317
397
  border: 2px solid;
@@ -328,7 +408,7 @@
328
408
  margin-bottom: 10px;
329
409
  }
330
410
 
331
- .sort label {
411
+ .sort .selectWrapper {
332
412
  display: flex;
333
413
  align-items: center;
334
414
  position: relative;
@@ -338,7 +418,7 @@
338
418
  margin: 0;
339
419
  }
340
420
 
341
- .sort .label {
421
+ .sort .selectSpan {
342
422
  display: block;
343
423
  padding: 15px 30px 15px 15px;
344
424
  font-size: 12px;
@@ -379,16 +459,48 @@
379
459
  composes: no-label;
380
460
  }
381
461
 
462
+ /*
463
+ Player
464
+ */
465
+
466
+ .player {
467
+ composes: no-label;
468
+ }
469
+
382
470
  /*
383
471
  Header
384
472
  */
385
473
 
386
474
  .header {
387
475
  composes: mooc;
388
- width: auto;
389
476
  }
390
477
 
391
- .header select {
478
+ .header .selectBox {
479
+ margin-left: 0;
480
+ }
481
+
482
+ .default .selectWrapper select.selectBox {
483
+ max-width: 280px;
484
+ width: inherit;
485
+ border-radius: 8px;
486
+ padding: 0;
487
+ height: 100%;
488
+ top: 0;
489
+ }
490
+
491
+ .header .title,
492
+ .header .selectWrapper span.selectSpan {
493
+ min-width: 150px;
494
+ color: transparent;
495
+ }
496
+
497
+ .header .selectWrapper select.selectBox {
498
+ padding-left: 10px;
499
+ border-radius: 2px;
500
+ padding-right: 30px;
501
+ }
502
+
503
+ .header .selectBox {
392
504
  background-color: light;
393
505
  border: 0;
394
506
  font-weight: 700;
@@ -420,7 +532,7 @@
420
532
  composes: no-label;
421
533
  }
422
534
 
423
- .template select {
535
+ .template .selectBox {
424
536
  width: auto;
425
537
  height: 54px;
426
538
  padding: 0 50px 0 0;
@@ -428,22 +540,22 @@
428
540
  max-width: 100%;
429
541
  }
430
542
 
431
- .template .label {
543
+ .template .selectSpan {
432
544
  font-size: 15px;
433
545
  font-weight: 700;
434
546
  height: 54px;
435
547
  line-height: 52px;
436
548
  }
437
549
 
438
- .selected.template .label {
550
+ .selected.template .selectSpan {
439
551
  border: 1px solid;
440
552
  }
441
553
 
442
- .unselected.template .label {
554
+ .unselected.template .selectSpan {
443
555
  border: 1px solid color(black lightness(85%));
444
556
  }
445
557
 
446
- .template label {
558
+ .template .selectWrapper {
447
559
  display: block;
448
560
  width: auto;
449
561
  margin-right: 0;
@@ -0,0 +1,11 @@
1
+ import _defaultsDeep from "lodash/fp/defaultsDeep";
2
+ import Default from './default';
3
+ const {
4
+ props
5
+ } = Default;
6
+ export default {
7
+ props: _defaultsDeep(props, {
8
+ theme: 'player'
9
+ })
10
+ };
11
+ //# sourceMappingURL=player.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/atom/select/test/fixtures/player.js"],"names":["Default","props","theme"],"mappings":";AACA,OAAOA,OAAP,MAAoB,WAApB;AAEA,MAAM;AAACC,EAAAA;AAAD,IAAUD,OAAhB;AAEA,eAAe;AACbC,EAAAA,KAAK,EAAE,cAAaA,KAAb,EAAoB;AACzBC,IAAAA,KAAK,EAAE;AADkB,GAApB;AADM,CAAf","sourcesContent":["import {defaultsDeep} from 'lodash/fp';\nimport Default from './default';\n\nconst {props} = Default;\n\nexport default {\n props: defaultsDeep(props, {\n theme: 'player'\n })\n};\n"],"file":"player.js"}