reactive-bulma 1.20.0 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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;