@coorpacademy/components 11.27.0 → 11.29.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.
Files changed (64) hide show
  1. package/es/atom/icon/index.d.ts.map +1 -1
  2. package/es/atom/icon/index.js +11 -8
  3. package/es/atom/icon/index.js.map +1 -1
  4. package/es/atom/icon/style.css +0 -1
  5. package/es/molecule/learning-profile-radar-chart/index.d.ts.map +1 -1
  6. package/es/molecule/learning-profile-radar-chart/index.js +29 -17
  7. package/es/molecule/learning-profile-radar-chart/index.js.map +1 -1
  8. package/es/molecule/learning-profile-radar-chart/style.css +2 -0
  9. package/es/molecule/skills-chart-side-information-item/index.d.ts +17 -0
  10. package/es/molecule/skills-chart-side-information-item/index.d.ts.map +1 -0
  11. package/es/molecule/skills-chart-side-information-item/index.js +38 -0
  12. package/es/molecule/skills-chart-side-information-item/index.js.map +1 -0
  13. package/es/molecule/skills-chart-side-information-item/style.css +47 -0
  14. package/es/molecule/skills-chart-side-information-panel/index.d.ts +16 -0
  15. package/es/molecule/skills-chart-side-information-panel/index.d.ts.map +1 -0
  16. package/es/molecule/skills-chart-side-information-panel/index.js +26 -0
  17. package/es/molecule/skills-chart-side-information-panel/index.js.map +1 -0
  18. package/es/molecule/skills-chart-side-information-panel/style.css +10 -0
  19. package/lib/atom/icon/index.d.ts.map +1 -1
  20. package/lib/atom/icon/index.js +15 -8
  21. package/lib/atom/icon/index.js.map +1 -1
  22. package/lib/atom/icon/style.css +0 -1
  23. package/lib/molecule/learning-profile-radar-chart/index.d.ts.map +1 -1
  24. package/lib/molecule/learning-profile-radar-chart/index.js +30 -18
  25. package/lib/molecule/learning-profile-radar-chart/index.js.map +1 -1
  26. package/lib/molecule/learning-profile-radar-chart/style.css +2 -0
  27. package/lib/molecule/skills-chart-side-information-item/index.d.ts +17 -0
  28. package/lib/molecule/skills-chart-side-information-item/index.d.ts.map +1 -0
  29. package/lib/molecule/skills-chart-side-information-item/index.js +50 -0
  30. package/lib/molecule/skills-chart-side-information-item/index.js.map +1 -0
  31. package/lib/molecule/skills-chart-side-information-item/style.css +47 -0
  32. package/lib/molecule/skills-chart-side-information-panel/index.d.ts +16 -0
  33. package/lib/molecule/skills-chart-side-information-panel/index.d.ts.map +1 -0
  34. package/lib/molecule/skills-chart-side-information-panel/index.js +36 -0
  35. package/lib/molecule/skills-chart-side-information-panel/index.js.map +1 -0
  36. package/lib/molecule/skills-chart-side-information-panel/style.css +10 -0
  37. package/locales/bs/global.json +6 -1
  38. package/locales/cs/global.json +6 -1
  39. package/locales/de/global.json +6 -1
  40. package/locales/en/global.json +6 -1
  41. package/locales/es/global.json +6 -1
  42. package/locales/et/global.json +6 -1
  43. package/locales/fi/global.json +6 -1
  44. package/locales/fr/global.json +6 -1
  45. package/locales/hr/global.json +6 -1
  46. package/locales/hu/global.json +6 -1
  47. package/locales/hy/global.json +6 -1
  48. package/locales/it/global.json +6 -1
  49. package/locales/ja/global.json +6 -1
  50. package/locales/ko/global.json +6 -1
  51. package/locales/nl/global.json +6 -1
  52. package/locales/pl/global.json +6 -1
  53. package/locales/pt/global.json +6 -1
  54. package/locales/ro/global.json +6 -1
  55. package/locales/ru/global.json +6 -1
  56. package/locales/sk/global.json +6 -1
  57. package/locales/sv/global.json +6 -1
  58. package/locales/tl/global.json +6 -1
  59. package/locales/tr/global.json +6 -1
  60. package/locales/uk/global.json +6 -1
  61. package/locales/vi/global.json +6 -1
  62. package/locales/zh/global.json +6 -1
  63. package/locales/zh_TW/global.json +6 -1
  64. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/icon/index.js"],"names":[],"mappings":"AAgBA,mDAAoD;AAiB7C,iEACoE;;AAE3E,uDA6BG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/icon/index.js"],"names":[],"mappings":"AAiBA,mDAAoD;AAiB7C,iEACoE;;AAE3E,uDAgCG"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import PropTypes from 'prop-types';
2
+ import PropTypes, { number } from 'prop-types';
3
3
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
4
4
  import { fas } from '@fortawesome/pro-solid-svg-icons';
5
5
  import { library } from '@fortawesome/fontawesome-svg-core';
@@ -12,18 +12,19 @@ library.add(fas);
12
12
  const DEFAULT_PRESET = 'm';
13
13
  const ICON_LUMINOSITY = 32;
14
14
  const DEFAULT_WRAPPER_SIZE = 40;
15
+ const ICON_PADDING = 8;
15
16
  export const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';
16
17
  const SIZE_CONFIGS = {
17
18
  s: {
18
- faSize: 'sm',
19
+ faSize: 12,
19
20
  wrapperSize: 32
20
21
  },
21
22
  m: {
22
- faSize: 'lg',
23
+ faSize: 16,
23
24
  wrapperSize: DEFAULT_WRAPPER_SIZE
24
25
  },
25
26
  xl: {
26
- faSize: 'xl',
27
+ faSize: 20,
27
28
  wrapperSize: 48
28
29
  }
29
30
  };
@@ -39,10 +40,12 @@ const Icon = /*#__PURE__*/React.memo(function Icon({
39
40
  }) {
40
41
  const effectiveIconColor = iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;
41
42
  const effectiveSize = size ? merge(SIZE_CONFIGS[DEFAULT_PRESET], size) : getOr(SIZE_CONFIGS[DEFAULT_PRESET], toLower(preset), SIZE_CONFIGS);
43
+ const wrapperSize = effectiveSize.wrapperSize - ICON_PADDING * 2;
42
44
  const iconWrapperStyle = {
43
45
  backgroundColor,
44
- width: effectiveSize.wrapperSize,
45
- height: effectiveSize.wrapperSize
46
+ width: wrapperSize,
47
+ height: wrapperSize,
48
+ padding: ICON_PADDING
46
49
  };
47
50
  return /*#__PURE__*/React.createElement("div", {
48
51
  className: style.iconWrapper,
@@ -50,7 +53,7 @@ const Icon = /*#__PURE__*/React.memo(function Icon({
50
53
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
51
54
  icon: `fa-${iconName}`,
52
55
  color: effectiveIconColor,
53
- size: effectiveSize.faSize
56
+ "font-size": effectiveSize.faSize
54
57
  }));
55
58
  });
56
59
  Icon.propTypes = process.env.NODE_ENV !== "production" ? {
@@ -59,7 +62,7 @@ Icon.propTypes = process.env.NODE_ENV !== "production" ? {
59
62
  backgroundColor: PropTypes.string,
60
63
  preset: PropTypes.oneOf(['s', 'm', 'xl']),
61
64
  size: PropTypes.shape({
62
- faSize: PropTypes.oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),
65
+ faSize: number,
63
66
  wrapperSize: PropTypes.number
64
67
  })
65
68
  } : {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","PropTypes","FontAwesomeIcon","fas","library","toLower","merge","getOr","Color","style","add","DEFAULT_PRESET","ICON_LUMINOSITY","DEFAULT_WRAPPER_SIZE","DEFAULT_ICON_COLOR","SIZE_CONFIGS","s","faSize","wrapperSize","m","xl","getForegroundColor","backgroundColor","to","set","l","toString","Icon","memo","iconName","iconColor","preset","size","effectiveIconColor","effectiveSize","iconWrapperStyle","width","height","iconWrapper","propTypes","string","isRequired","oneOf","shape","number"],"sources":["../../../src/atom/icon/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {library} from '@fortawesome/fontawesome-svg-core';\nimport toLower from 'lodash/fp/toLower';\nimport merge from 'lodash/fp/merge';\nimport getOr from 'lodash/fp/getOr';\nimport Color from 'colorjs.io';\nimport style from './style.css';\n\nlibrary.add(fas);\n\nconst DEFAULT_PRESET = 'm';\nconst ICON_LUMINOSITY = 32;\nconst DEFAULT_WRAPPER_SIZE = 40;\nexport const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';\n\nconst SIZE_CONFIGS = {\n s: {\n faSize: 'sm',\n wrapperSize: 32\n },\n m: {\n faSize: 'lg',\n wrapperSize: DEFAULT_WRAPPER_SIZE\n },\n xl: {\n faSize: 'xl',\n wrapperSize: 48\n }\n};\n\nexport const getForegroundColor = backgroundColor =>\n new Color(backgroundColor).to('hsl').set({l: ICON_LUMINOSITY}).toString();\n\nconst Icon = React.memo(function Icon({\n iconName,\n iconColor,\n backgroundColor,\n preset = DEFAULT_PRESET,\n size\n}) {\n const effectiveIconColor =\n iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;\n\n const effectiveSize = size\n ? merge(SIZE_CONFIGS[DEFAULT_PRESET], size)\n : getOr(SIZE_CONFIGS[DEFAULT_PRESET], toLower(preset), SIZE_CONFIGS);\n\n const iconWrapperStyle = {\n backgroundColor,\n width: effectiveSize.wrapperSize,\n height: effectiveSize.wrapperSize\n };\n\n return (\n <div className={style.iconWrapper} style={iconWrapperStyle}>\n <FontAwesomeIcon\n icon={`fa-${iconName}`}\n color={effectiveIconColor}\n size={effectiveSize.faSize}\n />\n </div>\n );\n});\n\nIcon.propTypes = {\n iconName: PropTypes.string.isRequired,\n iconColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n preset: PropTypes.oneOf(['s', 'm', 'xl']),\n size: PropTypes.shape({\n faSize: PropTypes.oneOf([\n '2xs',\n 'xs',\n 'sm',\n 'lg',\n 'xl',\n '2xl',\n '1x',\n '2x',\n '3x',\n '4x',\n '5x',\n '6x',\n '7x',\n '8x',\n '9x',\n '10x'\n ]),\n wrapperSize: PropTypes.number\n })\n};\n\nexport default Icon;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["React","PropTypes","number","FontAwesomeIcon","fas","library","toLower","merge","getOr","Color","style","add","DEFAULT_PRESET","ICON_LUMINOSITY","DEFAULT_WRAPPER_SIZE","ICON_PADDING","DEFAULT_ICON_COLOR","SIZE_CONFIGS","s","faSize","wrapperSize","m","xl","getForegroundColor","backgroundColor","to","set","l","toString","Icon","memo","iconName","iconColor","preset","size","effectiveIconColor","effectiveSize","iconWrapperStyle","width","height","padding","iconWrapper","propTypes","string","isRequired","oneOf","shape"],"sources":["../../../src/atom/icon/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes, {number} from 'prop-types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {library} from '@fortawesome/fontawesome-svg-core';\nimport toLower from 'lodash/fp/toLower';\nimport merge from 'lodash/fp/merge';\nimport getOr from 'lodash/fp/getOr';\nimport Color from 'colorjs.io';\nimport style from './style.css';\n\nlibrary.add(fas);\n\nconst DEFAULT_PRESET = 'm';\nconst ICON_LUMINOSITY = 32;\nconst DEFAULT_WRAPPER_SIZE = 40;\nconst ICON_PADDING = 8;\nexport const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';\n\nconst SIZE_CONFIGS = {\n s: {\n faSize: 12,\n wrapperSize: 32\n },\n m: {\n faSize: 16,\n wrapperSize: DEFAULT_WRAPPER_SIZE\n },\n xl: {\n faSize: 20,\n wrapperSize: 48\n }\n};\n\nexport const getForegroundColor = backgroundColor =>\n new Color(backgroundColor).to('hsl').set({l: ICON_LUMINOSITY}).toString();\n\nconst Icon = React.memo(function Icon({\n iconName,\n iconColor,\n backgroundColor,\n preset = DEFAULT_PRESET,\n size\n}) {\n const effectiveIconColor =\n iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;\n\n const effectiveSize = size\n ? merge(SIZE_CONFIGS[DEFAULT_PRESET], size)\n : getOr(SIZE_CONFIGS[DEFAULT_PRESET], toLower(preset), SIZE_CONFIGS);\n\n const wrapperSize = effectiveSize.wrapperSize - ICON_PADDING * 2;\n\n const iconWrapperStyle = {\n backgroundColor,\n width: wrapperSize,\n height: wrapperSize,\n padding: ICON_PADDING\n };\n\n return (\n <div className={style.iconWrapper} style={iconWrapperStyle}>\n <FontAwesomeIcon\n icon={`fa-${iconName}`}\n color={effectiveIconColor}\n font-size={effectiveSize.faSize}\n />\n </div>\n );\n});\n\nIcon.propTypes = {\n iconName: PropTypes.string.isRequired,\n iconColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n preset: PropTypes.oneOf(['s', 'm', 'xl']),\n size: PropTypes.shape({\n faSize: number,\n wrapperSize: PropTypes.number\n })\n};\n\nexport default Icon;\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  .iconWrapper {
2
- padding: 8px;
3
2
  border-radius: 8px;
4
3
  display: flex;
5
4
  align-items: center;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/learning-profile-radar-chart/index.tsx"],"names":[],"mappings":";AA6BA,OAAO,EAGL,gBAAgB,EAChB,kCAAkC,EAGnC,MAAM,SAAS,CAAC;AA+OjB,eAAO,MAAM,UAAU,EAAE,CACvB,MAAM,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,EAC/B,KAAK,EAAE,kCAAkC,CAAC,MAAM,CAAC,KAC9C,gBAAgB,EAOX,CAAC;AAEX,eAAO,MAAM,yBAAyB;kFAQnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;CA8GpC,CAAC;AAEF,QAAA,MAAM,mCAAmC;YAAW,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;CAIrF,CAAC;AAKF,eAAe,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/learning-profile-radar-chart/index.tsx"],"names":[],"mappings":";AA6BA,OAAO,EAGL,gBAAgB,EAChB,kCAAkC,EAGnC,MAAM,SAAS,CAAC;AAwPjB,eAAO,MAAM,UAAU,EAAE,CACvB,MAAM,EAAE;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAC,EAC/B,KAAK,EAAE,kCAAkC,CAAC,MAAM,CAAC,KAC9C,gBAAgB,EAOX,CAAC;AAEX,eAAO,MAAM,yBAAyB;kFAQnC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;CAiHpC,CAAC;AAEF,QAAA,MAAM,mCAAmC;YAAW,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;CAIrF,CAAC;AAKF,eAAe,mCAAmC,CAAC"}
@@ -182,11 +182,11 @@ const buildRadars = (totalDataset, handleOnDotClick, activeDot) => _times(index
182
182
  // use with the tooltip component
183
183
  ,
184
184
  dot: /*#__PURE__*/React.createElement(CustomDot, {
185
- onDotClick: handleOnDotClick(datakey),
185
+ onDotClick: handleOnDotClick,
186
186
  activeDot: activeDot,
187
187
  dataKey: datakey,
188
188
  stroke: `url(#gradient-stroke-${index})`,
189
- dataName: dataset
189
+ dataName: `dot-${dataset}`
190
190
  })
191
191
  }));
192
192
  }, totalDataset);
@@ -199,7 +199,8 @@ const buildCustomLabel = ({
199
199
  label,
200
200
  activeDot,
201
201
  chartType,
202
- formatedColors
202
+ formatedColors,
203
+ onClick
203
204
  }) => {
204
205
  const isCurrentDotActive = activeDot?.label === label;
205
206
 
@@ -213,12 +214,19 @@ const buildCustomLabel = ({
213
214
  } = _CHART_CONFIGS$chartT,
214
215
  rest = _objectWithoutPropertiesLoose(_CHART_CONFIGS$chartT, _excluded);
215
216
 
217
+ function onLabelClick(e) {
218
+ e.stopPropagation();
219
+ onClick(label);
220
+ }
221
+
216
222
  return /*#__PURE__*/React.createElement("g", null, /*#__PURE__*/React.createElement("foreignObject", {
217
223
  x: x + offsetX,
218
224
  y: y + offsetY,
219
225
  width: "200",
220
226
  height: "65"
221
227
  }, /*#__PURE__*/React.createElement("div", {
228
+ "data-name": label,
229
+ onClick: onLabelClick,
222
230
  className: classnames(style.tickWrapper, isCurrentDotActive && style.tickWrapperFocus),
223
231
  style: _extends({}, rest, {
224
232
  alignItems: alignment,
@@ -308,21 +316,24 @@ export const LearningProfileRadarChart = ({
308
316
  };
309
317
  }, [activeDot]);
310
318
 
311
- function handleOnDotClick(datakey) {
312
- return label => {
313
- const payload = formatedData.find(data_ => data_.subject === label);
319
+ function handleOnDotClick(label) {
320
+ const payload = formatedData.find(({
321
+ subject
322
+ }) => subject === label);
323
+ if (!payload) return;
324
+ const index = formatedData.indexOf(payload);
325
+ const datakey = `value${index + 1}`;
314
326
 
315
- const skillRef = _findKey(val => val === payload?.subject, legend);
327
+ const skillRef = _findKey(val => val === payload?.subject, legend);
316
328
 
317
- if (payload && skillRef) {
318
- setActiveDot({
319
- key: datakey,
320
- value: payload[datakey],
321
- label: payload.subject
322
- });
323
- onClick(skillRef);
324
- }
325
- };
329
+ if (skillRef) {
330
+ setActiveDot({
331
+ key: datakey,
332
+ value: payload[datakey],
333
+ label: payload.subject
334
+ });
335
+ onClick(skillRef);
336
+ }
326
337
  }
327
338
 
328
339
  function renderCustomLabel({
@@ -347,7 +358,8 @@ export const LearningProfileRadarChart = ({
347
358
  label,
348
359
  activeDot,
349
360
  chartType,
350
- formatedColors
361
+ formatedColors,
362
+ onClick: handleOnDotClick
351
363
  });
352
364
  }
353
365
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","Fragment","useCallback","useEffect","useMemo","useState","Radar","RadarChart","PolarGrid","PolarAngleAxis","ResponsiveContainer","Tooltip","PolarRadiusAxis","classnames","isMobile","getIsMobile","style","learningProfileRadarChartPropTypes","top","offset","x","y","alignment","margin","bottom","right","marginRight","left","marginLeft","BLACK","WHITE","DEFAULT_MAIN_COLOR","DEFAULT_COLORS","gradient","fill","stroke","percentage","color","background","label","CHART_CONFIGS","triangle","name","ticks","sideCount","quadrilateral","pentagon","hexagon","DOT_DEFAULT_PROPS","strokeWidth","strokeOpacity","r","pointerEvents","cursor","DOT_ACTIVE_PROPS","RADAR_DEFAULT_PROPS","fillOpacity","Gradient","type","colors","firstColor","secondColor","CustomTooltip","active","payload","length","tooltip","value","CustomDot","cx","cy","onDotClick","activeDot","dataName","subject","onClick","e","stopPropagation","buildRadars","totalDataset","handleOnDotClick","index","datakey","dataset","buildCustomLabel","percentagesValues","chartType","formatedColors","isCurrentDotActive","offsetX","offsetY","rest","tickWrapper","tickWrapperFocus","alignItems","textAlign","opacity","map","colorLabel","i","tickValue","tickLabel","CHART_CONFIGS_BY_SIDE_COUNT","formatValues","values_","val","formatData","legend","data_","ref","LearningProfileRadarChart","data","colorsProps","width","height","setIsMobile","setActiveDot","Object","assign","gradients","userAgent","navigator","isMobile_","setIsMobile_","handleClick","undefined","window","addEventListener","removeEventListener","formatedData","find","skillRef","key","renderCustomLabel","currentData","ResponsiveLearningProfileRadarChart","props","propTypes"],"sources":["../../../src/molecule/learning-profile-radar-chart/index.tsx"],"sourcesContent":["import React, {Fragment, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Radar,\n RadarChart,\n PolarGrid,\n PolarAngleAxis,\n ResponsiveContainer,\n Tooltip,\n PolarRadiusAxis\n} from 'recharts';\nimport {\n pipe,\n keyBy,\n mapValues,\n size,\n getOr,\n map,\n toPairs,\n values,\n isEmpty,\n omit,\n fromPairs,\n times,\n flatten,\n findKey\n} from 'lodash/fp';\nimport classnames from 'classnames';\nimport {isMobile as getIsMobile} from '../../util/check-is-mobile';\nimport style from './style.css';\nimport {\n ActiveDotType,\n FormatedColorsType,\n FormatedDataType,\n LearningProfileRadarChartPropTypes,\n TickType,\n learningProfileRadarChartPropTypes\n} from './types';\n\ntype CHART_TYPE_TYPE = keyof typeof CHART_CONFIGS;\n\n/* TICK_POSITIONS */\nconst top: TickType = {offset: {x: -100, y: -65}, alignment: 'center', margin: 'auto'};\nconst bottom: TickType = {offset: {x: -100, y: 10}, alignment: 'center', margin: 'auto'};\nconst right: TickType = {offset: {x: 30, y: -10}, alignment: 'start', marginRight: 'auto'};\nconst left: TickType = {offset: {x: -230, y: -10}, alignment: 'end', marginLeft: 'auto'};\n\n/* CONSTANTS */\nconst BLACK = '#000000ff';\nconst WHITE = '#ffffffff';\nconst DEFAULT_MAIN_COLOR = '#0062ffff';\n\nconst DEFAULT_COLORS: FormatedColorsType = {\n gradient: {\n fill: [DEFAULT_MAIN_COLOR, DEFAULT_MAIN_COLOR],\n stroke: [DEFAULT_MAIN_COLOR, DEFAULT_MAIN_COLOR]\n },\n percentage: {\n color: BLACK,\n background: WHITE\n },\n label: {\n color: BLACK\n }\n};\n\nconst CHART_CONFIGS = {\n triangle: {\n name: 'triangle',\n ticks: [top, right, left],\n sideCount: 3\n },\n quadrilateral: {\n name: 'quadrilateral',\n ticks: [top, right, bottom, left],\n sideCount: 4\n },\n pentagon: {\n name: 'pentagon',\n ticks: [top, right, right, left, left],\n sideCount: 5\n },\n hexagon: {\n name: 'hexagon',\n ticks: [top, right, right, bottom, left, left],\n sideCount: 6\n }\n} as const;\n\nconst DOT_DEFAULT_PROPS = {\n strokeWidth: 4,\n strokeOpacity: 0.2,\n fill: '#fff',\n r: 8,\n pointerEvents: 'all',\n style: {cursor: 'pointer'}\n} as const;\n\nconst DOT_ACTIVE_PROPS = {\n fill: '#fff',\n r: 8,\n strokeWidth: 6,\n strokeOpacity: 0.5\n} as const;\n\nconst RADAR_DEFAULT_PROPS = {\n strokeWidth: 6,\n strokeOpacity: 0.2,\n fillOpacity: 0.2\n} as const;\n\n/* COMPONENTS */\nconst Gradient = ({type, colors: [firstColor, secondColor]}: {type: string; colors: string[]}) => (\n <defs>\n <linearGradient id={`gradient-${type}`} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={firstColor} />\n <stop offset=\"100%\" stopColor={secondColor} />\n </linearGradient>\n </defs>\n);\n\nconst CustomTooltip = ({\n active,\n payload,\n label\n}: {\n active?: boolean;\n payload?: {value: number}[];\n label?: string;\n}) =>\n active && !!payload?.length ? (\n <div className={style.tooltip}>\n <p>{label}</p>\n <p>{payload[0].value}%</p>\n </div>\n ) : null;\n\nconst CustomDot = ({\n cx,\n cy,\n payload,\n onDotClick,\n stroke,\n activeDot,\n dataName\n}: {\n cx?: number;\n cy?: number;\n payload?: {payload: {subject: string} & {[datakey: string]: number}; name: string};\n onDotClick: (name: string) => void;\n dataKey: string;\n stroke: string;\n activeDot?: ActiveDotType;\n dataName: string;\n}) => (\n <circle\n {...{\n ...DOT_DEFAULT_PROPS,\n ...(payload?.payload.subject === activeDot?.label && DOT_ACTIVE_PROPS),\n stroke,\n cx,\n cy,\n onClick: e => {\n e.stopPropagation();\n\n if (!payload?.name) return;\n onDotClick(payload.name);\n },\n 'data-name': dataName\n }}\n />\n);\n\nconst buildRadars = (\n totalDataset: number,\n handleOnDotClick: (datakey: string) => (name: string) => void,\n activeDot?: ActiveDotType\n) =>\n times(index => {\n const datakey = `value${index + 1}`;\n const dataset = `dataset-${index + 1}`;\n\n return (\n <Radar\n {...RADAR_DEFAULT_PROPS}\n fill={`url(#gradient-fill-${index})`}\n stroke={`url(#gradient-stroke-${index})`}\n key={dataset}\n name={dataset}\n dataKey={datakey}\n activeDot={{\n ...DOT_ACTIVE_PROPS,\n stroke: `url(#gradient-stroke-${index})`\n }}\n // only on mobile\n // to handle dot style on hover (convert to click)\n // use with the tooltip component\n dot={\n <CustomDot\n onDotClick={handleOnDotClick(datakey)}\n activeDot={activeDot}\n dataKey={datakey}\n stroke={`url(#gradient-stroke-${index})`}\n dataName={dataset}\n />\n }\n />\n );\n }, totalDataset);\n\nconst buildCustomLabel = ({\n index,\n x,\n y,\n percentagesValues,\n label,\n activeDot,\n chartType,\n formatedColors\n}: {\n index: number;\n x: number;\n y: number;\n percentagesValues: number[];\n label: string;\n chartType: CHART_TYPE_TYPE;\n formatedColors: FormatedColorsType[];\n activeDot?: ActiveDotType;\n}) => {\n const isCurrentDotActive = activeDot?.label === label;\n const {\n offset: {x: offsetX, y: offsetY},\n alignment,\n ...rest\n } = CHART_CONFIGS[chartType].ticks[index];\n\n return (\n <g>\n <foreignObject x={x + offsetX} y={y + offsetY} width=\"200\" height=\"65\">\n <div\n className={classnames(style.tickWrapper, isCurrentDotActive && style.tickWrapperFocus)}\n style={{\n ...rest,\n alignItems: alignment,\n textAlign: alignment,\n opacity: !isEmpty(activeDot) && !isCurrentDotActive ? 0.3 : 1\n }}\n >\n {formatedColors.map(\n ({percentage: {color, background}, label: {color: colorLabel}}, i) => (\n <Fragment key={i}>\n <span className={style.tickValue} style={{color, background}}>\n {percentagesValues[i]}\n </span>\n <span className={style.tickLabel} style={{color: colorLabel}}>\n {label}\n </span>\n </Fragment>\n )\n )}\n </div>\n </foreignObject>\n </g>\n );\n};\n\n/* UTILS */\nconst CHART_CONFIGS_BY_SIDE_COUNT = pipe(keyBy('sideCount'), mapValues('name'))(CHART_CONFIGS);\n\nconst formatValues: (values_: number | number[]) => Record<string, number> = pipe(\n values_ => flatten([values_]),\n values_ => values_.map((val: number, i: number): [string, number] => [`value${i + 1}`, val]),\n fromPairs\n);\n\n/* this convert incoming component data to rechart data structure */\nexport const formatData: (\n legend: {[ref: string]: string},\n data_: LearningProfileRadarChartPropTypes['data']\n) => FormatedDataType[] = (legend, data_) =>\n pipe(\n toPairs,\n map(([ref, values_]: [string, number | number[]]) => ({\n ...formatValues(values_),\n subject: legend[ref]\n }))\n )(data_);\n\nexport const LearningProfileRadarChart = ({\n data,\n legend,\n totalDataset,\n colors: colorsProps,\n onClick,\n width,\n height\n}: LearningProfileRadarChartPropTypes) => {\n const [isMobile, setIsMobile] = useState(false);\n const [activeDot, setActiveDot] = useState<ActiveDotType>();\n\n const formatedColors = times(i => {\n if (!colorsProps?.length) return DEFAULT_COLORS;\n\n const colors = colorsProps[i];\n return colors ? Object.assign({}, DEFAULT_COLORS, colors) : DEFAULT_COLORS;\n })(totalDataset);\n\n const chartType: CHART_TYPE_TYPE = useMemo(\n () => getOr('hexagon', size(data), CHART_CONFIGS_BY_SIDE_COUNT),\n [data]\n );\n\n const gradients = useMemo(\n () =>\n formatedColors.map(({gradient: {fill, stroke}}, index) => (\n <svg key={`gradient-${index}`}>\n <Gradient type={`fill-${index}`} colors={fill} />\n <Gradient type={`stroke-${index}`} colors={stroke} />\n </svg>\n )),\n [formatedColors]\n );\n\n const userAgent = navigator?.userAgent;\n const isMobile_ = useMemo(() => getIsMobile(userAgent), [userAgent]);\n\n const setIsMobile_ = useCallback(() => {\n setIsMobile(isMobile_);\n }, [isMobile_]);\n\n useEffect(() => setIsMobile_(), [setIsMobile_]);\n\n useEffect(() => {\n const handleClick = () => setActiveDot(undefined);\n\n !isEmpty(activeDot) && window.addEventListener('click', handleClick);\n\n return () => {\n window.removeEventListener('click', handleClick);\n };\n }, [activeDot]);\n\n function handleOnDotClick(datakey: string) {\n return (label: string) => {\n const payload = formatedData.find(data_ => data_.subject === label);\n const skillRef = findKey(val => val === payload?.subject, legend);\n\n if (payload && skillRef) {\n setActiveDot({\n key: datakey,\n value: payload[datakey],\n label: payload.subject\n });\n onClick(skillRef);\n }\n };\n }\n\n function renderCustomLabel({\n x,\n y,\n payload: {value: label},\n index\n }: {\n x: number;\n y: number;\n payload: {value: string};\n index: number;\n }) {\n const currentData = formatedData.find(({subject}) => subject === label);\n const percentagesValues: number[] = pipe(\n omit('subject'),\n mapValues(value => `${value}%`),\n values\n )(currentData);\n\n return buildCustomLabel({\n index,\n x,\n y,\n percentagesValues,\n label,\n activeDot,\n chartType,\n formatedColors\n });\n }\n const formatedData = useMemo(() => formatData(legend, data), [legend, data]);\n\n return (\n <RadarChart\n width={width}\n height={height}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"80%\"\n data={formatedData}\n >\n {gradients}\n {buildRadars(totalDataset, handleOnDotClick, activeDot)}\n <PolarGrid strokeDasharray={15} strokeWidth={3} radialLines={false} />\n <PolarAngleAxis dataKey=\"subject\" tick={!isMobile && renderCustomLabel} />\n <PolarRadiusAxis tick={false} axisLine={false} domain={[0, 100]} />\n {isMobile ? <Tooltip cursor={false} content={<CustomTooltip />} /> : null}\n </RadarChart>\n );\n};\n\nconst ResponsiveLearningProfileRadarChart = (props: LearningProfileRadarChartPropTypes) => (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LearningProfileRadarChart {...props} />\n </ResponsiveContainer>\n);\n\nLearningProfileRadarChart.propTypes = learningProfileRadarChartPropTypes;\nResponsiveLearningProfileRadarChart.propTypes = learningProfileRadarChartPropTypes;\n\nexport default ResponsiveLearningProfileRadarChart;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["React","Fragment","useCallback","useEffect","useMemo","useState","Radar","RadarChart","PolarGrid","PolarAngleAxis","ResponsiveContainer","Tooltip","PolarRadiusAxis","classnames","isMobile","getIsMobile","style","learningProfileRadarChartPropTypes","top","offset","x","y","alignment","margin","bottom","right","marginRight","left","marginLeft","BLACK","WHITE","DEFAULT_MAIN_COLOR","DEFAULT_COLORS","gradient","fill","stroke","percentage","color","background","label","CHART_CONFIGS","triangle","name","ticks","sideCount","quadrilateral","pentagon","hexagon","DOT_DEFAULT_PROPS","strokeWidth","strokeOpacity","r","pointerEvents","cursor","DOT_ACTIVE_PROPS","RADAR_DEFAULT_PROPS","fillOpacity","Gradient","type","colors","firstColor","secondColor","CustomTooltip","active","payload","length","tooltip","value","CustomDot","cx","cy","onDotClick","activeDot","dataName","subject","onClick","e","stopPropagation","buildRadars","totalDataset","handleOnDotClick","index","datakey","dataset","buildCustomLabel","percentagesValues","chartType","formatedColors","isCurrentDotActive","offsetX","offsetY","rest","onLabelClick","tickWrapper","tickWrapperFocus","alignItems","textAlign","opacity","map","colorLabel","i","tickValue","tickLabel","CHART_CONFIGS_BY_SIDE_COUNT","formatValues","values_","val","formatData","legend","data_","ref","LearningProfileRadarChart","data","colorsProps","width","height","setIsMobile","setActiveDot","Object","assign","gradients","userAgent","navigator","isMobile_","setIsMobile_","handleClick","undefined","window","addEventListener","removeEventListener","formatedData","find","indexOf","skillRef","key","renderCustomLabel","currentData","ResponsiveLearningProfileRadarChart","props","propTypes"],"sources":["../../../src/molecule/learning-profile-radar-chart/index.tsx"],"sourcesContent":["import React, {Fragment, useCallback, useEffect, useMemo, useState} from 'react';\nimport {\n Radar,\n RadarChart,\n PolarGrid,\n PolarAngleAxis,\n ResponsiveContainer,\n Tooltip,\n PolarRadiusAxis\n} from 'recharts';\nimport {\n pipe,\n keyBy,\n mapValues,\n size,\n getOr,\n map,\n toPairs,\n values,\n isEmpty,\n omit,\n fromPairs,\n times,\n flatten,\n findKey\n} from 'lodash/fp';\nimport classnames from 'classnames';\nimport {isMobile as getIsMobile} from '../../util/check-is-mobile';\nimport style from './style.css';\nimport {\n ActiveDotType,\n FormatedColorsType,\n FormatedDataType,\n LearningProfileRadarChartPropTypes,\n TickType,\n learningProfileRadarChartPropTypes\n} from './types';\n\ntype CHART_TYPE_TYPE = keyof typeof CHART_CONFIGS;\n\n/* TICK_POSITIONS */\nconst top: TickType = {offset: {x: -100, y: -65}, alignment: 'center', margin: 'auto'};\nconst bottom: TickType = {offset: {x: -100, y: 10}, alignment: 'center', margin: 'auto'};\nconst right: TickType = {offset: {x: 30, y: -10}, alignment: 'start', marginRight: 'auto'};\nconst left: TickType = {offset: {x: -230, y: -10}, alignment: 'end', marginLeft: 'auto'};\n\n/* CONSTANTS */\nconst BLACK = '#000000ff';\nconst WHITE = '#ffffffff';\nconst DEFAULT_MAIN_COLOR = '#0062ffff';\n\nconst DEFAULT_COLORS: FormatedColorsType = {\n gradient: {\n fill: [DEFAULT_MAIN_COLOR, DEFAULT_MAIN_COLOR],\n stroke: [DEFAULT_MAIN_COLOR, DEFAULT_MAIN_COLOR]\n },\n percentage: {\n color: BLACK,\n background: WHITE\n },\n label: {\n color: BLACK\n }\n};\n\nconst CHART_CONFIGS = {\n triangle: {\n name: 'triangle',\n ticks: [top, right, left],\n sideCount: 3\n },\n quadrilateral: {\n name: 'quadrilateral',\n ticks: [top, right, bottom, left],\n sideCount: 4\n },\n pentagon: {\n name: 'pentagon',\n ticks: [top, right, right, left, left],\n sideCount: 5\n },\n hexagon: {\n name: 'hexagon',\n ticks: [top, right, right, bottom, left, left],\n sideCount: 6\n }\n} as const;\n\nconst DOT_DEFAULT_PROPS = {\n strokeWidth: 4,\n strokeOpacity: 0.2,\n fill: '#fff',\n r: 8,\n pointerEvents: 'all',\n style: {cursor: 'pointer'}\n} as const;\n\nconst DOT_ACTIVE_PROPS = {\n fill: '#fff',\n r: 8,\n strokeWidth: 6,\n strokeOpacity: 0.5\n} as const;\n\nconst RADAR_DEFAULT_PROPS = {\n strokeWidth: 6,\n strokeOpacity: 0.2,\n fillOpacity: 0.2\n} as const;\n\n/* COMPONENTS */\nconst Gradient = ({type, colors: [firstColor, secondColor]}: {type: string; colors: string[]}) => (\n <defs>\n <linearGradient id={`gradient-${type}`} x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">\n <stop offset=\"0%\" stopColor={firstColor} />\n <stop offset=\"100%\" stopColor={secondColor} />\n </linearGradient>\n </defs>\n);\n\nconst CustomTooltip = ({\n active,\n payload,\n label\n}: {\n active?: boolean;\n payload?: {value: number}[];\n label?: string;\n}) =>\n active && !!payload?.length ? (\n <div className={style.tooltip}>\n <p>{label}</p>\n <p>{payload[0].value}%</p>\n </div>\n ) : null;\n\nconst CustomDot = ({\n cx,\n cy,\n payload,\n onDotClick,\n stroke,\n activeDot,\n dataName\n}: {\n cx?: number;\n cy?: number;\n payload?: {payload: {subject: string} & {[datakey: string]: number}; name: string};\n onDotClick: (name: string) => void;\n dataKey: string;\n stroke: string;\n activeDot?: ActiveDotType;\n dataName: string;\n}) => (\n <circle\n {...{\n ...DOT_DEFAULT_PROPS,\n ...(payload?.payload.subject === activeDot?.label && DOT_ACTIVE_PROPS),\n stroke,\n cx,\n cy,\n onClick: e => {\n e.stopPropagation();\n\n if (!payload?.name) return;\n onDotClick(payload.name);\n },\n 'data-name': dataName\n }}\n />\n);\n\nconst buildRadars = (\n totalDataset: number,\n handleOnDotClick: (name: string) => void,\n activeDot?: ActiveDotType\n) =>\n times(index => {\n const datakey = `value${index + 1}`;\n const dataset = `dataset-${index + 1}`;\n\n return (\n <Radar\n {...RADAR_DEFAULT_PROPS}\n fill={`url(#gradient-fill-${index})`}\n stroke={`url(#gradient-stroke-${index})`}\n key={dataset}\n name={dataset}\n dataKey={datakey}\n activeDot={{\n ...DOT_ACTIVE_PROPS,\n stroke: `url(#gradient-stroke-${index})`\n }}\n // only on mobile\n // to handle dot style on hover (convert to click)\n // use with the tooltip component\n dot={\n <CustomDot\n onDotClick={handleOnDotClick}\n activeDot={activeDot}\n dataKey={datakey}\n stroke={`url(#gradient-stroke-${index})`}\n dataName={`dot-${dataset}`}\n />\n }\n />\n );\n }, totalDataset);\n\nconst buildCustomLabel = ({\n index,\n x,\n y,\n percentagesValues,\n label,\n activeDot,\n chartType,\n formatedColors,\n onClick\n}: {\n index: number;\n x: number;\n y: number;\n percentagesValues: number[];\n label: string;\n chartType: CHART_TYPE_TYPE;\n formatedColors: FormatedColorsType[];\n activeDot?: ActiveDotType;\n onClick: (name: string) => void;\n}) => {\n const isCurrentDotActive = activeDot?.label === label;\n const {\n offset: {x: offsetX, y: offsetY},\n alignment,\n ...rest\n } = CHART_CONFIGS[chartType].ticks[index];\n\n function onLabelClick(e: React.MouseEvent) {\n e.stopPropagation();\n onClick(label);\n }\n\n return (\n <g>\n <foreignObject x={x + offsetX} y={y + offsetY} width=\"200\" height=\"65\">\n <div\n data-name={label}\n onClick={onLabelClick}\n className={classnames(style.tickWrapper, isCurrentDotActive && style.tickWrapperFocus)}\n style={{\n ...rest,\n alignItems: alignment,\n textAlign: alignment,\n opacity: !isEmpty(activeDot) && !isCurrentDotActive ? 0.3 : 1\n }}\n >\n {formatedColors.map(\n ({percentage: {color, background}, label: {color: colorLabel}}, i) => (\n <Fragment key={i}>\n <span className={style.tickValue} style={{color, background}}>\n {percentagesValues[i]}\n </span>\n <span className={style.tickLabel} style={{color: colorLabel}}>\n {label}\n </span>\n </Fragment>\n )\n )}\n </div>\n </foreignObject>\n </g>\n );\n};\n\n/* UTILS */\nconst CHART_CONFIGS_BY_SIDE_COUNT = pipe(keyBy('sideCount'), mapValues('name'))(CHART_CONFIGS);\n\nconst formatValues: (values_: number | number[]) => Record<string, number> = pipe(\n values_ => flatten([values_]),\n values_ => values_.map((val: number, i: number): [string, number] => [`value${i + 1}`, val]),\n fromPairs\n);\n\n/* this convert incoming component data to rechart data structure */\nexport const formatData: (\n legend: {[ref: string]: string},\n data_: LearningProfileRadarChartPropTypes['data']\n) => FormatedDataType[] = (legend, data_) =>\n pipe(\n toPairs,\n map(([ref, values_]: [string, number | number[]]) => ({\n ...formatValues(values_),\n subject: legend[ref]\n }))\n )(data_);\n\nexport const LearningProfileRadarChart = ({\n data,\n legend,\n totalDataset,\n colors: colorsProps,\n onClick,\n width,\n height\n}: LearningProfileRadarChartPropTypes) => {\n const [isMobile, setIsMobile] = useState(false);\n const [activeDot, setActiveDot] = useState<ActiveDotType>();\n\n const formatedColors = times(i => {\n if (!colorsProps?.length) return DEFAULT_COLORS;\n\n const colors = colorsProps[i];\n return colors ? Object.assign({}, DEFAULT_COLORS, colors) : DEFAULT_COLORS;\n })(totalDataset);\n\n const chartType: CHART_TYPE_TYPE = useMemo(\n () => getOr('hexagon', size(data), CHART_CONFIGS_BY_SIDE_COUNT),\n [data]\n );\n\n const gradients = useMemo(\n () =>\n formatedColors.map(({gradient: {fill, stroke}}, index) => (\n <svg key={`gradient-${index}`}>\n <Gradient type={`fill-${index}`} colors={fill} />\n <Gradient type={`stroke-${index}`} colors={stroke} />\n </svg>\n )),\n [formatedColors]\n );\n\n const userAgent = navigator?.userAgent;\n const isMobile_ = useMemo(() => getIsMobile(userAgent), [userAgent]);\n\n const setIsMobile_ = useCallback(() => {\n setIsMobile(isMobile_);\n }, [isMobile_]);\n\n useEffect(() => setIsMobile_(), [setIsMobile_]);\n\n useEffect(() => {\n const handleClick = () => setActiveDot(undefined);\n\n !isEmpty(activeDot) && window.addEventListener('click', handleClick);\n\n return () => {\n window.removeEventListener('click', handleClick);\n };\n }, [activeDot]);\n\n function handleOnDotClick(label: string) {\n const payload = formatedData.find(({subject}) => subject === label);\n if (!payload) return;\n\n const index = formatedData.indexOf(payload);\n const datakey = `value${index + 1}`;\n const skillRef = findKey(val => val === payload?.subject, legend);\n\n if (skillRef) {\n setActiveDot({\n key: datakey,\n value: payload[datakey],\n label: payload.subject\n });\n onClick(skillRef);\n }\n }\n\n function renderCustomLabel({\n x,\n y,\n payload: {value: label},\n index\n }: {\n x: number;\n y: number;\n payload: {value: string};\n index: number;\n }) {\n const currentData = formatedData.find(({subject}) => subject === label);\n const percentagesValues: number[] = pipe(\n omit('subject'),\n mapValues(value => `${value}%`),\n values\n )(currentData);\n\n return buildCustomLabel({\n index,\n x,\n y,\n percentagesValues,\n label,\n activeDot,\n chartType,\n formatedColors,\n onClick: handleOnDotClick\n });\n }\n const formatedData = useMemo(() => formatData(legend, data), [legend, data]);\n\n return (\n <RadarChart\n width={width}\n height={height}\n cx=\"50%\"\n cy=\"50%\"\n outerRadius=\"80%\"\n data={formatedData}\n >\n {gradients}\n {buildRadars(totalDataset, handleOnDotClick, activeDot)}\n <PolarGrid strokeDasharray={15} strokeWidth={3} radialLines={false} />\n <PolarAngleAxis dataKey=\"subject\" tick={!isMobile && renderCustomLabel} />\n <PolarRadiusAxis tick={false} axisLine={false} domain={[0, 100]} />\n {isMobile ? <Tooltip cursor={false} content={<CustomTooltip />} /> : null}\n </RadarChart>\n );\n};\n\nconst ResponsiveLearningProfileRadarChart = (props: LearningProfileRadarChartPropTypes) => (\n <ResponsiveContainer width=\"100%\" height=\"100%\">\n <LearningProfileRadarChart {...props} />\n </ResponsiveContainer>\n);\n\nLearningProfileRadarChart.propTypes = learningProfileRadarChartPropTypes;\nResponsiveLearningProfileRadarChart.propTypes = learningProfileRadarChartPropTypes;\n\nexport default ResponsiveLearningProfileRadarChart;\n"],"mappings":"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"}
@@ -46,4 +46,6 @@
46
46
  padding: 4px 8px;
47
47
  border-radius: 8px;
48
48
  width: 100%;
49
+ padding: 8px 12px;
50
+ box-sizing: border-box;
49
51
  }
@@ -0,0 +1,17 @@
1
+ export default SkillsChartSideInformationItem;
2
+ declare function SkillsChartSideInformationItem({ title, value, legend, icon: iconProps }: {
3
+ title: any;
4
+ value: any;
5
+ legend: any;
6
+ icon: any;
7
+ }): JSX.Element;
8
+ declare namespace SkillsChartSideInformationItem {
9
+ namespace propTypes {
10
+ const icon: PropTypes.Requireable<PropTypes.InferProps<any>>;
11
+ const title: PropTypes.Requireable<string>;
12
+ const value: PropTypes.Requireable<string>;
13
+ const legend: PropTypes.Requireable<string>;
14
+ }
15
+ }
16
+ import PropTypes from "prop-types";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/skills-chart-side-information-item/index.js"],"names":[],"mappings":";AAMA;;;;;gBAcC"}
@@ -0,0 +1,38 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ import defaults from 'lodash/fp/defaults';
4
+ import Icon from '../../atom/icon';
5
+ import style from './style.css';
6
+
7
+ const SkillsChartSideInformationItem = ({
8
+ title,
9
+ value,
10
+ legend,
11
+ icon: iconProps
12
+ }) => /*#__PURE__*/React.createElement("div", {
13
+ className: style.InformationElement
14
+ }, /*#__PURE__*/React.createElement("div", {
15
+ className: style.titleContainer
16
+ }, /*#__PURE__*/React.createElement(Icon, defaults({
17
+ preset: 's'
18
+ }, iconProps)), /*#__PURE__*/React.createElement("div", {
19
+ className: style.title
20
+ }, title)), /*#__PURE__*/React.createElement("div", {
21
+ className: style.value
22
+ }, value), /*#__PURE__*/React.createElement("div", {
23
+ className: style.legend
24
+ }, /*#__PURE__*/React.createElement("span", {
25
+ // eslint-disable-next-line react/no-danger
26
+ dangerouslySetInnerHTML: {
27
+ __html: legend
28
+ }
29
+ })));
30
+
31
+ SkillsChartSideInformationItem.propTypes = process.env.NODE_ENV !== "production" ? {
32
+ icon: PropTypes.shape(Icon.propTypes),
33
+ title: PropTypes.string,
34
+ value: PropTypes.string,
35
+ legend: PropTypes.string
36
+ } : {};
37
+ export default SkillsChartSideInformationItem;
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","PropTypes","defaults","Icon","style","SkillsChartSideInformationItem","title","value","legend","icon","iconProps","InformationElement","titleContainer","preset","__html","propTypes","shape","string"],"sources":["../../../src/molecule/skills-chart-side-information-item/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport defaults from 'lodash/fp/defaults';\nimport Icon from '../../atom/icon';\nimport style from './style.css';\n\nconst SkillsChartSideInformationItem = ({title, value, legend, icon: iconProps}) => (\n <div className={style.InformationElement}>\n <div className={style.titleContainer}>\n <Icon {...defaults({preset: 's'}, iconProps)} />\n <div className={style.title}>{title}</div>\n </div>\n <div className={style.value}>{value}</div>\n <div className={style.legend}>\n <span\n // eslint-disable-next-line react/no-danger\n dangerouslySetInnerHTML={{__html: legend}}\n />\n </div>\n </div>\n);\n\nSkillsChartSideInformationItem.propTypes = {\n icon: PropTypes.shape(Icon.propTypes),\n title: PropTypes.string,\n value: PropTypes.string,\n legend: PropTypes.string\n};\n\nexport default SkillsChartSideInformationItem;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AACA,OAAOC,QAAP,MAAqB,oBAArB;AACA,OAAOC,IAAP,MAAiB,iBAAjB;AACA,OAAOC,KAAP,MAAkB,aAAlB;;AAEA,MAAMC,8BAA8B,GAAG,CAAC;EAACC,KAAD;EAAQC,KAAR;EAAeC,MAAf;EAAuBC,IAAI,EAAEC;AAA7B,CAAD,kBACrC;EAAK,SAAS,EAAEN,KAAK,CAACO;AAAtB,gBACE;EAAK,SAAS,EAAEP,KAAK,CAACQ;AAAtB,gBACE,oBAAC,IAAD,EAAUV,QAAQ,CAAC;EAACW,MAAM,EAAE;AAAT,CAAD,EAAgBH,SAAhB,CAAlB,CADF,eAEE;EAAK,SAAS,EAAEN,KAAK,CAACE;AAAtB,GAA8BA,KAA9B,CAFF,CADF,eAKE;EAAK,SAAS,EAAEF,KAAK,CAACG;AAAtB,GAA8BA,KAA9B,CALF,eAME;EAAK,SAAS,EAAEH,KAAK,CAACI;AAAtB,gBACE;EACE;EACA,uBAAuB,EAAE;IAACM,MAAM,EAAEN;EAAT;AAF3B,EADF,CANF,CADF;;AAgBAH,8BAA8B,CAACU,SAA/B,2CAA2C;EACzCN,IAAI,EAAER,SAAS,CAACe,KAAV,CAAgBb,IAAI,CAACY,SAArB,CADmC;EAEzCT,KAAK,EAAEL,SAAS,CAACgB,MAFwB;EAGzCV,KAAK,EAAEN,SAAS,CAACgB,MAHwB;EAIzCT,MAAM,EAAEP,SAAS,CAACgB;AAJuB,CAA3C;AAOA,eAAeZ,8BAAf"}
@@ -0,0 +1,47 @@
1
+ @value colors: "../../variables/colors.css";
2
+ @value cm_grey_50 from colors;
3
+ @value cm_grey_500 from colors;
4
+ @value cm_grey_700 from colors;
5
+
6
+ .InformationElement {
7
+ border-radius: 12px;
8
+ background: cm_grey_50;
9
+ display: flex;
10
+ padding: 24px;
11
+ flex-direction: column;
12
+ justify-content: space-between;
13
+ align-items: flex-start;
14
+ align-self: stretch;
15
+ }
16
+
17
+ .titleContainer {
18
+ display: flex;
19
+ align-items: center;
20
+ margin-bottom: 16px;
21
+ }
22
+
23
+ .title {
24
+ color: cm_grey_500;
25
+ font-family: Gilroy;
26
+ font-size: 16px;
27
+ font-weight: 600;
28
+ line-height: 22px;
29
+ margin-left: 8px;
30
+ }
31
+
32
+ .value {
33
+ color: cm_grey_700;
34
+ font-family: Gilroy;
35
+ font-size: 28px;
36
+ font-style: normal;
37
+ font-weight: 700;
38
+ line-height: 36px;
39
+ }
40
+
41
+ .legend {
42
+ color: cm_grey_700;
43
+ font-family: Gilroy;
44
+ font-size: 14px;
45
+ font-style: normal;
46
+ line-height: 20px;
47
+ }
@@ -0,0 +1,16 @@
1
+ export default SkillsChartSideInformationPanel;
2
+ declare function SkillsChartSideInformationPanel({ sidePanelItems }: {
3
+ sidePanelItems?: any[] | undefined;
4
+ }): JSX.Element;
5
+ declare namespace SkillsChartSideInformationPanel {
6
+ namespace propTypes {
7
+ const sidePanelItems: PropTypes.Requireable<(PropTypes.InferProps<{
8
+ icon: PropTypes.Requireable<PropTypes.InferProps<any>>;
9
+ title: PropTypes.Requireable<string>;
10
+ value: PropTypes.Requireable<string>;
11
+ legend: PropTypes.Requireable<string>;
12
+ }> | null | undefined)[]>;
13
+ }
14
+ }
15
+ import PropTypes from "prop-types";
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/molecule/skills-chart-side-information-panel/index.js"],"names":[],"mappings":";AAMA;;gBAWC"}
@@ -0,0 +1,26 @@
1
+ import _map from "lodash/fp/map";
2
+
3
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
4
+
5
+ import React from 'react';
6
+ import PropTypes from 'prop-types';
7
+ import SkillsChartSideInformationItem from '../skills-chart-side-information-item';
8
+ import style from './style.css';
9
+
10
+ const SkillsChartSideInformationPanel = ({
11
+ sidePanelItems = []
12
+ }) => {
13
+ const sidePanel = _map(sidePanelItemProps => /*#__PURE__*/React.createElement(SkillsChartSideInformationItem, _extends({}, sidePanelItemProps, {
14
+ key: `side-panel-item-${sidePanelItemProps.title}`
15
+ })), sidePanelItems);
16
+
17
+ return /*#__PURE__*/React.createElement("div", {
18
+ className: style.sidePanel
19
+ }, sidePanel);
20
+ };
21
+
22
+ SkillsChartSideInformationPanel.propTypes = process.env.NODE_ENV !== "production" ? {
23
+ sidePanelItems: PropTypes.arrayOf(PropTypes.shape(SkillsChartSideInformationItem.propTypes))
24
+ } : {};
25
+ export default SkillsChartSideInformationPanel;
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","PropTypes","SkillsChartSideInformationItem","style","SkillsChartSideInformationPanel","sidePanelItems","sidePanel","sidePanelItemProps","title","propTypes","arrayOf","shape"],"sources":["../../../src/molecule/skills-chart-side-information-panel/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {map} from 'lodash/fp';\nimport SkillsChartSideInformationItem from '../skills-chart-side-information-item';\nimport style from './style.css';\n\nconst SkillsChartSideInformationPanel = ({sidePanelItems = []}) => {\n const sidePanel = map(\n sidePanelItemProps => (\n <SkillsChartSideInformationItem\n {...sidePanelItemProps}\n key={`side-panel-item-${sidePanelItemProps.title}`}\n />\n ),\n sidePanelItems\n );\n return <div className={style.sidePanel}>{sidePanel}</div>;\n};\n\nSkillsChartSideInformationPanel.propTypes = {\n sidePanelItems: PropTypes.arrayOf(PropTypes.shape(SkillsChartSideInformationItem.propTypes))\n};\n\nexport default SkillsChartSideInformationPanel;\n"],"mappings":";;;;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA,OAAOC,8BAAP,MAA2C,uCAA3C;AACA,OAAOC,KAAP,MAAkB,aAAlB;;AAEA,MAAMC,+BAA+B,GAAG,CAAC;EAACC,cAAc,GAAG;AAAlB,CAAD,KAA2B;EACjE,MAAMC,SAAS,GAAG,KAChBC,kBAAkB,iBAChB,oBAAC,8BAAD,eACMA,kBADN;IAEE,GAAG,EAAG,mBAAkBA,kBAAkB,CAACC,KAAM;EAFnD,GAFc,EAOhBH,cAPgB,CAAlB;;EASA,oBAAO;IAAK,SAAS,EAAEF,KAAK,CAACG;EAAtB,GAAkCA,SAAlC,CAAP;AACD,CAXD;;AAaAF,+BAA+B,CAACK,SAAhC,2CAA4C;EAC1CJ,cAAc,EAAEJ,SAAS,CAACS,OAAV,CAAkBT,SAAS,CAACU,KAAV,CAAgBT,8BAA8B,CAACO,SAA/C,CAAlB;AAD0B,CAA5C;AAIA,eAAeL,+BAAf"}
@@ -0,0 +1,10 @@
1
+ .sidePanel {
2
+ display: flex;
3
+ width: 316px;
4
+ flex-direction: column;
5
+ justify-content: center;
6
+ align-items: flex-start;
7
+ gap: 16px;
8
+ align-self: stretch;
9
+ }
10
+
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/icon/index.js"],"names":[],"mappings":"AAgBA,mDAAoD;AAiB7C,iEACoE;;AAE3E,uDA6BG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/atom/icon/index.js"],"names":[],"mappings":"AAiBA,mDAAoD;AAiB7C,iEACoE;;AAE3E,uDAgCG"}
@@ -5,7 +5,7 @@ exports.getForegroundColor = exports.default = exports.DEFAULT_ICON_COLOR = void
5
5
 
6
6
  var _react = _interopRequireDefault(require("react"));
7
7
 
8
- var _propTypes = _interopRequireDefault(require("prop-types"));
8
+ var _propTypes = _interopRequireWildcard(require("prop-types"));
9
9
 
10
10
  var _reactFontawesome = require("@fortawesome/react-fontawesome");
11
11
 
@@ -23,6 +23,10 @@ var _colorjs = _interopRequireDefault(require("colorjs.io"));
23
23
 
24
24
  var _style = _interopRequireDefault(require("./style.css"));
25
25
 
26
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
27
+
28
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
+
26
30
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
31
 
28
32
  _fontawesomeSvgCore.library.add(_proSolidSvgIcons.fas);
@@ -30,19 +34,20 @@ _fontawesomeSvgCore.library.add(_proSolidSvgIcons.fas);
30
34
  const DEFAULT_PRESET = 'm';
31
35
  const ICON_LUMINOSITY = 32;
32
36
  const DEFAULT_WRAPPER_SIZE = 40;
37
+ const ICON_PADDING = 8;
33
38
  const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';
34
39
  exports.DEFAULT_ICON_COLOR = DEFAULT_ICON_COLOR;
35
40
  const SIZE_CONFIGS = {
36
41
  s: {
37
- faSize: 'sm',
42
+ faSize: 12,
38
43
  wrapperSize: 32
39
44
  },
40
45
  m: {
41
- faSize: 'lg',
46
+ faSize: 16,
42
47
  wrapperSize: DEFAULT_WRAPPER_SIZE
43
48
  },
44
49
  xl: {
45
- faSize: 'xl',
50
+ faSize: 20,
46
51
  wrapperSize: 48
47
52
  }
48
53
  };
@@ -62,10 +67,12 @@ const Icon = /*#__PURE__*/_react.default.memo(function Icon({
62
67
  }) {
63
68
  const effectiveIconColor = iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;
64
69
  const effectiveSize = size ? (0, _merge.default)(SIZE_CONFIGS[DEFAULT_PRESET], size) : (0, _getOr.default)(SIZE_CONFIGS[DEFAULT_PRESET], (0, _toLower.default)(preset), SIZE_CONFIGS);
70
+ const wrapperSize = effectiveSize.wrapperSize - ICON_PADDING * 2;
65
71
  const iconWrapperStyle = {
66
72
  backgroundColor,
67
- width: effectiveSize.wrapperSize,
68
- height: effectiveSize.wrapperSize
73
+ width: wrapperSize,
74
+ height: wrapperSize,
75
+ padding: ICON_PADDING
69
76
  };
70
77
  return /*#__PURE__*/_react.default.createElement("div", {
71
78
  className: _style.default.iconWrapper,
@@ -73,7 +80,7 @@ const Icon = /*#__PURE__*/_react.default.memo(function Icon({
73
80
  }, /*#__PURE__*/_react.default.createElement(_reactFontawesome.FontAwesomeIcon, {
74
81
  icon: `fa-${iconName}`,
75
82
  color: effectiveIconColor,
76
- size: effectiveSize.faSize
83
+ "font-size": effectiveSize.faSize
77
84
  }));
78
85
  });
79
86
 
@@ -83,7 +90,7 @@ Icon.propTypes = process.env.NODE_ENV !== "production" ? {
83
90
  backgroundColor: _propTypes.default.string,
84
91
  preset: _propTypes.default.oneOf(['s', 'm', 'xl']),
85
92
  size: _propTypes.default.shape({
86
- faSize: _propTypes.default.oneOf(['2xs', 'xs', 'sm', 'lg', 'xl', '2xl', '1x', '2x', '3x', '4x', '5x', '6x', '7x', '8x', '9x', '10x']),
93
+ faSize: _propTypes.number,
87
94
  wrapperSize: _propTypes.default.number
88
95
  })
89
96
  } : {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["library","add","fas","DEFAULT_PRESET","ICON_LUMINOSITY","DEFAULT_WRAPPER_SIZE","DEFAULT_ICON_COLOR","SIZE_CONFIGS","s","faSize","wrapperSize","m","xl","getForegroundColor","backgroundColor","Color","to","set","l","toString","Icon","React","memo","iconName","iconColor","preset","size","effectiveIconColor","effectiveSize","merge","getOr","toLower","iconWrapperStyle","width","height","style","iconWrapper","propTypes","PropTypes","string","isRequired","oneOf","shape","number"],"sources":["../../../src/atom/icon/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {library} from '@fortawesome/fontawesome-svg-core';\nimport toLower from 'lodash/fp/toLower';\nimport merge from 'lodash/fp/merge';\nimport getOr from 'lodash/fp/getOr';\nimport Color from 'colorjs.io';\nimport style from './style.css';\n\nlibrary.add(fas);\n\nconst DEFAULT_PRESET = 'm';\nconst ICON_LUMINOSITY = 32;\nconst DEFAULT_WRAPPER_SIZE = 40;\nexport const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';\n\nconst SIZE_CONFIGS = {\n s: {\n faSize: 'sm',\n wrapperSize: 32\n },\n m: {\n faSize: 'lg',\n wrapperSize: DEFAULT_WRAPPER_SIZE\n },\n xl: {\n faSize: 'xl',\n wrapperSize: 48\n }\n};\n\nexport const getForegroundColor = backgroundColor =>\n new Color(backgroundColor).to('hsl').set({l: ICON_LUMINOSITY}).toString();\n\nconst Icon = React.memo(function Icon({\n iconName,\n iconColor,\n backgroundColor,\n preset = DEFAULT_PRESET,\n size\n}) {\n const effectiveIconColor =\n iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;\n\n const effectiveSize = size\n ? merge(SIZE_CONFIGS[DEFAULT_PRESET], size)\n : getOr(SIZE_CONFIGS[DEFAULT_PRESET], toLower(preset), SIZE_CONFIGS);\n\n const iconWrapperStyle = {\n backgroundColor,\n width: effectiveSize.wrapperSize,\n height: effectiveSize.wrapperSize\n };\n\n return (\n <div className={style.iconWrapper} style={iconWrapperStyle}>\n <FontAwesomeIcon\n icon={`fa-${iconName}`}\n color={effectiveIconColor}\n size={effectiveSize.faSize}\n />\n </div>\n );\n});\n\nIcon.propTypes = {\n iconName: PropTypes.string.isRequired,\n iconColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n preset: PropTypes.oneOf(['s', 'm', 'xl']),\n size: PropTypes.shape({\n faSize: PropTypes.oneOf([\n '2xs',\n 'xs',\n 'sm',\n 'lg',\n 'xl',\n '2xl',\n '1x',\n '2x',\n '3x',\n '4x',\n '5x',\n '6x',\n '7x',\n '8x',\n '9x',\n '10x'\n ]),\n wrapperSize: PropTypes.number\n })\n};\n\nexport default Icon;\n"],"mappings":";;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEAA,2BAAA,CAAQC,GAAR,CAAYC,qBAAZ;;AAEA,MAAMC,cAAc,GAAG,GAAvB;AACA,MAAMC,eAAe,GAAG,EAAxB;AACA,MAAMC,oBAAoB,GAAG,EAA7B;AACO,MAAMC,kBAAkB,GAAG,iBAA3B;;AAEP,MAAMC,YAAY,GAAG;EACnBC,CAAC,EAAE;IACDC,MAAM,EAAE,IADP;IAEDC,WAAW,EAAE;EAFZ,CADgB;EAKnBC,CAAC,EAAE;IACDF,MAAM,EAAE,IADP;IAEDC,WAAW,EAAEL;EAFZ,CALgB;EASnBO,EAAE,EAAE;IACFH,MAAM,EAAE,IADN;IAEFC,WAAW,EAAE;EAFX;AATe,CAArB;;AAeO,MAAMG,kBAAkB,GAAGC,eAAe,IAC/C,IAAIC,gBAAJ,CAAUD,eAAV,EAA2BE,EAA3B,CAA8B,KAA9B,EAAqCC,GAArC,CAAyC;EAACC,CAAC,EAAEd;AAAJ,CAAzC,EAA+De,QAA/D,EADK;;;;AAGP,MAAMC,IAAI,gBAAGC,cAAA,CAAMC,IAAN,CAAW,SAASF,IAAT,CAAc;EACpCG,QADoC;EAEpCC,SAFoC;EAGpCV,eAHoC;EAIpCW,MAAM,GAAGtB,cAJ2B;EAKpCuB;AALoC,CAAd,EAMrB;EACD,MAAMC,kBAAkB,GACtBH,SAAS,IAAIV,eAAb,GAA+BD,kBAAkB,CAACC,eAAD,CAAjD,GAAqER,kBADvE;EAGA,MAAMsB,aAAa,GAAGF,IAAI,GACtB,IAAAG,cAAA,EAAMtB,YAAY,CAACJ,cAAD,CAAlB,EAAoCuB,IAApC,CADsB,GAEtB,IAAAI,cAAA,EAAMvB,YAAY,CAACJ,cAAD,CAAlB,EAAoC,IAAA4B,gBAAA,EAAQN,MAAR,CAApC,EAAqDlB,YAArD,CAFJ;EAIA,MAAMyB,gBAAgB,GAAG;IACvBlB,eADuB;IAEvBmB,KAAK,EAAEL,aAAa,CAAClB,WAFE;IAGvBwB,MAAM,EAAEN,aAAa,CAAClB;EAHC,CAAzB;EAMA,oBACE;IAAK,SAAS,EAAEyB,cAAA,CAAMC,WAAtB;IAAmC,KAAK,EAAEJ;EAA1C,gBACE,6BAAC,iCAAD;IACE,IAAI,EAAG,MAAKT,QAAS,EADvB;IAEE,KAAK,EAAEI,kBAFT;IAGE,IAAI,EAAEC,aAAa,CAACnB;EAHtB,EADF,CADF;AASD,CA7BY,CAAb;;AA+BAW,IAAI,CAACiB,SAAL,2CAAiB;EACfd,QAAQ,EAAEe,kBAAA,CAAUC,MAAV,CAAiBC,UADZ;EAEfhB,SAAS,EAAEc,kBAAA,CAAUC,MAFN;EAGfzB,eAAe,EAAEwB,kBAAA,CAAUC,MAHZ;EAIfd,MAAM,EAAEa,kBAAA,CAAUG,KAAV,CAAgB,CAAC,GAAD,EAAM,GAAN,EAAW,IAAX,CAAhB,CAJO;EAKff,IAAI,EAAEY,kBAAA,CAAUI,KAAV,CAAgB;IACpBjC,MAAM,EAAE6B,kBAAA,CAAUG,KAAV,CAAgB,CACtB,KADsB,EAEtB,IAFsB,EAGtB,IAHsB,EAItB,IAJsB,EAKtB,IALsB,EAMtB,KANsB,EAOtB,IAPsB,EAQtB,IARsB,EAStB,IATsB,EAUtB,IAVsB,EAWtB,IAXsB,EAYtB,IAZsB,EAatB,IAbsB,EActB,IAdsB,EAetB,IAfsB,EAgBtB,KAhBsB,CAAhB,CADY;IAmBpB/B,WAAW,EAAE4B,kBAAA,CAAUK;EAnBH,CAAhB;AALS,CAAjB;eA4BevB,I"}
1
+ {"version":3,"file":"index.js","names":["library","add","fas","DEFAULT_PRESET","ICON_LUMINOSITY","DEFAULT_WRAPPER_SIZE","ICON_PADDING","DEFAULT_ICON_COLOR","SIZE_CONFIGS","s","faSize","wrapperSize","m","xl","getForegroundColor","backgroundColor","Color","to","set","l","toString","Icon","React","memo","iconName","iconColor","preset","size","effectiveIconColor","effectiveSize","merge","getOr","toLower","iconWrapperStyle","width","height","padding","style","iconWrapper","propTypes","PropTypes","string","isRequired","oneOf","shape","number"],"sources":["../../../src/atom/icon/index.js"],"sourcesContent":["import React from 'react';\nimport PropTypes, {number} from 'prop-types';\nimport {FontAwesomeIcon} from '@fortawesome/react-fontawesome';\nimport {fas} from '@fortawesome/pro-solid-svg-icons';\nimport {library} from '@fortawesome/fontawesome-svg-core';\nimport toLower from 'lodash/fp/toLower';\nimport merge from 'lodash/fp/merge';\nimport getOr from 'lodash/fp/getOr';\nimport Color from 'colorjs.io';\nimport style from './style.css';\n\nlibrary.add(fas);\n\nconst DEFAULT_PRESET = 'm';\nconst ICON_LUMINOSITY = 32;\nconst DEFAULT_WRAPPER_SIZE = 40;\nconst ICON_PADDING = 8;\nexport const DEFAULT_ICON_COLOR = 'hsl(0, 0%, 32%)';\n\nconst SIZE_CONFIGS = {\n s: {\n faSize: 12,\n wrapperSize: 32\n },\n m: {\n faSize: 16,\n wrapperSize: DEFAULT_WRAPPER_SIZE\n },\n xl: {\n faSize: 20,\n wrapperSize: 48\n }\n};\n\nexport const getForegroundColor = backgroundColor =>\n new Color(backgroundColor).to('hsl').set({l: ICON_LUMINOSITY}).toString();\n\nconst Icon = React.memo(function Icon({\n iconName,\n iconColor,\n backgroundColor,\n preset = DEFAULT_PRESET,\n size\n}) {\n const effectiveIconColor =\n iconColor || backgroundColor ? getForegroundColor(backgroundColor) : DEFAULT_ICON_COLOR;\n\n const effectiveSize = size\n ? merge(SIZE_CONFIGS[DEFAULT_PRESET], size)\n : getOr(SIZE_CONFIGS[DEFAULT_PRESET], toLower(preset), SIZE_CONFIGS);\n\n const wrapperSize = effectiveSize.wrapperSize - ICON_PADDING * 2;\n\n const iconWrapperStyle = {\n backgroundColor,\n width: wrapperSize,\n height: wrapperSize,\n padding: ICON_PADDING\n };\n\n return (\n <div className={style.iconWrapper} style={iconWrapperStyle}>\n <FontAwesomeIcon\n icon={`fa-${iconName}`}\n color={effectiveIconColor}\n font-size={effectiveSize.faSize}\n />\n </div>\n );\n});\n\nIcon.propTypes = {\n iconName: PropTypes.string.isRequired,\n iconColor: PropTypes.string,\n backgroundColor: PropTypes.string,\n preset: PropTypes.oneOf(['s', 'm', 'xl']),\n size: PropTypes.shape({\n faSize: number,\n wrapperSize: PropTypes.number\n })\n};\n\nexport default Icon;\n"],"mappings":";;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;AAEAA,2BAAA,CAAQC,GAAR,CAAYC,qBAAZ;;AAEA,MAAMC,cAAc,GAAG,GAAvB;AACA,MAAMC,eAAe,GAAG,EAAxB;AACA,MAAMC,oBAAoB,GAAG,EAA7B;AACA,MAAMC,YAAY,GAAG,CAArB;AACO,MAAMC,kBAAkB,GAAG,iBAA3B;;AAEP,MAAMC,YAAY,GAAG;EACnBC,CAAC,EAAE;IACDC,MAAM,EAAE,EADP;IAEDC,WAAW,EAAE;EAFZ,CADgB;EAKnBC,CAAC,EAAE;IACDF,MAAM,EAAE,EADP;IAEDC,WAAW,EAAEN;EAFZ,CALgB;EASnBQ,EAAE,EAAE;IACFH,MAAM,EAAE,EADN;IAEFC,WAAW,EAAE;EAFX;AATe,CAArB;;AAeO,MAAMG,kBAAkB,GAAGC,eAAe,IAC/C,IAAIC,gBAAJ,CAAUD,eAAV,EAA2BE,EAA3B,CAA8B,KAA9B,EAAqCC,GAArC,CAAyC;EAACC,CAAC,EAAEf;AAAJ,CAAzC,EAA+DgB,QAA/D,EADK;;;;AAGP,MAAMC,IAAI,gBAAGC,cAAA,CAAMC,IAAN,CAAW,SAASF,IAAT,CAAc;EACpCG,QADoC;EAEpCC,SAFoC;EAGpCV,eAHoC;EAIpCW,MAAM,GAAGvB,cAJ2B;EAKpCwB;AALoC,CAAd,EAMrB;EACD,MAAMC,kBAAkB,GACtBH,SAAS,IAAIV,eAAb,GAA+BD,kBAAkB,CAACC,eAAD,CAAjD,GAAqER,kBADvE;EAGA,MAAMsB,aAAa,GAAGF,IAAI,GACtB,IAAAG,cAAA,EAAMtB,YAAY,CAACL,cAAD,CAAlB,EAAoCwB,IAApC,CADsB,GAEtB,IAAAI,cAAA,EAAMvB,YAAY,CAACL,cAAD,CAAlB,EAAoC,IAAA6B,gBAAA,EAAQN,MAAR,CAApC,EAAqDlB,YAArD,CAFJ;EAIA,MAAMG,WAAW,GAAGkB,aAAa,CAAClB,WAAd,GAA4BL,YAAY,GAAG,CAA/D;EAEA,MAAM2B,gBAAgB,GAAG;IACvBlB,eADuB;IAEvBmB,KAAK,EAAEvB,WAFgB;IAGvBwB,MAAM,EAAExB,WAHe;IAIvByB,OAAO,EAAE9B;EAJc,CAAzB;EAOA,oBACE;IAAK,SAAS,EAAE+B,cAAA,CAAMC,WAAtB;IAAmC,KAAK,EAAEL;EAA1C,gBACE,6BAAC,iCAAD;IACE,IAAI,EAAG,MAAKT,QAAS,EADvB;IAEE,KAAK,EAAEI,kBAFT;IAGE,aAAWC,aAAa,CAACnB;EAH3B,EADF,CADF;AASD,CAhCY,CAAb;;AAkCAW,IAAI,CAACkB,SAAL,2CAAiB;EACff,QAAQ,EAAEgB,kBAAA,CAAUC,MAAV,CAAiBC,UADZ;EAEfjB,SAAS,EAAEe,kBAAA,CAAUC,MAFN;EAGf1B,eAAe,EAAEyB,kBAAA,CAAUC,MAHZ;EAIff,MAAM,EAAEc,kBAAA,CAAUG,KAAV,CAAgB,CAAC,GAAD,EAAM,GAAN,EAAW,IAAX,CAAhB,CAJO;EAKfhB,IAAI,EAAEa,kBAAA,CAAUI,KAAV,CAAgB;IACpBlC,MAAM,EAAEmC,iBADY;IAEpBlC,WAAW,EAAE6B,kBAAA,CAAUK;EAFH,CAAhB;AALS,CAAjB;eAWexB,I"}
@@ -1,5 +1,4 @@
1
1
  .iconWrapper {
2
- padding: 8px;
3
2
  border-radius: 8px;
4
3
  display: flex;
5
4
  align-items: center;