reactive-bulma 1.20.0 → 1.21.0

Sign up to get free protection for your applications and to get access to all the features.
package/README.md CHANGED
@@ -15,8 +15,8 @@ Component library based on React, Bulma, Typescript and Rollup
15
15
 
16
16
  ## Table of contents
17
17
 
18
- - [Status](#status)
19
18
  - [Purpose](#purpose)
19
+ - [Status](#status)
20
20
  - [Dependencies](#dependencies)
21
21
  - [Quick start](#quick-start)
22
22
  - [Folder structure](#folder-structure)
@@ -29,12 +29,12 @@ Component library based on React, Bulma, Typescript and Rollup
29
29
  - [License](#license)
30
30
 
31
31
  ## Purpose
32
- After studying [a Udemy course about Typescript](https://github.com/NicolasOmar/typescript-practice), I wanted to start a new project to practice my new knowledge in a meaningful tool. Therefore, I started this project to understand how to create a component library and investigate the best ways to maintain and nourish it as any professional-level alternatives.
32
+ After studying [an Udemy course about Typescript](https://github.com/NicolasOmar/typescript-practice), I wanted to start a new project to practice my new knowledge in a meaningful tool. Therefore, I started this project to understand how to create a component library and investigate the best ways to maintain and nourish it as any professional-level alternatives.
33
33
 
34
34
  ## Status
35
35
 
36
- ![Npm Version][badge-npm-version]
37
- ![Npm Bundle Size][badge-npm-size]
36
+ [![Npm Version][badge-npm-version]][link-npm]
37
+ [![Npm Bundle Size][badge-npm-size]][link-npm]
38
38
  [![Npm Downloads][badge-npm-downloads]][link-npm-downloads]
39
39
  [![Netlify Status][badge-netlify-status]][link-netlify-status]
40
40
  [![Code Coverage][badge-code-coverage]][link-code-coverage]
@@ -43,14 +43,15 @@ After studying [a Udemy course about Typescript](https://github.com/NicolasOmar/
43
43
  [![Security Rating][badge-soundcloud-security]][link-soundcloud-status]
44
44
  [![Technical Debt][badge-soundcloud-tech-debt]][link-soundcloud-status]
45
45
  [![Known Vulnerabilities][badge-snyk-status]][link-snyk-status]
46
- ![GitHub Repo stars][badge-github-repo-stars]
47
- ![GitHub commit activity][badge-github-commits]
48
- ![GitHub last commit][badge-github-last-commit]
46
+ [![GitHub Repo stars][badge-github-repo-stars]][link-github-stars]
47
+ [![GitHub commit activity][badge-github-commits]][link-github-commit-activity]
48
+ [![GitHub last commit][badge-github-last-commit]][link-github-commit-history]
49
49
  [![Semantic Commits][badge-semantic-commits]][link-semantic-commits]
50
50
 
51
51
  [badge-npm-version]: https://img.shields.io/github/package-json/v/nicolasomar/reactive-bulma?label=npm%20version&logo=npm&labelColor=535353&color=success&style=flat
52
52
  [badge-npm-size]: https://img.shields.io/bundlephobia/min/reactive-bulma?label=bundle%20size&labelColor=535353&logo=npm&style=flat
53
53
  [badge-npm-downloads]: https://img.shields.io/npm/dm/reactive-bulma?label=downloads&labelColor=535353&style=flat&logo=npm
54
+ [link-npm]: https://www.npmjs.com/package/reactive-bulma
54
55
  [link-npm-downloads]: https://www.npmjs.com/package/reactive-bulma?activeTab=versions
55
56
  [badge-netlify-status]: https://api.netlify.com/api/v1/badges/3101f2b5-0e28-4734-b749-ebb0e3e413c6/deploy-status
56
57
  [link-netlify-status]: https://app.netlify.com/sites/reactivebulma/deploys
@@ -66,24 +67,27 @@ After studying [a Udemy course about Typescript](https://github.com/NicolasOmar/
66
67
  [badge-github-repo-stars]: https://img.shields.io/github/stars/nicolasomar/reactive-bulma?label=stars&logo=github&labelColor=535353&style=flat
67
68
  [badge-github-commits]: https://img.shields.io/github/commit-activity/m/nicolasomar/reactive-bulma?logo=github
68
69
  [badge-github-last-commit]: https://img.shields.io/github/last-commit/nicolasomar/reactive-bulma?logo=github
70
+ [link-github-stars]: https://github.com/NicolasOmar/reactive-bulma/activity
71
+ [link-github-commit-activity]: https://github.com/NicolasOmar/reactive-bulma/activity
72
+ [link-github-commit-history]: https://github.com/NicolasOmar/reactive-bulma/commits/main
69
73
  [badge-semantic-commits]: https://img.shields.io/badge/using-conventional%20commits-e10079?logo=conventional-commits
70
74
  [link-semantic-commits]: https://github.com/semantic-release/semantic-release
71
75
 
72
76
  ## Dependencies
73
77
 
74
- ![react dependency][badge-dependency-react]
75
- ![bulma dependency][badge-dependency-bulma]
76
- ![material design dependency][badge-dependency-material-design]
77
- ![typescript dependency][badge-dependency-typescript]
78
- ![rollup dependency][badge-dependency-rollup]
79
- ![storybook dependency][badge-dependency-storybook]
80
- ![semantic release dependency][badge-dependency-semantic-release]
81
- ![babel dependency][badge-dependency-babel]
82
- ![jest dependency][badge-dependency-jest]
83
- ![react testing library dependency][badge-dependency-react-testing]
84
- ![prettier dependency][badge-dependency-prettier]
85
- ![eslint dependency][badge-dependency-eslint]
86
- ![husky dependency][badge-dependency-husky]
78
+ [![react dependency][badge-dependency-react]][link-package-dependencies]
79
+ [![bulma dependency][badge-dependency-bulma]][link-package-dependencies]
80
+ [![material design dependency][badge-dependency-material-design]][link-package-dependencies]
81
+ [![typescript dependency][badge-dependency-typescript]][link-package-dependencies]
82
+ [![rollup dependency][badge-dependency-rollup]][link-package-dependencies]
83
+ [![storybook dependency][badge-dependency-storybook]][link-package-dependencies]
84
+ [![semantic release dependency][badge-dependency-semantic-release]][link-package-dependencies]
85
+ [![babel dependency][badge-dependency-babel]][link-package-dependencies]
86
+ [![jest dependency][badge-dependency-jest]][link-package-dependencies]
87
+ [![react testing library dependency][badge-dependency-react-testing]][link-package-dependencies]
88
+ [![prettier dependency][badge-dependency-prettier]][link-package-dependencies]
89
+ [![eslint dependency][badge-dependency-eslint]][link-package-dependencies]
90
+ [![husky dependency][badge-dependency-husky]][link-package-dependencies]
87
91
 
88
92
  [badge-dependency-react]: https://img.shields.io/github/package-json/dependency-version/nicolasomar/reactive-bulma/dev/react/main?logo=react
89
93
  [badge-dependency-bulma]: https://img.shields.io/github/package-json/dependency-version/nicolasomar/reactive-bulma/dev/bulma/main?logo=bulma
@@ -98,6 +102,7 @@ After studying [a Udemy course about Typescript](https://github.com/NicolasOmar/
98
102
  [badge-dependency-prettier]: https://img.shields.io/github/package-json/dependency-version/nicolasomar/reactive-bulma/dev/prettier/main?logo=prettier
99
103
  [badge-dependency-eslint]: https://img.shields.io/github/package-json/dependency-version/nicolasomar/reactive-bulma/dev/eslint/main?logo=eslint
100
104
  [badge-dependency-husky]: https://img.shields.io/github/package-json/dependency-version/nicolasomar/reactive-bulma/dev/husky/main?logo=husky
105
+ [link-package-dependencies]: https://github.com/NicolasOmar/reactive-bulma/blob/main/package.json
101
106
 
102
107
  ## Quick start
103
108
 
package/dist/cjs/index.js CHANGED
@@ -2835,15 +2835,15 @@ var reactExports = react.exports;
2835
2835
  var React = /*@__PURE__*/getDefaultExportFromCjs(reactExports);
2836
2836
 
2837
2837
  /**
2838
- * @param { Array<string | null> } _classes Required. Array of classNames on `string` (or `null`) values
2838
+ * @param { Array<string | null> } _classes `Required`. Array of classNames on `string` (or `null`) values
2839
2839
  * @returns { string } A single string product of merge all classNames, separated by spaces
2840
2840
  */
2841
2841
  const parseClasses = (_classes) => _classes.filter(_class => _class).join(' ');
2842
2842
  /**
2843
2843
  * @param { ParseTestIdProps } config Configuration object
2844
- * @param { string } config.tag Required. Component tag used between to build the final testId string.
2845
- * @param { string } config.parsedClasses Required. A single string of previously parsed classes what will be joined with `tag` property.
2846
- * @param { { usedRegExp?: RegExp, regExpReplacer?: string }[] } config.rules Optional. An array of objects used with a regular expression to check each case and a replacer for each one, giving oportunity to handle specific cases of component class names.
2844
+ * @param { string } config.tag `Required`. Component tag used between to build the final testId string.
2845
+ * @param { string } config.parsedClasses `Required`. A single string of previously parsed classes what will be joined with `tag` property.
2846
+ * @param { { regExp?: RegExp, replacer?: string }[] } config.rules Optional. An array of objects used with a regular expression to check each case and a replacer for each one, giving oportunity to handle specific cases of component class names.
2847
2847
  * @returns A single string product of merge all classNames, separated by `separator` value
2848
2848
  */
2849
2849
  const parseTestId = (config) => {
@@ -2851,7 +2851,7 @@ const parseTestId = (config) => {
2851
2851
  let fixedClassString = config.parsedClasses;
2852
2852
  if (config.rules) {
2853
2853
  for (const rule of config.rules) {
2854
- fixedClassString = fixedClassString.replace(rule.usedRegExp, rule.regExpReplacer);
2854
+ fixedClassString = fixedClassString.replace(rule.regExp, rule.replacer);
2855
2855
  }
2856
2856
  }
2857
2857
  else {
@@ -2862,7 +2862,7 @@ const parseTestId = (config) => {
2862
2862
  return `test-${config.tag}${fixedClassString.replace(/ /gm, (_a = config.separator) !== null && _a !== void 0 ? _a : '')}`;
2863
2863
  };
2864
2864
 
2865
- const Button = ({ text = null, type = 'button', testId = null, style = null, color = 'is-primary', isLightColor = false, isInvertedColor = false, isOutlined = false, isRounded = false, isLoading = false, isDisabled = false, isStatic = false, size = null, onClick = null }) => {
2865
+ const Button = ({ testId = null, cssClasses = null, style = null, type = 'button', text = null, isDisabled = false, color = 'is-primary', isLightColor = false, isInvertedColor = false, isOutlined = false, isRounded = false, isLoading = false, isStatic = false, size = null, onClick = null }) => {
2866
2866
  const buttonClasses = parseClasses([
2867
2867
  'button',
2868
2868
  color,
@@ -2872,72 +2872,88 @@ const Button = ({ text = null, type = 'button', testId = null, style = null, col
2872
2872
  isRounded ? 'is-rounded' : null,
2873
2873
  isLoading ? 'is-loading' : null,
2874
2874
  isStatic ? 'is-static' : null,
2875
- size
2875
+ size,
2876
+ cssClasses
2876
2877
  ]);
2877
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({ tag: 'button', parsedClasses: buttonClasses });
2878
- return (React.createElement("button", { "data-testid": _testId, type: type, className: buttonClasses, style: style !== null && style !== void 0 ? style : undefined, disabled: isDisabled !== null && isDisabled !== void 0 ? isDisabled : false, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }, text));
2878
+ const buttonTestId = testId !== null && testId !== void 0 ? testId : parseTestId({ tag: 'button', parsedClasses: buttonClasses });
2879
+ return (React.createElement("button", { "data-testid": buttonTestId, type: type, className: buttonClasses, style: style !== null && style !== void 0 ? style : undefined, disabled: isDisabled !== null && isDisabled !== void 0 ? isDisabled : false, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }, text));
2879
2880
  };
2880
2881
 
2881
- const Column = ({ testId = null, style = null, size = null, offset = null, isNarrow = false, children = null }) => {
2882
+ const Column = ({ testId = null, cssClasses = null, style = null, children = null, size = null, offset = null, isNarrow = false }) => {
2882
2883
  const columnClasses = parseClasses([
2883
2884
  'column',
2884
2885
  size,
2885
2886
  offset,
2886
- isNarrow ? 'is-narrow' : null
2887
+ isNarrow ? 'is-narrow' : null,
2888
+ cssClasses
2887
2889
  ]);
2888
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({ tag: 'column', parsedClasses: columnClasses });
2889
- return (React.createElement("section", { "data-testid": _testId, className: columnClasses, style: style !== null && style !== void 0 ? style : undefined }, children));
2890
+ const columnTestId = testId !== null && testId !== void 0 ? testId : parseTestId({ tag: 'column', parsedClasses: columnClasses });
2891
+ return (React.createElement("section", { "data-testid": columnTestId, className: columnClasses, style: style !== null && style !== void 0 ? style : undefined }, children));
2890
2892
  };
2891
2893
 
2892
- const ProgressBar = ({ value = 0, max = 100, testId = null, style = null, color = 'is-primary', size = null, isLoading = false }) => {
2894
+ const ProgressBar = ({ testId = null, cssClasses = null, style = null, value = 0, max = 100, color = 'is-primary', size = null, isLoading = false }) => {
2893
2895
  const fixedValue = value > max || value < 0 ? 0 : value;
2894
- const progressClasses = parseClasses(['progress', color, size]);
2895
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
2896
+ const progressClasses = parseClasses([
2897
+ 'progress',
2898
+ color,
2899
+ size,
2900
+ cssClasses
2901
+ ]);
2902
+ const progressTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
2896
2903
  tag: 'progress',
2897
2904
  parsedClasses: progressClasses
2898
2905
  });
2899
- return (React.createElement("progress", { "data-testid": _testId, className: progressClasses, style: style !== null && style !== void 0 ? style : undefined, value: isLoading ? undefined : value, max: max }, `${isLoading ? 0 : fixedValue}%`));
2906
+ return (React.createElement("progress", { "data-testid": progressTestId, className: progressClasses, style: style !== null && style !== void 0 ? style : undefined, value: isLoading ? undefined : value, max: max }, `${isLoading ? 0 : fixedValue}%`));
2900
2907
  };
2901
2908
 
2902
- const Block = ({ testId = 'test-block', style = null, children = null }) => children ? (React.createElement("section", { "data-testid": testId, className: 'block', style: style !== null && style !== void 0 ? style : undefined }, children)) : null;
2909
+ const Block = ({ testId = 'test-block', cssClasses = 'block', style = null, children = null }) => children ? (React.createElement("section", { "data-testid": testId, className: cssClasses, style: style !== null && style !== void 0 ? style : undefined }, children)) : null;
2903
2910
 
2904
- const Tag = ({ text, testId = null, style = null, color = null, isLight = null, isRounded = null, size = null, withDelete = false, withAddon = false, addonText = null, addonColor = null, onDeleteClick = null }) => {
2905
- const tagLabel = withAddon ? 'tags' : 'tag';
2911
+ const Tag = ({ testId = null, containerTestId = null, cssClasses = null, containerCssClasses = null, style = null, containerStyle = null, text, withDelete = false, withAddon = false, addonText = null, color = null, isLight = null, isRounded = null, size = null, addonColor = null, onDeleteClick = null }) => {
2912
+ const tagContainerClasses = parseClasses([
2913
+ 'tags',
2914
+ 'has-addons',
2915
+ size ? size.replace('is-', 'are-') : null,
2916
+ containerCssClasses
2917
+ ]);
2906
2918
  const tagClasses = parseClasses([
2907
2919
  'tag',
2908
2920
  color,
2909
2921
  isLight && !withAddon ? 'is-light' : null,
2910
2922
  isRounded && !withAddon ? 'is-rounded' : null,
2911
- size
2912
- ]);
2913
- const tagsWrapperClasses = parseClasses([
2914
- 'tags',
2915
- 'has-addons',
2916
- size ? size.replace('is-', 'are-') : null
2923
+ size,
2924
+ cssClasses
2917
2925
  ]);
2918
- const addonTagClasses = parseClasses(['tag', addonColor]);
2919
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
2926
+ const tagAddonClasses = parseClasses(['tag', addonColor]);
2927
+ const tagLabel = withAddon ? 'tags' : 'tag';
2928
+ const tagTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
2920
2929
  tag: tagLabel,
2921
- parsedClasses: withAddon ? tagsWrapperClasses : tagClasses,
2930
+ parsedClasses: withAddon ? tagContainerClasses : tagClasses,
2922
2931
  separator: withAddon ? '-' : ''
2923
2932
  });
2924
- return withAddon ? (React.createElement("section", { "data-testid": _testId, style: style !== null && style !== void 0 ? style : undefined, className: tagsWrapperClasses },
2925
- React.createElement("span", { className: tagClasses }, text),
2926
- withDelete ? (React.createElement("a", { "data-testid": `${_testId}-delete`, className: 'tag is-delete', onClick: onDeleteClick !== null && onDeleteClick !== void 0 ? onDeleteClick : undefined })) : (React.createElement("span", { className: addonTagClasses }, addonText)))) : (React.createElement("span", { "data-testid": _testId, style: style !== null && style !== void 0 ? style : undefined, className: tagClasses },
2933
+ const tagContainerTestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : `${tagTestId}-container`;
2934
+ const tagDeleteTestId = `${tagTestId}-delete`;
2935
+ return withAddon ? (React.createElement("section", { "data-testid": tagContainerTestId, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined, className: tagContainerClasses },
2936
+ React.createElement("span", { "data-testid": tagTestId, className: tagClasses }, text),
2937
+ withDelete ? (React.createElement("a", { "data-testid": tagDeleteTestId, className: 'tag is-delete', onClick: onDeleteClick !== null && onDeleteClick !== void 0 ? onDeleteClick : undefined })) : (React.createElement("span", { className: tagAddonClasses }, addonText)))) : (React.createElement("span", { "data-testid": tagTestId, style: style !== null && style !== void 0 ? style : undefined, className: tagClasses },
2927
2938
  text,
2928
- withDelete ? (React.createElement("button", { "data-testid": `${_testId}-delete`, className: 'delete', onClick: onDeleteClick !== null && onDeleteClick !== void 0 ? onDeleteClick : undefined })) : null));
2939
+ withDelete ? (React.createElement("button", { "data-testid": tagDeleteTestId, className: 'delete', onClick: onDeleteClick !== null && onDeleteClick !== void 0 ? onDeleteClick : undefined })) : null));
2929
2940
  };
2930
2941
 
2931
- const Box = ({ testId = 'test-box', style = null, children = null }) => children ? (React.createElement("section", { "data-testid": testId, className: 'box', style: style !== null && style !== void 0 ? style : undefined }, children)) : null;
2942
+ const Box = ({ testId = 'test-box', cssClasses = 'box', style = null, children = null }) => children ? (React.createElement("section", { "data-testid": testId, className: cssClasses, style: style !== null && style !== void 0 ? style : undefined }, children)) : null;
2932
2943
 
2933
2944
  const renderTitleSection = (section) => {
2934
- var _a, _b, _c;
2945
+ var _a, _b;
2946
+ if (!section)
2947
+ return null;
2948
+ const { type, size, isSpaced, cssClasses } = section;
2935
2949
  const sectionClasses = parseClasses([
2936
- section === null || section === void 0 ? void 0 : section.prop,
2937
- (_a = section === null || section === void 0 ? void 0 : section.size) !== null && _a !== void 0 ? _a : 'is-6',
2938
- (section === null || section === void 0 ? void 0 : section.prop) === 'title' && (section === null || section === void 0 ? void 0 : section.isSpaced) ? 'is-spaced' : null
2950
+ type,
2951
+ size !== null && size !== void 0 ? size : null,
2952
+ type === 'title' && isSpaced ? 'is-spaced' : null,
2953
+ cssClasses
2939
2954
  ]);
2940
- return section ? (React.createElement("p", { "data-testid": (_b = section === null || section === void 0 ? void 0 : section.testId) !== null && _b !== void 0 ? _b : `${section === null || section === void 0 ? void 0 : section.prop}-test`, className: sectionClasses, style: (_c = section.style) !== null && _c !== void 0 ? _c : undefined }, section === null || section === void 0 ? void 0 : section.text)) : null;
2955
+ const sectionTestId = (_a = section === null || section === void 0 ? void 0 : section.testId) !== null && _a !== void 0 ? _a : `${section === null || section === void 0 ? void 0 : section.type}-test`;
2956
+ return (React.createElement("p", { "data-testid": sectionTestId, className: sectionClasses, style: (_b = section === null || section === void 0 ? void 0 : section.style) !== null && _b !== void 0 ? _b : undefined }, section === null || section === void 0 ? void 0 : section.text));
2941
2957
  };
2942
2958
  const Title = ({ main, secondary }) => (React.createElement(React.Fragment, null,
2943
2959
  renderTitleSection(main),
@@ -2958,156 +2974,215 @@ const generateIconContainer = (icon, color) => {
2958
2974
  parsedClasses: (_a = color === null || color === void 0 ? void 0 : color.toString()) !== null && _a !== void 0 ? _a : '',
2959
2975
  rules: [
2960
2976
  {
2961
- usedRegExp: /has-text/gm,
2962
- regExpReplacer: ''
2977
+ regExp: /has-text/gm,
2978
+ replacer: ''
2963
2979
  }
2964
2980
  ]
2965
2981
  });
2966
2982
  return (React.createElement("span", { "data-testid": containerTestId, className: containerClasses }, icon));
2967
2983
  };
2968
- const Icon = ({ iconLabel, testId = null, text = null, style = null, color = null, size = null, colorMode = null, isSpinning = false }) => {
2969
- const iconSpanClasses = parseClasses(['icon', color, size]);
2984
+ const Icon = ({ testId = null, containerTestId = null, cssClasses = null, containerCssClasses = null, style = null, containerStyle = null, iconLabel, text = null, color = null, size = null, colorMode = null, isSpinning = false }) => {
2985
+ const iconContainerClasses = parseClasses([
2986
+ 'icon',
2987
+ color,
2988
+ size,
2989
+ containerCssClasses
2990
+ ]);
2970
2991
  const iconClasses = parseClasses([
2971
2992
  'mdi',
2972
2993
  `mdi-${iconLabel}`,
2973
2994
  colorMode ? `mdi-${colorMode}` : null,
2974
2995
  isSpinning ? 'mdi-spin' : null,
2975
- size ? `mdi-${IconSizeEnum[size]}px` : 'mdi-24px'
2996
+ size ? `mdi-${IconSizeEnum[size]}px` : 'mdi-24px',
2997
+ cssClasses
2976
2998
  ]);
2977
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
2999
+ const iconContainertestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : parseTestId({
2978
3000
  tag: 'icon',
2979
3001
  parsedClasses: iconClasses,
2980
3002
  rules: [
2981
3003
  {
2982
- usedRegExp: /mdi-|mdi--/gm,
2983
- regExpReplacer: ''
3004
+ regExp: /mdi-|mdi--/gm,
3005
+ replacer: ''
2984
3006
  },
2985
3007
  {
2986
- usedRegExp: /mdi /gm,
2987
- regExpReplacer: '-'
3008
+ regExp: /mdi /gm,
3009
+ replacer: '-'
2988
3010
  }
2989
3011
  ],
2990
3012
  separator: '-'
2991
3013
  });
2992
- const _internalTestId = `${_testId}-i`;
2993
- const iconComponent = (React.createElement("span", { "data-testid": _testId, style: style !== null && style !== void 0 ? style : undefined, className: iconSpanClasses },
2994
- React.createElement("i", { "data-testid": _internalTestId, className: iconClasses }),
3014
+ const iconTestId = testId !== null && testId !== void 0 ? testId : `${iconContainertestId}-i`;
3015
+ const iconComponent = (React.createElement("span", { "data-testid": iconContainertestId, className: iconContainerClasses, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined },
3016
+ React.createElement("i", { "data-testid": iconTestId, className: iconClasses, style: style !== null && style !== void 0 ? style : undefined }),
2995
3017
  text ? React.createElement("span", null, text) : null));
2996
3018
  return text ? generateIconContainer(iconComponent, color) : iconComponent;
2997
3019
  };
2998
3020
 
2999
- const Input = ({ testId = null, type, text = null, isDisabled = false, isReadonly = false, style = null, color = null, size = null, isRounded = null, isHovered = null, isFocused = null, onClick = null, onChange = null }) => {
3021
+ const Input = ({ testId = null, cssClasses = null, style = null, type, text = null, isDisabled = false, isReadonly = false, color = null, size = null, isRounded = null, isHovered = null, isFocused = null, onClick = null, onChange = null }) => {
3000
3022
  const inputClasses = parseClasses([
3001
3023
  'input',
3002
3024
  color,
3003
3025
  size,
3004
3026
  isRounded ? 'is-rounded' : null,
3005
3027
  isHovered ? 'is-hovered' : null,
3006
- isFocused ? 'is-focused' : null
3028
+ isFocused ? 'is-focused' : null,
3029
+ cssClasses
3007
3030
  ]);
3008
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
3031
+ const inputTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3009
3032
  tag: 'input',
3010
3033
  parsedClasses: inputClasses
3011
3034
  });
3012
- return (React.createElement("input", { "data-testid": _testId, type: type, defaultValue: text !== null && text !== void 0 ? text : undefined, disabled: isDisabled, readOnly: isReadonly, style: style !== null && style !== void 0 ? style : undefined, className: inputClasses, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }));
3035
+ return (React.createElement("input", { "data-testid": inputTestId, type: type, defaultValue: text !== null && text !== void 0 ? text : undefined, disabled: isDisabled, readOnly: isReadonly, className: inputClasses, style: style !== null && style !== void 0 ? style : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }));
3013
3036
  };
3014
3037
 
3015
- const TextArea = ({ testId = null, text = null, cols = null, rows = null, isDisabled = false, isReadonly = false, isFixedSize = false, style = null, color = null, size = null, isHovered = null, isFocused = null, onClick = null, onChange = null }) => {
3038
+ const TextArea = ({ testId = null, cssClasses = null, style = null, text = null, cols = null, rows = null, isDisabled = false, isReadonly = false, isFixedSize = false, color = null, size = null, isHovered = null, isFocused = null, onClick = null, onChange = null }) => {
3016
3039
  const textAreaClasses = parseClasses([
3017
3040
  'textarea',
3018
3041
  color,
3019
3042
  size,
3020
3043
  isHovered ? 'is-hovered' : null,
3021
3044
  isFocused ? 'is-focused' : null,
3022
- isFixedSize ? 'has-fixed-size' : null
3045
+ isFixedSize ? 'has-fixed-size' : null,
3046
+ cssClasses
3023
3047
  ]);
3024
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
3048
+ const textAreaTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3025
3049
  tag: 'textarea',
3026
3050
  parsedClasses: textAreaClasses,
3027
3051
  rules: [
3028
3052
  {
3029
- usedRegExp: /textarea/gm,
3030
- regExpReplacer: ''
3053
+ regExp: /textarea/gm,
3054
+ replacer: ''
3031
3055
  },
3032
3056
  {
3033
- usedRegExp: /is-|has-/gm,
3034
- regExpReplacer: '-'
3057
+ regExp: /is-|has-/gm,
3058
+ replacer: '-'
3035
3059
  }
3036
3060
  ]
3037
3061
  });
3038
- return (React.createElement("textarea", { "data-testid": _testId, defaultValue: text !== null && text !== void 0 ? text : undefined, cols: cols !== null && cols !== void 0 ? cols : undefined, rows: rows !== null && rows !== void 0 ? rows : undefined, disabled: isDisabled, readOnly: isReadonly, style: style !== null && style !== void 0 ? style : undefined, className: textAreaClasses, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }));
3062
+ return (React.createElement("textarea", { "data-testid": textAreaTestId, defaultValue: text !== null && text !== void 0 ? text : undefined, cols: cols !== null && cols !== void 0 ? cols : undefined, rows: rows !== null && rows !== void 0 ? rows : undefined, disabled: isDisabled, readOnly: isReadonly, className: textAreaClasses, style: style !== null && style !== void 0 ? style : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }));
3039
3063
  };
3040
3064
 
3041
- const Delete = ({ testId = null, style = null, size = null, onClick = null }) => {
3042
- const deleteClasses = parseClasses(['delete', size]);
3043
- const _testId = testId !== null && testId !== void 0 ? testId : parseTestId({
3065
+ const Delete = ({ testId = null, cssClasses = null, style = null, size = null, onClick = null }) => {
3066
+ const deleteClasses = parseClasses(['delete', size, cssClasses]);
3067
+ const deleteTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3044
3068
  tag: 'delete',
3045
3069
  parsedClasses: deleteClasses
3046
3070
  });
3047
- return (React.createElement("button", { "data-testid": _testId, style: style !== null && style !== void 0 ? style : undefined, className: deleteClasses, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }));
3071
+ return (React.createElement("button", { "data-testid": deleteTestId, className: deleteClasses, style: style !== null && style !== void 0 ? style : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }));
3048
3072
  };
3049
3073
 
3050
- const Select = ({ testId = null, showOptions = 1, options = [], isMultiple = false, color = null, size = null, isRounded = null, isHovered = null, isFocused = null, onClick = null }) => {
3051
- const selectClasses = parseClasses([
3074
+ const Select = ({ testId = null, containerTestId = null, cssClasses = null, containerCssClasses = null, style = null, containerStyle = null, options = [], showOptions = 1, isMultiple = false, color = null, size = null, isRounded = null, isHovered = null, isFocused = null, onClick = null }) => {
3075
+ const containerSelectClasses = parseClasses([
3052
3076
  'select',
3053
3077
  color,
3054
3078
  size,
3055
3079
  isMultiple ? 'is-multiple' : null,
3056
3080
  isRounded ? 'is-rounded' : null,
3057
3081
  isHovered ? 'is-hovered' : null,
3058
- isFocused ? 'is-focused' : null
3082
+ isFocused ? 'is-focused' : null,
3083
+ containerCssClasses
3059
3084
  ]);
3060
3085
  const selectTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3061
3086
  tag: 'select',
3062
- parsedClasses: selectClasses
3087
+ parsedClasses: containerSelectClasses
3063
3088
  });
3064
- return (React.createElement("section", { "data-testid": `${selectTestId}-container`, className: selectClasses },
3065
- React.createElement("select", { multiple: isMultiple, size: showOptions, "data-testid": selectTestId }, options.map(({ id, name, selected }, i) => (React.createElement("option", { "data-testid": `${selectTestId}-option-${i}`, key: id.toString(), selected: selected !== null && selected !== void 0 ? selected : false, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }, name))))));
3089
+ const containerSelectTestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : `${selectTestId}-container`;
3090
+ return (React.createElement("section", { "data-testid": containerSelectTestId, className: containerSelectClasses, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined },
3091
+ React.createElement("select", { "data-testid": selectTestId, className: cssClasses !== null && cssClasses !== void 0 ? cssClasses : undefined, style: style !== null && style !== void 0 ? style : undefined, multiple: isMultiple, size: showOptions }, options.map(({ id, name, selected }, i) => (React.createElement("option", { "data-testid": `${selectTestId}-option-${i}`, key: id.toString(), defaultChecked: selected !== null && selected !== void 0 ? selected : false, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }, name))))));
3066
3092
  };
3067
3093
 
3068
- const File = ({ testId = null, fileName = null, uploadIcon = { iconLabel: 'upload' }, uploadText = 'Choose a file…', style = null, buttonOnRight = false, isFullWidth = false, isBoxed = false, color = null, size = null, onClick = null }) => {
3069
- const fileClasses = parseClasses([
3094
+ const File = ({ testId = null, containerTestId = null, cssClasses = null, containerCssClasses = null, style = null, containerStyle = null, fileName = null, uploadIcon = { iconLabel: 'upload' }, uploadText = 'Choose a file…', buttonOnRight = false, isFullWidth = false, isBoxed = false, color = null, size = null, onClick = null }) => {
3095
+ const fileContainerClasses = parseClasses([
3070
3096
  'file',
3071
3097
  fileName ? 'has-name' : null,
3072
3098
  buttonOnRight ? 'is-right' : null,
3073
3099
  isFullWidth ? 'is-fullwidth' : null,
3074
3100
  isBoxed ? 'is-boxed' : null,
3075
3101
  color,
3076
- size
3102
+ size,
3103
+ containerCssClasses
3077
3104
  ]);
3078
- const fileTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3105
+ const fileContainerTestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : parseTestId({
3079
3106
  tag: 'file',
3080
- parsedClasses: fileClasses,
3107
+ parsedClasses: fileContainerClasses,
3081
3108
  rules: [
3082
3109
  {
3083
- usedRegExp: /has/gm,
3084
- regExpReplacer: '-has'
3110
+ regExp: /has/gm,
3111
+ replacer: '-has'
3085
3112
  },
3086
3113
  {
3087
- usedRegExp: /is|file/gm,
3088
- regExpReplacer: ''
3114
+ regExp: /is|file/gm,
3115
+ replacer: ''
3089
3116
  }
3090
3117
  ]
3091
3118
  });
3092
- const fileInputTestId = `${fileTestId}-input`;
3093
- return (React.createElement("section", { "data-testid": fileTestId, className: fileClasses, style: style !== null && style !== void 0 ? style : undefined },
3119
+ const fileInputClasses = cssClasses !== null && cssClasses !== void 0 ? cssClasses : 'file-input';
3120
+ const fileInputTestId = testId !== null && testId !== void 0 ? testId : `${fileContainerTestId}-input`;
3121
+ return (React.createElement("section", { "data-testid": fileContainerTestId, className: fileContainerClasses, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined },
3094
3122
  React.createElement("label", { className: 'file-label' },
3095
- React.createElement("input", { "data-testid": fileInputTestId, className: 'file-input', type: 'file', name: 'resume', onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }),
3123
+ React.createElement("input", { "data-testid": fileInputTestId, type: 'file', name: 'resume', className: fileInputClasses, style: style !== null && style !== void 0 ? style : undefined, onClick: onClick !== null && onClick !== void 0 ? onClick : undefined }),
3096
3124
  React.createElement("span", { className: 'file-cta' },
3097
3125
  uploadIcon ? React.createElement(Icon, Object.assign({}, uploadIcon)) : null,
3098
3126
  React.createElement("span", { className: 'file-label' }, uploadText)),
3099
3127
  fileName ? React.createElement("span", { className: 'file-name' }, fileName) : null)));
3100
3128
  };
3101
3129
 
3130
+ const parseContentTestId = (content) => {
3131
+ if (typeof content === 'string')
3132
+ return `-${content === null || content === void 0 ? void 0 : content.toString()}`;
3133
+ if (content !== null)
3134
+ return '-with-component';
3135
+ return '';
3136
+ };
3137
+ const CheckBox = ({ testId = null, containerTestId = null, cssClasses = null, containerCssClasses = null, style = null, containerStyle = null, content = null, isDisabled = null, onChange = null }) => {
3138
+ const checkboxContainerClasses = parseClasses([
3139
+ 'checkbox',
3140
+ containerCssClasses
3141
+ ]);
3142
+ const checkboxContainerTestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : parseTestId({
3143
+ tag: 'checkbox-container',
3144
+ parsedClasses: parseContentTestId(content)
3145
+ });
3146
+ const checkboxTestId = testId !== null && testId !== void 0 ? testId : parseTestId({
3147
+ tag: 'checkbox',
3148
+ parsedClasses: parseContentTestId(content)
3149
+ });
3150
+ return (React.createElement("label", { "data-testid": checkboxContainerTestId, className: checkboxContainerClasses, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined },
3151
+ React.createElement("input", { "data-testid": checkboxTestId, type: 'checkbox', className: cssClasses !== null && cssClasses !== void 0 ? cssClasses : undefined, style: style !== null && style !== void 0 ? style : undefined, disabled: isDisabled !== null && isDisabled !== void 0 ? isDisabled : false, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }),
3152
+ content));
3153
+ };
3154
+
3155
+ // PARSERS
3156
+ const renderRadioButton = (config, index) => {
3157
+ const { testId = null, label, name, isChecked = false, isDisabled = false, style = null, onChange } = config;
3158
+ const radioButtonTestId = testId !== null && testId !== void 0 ? testId : `test-radio-button-item-${index}`;
3159
+ return (React.createElement("label", { key: index, className: 'radio' },
3160
+ React.createElement("input", { "data-testid": radioButtonTestId, type: 'radio', style: style !== null && style !== void 0 ? style : undefined, name: name, defaultChecked: isChecked, disabled: isDisabled, onChange: onChange }),
3161
+ label));
3162
+ };
3163
+ const RadioButton = ({ containerTestId = null, containerCssClasses = null, containerStyle = null, options, name, onChange = null }) => {
3164
+ const radioButtonContainerClasses = parseClasses([
3165
+ 'control',
3166
+ containerCssClasses
3167
+ ]);
3168
+ const radioButtonContainerTestId = containerTestId !== null && containerTestId !== void 0 ? containerTestId : parseTestId({
3169
+ tag: 'container-',
3170
+ parsedClasses: radioButtonContainerClasses
3171
+ });
3172
+ return (React.createElement("section", { "data-testid": radioButtonContainerTestId, className: radioButtonContainerClasses, style: containerStyle !== null && containerStyle !== void 0 ? containerStyle : undefined }, options.map((_option, i) => renderRadioButton(Object.assign(Object.assign({}, _option), { name, onChange: onChange !== null && onChange !== void 0 ? onChange : undefined }), i))));
3173
+ };
3174
+
3102
3175
  exports.Block = Block;
3103
3176
  exports.Box = Box;
3104
3177
  exports.Button = Button;
3178
+ exports.Checkbox = CheckBox;
3105
3179
  exports.Column = Column;
3106
3180
  exports.Delete = Delete;
3107
3181
  exports.File = File;
3108
3182
  exports.Icon = Icon;
3109
3183
  exports.Input = Input;
3110
3184
  exports.ProgressBar = ProgressBar;
3185
+ exports.RadioButton = RadioButton;
3111
3186
  exports.Select = Select;
3112
3187
  exports.Tag = Tag;
3113
3188
  exports.TextArea = TextArea;